{"version":3,"file":"js/application-c80bf715f67d5d425bed.js","mappings":"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,MAAO,UACPjX,MAAO,WACN,CACDiX,MAAO,UACPjX,MAAO,WACN,CACDiX,MAAO,8BACPjX,MAAO,wBACN,CACDiX,MAAO,aACPjX,MAAO,cACN,CACDiX,MAAO,cACPjX,MAAO,eACN,CACDiX,MAAO,gBACPjX,MAAO,iBACN,CACDiX,MAAO,4BACPjX,MAAO,sBACN,CACDiX,MAAO,0BACPjX,MAAO,qBACN,CACDiX,MAAO,cACPjX,MAAO,eACN,CACDiX,MAAO,UACPjX,MAAO,WACN,CACDiX,MAAO,gBACPjX,MAAO,iBACN,CACDiX,MAAO,cACPjX,MAAO,eACN,CACDiX,MAAO,WACPjX,MAAO,YACN,CACDiX,MAAO,6CACPjX,MAAO,sBACN,CACDiX,MAAO,iCACPjX,MAAO,2BACN,CACDiX,MAAO,WACPjX,MAAO,YACN,CACDiX,MAAO,+BACPjX,MAAO,0BACN,CACDiX,MAAO,UACPjX,MAAO,WACN,CACDiX,MAAO,WACPjX,MAAO,YACN,CACDiX,MAAO,wBACPjX,MAAO,mBACN,CACDiX,MAAO,UACPjX,MAAO,WACN,CACDiX,MAAO,QACPjX,MAAO,SACN,CACDiX,MAAO,QACPjX,MAAO,SACN,CACDiX,MAAO,UACPjX,MAAO,WACN,CACDiX,MAAO,OACPjX,MAAO,QACN,CACDiX,MAAO,MACPjX,MAAO,QAGImuG,GAAoC,CAAC,CAChDl3F,MAAO,cACPjX,MAAO,CACLouG,eAAgB,cAChB75C,OAAQ,UACR85C,QAAS,OAEV,CACDp3F,MAAO,UACPjX,MAAO,CACLouG,eAAgB,UAChB75C,OAAQ,UACR85C,QAAS,MAEV,CACDp3F,MAAO,eACPjX,MAAO,CACLouG,eAAgB,eAChB75C,OAAQ,OACR85C,QAAS,MAEV,CACDp3F,MAAO,QACPjX,MAAO,CACLouG,eAAgB,KAChB75C,OAAQ,OACR85C,QAAS,UAEV,CACDp3F,MAAO,UACPjX,MAAO,CACLouG,eAAgB,UAChB75C,OAAQ,cACR85C,QAAS,MAEV,CACDp3F,MAAO,aACPjX,MAAO,CACLouG,eAAgB,aAChB75C,OAAQ,WACR85C,QAAS,OAEV,CACDp3F,MAAO,YACPjX,MAAO,CACLouG,eAAgB,YAChB75C,OAAQ,QACR85C,QAAS,MAEV,CACDp3F,MAAO,8BACPjX,MAAO,CACLouG,eAAgB,OAChB75C,OAAQ,gBACR85C,QAAS,QAEV,CACDp3F,MAAO,aACPjX,MAAO,CACLouG,eAAgB,aAChB75C,OAAQ,YACR85C,QAAS,OAEV,CACDp3F,MAAO,cACPjX,MAAO,CACLouG,eAAgB,cAChB75C,OAAQ,WACR85C,QAAS,MAEV,CACDp3F,MAAO,gBACPjX,MAAO,CACLouG,eAAgB,gBAChB75C,OAAQ,QACR85C,QAAS,MAEV,CACDp3F,MAAO,4BACPjX,MAAO,CACLouG,eAAgB,OAChB75C,OAAQ,UACR85C,QAAS,MAEV,CACDp3F,MAAO,0BACPjX,MAAO,CACLouG,eAAgB,MAChB75C,OAAQ,WACR85C,QAAS,MAEV,CACDp3F,MAAO,cACPjX,MAAO,CACLouG,eAAgB,cAChB75C,OAAQ,WACR85C,QAAS,OAEV,CACDp3F,MAAO,UACPjX,MAAO,CACLouG,eAAgB,UAChB75C,OAAQ,MACR85C,QAAS,OAEV,CACDp3F,MAAO,gBACPjX,MAAO,CACLouG,eAAgB,gBAChB75C,OAAQ,YACR85C,QAAS,OAEV,CACDp3F,MAAO,cACPjX,MAAO,CACLouG,eAAgB,cAChB75C,OAAQ,SACR85C,QAAS,MAEV,CACDp3F,MAAO,WACPjX,MAAO,CACLouG,eAAgB,WAChB75C,OAAQ,KACR85C,QAAS,MAEV,CACDp3F,MAAO,6CACPjX,MAAO,CACLouG,eAAgB,kBAChB75C,OAAQ,QACR85C,QAAS,OAEV,CACDp3F,MAAO,iCACPjX,MAAO,CACLouG,eAAgB,OAChB75C,OAAQ,eACR85C,QAAS,MAEV,CACDp3F,MAAO,KACPjX,MAAO,CACLouG,eAAgB,KAChB75C,OAAQ,MACR85C,QAAS,SAEV,CACDp3F,MAAO,WACPjX,MAAO,CACLouG,eAAgB,WAChB75C,OAAQ,SACR85C,QAAS,MAEV,CACDp3F,MAAO,+BACPjX,MAAO,CACLouG,eAAgB,MAChB75C,OAAQ,aACR85C,QAAS,OAEV,CACDp3F,MAAO,UACPjX,MAAO,CACLouG,eAAgB,UAChB75C,OAAQ,QACR85C,QAAS,MAEV,CACDp3F,MAAO,WACPjX,MAAO,CACLouG,eAAgB,WAChB75C,OAAQ,cACR85C,QAAS,MAEV,CACDp3F,MAAO,qCACPjX,MAAO,CACLouG,eAAgB,QAChB75C,OAAQ,eACR85C,QAAS,OAEV,CACDp3F,MAAO,wBACPjX,MAAO,CACLouG,eAAgB,MAChB75C,OAAQ,UACR85C,QAAS,OAEV,CACDp3F,MAAO,UACPjX,MAAO,CACLouG,eAAgB,UAChB75C,OAAQ,eACR85C,QAAS,MAEV,CACDp3F,MAAO,QACPjX,MAAO,CACLouG,eAAgB,QAChB75C,OAAQ,UACR85C,QAAS,IAEV,CACDp3F,MAAO,QACPjX,MAAO,CACLouG,eAAgB,QAChB75C,OAAQ,kBACR85C,QAAS,MAEV,CACDp3F,MAAO,UACPjX,MAAO,CACLouG,eAAgB,UAChB75C,OAAQ,yBACR85C,QAAS,OAEV,CACDp3F,MAAO,OACPjX,MAAO,CACLouG,eAAgB,OAChB75C,OAAQ,2CACR85C,QAAS,MAEV,CACDp3F,MAAO,MACPjX,MAAO,CACLouG,eAAgB,MAChB75C,OAAQ,YACR85C,QAAS,QAEV,CACDp3F,MAAO,eACPjX,MAAO,CACLouG,eAAgB,eAChB75C,OAAQ,UACR85C,QAAS,MAEV,CACDp3F,MAAO,eACPjX,MAAO,CACLouG,eAAgB,eAChB75C,OAAQ,gBACR85C,QAAS,OAEV,CACDp3F,MAAO,cACPjX,MAAO,CACLouG,eAAgB,cAChB75C,OAAQ,OACR85C,QAAS,OAEV,CACDp3F,MAAO,YACPjX,MAAO,CACLouG,eAAgB,YAChB75C,OAAQ,YACR85C,QAAS,OAEV,CACDp3F,MAAO,aACPjX,MAAO,CACLouG,eAAgB,aAChB75C,OAAQ,OACR85C,QAAS,KAEV,CACDp3F,MAAO,oBACPjX,MAAO,CACLouG,eAAgB,oBAChB75C,OAAQ,cACR85C,QAAS,MAEV,CACDp3F,MAAO,aACPjX,MAAO,CACLo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","sources":["webpack://chemotion/./app/packs/entrypoints/application.js","webpack://chemotion/./app/packs/src/apps/admin/AdminNavigation.js","webpack://chemotion/./app/packs/src/fetchers/AdminFetcher.js","webpack://chemotion/./app/packs/src/apps/admin/AdminDashboard.js","webpack://chemotion/./app/packs/src/apps/admin/generic/GenericAdminModal.js","webpack://chemotion/./app/packs/src/apps/admin/UserManagement.js","webpack://chemotion/./app/packs/src/apps/admin/DeleteGroupDeviceButton.js","webpack://chemotion/./app/packs/src/apps/admin/AdminGroupElement.js","webpack://chemotion/./app/packs/src/apps/admin/GroupsDevices.js","webpack://chemotion/./app/packs/src/apps/admin/MessagePublish.js","webpack://chemotion/./app/packs/src/apps/admin/OlsTerms.js","webpack://chemotion/./app/packs/src/apps/admin/MatrixManagement.js","webpack://chemotion/./app/packs/src/apps/admin/textTemplates/TextTemplate.js","webpack://chemotion/./app/packs/src/apps/admin/textTemplates/TextTemplateContainer.js","webpack://chemotion/./app/packs/src/apps/admin/DelayedJobs.js","webpack://chemotion/./app/packs/src/fetchers/ChemSpectraFetcher.js","webpack://chemotion/./app/packs/src/apps/admin/ChemSpectraLayouts.js","webpack://chemotion/./app/packs/src/apps/admin/devices/DevicePropertiesTab.js","webpack://chemotion/./app/packs/src/apps/admin/devices/DeviceUserGroupsTab.js","webpack://chemotion/./app/packs/src/apps/admin/devices/DeviceDataCollectorTab.js","webpack://chemotion/./app/packs/src/apps/admin/devices/DeviceNovncTab.js","webpack://chemotion/./app/packs/src/apps/admin/devices/DeviceMetadataTab.js","webpack://chemotion/./app/packs/src/apps/admin/devices/DeviceModal.js","webpack://chemotion/./app/packs/src/apps/admin/devices/DevicesList.js","webpack://chemotion/./app/packs/src/apps/admin/ThirdPartyApp.js","webpack://chemotion/./app/packs/src/apps/admin/AdminHome.js","webpack://chemotion/./app/packs/src/apps/admin/index.js","webpack://chemotion/./app/packs/src/apps/admin/textTemplates/TextTemplateIcon.js","webpack://chemotion/./app/packs/src/apps/chemspectra/ChemSpectra.js","webpack://chemotion/./app/packs/src/apps/chemspectra/ChemSpectraEditor.js","webpack://chemotion/./app/packs/src/apps/commandAndControl/FocusNovnc.js","webpack://chemotion/./app/packs/src/apps/commandAndControl/Navigation.js","webpack://chemotion/./app/packs/src/apps/commandAndControl/NovncStatus.js","webpack://chemotion/./app/packs/src/apps/commandAndControl/CnC.js","webpack://chemotion/./app/packs/src/apps/commandAndControl/index.js","webpack://chemotion/./app/packs/src/fetchers/ConverterFetcher.js","webpack://chemotion/./app/packs/src/apps/converter/ConverterAdmin.js","webpack://chemotion/./app/packs/src/apps/generic/GenericDatasetsAdmin.js","webpack://chemotion/./app/packs/src/apps/generic/GenericElementsAdmin.js","webpack://chemotion/./app/packs/src/apps/generic/GenericSegmentsAdmin.js","webpack://chemotion/./app/packs/src/apps/generic/GenericUtils.js","webpack://chemotion/./app/packs/src/apps/generic/SyncButton.js","webpack://chemotion/./app/packs/src/apps/generic/Utils.js","webpack://chemotion/./app/packs/src/libHome/homeRoutes.js","webpack://chemotion/./app/packs/src/repoHome/NavHead.js","webpack://chemotion/./app/packs/src/libHome/Navigation.js","webpack://chemotion/./app/packs/src/stores/alt/repo/stores/EmbargoStore.js","webpack://chemotion/./app/packs/src/repoHome/RepoEmbargoDetails.js","webpack://chemotion/./app/packs/src/repoHome/RepoEmbargoModal.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/EmbargoCommentsModal.js","webpack://chemotion/./app/packs/src/repoHome/RepoEmbargoOverview.js","webpack://chemotion/./app/packs/src/repoHome/RepoEmbargo.js","webpack://chemotion/./app/packs/src/repoHome/RepoCollectionDetails.js","webpack://chemotion/./app/packs/src/repoHome/RepoCollection.js","webpack://chemotion/./app/packs/src/repoHome/RepoCardStaticsBoard.js","webpack://chemotion/./app/packs/src/repoHome/RepoCardLatestPublish.js","webpack://chemotion/./app/packs/src/repoHome/RepoCardIntro.js","webpack://chemotion/./app/packs/src/repoHome/RepoCardMoleculeArchive.js","webpack://chemotion/./app/packs/src/repoHome/RepoCardReviewerIntro.js","webpack://chemotion/./app/packs/src/components/chemrepo/search/PublicSearchIcons.js","webpack://chemotion/./app/packs/src/repoHome/RepoPartners.js","webpack://chemotion/./app/packs/src/repoHome/RepoHome.js","webpack://chemotion/./app/packs/src/repoHome/RepoElementDetails.js","webpack://chemotion/./app/packs/src/repoHome/RepoReactionList.js","webpack://chemotion/./app/packs/src/repoHome/RepoMoleculeList.js","webpack://chemotion/./app/packs/src/repoHome/RepoPubCommon.js","webpack://chemotion/./app/packs/src/repoHome/RepoMoleculeArchive.js","webpack://chemotion/./app/packs/src/repoHome/RepoPubl.js","webpack://chemotion/./app/packs/src/repoHome/RepoReviewDetails.js","webpack://chemotion/./app/packs/src/repoHome/RepoReview.js","webpack://chemotion/./app/packs/src/repoHome/RepoAbout.js","webpack://chemotion/./app/packs/src/repoHome/RepoContact.js","webpack://chemotion/./app/packs/src/repoHome/RepoDirective.js","webpack://chemotion/./app/packs/src/repoHome/RepoPreservation.js","webpack://chemotion/./app/packs/src/repoHome/RepoImprint.js","webpack://chemotion/./app/packs/src/components/chemrepo/BackSoonPage.js","webpack://chemotion/./app/packs/src/repoHome/RepoNewsroom.js","webpack://chemotion/./app/packs/src/repoHome/RepoHowTo.js","webpack://chemotion/./app/packs/src/stores/alt/repo/stores/RStore.js","webpack://chemotion/./app/packs/src/repoHome/RepoGenericHubDesc.js","webpack://chemotion/./app/packs/src/repoHome/RepoGenericHub.js","webpack://chemotion/./app/packs/src/components/chemrepo/matomo.js","webpack://chemotion/./app/packs/src/libHome/NavFooter.js","webpack://chemotion/./app/packs/src/components/chemrepo/Footer.js","webpack://chemotion/./app/packs/src/components/chemrepo/SysInfo.js","webpack://chemotion/./app/packs/src/apps/home/Home.js","webpack://chemotion/./app/packs/src/apps/moleculeModerator/MoleculeModeratorComponent.js","webpack://chemotion/./app/packs/src/apps/moleculeModerator/MoleculeModerator.js","webpack://chemotion/./app/packs/src/apps/moleculeModerator/index.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/ViewSpectra.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/literature/CitationTools.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/literature/CitationType.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/literature/LiteratureCommon.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/ImageAnnotationEditButton.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/ImageAnnotationModalSVG.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/SaveEditedImageWarning.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/AttachmentList.js","webpack://chemotion/./app/packs/src/components/managingActions/SharingShortcuts.js","webpack://chemotion/./app/packs/src/components/managingActions/ManagingModalSharing.js","webpack://chemotion/./app/packs/src/apps/mydb/collections/UserInfoIcon.js","webpack://chemotion/./app/packs/src/apps/mydb/collections/PermissionIcons.js","webpack://chemotion/./app/packs/src/apps/mydb/collections/MyCollections.js","webpack://chemotion/./app/packs/src/apps/mydb/collections/MySharedCollections.js","webpack://chemotion/./app/packs/src/apps/mydb/collections/SharedWithMeCollections.js","webpack://chemotion/./app/packs/src/apps/mydb/collections/SyncWithMeCollections.js","webpack://chemotion/./app/packs/src/utilities/textHelper.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/tabLayout/TabLayoutCell.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/tabLayout/TabLayoutContainer.js","webpack://chemotion/./app/packs/src/utilities/CollectionTabsHelper.js","webpack://chemotion/./app/packs/src/apps/mydb/collections/CollectionTabs.js","webpack://chemotion/./app/packs/src/apps/mydb/collections/CollectionManagement.js","webpack://chemotion/./app/packs/src/apps/mydb/collections/UserInfos.js","webpack://chemotion/./app/packs/src/components/common/GatePushBtn.js","webpack://chemotion/./app/packs/src/apps/mydb/collections/CollectionSubtree.js","webpack://chemotion/./app/packs/src/apps/mydb/collections/CollectionTree.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/ElementAllCheckbox.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/ElementContainer.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/ElementCheckbox.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/labels/ElementCollectionLabels.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/labels/ElementAnalysesLabels.js","webpack://chemotion/./app/packs/src/components/common/SvgWithPopover.js","webpack://chemotion/./app/packs/src/utilities/CommentHelper.js","webpack://chemotion/./app/packs/src/components/comments/CommentIcon.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/ElementsTableEntries.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/labels/ElementReactionLabels.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/labels/ElementWellplateLabels.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/labels/GenericElementLabels.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/labels/ChemrepoLabels.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/labels/ComputedPropLabel.js","webpack://chemotion/./app/packs/src/components/common/ClipboardCopyText.js","webpack://chemotion/./app/packs/src/components/common/SampleName.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/ElementsTableSampleEntries.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/ElementsTableGroupedEntries.js","webpack://chemotion/./app/packs/src/models/cellLine/CellLineGroup.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/cellLine/CellLineItemText.js","webpack://chemotion/./app/packs/src/models/cellLine/CellLinePropTypes.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/cellLine/CellLineItemEntry.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/cellLine/CellLineEntry.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/cellLine/CellLineContainer.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/ElementsTable.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/ElementsTableSettings.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/list/ElementsList.js","webpack://chemotion/./app/packs/src/fetchers/ComputeTaskFetcher.js","webpack://chemotion/./app/packs/src/stores/alt/actions/ComputeTaskActions.js","webpack://chemotion/./app/packs/src/stores/alt/stores/ComputeTaskStore.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/computeTasks/ComputeTask.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/computeTasks/ComputeTaskContainer.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/devices/DeviceManagement.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/devices/DeviceDetails.js","webpack://chemotion/./app/packs/src/components/QuillViewer.js","webpack://chemotion/./app/packs/src/components/common/PanelHeader.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/formats/FormatComponent.js","webpack://chemotion/./app/packs/src/utilities/DndControl.js","webpack://chemotion/./app/packs/src/stores/alt/stores/ReportStore.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/formats/FormatContainer.js","webpack://chemotion/./app/packs/src/components/common/ConfirmClose.js","webpack://chemotion/./app/packs/src/stores/alt/actions/TextTemplateActions.js","webpack://chemotion/./app/packs/src/stores/alt/stores/TextTemplateStore.js","webpack://chemotion/./app/packs/src/components/staticDropdownOptions/options.js","webpack://chemotion/./app/packs/src/components/reactQuill/ReactQuill.js","webpack://chemotion/./app/packs/src/components/reactQuill/DynamicToolbarEditor.js","webpack://chemotion/./app/packs/src/components/reactQuill/ToolbarIcon.js","webpack://chemotion/./app/packs/src/components/reactQuill/BaseToolbar.js","webpack://chemotion/./app/packs/src/components/reactQuill/ToolbarDropdown.js","webpack://chemotion/./app/packs/src/components/textTemplateToolbar/TextTemplateToolbar.js","webpack://chemotion/./app/packs/src/components/textTemplateToolbar/ToolbarTemplateCreator.js","webpack://chemotion/./app/packs/src/components/container/AnalysisEditor.js","webpack://chemotion/./app/packs/src/components/container/ContainerComponent.js","webpack://chemotion/./app/packs/src/components/generic/EditorAnalysisBtn.js","webpack://chemotion/./app/packs/src/components/generic/GenericContainer.js","webpack://chemotion/./app/packs/src/components/generic/GenericContainerGroup.js","webpack://chemotion/./app/packs/src/components/generic/GenericElDetailsContainers.js","webpack://chemotion/./app/packs/src/components/common/CollectionSelect.js","webpack://chemotion/./app/packs/src/components/common/CopyElementModal.js","webpack://chemotion/./app/packs/src/components/generic/GenericAttachments.js","webpack://chemotion/./app/packs/src/components/generic/RevisionViewerBtn.js","webpack://chemotion/./app/packs/src/components/generic/GenericSGDetails.js","webpack://chemotion/./app/packs/src/components/generic/SegmentDetails.js","webpack://chemotion/./app/packs/src/fetchers/CalendarEntryFetcher.js","webpack://chemotion/./app/packs/src/stores/alt/actions/CalendarActions.js","webpack://chemotion/./app/packs/src/stores/alt/stores/CalendarStore.js","webpack://chemotion/./app/packs/src/components/calendar/OpenCalendarButton.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/ElementDetailSortTab.js","webpack://chemotion/./app/packs/src/components/generic/GenericElDetails.js","webpack://chemotion/./app/packs/src/components/computedProps/Highlight.js","webpack://chemotion/./app/packs/src/components/computedProps/CustomAxisLabel.js","webpack://chemotion/./app/packs/src/components/computedProps/ComputedPropsGraph.js","webpack://chemotion/./app/packs/src/components/computedProps/GraphReferenceTable.js","webpack://chemotion/./app/packs/src/components/computedProps/ComputedPropsGraphContainer.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/GraphContainer.js","webpack://chemotion/./app/packs/src/fetchers/LiteraturesFetcher.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/LiteratureDetails.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataHeader.js","webpack://chemotion/./app/packs/src/components/staticDropdownOptions/radar/subjectAreas.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataGeneral.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataCreator.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataCreators.js","webpack://chemotion/./app/packs/src/components/staticDropdownOptions/radar/contributorTypes.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataContributor.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataContributors.js","webpack://chemotion/./app/packs/src/components/staticDropdownOptions/radar/alternateIdentifierTypes.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataAlternateIdentifier.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataAlternateIdentifiers.js","webpack://chemotion/./app/packs/src/components/staticDropdownOptions/radar/relatedIdentifierTypes.js","webpack://chemotion/./app/packs/src/components/staticDropdownOptions/radar/relationTypes.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataRelatedIdentifier.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataRelatedIdentifiers.js","webpack://chemotion/./app/packs/src/components/staticDropdownOptions/radar/controlledRightsList.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataRights.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataRightsHolder.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataRightsList.js","webpack://chemotion/./app/packs/src/components/staticDropdownOptions/radar/funderIdentifierTypes.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataFundingReference.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataFundingReferences.js","webpack://chemotion/./app/packs/src/components/metadata/MetadataContainer.js","webpack://chemotion/./app/packs/src/stores/alt/stores/PredictionStore.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/predictions/ContentInputs.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/predictions/ContentOutputs.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/predictions/Content.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/predictions/PredictionComponent.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/predictions/PredictionContainer.js","webpack://chemotion/./app/packs/src/components/chemrepo/SubmissionCheck.js","webpack://chemotion/./app/packs/src/components/chemrepo/PublishReactionModal.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/labels/ElementResearchPlanLabels.js","webpack://chemotion/./app/packs/src/utilities/metricPrefix.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsMaterials.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsUtils.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsAnalyses.js","webpack://chemotion/./app/packs/src/utilities/MathUtils.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsCellComponents.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariations.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/literature/CitationPanel.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/literature/DetailsTabLiteratures.js","webpack://chemotion/./app/packs/src/components/common/SpectraEditorButton.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/analysesTab/ReactionDetailsContainers.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/analysesTab/SampleDetailsContainersAux.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/analysesTab/SampleDetailsContainersDnd.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/analysesTab/SampleDetailsContainersCom.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/analysesTab/SampleDetailsContainers.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/NumeralInputWithUnitsCompo.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/schemeTab/Material.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/schemeTab/MaterialCalculations.js","webpack://chemotion/./app/packs/src/components/staticDropdownOptions/ionic_liquids.js","webpack://chemotion/./app/packs/src/components/staticDropdownOptions/reagents_kombi.js","webpack://chemotion/./app/packs/src/components/common/ToggleButton.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/schemeTab/MaterialGroup.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/schemeTab/MaterialGroupContainer.js","webpack://chemotion/./app/packs/src/components/lineChart/LineChart.js","webpack://chemotion/./app/packs/src/components/lineChart/LineChartContainer.js","webpack://chemotion/./app/packs/src/components/lineChart/EditableCell.js","webpack://chemotion/./app/packs/src/components/lineChart/EditableTable.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/ReactionDetailsMainProperties.js","webpack://chemotion/./app/packs/src/utilities/reactionPredefined.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/PrivateNoteElement.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/schemeTab/ReactionDetailsPurification.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/schemeTab/ReactionDescriptionEditor.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/schemeTab/GeneralProcedureDnD.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/schemeTab/ReactionDetailsDuration.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/schemeTab/ReactionDetailsScheme.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/propertiesTab/StringTag.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/propertiesTab/ReactionDetailsProperties.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/greenChemistryTab/GreenMaterialGroup.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/greenChemistryTab/GreenMetrics.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/greenChemistryTab/GreenChemistry.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/ReactionDetailsShare.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/ExportSamplesBtn.js","webpack://chemotion/./app/packs/src/components/scifinder/ScifinderSearch.js","webpack://chemotion/./app/packs/src/models/Comment.js","webpack://chemotion/./app/packs/src/fetchers/CommentFetcher.js","webpack://chemotion/./app/packs/src/stores/alt/actions/CommentActions.js","webpack://chemotion/./app/packs/src/stores/alt/stores/CommentStore.js","webpack://chemotion/./app/packs/src/components/comments/HeaderCommentSection.js","webpack://chemotion/./app/packs/src/components/comments/CommentButton.js","webpack://chemotion/./app/packs/src/components/comments/CommentList.js","webpack://chemotion/./app/packs/src/components/comments/CommentSection.js","webpack://chemotion/./app/packs/src/components/common/DeleteComment.js","webpack://chemotion/./app/packs/src/components/comments/CommentDetails.js","webpack://chemotion/./app/packs/src/components/common/CommentModal.js","webpack://chemotion/./app/packs/src/components/chemrepo/ReactionDetailsRepoComment.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reactions/ReactionDetails.js","webpack://chemotion/./app/packs/src/components/common/CheckBoxs.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/Setting.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/SectionReaction.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/SectionSample.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/SectionSiProcedures.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/SectionSiSynthesis.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/SectionSpectrum.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/SectionReactionList.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/SectionSiSynthesisStdRxn.js","webpack://chemotion/./app/packs/src/components/report/SectionDoiList.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/Previews.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/OrdersDnD.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/Orders.js","webpack://chemotion/./app/packs/src/components/common/CommonInput.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/Serials.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/Archives.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/Config.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/Paramize.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/ReportComponent.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/reports/ReportContainer.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/wellplatesTab/EmbeddedWellplate.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/wellplatesTab/ResearchPlanWellplates.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/ResearchPlanMetadata.js","webpack://chemotion/./app/packs/src/utilities/ImageAttachmentFilter.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/attachmentsTab/ResearchPlanDetailsAttachments.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsAddField.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsDropTarget.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsDragSource.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldRichText.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldKetcher.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ImageFileDropHandler.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldImage.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/CustomHeader.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldTableColumnNameModal.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldTableMeasurementExportModal.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldTableSchemasModal.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldTable.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldSample.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldReaction.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsField.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsBody.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsName.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/analysesTab/ResearchPlanDetailsContainers.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/researchPlans/ResearchPlanDetails.js","webpack://chemotion/./app/packs/src/stores/alt/actions/QcActions.js","webpack://chemotion/./app/packs/src/stores/alt/stores/QcStore.js","webpack://chemotion/./app/packs/src/components/pubchem/PubchemSigns.js","webpack://chemotion/./app/packs/src/components/pubchem/PubchemLcss.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/propertiesTab/ElementalComposition.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/NumeralInput.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/propertiesTab/ElementalCompositionCustom.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/propertiesTab/ElementalCompositionGroup.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/propertiesTab/PolymerSection.js","webpack://chemotion/./app/packs/src/components/common/ToggleSection.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/NumericInputUnit.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/propertiesTab/TextRangeWithAddon.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/propertiesTab/SampleSolventGroup.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/propertiesTab/SampleDetailsSolventsDnd.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/propertiesTab/SampleDetailsSolvents.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/propertiesTab/SampleForm.js","webpack://chemotion/./app/packs/src/components/computedProps/SampleComputedProps.js","webpack://chemotion/./app/packs/src/components/computedProps/ComputedPropsContainer.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/summary/eval.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/summary/AreaTitle.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/summary/LineScore.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/summary/common.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/summary/LineSummary.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/summary/AreaSummary.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockTitle.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/helper/QcMolView.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/helper/icon.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/utils/common.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/helper/nmr.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockHnmr.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockCnmr.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockMS.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/helper/ir.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockIr.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockEa.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockConclusion.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/utils/qcs.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/utils/ms.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/utils/nmr.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/components/QcContent.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/utils/ir.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/qcTab/QcMain.js","webpack://chemotion/./app/packs/src/fetchers/NmrSimFetcher.js","webpack://chemotion/./app/packs/src/stores/alt/actions/NmrSimActions.js","webpack://chemotion/./app/packs/src/stores/alt/stores/NmrSimStore.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/nmrSimTab/LineChart.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/nmrSimTab/LineChartWrapper.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/nmrSimTab/NmrdbReference.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/nmrSimTab/NmrSimTab.js","webpack://chemotion/./app/packs/src/utilities/CasValidation.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/FastInput.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/measurementsTab/MeasurementsTable.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/measurementsTab/ConfirmDeletionModal.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/measurementsTab/MeasurementsList.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/measurementsTab/MeasurementsTab.js","webpack://chemotion/./app/packs/src/models/Chemical.js","webpack://chemotion/./app/packs/src/fetchers/ChemicalFetcher.js","webpack://chemotion/./app/packs/src/components/common/CollapseButton.js","webpack://chemotion/./app/packs/src/components/ChemicalTab.js","webpack://chemotion/./app/packs/src/components/chemrepo/PublishSampleModal.js","webpack://chemotion/./app/packs/src/components/chemrepo/SampleDetailsRepoComment.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/samples/SampleDetails.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/screens/analysesTab/ScreenDetailsContainers.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/screens/researchPlansTab/EmbeddedResearchPlanDetails.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/screens/researchPlansTab/ScreenResearchPlans.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/screens/ScreenWellplates.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/screens/ResearchplanFlowEditor.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/screens/ResearchplanFlowDisplay.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/screens/ScreenDetails.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/designerTab/Well.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/designerTab/WellContainer.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/designerTab/WellplateLabels.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/designerTab/WellOverlay.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/designerTab/Wellplate.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/listTab/WellplateList.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/propertiesTab/WellplateSizeDropdown.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/propertiesTab/CustomSizeModal.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/propertiesTab/WellplateProperties.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/analysesTab/WellplateDetailsContainers.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/attachmentsTab/WellplateDetailsAttachments.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/wellplates/WellplateDetails.js","webpack://chemotion/./app/packs/src/models/collection/CollectionUtils.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/cellLines/propertiesTab/CellLineName.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/cellLines/propertiesTab/Amount.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/cellLines/propertiesTab/InvalidPropertyWarning.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/cellLines/propertiesTab/GeneralProperties.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/cellLines/analysesTab/OrderModeHeader.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/cellLines/analysesTab/OrderModeRow.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/cellLines/analysesTab/EditModeHeader.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/cellLines/analysesTab/EditModeRow.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/cellLines/analysesTab/AnalysesContainer.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/cellLines/CellLineDetails.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/details/ElementDetails.js","webpack://chemotion/./app/packs/src/apps/mydb/elements/Elements.js","webpack://chemotion/./app/packs/src/stores/alt/stores/InboxStore.js","webpack://chemotion/./app/packs/src/apps/mydb/inbox/MoveToAnalysisButton.js","webpack://chemotion/./app/packs/src/apps/mydb/inbox/AttachmentContainer.js","webpack://chemotion/./app/packs/src/apps/mydb/inbox/DatasetContainer.js","webpack://chemotion/./app/packs/src/apps/mydb/inbox/Pagination.js","webpack://chemotion/./app/packs/src/apps/mydb/inbox/DeviceBox.js","webpack://chemotion/./app/packs/src/apps/mydb/inbox/UnsortedDataset.js","webpack://chemotion/./app/packs/src/apps/mydb/inbox/UnsortedDatasetModal.js","webpack://chemotion/./app/packs/src/apps/mydb/inbox/UnsortedBox.js","webpack://chemotion/./app/packs/src/apps/mydb/inbox/InboxModal.js","webpack://chemotion/./app/packs/src/components/calendar/CalendarEntryEditor.js","webpack://chemotion/./app/packs/src/components/calendar/CalendarEvent.js","webpack://chemotion/./app/packs/src/components/calendar/Calendar.js","webpack://chemotion/./app/packs/src/components/common/ProgressModal.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/SearchModalFunctions.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/SelectFieldData.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/SelectMapperData.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/AdvancedSearchRow.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/SampleInventoryFieldData.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/AnalysesFieldData.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/MeasurementFieldData.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/DetailSearch.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/SearchResultTabContent.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/SearchResult.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/TextSearch.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/KetcherRailsForm.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/PublicationFieldData.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/PublicationSearchRow.js","webpack://chemotion/./app/packs/src/components/searchModal/SearchModal.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/PublicationSearch.js","webpack://chemotion/./app/packs/src/components/searchModal/forms/NoFormSelected.js","webpack://chemotion/./app/packs/src/components/navigation/search/Search.js","webpack://chemotion/./app/packs/src/components/managingActions/ManagingActionButtons.js","webpack://chemotion/./app/packs/src/fetchers/PermissionsFetcher.js","webpack://chemotion/./app/packs/src/stores/alt/actions/PermissionActions.js","webpack://chemotion/./app/packs/src/stores/alt/stores/PermissionStore.js","webpack://chemotion/./app/packs/src/components/managingActions/ManagingModalCollectionActions.js","webpack://chemotion/./app/packs/src/components/managingActions/ManagingModalDelete.js","webpack://chemotion/./app/packs/src/components/managingActions/ManagingModalRemove.js","webpack://chemotion/./app/packs/src/components/managingActions/ManagingModalTopSecret.js","webpack://chemotion/./app/packs/src/components/managingActions/ManagingActions.js","webpack://chemotion/./app/packs/src/components/contextActions/CreateButton.js","webpack://chemotion/./app/packs/src/components/contextActions/SplitElementBtn.js","webpack://chemotion/./app/packs/src/components/contextActions/ReportUtilButton.js","webpack://chemotion/./app/packs/src/components/contextActions/ModalImport.js","webpack://chemotion/./app/packs/src/components/contextActions/ModalExport.js","webpack://chemotion/./app/packs/src/components/contextActions/ModalReactionExport.js","webpack://chemotion/./app/packs/src/components/contextActions/ModalExportCollection.js","webpack://chemotion/./app/packs/src/components/contextActions/ModalExportRadarCollection.js","webpack://chemotion/./app/packs/src/components/contextActions/ModalImportCollection.js","webpack://chemotion/./app/packs/src/components/contextActions/ExportImportButton.js","webpack://chemotion/./app/packs/src/components/contextActions/ScanCodeButton.js","webpack://chemotion/./app/packs/src/components/contextActions/NoticeButton.js","webpack://chemotion/./app/packs/src/components/contextActions/InboxButton.js","webpack://chemotion/./app/packs/src/utilities/PermissionConst.js","webpack://chemotion/./app/packs/src/components/sampleTaskInbox/SampleTaskNavigationElement.js","webpack://chemotion/./app/packs/src/components/contextActions/ContextActions.js","webpack://chemotion/./app/packs/src/components/navigation/RepoNavHead.js","webpack://chemotion/./app/packs/src/components/navigation/NavigationModal.js","webpack://chemotion/./app/packs/src/components/navigation/Navigation.js","webpack://chemotion/./app/packs/src/components/sampleTaskInbox/SampleTaskCard.js","webpack://chemotion/./app/packs/src/components/sampleTaskInbox/SampleTaskReloadButton.js","webpack://chemotion/./app/packs/src/components/sampleTaskInbox/SampleTaskInbox.js","webpack://chemotion/./app/packs/src/fetchers/ProfilesFetcher.js","webpack://chemotion/./app/packs/src/utilities/UserTemplatesHelpers.js","webpack://chemotion/./app/packs/src/apps/mydb/App.js","webpack://chemotion/./app/packs/src/apps/mydb/routes.js","webpack://chemotion/./app/packs/src/apps/mydb/index.js","webpack://chemotion/./app/packs/src/apps/omniauthCredential/LoginOptions.js","webpack://chemotion/./app/packs/src/apps/omniauthCredential/OmniauthCredential.js","webpack://chemotion/./app/packs/src/apps/omniauthCredential/index.js","webpack://chemotion/./app/packs/src/apps/scifinderCredential/ScifinderCredential.js","webpack://chemotion/./app/packs/src/apps/scifinderCredential/index.js","webpack://chemotion/./app/packs/src/apps/settings/InventoryLabelSettings.js","webpack://chemotion/./app/packs/src/apps/userCounter/UserCounter.js","webpack://chemotion/./app/packs/src/apps/userCounter/index.js","webpack://chemotion/./app/packs/src/components/CitationType.js","webpack://chemotion/./app/packs/src/stores/alt/stores/NotificationStore.js","webpack://chemotion/./app/packs/src/components/Notifications.js","webpack://chemotion/./app/packs/src/components/OlsComponent.js","webpack://chemotion/./app/packs/src/components/Quill2Viewer.js","webpack://chemotion/./app/packs/src/components/QuillEditor.js","webpack://chemotion/./app/packs/src/components/UserLabels.js","webpack://chemotion/./app/packs/src/components/chemrepo/DateInfo.js","webpack://chemotion/./app/packs/src/components/chemrepo/ExactMass.js","webpack://chemotion/./app/packs/src/components/chemrepo/ExtIcon.js","webpack://chemotion/./app/packs/src/components/chemrepo/LicenseIcon.js","webpack://chemotion/./app/packs/src/components/chemrepo/PublicAnchor.js","webpack://chemotion/./app/packs/src/components/chemrepo/PublicCommentModal.js","webpack://chemotion/./app/packs/src/components/chemrepo/PublicLabels.js","webpack://chemotion/./app/packs/src/components/chemrepo/PublicReactionProperties.js","webpack://chemotion/./app/packs/src/components/chemrepo/PublicReactionTlc.js","webpack://chemotion/./app/packs/src/components/chemrepo/UnsealButton.js","webpack://chemotion/./app/packs/src/components/chemrepo/PublishCommon.js","webpack://chemotion/./app/packs/src/components/chemrepo/SVGViewPan.js","webpack://chemotion/./app/packs/src/components/chemrepo/UserCommentModal.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/RepoConst.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/RepoReviewAuthorsModal.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/StateLabel.js","webpack://chemotion/./app/packs/src/components/chemrepo/core/ContactEmail.js","webpack://chemotion/./app/packs/src/components/chemrepo/date-utils.js","webpack://chemotion/./app/packs/src/components/chemrepo/format-utils.js","webpack://chemotion/./app/packs/src/components/chemrepo/ma/MAGrid.js","webpack://chemotion/./app/packs/src/components/chemrepo/ma/MAModals.js","webpack://chemotion/./app/packs/src/components/chemrepo/range-utils.js","webpack://chemotion/./app/packs/src/components/chemrepo/publication-utils.js","webpack://chemotion/./app/packs/src/components/common/ColoredOverlay.js","webpack://chemotion/./app/packs/src/components/common/ConfirmModal.js","webpack://chemotion/./app/packs/src/components/common/DeleteConfirmBtn.js","webpack://chemotion/./app/packs/src/components/common/Formula.js","webpack://chemotion/./app/packs/src/components/utils/helpDescs.js","webpack://chemotion/./app/packs/src/components/common/HelpInfo.js","webpack://chemotion/./app/packs/src/components/common/HyperLinksSection.js","webpack://chemotion/./app/packs/src/components/common/ImageModal.js","webpack://chemotion/./app/packs/src/components/common/LoadingModal.js","webpack://chemotion/./app/packs/src/components/common/MatrixCheck.js","webpack://chemotion/./app/packs/src/components/common/NewsPreviewModal.js","webpack://chemotion/./app/packs/src/components/common/PrintCodeModal.js","webpack://chemotion/./app/packs/src/components/common/PrintCodeButton.js","webpack://chemotion/./app/packs/src/components/common/SelectionField.js","webpack://chemotion/./app/packs/src/components/common/SpinnerPencilIcon.js","webpack://chemotion/./app/packs/src/components/common/uis.js","webpack://chemotion/./app/packs/src/components/container/ContainerDatasetField.js","webpack://chemotion/./app/packs/src/models/GenericDS.js","webpack://chemotion/./app/packs/src/components/generic/GenericDSDetails.js","webpack://chemotion/./app/packs/src/fetchers/InstrumentsFetcher.js","webpack://chemotion/./app/packs/src/components/container/ContainerDatasetModalContent.js","webpack://chemotion/./app/packs/src/components/container/ContainerDatasetModal.js","webpack://chemotion/./app/packs/src/components/container/AttachmentDropzone.js","webpack://chemotion/./app/packs/src/components/container/ContainerDatasets.js","webpack://chemotion/./app/packs/src/components/navigation/NavNewSession.js","webpack://chemotion/./app/packs/src/components/navigation/GroupElement.js","webpack://chemotion/./app/packs/src/fetchers/UserSettingsFetcher.js","webpack://chemotion/./app/packs/src/apps/userSettings/Affiliations.js","webpack://chemotion/./app/packs/src/components/users/AuthorModal.js","webpack://chemotion/./app/packs/src/components/navigation/UserAuth.js","webpack://chemotion/./app/packs/src/components/navigation/search/AutoCompleteInput.js","webpack://chemotion/./app/packs/src/components/nmriumWrapper/NMRiumDisplayer.js","webpack://chemotion/./app/packs/src/components/pubchem/PubchemLabels.js","webpack://chemotion/./app/packs/src/components/structureEditor/StructureEditorSet.js","webpack://chemotion/./app/packs/src/components/structureEditor/loadScripts.js","webpack://chemotion/./app/packs/src/components/structureEditor/ChemDrawEditor.js","webpack://chemotion/./app/packs/src/components/structureEditor/MarvinjsEditor.js","webpack://chemotion/./app/packs/src/components/structureEditor/KetcherEditor.js","webpack://chemotion/./app/packs/src/components/ketcher-templates/CommonTemplateItem.js","webpack://chemotion/./app/packs/src/components/ketcher-templates/CommonTemplatesList.js","webpack://chemotion/./app/packs/src/fetchers/CommonTemplateFetcher.js","webpack://chemotion/./app/packs/src/components/structureEditor/StructureEditorModal.js","webpack://chemotion/./app/packs/src/components/structureEditor/UserSetting.js","webpack://chemotion/./app/packs/src/components/utils/defaultAnalysisPublish.js","webpack://chemotion/./app/packs/src/components/viewer/MolViewerModal.js","webpack://chemotion/./app/packs/src/components/viewer/MolViewerBtn.js","webpack://chemotion/./app/packs/src/components/viewer/MolViewerListModal.js","webpack://chemotion/./app/packs/src/components/viewer/MolViewerListBtn.js","webpack://chemotion/./app/packs/src/components/viewer/MolViewerSet.js","webpack://chemotion/./app/packs/src/endpoints/ApiServices.js","webpack://chemotion/./app/packs/src/fetchers/AdminDeviceFetcher.js","webpack://chemotion/./app/packs/src/fetchers/AttachmentFetcher.js","webpack://chemotion/./app/packs/src/fetchers/BaseFetcher.js","webpack://chemotion/./app/packs/src/utilities/CellLineUtils.js","webpack://chemotion/./app/packs/src/fetchers/CellLinesFetcher.js","webpack://chemotion/./app/packs/src/fetchers/CollectionsFetcher.js","webpack://chemotion/./app/packs/src/fetchers/ContainerFetcher.js","webpack://chemotion/./app/packs/src/fetchers/DeviceFetcher.js","webpack://chemotion/./app/packs/src/fetchers/EditorFetcher.js","webpack://chemotion/./app/packs/src/fetchers/GenericBaseFetcher.js","webpack://chemotion/./app/packs/src/fetchers/GenericDSsFetcher.js","webpack://chemotion/./app/packs/src/fetchers/GenericElsFetcher.js","webpack://chemotion/./app/packs/src/fetchers/GenericKlassFetcher.js","webpack://chemotion/./app/packs/src/fetchers/GenericSgsFetcher.js","webpack://chemotion/./app/packs/src/fetchers/InboxFetcher.js","webpack://chemotion/./app/packs/src/fetchers/InventoryFetcher.js","webpack://chemotion/./app/packs/src/fetchers/MessagesFetcher.js","webpack://chemotion/./app/packs/src/fetchers/MetadataFetcher.js","webpack://chemotion/./app/packs/src/fetchers/MoleculesFetcher.js","webpack://chemotion/./app/packs/src/fetchers/PrintCodeFetcher.js","webpack://chemotion/./app/packs/src/fetchers/PrivateNoteFetcher.js","webpack://chemotion/./app/packs/src/fetchers/ReactionSvgFetcher.js","webpack://chemotion/./app/packs/src/fetchers/ReactionsFetcher.js","webpack://chemotion/./app/packs/src/fetchers/ReportsFetcher.js","webpack://chemotion/./app/packs/src/fetchers/ResearchPlansFetcher.js","webpack://chemotion/./app/packs/src/fetchers/SamplesFetcher.js","webpack://chemotion/./app/packs/src/fetchers/ScreensFetcher.js","webpack://chemotion/./app/packs/src/fetchers/SearchFetcher.js","webpack://chemotion/./app/packs/src/fetchers/SuggestionsFetcher.js","webpack://chemotion/./app/packs/src/fetchers/TextTemplatesFetcher.js","webpack://chemotion/./app/packs/src/fetchers/ThirdPartyAppFetcher.js","webpack://chemotion/./app/packs/src/fetchers/UIFetcher.js","webpack://chemotion/./app/packs/src/fetchers/UsersFetcher.js","webpack://chemotion/./app/packs/src/fetchers/WellplatesFetcher.js","webpack://chemotion/./app/packs/src/libHome/RepoHowTo/EditorBtn.js","webpack://chemotion/./app/packs/src/repoHome/RepoHowToDragSource.js","webpack://chemotion/./app/packs/src/repoHome/RepoHowToDropTarget.js","webpack://chemotion/./app/packs/src/libHome/RepoHowTo/EditorRichText.js","webpack://chemotion/./app/packs/src/libHome/RepoHowTo/EditorImage.js","webpack://chemotion/./app/packs/src/libHome/RepoHowTo/EditorStelle.js","webpack://chemotion/./app/packs/src/models/AnalysesExperiment.js","webpack://chemotion/./app/packs/src/models/Attachment.js","webpack://chemotion/./app/packs/src/models/Container.js","webpack://chemotion/./app/packs/src/models/Device.js","webpack://chemotion/./app/packs/src/models/DeviceAnalysis.js","webpack://chemotion/./app/packs/src/models/DeviceSample.js","webpack://chemotion/./app/packs/src/models/Element.js","webpack://chemotion/./app/packs/src/models/GenericEl.js","webpack://chemotion/./app/packs/src/models/Literature.js","webpack://chemotion/./app/packs/src/models/LiteratureMap.js","webpack://chemotion/./app/packs/src/models/Metadata.js","webpack://chemotion/./app/packs/src/models/Molecule.js","webpack://chemotion/./app/packs/src/models/PrivateNote.js","webpack://chemotion/./app/packs/src/models/Reaction.js","webpack://chemotion/./app/packs/src/models/ResearchPlan.js","webpack://chemotion/./app/packs/src/models/Sample.js","webpack://chemotion/./app/packs/src/models/Screen.js","webpack://chemotion/./app/packs/src/models/Segment.js","webpack://chemotion/./app/packs/src/models/StructureDef.js","webpack://chemotion/./app/packs/src/models/StructureEditor.js","webpack://chemotion/./app/packs/src/models/Well.js","webpack://chemotion/./app/packs/src/models/Wellplate.js","webpack://chemotion/./app/packs/src/models/cellLine/CellLine.js","webpack://chemotion/./app/packs/src/repo/fetchers/ArticleFetcher.js","webpack://chemotion/./app/packs/src/repo/fetchers/CollaboratorFetcher.js","webpack://chemotion/./app/packs/src/repo/fetchers/EmbargoFetcher.js","webpack://chemotion/./app/packs/src/repo/fetchers/PublicFetcher.js","webpack://chemotion/./app/packs/src/repo/fetchers/RepositoryFetcher.js","webpack://chemotion/./app/packs/src/components/chemrepo/reaction/ContainerComponent.js","webpack://chemotion/./app/packs/src/repoHome/RepoContainerDatasets.js","webpack://chemotion/./app/packs/src/components/common/DropdownButtonSelection.js","webpack://chemotion/./app/packs/src/components/common/InputButtonField.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/RepoUserComment.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/RepoPublicComment.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/RepoXvialButton.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/RepoSpectra.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/RepoNmrium.js","webpack://chemotion/./app/packs/src/components/chemrepo/spc-utils.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/RepoPreviewImage.js","webpack://chemotion/./app/packs/src/components/chemrepo/LdData.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/RepoSvgZoomHandler.js","webpack://chemotion/./app/packs/src/components/chemrepo/svg-utils.js","webpack://chemotion/./app/packs/src/repoHome/RepoCommon.js","webpack://chemotion/./app/packs/src/repoHome/RepoHowToEditor.js","webpack://chemotion/./app/packs/src/repoHome/RepoHowToReader.js","webpack://chemotion/./app/packs/src/repoHome/RepoNavListTypes.js","webpack://chemotion/./app/packs/src/repoHome/RepoNewsEditor.js","webpack://chemotion/./app/packs/src/repoHome/RepoNewsReader.js","webpack://chemotion/./app/packs/src/repoHome/RepoReactionDetails.js","webpack://chemotion/./app/packs/src/repoHome/RepoReactionSchemeInfo.js","webpack://chemotion/./app/packs/src/repoHome/RepoReactionTable.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/RepoMetadataModal.js","webpack://chemotion/./app/packs/src/components/chemrepo/common/RepoUserLabelModal.js","webpack://chemotion/./app/packs/src/repoHome/RepoReviewButtonBar.js","webpack://chemotion/./app/packs/src/components/chemrepo/ma/MAComs.js","webpack://chemotion/./app/packs/src/components/chemrepo/MoleculeArchive.js","webpack://chemotion/./app/packs/src/repoHome/DecoupleInfo.js","webpack://chemotion/./app/packs/src/components/chemrepo/PublicSample.js","webpack://chemotion/./app/packs/src/repoHome/RepoSample.js","webpack://chemotion/./app/packs/src/repoHome/RepoSampleDetails.js","webpack://chemotion/./app/packs/src/repoHome/RepoSegment.js","webpack://chemotion/./app/packs/src/stores/alt/actions/ClipboardActions.js","webpack://chemotion/./app/packs/src/stores/alt/actions/CollectionActions.js","webpack://chemotion/./app/packs/src/stores/alt/actions/DetailActions.js","webpack://chemotion/./app/packs/src/models/Report.js","webpack://chemotion/./app/packs/src/models/Format.js","webpack://chemotion/./app/packs/src/models/Graph.js","webpack://chemotion/./app/packs/src/models/ComputeTask.js","webpack://chemotion/./app/packs/src/models/DeviceControl.js","webpack://chemotion/./app/packs/src/models/Prediction.js","webpack://chemotion/./app/packs/src/stores/alt/actions/ElementActions.js","webpack://chemotion/./app/packs/src/stores/alt/actions/GasPhaseReactionActions.js","webpack://chemotion/./app/packs/src/stores/alt/actions/InboxActions.js","webpack://chemotion/./app/packs/src/stores/alt/actions/KeyboardActions.js","webpack://chemotion/./app/packs/src/stores/alt/actions/LoadingActions.js","webpack://chemotion/./app/packs/src/stores/alt/actions/NotificationActions.js","webpack://chemotion/./app/packs/src/fetchers/PredictionsFetcher.js","webpack://chemotion/./app/packs/src/stores/alt/actions/PredictionActions.js","webpack://chemotion/./app/packs/src/fetchers/ReportTemplateFetcher.js","webpack://chemotion/./app/packs/src/stores/alt/actions/ReportActions.js","webpack://chemotion/./app/packs/src/stores/alt/actions/SpectraActions.js","webpack://chemotion/./app/packs/src/stores/alt/actions/UIActions.js","webpack://chemotion/./app/packs/src/stores/alt/actions/UserActions.js","webpack://chemotion/./app/packs/src/stores/alt/alt.js","webpack://chemotion/./app/packs/src/stores/alt/repo/actions/EmbargoActions.js","webpack://chemotion/./app/packs/src/stores/alt/repo/actions/PublicActions.js","webpack://chemotion/./app/packs/src/stores/alt/repo/actions/RepositoryActions.js","webpack://chemotion/./app/packs/src/stores/alt/repo/actions/ReviewActions.js","webpack://chemotion/./app/packs/src/stores/alt/repo/stores/PublicStore.js","webpack://chemotion/./app/packs/src/stores/alt/repo/stores/ReviewStore.js","webpack://chemotion/./app/packs/src/stores/alt/stores/CollectionStore.js","webpack://chemotion/./app/packs/src/stores/alt/stores/ClipboardStore.js","webpack://chemotion/./app/packs/src/components/contextActions/ModalImportConfirm.js","webpack://chemotion/./app/packs/src/stores/alt/stores/ElementStore.js","webpack://chemotion/./app/packs/src/stores/alt/stores/GasPhaseReactionStore.js","webpack://chemotion/./app/packs/src/stores/alt/stores/KeyboardStore.js","webpack://chemotion/./app/packs/src/stores/alt/stores/LoadingStore.js","webpack://chemotion/./app/packs/src/stores/alt/stores/SpectraStore.js","webpack://chemotion/./app/packs/src/stores/alt/stores/UIStore.js","webpack://chemotion/./app/packs/src/stores/alt/stores/UserStore.js","webpack://chemotion/./app/packs/src/models/Measurement.js","webpack://chemotion/./app/packs/src/fetchers/MeasurementsFetcher.js","webpack://chemotion/./app/packs/src/stores/mobx/MeasurementsStore.jsx","webpack://chemotion/./app/packs/src/fetchers/SampleTasksFetcher.js","webpack://chemotion/./app/packs/src/stores/mobx/SampleTasksStore.jsx","webpack://chemotion/./app/packs/src/stores/mobx/CellLineDetailsStore.jsx","webpack://chemotion/./app/packs/src/stores/mobx/SearchStore.jsx","webpack://chemotion/./app/packs/src/stores/mobx/DevicesStore.jsx","webpack://chemotion/./app/packs/src/fetchers/AdminDeviceMetadataFetcher.js","webpack://chemotion/./app/packs/src/stores/mobx/DeviceMetadataStore.jsx","webpack://chemotion/./app/packs/src/stores/mobx/AttachmentNotificationStore.jsx","webpack://chemotion/./app/packs/src/stores/mobx/RootStore.jsx","webpack://chemotion/./app/packs/src/utilities/ArrayUtils.js","webpack://chemotion/./app/packs/src/utilities/DndConst.js","webpack://chemotion/./app/packs/src/utilities/DocumentHelper.js","webpack://chemotion/./app/packs/src/utilities/DomHelper.js","webpack://chemotion/./app/packs/src/utilities/deltaMarkdownConverter.js","webpack://chemotion/./app/packs/src/utilities/ElementUtils.js","webpack://chemotion/./app/packs/src/utilities/markdownUtils.js","webpack://chemotion/./app/packs/src/utilities/FetcherHelper.js","webpack://chemotion/./app/packs/src/utilities/Functions.js","webpack://chemotion/./app/packs/src/utilities/ReportHelper.js","webpack://chemotion/./app/packs/src/utilities/SpectraHelper.js","webpack://chemotion/./app/packs/src/utilities/UnitsConversion.js","webpack://chemotion/./app/packs/src/utilities/imageHelper.js","webpack://chemotion/./app/packs/src/utilities/quillFormat.js","webpack://chemotion/./app/packs/src/utilities/quillToolbarSymbol.js","webpack://chemotion/./app/packs/src/utilities/routesUtils.js","webpack://chemotion/./app/packs/src/utilities/selectHelper.js","webpack://chemotion/./app/packs/src/utilities/timezoneHelper.js","webpack://chemotion/../../cache/node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["import Rails from '@rails/ujs';\n\nRails.start();\n\n// see https://github.com/rackt/react-router/issues/1067\n\nvar React = require('react');\nvar Home = require('src/apps/home/Home');\nvar CnC = require('src/apps/commandAndControl');\nvar AdminHome = require('src/apps/admin');\nvar ChemSpectra = require('src/apps/chemspectra/ChemSpectra');\nvar ChemSpectraEditor = require('src/apps/chemspectra/ChemSpectraEditor');\nvar MoleculeModerator = require('src/apps/moleculeModerator');\nvar OmniauthCredential = require('src/apps/omniauthCredential');\nvar UserCounter = require('src/apps/userCounter');\nvar ScifinderCredential = require('src/apps/scifinderCredential');\nvar StructureEditorUserSetting = require('src/components/structureEditor/UserSetting');\nvar LoginOptions = require('src/apps/omniauthCredential/LoginOptions');\nvar ConverterAdmin = require('src/apps/converter/ConverterAdmin');\nvar GenericElementsAdmin = require('src/apps/generic/GenericElementsAdmin');\nvar GenericSegmentsAdmin = require('src/apps/generic/GenericSegmentsAdmin');\nvar GenericDatasetsAdmin = require('src/apps/generic/GenericDatasetsAdmin');\nvar InventoryLabelSettings = require('src/apps/settings/InventoryLabelSettings');\nvar mydb = require('src/apps/mydb');\n\n// Fro REPO\nvar RepoNewsEditor = require('src/repoHome/RepoNewsEditor');\nvar RepoNewsReader = require('src/repoHome/RepoNewsReader');\nvar RepoHowToEditor = require('src/repoHome/RepoHowToEditor');\nvar RepoHowToReader = require('src/repoHome/RepoHowToReader');\n\n","import React from 'react';\nimport { Nav, Navbar, MenuItem, NavDropdown } from 'react-bootstrap';\n\nimport UserAuth from 'src/components/navigation/UserAuth';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UserActions from 'src/stores/alt/actions/UserActions';\n\nimport NavNewSession from 'src/components/navigation/NavNewSession';\nimport DocumentHelper from 'src/utilities/DocumentHelper';\n\nconst NavHead = () => (\n  <Navbar.Brand>\n    <NavDropdown title=\"Chemotion\" className=\"navig-brand\" id=\"bg-nested-dropdown-brand\">\n      <MenuItem eventKey=\"11\" href=\"http://www.chemotion-repository.net\" target=\"_blank\">Chemotion Repository</MenuItem>\n      <MenuItem eventKey=\"13\" href=\"https://www.complat.kit.edu/26.php\" target=\"_blank\">Complat</MenuItem>\n      <MenuItem eventKey=\"14\" href=\"https://github.com/ComPlat\" target=\"_blank\">Complat on Github</MenuItem>\n      <MenuItem divider />\n      <MenuItem eventKey=\"15\" href=\"/\" target=\"_self\">Chemotion</MenuItem>\n    </NavDropdown>\n  </Navbar.Brand>\n);\n\nexport default class AdminNavigation extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentUser: null,\n    };\n    this.toggleTree = this.toggleTree.bind(this);\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n    UserActions.fetchCurrentUser();\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    const newId = state.currentUser ? state.currentUser.id : null;\n    const oldId = this.state.currentUser ? this.state.currentUser.id : null;\n    if (newId !== oldId) { this.setState({ currentUser: state.currentUser }); }\n  }\n\n  toggleTree() {\n    this.props.toggleTree();\n  }\n\n  navHeader() {\n    return (\n      <Navbar.Header className=\"collec-tree\">\n        <Navbar.Text style={{ cursor: 'pointer' }}>\n          <i\n            className=\"fa fa-list\"\n            style={{ fontStyle: \"normal\" }}\n            onClick={this.toggleTree}\n          />\n        </Navbar.Text>\n        <Navbar.Text />\n        <NavHead />\n      </Navbar.Header>\n    );\n  }\n\n  render() {\n    return this.state.currentUser ? (\n      <Navbar fluid className=\"navbar-custom\">\n        {this.navHeader()}\n        <Nav navbar className=\"navbar-form\">\n          <h1>ELN Administration</h1>\n        </Nav>\n        <UserAuth />\n        <div style={{ clear: 'both' }} />\n      </Navbar>\n    ) : (\n      <Navbar fluid className=\"navbar-custom\" >\n        {this.navHeader()}\n        <Nav navbar className=\"navbar-form\" />\n        <div>\n          <h1>ELN Administration</h1>\n        </div>\n        <NavNewSession authenticityToken={DocumentHelper.getMetaContent('csrf-token')} />\n        <div style={{ clear: 'both' }} />\n      </Navbar>\n    );\n  }\n}\n","import 'whatwg-fetch';\nimport BaseFetcher from 'src/fetchers/BaseFetcher';\n\nexport default class AdminFetcher {\n  static fetchLocalCollector() {\n    return fetch('/api/v1/admin/listLocalCollector/all.json', {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static checkDiskSpace() {\n    return fetch('/api/v1/admin/disk.json', {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static resetUserPassword(params) {\n    const { user_id, ...otherParams } = params;\n    return fetch(`/api/v1/admin/users/${user_id}/resetPassword/`, {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(otherParams),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static createUserAccount(params) {\n    return fetch('/api/v1/admin/users', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static updateUser(params) {\n    const { id, ...otherParams } = params;\n    return fetch(`/api/v1/admin/users/${id}`, {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(otherParams),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static deleteUser({ id }) {\n    return fetch(`/api/v1/admin/users/${id}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n    });\n  }\n\n  static restoreAccount(params) {\n    return fetch('/api/v1/admin/users/restoreAccount/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchUsers(id = null) {\n    const url = id ? `/api/v1/admin/users/${id}` : '/api/v1/admin/users';\n    return fetch(url, {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchUsersByNameType(name, type, limit = 5) {\n    return fetch(\n      `/api/v1/admin/users/byname.json?${new URLSearchParams({\n        name,\n        type,\n        limit,\n      })}`,\n      {\n        credentials: 'same-origin',\n        method: 'GET',\n      }\n    )\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static updateAccount(params) {\n    const { user_id, ...otherParams } = params;\n    return fetch(`/api/v1/admin/users/${user_id}/profile/`, {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(otherParams),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static olsTermDisableEnable(params) {\n    return fetch('/api/v1/admin/olsEnableDisable/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    }).then((response) => {\n      if (response.status === 204) {\n        return true;\n      }\n    });\n  }\n\n  static importOlsTerms(file) {\n    const data = new FormData();\n    data.append('file', file);\n\n    return fetch('/api/v1/admin/importOlsTerms/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      body: data,\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchGroupsDevices(type) {\n    return fetch(`/api/v1/admin/group_device/list?type=${type}`, {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static updateGroup(params = {}) {\n    return fetch(`/api/v1/admin/group_device/update/${params.id}`, {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static deleteGroupRelation(params = {}) {\n    return fetch(`/api/v1/admin/group_device/delete_relation/${params.id}`, {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static createGroupDevice(params = {}) {\n    return fetch('/api/v1/admin/group_device/create', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchMatrices() {\n    return fetch('/api/v1/admin/matrix', {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static updateMatrice(params) {\n    return fetch('/api/v1/admin/matrix', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchJobs() {\n    return fetch('/api/v1/admin/jobs', {\n      credentials: 'same-origin',\n      method: 'GET',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.error(errorMessage);\n      });\n  }\n\n  static restartJob(id) {\n    return fetch('/api/v1/admin/jobs/restart/', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(id),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.error(errorMessage);\n      });\n  }\n}\n","import React from 'react';\nimport { Panel, FormControl, InputGroup } from 'react-bootstrap';\nimport AdminFetcher from 'src/fetchers/AdminFetcher';\n\nexport default class AdminDashboard extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      diskAvailable: 0,\n      diskPercentUsed: 0,\n      showDiskInfo: false,\n    };\n    this.handleDiskspace = this.handleDiskspace.bind(this);\n  }\n\n  componentDidMount() {\n    this.handleDiskspace();\n  }\n\n  handleDiskspace() {\n    AdminFetcher.checkDiskSpace()\n      .then((result) => {\n        this.setState({\n          diskAvailable: result.mb_available,\n          diskPercentUsed: result.percent_used,\n          showDiskInfo: true\n        });\n      });\n  }\n\n  renderDiskInfo() {\n    const { diskAvailable, diskPercentUsed } = this.state;\n    let style = {};\n    if (diskPercentUsed > 80) {\n      style = {\n        color: 'red',\n      };\n    } else {\n      style = {\n        color: 'black',\n      };\n    }\n\n    return (\n      <div>\n        <Panel>\n          <InputGroup>\n            <InputGroup.Addon>Disk Available   (MB)</InputGroup.Addon>\n            <FormControl\n              type=\"text\"\n              defaultValue={diskAvailable || ''}\n              readOnly\n            />\n            <InputGroup.Addon>Disk Percent Used (%)</InputGroup.Addon>\n            <FormControl\n              type=\"text\"\n              style={style}\n              defaultValue={`${diskPercentUsed}%` || ''}\n              readOnly\n            />\n          </InputGroup>\n        </Panel>\n      </div>\n    );\n  }\n\n  render() {\n    const { showDiskInfo } = this.state;\n    if (showDiskInfo) {\n      return this.renderDiskInfo();\n    }\n    return (<div />);\n  }\n}\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ButtonToolbar, Modal } from 'react-bootstrap';\nimport AdminFetcher from 'src/fetchers/AdminFetcher';\nimport { ALL_TYPES } from 'src/apps/generic/Utils';\n\nexport default class GenericAdminModal extends Component {\n  constructor(props) {\n    super(props);\n    this.handleAuthAdmin = this.handleAuthAdmin.bind(this);\n  }\n\n  renderButton(_params, _user) {\n    const params = _params || [];\n    const user = _user;\n    return params.map((p, i) => (\n      <Button\n        key={`_auth_designer_button_${ALL_TYPES[i]}`}\n        bsSize=\"sm\"\n        bsStyle={p ? 'warning' : 'default'}\n        onClick={() =>\n          this.handleAuthAdmin(user, `${ALL_TYPES[i]}s`.toLowerCase(), p)\n        }\n      >\n        {p ? 'Revoke' : 'Grant'} Generic {ALL_TYPES[i]}\n      </Button>\n    ));\n  }\n\n  renderDescription(_params) {\n    const params = _params || [];\n    return params.map((p, i) => (\n      <li key={`_description_${ALL_TYPES[i]}`}>\n        Currently {p ? '' : 'NOT'} acting as the Designer of the Generic&nbsp;\n        {ALL_TYPES[i]}\n      </li>\n    ));\n  }\n\n  handleAuthAdmin(user, type, value) {\n    const { fnCb } = this.props;\n    const params = {\n      user_id: user.id,\n      auth_generic_admin: {},\n    };\n    params.auth_generic_admin[type] = !value;\n    AdminFetcher.updateAccount(params).then((updatedUser) => fnCb(updatedUser));\n  }\n\n  render() {\n    const { user, fnShowModal } = this.props;\n    const { elements, segments, datasets } = user.generic_admin || {};\n    return (\n      <Modal show onHide={() => fnShowModal(false)}>\n        <Modal.Header closeButton>\n          <Modal.Title>{`Grant/Revoke Generic Designer (user: ${user.name})`}</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <ButtonToolbar>\n            {this.renderButton([elements, segments, datasets], user)}\n          </ButtonToolbar>\n          <ul>{this.renderDescription([elements, segments, datasets])}</ul>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n}\n\nGenericAdminModal.propTypes = {\n  user: PropTypes.object.isRequired,\n  fnShowModal: PropTypes.func.isRequired,\n  fnCb: PropTypes.func,\n};\nGenericAdminModal.defaultProps = { fnCb: () => {} };\n","/* eslint-disable react/destructuring-assignment */\nimport React from 'react';\nimport {\n  Panel, Table, Button, Modal, FormGroup, ControlLabel, Form, Col, FormControl, Tooltip, OverlayTrigger, Tabs, Tab,\n  Nav, NavItem, Alert\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport { CSVReader } from 'react-papaparse';\nimport propType from 'prop-types';\nimport AdminFetcher from 'src/fetchers/AdminFetcher';\nimport MessagesFetcher from 'src/fetchers/MessagesFetcher';\nimport { selectUserOptionFormater } from 'src/utilities/selectHelper';\nimport GenericAdminModal from 'src/apps/admin/generic/GenericAdminModal';\n\nfunction MessageAlert({ message, onHide }) {\n  return (\n    message?.length > 0 ? (\n      <Alert bsStyle=\"info\" onDismiss={onHide}>\n        <p>\n          {message}\n        </p>\n      </Alert>\n    ) : null\n  );\n}\n\nMessageAlert.propTypes = {\n  message: propType.string,\n  onHide: propType.func.isRequired,\n};\nMessageAlert.defaultProps = {\n  message: '',\n};\n\nconst loadUserByName = (input) => {\n  if (!input) {\n    return Promise.resolve({ options: [] });\n  }\n\n  return AdminFetcher.fetchUsersByNameType(input, 'Person')\n    .then((res) => selectUserOptionFormater({ data: res }))\n    .catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n};\n\nconst handleResetPassword = (id, random, handleShowAlert) => {\n  AdminFetcher.resetUserPassword({ user_id: id, random })\n    .then((result) => {\n      if (result.rp) {\n        let message = '';\n        if (random) {\n          message = result.pwd ? `Password reset for user ${id}! New password: \\n ${result.pwd}`\n            : 'Password reset!';\n        } else {\n          message = result.email ? `Password reset! instructions sent to : \\n ${result.email}`\n            : 'Password instruction sent!';\n        }\n        handleShowAlert(message);\n      } else {\n        handleShowAlert(`Password reset fail: \\n ${result.pwd}`);\n      }\n    });\n};\n\nconst validateEmail = (mail) => (/^\\w+([.-]?\\w+)*@\\w+([.-]?\\w+)*(\\.\\w{2,63})+$/.test(mail));\nconst editTooltip = <Tooltip id=\"inchi_tooltip\">Edit user info</Tooltip>;\nconst resetPasswordTooltip = <Tooltip id=\"assign_button\">Reset password</Tooltip>;\nconst resetPasswordInstructionsTooltip = <Tooltip id=\"assign_button\">Send password instructions</Tooltip>;\nconst confirmUserTooltip = <Tooltip id=\"assign_button\">Confirm this account</Tooltip>;\nconst confirmEmailChangeTooltip = (email) => (\n  <Tooltip id=\"email_change_button\">\n    Confirm E-Mail:\n    <br />\n    {email}\n  </Tooltip>\n);\nconst disableTooltip = <Tooltip id=\"assign_button\">Lock this account</Tooltip>;\nconst enableTooltip = <Tooltip id=\"assign_button\">Unlock this account</Tooltip>;\nconst converterEnableTooltip = (\n  <Tooltip id=\"assign_button\">\n    Enable Converter profiles editing for this user (currently disabled)\n  </Tooltip>\n);\nconst converterDisableTooltip = (\n  <Tooltip id=\"assign_button\">\n    Disable Converter profiles editing for this user (currently enabled)\n  </Tooltip>\n);\nconst templateModeratorEnableTooltip = (\n  <Tooltip id=\"assign_button\">\n    Enable Ketcher template editing for this user (currently disabled)\n  </Tooltip>\n);\nconst templateModeratorDisableTooltip = (\n  <Tooltip id=\"assign_button\">\n    Disable Ketcher template editing for this user (currently enabled)\n  </Tooltip>\n);\nconst moleculeModeratorEnableTooltip = (\n  <Tooltip id=\"assign_button\">\n    Enable editing the representation of the global molecules for this user (currently disabled)\n  </Tooltip>\n);\nconst moleculeModeratorDisableTooltip = (\n  <Tooltip id=\"assign_button\">\n    Disable editing the representation of the global molecules for this user (currently enabled)\n  </Tooltip>\n);\nconst accountActiveTooltip = (\n  <Tooltip id=\"assign_button\">\n    This user account is deactivated, click to [activate]\n  </Tooltip>\n);\nconst accountInActiveTooltip = (\n  <Tooltip id=\"assign_button\">\n    This user account is activated, click to [deactivate]\n  </Tooltip>\n);\n\nconst renderDeletedUsersTable = (deletedUsers) => (\n  <Table striped bordered hover>\n    <thead>\n      <tr>\n        <th>ID</th>\n        <th>Deleted at</th>\n      </tr>\n    </thead>\n    <tbody>\n      {deletedUsers.map((item) => (\n        <tr key={item.id}>\n          <td>{item.id}</td>\n          <td>{item.deleted_at}</td>\n        </tr>\n      ))}\n\n    </tbody>\n  </Table>\n);\n\nexport default class UserManagement extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      users: [],\n      user: {},\n      deletedUsers: [],\n      selectedUsers: null,\n      showMsgModal: false,\n      showNewUserModal: false,\n      showEditUserModal: false,\n      showGenericAdminModal: false,\n      showRestoreAccountModal: false,\n      showError: false,\n      showSuccess: false,\n      messageNewUserModal: '',\n      messageEditUserModal: '',\n      messageRestoreAccountModal: '',\n      processingSummaryUserFile: '',\n      alertMessage: null,\n      filterCriteria: {}\n    };\n    this.handleFetchUsers = this.handleFetchUsers.bind(this);\n    this.handleMsgShow = this.handleMsgShow.bind(this);\n    this.handleMsgClose = this.handleMsgClose.bind(this);\n    this.handleNewUserShow = this.handleNewUserShow.bind(this);\n    this.handleNewUserClose = this.handleNewUserClose.bind(this);\n    this.handleSelectUser = this.handleSelectUser.bind(this);\n    this.messageSend = this.messageSend.bind(this);\n    this.handleCreateNewUser = this.handleCreateNewUser.bind(this);\n    this.handleEditUserShow = this.handleEditUserShow.bind(this);\n    this.handleEditUserClose = this.handleEditUserClose.bind(this);\n    this.handleUpdateUser = this.handleUpdateUser.bind(this);\n    this.handleRestoreAccountShow = this.handleRestoreAccountShow.bind(this);\n    this.handleRestoreAccountClose = this.handleRestoreAccountClose.bind(this);\n    this.handleRestoreAccount = this.handleRestoreAccount.bind(this);\n    this.handleGenericAdminModal = this.handleGenericAdminModal.bind(this);\n    this.handleGenericAdminModalCb = this.handleGenericAdminModalCb.bind(this);\n    this.handleDismissAlert = this.handleDismissAlert.bind(this);\n    this.handleShowAlert = this.handleShowAlert.bind(this);\n    this.tableBodyRef = React.createRef();\n  }\n\n  componentDidMount() {\n    this.handleFetchUsers();\n    // update maxHeight for user table body\n    if (this.tableBodyRef?.current) {\n      // Get the available space\n      const availableSpace = window.innerHeight - this.tableBodyRef.current.getBoundingClientRect().top;\n\n      // Set the max-height dynamically\n      this.tableBodyRef.current.style.maxHeight = `${availableSpace}px`;\n    }\n    return true;\n  }\n\n  componentWillUnmount() {\n  }\n\n  handleMsgShow() {\n    this.setState({\n      showMsgModal: true\n    });\n  }\n\n  handleMsgClose() {\n    this.setState({\n      showMsgModal: false\n    });\n  }\n\n  handleNewUserShow() {\n    this.setState({\n      showNewUserModal: true,\n      messageNewUserModal: ''\n    });\n  }\n\n  handleNewUserClose() {\n    this.setState({\n      showNewUserModal: false,\n      messageNewUserModal: ''\n    });\n  }\n\n  handleEditUserShow(user) {\n    this.setState({\n      showEditUserModal: true,\n      messageEditUserModal: '',\n      user\n    });\n  }\n\n  handleEditUserClose() {\n    this.setState({\n      showEditUserModal: false,\n      messageEditUserModal: '',\n      user: {}\n    });\n  }\n\n  handleRestoreAccountShow() {\n    this.setState({\n      showRestoreAccountModal: true,\n      messageRestoreAccountModal: '',\n      showSuccess: false,\n      showError: false,\n      deletedUsers: [],\n    });\n  }\n\n  handleRestoreAccountClose() {\n    this.setState({\n      showRestoreAccountModal: false,\n    });\n    this.handleFetchUsers();\n  }\n\n  handleDismissAlert() {\n    this.setState({ alertMessage: null });\n  }\n\n  handleShowAlert(message) {\n    this.setState({ alertMessage: message });\n  }\n\n  handleGenericAdminModalCb(user) {\n    const { users } = this.state;\n    const { id, error } = user;\n    if (error) { this.setState({ alertMessage: error }); }\n    this.setState({\n      users: users.map((u) => (u.id === id ? user : u)),\n      user,\n    });\n  }\n\n  handleGenericAdminModal(show, user = {}) {\n    this.setState({ showGenericAdminModal: show, user });\n  }\n\n  handleFetchUsers() {\n    AdminFetcher.fetchUsers()\n      .then((result) => {\n        this.setState({\n          users: result.users\n        });\n      });\n  }\n\n  handleEnableDisableAccount(id, lockedAt) {\n    const message = lockedAt !== null ? 'Account unlocked!' : 'Account locked! User can unlock it under condition'; //\n    this.updateUser({ id, enable: lockedAt !== null }, message);\n  }\n\n  handleConverterAdmin(id, isConverterAdmin) {\n    const message = `Converter-profiles editing has been ${isConverterAdmin === true ? 'dis' : 'en'}abled for user ${id}`;\n    this.updateProfile({ user_id: id, converter_admin: !isConverterAdmin }, message);\n  }\n\n  handleTemplatesModerator(id, isTemplatesModerator) {\n    const message = `Ketcher-template editing has been ${isTemplatesModerator === true ? 'en' : 'dis'}abled for user ${id}`;\n    this.updateProfile({ user_id: id, is_templates_moderator: !isTemplatesModerator }, message);\n  }\n\n  handleMoleculesModerator(id, isMoleculesEditor) {\n    const message = isMoleculesEditor === true\n      ? 'Disable editing the representation of the global molecules for this user'\n      : 'Enable editing the representation of the global molecules for this user';\n    this.updateProfile({ user_id: id, molecule_editor: !isMoleculesEditor }, message);\n  }\n\n  handleActiveInActiveAccount(id, isActive) {\n    const message = `User ${id} account has been ${isActive === true ? 'de-' : ''}activated!`;\n    this.updateUser({ id, account_active: !isActive }, message);\n  }\n\n  handleSelectUser(val) {\n    if (val) {\n      this.setState({ selectedUsers: val });\n    }\n  }\n\n  handleConfirmUserAccount(id) {\n    this.updateUser({ id, confirm_user: true }, `User ${id} account has been confirmed!`);\n  }\n\n  handleReConfirmUserAccount(id) {\n    this.updateUser({ id, reconfirm_user: true }, `User ${id} new Email has been confirmed!`);\n  }\n\n  handleCreateNewUser() {\n    if (!this.validateUserInput()) {\n      return false;\n    }\n    AdminFetcher.createUserAccount({\n      email: this.email.value.trim(),\n      password: this.password.value.trim(),\n      first_name: this.firstname.value.trim(),\n      last_name: this.lastname.value.trim(),\n      name_abbreviation: this.nameAbbr.value.trim(),\n      type: this.type.value\n    })\n      .then((result) => {\n        if (result.error) {\n          this.setState({ messageNewUserModal: result.error });\n          return false;\n        }\n        this.setState({ messageNewUserModal: 'New user created.' });\n        this.email.value = '';\n        this.password.value = '';\n        this.passwordConfirm.value = '';\n        this.firstname.value = '';\n        this.lastname.value = '';\n        this.nameAbbr.value = '';\n        this.handleFetchUsers();\n        return true;\n      });\n    return true;\n  }\n\n  handleOnDropUserFile = (data, file) => {\n    const validFileTypes = ['text/csv', 'application/vnd.ms-excel'];\n    if (!validFileTypes.includes(file.type)) {\n      this.setState(\n        { processingSummaryUserFile: `Invalid file type ${file.type}. Please make sure to upload a CSV file.` }\n      );\n      this.newUsers = null;\n      return false;\n    }\n    this.newUsers = data;\n    for (let i = 0; i < this.newUsers.length; i += 1) {\n      this.newUsers[i].data.row = i + 1;\n    }\n    return true;\n  };\n\n  handleOnErrorUserFile = (err) => {\n    console.log(err);\n    this.newUsers = null;\n  };\n\n  handleOnRemoveUserFile = () => {\n    this.newUsers = null;\n  };\n\n  handleCreateNewUsersFromFile() {\n    if (!this.validUserFile()) {\n      this.newUsers = null;\n      this.setState({ messageNewUserModal: 'Finished processing user file.' });\n    } else {\n      const promisedNewUsers = this.newUsers.map((user) => this.createNewUserFromFile(user));\n      Promise.allSettled(promisedNewUsers)\n        .then((userResults) => {\n          this.showProcessingSummaryUserFile(userResults);\n        })\n        .then(() => this.handleFetchUsers())\n        .catch((reason) => {\n          this.setState({ messageNewUserModal: `Failed to process user file: ${reason}.` });\n        });\n    }\n  }\n\n  handleUpdateUser(user) {\n    if (!validateEmail(this.u_email.value.trim())) {\n      this.setState({ messageEditUserModal: 'You have entered an invalid email address!' });\n      return false;\n    } if (this.u_firstname.value.trim() === '' || this.u_lastname.value.trim()\n      === '' || this.u_abbr.value.trim() === '') {\n      this.setState({ messageEditUserModal: 'please input first name, last name and name abbreviation!' });\n      return false;\n    }\n    AdminFetcher.updateUser({\n      id: user.id,\n      email: this.u_email.value.trim(),\n      first_name: this.u_firstname.value.trim(),\n      last_name: this.u_lastname.value.trim(),\n      name_abbreviation: this.u_abbr.value.trim(),\n      type: this.u_type.value\n    })\n      .then((result) => {\n        if (result.error) {\n          this.setState({ messageEditUserModal: result.error });\n          return false;\n        }\n        // update this.state.users with result\n        const { users } = this.state;\n        const index = users.findIndex((u) => u.id === user.id);\n        users[index] = result;\n\n        this.setState({\n          users, showEditUserModal: false, messageEditUserModal: '', alertMessage: `User ${user.id} account has been updated.`\n        });\n        this.u_email.value = '';\n        this.u_firstname.value = '';\n        this.u_lastname.value = '';\n        this.u_abbr.value = '';\n        return true;\n      });\n    return true;\n  }\n\n  handleDeleteUser(user) {\n    AdminFetcher.deleteUser({ id: user.id }).then(\n      (result) => {\n        if (result.error) {\n          this.setState({ showEditUserModal: false, alertMessage: result.error });\n          return false;\n        }\n        // remove deleted user from this.state.users\n        const { users } = this.state;\n        const index = users.findIndex((u) => u.id === user.id);\n        if (index > -1) {\n          users.splice(index, 1);\n        }\n        this.setState({\n          showEditUserModal: false,\n          alertMessage: `User with name abbreviation ${user.initials} has been deleted!`,\n          users,\n        });\n        return true;\n      }\n    );\n  }\n\n  handleRestoreAccount = () => {\n    this.setState({ deletedUsers: [] });\n    // trim the params\n    this.id.value = this.id.value.trim();\n    this.nameAbbreviation.value = this.nameAbbreviation.value.trim();\n    if (this.nameAbbreviation.value.trim() === '' && this.id.value.trim() === '') {\n      this.setState({ messageRestoreAccountModal: 'Please enter the name abbreviation or an id!', showError: true });\n      return false;\n    }\n    AdminFetcher.restoreAccount({\n      name_abbreviation: this.nameAbbreviation.value === '' ? null : this.nameAbbreviation.value,\n      id: this.id.value === '' ? null : this.id.value,\n\n    }).then((result) => {\n      if (result?.users) {\n        this.setState({ messageRestoreAccountModal: result.message, showError: true, deletedUsers: result.users });\n        return false;\n      }\n\n      if (result.status === 'error' || result.status === 'warning') {\n        this.setState({ messageRestoreAccountModal: result.message, alertMessage: result.message, showError: true });\n        return false;\n      }\n      this.setState({ messageRestoreAccountModal: result.message, alertMessage: result.message, showSuccess: true });\n      setTimeout(() => {\n        this.nameAbbreviation.value = '';\n        this.id.value = '';\n        this.handleRestoreAccountClose();\n      }, 2000);\n      return true;\n    });\n    return true;\n  };\n\n  updateFilter = (key, value) => {\n    this.setState((prevState) => ({\n      filterCriteria: {\n        ...prevState.filterCriteria,\n        [key]: value\n      }\n    }));\n  };\n\n  updateUser(params, message = null) {\n    const { users } = this.state;\n    AdminFetcher.updateUser(params)\n      .then((result) => {\n        if (result.error) {\n          this.handleShowAlert(result.error);\n          return false;\n        }\n        this.setState({\n          users: users.map((user) => (user.id === params.id ? result : user)),\n          user: result,\n          alertMessage: message\n        });\n        return true;\n      });\n  }\n\n  updateProfile(params, message = null) {\n    const { users } = this.state;\n    AdminFetcher.updateAccount(params)\n      .then((result) => {\n        if (result.error) {\n          this.handleShowAlert(result.error);\n          return false;\n        }\n        this.setState({\n          users: users.map((user) => (user.id === result.id ? result : user)),\n          user: result,\n          alertMessage: message\n        });\n        return true;\n      });\n  }\n\n  updateDropdownFilter(field, value) {\n    this.setState((prevState) => ({\n      filterCriteria: {\n        ...prevState.filterCriteria,\n        [field]: value\n      }\n    }));\n  }\n\n  createNewUserFromFile(newUser) {\n    return AdminFetcher.createUserAccount({\n      email: newUser.data.email.trim(),\n      password: newUser.data.password.trim(),\n      first_name: newUser.data.firstname.trim(),\n      last_name: newUser.data.lastname.trim(),\n      name_abbreviation: newUser.data.nameabbr.trim(),\n      type: newUser.data.type.trim()\n    })\n      .then((result) => {\n        let userResult = `Row ${newUser.data.row}: Successfully created new user.`;\n        if (result.error) {\n          userResult = `Row ${newUser.data.row}: Failed to create user; ${result.error}.`;\n        }\n        this.setState({ messageNewUserModal: userResult });\n        return userResult;\n      });\n  }\n\n  validUserFile() {\n    if (!Array.isArray(this.newUsers) || !this.newUsers.length) {\n      this.setState({ processingSummaryUserFile: 'The file is empty.' });\n      return false;\n    }\n\n    const nUsers = this.newUsers.length;\n    const nUsersMax = 100;\n    if (nUsers > nUsersMax) {\n      this.setState({\n        processingSummaryUserFile: 'The file contains too many users. '\n          + `Please make sure that the number of users you add from a single file doesn't exceed ${nUsersMax}.`\n      });\n      return false;\n    }\n\n    const fileHeader = this.newUsers[0].meta.fields;\n    const validHeader = ['email', 'password', 'firstname', 'lastname', 'nameabbr', 'type'];\n    if (!(fileHeader.length === validHeader.length\n      && fileHeader.every((val, index) => val === validHeader[index]))) {\n      this.setState({\n        processingSummaryUserFile: `The file contains an invalid header ${fileHeader}. `\n          + `Please make sure that your file's header is organized as follows: ${validHeader}.`\n      });\n      return false;\n    }\n\n    let parsingErrorMessage = '';\n    this.newUsers.forEach((user) => {\n      const parsingErrors = user.errors;\n      if (parsingErrors.length) {\n        parsingErrors.forEach((error) => {\n          parsingErrorMessage += `Row ${user.data.row}: The user could not be parsed correctly; ${error.message}\\n\\n`;\n        });\n      }\n    });\n    if (!(parsingErrorMessage === '')) {\n      this.setState({ processingSummaryUserFile: parsingErrorMessage });\n      return false;\n    }\n\n    // We need to guard against invalid user types when creating multiple users from file,\n    // since user type is not validated on the backend.\n    // The backend doesn't validate user type because in the modal for adding a single users,\n    // the user type cannot be invalid since it's selected from a dropdown.\n    // However, when multiple users are created from a file, type can be any string.\n    const validTypes = ['Person', 'Admin'];\n    let invalidTypeMessage = '';\n    this.newUsers.forEach((user) => {\n      const userType = user.data.type.trim();\n      if (!validTypes.includes(userType)) {\n        invalidTypeMessage += `Row ${user.data.row}: The user's type \"${userType}\" is invalid. `\n          + `Please select a valid type from ${validTypes}.\\n\\n`;\n      }\n    });\n    if (!(invalidTypeMessage === '')) {\n      this.setState({ processingSummaryUserFile: invalidTypeMessage });\n      return false;\n    }\n\n    const sortedUserEmails = this.newUsers.map((user) => user.data.email).sort();\n    const duplicateUserEmails = new Set();\n    for (let i = 0; i < sortedUserEmails.length - 1; i += 1) {\n      if (sortedUserEmails[i + 1] === sortedUserEmails[i]) {\n        duplicateUserEmails.add(sortedUserEmails[i]);\n      }\n    }\n    if (duplicateUserEmails.size) {\n      this.setState({\n        processingSummaryUserFile: 'The file contains duplicate user '\n          + `emails: ${Array.from(duplicateUserEmails.values())}. Please make sure that each user has a unique email.`\n      });\n      return false;\n    }\n\n    return true;\n  }\n\n  showProcessingSummaryUserFile(userResults) {\n    let summary = '';\n    userResults.forEach((result) => {\n      summary += `${result.value}\\n\\n`;\n    });\n    this.setState({\n      messageNewUserModal: 'Finished processing user file.',\n      processingSummaryUserFile: summary\n    });\n  }\n\n  validateUserInput() {\n    if (this.email.value === '') { // also validated in backend\n      this.setState({ messageNewUserModal: 'Please input email.' });\n      return false;\n    } if (!validateEmail(this.email.value.trim())) { // also validated in backend\n      this.setState({ messageNewUserModal: 'You have entered an invalid email address!' });\n      return false;\n    } if (this.password.value.trim() === '' || this.passwordConfirm.value.trim() === '') {\n      this.setState({ messageNewUserModal: 'Please input password with correct format.' });\n      return false;\n    } if (this.password.value.trim() !== this.passwordConfirm.value.trim()) {\n      this.setState({ messageNewUserModal: 'passwords do not mach!' });\n      return false;\n    } if (this.password.value.trim().length < 8) { // also validated in backend\n      this.setState({ messageNewUserModal: 'Password is too short (minimum is 8 characters)' });\n      return false;\n    } if (this.firstname.value.trim() === '' || this.lastname.value.trim() === ''\n      || this.nameAbbr.value.trim() === '') { // also validated in backend\n      this.setState({ messageNewUserModal: 'Please input First name, Last name and Name abbreviation' });\n      return false;\n    }\n    return true;\n  }\n\n  messageSend() {\n    const { selectedUsers } = this.state;\n    if (this.myMessage.value === '') {\n      this.handleShowAlert('Please input the message!');\n    } else if (!selectedUsers) {\n      this.handleShowAlert('Please select user(s)!');\n    } else {\n      const userIds = [];\n      selectedUsers.map((g) => {\n        userIds.push(g.value);\n        return true;\n      });\n      MessagesFetcher.channelIndividualUsers()\n        .then((result) => {\n          const params = {\n            channel_id: result.id,\n            content: this.myMessage.value,\n            user_ids: userIds\n          };\n          MessagesFetcher.createMessage(params)\n            .then(() => {\n              this.myMessage.value = '';\n              this.setState({\n                selectedUsers: null\n              });\n              this.handleMsgClose();\n            });\n        });\n    }\n  }\n\n  renderMessageModal() {\n    const { selectedUsers } = this.state;\n    return (\n      <Modal\n        show={this.state.showMsgModal}\n        onHide={this.handleMsgClose}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>Send Message</Modal.Title>\n        </Modal.Header>\n        <Modal.Body style={{ overflow: 'auto' }}>\n          <div className=\"col-md-9\">\n            <Form>\n              <FormGroup controlId=\"formControlsTextarea\">\n                <ControlLabel>Message</ControlLabel>\n                <FormControl\n                  componentClass=\"textarea\"\n                  placeholder=\"message...\"\n                  rows=\"20\"\n                  inputRef={(ref) => { this.myMessage = ref; }}\n                />\n              </FormGroup>\n              <FormGroup>\n                <Select.AsyncCreatable\n                  multi\n                  isLoading\n                  backspaceRemoves\n                  value={selectedUsers}\n                  valueKey=\"value\"\n                  labelKey=\"label\"\n                  matchProp=\"name\"\n                  placeholder=\"Select users\"\n                  promptTextCreator={this.promptTextCreator}\n                  loadOptions={loadUserByName}\n                  onChange={this.handleSelectUser}\n                />\n              </FormGroup>\n              <Button\n                bsStyle=\"primary\"\n                onClick={() => this.messageSend()}\n              >\n                Send&nbsp;\n                <i className=\"fa fa-paper-plane\" />\n              </Button>\n            </Form>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  renderNewUserModal() {\n    // const { selectedUsers } = this.state;\n    return (\n      <Modal\n        show={this.state.showNewUserModal}\n        onHide={this.handleNewUserClose}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>New User</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <Tabs id=\"createUserTabs\">\n            <Tab eventKey=\"singleUser\" title=\"Single user\">\n              <Form horizontal>\n                <FormGroup controlId=\"formControlEmail\">\n                  <Col componentClass={ControlLabel} sm={3}>\n                    Email:\n                  </Col>\n                  <Col sm={9}>\n                    <FormControl type=\"email\" name=\"email\" inputRef={(ref) => { this.email = ref; }}\n                      maxLength={120}\n                    />\n                  </Col>\n                </FormGroup>\n                <FormGroup controlId=\"formControlPassword\">\n                  <Col componentClass={ControlLabel} sm={3}>\n                    Password:\n                  </Col>\n                  <Col sm={9}>\n                    <FormControl type=\"password\" name=\"password\" inputRef={(ref) => { this.password = ref; }} />\n                  </Col>\n                </FormGroup>\n                <FormGroup controlId=\"formControlPasswordConfirmation\">\n                  <Col componentClass={ControlLabel} sm={3}>\n                    Password Confirmation:\n                  </Col>\n                  <Col sm={9}>\n                    <FormControl type=\"password\" inputRef={(ref) => { this.passwordConfirm = ref; }} />\n                  </Col>\n                </FormGroup>\n                <FormGroup controlId=\"formControlFirstName\">\n                  <Col componentClass={ControlLabel} sm={3}>\n                    First name:\n                  </Col>\n                  <Col sm={9}>\n                    <FormControl type=\"text\" name=\"firstname\" inputRef={(ref) => { this.firstname = ref; }} />\n                  </Col>\n                </FormGroup>\n                <FormGroup controlId=\"formControlLastName\">\n                  <Col componentClass={ControlLabel} sm={3}>\n                    Last name:\n                  </Col>\n                  <Col sm={9}>\n                    <FormControl type=\"text\" name=\"lastname\" inputRef={(ref) => { this.lastname = ref; }} />\n                  </Col>\n                </FormGroup>\n                <FormGroup controlId=\"formControlAbbr\">\n                  <Col componentClass={ControlLabel} sm={3}>\n                    Abbr (3) *:\n                  </Col>\n                  <Col sm={9}>\n                    <FormControl type=\"text\" name=\"nameAbbr\" inputRef={(ref) => { this.nameAbbr = ref; }} />\n                  </Col>\n                </FormGroup>\n                <FormGroup controlId=\"formControlsType\">\n                  <Col componentClass={ControlLabel} sm={3}>\n                    Type:\n                  </Col>\n                  <Col sm={9}>\n                    <FormControl componentClass=\"select\" inputRef={(ref) => { this.type = ref; }}>\n                      <option value=\"Person\">Person</option>\n                      <option value=\"Admin\">Admin</option>\n                    </FormControl>\n                  </Col>\n                </FormGroup>\n                <FormGroup>\n                  <Col smOffset={0} sm={10}>\n                    <Button bsStyle=\"primary\" onClick={() => this.handleCreateNewUser()}>\n                      Create user&nbsp;\n                      <i className=\"fa fa-plus\" />\n                    </Button>\n                  </Col>\n                </FormGroup>\n              </Form>\n            </Tab>\n            <Tab eventKey=\"multiUser\" title=\"Multiple users from file\">\n              <Form>\n                <FormGroup>\n                  <ControlLabel>Please format the user file like the table below.</ControlLabel>\n                  <Table striped bordered hover>\n                    <thead>\n                      <tr>\n                        <th>email</th>\n                        <th>password</th>\n                        <th>firstname</th>\n                        <th>lastname</th>\n                        <th>nameabbr</th>\n                        <th>type</th>\n                      </tr>\n                    </thead>\n                    <tbody>\n                      <tr>\n                        <td>john.doe@eln.edu</td>\n                        <td>password0</td>\n                        <td>John</td>\n                        <td>Doe</td>\n                        <td>jod</td>\n                        <td>Person</td>\n                      </tr>\n                      <tr>\n                        <td>jane.doe@eln.edu</td>\n                        <td>password1</td>\n                        <td>Jane</td>\n                        <td>Doe</td>\n                        <td>jad</td>\n                        <td>Person</td>\n                      </tr>\n                    </tbody>\n                  </Table>\n                </FormGroup>\n                <FormGroup id=\"userFileDragAndDrop\">\n                  <CSVReader\n                    onDrop={this.handleOnDropUserFile}\n                    onError={this.handleOnErrorUserFile}\n                    style={{}}\n                    config={{ header: true, skipEmptyLines: true }}\n                    addRemoveButton\n                    onRemoveFile={this.handleOnRemoveUserFile}\n                  >\n                    <span>\n                      Drop a CSV user file here or click to upload.\n                      The following column-delimiters are accepted: &apos;,&apos; or &apos;;&apos; or &apos;tab&apos;.\n                    </span>\n                  </CSVReader>\n                </FormGroup>\n                <FormGroup>\n                  <Button bsStyle=\"primary\" onClick={() => this.handleCreateNewUsersFromFile()}>\n                    Create users&nbsp;\n                    <i className=\"fa fa-plus\" />\n                  </Button>\n                </FormGroup>\n                <FormGroup>\n                  <ControlLabel>Processing Summary</ControlLabel>\n                  <FormControl\n                    readOnly\n                    id=\"processingSummary\"\n                    componentClass=\"textarea\"\n                    rows=\"5\"\n                    style={{ whiteSpace: 'pre-wrap', overflowY: 'scroll' }}\n                    value={this.state.processingSummaryUserFile}\n                  />\n                </FormGroup>\n              </Form>\n            </Tab>\n          </Tabs>\n          <Modal.Footer>\n            <FormGroup controlId=\"formControlMessage\">\n              <FormControl type=\"text\" readOnly name=\"messageNewUserModal\" value={this.state.messageNewUserModal} />\n            </FormGroup>\n            <Button bsStyle=\"warning\" onClick={() => this.handleNewUserClose()}>Cancel</Button>\n          </Modal.Footer>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  renderEditUserModal() {\n    const { user } = this.state;\n    return (\n      <Tab.Container id=\"tabs-with-dropdown\" defaultActiveKey=\"first\">\n        <Modal\n          show={this.state.showEditUserModal}\n          onHide={this.handleEditUserClose}\n        >\n          <Modal.Header closeButton>\n            <Modal.Title>\n              <Nav bsStyle=\"tabs\">\n                <NavItem eventKey=\"first\">\n                  Edit user account\n                </NavItem>\n                <NavItem eventKey=\"second\">Delete User</NavItem>\n              </Nav>\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body style={{ overflow: 'auto' }}>\n            <Tab.Content animation>\n              <Tab.Pane eventKey=\"first\">\n                <div className=\"col-md-10 col-md-offset-1\">\n                  <Form horizontal>\n                    <FormGroup controlId=\"formControlEmail\">\n                      <Col componentClass={ControlLabel} sm={3}>\n                        Email:\n                      </Col>\n                      <Col sm={9}>\n                        <FormControl\n                          type=\"email\"\n                          name=\"u_email\"\n                          defaultValue={user.email}\n                          inputRef={(ref) => { this.u_email = ref; }}\n                        />\n                      </Col>\n                    </FormGroup>\n                    <FormGroup controlId=\"formControlFirstName\">\n                      <Col componentClass={ControlLabel} sm={3}>\n                        First name:\n                      </Col>\n                      <Col sm={9}>\n                        <FormControl\n                          type=\"text\"\n                          name=\"u_firstname\"\n                          defaultValue={user.first_name}\n                          inputRef={(ref) => { this.u_firstname = ref; }}\n                        />\n                      </Col>\n                    </FormGroup>\n                    <FormGroup controlId=\"formControlLastName\">\n                      <Col componentClass={ControlLabel} sm={3}>\n                        Last name:\n                      </Col>\n                      <Col sm={9}>\n                        <FormControl\n                          type=\"text\"\n                          name=\"u_lastname\"\n                          defaultValue={user.last_name}\n                          inputRef={(ref) => { this.u_lastname = ref; }}\n                        />\n                      </Col>\n                    </FormGroup>\n                    <FormGroup controlId=\"formControlAbbr\">\n                      <Col componentClass={ControlLabel} sm={3}>\n                        Abbr (3):\n                      </Col>\n                      <Col sm={9}>\n                        <FormControl\n                          type=\"text\"\n                          name=\"u_abbr\"\n                          defaultValue={user.initials}\n                          inputRef={(ref) => { this.u_abbr = ref; }}\n                        />\n                      </Col>\n                    </FormGroup>\n                    <FormGroup controlId=\"formControlsType\">\n                      <Col componentClass={ControlLabel} sm={3}>\n                        Type:\n                      </Col>\n                      <Col sm={9}>\n                        <FormControl\n                          componentClass=\"select\"\n                          defaultValue={user.type}\n                          inputRef={(ref) => { this.u_type = ref; }}\n                        >\n                          <option value=\"Person\">Person</option>\n                          <option value=\"Group\">Group</option>\n                          <option value=\"Admin\">Admin</option>\n                        </FormControl>\n                      </Col>\n                    </FormGroup>\n                    <FormGroup controlId=\"formControlMessage\">\n                      <Col sm={12}>\n                        <FormControl\n                          type=\"text\"\n                          readOnly\n                          name=\"messageEditUserModal\"\n                          value={this.state.messageEditUserModal}\n                        />\n                      </Col>\n                    </FormGroup>\n                    <FormGroup>\n                      <Button className=\"col-sm-5\" onClick={() => this.handleEditUserClose()}>\n                        Cancel&nbsp;\n                      </Button>\n                      <Col sm={2}>&nbsp;</Col>\n                      <Button bsStyle=\"primary\" className=\"col-sm-5\" onClick={() => this.handleUpdateUser(user)}>\n                        Update&nbsp;\n                        <i className=\"fa fa-save\" />\n                      </Button>\n                    </FormGroup>\n                  </Form>\n                </div>\n              </Tab.Pane>\n              <Tab.Pane eventKey=\"second\">\n                <div className=\"col-md-10 col-md-offset-1\">\n\n                  <Form horizontal>\n                    <FormGroup controlId=\"formControlEmail\">\n                      <Col componentClass={ControlLabel} sm={3}>\n                        Email:\n                      </Col>\n                      <Col sm={9}>\n                        <FormControl\n                          type=\"email\"\n                          name=\"u_email\"\n                          defaultValue={user.email}\n                          disabled\n                        />\n                      </Col>\n                    </FormGroup>\n                    <FormGroup controlId=\"formControlFirstName\">\n                      <Col componentClass={ControlLabel} sm={3}>\n                        First name:\n                      </Col>\n                      <Col sm={9}>\n                        <FormControl\n                          type=\"text\"\n                          name=\"u_firstname\"\n                          defaultValue={user.first_name}\n                          disabled\n                        />\n                      </Col>\n                    </FormGroup>\n                    <FormGroup controlId=\"formControlLastName\">\n                      <Col componentClass={ControlLabel} sm={3}>\n                        Last name:\n                      </Col>\n                      <Col sm={9}>\n                        <FormControl\n                          type=\"text\"\n                          name=\"u_lastname\"\n                          defaultValue={user.last_name}\n                          disabled\n                        />\n                      </Col>\n                    </FormGroup>\n                    <FormGroup controlId=\"formControlAbbr\">\n                      <Col componentClass={ControlLabel} sm={3}>\n                        Abbr (3):\n                      </Col>\n                      <Col sm={9}>\n                        <FormControl\n                          type=\"text\"\n                          name=\"u_abbr\"\n                          defaultValue={user.initials}\n                          disabled\n                        />\n                      </Col>\n                    </FormGroup>\n                    <FormGroup controlId=\"formControlsType\">\n                      <Col componentClass={ControlLabel} sm={3}>\n                        Type:\n                      </Col>\n                      <Col sm={9}>\n                        <FormControl\n                          disabled\n                          defaultValue={user.type}\n                        />\n                      </Col>\n                    </FormGroup>\n                    <FormGroup controlId=\"formControlMessage\">\n                      <Col sm={12}>\n                        <FormControl\n                          type=\"text\"\n                          readOnly\n                          name=\"messageEditUserModal\"\n                          value=\"Delete User Account. Are you sure ?\"\n                          bsClass=\"form-control alert-danger text-center\"\n                        />\n                      </Col>\n                    </FormGroup>\n\n                    <FormGroup>\n                      <Button className=\"col-sm-5\" onClick={() => this.handleEditUserClose()}>\n                        Cancel\n                      </Button>\n                      <Col sm={2}>&nbsp;</Col>\n                      <Button bsStyle=\"danger\" className=\"col-sm-5\" onClick={() => this.handleDeleteUser(user)}>\n                        Delete &nbsp;\n                        <i className=\"fa fa-trash\" />\n                      </Button>\n                    </FormGroup>\n                  </Form>\n                </div>\n              </Tab.Pane>\n            </Tab.Content>\n          </Modal.Body>\n        </Modal>\n      </Tab.Container>\n    );\n  }\n\n  renderRestoreAccountModal() {\n    return (\n      <Modal show={this.state.showRestoreAccountModal} onHide={this.handleRestoreAccountClose}>\n        <Modal.Header closeButton>\n          <Modal.Title>Restore Account</Modal.Title>\n        </Modal.Header>\n        <Modal.Body style={{ overflow: 'auto' }}>\n          <div className=\"col-md-9\">\n            <Form horizontal>\n              <FormGroup controlId=\"formControlAbbr\">\n                <Col componentClass={ControlLabel} sm={3}>\n                  Abbr:\n                </Col>\n                <Col sm={9}>\n                  <FormControl\n                    type=\"text\"\n                    name=\"nameAbbreviation\"\n                    placeholder=\"Please enter the name abbreviation ..\"\n                    inputRef={(ref) => {\n                      this.nameAbbreviation = ref;\n                    }}\n                  />\n                </Col>\n              </FormGroup>\n              <FormGroup controlId=\"formControlAbbr\">\n                <Col componentClass={ControlLabel} sm={3}>\n                  ID:\n                </Col>\n                <Col sm={9}>\n                  <FormControl\n                    type=\"text\"\n                    name=\"id\"\n                    placeholder=\".. or enter the user ID\"\n                    defaultValue=\"\"\n                    onFocus={() => this.setState({ showError: false, showSuccess: false })}\n                    inputRef={(ref) => {\n                      this.id = ref;\n                    }}\n                  />\n                </Col>\n              </FormGroup>\n              <FormGroup\n                controlId=\"formControlMessage\"\n                validationState={`${this.state.showError\n                  ? 'error'\n                  : this.state.showSuccess ? 'success' : null}`}\n              >\n                <Col sm={12}>\n                  <FormControl\n                    type=\"text\"\n                    readOnly\n                    name=\"messageRestoreAccountModal\"\n                    value={this.state.messageRestoreAccountModal}\n                  />\n                </Col>\n              </FormGroup>\n              {this.state.deletedUsers.length > 0\n                && renderDeletedUsersTable(this.state.deletedUsers)}\n              <FormGroup>\n                <Col smOffset={0} sm={10}>\n                  <Button bsStyle=\"primary\" onClick={() => this.handleRestoreAccount()}>\n                    Restore&nbsp;\n                    <i className=\"fa fa-save\" />\n                  </Button>\n                  &nbsp;\n                  <Button bsStyle=\"warning\" onClick={() => this.handleRestoreAccountClose()}>\n                    Cancel&nbsp;\n                  </Button>\n                </Col>\n              </FormGroup>\n            </Form>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  renderGenericAdminModal() {\n    const { user, showGenericAdminModal } = this.state;\n    if (showGenericAdminModal) {\n      return (\n        <GenericAdminModal\n          user={user}\n          fnShowModal={this.handleGenericAdminModal}\n          fnCb={this.handleGenericAdminModalCb}\n        />\n      );\n    }\n    return null;\n  }\n\n  render() {\n    const renderConfirmButton = (show, userId) => {\n      if (show) {\n        return (\n          <OverlayTrigger placement=\"bottom\" overlay={confirmUserTooltip}>\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle=\"info\"\n              onClick={() => this.handleConfirmUserAccount(userId, false)}\n            >\n              <i className=\"fa fa-check-square\" />\n            </Button>\n          </OverlayTrigger>\n        );\n      }\n      return <span />;\n    };\n    /* eslint-disable camelcase */\n    const renderReConfirmButton = (unconfirmed_email, userId) => {\n      if (unconfirmed_email) {\n        return (\n          <OverlayTrigger placement=\"bottom\" overlay={confirmEmailChangeTooltip(unconfirmed_email)}>\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle=\"warning\"\n              onClick={() => this.handleReConfirmUserAccount(userId)}\n            >\n              <i className=\"fa fa-check-square\" />\n            </Button>\n          </OverlayTrigger>\n        );\n      }\n      return <span />;\n    };/* eslint-enable camelcase */\n\n    const { users, filterCriteria } = this.state;\n\n    // filtering logic\n    const filteredUsers = users.filter((user) => Object.keys(filterCriteria).every((key) => {\n      // skip if filter field is empty\n      if (!filterCriteria[key]) return true;\n      // special case for dropdowns\n      if (key === 'account_active' || key === 'locked_at' || key === 'type') {\n        return filterCriteria[key] === (user[key] ? 'true' : 'false') || filterCriteria[key] === user[key];\n      }\n      return String(user[key]).toLowerCase().includes(String(filterCriteria[key]).toLowerCase());\n    }));\n\n    const tcolumn = (\n      <thead style={{\n        position: 'sticky', top: '0px', zIndex: '1', backgroundColor: '#eee'\n      }}\n      >\n        <tr style={{ height: '26px', verticalAlign: 'middle' }}>\n          <th width=\"1%\">#</th>\n          <th width=\"17%\">Actions</th>\n          <th width=\"12%\">Name</th>\n          <th width=\"6%\">Abbr.</th>\n          <th width=\"8%\">Email</th>\n          <th width=\"7%\">Type</th>\n          <th width=\"10%\">Login at</th>\n          <th width=\"2%\">ID</th>\n        </tr>\n        <tr>\n          <th aria-label=\"Empty header for the '#' column\" />\n          <th>\n            <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n              <FormControl\n                componentClass=\"select\"\n                placeholder=\"Active-Inactive\"\n                onChange={(e) => this.updateDropdownFilter('account_active', e.target.value)}\n              >\n                <option value=\"\">Active & Inactive</option>\n                <option value=\"true\">Active</option>\n                <option value=\"false\">Inactive</option>\n              </FormControl>\n              <FormControl\n                componentClass=\"select\"\n                placeholder=\"Locked-Unlocked\"\n                onChange={(e) => this.updateDropdownFilter('locked_at', e.target.value)}\n              >\n                <option value=\"\">Locked & Unlocked</option>\n                <option value=\"true\">Locked</option>\n                <option value=\"false\">Unlocked</option>\n              </FormControl>\n            </div>\n          </th>\n          <th>\n            <FormControl type=\"text\" placeholder=\"Name\" onChange={(e) => this.updateFilter('name', e.target.value)} />\n          </th>\n          <th>\n            <FormControl\n              type=\"text\"\n              placeholder=\"Abbr.\"\n              onChange={(e) => this.updateFilter('initials', e.target.value)}\n            />\n          </th>\n          <th>\n            <FormControl type=\"text\" placeholder=\"Email\" onChange={(e) => this.updateFilter('email', e.target.value)} />\n          </th>\n          <th>\n            <FormControl\n              componentClass=\"select\"\n              placeholder=\"Person-Admin\"\n              onChange={(e) => this.updateDropdownFilter('type', e.target.value)}\n            >\n              <option value=\"\">All</option>\n              <option value=\"Person\">Person</option>\n              <option value=\"Admin\">Admin</option>\n            </FormControl>\n          </th>\n          <th aria-label=\"Empty header for the 'Login at' column\" />\n          <th aria-label=\"Empty header for the 'ID' column\" />\n        </tr>\n      </thead>\n    );\n\n    const tbody = filteredUsers.map((g, idx) => (\n      <tr key={`row_${g.id}`} style={{ height: '26px', verticalAlign: 'middle' }}>\n        <td width=\"2%\">\n          {idx + 1}\n        </td>\n        <td width=\"17%\">\n          <OverlayTrigger placement=\"bottom\" overlay={editTooltip}>\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle=\"info\"\n              onClick={() => this.handleEditUserShow(g)}\n            >\n              <i className=\"fa fa-user\" />\n            </Button>\n          </OverlayTrigger>\n          &nbsp;\n          <OverlayTrigger placement=\"bottom\" overlay={resetPasswordTooltip}>\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle=\"success\"\n              onClick={() => handleResetPassword(g.id, true, this.handleShowAlert)}\n            >\n              <i className=\"fa fa-key\" />\n            </Button>\n          </OverlayTrigger>\n          &nbsp;\n          <OverlayTrigger placement=\"bottom\" overlay={resetPasswordInstructionsTooltip}>\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle=\"primary\"\n              onClick={() => handleResetPassword(g.id, false, this.handleShowAlert)}\n            >\n              <i className=\"fa fa-key\" />\n            </Button>\n          </OverlayTrigger>\n          &nbsp;\n          <OverlayTrigger placement=\"bottom\" overlay={g.locked_at === null ? disableTooltip : enableTooltip}>\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle={g.locked_at === null ? 'default' : 'warning'}\n              onClick={() => this.handleEnableDisableAccount(g.id, g.locked_at, false)}\n            >\n              <i className={g.locked_at === null ? 'fa fa-lock' : 'fa fa-unlock'} />\n            </Button>\n          </OverlayTrigger>\n          &nbsp;\n          <OverlayTrigger\n            placement=\"bottom\"\n            overlay={(g.converter_admin === null || g.converter_admin === false)\n              ? converterEnableTooltip : converterDisableTooltip}\n          >\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle={(g.converter_admin === null || g.converter_admin === false) ? 'default' : 'success'}\n              onClick={() => this.handleConverterAdmin(g.id, g.converter_admin, false)}\n            >\n              <i className=\"fa fa-hourglass-half\" aria-hidden=\"true\" />\n            </Button>\n          </OverlayTrigger>\n          &nbsp;\n          <OverlayTrigger\n            placement=\"bottom\"\n            overlay={(g.is_templates_moderator === null || g.is_templates_moderator\n              === false) ? templateModeratorEnableTooltip : templateModeratorDisableTooltip}\n          >\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle={(g.is_templates_moderator === null\n                || g.is_templates_moderator === false) ? 'default' : 'success'}\n              onClick={() => this.handleTemplatesModerator(g.id, g.is_templates_moderator, false)}\n            >\n              <i className=\"fa fa-book\" aria-hidden=\"true\" />\n            </Button>\n          </OverlayTrigger>\n          &nbsp;\n          <OverlayTrigger\n            placement=\"bottom\"\n            overlay={(g.molecule_editor == null || g.molecule_editor === false)\n              ? moleculeModeratorEnableTooltip : moleculeModeratorDisableTooltip}\n          >\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle={(g.molecule_editor === null || g.molecule_editor === false) ? 'default' : 'success'}\n              onClick={() => this.handleMoleculesModerator(g.id, g.molecule_editor, false)}\n            >\n              <i className=\"icon-sample\" aria-hidden=\"true\" />\n            </Button>\n          </OverlayTrigger>\n          &nbsp;\n          <OverlayTrigger\n            placement=\"bottom\"\n            overlay={<Tooltip id=\"generic_tooltip\">Grant/Revoke Generic Designer</Tooltip>}\n          >\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle={(g.generic_admin?.elements\n                || g.generic_admin?.segments || g.generic_admin?.datasets) ? 'success' : 'default'}\n              onClick={() => this.handleGenericAdminModal(true, g)}\n            >\n              <i className=\"fa fa-empire\" aria-hidden=\"true\" />\n            </Button>\n          </OverlayTrigger>\n          &nbsp;\n          <OverlayTrigger\n            placement=\"bottom\"\n            overlay={!g.account_active ? accountActiveTooltip : accountInActiveTooltip}\n          >\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle={g.account_active === true ? 'default' : 'danger'}\n              onClick={() => this.handleActiveInActiveAccount(g.id, g.account_active)}\n            >\n              <i className={g.account_active === true ? 'fa fa-user-circle' : 'fa fa-user-times'} aria-hidden=\"true\" />\n            </Button>\n          </OverlayTrigger>\n          &nbsp;\n          {renderConfirmButton(g.type !== 'Device' && (g.confirmed_at == null || g.confirmed_at.length <= 0), g.id)}\n          {renderReConfirmButton(g.unconfirmed_email, g.id)}\n        </td>\n        <td width=\"12%\">\n          {' '}\n          {g.name}\n          {' '}\n        </td>\n        <td width=\"6%\">\n          {' '}\n          {g.initials}\n          {' '}\n        </td>\n        <td width=\"8%\">\n          {' '}\n          {g.email}\n          {' '}\n        </td>\n        <td width=\"7%\">\n          {' '}\n          {g.type}\n          {' '}\n        </td>\n        <td width=\"15%\">\n          {' '}\n          {g.current_sign_in_at}\n          {' '}\n        </td>\n        <td width=\"2%\">\n          {' '}\n          {g.id}\n          {' '}\n        </td>\n      </tr>\n    ));\n\n    return (\n      <div>\n        <MessageAlert message={this.state.alertMessage} onHide={this.handleDismissAlert} />\n        <Panel>\n          <Button bsStyle=\"warning\" bsSize=\"small\" onClick={() => this.handleMsgShow()}>\n            Send Message&nbsp;\n            <i className=\"fa fa-commenting-o\" />\n          </Button>\n          &nbsp;\n          <Button bsStyle=\"primary\" bsSize=\"small\" onClick={() => this.handleNewUserShow()} data-cy=\"create-user\">\n            New User&nbsp;\n            <i className=\"fa fa-plus\" />\n          </Button>\n          &nbsp;\n          <Button\n            bsStyle=\"primary\"\n            bsSize=\"small\"\n            onClick={() => this.handleRestoreAccountShow()}\n            data-cy=\"restore-user\"\n          >\n            Restore Account&nbsp;\n            <i className=\"fa fa-undo\" />\n          </Button>\n        </Panel>\n        <Panel>\n          <div style={{ maxHeight: '399px', overflowY: 'auto' }} ref={this.tableBodyRef}>\n            <Table>\n              {tcolumn}\n              <tbody>\n                {tbody}\n              </tbody>\n            </Table>\n          </div>\n        </Panel>\n        {this.renderMessageModal()}\n        {this.renderNewUserModal()}\n        {this.renderEditUserModal()}\n        {this.renderRestoreAccountModal()}\n        {this.renderGenericAdminModal()}\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport { Button, ButtonGroup, Popover, OverlayTrigger } from 'react-bootstrap';\nimport AdminFetcher from 'src/fetchers/AdminFetcher';\n\nexport default class DeleteGroupDeviceButton extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      groups: props.currentState.groups,\n      devices: props.currentState.devices\n    };\n\n    this.onChangeGroupData = this.onChangeGroupData.bind(this);\n    this.onChangeDeviceData = this.onChangeDeviceData.bind(this);\n  }\n\n  componentDidMount() {\n  }\n\n  onChangeGroupData = (groups) => {\n    this.props.onChangeGroupData(groups);\n  }\n\n  onChangeDeviceData = (devices) => {\n    this.props.onChangeDeviceData(devices);\n  }\n\n  confirmDelete(rootType, actionType, groupRec, userRec, isRoot = false) {\n    const { groups, devices } = this.state;\n    const rmUsers = userRec == null ? [] : [userRec.id];\n\n    const params = {\n      action: isRoot ? 'RootDel' : 'NodeDel',\n      rootType,\n      actionType,\n      id: groupRec.id,\n      destroy_obj: isRoot,\n      rm_users: rmUsers\n    };\n\n    AdminFetcher.updateGroup(params)\n      .then((result) => {\n        switch (rootType) {\n          case 'Group':\n            this.onChangeGroupData();\n            break;\n          case 'Device':\n            this.onChangeDeviceData();\n            break;\n          default:\n            break;\n        }\n      });\n  }\n\n  render() {\n    const { rootType, actionType, groupRec, userRec, isRoot } = this.props;\n    let msg = 'remove yourself from the group';\n    if (rootType === 'Group' && isRoot) {\n      msg = `remove group: ${groupRec.name}`;\n    } else if (rootType === 'Device' && isRoot) {\n      msg = `remove device: ${groupRec.name}`;\n    } else if (rootType === 'Group' && !isRoot && actionType === 'Person') {\n      msg = `remove user: ${userRec.name} from group: ${groupRec.name} ?`;\n    } else if (rootType === 'Group' && !isRoot && actionType === 'Device') {\n      msg = `remove device: ${userRec.name} from group: ${groupRec.name} ?`;\n    } else if (rootType === 'Device' && !isRoot) {\n      msg = `remove user: ${userRec.name} from group: ${groupRec.name} ?`;\n    } else {\n      msg = `remove ???: ${groupRec.name}`;\n    }\n\n    const popover = (\n      <Popover id=\"popover-positioned-scrolling-left\">\n        {msg} <br />\n        <div className=\"btn-toolbar\">\n          <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.confirmDelete(rootType, actionType, groupRec, userRec, isRoot)}>\n            Yes\n          </Button><span>&nbsp;&nbsp;</span>\n          <Button bsSize=\"xsmall\" bsStyle=\"warning\" onClick={this.handleClick} >\n            No\n          </Button>\n        </div>\n      </Popover>\n    );\n\n    return (\n      <ButtonGroup className=\"actions\">\n        <OverlayTrigger\n          animation\n          placement=\"right\"\n          root\n          trigger=\"focus\"\n          overlay={popover}\n        >\n          <Button bsSize=\"xsmall\" bsStyle=\"danger\" >\n            <i className=\"fa fa-trash-o\" />\n          </Button>\n        </OverlayTrigger>\n      </ButtonGroup>\n    );\n  }\n}\n","import React from 'react';\nimport { ButtonGroup, OverlayTrigger, Tooltip, Button, Table, Panel } from 'react-bootstrap';\nimport AdminFetcher from 'src/fetchers/AdminFetcher';\nimport { findIndex } from 'lodash';\nimport DeleteGroupDeviceButton from 'src/apps/admin/DeleteGroupDeviceButton';\n\nexport default class AdminGroupElement extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showUsers: false,\n      showDevices: false,\n      groups: props.currentState.groups\n    };\n\n    this.toggleUsers = this.toggleUsers.bind(this);\n    this.toggleDevices = this.toggleDevices.bind(this);\n  }\n\n  setGroupAdmin(groupRec, userRec, setAdmin = true) {\n    const { groups } = this.state;\n    const params = {\n      action: 'NodeAdm',\n      rootType: 'Group',\n      actionType: 'Adm',\n      id: groupRec.id,\n      admin_id: userRec.id,\n      set_admin: setAdmin\n    };\n    AdminFetcher.updateGroup(params)\n      .then((result) => {\n        if (setAdmin) {\n          groupRec.admins.splice(1, 0, userRec);\n        } else {\n          const usrIdx = findIndex(groupRec.admins, o => o.id === userRec.id);\n          groupRec.admins.splice(usrIdx, 1);\n        }\n        const idx = findIndex(groups, o => o.id === groupRec.id);\n        groups.splice(idx, 1, groupRec);\n        this.props.onChangeGroupData(groups);\n      });\n  }\n\n  toggleUsers() {\n    this.setState({\n      showUsers: !this.state.showUsers\n    })\n  }\n\n  toggleDevices() {\n    this.setState({\n      showDevices: !this.state.showDevices\n    })\n  }\n\n  renderGroupButtons(group) {\n    return (\n      <td>\n        <ButtonGroup aria-label=\"Group-Users\">\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"groupUsersShow\">List Group-Users</Tooltip>}>\n            <Button bsSize=\"xsmall\" type=\"button\" bsStyle=\"info\" onClick={this.toggleUsers} >\n              <i className=\"fa fa-users\" />&nbsp;({group.users.length < 10 ? `0${group.users.length}` : group.users.length})\n            </Button>\n          </OverlayTrigger>\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"groupUsersAdd\">Add user to group</Tooltip>}>\n            <Button bsSize=\"xsmall\" type=\"button\" onClick={() => this.props.onShowModal(group, 'Group', 'Person')} >\n              <i className=\"fa fa-user\" /><i className=\"fa fa-plus\" />\n            </Button>\n          </OverlayTrigger>\n        </ButtonGroup>&nbsp;&nbsp;\n\n        <ButtonGroup>\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"groupDevicesShow\">List Group-Devices</Tooltip>}>\n            <Button bsSize=\"xsmall\" type=\"button\" bsStyle=\"success\" onClick={this.toggleDevices} >\n              <i className=\"fa fa-server\" />&nbsp;({group.devices.length < 10 ? `0${group.devices.length}` : group.devices.length})\n            </Button>\n          </OverlayTrigger>\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"groupUsersAdd\">Add device to group</Tooltip>}>\n            <Button bsSize=\"xsmall\" type=\"button\" onClick={() => this.props.onShowModal(group, 'Group', 'Device')} >\n              <i className=\"fa fa-laptop\" /><i className=\"fa fa-plus\" />\n            </Button>\n          </OverlayTrigger>\n        </ButtonGroup>&nbsp;&nbsp;\n        <ButtonGroup>\n          <DeleteGroupDeviceButton rootType={'Group'}\n            groupRec={group}\n            isRoot={true}\n            currentState={this.state}\n            onChangeGroupData={this.props.onChangeGroupData} />\n        </ButtonGroup>\n      </td>\n    );\n  }\n\n  renderGroupUserButtons(group, user) {\n    const isAdmin = group.admins && group.admins.filter(a => (a.id === user.id)).length > 0;\n    const adminTooltip = isAdmin === true ? 'set to normal user' : 'set to Administrator';\n    return (\n      <td width=\"30%\">\n        <ButtonGroup className=\"actions\">\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"userAdmin\">{adminTooltip}</Tooltip>}>\n            <Button\n              bsSize=\"xsmall\"\n              type=\"button\"\n              bsStyle={isAdmin === true ? 'default' : 'info'}\n              onClick={() => this.setGroupAdmin(group, user, !isAdmin)}\n            >\n              <i className=\"fa fa-key\" />\n            </Button>\n          </OverlayTrigger>\n          <DeleteGroupDeviceButton rootType={'Group'}\n            actionType={'Person'}\n            groupRec={group}\n            userRec={user}\n            currentState={this.state}\n            onChangeGroupData={this.props.onChangeGroupData} />\n        </ButtonGroup>\n        &nbsp;&nbsp;\n      </td>\n    );\n  }\n\n  render() {\n    const { groupElement } = this.props;\n    let idx = this.props.index;\n    const { showUsers, showDevices } = this.state;\n    const adminIcon = (<OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"admin\">Group Administrator</Tooltip>}><i className=\"fa fa-key\" /></OverlayTrigger>);\n\n    return (\n      <tbody key={`tbody_${groupElement.id}`}>\n        <tr key={`row_${groupElement.id}`} id={`row_${groupElement.id}`} style={{ fontWeight: 'bold' }}>\n          <td>{idx + 1}</td>\n          {this.renderGroupButtons(groupElement)}\n          <td>{groupElement.name}</td>\n          <td>{groupElement.name_abbreviation}</td>\n          <td>\n            {groupElement.admins && groupElement.admins.map(x => x.name).join(', ')}&nbsp;&nbsp;\n          </td>\n          <td>{groupElement.email}</td>\n        </tr>\n        <tr className={'collapse' + (showUsers ? 'in' : '')} id={`div_row_${groupElement.id}`}>\n          <td colSpan=\"7\">\n            <Panel>\n              <Panel.Heading>\n                <Panel.Title>\n                  Users in Group: {groupElement.name}\n                </Panel.Title>\n              </Panel.Heading>\n              <Table>\n                <tbody>\n                  {groupElement.users.map((u, i) => (\n                    <tr key={`row_${groupElement.id}_${u.id}`} id={`row_${groupElement.id}_${u.id}`} style={{ backgroundColor: '#c4e3f3' }}>\n                      <td width=\"5%\">{i + 1}</td>\n                      <td width=\"20%\">{u.name}</td>\n                      <td width=\"10%\">{u.initials}</td>\n                      <td width=\"20%\">{u.email}</td>\n                      <td width=\"15%\">{groupElement.admins && groupElement.admins.filter(a => (a.id === u.id)).length > 0 ? adminIcon : ''}</td>\n                      {this.renderGroupUserButtons(groupElement, u)}\n                    </tr>\n                  ))}\n                </tbody>\n              </Table>\n            </Panel>\n          </td>\n        </tr>\n        <tr className={'collapse' + (showDevices ? 'in' : '')} id={`div_row_d${groupElement.id}`}>\n          <td colSpan=\"7\">\n            <Panel>\n              <Panel.Heading>\n                <Panel.Title>\n                  Devices in Group: {groupElement.name}\n                </Panel.Title>\n              </Panel.Heading>\n              <Table>\n                <tbody>\n                  {groupElement.devices.map((u, i) => (\n                    <tr key={`row_${groupElement.id}_${u.id}`} id={`row_${groupElement.id}_${u.id}`} style={{ backgroundColor: '#c4e3f3' }}>\n                      <td width=\"5%\">{i + 1}</td>\n                      <td width=\"20%\">{u.name}</td>\n                      <td width=\"10%\">{u.initials}</td>\n                      <td width=\"20%\">{}</td>\n                      <td width=\"15%\">{}</td>\n                      <td width=\"30%\">\n                        <DeleteGroupDeviceButton rootType={'Group'}\n                          actionType={'Device'}\n                          groupRec={groupElement}\n                          userRec={u}\n                          currentState={this.state}\n                          onChangeGroupData={this.props.onChangeGroupData} /></td>\n                    </tr>\n                  ))}\n                </tbody>\n              </Table>\n            </Panel>\n          </td>\n        </tr>\n      </tbody>\n    );\n  }\n}\n","import React from 'react';\nimport { Modal, Panel, Table, Button, FormGroup, ControlLabel, Form, FormControl } from 'react-bootstrap';\nimport Select from 'react-select';\nimport { findIndex, filter } from 'lodash';\nimport AdminFetcher from 'src/fetchers/AdminFetcher';\nimport AdminDeviceFetcher from 'src/fetchers/AdminDeviceFetcher';\nimport { selectUserOptionFormater, selectDeviceOptionFormater } from 'src/utilities/selectHelper';\n\nimport AdminGroupElement from 'src/apps/admin/AdminGroupElement';\n\nexport default class GroupsDevices extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      groups: [],\n      showModal: false,\n      showCreateModal: false,\n      rootType: '', // Group\n      actionType: 'Person', // Person Group Device Adm\n      root: {},\n    };\n    this.handleSelectUser = this.handleSelectUser.bind(this);\n    this.loadUserByNameType = this.loadUserByNameType.bind(this);\n    this.handleShowModal = this.handleShowModal.bind(this);\n    this.handleClose = this.handleClose.bind(this);\n    this.handleShowCreateModal = this.handleShowCreateModal.bind(this);\n    this.handleCloseGroup = this.handleCloseGroup.bind(this);\n    this.handleGroupChange = this.handleGroupChange.bind(this);\n  }\n\n  componentDidMount() {\n    this.fetch('Group');\n  }\n\n  handleGroupChange() {\n    this.fetch('Group');\n  }\n\n  setGroupAdmin(groupRec, userRec, setAdmin = true) {\n    const { groups } = this.state;\n    const params = {\n      action: 'NodeAdm',\n      rootType: 'Group',\n      actionType: 'Adm',\n      id: groupRec.id,\n      admin_id: userRec.id,\n      set_admin: setAdmin\n    };\n    AdminFetcher.updateGroup(params)\n      .then((result) => {\n        if (setAdmin) {\n          groupRec.admins.splice(1, 0, userRec);\n        } else {\n          const usrIdx = findIndex(groupRec.admins, o => o.id === userRec.id);\n          groupRec.admins.splice(usrIdx, 1);\n        }\n        const idx = findIndex(groups, o => o.id === groupRec.id);\n        groups.splice(idx, 1, groupRec);\n        this.setState({ groups });\n      });\n  }\n\n  fetch(type) {\n    AdminFetcher.fetchGroupsDevices(type)\n      .then((result) => {\n        switch (type) {\n          case 'Group':\n            this.setState({ groups: result.list });\n            break;\n          case 'Device':\n            this.setState({ devices: result.list });\n            break;\n          default:\n            break;\n        }\n      });\n  }\n\n  fetchDevices() {\n    AdminDeviceFetcher.fetchDevices()\n      .then((result) => {\n        this.setState({\n          devices: result.devices\n        });\n      });\n  }\n\n  handleShowModal(root, rootType, actionType) {\n    this.setState({\n      showModal: true,\n      actionType,\n      rootType,\n      root\n    });\n  }\n\n  handleClose() {\n    this.setState({\n      showModal: false,\n      rootType: '',\n      actionType: '',\n      root: null\n    });\n  }\n\n  handleShowCreateModal(rootType) {\n    this.setState({\n      showCreateModal: true,\n      rootType\n    });\n  }\n\n  handleCloseGroup() {\n    this.setState({ showCreateModal: false });\n  }\n\n  handleSelectUser(val) {\n    if (val) { this.setState({ selectedUsers: val }); }\n  }\n\n  loadUserByNameType(input) {\n    const { actionType } = this.state;\n    if (!input) {\n      return Promise.resolve({ options: [] });\n    }\n\n    if (actionType == 'Device') {\n      return AdminDeviceFetcher.fetchDevicesByName(input)\n        .then((res) => selectDeviceOptionFormater({ data: res, withType: false }))\n        .catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    } else {\n      return AdminFetcher.fetchUsersByNameType(input, actionType)\n        .then((res) => selectUserOptionFormater({ data: res, withType: false }))\n        .catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    }    \n  }\n\n  createGroup() {\n    const { groups, devices, rootType } = this.state;\n    const param = {\n      rootType,\n      first_name: this.firstInput.value.trim(),\n      last_name: this.lastInput.value.trim(),\n      name_abbreviation: this.abbrInput.value.trim()\n    };\n\n    if (this.emailInput.value.trim().length > 0) {\n      param.email = this.emailInput.value.trim();\n    }\n\n    AdminFetcher.createGroupDevice(param)\n      .then((result) => {\n        if (result.error) {\n          alert(result.error);\n        } else {\n          switch (rootType) {\n            case 'Group':\n              groups.push(result);\n              this.setState({\n                groups,\n                showCreateModal: false\n              });\n              break;\n            case 'Device':\n              devices.push(result);\n              this.setState({\n                devices,\n                showCreateModal: false\n              });\n              break;\n            default:\n              break;\n          }\n        }\n      });\n  }\n\n  confirmDelete(rootType, actionType, groupRec, userRec, isRoot = false) {\n    const { groups, devices } = this.state;\n    const rmUsers = userRec == null ? [] : [userRec.id];\n\n    const params = {\n      action: isRoot ? 'RootDel' : 'NodeDel',\n      rootType,\n      actionType,\n      id: groupRec.id,\n      destroy_obj: isRoot,\n      rm_users: rmUsers\n    };\n\n    AdminFetcher.updateGroup(params)\n      .then((result) => {\n        switch (rootType) {\n          case 'Group':\n            if (isRoot === true) {\n              this.setState({\n                groups: filter(this.state.groups, o => o.id != groupRec.id),\n              });\n            } else {\n              const idx = findIndex(groups, o => o.id === result.root.id);\n              groups.splice(idx, 1, result.root);\n              this.setState({ groups });\n            }\n            this.fetchDevices();\n            break;\n          case 'Device':\n            if (isRoot === true) {\n              this.setState({\n                devices: filter(this.state.devices, o => o.id !== groupRec.id),\n              });\n            } else {\n              const idx = findIndex(devices, o => o.id === result.root.id);\n              devices.splice(idx, 1, result.root);\n              this.setState({ devices });\n            }\n            this.fetch('Group');\n            break;\n          default:\n            break;\n        }\n      });\n  }\n\n  addToRoot(groupRec) {\n    const {\n      selectedUsers,\n      groups,\n      devices,\n      rootType,\n      actionType\n    } = this.state;\n\n    const userIds = [];\n    selectedUsers.map((g) => {\n      userIds.push(g.value);\n      return true;\n    });\n\n    const params = {\n      action: 'NodeAdd',\n      rootType,\n      actionType,\n      id: groupRec.id,\n      add_users: userIds\n    };\n    let idx = -1;\n\n    AdminFetcher.updateGroup(params)\n      .then((result) => {\n        switch (rootType) {\n          case 'Group':\n            idx = findIndex(groups, o => o.id === result.root.id);\n            groups.splice(idx, 1, result.root);\n            this.fetchDevices();\n            break;\n          case 'Device':\n            idx = findIndex(devices, o => o.id === result.root.id);\n            devices.splice(idx, 1, result.root);\n            this.fetch('Group');\n            break;\n          default:\n            break;\n        }\n        this.setState({ selectedUsers: null, showModal: false });\n      });\n  }\n\n  renderGroups() {\n    const { groups } = this.state;\n    let tbody = null;\n    if (Object.keys(groups).length <= 0) {\n      tbody = null;\n    } else {\n      tbody = groups.map((g, idx) => (\n        <AdminGroupElement\n          groupElement={g}\n          index={idx}\n          currentState={this.state}\n          onChangeGroupData={this.handleGroupChange}\n          onShowModal={this.handleShowModal}\n          key={`group-element-key-component-${idx}`}\n        />\n      ));\n    }\n\n    return (\n      <Panel key=\"group-panel-key\">\n        <Panel.Heading>\n          <Panel.Title>\n            Group List &nbsp;\n            ({groups.length}) &nbsp;\n            <Button bsStyle=\"default\" onClick={() => this.handleShowCreateModal('Group')}>Add New Group</Button>\n          </Panel.Title>\n        </Panel.Heading>\n        <Table responsive condensed hover>\n          <thead>\n            <tr style={{ backgroundColor: '#ddd' }}>\n              <th width=\"5%\">#</th>\n              <th width=\"25%\">Actions</th>\n              <th width=\"20%\">Name</th>\n              <th width=\"10%\">Kürzel</th>\n              <th width=\"20%\">Admin by</th>\n              <th width=\"20%\">Email</th>\n            </tr>\n          </thead>\n          {tbody}\n        </Table>\n      </Panel>\n    );\n  }\n\n  renderCreateModal() {\n    const { showCreateModal, rootType } = this.state;\n    const title = (rootType === 'Group') ? 'Add new group' : 'Add new device';\n    return (\n      <Modal\n        show={showCreateModal}\n        onHide={this.handleCloseGroup}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>{title}</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <Panel bsStyle=\"success\">\n            <Panel.Heading>\n              <Panel.Title>\n                {title}\n              </Panel.Title>\n            </Panel.Heading>\n            <Panel.Body>\n              <Form>\n                <FormGroup controlId=\"formInlineName\">\n                  <ControlLabel>Name*</ControlLabel>&nbsp;&nbsp;\n                  <FormControl\n                    type=\"text\"\n                    inputRef={(m) => { this.firstInput = m; }}\n                    placeholder=\"eg: AK\"\n                  />\n                </FormGroup>\n                <FormGroup controlId=\"formInlineName\">\n                  <FormControl\n                    type=\"text\"\n                    inputRef={(m) => { this.lastInput = m; }}\n                    placeholder=\"J. Moriarty\"\n                  />\n                </FormGroup>&nbsp;&nbsp;\n                <FormGroup controlId=\"formInlineNameAbbr\">\n                  <ControlLabel>Name abbreviation* </ControlLabel>&nbsp;&nbsp;\n                  <FormControl\n                    type=\"text\"\n                    inputRef={(m) => { this.abbrInput = m; }}\n                    placeholder=\"AK-JM\"\n                  />\n                </FormGroup>&nbsp;&nbsp;\n                <FormGroup controlId=\"formInlineEmail\">\n                  <ControlLabel>Email</ControlLabel>&nbsp;&nbsp;\n                  <FormControl\n                    type=\"text\"\n                    inputRef={(m) => { this.emailInput = m; }}\n                    placeholder=\"eg: abc@kit.edu\"\n                  />\n                </FormGroup>\n                <Button bsSize=\"xsmall\" bsStyle=\"success\" onClick={() => this.createGroup()}>\n                  Create new {rootType === 'Group' ? 'group' : 'device'}\n                </Button>\n              </Form>\n            </Panel.Body>\n          </Panel>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  renderModal() {\n    const {\n      showModal,\n      root,\n      rootType,\n      actionType,\n      selectedUsers\n    } = this.state;\n    let title = '';\n    switch (rootType) {\n      case 'Group':\n        if (actionType === 'Person') {\n          title = `Add users to group: ${root.name}`;\n        } else {\n          title = `Add devices to group: ${root.name}`;\n        }\n        break;\n      case 'Device':\n        if (actionType === 'Person') {\n          title = `Add permission on device: ${root.name} to users`;\n        } else {\n          title = `Add permission on device: ${root.name} to groups`;\n        }\n        break;\n      default:\n        break;\n    }\n\n    return (\n      <Modal\n        show={showModal}\n        onHide={this.handleClose}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>{title}</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <Panel bsStyle=\"success\">\n            <Panel.Heading>\n              <Panel.Title>\n                {title}\n              </Panel.Title>\n            </Panel.Heading>\n            <Panel.Body>\n              <Select.Async\n                multi\n                isLoading\n                backspaceRemoves\n                value={selectedUsers}\n                valueKey=\"value\"\n                labelKey=\"label\"\n                matchProp=\"name\"\n                placeholder=\"Select ...\"\n                promptTextCreator={this.promptTextCreator}\n                loadOptions={this.loadUserByNameType}\n                onChange={this.handleSelectUser}\n              />\n              <Button bsSize=\"small\" type=\"button\" bsStyle=\"warning\" onClick={() => this.addToRoot(root)}>Add</Button>\n            </Panel.Body>\n          </Panel>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  render() {\n    return (\n      <div className=\"list-container-bottom\">\n        {this.renderGroups()}\n        {this.renderModal()}\n        {this.renderCreateModal()}\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { FormGroup, ControlLabel, FormControl, Button, Panel } from 'react-bootstrap';\nimport Select from 'react-select';\n\nimport MessagesFetcher from 'src/fetchers/MessagesFetcher';\n\nexport default class MessagePublish extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      channels: [],\n      selectedChannel: null,\n    };\n    this.toggleChannelList = this.toggleChannelList.bind(this);\n    this.handleChannelChange = this.handleChannelChange.bind(this);\n    this.messageSend = this.messageSend.bind(this);\n  }\n\n  componentDidMount() {\n    this.toggleChannelList();\n  }\n\n  handleChannelChange(selectedChannel) {\n    if (selectedChannel) {\n      this.setState({ selectedChannel });\n    }\n  }\n\n  toggleChannelList() {\n    MessagesFetcher.fetchChannels(9)\n      .then((result) => {\n        const channels = result.channels.map(c =>\n          ({ value: c.id, name: c.subject, label: c.subject }));\n        channels.sort((a, b) => (a.value - b.value));\n        this.setState({ channels });\n      });\n  }\n\n  messageSend() {\n    const { selectedChannel } = this.state;\n\n    if (!selectedChannel) {\n      alert('Please select channel!');\n    } else {\n      const params = {\n        channel_id: selectedChannel.value,\n        content: this.myMessage.value,\n      };\n\n      MessagesFetcher.createMessage(params)\n        .then((result) => {\n          this.myMessage.value = '';\n          alert('Message sent!');\n        });\n    }\n  }\n\n  render() {\n    const { selectedChannel, channels } = this.state;\n\n    return (\n      <div>\n        <Panel style={{ height: 'calc(100vh - 20px)' }}>\n          <Panel.Body>\n            <div className=\"col-md-3\">\n              <ControlLabel>Channel</ControlLabel>\n              <Select\n                value={selectedChannel}\n                onChange={this.handleChannelChange}\n                options={channels}\n                placeholder=\"Select your channel\"\n                autoFocus\n              />\n            </div>\n            <div className=\"col-md-9\">\n              <form>\n                <FormGroup controlId=\"formControlsTextarea\">\n                  <ControlLabel>Message</ControlLabel>\n                  <FormControl componentClass=\"textarea\" placeholder=\"message...\" rows=\"20\" inputRef={(ref) => { this.myMessage = ref; }} />\n                </FormGroup>\n                <Button\n                  bsStyle=\"primary\"\n                  onClick={() => this.messageSend()}\n                >\n                  Publish&nbsp;\n                  <i className=\"fa fa-paper-plane\" />\n                </Button>\n              </form>\n            </div>\n          </Panel.Body>\n        </Panel>\n      </div>\n    );\n  }\n}\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('MsgPub');\n  if (domElement) { ReactDOM.render(<MsgPub />, domElement); }\n});\n","import React from 'react';\nimport { Row, Col, DropdownButton, MenuItem } from 'react-bootstrap';\nimport Tree from 'antd/lib/tree';\nimport { ButtonToolbar, Button } from 'react-bootstrap';\nimport Dropzone from 'react-dropzone';\n\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport AdminFetcher from 'src/fetchers/AdminFetcher';\nimport { difference } from 'lodash';\n\nconst checkItem = (enableIds, disableIds, enable, idkey, checkStrictly) => {\n  if (enable === true) {\n    if (!enableIds.includes(idkey)) {\n      enableIds.push(idkey);\n    }\n    if (disableIds.includes(idkey)) {\n      disableIds = disableIds.filter(r => r !== idkey);\n    }\n  } else {\n    if (enableIds.includes(idkey)) {\n      enableIds = enableIds.filter(r => r !== idkey);\n    }\n    if (!disableIds.includes(idkey)) {\n      disableIds.push(idkey);\n    }\n  }\n  return { enableIds, disableIds };\n};\n\n\nexport default class OlsTerms extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      file: null,\n      selectName: '',\n      expandedKeys: [],\n      autoExpandParent: true,\n      checkStrictly: true,\n      checkedKeys: [],\n      orgCheckedKeys: [],\n      enableIds: [],\n      disableIds: [],\n      list: []\n    };\n    this.initialOls = this.initialOls.bind(this);\n    this.onExpand = this.onExpand.bind(this);\n    this.onCheck = this.onCheck.bind(this);\n    this.handleSaveBtn = this.handleSaveBtn.bind(this);\n    this.handleSelectName = this.handleSelectName.bind(this);\n    this.handleAssociateBtn = this.handleAssociateBtn.bind(this);\n  }\n\n  componentDidMount() {\n    // this.initialOls(this.state.selectName);\n  }\n\n  handleFileDrop(attach) {\n    this.setState({ file: attach[0] });\n  }\n\n  handleAttachmentRemove() {\n    this.setState({ file: null });\n  }\n\n  handleClick() {\n    const { file } = this.state;\n    AdminFetcher.importOlsTerms(file);\n  }\n\n  dropzoneOrfilePreview() {\n    const { file } = this.state;\n    return file ? (\n      <div>\n        {file.name}\n        <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.handleAttachmentRemove()} className=\"pull-right\">\n          <i className=\"fa fa-trash-o\" />\n        </Button>\n      </div>\n    ) : (\n      <Dropzone\n        onDrop={attach => this.handleFileDrop(attach)}\n        style={{ height: 50, width: '100%', border: '3px dashed lightgray' }}\n      >\n        <div style={{ textAlign: 'center', paddingTop: 12, color: 'gray' }}>\n          Drop File, or Click to Select.\n        </div>\n      </Dropzone>\n    );\n  }\n\n  addToChecked(cks, parent) {\n    if (parent.is_enabled === true) { cks.push(parent.value); }\n    (parent.children || []).map((node) => {\n      node.key = node.value;\n      this.addToChecked(cks, node);\n    });\n    return cks;\n  }\n\n  initialOls(selectName) {\n    let checkedKeys = [];\n    if (selectName == null && selectName === '') { return; }\n    UsersFetcher.fetchOls(selectName, false)\n      .then((result) => {\n        (result.ols_terms || []).map((a) => {\n          a.key = a.value;\n          checkedKeys = this.addToChecked(checkedKeys, a);\n        });\n        this.setState({\n          expandedKeys: checkedKeys,\n          orgCheckedKeys: checkedKeys,\n          list: result.ols_terms,\n          checkedKeys,\n        });\n      });\n  }\n\n  onExpand(expandedKeys) {\n    this.setState({\n      expandedKeys,\n      autoExpandParent: false,\n    });\n  }\n\n  onCheck(checkedKeys, e) {\n    const { checkStrictly, orgCheckedKeys } = this.state;\n    const checkedObj = (checkStrictly === true) ? checkedKeys.checked : checkedKeys;\n    const disableIds = difference(orgCheckedKeys, checkedObj);\n    const enableIds = difference(checkedObj, orgCheckedKeys);\n\n    this.setState({ checkedKeys, enableIds, disableIds });\n  }\n\n  handleSelectName(olsName) {\n    this.setState({\n      selectName: olsName,\n      enableIds: [],\n      disableIds: []\n    });\n    this.initialOls(olsName);\n  }\n\n\n  handleSaveBtn() {\n    const { enableIds, disableIds } = this.state;\n    AdminFetcher.olsTermDisableEnable({ owl_name: this.state.selectName, enableIds, disableIds })\n      .then((result) => {\n        if (result === true) {\n          alert('update successfully!');\n          this.setState({ enableIds: [], disableIds: [] });\n          this.initialOls(this.state.selectName);\n        } else {\n          alert('update error, please check system log!');\n        }\n      });\n  }\n\n  handleAssociateBtn() {\n    this.setState({ checkStrictly: !this.state.checkStrictly });\n  }\n\n  render() {\n    return (\n      <React.Fragment>\n        <Row style={{ maxWidth: '2000px', maxHeight: '1000px', margin: 'auto' }}>\n          {this.dropzoneOrfilePreview()}\n          <ButtonToolbar>\n            <Button bsStyle=\"warning\" onClick={() => this.handleClick()}>Import OLS Terms (the file name will be the OLS_name)</Button>\n          </ButtonToolbar>\n        </Row>\n        <Row style={{ maxWidth: '2000px', maxHeight: '1000px', margin: 'auto' }}>\n          <Col md={6}>\n            <DropdownButton title={this.state.selectName === '' ? 'Ols Terms' : this.state.selectName}>\n              <MenuItem key=\"rxno\" onSelect={() => this.handleSelectName('rxno')}>\n                rxno\n              </MenuItem>\n              <MenuItem key=\"chmo\" onSelect={() => this.handleSelectName('chmo')}>\n                chmo\n              </MenuItem>\n            </DropdownButton>\n            <div><h3>{this.state.selectName}</h3></div>\n            <Button\n              bsStyle=\"primary\"\n              onClick={() => this.handleSaveBtn()}\n            >Save\n            </Button> &nbsp; &nbsp;\n            <Button\n              bsStyle=\"primary\"\n              onClick={() => this.handleAssociateBtn()}\n            >switch mode\n            </Button>\n            &nbsp;\n            {this.state.checkStrictly === true ? 'Check Strickly' : 'Associated'}\n            <Tree\n              name={this.state.selectName}\n              checkable\n              onExpand={this.onExpand}\n              expandedKeys={this.state.expandedKeys}\n              autoExpandParent={this.state.autoExpandParent}\n              onCheck={this.onCheck}\n              checkedKeys={this.state.checkedKeys}\n              checkStrictly={this.state.checkStrictly}\n              treeData={this.state.list}\n            />\n          </Col>\n          <Col md={6}>\n            <div style={{ whiteSpace: 'pre' }}>\n              <h3>enable list</h3>\n              {this.state.enableIds.join('\\n')}\n              <h3>disable list</h3>\n              {this.state.disableIds.join('\\n')}\n            </div>\n          </Col>\n        </Row>\n      </React.Fragment>\n    );\n  }\n}\n","import React from 'react';\nimport { Panel, Table, FormGroup, Checkbox, FormControl, Button, Modal, Col, Form, Tooltip, OverlayTrigger, InputGroup } from 'react-bootstrap';\nimport uuid from 'uuid';\nimport Select from 'react-select';\nimport JSONInput from 'react-json-editor-ajrm';\nimport AdminFetcher from 'src/fetchers/AdminFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport { selectUserOptionFormater } from 'src/utilities/selectHelper';\n\nconst editTooltip = <Tooltip id=\"edit_tooltip\">Edit Permission</Tooltip>;\nconst jsonTooltip = <Tooltip id=\"edit_tooltip\">Edit JSON</Tooltip>;\nconst Notification = props =>\n(\n  NotificationActions.add({\n    title: props.title,\n    message: props.msg,\n    level: props.lvl,\n    position: 'tc',\n    dismissible: 'button',\n    uid: uuid.v4()\n  })\n);\n\nexport default class MatrixManagement extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      matrices: [],\n      matrice: {},\n      showEditModal: false,\n      showJsonModal: false,\n      showJsonBtn: false,\n      includeUsers: null,\n      excludeUsers: null\n    };\n    this.edit = this.edit.bind(this);\n    this.editJson = this.editJson.bind(this);\n    this.handleChange = this.handleChange.bind(this);\n    this.handleIncludeUser = this.handleIncludeUser.bind(this);\n    this.handleExcludeUser = this.handleExcludeUser.bind(this);\n    this.loadUserByName = this.loadUserByName.bind(this);\n    this.handleSave = this.handleSave.bind(this);\n    this.handleJsonSave = this.handleJsonSave.bind(this);\n    this.handleClose = this.handleClose.bind(this);\n    this.handleJsonClose = this.handleJsonClose.bind(this);\n    this.onChangeJson = this.onChangeJson.bind(this);\n  }\n\n  componentDidMount() {\n    this.fetchMatrices();\n  }\n\n  onChangeJson(e) {\n    const { matrice } = this.state;\n    if (e.error === false) {\n      matrice.configs = e.jsObject;\n      this.setState({ matrice, showJsonBtn: true });\n    }\n  }\n\n  fetchMatrices() {\n    AdminFetcher.fetchMatrices()\n      .then((result) => {\n        this.setState({ matrices: result.matrices });\n      });\n  }\n\n  edit(matrice) {\n    this.setState({\n      showEditModal: true, showJsonModal: false, matrice, includeUsers: null, excludeUsers: null\n    });\n  }\n\n  editJson(matrice) {\n    this.setState({\n      showJsonModal: true, showEditModal: false, matrice\n    });\n  }\n\n  handleChange(val, e) {\n    const { matrice } = this.state;\n    matrice.enabled = (val === true);\n    this.setState({\n      matrice\n    });\n  }\n\n  handleIncludeUser(val) {\n    if (val) { this.setState({ includeUsers: val }); }\n  }\n\n  handleExcludeUser(val) {\n    if (val) { this.setState({ excludeUsers: val }); }\n  }\n\n  loadUserByName(input) {\n    if (!input) {\n      return Promise.resolve({ options: [] });\n    }\n    return AdminFetcher.fetchUsersByNameType(input, 'Person,Group')\n      .then((res) => selectUserOptionFormater({ data: res, withType: true }))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  handleSave(matrice) {\n    const { includeUsers, excludeUsers } = this.state;\n\n    const params = {\n      id: matrice.id,\n      label: this.m_label.value.trim(),\n      enabled: matrice.enabled,\n    };\n\n    if (includeUsers != null) {\n      params.include_ids = includeUsers && includeUsers.map(u => u.value);\n    }\n\n    if (excludeUsers != null) {\n      params.exclude_ids = excludeUsers && excludeUsers.map(u => u.value);\n    }\n\n    AdminFetcher.updateMatrice(params)\n      .then((result) => {\n        if (result.error) {\n          Notification({ title: `Function [${matrice.name}]`, lvl: 'error', msg: result.error });\n          return false;\n        }\n        Notification({ title: `Function [${matrice.name}]`, lvl: 'info', msg: 'Updated successfully' });\n        this.setState({ showEditModal: false, includeUsers: null, excludeUsers: null, matrice: {} });\n        this.m_label.value = '';\n        this.fetchMatrices();\n        return true;\n      });\n  }\n\n\n  handleJsonSave(matrice) {\n    AdminFetcher.updateMatrice({ id: matrice.id, configs: matrice.configs })\n      .then((result) => {\n        if (result.error) {\n          Notification({ title: `Function [${matrice.name}]`, lvl: 'error', msg: result.error });\n          return false;\n        }\n        Notification({ title: `Function [${matrice.name}]`, lvl: 'info', msg: 'JSON Configuration updated successfully' });\n        this.setState({ showJsonModal: false, showJsonBtn: false, matrice: {} });\n        this.fetchMatrices();\n        return true;\n      });\n  }\n\n  handleClose() {\n    this.setState({ showEditModal: false });\n  }\n\n  handleJsonClose() {\n    this.setState({ showJsonModal: false });\n  }\n\n  renderList() {\n    const { matrices } = this.state;\n    const tbody = matrices && matrices.map((e, idx) => (\n      <tbody key={`tbody_${e.id}`}>\n        <tr key={`row_${e.id}`} id={`row_${e.id}`} style={{ fontWeight: 'bold' }}>\n          <td>{idx + 1}</td>\n          <td>\n            <OverlayTrigger placement=\"bottom\" overlay={editTooltip} >\n              <Button\n                bsSize=\"xsmall\"\n                bsStyle=\"info\"\n                onClick={() => this.edit(e)}\n              >\n                <i className=\"fa fa-pencil-square-o\" />\n              </Button>\n            </OverlayTrigger>\n            &nbsp;\n            <OverlayTrigger placement=\"bottom\" overlay={jsonTooltip} >\n              <Button\n                bsSize=\"xsmall\"\n                bsStyle=\"warning\"\n                onClick={() => this.editJson(e)}\n              >\n                <i className=\"fa fa-cog\" />\n              </Button>\n            </OverlayTrigger>\n            &nbsp;\n          </td>\n          <td>{e.id}</td>\n          <td>{e.name}</td>\n          <td>{e.label}</td>\n          <td>{e.enabled === true ? 'true' : 'false'}</td>\n          <td>{e.include_users.map(u => u.label).join(', ')}</td>\n          <td>{e.exclude_users.map(u => u.label).join(', ')}</td>\n        </tr>\n      </tbody>\n    ))\n\n    return (\n      <Panel>\n        <Panel.Heading>\n          <Table responsive condensed hover>\n            <thead>\n              <tr style={{ backgroundColor: '#ddd' }}>\n                <th width=\"2%\">#</th>\n                <th width=\"5%\">Actions</th>\n                <th width=\"3%\">ID</th>\n                <th width=\"10%\">Function name</th>\n                <th width=\"10%\">Description</th>\n                <th width=\"10%\">Set globally</th>\n                <th width=\"40%\">Enabled for</th>\n                <th width=\"20%\">Disabled for</th>\n              </tr>\n            </thead>\n            {tbody}\n          </Table>\n        </Panel.Heading>\n      </Panel>\n    );\n  }\n\n  renderEditModal() {\n    const { matrice, includeUsers, excludeUsers } = this.state;\n    let defaultIncludeUsers = [];\n    let defaultExcludeUsers = [];\n\n    if (includeUsers == null) {\n      defaultIncludeUsers = matrice.include_users;\n    } else {\n      defaultIncludeUsers = includeUsers;\n    }\n    if (excludeUsers == null) {\n      defaultExcludeUsers = matrice.exclude_users;\n    } else {\n      defaultExcludeUsers = excludeUsers;\n    }\n\n    return (\n      <Modal show={this.state.showEditModal} onHide={this.handleClose}>\n        <Modal.Header closeButton><Modal.Title>Edit Permisson</Modal.Title></Modal.Header>\n        <Modal.Body style={{ overflow: 'auto' }}>\n          <div className=\"col-md-12\">\n            <Form horizontal className=\"input-form\">\n              <FormGroup controlId=\"formControlId\">\n                <InputGroup>\n                  <InputGroup.Addon>ID</InputGroup.Addon>\n                  <FormControl type=\"text\" defaultValue={matrice.id} readOnly />\n                </InputGroup>\n              </FormGroup>\n              <FormGroup controlId=\"formControlName\">\n                <InputGroup>\n                  <InputGroup.Addon>Function name</InputGroup.Addon>\n                  <FormControl type=\"text\" defaultValue={matrice.name} readOnly />\n                </InputGroup>\n              </FormGroup>\n              <FormGroup controlId=\"formControlLabel\">\n                <InputGroup>\n                  <InputGroup.Addon>Description</InputGroup.Addon>\n                  <FormControl type=\"text\" defaultValue={matrice.label} inputRef={(ref) => { this.m_label = ref; }} />\n                </InputGroup>\n              </FormGroup>\n              <FormGroup controlId=\"formControlLabel\">\n                <Checkbox inline type=\"checkbox\" checked={matrice.enabled} onChange={e => this.handleChange(!matrice.enabled, e)}>Enable globally <br /> (when [checked], all users can see/use this feature, when [unchecked], only allowed users can see/use this function)</Checkbox>\n              </FormGroup>\n              <FormGroup controlId=\"formControlInclude\">\n                <InputGroup>\n                  <InputGroup.Addon>Include Users</InputGroup.Addon>\n                  <Select.Async\n                    multi\n                    isLoading\n                    backspaceRemoves\n                    value={defaultIncludeUsers}\n                    defaultValue={defaultIncludeUsers}\n                    valueKey=\"value\"\n                    labelKey=\"label\"\n                    matchProp=\"name\"\n                    placeholder=\"Select ...\"\n                    loadOptions={this.loadUserByName}\n                    onChange={this.handleIncludeUser}\n                  />\n                </InputGroup>\n              </FormGroup>\n              <FormGroup controlId=\"formControlExclude\">\n                <InputGroup>\n                  <InputGroup.Addon>Exclude Users</InputGroup.Addon>\n                  <Select.Async\n                    multi\n                    isLoading\n                    backspaceRemoves\n                    value={defaultExcludeUsers}\n                    defaultValue={defaultExcludeUsers}\n                    valueKey=\"value\"\n                    labelKey=\"label\"\n                    matchProp=\"name\"\n                    placeholder=\"Select ...\"\n                    loadOptions={this.loadUserByName}\n                    onChange={this.handleExcludeUser}\n                  />\n                </InputGroup>\n              </FormGroup>\n              <FormGroup>\n                <Col smOffset={0} sm={10}>\n                  <Button bsStyle=\"warning\" onClick={() => this.handleClose()} >\n                    Cancel&nbsp;\n                  </Button>\n                  &nbsp;\n                  <Button bsStyle=\"primary\" onClick={() => this.handleSave(matrice)} >\n                    Update&nbsp;\n                    <i className=\"fa fa-save\" />\n                  </Button>\n                </Col>\n              </FormGroup>\n            </Form>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n\n  renderJsonModal() {\n    const { matrice, showJsonBtn } = this.state;\n\n    return (\n      <Modal show={this.state.showJsonModal} onHide={this.handleJsonClose}>\n        <Modal.Header closeButton><Modal.Title>JSON Configurations</Modal.Title></Modal.Header>\n        <Modal.Body style={{ overflow: 'auto' }}>\n          <div className=\"col-md-12\">\n            <Form horizontal className=\"input-form\">\n              <FormGroup controlId=\"formControlId\">\n                <InputGroup>\n                  <InputGroup.Addon>ID</InputGroup.Addon>\n                  <FormControl type=\"text\" defaultValue={matrice.id} readOnly />\n                </InputGroup>\n              </FormGroup>\n              <FormGroup controlId=\"formControlName\">\n                <InputGroup>\n                  <InputGroup.Addon>Function name</InputGroup.Addon>\n                  <FormControl type=\"text\" defaultValue={matrice.name} readOnly />\n                </InputGroup>\n              </FormGroup>\n              <FormGroup controlId=\"formControlJson\">\n                <JSONInput\n                  placeholder={matrice.configs}\n                  width=\"100%\"\n                  onChange={e => this.onChangeJson(e)}\n                />\n              </FormGroup>\n\n              <FormGroup>\n                <Col smOffset={0} sm={10}>\n                  <Button bsStyle=\"warning\" onClick={() => this.handleJsonClose()} >\n                    Cancel&nbsp;\n                  </Button>\n                  &nbsp;\n                  <Button bsStyle=\"primary\" disabled={!showJsonBtn} onClick={() => this.handleJsonSave(matrice)} >\n                    Update&nbsp;\n                    <i className=\"fa fa-save\" />\n                  </Button>\n                </Col>\n              </FormGroup>\n            </Form>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  render() {\n    return (\n      <div>\n        {this.renderList()}\n        {this.renderEditModal()}\n        {this.renderJsonModal()}\n      </div>\n    );\n  }\n}\n","import { AgGridReact } from 'ag-grid-react';\nimport { cloneDeep } from 'lodash';\nimport PropTypes from 'prop-types';\nimport Delta from 'quill-delta';\nimport React from 'react';\nimport {\n  Button, ControlLabel,\n  Form, FormControl, FormGroup,\n  Panel\n} from 'react-bootstrap';\n\nimport QuillEditor from 'src/components/QuillEditor';\nimport TextTemplateIcon from 'src/apps/admin/textTemplates/TextTemplateIcon';\n\nfunction RemoveRowBtn({ removeRow, node }) {\n  const { data } = node;\n\n  const btnClick = () => {\n    removeRow(data.name);\n  };\n\n  return (\n    <Button\n      active\n      onClick={btnClick}\n      bsSize=\"xsmall\"\n      bsStyle=\"danger\"\n    >\n      <i className=\"fa fa-trash\" />\n    </Button>\n  );\n}\n\nRemoveRowBtn.propTypes = {\n  removeRow: PropTypes.func.isRequired,\n  // eslint-disable-next-line react/forbid-prop-types\n  node: PropTypes.object.isRequired,\n};\n\nfunction AddRowBtn({ addRow }) {\n  return (\n    <Button\n      active\n      onClick={() => addRow()}\n      bsSize=\"xsmall\"\n      bsStyle=\"primary\"\n    >\n      <i className=\"fa fa-plus\" />\n    </Button>\n  );\n}\n\nAddRowBtn.propTypes = {\n  addRow: PropTypes.func.isRequired,\n};\n\nexport default class TextTemplate extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      selectedTemplate: null,\n      text: '',\n      icon: ''\n    };\n\n    this.reactQuillRef = React.createRef();\n\n    this.onSelectionChanged = this.onSelectionChanged.bind(this);\n    this.onGridReady = this.onGridReady.bind(this);\n    this.onCellValueChanged = this.onCellValueChanged.bind(this);\n    this.onChangeText = this.onChangeText.bind(this);\n    this.onChangeIcon = this.onChangeIcon.bind(this);\n\n    this.saveTemplate = this.saveTemplate.bind(this);\n    this.removeRow = this.removeRow.bind(this);\n    this.addRow = this.addRow.bind(this);\n\n    this.columnDefs = [\n      {\n        field: 'name',\n        editable: true,\n        minWidth: 150,\n        onCellValueChanged: this.onCellValueChanged\n      },\n      {\n        headerName: '',\n        colId: 'actions',\n        headerComponent: AddRowBtn,\n        headerComponentParams: {\n          addRow: this.addRow\n        },\n        cellRenderer: RemoveRowBtn,\n        cellRendererParams: {\n          removeRow: this.removeRow,\n        },\n        editable: false,\n        filter: false,\n        width: 35,\n      },\n    ];\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(newProps) {\n    const { fetchedTemplates } = newProps;\n    const selectedRows = this.gridApi.getSelectedRows();\n    if (selectedRows.length === 0) return;\n\n    const selectedNameIdx = fetchedTemplates.findIndex(t => (\n      t.name === selectedRows[0].name\n    ));\n    if (selectedNameIdx < 0) return;\n\n    const newSelectedTemplate = cloneDeep(fetchedTemplates[selectedNameIdx]);\n    this.setState({\n      selectedTemplate: cloneDeep(newSelectedTemplate),\n      text: newSelectedTemplate.data.text || '',\n      icon: newSelectedTemplate.data.icon || ''\n    });\n  }\n\n  componentDidUpdate() {\n    if (this.gridApi) {\n      this.gridApi.sizeColumnsToFit();\n    }\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  onGridReady(e) {\n    if (!e.api) return;\n    this.gridApi = e.api;\n    this.gridApi.sizeColumnsToFit();\n  }\n\n  onSelectionChanged() {\n    if (!this.gridApi) return;\n\n    const selectedRows = this.gridApi.getSelectedRows();\n    if (selectedRows.length === 0) return;\n\n    const templateName = selectedRows[0].name;\n    const { fetchedTemplates } = this.props;\n    const selectedNameIdx = fetchedTemplates.findIndex(t => (\n      t.name === templateName\n    ));\n\n    if (selectedNameIdx >= 0) {\n      const selectedTemplate = cloneDeep(fetchedTemplates[selectedNameIdx]);\n      this.setState({\n        selectedTemplate,\n        text: selectedTemplate.data.text || '',\n        icon: selectedTemplate.data.icon || ''\n      });\n    } else {\n      const { fetchTemplate } = this.props;\n      fetchTemplate(templateName);\n    }\n  }\n\n  onCellValueChanged(params) {\n    const { oldValue, newValue } = params;\n    const { fetchedTemplates, updateTemplate } = this.props;\n    const selectedNameIdx = fetchedTemplates.findIndex(t => (\n      t.name === oldValue\n    ));\n    if (selectedNameIdx < 0) return;\n\n    const selectedTemplate = cloneDeep(fetchedTemplates[selectedNameIdx]);\n    selectedTemplate.name = newValue;\n    updateTemplate(selectedTemplate);\n  }\n\n  onChangeText(e) {\n    const { selectedTemplate } = this.state;\n    const { value } = e.target;\n    selectedTemplate.data.text = value;\n\n    this.setState({\n      text: value,\n      selectedTemplate\n    });\n  }\n\n  onChangeIcon(e) {\n    const { selectedTemplate } = this.state;\n    const { value } = e.target;\n    selectedTemplate.data.icon = value;\n\n    this.setState({ icon: value, selectedTemplate });\n  }\n\n  saveTemplate() {\n    if (this.reactQuillRef.current == null) {\n      return;\n    }\n\n    const quill = this.reactQuillRef.current;\n    const delta = quill.getContents();\n\n    // Quill automatically append a trailing newline, we don't want that\n    // Remove it !!!\n    const deltaLength = delta.length();\n    const removeTrailingNewline = new Delta().retain(deltaLength - 1).delete(1);\n    const content = delta.compose(removeTrailingNewline);\n\n    const selectedTemplate = cloneDeep(this.state.selectedTemplate);\n    selectedTemplate.data.ops = content.ops;\n    this.props.updateTemplate(selectedTemplate);\n  }\n\n  removeRow(name) {\n    const { removeTemplate } = this.props;\n    removeTemplate(name);\n    this.setState({ selectedTemplate: null });\n  }\n\n  addRow() {\n    const { addTemplate } = this.props;\n    addTemplate(this.gridApi);\n  }\n\n  handleInputChange = () => {}\n\n  render() {\n    const { predefinedTemplateNames } = this.props;\n    const { selectedTemplate, text, icon } = this.state;\n\n    return (\n      <Panel style={{ height: 'calc(100vh - 150px)' }}>\n        <Panel.Body style={{ height: '100%' }}>\n          <div style={{ display: 'flex', height: '100%' }}>\n            <div style={{ width: '35%' }}>\n              <div style={{ height: '100%' }} className=\"ag-theme-balham\">\n                <AgGridReact\n                  suppressHorizontalScroll\n                  columnDefs={this.columnDefs}\n                  defaultColDef={{ resizable: true }}\n                  rowSelection=\"single\"\n                  onGridReady={this.onGridReady}\n                  onSelectionChanged={this.onSelectionChanged}\n                  rowData={predefinedTemplateNames}\n                />\n              </div>\n            </div>\n            <div style={{ marginLeft: '10px', width: '65%' }}>\n              <div style={{ margin: '10px' }}>\n                <ControlLabel style={{ width: '65px' }}>\n                  Preview\n                </ControlLabel>\n                &nbsp;\n                <TextTemplateIcon template={selectedTemplate} />\n              </div>\n              <div style={{ margin: '10px' }}>\n                <Form inline>\n                  <ControlLabel style={{ width: '65px' }}>Text</ControlLabel>\n                  <FormControl value={text} onChange={this.onChangeText} />\n                </Form>\n              </div>\n              <div style={{ margin: '10px 10px 20px 10px' }}>\n                <Form inline>\n                  <ControlLabel style={{ width: '65px' }}>Icon</ControlLabel>\n                  <FormControl value={icon} onChange={this.onChangeIcon} />\n                </Form>\n              </div>\n              <div>\n                <FormGroup>\n                  <QuillEditor\n                    ref={this.reactQuillRef}\n                    value={(selectedTemplate || {}).data}\n                    onChange={event => this.handleInputChange(event)}\n                  />\n                </FormGroup>\n              </div>\n              &nbsp;&nbsp;\n              <div style={{ marginTop: '30px' }}>\n                <Button bsStyle=\"primary\" onClick={this.saveTemplate}>\n                  Save\n                </Button>\n              </div>\n            </div>\n          </div>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nTextTemplate.propTypes = {\n  predefinedTemplateNames: PropTypes.arrayOf(PropTypes.object),\n  // eslint-disable-next-line react/forbid-prop-types\n  fetchedTemplates: PropTypes.arrayOf(PropTypes.object),\n  fetchTemplate: PropTypes.func.isRequired,\n  addTemplate: PropTypes.func.isRequired,\n  updateTemplate: PropTypes.func.isRequired,\n  removeTemplate: PropTypes.func.isRequired,\n};\n\nTextTemplate.defaultProps = {\n  predefinedTemplateNames: [],\n  fetchedTemplates: [],\n};\n","import React from 'react';\n\nimport TextTemplatesFetcher from 'src/fetchers/TextTemplatesFetcher';\nimport TextTemplate from 'src/apps/admin/textTemplates/TextTemplate';\n\nexport default class TextTemplateContainer extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      predefinedTemplateNames: [],\n      fetchedTemplates: [],\n    };\n\n    this.addTemplate = this.addTemplate.bind(this);\n    this.fetchTemplate = this.fetchTemplate.bind(this);\n    this.removeTemplate = this.removeTemplate.bind(this);\n    this.updateTemplate = this.updateTemplate.bind(this);\n  }\n\n  componentDidMount() {\n    TextTemplatesFetcher.fetchPredefinedTemplateNames().then((res) => {\n      const templateNames = res.map(n => ({ name: n }));\n      this.setState({ predefinedTemplateNames: templateNames });\n    });\n  }\n\n  addTemplate(gridApi) {\n    const { predefinedTemplateNames, fetchedTemplates } = this.state;\n\n    this.setState({\n      predefinedTemplateNames: [{ name: '' }, ...predefinedTemplateNames],\n      fetchedTemplates: [\n        { name: '', data: {} },\n        ...fetchedTemplates\n      ]\n    }, () => {\n      if (!gridApi) return;\n\n      gridApi.startEditingCell({ rowIndex: 0, colKey: 'name' });\n    });\n  }\n\n  fetchTemplate(name) {\n    TextTemplatesFetcher.fetchPredefinedTemplateByNames([name]).then((res) => {\n      if (!res) return;\n\n      const { fetchedTemplates } = this.state;\n      this.setState({\n        fetchedTemplates: [...fetchedTemplates].concat(res),\n      });\n    });\n  }\n\n  removeTemplate(name) {\n    TextTemplatesFetcher.deletePredefinedTemplateByName(name).then((res) => {\n      if (!res) return;\n\n      const { fetchedTemplates, predefinedTemplateNames } = this.state;\n      this.setState({\n        fetchedTemplates: fetchedTemplates.filter(t => t.name !== name),\n        predefinedTemplateNames: predefinedTemplateNames.filter(t => (\n          t.name !== name\n        ))\n      });\n    });\n  }\n\n  updateTemplate(template) {\n    const { fetchedTemplates } = this.state;\n    const selectedNameIdx = fetchedTemplates.findIndex(t => (\n      t.id === template.id\n    ));\n    if (selectedNameIdx < 0) return;\n\n    TextTemplatesFetcher.updatePredefinedTemplates(template).then((res) => {\n      if (!res) return;\n\n      const newTemplates = fetchedTemplates.map((t, idx) => (\n        (idx === selectedNameIdx) ? res : t\n      ));\n      this.setState({ fetchedTemplates: newTemplates });\n    });\n  }\n\n  render() {\n    const {\n      predefinedTemplateNames,\n      fetchedTemplates,\n    } = this.state;\n\n    return (\n      <TextTemplate\n        predefinedTemplateNames={predefinedTemplateNames}\n        fetchedTemplates={fetchedTemplates}\n        fetchTemplate={this.fetchTemplate}\n        addTemplate={this.addTemplate}\n        removeTemplate={this.removeTemplate}\n        updateTemplate={this.updateTemplate}\n      />\n    );\n  }\n}\n","import { Button, OverlayTrigger, Panel, Table, Tooltip } from 'react-bootstrap';\nimport React, { Component } from 'react';\nimport AdminFetcher from 'src/fetchers/AdminFetcher';\n\nconst tipRestartJob = <Tooltip id=\"restart_tooltip\">Update run_at</Tooltip>;\n\nexport default class DelayedJobs extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      jobs: [],\n    };\n    this.handleFetchJob = this.handleFetchJob.bind(this);\n  }\n\n  componentDidMount() {\n    this.handleFetchJob();\n  }\n\n  handleFetchJob() {\n    AdminFetcher.fetchJobs()\n      .then((result) => {\n        this.setState({\n          jobs: result.jobs,\n        });\n      });\n  }\n\n  handleRestartFetch(id) {\n    AdminFetcher.restartJob({ id })\n      .then(() => this.handleFetchJob());\n  }\n\n  renderShowBtn(job) {\n    // if (job.last_error) {\n    if (true) {\n      return (\n        <OverlayTrigger placement=\"top\" overlay={tipRestartJob}>\n          <Button\n            bsSize=\"xsmall\"\n            bsStyle=\"success\"\n            onClick={() => this.handleRestartFetch(job.id)}\n          >\n            <i className=\"fa fa-play\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>);\n    }\n    return '';\n  }\n\n  render() {\n    const { jobs } = this.state;\n\n    const tcolumn = (\n      <tr style={{ height: '26px', verticalAlign: 'middle' }}>\n        <th width=\"4%\" colSpan=\"2\">ID</th>\n        <th width=\"5%\">Queue</th>\n        <th width=\"5%\">Job Class</th>\n        <th width=\"5%\">Run At</th>\n        <th width=\"5%\">Failed At</th>\n        <th width=\"4%\">Attempts</th>\n        <th width=\"4%\">Priority</th>\n        <th width=\"50%\">Last Errors</th>\n      </tr>\n    );\n\n    const tbody = jobs.map(job => (\n      <tr key={`row_${job.id}`} style={{ height: '26px', verticalAlign: 'middle' }}>\n        <td> {job.id} </td>\n        <td> {this.renderShowBtn(job)} </td>\n        <td> {job.queue} </td>\n        <td> {job.handler.split(' ')[4].trim()} </td>\n        <td> {job.run_at} </td>\n        <td> {job.failed_at} </td>\n        <td> {job.attempts} </td>\n        <td> {job.priority} </td>\n        <td><textarea defaultValue={job.last_error} style={{ maxWidth: '100%' }} /></td>\n      </tr>\n    ));\n\n    return (\n      <div>\n        <Panel>\n          <Panel.Heading>\n            <Panel.Title>\n              Delayed Jobs\n            </Panel.Title>\n          </Panel.Heading>\n          <Table responsive hover bordered>\n            <thead>\n              {tcolumn}\n            </thead>\n            <tbody>\n              {tbody}\n            </tbody>\n          </Table>\n        </Panel>\n      </div>\n    );\n  }\n}\n","import { SPECTRA_DATA_TYPE } from 'src/endpoints/ApiServices';\nimport 'whatwg-fetch';\n\nexport default class ChemSpectraFetcher {\n  static fetchSpectraLayouts() {\n    return fetch('/api/v1/chemspectra/spectra_layouts', {\n      method: 'GET',\n      credentials: 'same-origin',\n    }).then((response) => {\n      if (response.ok) {\n        return response.json();\n      }\n      return null;\n    })\n      .then((data) => data)\n      .catch((errorMessage) => { console.error(errorMessage); });\n  }\n\n  static updateDataTypes(newDataTypes) {\n    const requestData = { datatypes: newDataTypes };\n\n    return fetch('/api/v1/admin/data_types.json', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(requestData)\n    }).then((response) => {\n      if (!response.ok) { throw response; }\n      return response.json();\n    });\n  }\n\n  static fetchUpdatedSpectraLayouts() {\n    return fetch(SPECTRA_DATA_TYPE)\n      .then((response) => {\n        if (!response.ok) {\n          throw new Error('Failed to fetch JSON');\n        }\n        return response.json();\n      })\n      .then((data) => Object.entries(data.datatypes));\n  }\n}\n","/* eslint-disable no-param-reassign */\nimport React, { Component } from 'react';\nimport ChemSpectraFetcher from 'src/fetchers/ChemSpectraFetcher';\nimport {\n  Table, Button, Form, FormControl, Modal, Panel, FormGroup, ControlLabel, Popover, OverlayTrigger, ButtonGroup, Alert\n} from 'react-bootstrap';\nimport Select from 'react-select';\n\nexport default class ChemSpectraLayouts extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      layouts: [],\n      newDataType: {\n        layout: '',\n        dataType: '',\n      },\n      defaultLayouts: [],\n      showNewTypeLayoutModal: false,\n      alertMessage: null\n    };\n\n    this.fetchSpectraLayouts = this.fetchSpectraLayouts.bind(this);\n    this.handleInputChange = this.handleInputChange.bind(this);\n    this.handleAddDataType = this.handleAddDataType.bind(this);\n    this.handleDeleteDataType = this.handleDeleteDataType.bind(this);\n    this.handleShowNewTypeLayoutModal = this.handleShowNewTypeLayoutModal.bind(this);\n    this.handleCloseNewTypeLayoutModal = this.handleCloseNewTypeLayoutModal.bind(this);\n    this.getLayoutOptionsAndMapping = this.getLayoutOptionsAndMapping.bind(this);\n  }\n\n  componentDidMount() {\n    this.fetchSpectraLayouts();\n  }\n\n  handleInputChange(event) {\n    const { name, value } = event.target;\n    this.setState((prevState) => ({\n      newDataType: {\n        ...prevState.newDataType,\n        [name]: value,\n      },\n    }));\n  }\n\n  handleSelectLayout(selectedOption) {\n    if (selectedOption) {\n      this.setState((prevState) => ({\n        newDataType: {\n          ...prevState.newDataType,\n          layout: selectedOption.value,\n        },\n      }));\n    }\n  }\n\n  handleShowNewTypeLayoutModal() {\n    this.setState({ showNewTypeLayoutModal: true });\n  }\n\n  handleCloseNewTypeLayoutModal() {\n    this.setState({\n      showNewTypeLayoutModal: false,\n      alertMessage: null,\n      newDataType: {\n        layout: '',\n        dataType: '',\n      }\n    });\n  }\n\n  handleAddDataType() {\n    const { newDataType, layouts } = this.state;\n    if (newDataType.dataType.length === 0) {\n      this.setState({ alertMessage: 'Please enter a data type' });\n    } else if (newDataType.layout.length === 0) {\n      this.setState({ alertMessage: 'Please select a layout' });\n    } else {\n      const existingLayout = layouts.find(([layout]) => layout === newDataType.layout);\n\n      if (existingLayout) {\n        const [, dataTypeArray] = existingLayout;\n\n        if (dataTypeArray.includes(newDataType.dataType.trimEnd())) {\n          this.setState({ alertMessage: 'Data type already exists' });\n        } else {\n          const updatedLayouts = layouts.map(([layout, dataType]) => {\n            if (layout === newDataType.layout) {\n              return [layout, [...dataType, newDataType.dataType]];\n            }\n            return [layout, dataType];\n          });\n          const transformedData = updatedLayouts.reduce((acc, [key, value]) => {\n            acc[key] = value;\n            return acc;\n          }, {});\n\n          ChemSpectraFetcher.updateDataTypes(transformedData)\n            .then((message) => {\n              console.log(message);\n              this.handleCloseNewTypeLayoutModal();\n              this.fetchUpdatedSpectraLayouts();\n            })\n            .catch((error) => console.error(error));\n        }\n      }\n    }\n  }\n\n  handleDeleteDataType(dataTypeToDelete) {\n    const { layouts } = this.state;\n\n    const updatedLayouts = layouts.map((entry) => {\n      if (entry[0] === dataTypeToDelete.layout) {\n        entry[1] = entry[1].filter((dataType) => dataType !== dataTypeToDelete.dataType);\n      }\n      return entry;\n    });\n\n    const transformedData = updatedLayouts.reduce((acc, [key, value]) => {\n      acc[key] = value;\n      return acc;\n    }, {});\n\n    ChemSpectraFetcher.updateDataTypes(transformedData)\n      .then((message) => {\n        console.log(message);\n        this.fetchUpdatedSpectraLayouts();\n      })\n      .catch((error) => console.error(error));\n  }\n\n  fetchSpectraLayouts() {\n    ChemSpectraFetcher.fetchSpectraLayouts()\n      .then((layouts) => {\n        if (layouts) {\n          this.setState({ layouts: Object.entries(layouts.current_data_types),\n          defaultLayouts: Object.entries(layouts.default_data_types)\n          });\n        }\n      })\n      .catch((error) => console.error(error));\n  }\n\n  fetchUpdatedSpectraLayouts() {\n    ChemSpectraFetcher.fetchUpdatedSpectraLayouts()\n      .then((layouts) => {\n        if (layouts) {\n          this.setState({ layouts });\n        }\n      })\n      .catch((error) => console.error(error));\n  }\n\n  getLayoutOptionsAndMapping() {\n    const { layouts } = this.state;\n    const layoutsMapping = layouts.reduce((acc, [layout, dataTypes]) => {\n      dataTypes.forEach((dataType) => {\n        acc.push({ layout, dataType });\n      });\n      return acc;\n    }, []);\n\n    const allLayouts = Array.from(new Set(layoutsMapping.map(({ layout }) => layout))).sort();\n\n    const layoutsOptions = allLayouts.map((layout) => ({\n      value: layout,\n      label: layout\n    }));\n\n    return { layoutsOptions, layoutsMapping };\n  }\n\n  render() {\n    const {\n      newDataType, showNewTypeLayoutModal, alertMessage, defaultLayouts\n    } = this.state;\n\n    const { layoutsOptions, layoutsMapping } = this.getLayoutOptionsAndMapping();\n\n    return (\n      <div>\n        <Button onClick={this.handleShowNewTypeLayoutModal}>Add New Data Type</Button>\n\n        <Modal show={showNewTypeLayoutModal} onHide={this.handleCloseNewTypeLayoutModal}>\n          <Modal.Header closeButton />\n          <Modal.Body>\n            {alertMessage && (\n            <Alert variant=\"warning\">\n              {alertMessage}\n            </Alert>\n            )}\n            <Panel>\n              <Panel.Heading>\n                <Panel.Title>\n                  New Data Type\n                </Panel.Title>\n              </Panel.Heading>\n              <Panel.Body>\n                <Form>\n                  <FormGroup>\n                    <ControlLabel>Data Type</ControlLabel>\n                    <FormControl\n                      type=\"text\"\n                      name=\"dataType\"\n                      value={newDataType.dataType}\n                      onChange={this.handleInputChange}\n                    />\n                  </FormGroup>\n                  <FormGroup>\n                    <ControlLabel>Layout</ControlLabel>\n                    <Select\n                      name=\"layout\"\n                      value={newDataType.layout}\n                      onChange={(selectedOption) => this.handleSelectLayout(selectedOption)}\n                      options={layoutsOptions}\n                      placeholder=\"Select a Layout\"\n                    />\n                  </FormGroup>\n                </Form>\n              </Panel.Body>\n            </Panel>\n          </Modal.Body>\n          <Modal.Footer>\n            <Button variant=\"primary\" onClick={this.handleAddDataType}>\n              Add Data Type\n            </Button>\n            <Button variant=\"secondary\" onClick={this.handleCloseNewTypeLayoutModal}>\n              Cancel\n            </Button>\n          </Modal.Footer>\n        </Modal>\n\n        <Panel>\n          <Panel.Heading>\n            <Panel.Title>\n              Data Types\n            </Panel.Title>\n          </Panel.Heading>\n          <Table responsive hover bordered>\n            <thead>\n              <tr>\n                <th>#</th>\n                <th>Data Type</th>\n                <th>Layout</th>\n              </tr>\n            </thead>\n            <tbody>\n              {layoutsMapping.map((entry, index) => (\n                <tr key={index}>\n                  <td>{index + 1}</td>\n                  <td>{entry.dataType}</td>\n                  <td>{entry.layout}</td>\n                  <td>\n                    {' '}\n                    {defaultLayouts.some(([layout, dataTypes]) => layout === entry.layout\n                  && !dataTypes.includes(entry.dataType)) ? (\n                    <ButtonGroup className=\"actions\">\n                      <OverlayTrigger\n                        root\n                        trigger=\"focus\"\n                        placement=\"top\"\n                        overlay={(\n                          <Popover id=\"popover-positioned-scrolling-left\">\n                            Delete this data type?\n                            <br />\n                            <div className=\"btn-toolbar\">\n                              <Button\n                                bsSize=\"xsmall\"\n                                bsStyle=\"danger\"\n                                onClick={() => {\n                                  this.handleDeleteDataType({ layout: entry.layout, dataType: entry.dataType });\n                                }}\n                              >\n                                {' '}\n                                Yes\n                              </Button>\n                              <span>&nbsp;&nbsp;</span>\n                              <Button\n                                bsSize=\"xsmall\"\n                                bsStyle=\"warning\"\n                                onClick={this.handleClick}\n                              >\n                                {' '}\n                                No\n                              </Button>\n                            </div>\n                          </Popover>\n                    )}\n                      >\n                        <Button\n                          bsSize=\"xsmall\"\n                          bsStyle=\"danger\"\n                        >\n                          <i className=\"fa fa-trash-o\" />\n                        </Button>\n                      </OverlayTrigger>\n                    </ButtonGroup>\n                      ) : (\n                        <span />\n                      )}\n                  </td>\n                </tr>\n              ))}\n            </tbody>\n          </Table>\n        </Panel>\n      </div>\n    );\n  }\n}\n","import React, { useContext } from 'react';\nimport { FormGroup, ControlLabel, Form, FormControl, Checkbox } from 'react-bootstrap';\nimport Select from 'react-select3';\n\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nconst DevicePropertiesTab = () => {\n  const devicesStore = useContext(StoreContext).devices;\n  let device = devicesStore.device;\n\n  const verificationOptions = [\n    { label: 'None', value: 'none' },\n    { label: 'Verified device', value: 'verified_device' },\n    { label: 'Unverified sub-version', value: 'unverified_sub_version' },\n    { label: 'Verified sub-version', value: 'verified_sub_version' },\n  ];\n  const verificationStatusValue = device ? verificationOptions.filter(f => f.value == device.verification_status) : '';\n\n  const onChange = (field, value) => {\n    let newValue = value ? value : '';\n    devicesStore.changeDevice(field, newValue);\n  }\n\n  return (\n    <Form>\n      <FormGroup validationState={device.valid_name}>\n        <ControlLabel>Name *</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={device.name}\n          onChange={(event) => onChange('name', event.target.value)}\n        />\n      </FormGroup>\n\n      <FormGroup validationState={device.valid_name_abbreviation}>\n        <ControlLabel>Name abbreviation *</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={device.name_abbreviation}\n          onChange={(event) => onChange('name_abbreviation', event.target.value)}\n        />\n      </FormGroup>\n\n      <FormGroup>\n        <ControlLabel>Email</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={device.email}\n          readOnly={true}\n        />\n      </FormGroup>\n\n      <FormGroup>\n        <ControlLabel>Serial number</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={device.serial_number ? device.serial_number : ''}\n          onChange={(event) => onChange('serial_number', event.target.value)}\n        />\n      </FormGroup>\n\n      <FormGroup>\n        <ControlLabel>Verification Status</ControlLabel>\n        <Select\n          isClearable\n          value={verificationStatusValue}\n          options={verificationOptions}\n          onChange={(event) => onChange('verification_status', event.value)}\n        />\n      </FormGroup>\n\n      <FormGroup>\n        <Checkbox\n          checked={device.account_active}\n          onChange={(event) => onChange('account_active', event.target.checked)}\n        >\n          Active\n        </Checkbox>\n      </FormGroup>\n\n      <FormGroup>\n        <Checkbox\n          checked={device.visibility}\n          onChange={(event) => onChange('visibility', event.target.checked)}\n        >\n          Visibility\n        </Checkbox>\n      </FormGroup>\n    </Form>\n  );\n}\n\nexport default observer(DevicePropertiesTab);\n","import React, { useContext } from 'react';\nimport { FormGroup, ControlLabel, Form } from 'react-bootstrap';\nimport AsyncSelect from 'react-select3/async';\nimport { selectUserOptionFormater, selectedUserFormater } from 'src/utilities/selectHelper';\n\nimport AdminFetcher from 'src/fetchers/AdminFetcher';\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nconst DeviceUserGroupsTab = () => {\n  const devicesStore = useContext(StoreContext).devices;\n  let device = devicesStore.device;\n\n  const toggleLoading = (value) => {\n    devicesStore.setIsLoading(value);\n  }\n\n  const handleUser = (value, type) => {\n    let newValue = value ? value : [];\n    devicesStore.changeDevice(type, newValue);\n  }\n\n  const loadUserByName = (input, type) => {\n    if (!input) {\n      return Promise.resolve([]);\n    }\n\n    return AdminFetcher.fetchUsersByNameType(input, type)\n      .then((result) => {\n        return selectUserOptionFormater({ data: result, withType: false }).options\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  return (\n    <Form>\n      <FormGroup>\n        <ControlLabel>Add device permission to users</ControlLabel>\n        <AsyncSelect\n          isMulti\n          isClearable={false}\n          isLoading={devicesStore.is_loading}\n          loadOptions={(input) => loadUserByName(input, 'Person')}\n          loadingMessage={() => \"Type to search\"}\n          value={selectedUserFormater(device.people).options}\n          placeholder=\"Select ...\"\n          onChange={(value) => handleUser(value, 'people')}\n          onMenuOpen={() => toggleLoading(true)}\n          onMenuClose={() => toggleLoading(false)}\n          className=\"device-multi-select\"\n        />\n      </FormGroup>\n      <FormGroup>\n        <ControlLabel>Add device permission to groups</ControlLabel>\n        <AsyncSelect\n          isMulti\n          isClearable={false}\n          isLoading={devicesStore.is_loading}\n          loadOptions={(input) => loadUserByName(input, 'Group')}\n          loadingMessage={() => \"Type to search\"}\n          value={selectedUserFormater(device.groups).options}\n          placeholder=\"Select ...\"\n          onChange={(value) => handleUser(value, 'groups')}\n          onMenuOpen={() => toggleLoading(true)}\n          onMenuClose={() => toggleLoading(false)}\n          className=\"device-multi-select\"\n        />\n      </FormGroup>\n    </Form>\n  );\n}\n\nexport default observer(DeviceUserGroupsTab);\n","import React, { useState, useEffect, useContext } from 'react';\nimport {\n  FormControl, FormGroup, ControlLabel, Form, InputGroup, Tooltip, OverlayTrigger, Button, Checkbox\n} from 'react-bootstrap';\nimport Select from 'react-select3';\nimport Clipboard from 'clipboard';\nimport { startsWith, endsWith } from 'lodash';\n\nimport AdminFetcher from 'src/fetchers/AdminFetcher';\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nconst DeviceDataCollectorTab = () => {\n  const devicesStore = useContext(StoreContext).devices;\n  const [localCollectorValues, setLocalCollectorValues] = useState([]);\n  const device = devicesStore.device;\n  let clipboard = new Clipboard('.clipboardBtn');\n\n  useEffect(() => {\n    AdminFetcher.fetchLocalCollector()\n      .then((result) => {\n        setLocalCollectorValues(result.listLocalCollector);\n      });\n    devicesStore.changeDevice('datacollector_authentication', 'password');\n  }, []);\n\n  useEffect(() => {\n    return () => {\n      clipboard.destroy();\n    }\n  }, [devicesStore.deviceModalVisible]);\n\n  const methodOptions = [\n    { value: 'filewatchersftp', label: 'filewatchersftp' }, \n    { value: 'filewatcherlocal', label: 'filewatcherlocal' },\n    { value: 'folderwatchersftp', label: 'folderwatchersftp' },\n    { value: 'folderwatcherlocal', label: 'folderwatcherlocal' },\n    { value: 'disabled', label: 'disabled' }\n  ];\n\n  const authenticationOptions = [\n    { value: 'password', label: 'password' },\n    { value: 'keyfile', label: 'keyfile' }\n  ];\n\n  let methodValue = '';\n  let authenticationValue = { value: 'password', label: 'password' };\n\n  if (device && device.datacollector_method) {\n    methodValue = methodOptions.filter(f => f.value == device.datacollector_method);\n  }\n  if (device && device.datacollector_authentication) {\n    authenticationValue = authenticationOptions.filter(f => f.value == device.datacollector_authentication);\n  }\n\n  const methodValueCheck = methodValue ? methodValue[0].value : '';\n  const readonlyKeyName = authenticationValue !== null && authenticationValue[0] && authenticationValue[0].value == 'password';\n  const userValue = device && device.datacollector_user ? device.datacollector_user : '';\n  const hostValue = device && device.datacollector_host ? device.datacollector_host : '';\n  const keyFileValue = device && device.datacollector_key_name ? device.datacollector_key_name : '';\n  const numberOfFilesValue = device && device.datacollector_number_of_files ? device.datacollector_number_of_files : '1';\n  const dir = device && device.datacollector_dir ? device.datacollector_dir : '';\n  const userLevelSelected = device && device.datacollector_user_level_selected ? device.datacollector_user_level_selected : false;\n  const dirValue = userLevelSelected && dir ? `${dir}/{UserSubDirectories}` : (dir ? dir : '');\n\n  const tipCopyClipboard = <Tooltip id=\"copy_tooltip\">copy to clipboard</Tooltip>;\n\n  const onChange = (field, value) => {\n    let newValue = '';\n    if (value) {\n      newValue = ['datacollector_method', 'datacollector_authentication'].includes(field) ? value.value : value;\n    }\n    devicesStore.changeDevice(field, newValue);\n  }\n\n  const ListLocalCollector = () => {\n    return (\n      <>\n        <div className=\"device-datacollector-directory-list\">\n          <h6><b>Local Collector Dir Configurtaion</b></h6>\n          {\n            localCollectorValues.map((c, i) => (\n              <div key={`list-collector-${i}`}>\n                <FormGroup bsSize=\"small\">\n                  <InputGroup>\n                    <InputGroup.Button>\n                      <OverlayTrigger placement=\"right\" overlay={tipCopyClipboard}>\n                        <Button bsSize=\"xsmall\" active className=\"clipboardBtn\" data-clipboard-target={`#copy-input-${i}`} >\n                          <i className=\"fa fa-clipboard\" />\n                        </Button>\n                      </OverlayTrigger>\n                    </InputGroup.Button>\n                    <FormControl\n                      id={`copy-input-${i}`}\n                      type=\"text\"\n                      value={c.path}\n                      readOnly\n                    />\n                  </InputGroup>\n                </FormGroup>\n              </div>\n            ))\n          }\n        </div>\n      </>\n    );\n  }\n\n  return (\n    <Form className=\"form-with-columns\">\n      <FormGroup validationState={device.valid_datacollector_method} className=\"col-full\">\n        <ControlLabel>Watch method *</ControlLabel>\n        <Select\n          isClearable\n          value={methodValue}\n          options={methodOptions}\n          onChange={(event) => onChange('datacollector_method', event)}\n        />\n      </FormGroup>\n\n      <FormGroup validationState={device.valid_datacollector_user} className=\"col-half\">\n        <ControlLabel>User *</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={userValue}\n          onChange={(event) => onChange('datacollector_user', event.target.value)}\n          placeholder=\"e.g. User\"\n          readOnly={endsWith(methodValueCheck, 'local')}\n        />\n      </FormGroup>\n\n      <FormGroup validationState={device.valid_datacollector_host} className=\"col-half\">\n        <ControlLabel>Host *</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={hostValue}\n          onChange={(event) => onChange('datacollector_host', event.target.value)}\n          placeholder=\"e.g. remote.address or localhost:2222\"\n          readOnly={endsWith(methodValueCheck, 'local')}\n        />\n      </FormGroup>\n\n      <FormGroup className=\"col-half\">\n        <ControlLabel>SFTP authentication with</ControlLabel>\n        <Select\n          value={authenticationValue}\n          options={authenticationOptions}\n          onChange={(event) => onChange('datacollector_authentication', event)}\n        />\n      </FormGroup>\n\n      <FormGroup validationState={device.valid_datacollector_key_name} className=\"col-half\">\n        <ControlLabel>Key file</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={keyFileValue}\n          onChange={(event) => onChange('datacollector_key_name', event.target.value)}\n          placeholder=\"e.g. /home/user/.ssh/rsa/eln-privatekey.pem\"\n          readOnly={endsWith(methodValueCheck, 'local') || readonlyKeyName}\n        />\n      </FormGroup>\n\n      <FormGroup validationState={device.valid_datacollector_dir} className=\"col-full\">\n        <ControlLabel>Watch directory *</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={dirValue}\n          onChange={(event) => onChange('datacollector_dir', event.target.value)}\n          placeholder=\"e.g. /home/sftp/eln\"\n          readOnly={userLevelSelected}\n        />\n\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={(\n            <Tooltip id=\"enableUserLevel\">\n              If you choose this option, the system will gather files and folders from subdirectories within the\n              directory you have specified. These subdirectories must align with user name abbreviations.\n            </Tooltip>\n          )}\n        >\n          <div>\n            <Checkbox\n              checked={userLevelSelected}\n              onChange={(event) => onChange('datacollector_user_level_selected', event.target.checked)}\n            >\n              Enable user level data collection&nbsp;\n              <span className=\"fa fa-info-circle\" aria-hidden=\"true\" />\n            </Checkbox>\n          </div>\n        </OverlayTrigger>\n\n        {\n          endsWith(methodValueCheck, 'local') ? <ListLocalCollector /> : null\n        }\n      </FormGroup>\n\n      <FormGroup className=\"col-full\">\n        <ControlLabel>Number of files</ControlLabel>\n        <FormControl\n          type=\"number\"\n          value={numberOfFilesValue}\n          onChange={(event) => onChange('datacollector_number_of_files', event.target.value)}\n          min=\"0\"\n          placeholder=\"e.g. 10\"\n          readOnly={startsWith(methodValueCheck, 'file')}\n        />\n        <span className=\"fa fa-info-circle\" aria-hidden=\"true\">&nbsp;Folderwatcher: set to 0 for a varying number of files</span>\n      </FormGroup>\n    </Form>\n  );\n}\n\nexport default observer(DeviceDataCollectorTab);\n","import React, { useContext } from 'react';\nimport { FormControl, FormGroup, ControlLabel, Form } from 'react-bootstrap';\n\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nconst DeviceNovncTab = () => {\n  const devicesStore = useContext(StoreContext).devices;\n  const device = devicesStore.device;\n\n  const onChange = (field, value) => {\n    let newValue = value ? value : '';\n    if (field == 'novnc_password') {\n      devicesStore.setChangeNovncPassword(true);\n    }\n    devicesStore.changeDevice(field, newValue);\n  }\n\n  const RenderStoredTarget = () => {\n    if (device.novnc_target && device.novnc_token) {\n      return `${device.novnc_target}?token=${device.novnc_token}`;\n    }\n    if (device.novnc_target && device.novnc_token === '') {\n      return device.novnc_target;\n    }\n    return 'None';\n  };\n\n  const RenderCurrentTarget = () => {\n    if (device.novnc_target && device.novnc_token) {\n      return `${device.novnc_target}?token=${device.novnc_token}`;\n    }\n    if (device.novnc_target && !device.novnc_token) {\n      return device.novnc_target;\n    }\n    return 'You haven\\'t edited the target so far';\n  };\n\n  let passwordValue = ''\n  if (devicesStore.change_novnc_password) {\n    passwordValue = device.novnc_password\n  } else if (device.novnc_password_decrypted) {\n    passwordValue = device.novnc_password_decrypted;\n  }\n\n  return (\n    <Form className=\"form-with-columns\">\n      <FormGroup validationState={device.valid_novnc_target} className=\"col-half\">\n        <ControlLabel>Target *</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={device.novnc_target ? device.novnc_target : ''}\n          onChange={(event) => onChange('novnc_target', event.target.value)}\n          placeholder=\"e.g. ws://localhost:8092/websockify\"\n        />\n      </FormGroup>\n\n      <FormGroup className=\"col-half\">\n        <ControlLabel>Websockify Token</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={device.novnc_token ? device.novnc_token : ''}\n          onChange={(event) => onChange('novnc_token', event.target.value)}\n          placeholder=\"e.g. 000001\"\n        />\n      </FormGroup>\n\n      <FormGroup className=\"col-full\">\n        <span className=\"fa fa-info-circle\" aria-hidden=\"true\">&nbsp;\n          <b>Current Target</b>&nbsp;\n          <RenderStoredTarget />\n        </span>\n        <br />\n        <span className=\"fa fa-info-circle\" aria-hidden=\"true\">&nbsp;\n          <b>Edited Target</b>&nbsp;\n          <RenderCurrentTarget />\n        </span>\n        <hr />\n        <h4>RFB Credentials</h4>\n      </FormGroup>\n\n      <FormGroup className=\"col-half\">\n        <ControlLabel>Password</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={passwordValue}\n          onChange={(event) => onChange('novnc_password', event.target.value)}\n          placeholder=\"Password\"\n        />\n      </FormGroup>\n    </Form>\n  );\n}\n\nexport default observer(DeviceNovncTab);\n\n","import React, { useEffect, useContext } from 'react';\nimport { FormControl, FormGroup, ControlLabel, Form, Button } from 'react-bootstrap';\nimport Select from 'react-select3';\nimport { formatDate } from 'src/utilities/timezoneHelper';\n\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nconst DeviceMetadataTab = () => {\n  const devicesStore = useContext(StoreContext).devices;\n  const deviceMetadataStore = useContext(StoreContext).deviceMetadata;\n  const device = devicesStore.device;\n  const deviceMetadata = deviceMetadataStore.device_metadata;\n\n  useEffect(() => {\n    if (!deviceMetadata.device_id) {\n      deviceMetadataStore.changeDeviceMetadata('device_id', device.id);\n    }\n  }, []);\n\n  const dataCiteStateOptions = [\n    { value: 'draft', label: 'Draft' },\n    { value: 'registered', label: 'Registered' },\n    { value: 'findable', label: 'Findable' },\n  ];\n\n  if (!deviceMetadata.data_cite_state) {\n    deviceMetadataStore.changeDeviceMetadata('data_cite_state', 'draft');\n  }\n  const dataCiteStateValue = dataCiteStateOptions.filter(f => f.value == deviceMetadata.data_cite_state);\n\n  const onChange = (field, value) => {\n    let newValue = '';\n    if (value) {\n      newValue = field == 'data_cite_state' ? value.value : value;\n    }\n    deviceMetadataStore.changeDeviceMetadata(field, newValue);\n  }\n\n  const addDeviceMetadataDate = () => {\n    const newDateItem = { date: '', dateType: '' };\n    const currentDates = deviceMetadata.dates ? deviceMetadata.dates : [];\n    const newDates = currentDates.concat(newDateItem);\n    deviceMetadataStore.changeDeviceMetadata('dates', newDates);\n  }\n\n  const updateDeviceMetadataDate = (index, field, value) => {\n    deviceMetadataStore.changeDeviceMetadataDate(index, field, value);\n  }\n\n  const removeDeviceMetadataDate = (index) => {\n    const currentDates = deviceMetadata.dates ? [...deviceMetadata.dates] : [];\n    currentDates.splice(index, 1);\n    deviceMetadataStore.changeDeviceMetadata('dates', currentDates);\n  }\n\n  const syncDeviceMetadataFromDataCite = () => {\n    if (!deviceMetadata.doi) {\n      deviceMetadataStore.changeErrorMessage('Metadata DOI: Can not be blank');\n    } else {\n      deviceMetadataStore.changeErrorMessage('');\n    }\n    if (deviceMetadataStore.error_message == '') {\n      const params = {\n        doi: deviceMetadata.doi.trim(),\n        device_id: deviceMetadata.device_id,\n      }\n      deviceMetadataStore.updateDeviceMetadata(params);\n    } \n  }\n\n  const syncDeviceMetadataToDataCite = () => {\n    deviceMetadataStore.syncDeviceMetadataToDataCite({ device_id: device.id });\n  }\n\n  const deviceMetaDataDates = () => {\n    if (!deviceMetadata.dates) { return null; }\n\n    let dateForms = [];\n    deviceMetadata.dates.map((dateItem, index) => {\n      dateForms.push(\n        <div className=\"form-with-columns col-full\" key={`group-div-${index}`}>\n          <FormGroup className=\"col-half\">\n            <ControlLabel key={`date-label-${index}`}>Date</ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={dateItem.date}\n              placeholder=\"Date e.g. '2020-01-01'\"\n              onChange={event => updateDeviceMetadataDate(index, 'date', event.target.value)}\n            />\n          </FormGroup>\n          <FormGroup className=\"col-middle\">\n            <ControlLabel>Date Type</ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={dateItem.dateType}\n              placeholder=\"DateType e.g. 'Created'\"\n              onChange={event => updateDeviceMetadataDate(index, 'dateType', event.target.value)}\n            />\n          </FormGroup>\n          <FormGroup className=\"col-small\">\n            <ControlLabel>Action</ControlLabel>\n            <Button bsStyle=\"danger\" bsSize=\"small\"\n              className=\"pull-right\"\n              onClick={() => removeDeviceMetadataDate(index)}\n            >\n              <i className=\"fa fa-trash-o\" />\n            </Button>\n          </FormGroup>\n        </div>\n      );\n    });\n\n    return dateForms;\n  }\n\n  const syncToDataCiteButton = () => {\n    if (deviceMetadata.id && deviceMetadata.doi) { return null }\n\n    return (\n      <Button className=\"pull-right with-margin-bottom col-half\"\n        bsStyle=\"danger\"\n        onClick={() => syncDeviceMetadataFromDataCite()}\n      >\n        Sync from DataCite\n      </Button>\n    );\n  }\n\n  const getFromDataCiteHeadline = () => {\n    return deviceMetadata.id && deviceMetadata.doi ? null : <h4 className=\"col-full\">Get Metadata from DataCite</h4>;\n  }\n\n  const createDeviceMetadataHeadline = () => {\n    return deviceMetadata.id && deviceMetadata.doi ? null : <h4 className=\"clear-after-button col-full\">Or create Metadata and sync to DataCite</h4>;\n  }\n\n  const dataCiteUpdatedAt = () => {\n    if (!deviceMetadata.data_cite_updated_at) { return ''; }\n\n    return formatDate(deviceMetadata.data_cite_updated_at);\n  }\n\n  return (\n    <Form className=\"form-with-columns\">\n      {getFromDataCiteHeadline()}\n      <FormGroup className=\"col-half\">\n        <ControlLabel>DOI *</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={deviceMetadata.doi ? deviceMetadata.doi : ''}\n          onChange={(event) => onChange('doi', event.target.value)}\n          placeholder=\"10.*****/**********\"\n          readOnly={deviceMetadata.id && deviceMetadata.doi ? true : false}\n        />\n      </FormGroup>\n      {syncToDataCiteButton()}\n      {createDeviceMetadataHeadline()}\n\n      <FormGroup className=\"col-full\">\n        <ControlLabel>State</ControlLabel>\n        <Select\n          value={dataCiteStateValue}\n          options={dataCiteStateOptions}\n          onChange={(event) => onChange('data_cite_state', event)}\n        />\n      </FormGroup>\n\n      <FormGroup className=\"col-half\">\n        <ControlLabel>URL *</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={deviceMetadata.url ? deviceMetadata.url : ''}\n          placeholder=\"https://<device.url>\"\n          onChange={(event) => onChange('url', event.target.value)}\n        />\n      </FormGroup>\n\n      <FormGroup className=\"col-half\">\n        <ControlLabel>Landing Page</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={deviceMetadata.landing_page ? deviceMetadata.landing_page : ''}\n          placeholder=\"https://<device.landing.page>\"\n          onChange={(event) => onChange('landing_page', event.target.value)}\n        />\n      </FormGroup>\n\n      <FormGroup className=\"col-half\">\n        <ControlLabel>Name</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={deviceMetadata.name ? deviceMetadata.name : ''}\n          placeholder=\"Name\"\n          onChange={(event) => onChange('name', event.target.value)}\n        />\n      </FormGroup>\n\n      <FormGroup className=\"col-half\">\n        <ControlLabel>Publication Year *</ControlLabel>\n        <FormControl\n          type=\"number\"\n          value={deviceMetadata.publication_year ? deviceMetadata.publication_year : ''}\n          placeholder=\"Publication Year e.g. '2020'\"\n          onChange={(event) => onChange('publication_year', event.target.value)}\n        />\n      </FormGroup>\n\n      <FormGroup className=\"col-full\">\n        <ControlLabel>Description</ControlLabel>\n        <FormControl\n          type=\"text\"\n          value={deviceMetadata.description ? deviceMetadata.description : ''}\n          placeholder=\"Description\"\n          onChange={(event) => onChange('description', event.target.value)}\n        />\n      </FormGroup>\n\n      <FormGroup className=\"col-full\">\n        <ControlLabel>Dates</ControlLabel>\n      </FormGroup>\n      {deviceMetaDataDates()}\n\n      <FormGroup className=\"col-full\">\n        <Button bsStyle=\"success\" bsSize=\"small\" className=\"pull-right\" onClick={() => addDeviceMetadataDate()}>\n          <i className=\"fa fa-plus\" />\n        </Button>\n      </FormGroup>\n\n      <hr className=\"col-full\" />\n\n      <FormGroup className=\"col-half\">\n        DataCiteVersion: {deviceMetadata.data_cite_version}<br />\n        DataCiteUpdatedAt: {dataCiteUpdatedAt()}\n      </FormGroup>\n\n      <Button className=\"pull-right col-half\" bsStyle=\"danger\" onClick={() => syncDeviceMetadataToDataCite()}>\n        Sync to DataCite\n      </Button>\n    </Form>\n  );\n}\n\nexport default observer(DeviceMetadataTab);\n","import React, { useContext } from 'react';\nimport { Modal, Button, ButtonToolbar, Alert, Tabs, Tab } from 'react-bootstrap';\nimport Draggable from \"react-draggable\";\nimport DevicePropertiesTab from './DevicePropertiesTab';\nimport DeviceUserGroupsTab from './DeviceUserGroupsTab';\nimport DeviceDataCollectorTab from './DeviceDataCollectorTab';\nimport DeviceNovncTab from './DeviceNovncTab';\nimport DeviceMetadataTab from './DeviceMetadataTab';\nimport { endsWith } from 'lodash';\n\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nconst DeviceModal = () => {\n  const devicesStore = useContext(StoreContext).devices;\n  const deviceMetadataStore = useContext(StoreContext).deviceMetadata;\n  let device = devicesStore.device;\n  const disableTab = devicesStore.create_or_update == 'update' ? false : true;\n\n  const errorMessage = devicesStore.error_message + deviceMetadataStore.error_message;\n  const successMessage = devicesStore.success_message + deviceMetadataStore.success_message;\n  const withAlertClass = errorMessage || successMessage ? 'with-alert' : '';\n  const buttonsWithAlertClass = errorMessage ? 'with-alert' : '';\n\n  const minimizedClass = devicesStore.modalMinimized ? ' minimized' : '';\n  let deviceParams = {};\n  let datacollectorFields = [\n    'datacollector_method', 'datacollector_user', 'datacollector_host',\n    'datacollector_key_name', 'datacollector_dir'\n  ];\n\n  const trimDeviceStringValues = () => {\n    deviceParams = { ...device };\n    Object.keys(deviceParams).forEach((key) => {\n      if (key !== 'id' && typeof deviceParams[key] == 'string') {\n        deviceParams[key] = deviceParams[key].trim();\n      }\n    });\n    return deviceParams;\n  }\n\n  const collectUserOrGroupIds = (deviceParams, type) => {\n    if (deviceParams[type].length >= 1) {\n      let users = [];\n      deviceParams[type].map((u) => {\n        if (u.id) {\n          users.push(u.id);\n        }\n      });\n      deviceParams[type] = users;\n    }\n    return deviceParams;\n  }\n\n  const prepareDeviceParams = () => {\n    deviceParams = trimDeviceStringValues();\n    deviceParams = collectUserOrGroupIds(deviceParams, 'people');\n    deviceParams = collectUserOrGroupIds(deviceParams, 'groups');\n    return deviceParams;\n  }\n\n  const anyDatacollectorFields = () => {\n    return datacollectorFields.filter(field => device[field] !== '' && device[field] !== null);\n  }\n\n  const handleValidationState = () => {\n    let errorMessages = ['Please fill out all needed fields'];\n\n    const nameValue = device.name.trim() === '' ? 'error' : null;\n    if (nameValue) { errorMessages.push('Please enter a name'); }\n    devicesStore.changeDevice('valid_name', nameValue);\n\n    const nameAbbreviationValue = device.name_abbreviation.trim() === '' ? 'error' : null;\n    if (nameAbbreviationValue) { errorMessages.push('Please enter a name abbreviation'); }\n    devicesStore.changeDevice('valid_name_abbreviation', nameAbbreviationValue);\n\n    if (anyDatacollectorFields().length >= 1) {\n      devicesStore.changeDevice('datacollector_fields', true);\n    \n      const methodValue = !device.datacollector_method ? 'error' : null;\n      if (methodValue) { errorMessages.push('Please select watch method'); }\n      devicesStore.changeDevice('valid_datacollector_method', methodValue);\n    \n      const dirValue = !device.datacollector_dir ? 'error' : null;\n      if (dirValue) { errorMessages.push('Please enter a watch directory'); }\n      devicesStore.changeDevice('valid_datacollector_dir', dirValue);\n    \n      if (endsWith(device.datacollector_method, 'sftp')) {\n        const userValue = !device.datacollector_user ? 'error' : null;\n        if (userValue) { errorMessages.push('Please enter a user'); }\n        devicesStore.changeDevice('valid_datacollector_user', userValue);\n    \n        const hostValue = !device.datacollector_host ? 'error' : null;\n        if (hostValue) { errorMessages.push('Please enter a host'); }\n        devicesStore.changeDevice('valid_datacollector_host', hostValue);\n    \n        const keyNameValue =\n          device.datacollector_authentication === 'keyfile' && !device.datacollector_key_name ? 'error' : null;\n        if (keyNameValue) { errorMessages.push('Use key file, Please enter a key path'); }\n        devicesStore.changeDevice('valid_datacollector_key_name', keyNameValue);\n      }\n    } else {\n      devicesStore.changeDevice('datacollector_fields', false);\n    }\n\n    if (devicesStore.active_tab_key == 4) {\n      const novncTarget = !device.novnc_target ? 'error' : null;\n      if (novncTarget) { errorMessages.push('Please type a Target for the device'); }\n      devicesStore.changeDevice('valid_novnc_target', novncTarget);\n    }\n\n    return errorMessages;\n  }\n\n  const saveDeviceOrRelation = () => {\n    if (devicesStore.active_tab_key == 5) {\n      saveDeviceMetadata();\n    } else {\n      saveDevice();\n    }\n  }\n\n  const saveDevice = () => {\n    let errorMessages = handleValidationState();\n    devicesStore.changeErrorMessage(errorMessages.join('\\n'));\n    device = devicesStore.device;\n\n    if (errorMessages.length <= 1) {\n      removeErrors();\n\n      if (devicesStore.create_or_update == 'update') {\n        devicesStore.updateDevice(prepareDeviceParams());\n      } else {\n        devicesStore.createDevice(prepareDeviceParams());\n      }\n    }\n  }\n\n  const saveDeviceMetadata = () => {\n    // validation?\n    removeErrors();\n    const deviceMetadata = deviceMetadataStore.device_metadata;\n    deviceMetadataStore.updateDeviceMetadata(deviceMetadata);\n  }\n\n  const handleCancel = () => {\n    devicesStore.hideDeviceModal();\n    devicesStore.clearDevice();\n    devicesStore.setActiveTabKey(1);\n    deviceMetadataStore.clearDeviceMetadata();\n    removeErrors();\n  }\n\n  const removeErrors = () => {\n    devicesStore.changeErrorMessage('');\n    devicesStore.changeSuccessMessage('');\n    deviceMetadataStore.changeErrorMessage('');\n    deviceMetadataStore.changeSuccessMessage('');\n    devicesStore.setChangeNovncPassword(false);\n  }\n\n  const handleSelectTab = (key) => {\n    devicesStore.setActiveTabKey(key);\n  }\n\n  const modalTitle = () => {\n    if (devicesStore.create_or_update == 'update') {\n      return `Edit ${device.name}`;\n    } else {\n      return 'Add new device';\n    }\n  }\n\n  const showMessage = () => {\n    if (errorMessage !== '') {\n      return <Alert bsStyle=\"danger\" className=\"device-alert\">{errorMessage}</Alert>;\n    } else if (successMessage !== '') {\n      return <Alert bsStyle=\"success\" className=\"device-alert\">{successMessage}</Alert>;\n    }\n  }\n\n  return (\n    <Draggable handle=\".handle\">\n      <Modal\n        show={devicesStore.deviceModalVisible}\n        onHide={() => handleCancel()}\n        backdrop={false}\n        dialogas=\"draggable-modal\"\n      >\n        <Modal.Header className=\"handle\" closeButton>\n          <div className=\"col-md-11 col-sm-11\">\n            <Modal.Title>\n              <i className=\"fa fa-arrows move\" />\n              {modalTitle()}\n            </Modal.Title>\n          </div>\n          <div className=\"col-md-1 col-sm-1\">\n            <i\n              className=\"fa fa-window-minimize window-minimize\"\n              onClick={() => devicesStore.toggleModalMinimized()} />\n          </div>\n        </Modal.Header>\n        <Modal.Body>\n          <div className={`draggable-modal-form-container${minimizedClass}`}>\n            <div className=\"draggable-modal-form-fields\">\n              {showMessage()}\n              <div className={`draggable-modal-scrollable-content ${withAlertClass}`}>\n                <Tabs\n                  activeKey={devicesStore.active_tab_key}\n                  animation={false}\n                  onSelect={handleSelectTab}\n                  id=\"device-form-tabs\"\n                  key=\"form-tabs\"\n                >\n                  <Tab\n                    eventKey={1}\n                    title=\"Properties\"\n                    key=\"tab-properties-1\"\n                  >\n                    <DevicePropertiesTab />\n                  </Tab>\n                  <Tab\n                    eventKey={2}\n                    title=\"Users & Groups\"\n                    key=\"tab-user-group-2\"\n                    disabled={disableTab}\n                  >\n                    <DeviceUserGroupsTab />\n                  </Tab>\n                  <Tab\n                    eventKey={3}\n                    title=\"Data Collector\"\n                    key=\"tab-data-collector-3\"\n                    disabled={disableTab}\n                  >\n                    <DeviceDataCollectorTab />\n                  </Tab>\n                  <Tab\n                    eventKey={4}\n                    title=\"NoVNC Settings\"\n                    key=\"tab-novnc-settings-4\"\n                    disabled={disableTab}\n                  >\n                    <DeviceNovncTab />\n                  </Tab>\n                  <Tab\n                    eventKey={5}\n                    title=\"Metadata\"\n                    key=\"tab-metadata-5\"\n                    disabled={disableTab}\n                  >\n                    <DeviceMetadataTab />\n                  </Tab>\n                </Tabs>\n              </div>\n              <ButtonToolbar className={`draggable-modal-form-buttons ${buttonsWithAlertClass}`}>\n                <Button bsStyle=\"warning\" onClick={() => handleCancel()}>\n                  Cancel\n                </Button>\n                <Button bsStyle=\"primary\" onClick={saveDeviceOrRelation} >\n                  Save\n                </Button>\n              </ButtonToolbar>\n            </div>\n          </div>\n        </Modal.Body>\n      </Modal>\n    </Draggable>\n  );\n}\n\nexport default observer(DeviceModal);\n","import React, { useEffect, useContext } from 'react';\nimport { Panel, Table, Button, Tooltip, OverlayTrigger, Popover, Alert } from 'react-bootstrap';\nimport DeviceModal from './DeviceModal';\nimport { endsWith } from 'lodash';\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nconst DevicesList = () => {\n  const devicesStore = useContext(StoreContext).devices;\n  const deviceMetadataStore = useContext(StoreContext).deviceMetadata;\n\n  useEffect(() => {\n    devicesStore.load();\n  }, []);\n\n  const showCreateDeviceModal = () => {\n    devicesStore.setCreateOrUpdate('create');\n    devicesStore.showDeviceModal();\n    devicesStore.changeErrorMessage('');\n    devicesStore.changeSuccessMessage('');\n  }\n\n  const showEditDeviceModal = (device) => {\n    devicesStore.setCreateOrUpdate('update');\n    devicesStore.setDevice(device);\n    deviceMetadataStore.load(device.id);\n    devicesStore.showDeviceModal();\n    devicesStore.changeErrorMessage('');\n    devicesStore.changeSuccessMessage('');\n  }\n\n  const toggleDeviceUsersAndGroups = (deviceId) => {\n    document.getElementById(`row-device-${deviceId}`).classList.toggle('in');\n  }\n\n  const showBasicConfig = (device) => {\n    let datacollectorText = '';\n    let novncText = '';\n\n    if (device.datacollector_method) {\n      datacollectorText = device.datacollector_method;\n    }\n\n    if (device.novnc_target) {\n      const token = device.novnc_token ? `?token=${device.novnc_token}` : '';\n      novncText = `${device.novnc_target}${token}`;\n    }\n\n    return (\n      <>\n        <b className=\"devices-button-group-clear\">Data Collector:</b>\n        {datacollectorText}\n        <br />\n        <b className=\"devices-button-group-clear\">Novnc:</b>\n        {novncText}\n      </>\n    );\n  }\n\n  const listUsersAndGroups = (device, idx) => {\n    return (\n      <Table key={`users-table-${idx}`} className=\"device-users-table\">\n        <tbody>\n          {device.users.map((user, i) => (\n            <tr key={`row_${device.id}-${user.id}`}>\n              <td width=\"5%\">{i + 1}</td>\n              <td width=\"30%\">{user.name}</td>\n              <td width=\"10%\">{user.initials}</td>\n              <td width=\"35%\">{user.type}</td>\n              <td width=\"20%\">{deleteButton(device, user.type.toLowerCase(), user)}</td>\n            </tr>\n          ))}\n        </tbody>\n      </Table>\n    );\n  }\n\n  const testSFTP = (device) => {\n    devicesStore.setDeviceTestingId(device.id);\n    devicesStore.testSFTP(device);\n  }\n\n  const testSFTPButton = (device) => {\n    if (!endsWith(device.datacollector_method, 'sftp')) { return null; }\n\n    const tipTestConnect = <Tooltip id=\"test_tooltip\">test data collector connection</Tooltip>;\n    return (\n      <OverlayTrigger placement=\"top\" overlay={tipTestConnect}>\n        <Button bsSize=\"xsmall\" onClick={() => testSFTP(device)}>\n          {\n            devicesStore.device_testing_id == device.id ? <i className=\"fa fa-spin fa-spinner\" aria-hidden=\"true\" /> : <i className=\"fa fa-plug\" aria-hidden=\"true\" />\n          }\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n\n  const clearDatacollector = (device) => {\n    devicesStore.clearDataCollector(device);\n  }\n\n  const clearDatacollectorSettingsButton = (device) => {\n    if (device.datacollector_method) {\n      const tooltip = <Tooltip id=\"clearDatacollectorSettings\">Clear data collector settings</Tooltip>;\n      const clearPopover = (\n        <Popover id=\"popover-positioned-scrolling-left\">\n          Remove data collector settings of {device.name}<br />\n          <div className=\"btn-toolbar\">\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle=\"danger\"\n              className=\"devices-button-group\"\n              onClick={() => clearDatacollector(device)}>\n              Yes\n            </Button>\n            <Button bsSize=\"xsmall\" bsStyle=\"warning\">\n              No\n            </Button>\n          </div>\n        </Popover>\n      );\n\n      return (\n        <OverlayTrigger animation placement=\"right\" root trigger=\"focus\" overlay={clearPopover}>\n          <OverlayTrigger placement=\"top\" overlay={tooltip}>\n            <Button bsSize=\"xsmall\" className=\"devices-button-group-clear\">\n              <i className=\"fa fa-database\" />\n            </Button>\n          </OverlayTrigger>\n        </OverlayTrigger>\n      )\n    }\n  }\n\n  const clearNovncSettings = (device) => {\n    devicesStore.clearNovncSettings(device);\n  }\n\n  const clearNovncSettingsButton = (device) => {\n    if (device.novnc_target) {\n      const tooltip = <Tooltip id=\"clearNovncSettings\">Clear Novnc settings</Tooltip>;\n      const clearPopover = (\n        <Popover id=\"popover-positioned-scrolling-left\">\n          Remove Novnc settings of {device.name}<br />\n          <div className=\"btn-toolbar\">\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle=\"danger\"\n              className=\"devices-button-group\"\n              onClick={() => clearNovncSettings(device)}>\n              Yes\n            </Button>\n            <Button bsSize=\"xsmall\" bsStyle=\"warning\">\n              No\n            </Button>\n          </div>\n        </Popover>\n      );\n\n      return (\n        <OverlayTrigger animation placement=\"right\" root trigger=\"focus\" overlay={clearPopover}>\n          <OverlayTrigger placement=\"top\" overlay={tooltip}>\n            <Button bsSize=\"xsmall\" className=\"devices-button-group-clear\">\n              <i className=\"fa fa-cogs\" />\n            </Button>\n          </OverlayTrigger>\n        </OverlayTrigger>\n      )\n    }\n  }\n\n  const confirmDelete = (device, type, user) => {\n    if (type == 'device') {\n      devicesStore.deleteDevice(device.id);\n    } else {\n      devicesStore.deleteDeviceRelation(user, device);\n    }\n  }\n\n  const deleteButton = (object, type, user) => {\n    const deletePopover = (\n      <Popover id=\"popover-positioned-scrolling-left\">\n        Remove {type}: {object.name}<br />\n        <div className=\"btn-toolbar\">\n          <Button\n            bsSize=\"xsmall\"\n            bsStyle=\"danger\"\n            className=\"devices-button-group\"\n            onClick={() => confirmDelete(object, type, user)}>\n            Yes\n          </Button>\n          <Button bsSize=\"xsmall\" bsStyle=\"warning\">\n            No\n          </Button>\n        </div>\n      </Popover>\n    );\n\n    return (\n      <OverlayTrigger\n        animation\n        placement=\"right\"\n        root\n        trigger=\"focus\"\n        overlay={deletePopover}\n      >\n        <Button bsSize=\"xsmall\" bsStyle=\"danger\" className=\"devices-button-group\">\n          <i className=\"fa fa-trash-o\" />\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n\n  const listActionButtons = (device, idx) => {\n    return (\n      <td>\n        <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"editDevice\">Edit device</Tooltip>}>\n          <Button\n            bsSize=\"xsmall\"\n            type=\"button\"\n            bsStyle=\"warning\"\n            className=\"devices-button-group\"\n            onClick={() => showEditDeviceModal(device)}>\n            <i className=\"fa fa-pencil-square-o\" />\n          </Button>\n        </OverlayTrigger>\n        <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"UsersAndGroups\">Show device users and groups</Tooltip>}>\n          <Button\n            bsSize=\"xsmall\"\n            type=\"button\"\n            bsStyle=\"info\"\n            className=\"devices-button-group\"\n            onClick={() => toggleDeviceUsersAndGroups(device.id)}>\n            <i className=\"fa fa-users\" />&nbsp;({device.users.length < 10 ? `0${device.users.length}` : device.users.length})\n          </Button>\n        </OverlayTrigger>\n        {deleteButton(device, 'device', {})}\n        {clearDatacollectorSettingsButton(device)}\n        {clearNovncSettingsButton(device)}\n        {testSFTPButton(device)}\n      </td>\n    );\n  }\n\n  const listDevices = () => {\n    let tbody = [];\n    let devices = devicesStore.devices;\n\n    if (devices && devices.length <= 0) { return tbody; }\n\n    Object.values(devices).map((device, idx) => {\n      tbody.push(\n        <tbody key={`device-${device.id}`}>\n          <tr key={`row-${idx}`}>\n            <td>{idx + 1}</td>\n            {listActionButtons(device, idx)}\n            <td>{device.name}</td>\n            <td>{device.initials}</td>\n            <td className=\"device-list-config\">{showBasicConfig(device)}</td>\n          </tr>\n          <tr key={`users-row-${idx}-${device.id}`} className=\"collapse\" id={`row-device-${device.id}`}>\n            <td colSpan=\"5\" className=\"device-users\">\n              <div className=\"device-users-headline\">Device \"{device.name}\" managed by following users / groups</div>\n              {listUsersAndGroups(device, idx)}\n            </td>\n          </tr>\n        </tbody>\n      );\n    });\n\n    return tbody;\n  }\n\n  const showMessage = () => {\n    if (devicesStore.error_message !== '') {\n      return <Alert bsStyle=\"danger\" className=\"device-alert\">{devicesStore.error_message}</Alert>;\n    } else if (devicesStore.success_message !== '') {\n      return <Alert bsStyle=\"success\" className=\"device-alert\">{devicesStore.success_message}</Alert>;\n    }\n  }\n\n  return (\n    <Panel>\n      <Panel.Heading className=\"devices-panel-header\">\n        <span>Devices</span>\n        <Button bsStyle=\"default\" onClick={() => showCreateDeviceModal()}>Add new device</Button>\n      </Panel.Heading>\n      <Panel.Body>\n        {showMessage()}\n        <Table responsive condensed hover key=\"devices-list\">\n          <thead>\n            <tr className=\"device-table-header\">\n              <th width=\"3%\">#</th>\n              <th width=\"22%\">Actions</th>\n              <th width=\"28%\">Name</th>\n              <th width=\"9%\">Initial</th>\n              <th width=\"38%\">Data Collector / NoVNC</th>\n            </tr>\n          </thead>\n          {listDevices()}\n        </Table>\n        <DeviceModal />\n      </Panel.Body>\n    </Panel>\n  );\n};\n\nexport default observer(DevicesList);\n","import React from 'react';\nimport {\n  Panel, Table, Button, Modal, FormGroup, ControlLabel, Col, FormControl, Tooltip, OverlayTrigger\n} from 'react-bootstrap';\nimport ThirdPartyAppFetcher from 'src/fetchers/ThirdPartyAppFetcher';\n\nconst editTip = <Tooltip id=\"inchi_tooltip\">edit third party app</Tooltip>;\nconst newTip = <Tooltip id=\"inchi_tooltip\">create new third party app</Tooltip>;\nconst deleteTip = <Tooltip id=\"inchi_tooltip\">delete third party app</Tooltip>;\n\nexport default class ThirdPartyApp extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showMsgModal: false,\n      showMsgModalEdit: false,\n      showMsgModalDelete: false,\n      messageNewThirdPartyAppModal: '',\n      thirdPartyApps: [],\n      errorMessage: '',\n      currentName: '',\n      currentIP: '',\n      currentFileTypes: '',\n      currentID: ''\n    };\n    this.closeNewThirdPartyAppModal = this.closeNewThirdPartyAppModal.bind(this);\n    this.closeEditThirdPartyAppModal = this.closeEditThirdPartyAppModal.bind(this);\n    this.closeDeleteThirdPartyAppModal = this.closeDeleteThirdPartyAppModal.bind(this);\n  }\n\n  componentDidMount() {\n    this.thirdPartyApps();\n  }\n\n  thirdPartyApps() {\n    ThirdPartyAppFetcher.fetchThirdPartyApps()\n      .then((result) => {\n        this.setState({\n          thirdPartyApps: result\n        });\n      });\n  }\n\n  newApp(name, url, fileTypes) {\n    ThirdPartyAppFetcher.createOrUpdateThirdPartyApp(null, name, url, fileTypes)\n      .then((result) => {\n        if (result.error) {\n          this.setState({ messageNewThirdPartyAppModal: result.error });\n          return false;\n        }\n        this.thirdPartyApps();\n        return true;\n      });\n    return true;\n  }\n\n  edit(name, url, fileTypes) {\n    return ThirdPartyAppFetcher.createOrUpdateThirdPartyApp(\n      this.state.currentID,\n      name,\n      url,\n      fileTypes\n    )\n      .then((result) => {\n        if (result.error) {\n          return this.thirdPartyApps().then((res) => {\n            res.messageNewThirdPartyAppModal = result.error;\n            this.setState(res);\n            return false;\n          });\n        }\n        return true;\n      });\n  }\n\n  delete(id) {\n    ThirdPartyAppFetcher.deleteThirdPartyApp(\n      id\n    )\n      .then((result) => {\n        if (result.error) {\n          this.setState({ messageNewThirdPartyAppModal: result.error });\n          return false;\n        }\n        this.thirdPartyApps();\n        return true;\n      });\n    this.setState({\n      showMsgModalDelete: false\n    });\n    return true;\n  }\n\n  showNewThirdPartyAppModal() {\n    this.setState({\n      showMsgModal: true,\n    });\n  }\n\n  showEditThirdPartyAppModal(key) {\n    const { thirdPartyApps } = this.state;\n    // select app by key from thirdPartyApps\n    const app = thirdPartyApps.find((tpa) => tpa.id === key);\n    this.setState({\n      showMsgModalEdit: true,\n      currentName: app?.name,\n      currentIP: app?.url,\n      currentFileTypes: app?.fileTypes,\n      currentID: key\n    });\n  }\n\n  showDeleteThirdPartyAppModal(key) {\n    this.setState({\n      showMsgModalDelete: true,\n      currentID: key\n    });\n  }\n\n  closeNewThirdPartyAppModal() {\n    this.setState({\n      showMsgModal: false,\n      errorMessage: null,\n    });\n  }\n\n  closeEditThirdPartyAppModal() {\n    this.setState({\n      showMsgModalEdit: false\n    });\n  }\n\n  closeDeleteThirdPartyAppModal() {\n    this.setState({\n      showMsgModalDelete: false\n    });\n  }\n\n  checkInput(name, ip, fileTypes) {\n    const { thirdPartyApps, currentID } = this.state;\n    let appId = 0;\n    if (name.length < 1) {\n      this.setState({\n        errorMessage: 'Name is shorter than 1 character'\n      });\n      return false;\n    }\n\n    if (fileTypes.length == 0) {\n      this.setState({\n        errorMessage: 'File type cannot be empty'\n      });\n      return false;\n    }\n\n    if ((ip.slice(0, 7) !== 'http://')\n      && (ip.slice(0, 8) !== 'https://')) {\n      this.setState({\n        errorMessage: 'URL should start with http:// or https://'\n      });\n      return false;\n    }\n    // check if name is already used\n    if (thirdPartyApps.find((tpa) => { appId = tpa.id; return currentID !== tpa.id && tpa.name === name; })) {\n      this.setState({\n        errorMessage: `Name is already used by app with id: ${appId}`\n      });\n      return false;\n    }\n    // check if url is already used\n    if (thirdPartyApps.find((tpa) => { appId = tpa.id; return currentID !== tpa.id && tpa.url === ip; })) {\n      this.setState({\n        errorMessage: `URL already used by app with id: ${appId}`\n      });\n      return false;\n    }\n    return true;\n  }\n\n  renderDeleteThirdPartyAppModal() {\n    const { showMsgModalDelete, currentName, currentID } = this.state;\n    return (\n      <Modal\n        show={showMsgModalDelete}\n        onHide={this.closeDeleteThirdPartyAppModal}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>Delete third party app</Modal.Title>\n        </Modal.Header>\n        <Modal.Body style={{ overflow: 'auto' }}>\n          <div className=\"col-md-12\">\n            <p>\n              <strong>\n                {` Do you really want to delete ${currentName}?`}\n              </strong>\n            </p>\n\n            <OverlayTrigger placement=\"bottom\" overlay={deleteTip}>\n              <Button bsStyle=\"danger\" bsSize=\"small\" onClick={() => this.delete(currentID)}>\n                Delete&nbsp;\n                <i className=\"fa fa\" />\n              </Button>\n            </OverlayTrigger>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  renderEditThirdPartyAppModal() {\n    let nameRef = null;\n    let urlRef = null;\n    let fileTypesRef = null;\n\n    const handleEdit = () => {\n      const url = urlRef.value?.trim();\n      const name = nameRef.value?.trim();\n      const fileTypes = fileTypesRef.value?.trim();\n\n      if (this.checkInput(name, url, fileTypes)) {\n        this.edit(name, url, fileTypes)\n          .then(() => {\n            this.closeEditThirdPartyAppModal();\n            this.thirdPartyApps();\n          })\n          .catch(() => {});\n      }\n    };\n\n    const handleNameChange = (event) => {\n      // if current errorMessage start with Name, clear it\n      const newState = { currentName: event.target.value };\n      if (this.state.errorMessage.startsWith('Name')) {\n        newState.errorMessage = '';\n      }\n      this.setState(newState);\n    };\n\n    const handleIPChange = (event) => {\n      const newState = { currentIP: event.target.value };\n      if (this.state.errorMessage.startsWith('URL')) {\n        newState.errorMessage = '';\n      }\n      this.setState(newState);\n    };\n\n    const handleFileTypesChange = (event) => {\n      const newFileTypes = event.target.value;\n      const newState = { currentFileTypes: newFileTypes };\n      if (this.state.errorMessage && this.state.errorMessage.startsWith('FileTypes')) {\n        newState.errorMessage = '';\n      }\n      this.setState(newState);\n    };\n\n    return (\n      <Modal\n        show={this.state.showMsgModalEdit}\n        onHide={this.closeEditThirdPartyAppModal}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>Edit third party app</Modal.Title>\n        </Modal.Header>\n        <Modal.Body style={{ overflow: 'auto' }}>\n          <div className=\"col-md-12\">\n            <FormGroup controlId=\"formControlName\">\n              <Col componentClass={ControlLabel} sm={3}>\n                Name:\n              </Col>\n              <Col sm={9}>\n                <FormControl\n                  type=\"text\"\n                  name=\"Name\"\n                  value={this.state.currentName}\n                  onChange={handleNameChange}\n                  inputRef={(ref) => { nameRef = ref; }}\n                />\n              </Col>\n            </FormGroup>\n\n            <FormGroup controlId=\"formControlIPAdress\">\n              <Col componentClass={ControlLabel} sm={3}>\n                IP address:\n              </Col>\n              <Col sm={9}>\n                <FormControl\n                  type=\"text\"\n                  name=\"IP address\"\n                  value={this.state.currentIP}\n                  onChange={handleIPChange}\n                  inputRef={(ref) => { urlRef = ref; }}\n                />\n              </Col>\n            </FormGroup>\n\n            <FormGroup controlId=\"formControlFileType\">\n              <Col componentClass={ControlLabel} sm={3}>\n                Compatible File types (MIME):\n              </Col>\n              <Col sm={9}>\n                <FormControl\n                  type=\"text\"\n                  name=\"Mime types list\"\n                  value={this.state.currentFileTypes}\n                  onChange={handleFileTypesChange}\n                  inputRef={(ref) => { fileTypesRef = ref; }}\n                  placeholder=\"* or comma separated list: image/png,text...\"\n                />\n              </Col>\n            </FormGroup>\n\n            <OverlayTrigger placement=\"bottom\" overlay={editTip}>\n              <Button bsStyle=\"primary\" bsSize=\"small\" onClick={handleEdit}>\n                Update&nbsp;\n                <i className=\"fa fa\" />\n              </Button>\n            </OverlayTrigger>\n\n            <Modal.Footer>\n              <FormGroup controlId=\"formControlMessage\">\n                <FormControl type=\"text\" readOnly name=\"messageNewUserModal\" value={this.state.errorMessage} />\n              </FormGroup>\n            </Modal.Footer>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  renderMessageModal() {\n    let nameRef = null;\n    let urlRef = null;\n    let fileTypesRef = null;\n\n    const handleCreate = () => {\n      const url = urlRef.value;\n      const name = nameRef.value;\n      const fileTypes = fileTypesRef.value.trim();\n      if (this.checkInput(name, url, fileTypes)) {\n        this.newApp(name, url, fileTypes);\n        this.closeNewThirdPartyAppModal();\n      }\n    };\n\n    return (\n      <Modal\n        show={this.state.showMsgModal}\n        onHide={this.closeNewThirdPartyAppModal}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>Create new third party app</Modal.Title>\n        </Modal.Header>\n        <Modal.Body style={{ overflow: 'auto' }}>\n          <div className=\"col-md-12\">\n\n            <FormGroup controlId=\"formControlName\">\n              <Col componentClass={ControlLabel} sm={3}>\n                Name:\n              </Col>\n              <Col sm={9}>\n                <FormControl type=\"text\" name=\"Name\" inputRef={(ref) => { nameRef = ref; }} />\n              </Col>\n            </FormGroup>\n\n            <FormGroup controlId=\"formControlIPAdress\">\n              <Col componentClass={ControlLabel} sm={3}>\n                IP address:\n              </Col>\n              <Col sm={9}>\n                <FormControl type=\"text\" name=\"IP address\" inputRef={(ref) => { urlRef = ref; }} />\n              </Col>\n            </FormGroup>\n\n            <FormGroup controlId=\"formControlFileTypes\">\n              <Col componentClass={ControlLabel} sm={3}>\n                File types (MIME):\n              </Col>\n              <Col sm={9}>\n                <FormControl\n                  type=\"text\"\n                  name=\"File types\"\n                  inputRef={(ref) => { fileTypesRef = ref; }}\n                  placeholder=\"* or comma separated list: image/png,text...\"\n                />\n              </Col>\n            </FormGroup>\n\n            <OverlayTrigger placement=\"bottom\" overlay={newTip}>\n              <Button bsStyle=\"primary\" bsSize=\"small\" onClick={() => handleCreate()}>\n                Create&nbsp;\n                <i className=\"fa fa-plus\" />\n              </Button>\n            </OverlayTrigger>\n\n            <Modal.Footer>\n              <FormGroup controlId=\"formControlMessage\">\n                <FormControl type=\"text\" readOnly name=\"messageNewUserModal\" value={this.state.errorMessage} />\n              </FormGroup>\n            </Modal.Footer>\n\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  render() {\n    return (\n      <div>\n\n        <Panel>\n\n          <Button bsStyle=\"primary\" bsSize=\"small\" onClick={() => this.showNewThirdPartyAppModal()}>\n            New ThirdPartyApp&nbsp;\n            <i className=\"fa fa-plus\" />\n          </Button>\n          {this.renderMessageModal()}\n\n        </Panel>\n\n        <Table>\n          <thead>\n            <tr>\n              <th>Actions</th>\n              <th>Name</th>\n              <th>IP address</th>\n              <th>File types</th>\n              <th>ID</th>\n            </tr>\n          </thead>\n\n          <tbody>\n\n            {this.state.thirdPartyApps.map((entry) => (\n              <tr key={entry.id}>\n\n                <td>\n\n                  <OverlayTrigger placement=\"bottom\" overlay={editTip}>\n                    <Button bsStyle=\"info\" bsSize=\"xsmall\" onClick={() => this.showEditThirdPartyAppModal(entry.id)}>\n                      Edit&nbsp;\n                    </Button>\n                  </OverlayTrigger>\n\n                  {this.renderEditThirdPartyAppModal()}\n\n                  <OverlayTrigger placement=\"bottom\" overlay={deleteTip}>\n                    <Button bsStyle=\"danger\" bsSize=\"xsmall\" onClick={() => this.showDeleteThirdPartyAppModal(entry.id)}>\n                      <i className=\"fa fa-trash-o\" aria-hidden=\"true\" />\n                    </Button>\n                  </OverlayTrigger>\n\n                  {this.renderDeleteThirdPartyAppModal()}\n\n                </td>\n\n                <td>{entry.name}</td>\n                <td>{entry.url}</td>\n                <td>{entry.fileTypes}</td>\n                <td>{entry.id}</td>\n              </tr>\n            ))}\n\n          </tbody>\n        </Table>\n\n        <h2>{this.state.messageNewThirdPartyAppModal}</h2>\n\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport { Grid, Row, Col, Nav, NavItem } from 'react-bootstrap';\nimport AdminNavigation from 'src/apps/admin/AdminNavigation';\nimport Notifications from 'src/components/Notifications';\nimport AdminDashboard from 'src/apps/admin/AdminDashboard';\nimport UserManagement from 'src/apps/admin/UserManagement';\nimport GroupsDevices from 'src/apps/admin/GroupsDevices';\nimport MessagePublish from 'src/apps/admin/MessagePublish';\nimport OlsTerms from 'src/apps/admin/OlsTerms';\nimport MatrixManagement from 'src/apps/admin/MatrixManagement';\nimport TextTemplateContainer from 'src/apps/admin/textTemplates/TextTemplateContainer';\nimport DelayedJobs from 'src/apps/admin/DelayedJobs';\nimport ChemSpectraLayouts from 'src/apps/admin/ChemSpectraLayouts';\nimport DevicesList from 'src/apps/admin/devices/DevicesList';\n// import TemplateManagement from 'src/apps/admin/TemplateManagement';\nimport ThirdPartyApp from 'src/apps/admin/ThirdPartyApp';\n\nclass AdminHome extends React.Component {\n  constructor(props) {\n    super();\n    this.state = {\n      showTree: true,\n      pageIndex: 0,\n      contentClassName: 'small-col main-content',\n    };\n    this.toggleTree = this.toggleTree.bind(this);\n    this.handleSelect = this.handleSelect.bind(this);\n  }\n\n  toggleTree() {\n    const { showTree } = this.state;\n    this.setState({\n      showTree: !showTree,\n      contentClassName: showTree ? 'small-col full-main' : 'small-col main-content'\n    });\n  }\n\n  handleSelect(pageIndex) {\n    this.setState({\n      pageIndex\n    });\n  }\n\n\n  mainContent() {\n    const { pageIndex } = this.state;\n    if (pageIndex === 0) {\n      return this.renderDashboard();\n    } else if (pageIndex === 1) {\n      return this.renderUserManagement();\n    } else if (pageIndex === 2) {\n      return this.renderMessagePublish();\n    } else if (pageIndex === 4) {\n      return this.renderGroupMgnt();\n    } else if (pageIndex === 5) {\n      return this.renderOlsTerms();\n    } else if (pageIndex === 7) {\n      return this.renderContent(<MatrixManagement />);\n    } else if (pageIndex === 8) {\n      return this.renderTextTemplates();\n    } else if (pageIndex === 9) {\n      return this.renderDevices();\n    } else if (pageIndex === 12) {\n      return this.renderTemplateManagement();\n    } else if (pageIndex === 13) {\n      return this.renderDelayedJobs();\n    } else if (pageIndex === 14) {\n      return this.renderChemSpectraLayouts();\n    } else if (pageIndex === 15) {\n      return this.renderThirdPartyApp();\n    }\n    return (<div />);\n  }\n\n  tree() {\n    const { showTree, pageIndex } = this.state;\n    if (!showTree) {\n      return <div />;\n    }\n\n    return (\n      <div>\n        <Col className=\"small-col collec-tree\">\n          <Nav bsStyle=\"pills\" stacked activeKey={pageIndex} onSelect={this.handleSelect}>\n            <NavItem eventKey={0}>Dashboard</NavItem>\n            <NavItem eventKey={1}>User Management</NavItem>\n            <NavItem eventKey={9}>Devices</NavItem>\n            <NavItem eventKey={4}>Groups</NavItem>\n            <NavItem eventKey={7}>UI features</NavItem>\n            <NavItem eventKey={8}>Text Templates</NavItem>\n            <NavItem eventKey={2}>Message Publish</NavItem>\n            <NavItem eventKey={5}>Load OLS Terms</NavItem>\n            {/* <NavItem eventKey={12}>Report-template Management</NavItem> */}\n            <NavItem eventKey={13}>Delayed Jobs </NavItem>\n            <NavItem eventKey={14}>ChemSpectra Layouts </NavItem>\n            <NavItem eventKey={15}>Third Party Apps </NavItem>\n          </Nav>\n        </Col>\n      </div>\n    );\n  }\n\n  renderThirdPartyApp() {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName} >\n        <ThirdPartyApp />\n      </Col>\n    );\n  }\n\n  renderDashboard() {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName} >\n        <AdminDashboard />\n      </Col>\n    );\n  }\n\n  renderUserManagement() {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName} >\n        <UserManagement />\n      </Col>\n    );\n  }\n\n  renderMessagePublish() {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName} >\n        <MessagePublish />\n      </Col>\n    );\n  }\n\n  renderGroupMgnt() {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName} >\n        <GroupsDevices />\n      </Col>\n    );\n  }\n\n  renderOlsTerms() {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName} >\n        <OlsTerms />\n      </Col>\n    );\n  }\n\n  renderTextTemplates() {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName} >\n        <TextTemplateContainer />\n      </Col>\n    );\n  }\n\n  renderContent(component) {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName} >\n        {component}\n      </Col>\n    );\n  }\n\n  renderDelayedJobs() {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName} >\n        <DelayedJobs />\n      </Col>\n    );\n  }\n\n  renderTemplateManagement() {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName} >\n        <TemplateManagement />\n      </Col>\n    );\n  }\n\n  renderChemSpectraLayouts() {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName}>\n        <ChemSpectraLayouts />\n      </Col>\n    );\n  }\n\n  renderDevices() {\n    const { contentClassName } = this.state;\n    return (\n      <Col className={contentClassName} >\n        <DevicesList />\n      </Col>\n    );\n  }\n\n  render() {\n    return (\n      <div>\n        <Grid fluid>\n          <Row className=\"card-navigation\">\n            <AdminNavigation toggleTree={this.toggleTree} />\n          </Row>\n          <Row className=\"card-content container-fluid\" >\n            {this.tree()}\n            {this.mainContent()}\n          </Row>\n          <Row>\n            <Notifications />\n          </Row>\n        </Grid>\n      </div>\n    );\n  }\n}\n\nexport default AdminHome;","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport AdminHome from 'src/apps/admin/AdminHome';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('AdminHome');\n  if (domElement) {\n    ReactDOM.render(\n      <DndProvider backend={HTML5Backend}>\n        <AdminHome />\n      </DndProvider>,\n      domElement\n    );\n  }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst TextTemplateIcon = ({ template }) => {\n  if (!template) return <span />;\n\n  const { data, name } = template;\n\n  if (data.icon) {\n    return (\n      <i className={data.icon} />\n    );\n  }\n\n  const text = (data || {}).text || name;\n\n  return (\n    <span>{text.toUpperCase()}</span>\n  );\n};\n\nTextTemplateIcon.propTypes = {\n  // eslint-disable-next-line react/forbid-prop-types\n  template: PropTypes.object\n};\n\nTextTemplateIcon.defaultProps = {\n  template: null\n};\n\nexport default TextTemplateIcon;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { ChemSpectraClient } from '@complat/chem-spectra-client';\n\nconst domLoadedCb = () => {\n  const csElement = document.getElementById('ChemSpectra');\n\n  if (csElement) {\n    ReactDOM.render(\n      <ChemSpectraClient />,\n      csElement,\n    );\n  }\n};\n\ndocument.addEventListener(\n  'DOMContentLoaded',\n  domLoadedCb,\n);\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { ChemSpectraClient } from '@complat/chem-spectra-client';\n\nconst domLoadedCb = () => {\n  const csElement = document.getElementById('ChemSpectraEditor');\n\n  if (csElement) {\n    ReactDOM.render(\n      <ChemSpectraClient editorOnly />,\n      csElement,\n    );\n  }\n};\n\ndocument.addEventListener(\n  'DOMContentLoaded',\n  domLoadedCb,\n);\n","import React from 'react';\nimport { ButtonToolbar, Button, ButtonGroup } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nexport default class FocusNovnc extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.handleFocus = this.handleFocus.bind(this);\n    this.handleBlur = this.handleBlur.bind(this);\n    this.handleCursor = this.handleCursor.bind(this);\n    this.handleForceScreenResizing = this.handleForceScreenResizing.bind(this);\n  }\n\n  handleFocus() {\n    this.props.handleFocus();\n  }\n\n  handleBlur() {\n    this.props.handleBlur();\n  }\n\n  handleCursor() {\n    this.props.handleCursor();\n  }\n\n  handleForceScreenResizing() {\n    this.props.handleForceScreenResizing();\n  }\n\n  render() {\n    const { connected, isNotFocused, forceCursor, isForcedScreenResizing } = this.props;\n    const focusedColor = 'btn btn-xs btn-success m-4';\n    const blurredColor = 'btn btn-xs btn-danger m-4';\n    const normalColor = 'btn btn-xs m-2';\n    const somePadding = { padding: '0 0 5px 5px' };\n    const BlurBtn = () => (\n      <Button\n        className={(!isNotFocused || !connected) ? normalColor : blurredColor}\n        disabled={isNotFocused || !connected}\n        onClick={this.handleBlur}\n      > {(!isNotFocused || !connected) ? 'Blur' : 'Blurred'}\n      </Button>\n    );\n    const FocusBtn = () => (\n      <Button\n        className={(isNotFocused || !connected) ? normalColor : focusedColor}\n        disabled={!isNotFocused || !connected}\n        onClick={this.handleFocus}\n      > {isNotFocused ? 'Focus' : 'Focused'}\n      </Button>\n    );\n    const ScreenResizingBtn = () => (\n      <Button\n        className={(!isForcedScreenResizing || !connected) ? normalColor : focusedColor}\n        disabled={!connected}\n        onClick={this.handleForceScreenResizing}\n        title=\"Fit width screen\"\n        style={{margin : '0 5px 0 5px'}}\n      >\n      <i className=\"fa fa-desktop\" aria-hidden=\"true\" style={{marginRight: '2px'}}/>\n      <i className=\"fa fa-arrows-alt\" aria-hidden=\"true\" />\n\n      </Button>\n    );\n    const UsersConnected = () => (\n      <span className=\"title\">\n        <i className=\"fa fa-eye\">\n          {this.props.watching}\n        </i>\n        &nbsp;\n        <i className=\"fa fa-pencil-square-o\">\n          {this.props.using}\n        </i>\n      </span>);\n\n    return (\n      <ButtonToolbar>\n        <ButtonGroup style={somePadding}>\n          <BlurBtn />\n          <FocusBtn />\n        </ButtonGroup>\n\n        <Button\n          className={(!forceCursor) ? normalColor : focusedColor}\n          onClick={this.handleCursor}\n          title=\"force mouse cursor\"\n        >\n          <i className=\"fa fa-desktop\" aria-hidden=\"true\" />\n          <i className=\"fa fa-mouse-pointer text-danger\" aria-hidden=\"true\" />\n        </Button>\n\n        {connected ? <UsersConnected /> : null}\n        <ScreenResizingBtn />\n      </ButtonToolbar>\n\n    );\n  }\n}\n\nFocusNovnc.propTypes = {\n  watching: PropTypes.number.isRequired,\n  using: PropTypes.number.isRequired,\n  isNotFocused: PropTypes.bool.isRequired,\n  isForcedScreenResizing: PropTypes.bool.isRequired,\n  connected: PropTypes.bool.isRequired,\n  forceCursor: PropTypes.bool.isRequired,\n  handleBlur: PropTypes.func.isRequired,\n  handleFocus: PropTypes.func.isRequired,\n  handleCursor: PropTypes.func.isRequired,\n  handleForceScreenResizing: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport { Nav, Navbar, MenuItem, NavDropdown } from 'react-bootstrap';\n\nimport UserAuth from 'src/components/navigation/UserAuth';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UserActions from 'src/stores/alt/actions/UserActions';\n\nimport NavNewSession from 'src/components/navigation/NavNewSession';\nimport DocumentHelper from 'src/utilities/DocumentHelper';\n\nconst NavHead = () => (\n  <Navbar.Brand>\n    <NavDropdown title=\"Chemotion\" className=\"navig-brand\" id=\"bg-nested-dropdown-brand\">\n      <MenuItem eventKey=\"11\" href=\"http://www.chemotion-repository.net\" target=\"_blank\">Chemotion Repository</MenuItem>\n      <MenuItem eventKey=\"13\" href=\"https://www.complat.kit.edu/26.php\" target=\"_blank\">Complat</MenuItem>\n      <MenuItem eventKey=\"14\" href=\"https://github.com/ComPlat\" target=\"_blank\">Complat on Github</MenuItem>\n      <MenuItem divider />\n      <MenuItem eventKey=\"15\" href=\"/\" target=\"_self\">Chemotion</MenuItem>\n    </NavDropdown>\n  </Navbar.Brand>\n);\n\nexport default class Navigation extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentUser: null,\n    };\n    this.onChange = this.onChange.bind(this);\n    this.toggleDeviceList = this.toggleDeviceList.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n    UserActions.fetchCurrentUser();\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    const newId = state.currentUser ? state.currentUser.id : null;\n    const oldId = this.state.currentUser ? this.state.currentUser.id : null;\n    if (newId !== oldId) { this.setState({ currentUser: state.currentUser }); }\n  }\n\n  toggleDeviceList() {\n    this.props.toggleDeviceList();\n  }\n\n  navHeader() {\n    return (\n      <Navbar.Header className=\"collec-tree\">\n        <Navbar.Text style={{ cursor: \"pointer\" }}>\n          <i\n            className=\"fa fa-list\"\n            style={{ fontStyle: \"normal\" }}\n            onClick={this.toggleDeviceList}\n          />\n        </Navbar.Text>\n        <Navbar.Text />\n        <NavHead />\n      </Navbar.Header>\n    );\n  }\n\n  render() {\n    const { modalProps } = this.state;\n\n    return this.state.currentUser ? (\n      <Navbar fluid className=\"navbar-custom\">\n        {this.navHeader()}\n        <Nav navbar className=\"navbar-form\">\n        </Nav>\n        <UserAuth />\n        <div style={{ clear: 'both' }} />\n      </Navbar>\n    ) : (\n      <Navbar fluid className=\"navbar-custom\" >\n        {this.navHeader()}\n        <Nav navbar className=\"navbar-form\" />\n        <NavNewSession authenticityToken={DocumentHelper.getMetaContent('csrf-token')} />\n        <div style={{ clear: 'both' }} />\n      </Navbar>\n    );\n  }\n}\n","import React from 'react';\n\nconst ConnectedBtn = () => (<span>\n  <i\n    className=\"fa fa-check-circle-o\"\n    aria-hidden=\"true\"\n    style={{ color: '#90ee90', float: 'right', fontSize: '20px' }}\n  />\n</span>);\n\nconst DisconnectedBtn = () => (<span>\n  <i\n    className=\"fa fa-times-circle-o\"\n    aria-hidden=\"true\"\n    style={{ color: 'red', float: 'right', fontSize: '20px' }}\n  />\n</span>\n);\n\nexport { ConnectedBtn, DisconnectedBtn };\n","import React from 'react';\nimport RFB from '@novnc/novnc/lib/rfb';\nimport { Grid, Row, Col } from 'react-bootstrap';\nimport { uniq } from 'lodash';\n\nimport DeviceActions from 'src/stores/alt/actions/UserActions';\nimport DeviceStore from 'src/stores/alt/stores/UserStore';\nimport FocusNovnc from 'src/apps/commandAndControl/FocusNovnc';\nimport Navigation from 'src/apps/commandAndControl/Navigation';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport { ConnectedBtn, DisconnectedBtn } from 'src/apps/commandAndControl/NovncStatus';\n\n// Timeout before disconnection when not focused\nconst TIME_DISCO = 180000;\n// Timeout before bluring when focused and mouse has left the canvas\nconst TIME_BLUR = 55000;\n// Interval to query connection counter\nconst TIME_CONN = 4000;\n\nclass CnC extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      devices: [],\n      selected: {},\n      showDeviceList: true,\n      connected: false,\n      rfb: null,\n      isNotFocused: true,\n      isForcedScreenResizing: false,\n      show: false,\n      watching: 0,\n      using: 0,\n      autoBlur: null,\n      autoDisconnect: null,\n      forceCursor: false,\n      connections: null,\n    };\n    this.UserStoreChange = this.UserStoreChange.bind(this);\n    this.toggleDeviceList = this.toggleDeviceList.bind(this);\n    this.connect = this.connect.bind(this);\n    this.connected = this.connected.bind(this);\n    this.disconnected = this.disconnected.bind(this);\n    this.autoDisconnect = this.autoDisconnect.bind(this);\n    this.handleScreenSizeChanging = this.handleScreenSizeChanging.bind(this);\n    this.handleFocus = this.handleFocus.bind(this);\n    this.handleBlur = this.handleBlur.bind(this);\n    this.handleForceScreenResizing = this.handleForceScreenResizing.bind(this);\n    this.handleCursor = this.handleCursor.bind(this);\n    this.handleMouseEnter = this.handleMouseEnter.bind(this);\n    this.handleMouseLeave = this.handleMouseLeave.bind(this);\n    this.clearTimers = this.clearTimers.bind(this);\n\n    this.fetchConnections = this.fetchConnections.bind(this);\n  }\n\n  componentDidMount() {\n    DeviceStore.listen(this.UserStoreChange);\n    DeviceActions.fetchNoVNCDevices();\n    // Listen for window resize event and handle it accordingly\n    window.addEventListener(\"resize\", this.handleScreenSizeChanging);\n  }\n\n  shouldComponentUpdate(nextState) {\n    return this.state.connected !== nextState.connected\n      || this.state.rfb !== nextState.rfb\n      || this.state.selected.id !== nextState.selected.id\n      || this.state.isNotFocused !== nextState.isNotFocused\n      || this.state.isForcedScreenResizing !== nextState.isForcedScreenResizing;\n  }\n\n  componentWillUnmount() {\n    DeviceStore.unlisten(this.UserStoreChange);\n    this.disconnect();\n\n    // Remove event listener for window resize\n    window.removeEventListener(\"resize\", this.handleScreenSizeChanging);\n  }\n\n  UserStoreChange(UserStoreState) {\n    this.setState((prevState) => ({ ...prevState, devices: UserStoreState.devices }));\n  }\n\n  connected() {\n    this.setState({ connected: true });\n  }\n\n  disconnected() {\n    this.setState({ connected: false });\n  }\n\n  clearTimers() {\n    clearTimeout(this.state.autoBlur);\n    clearTimeout(this.state.autoDisconnect);\n  }\n\n  handleFocus() {\n    if (!this.state.rfb) { return; }\n    const tempRFB = this.state.rfb;\n    tempRFB.viewOnly = false;\n  \n    // Focuses the RFB instance\n    this.state.rfb.focus();\n    this.clearTimers(); // Clear the auto blur and auto disconnect timers\n    this.setState({ rfb: tempRFB, isNotFocused: false, showDeviceList: false });\n\n    // If screen resizing is forced, trigger the `handleScreenSizeChanging` function\n    if (this.state.isForcedScreenResizing) {\n      setTimeout(() => {\n        this.handleScreenSizeChanging();\n      }, 1);\n    }\n  }\n\n  /**\n   * Handles the event when the screen size is changing.\n   * If screen resizing is forced, toggles the `scaleViewport` property of the RFB instance.\n   * This is done by setting it to false and then back to true, which triggers a resize.\n   */\n  handleScreenSizeChanging() {\n    // If there is no RFB instance or screen resizing is not forced, return early\n    if (!this.state.rfb || !this.state.isForcedScreenResizing) { return; }\n    const tempRFB = this.state.rfb;\n    // Toggle the `scaleViewport` property of the RFB instance\n    tempRFB.scaleViewport = false;\n    tempRFB.scaleViewport = true;\n\n    this.setState({ rfb: tempRFB });\n  }\n\n  /*\n   * Toggles the `scaleViewport` property of the RFB instance and updates the state accordingly.\n   * Also clears the auto blur and auto disconnect timers and updates the state accordingly.\n   */\n  handleForceScreenResizing() {\n    // If there is no RFB instance, return early\n    if (!this.state.rfb) { return; }\n    // Create a copy of the current RFB instance\n    const tempRFB = this.state.rfb;\n    // Toggle the `scaleViewport` property of the RFB instance\n    tempRFB.scaleViewport = !this.state.isForcedScreenResizing;\n    // Clear the auto blur and auto disconnect timers\n    this.clearTimers();\n    // Update the state with the new RFB instance and toggled `isForcedScreenResizing` property\n    this.setState({\n      rfb: tempRFB,\n      isForcedScreenResizing: !this.state.isForcedScreenResizing \n    });\n  }\n\n  handleBlur() {\n    if (!this.state.rfb) { return; }\n    const tempRFB = this.state.rfb;\n    tempRFB.viewOnly = true;\n    // Toggle the device list when the screen is blurred\n    // This provides a way to hide the device list when the user is not focused on the screen\n    //this.toggleDeviceList();\n    this.clearTimers();\n    const disconnectTime = setTimeout(this.autoDisconnect, TIME_DISCO);\n    this.setState({ rfb: tempRFB, isNotFocused: true, showDeviceList: true, autoDisconnect: disconnectTime });\n    \n    // If screen resizing is forced, trigger the `handleScreenSizeChanging` function\n    if (this.state.isForcedScreenResizing) {\n      setTimeout(() => {\n        this.handleScreenSizeChanging();\n      }, 1);\n    }\n  }\n\n  handleCursor() {\n    this.setState({ forceCursor: !this.state.forceCursor });\n  }\n\n  handleMouseEnter() {\n    if (!this.state.rfb || this.state.isNotFocused) { return; }\n    this.clearTimers();\n  }\n\n  handleMouseLeave() {\n    if (this.state.isNotFocused) { return; }\n    this.clearTimers();\n    const blurTime = setTimeout(this.handleBlur, TIME_BLUR);\n    this.setState({ autoBlur: blurTime });\n  }\n\n  connect() {\n    this.disconnect();\n    const { id, target, password } = this.state.selected;\n    if (!this.canvas || !id || !target) { return; }\n\n    const rfb = new RFB(\n      this.canvas,\n      target,\n      {\n        repeaterID: '',\n        shared: true,\n        credentials: { password: password },\n      }\n    );\n    rfb.viewOnly = true;\n    rfb.reconnect = true;\n    rfb.show_dot = true;\n    // Prevent the viewport from jumping to the clicked position when in focus mode on the device remote display\n    rfb.focusOnClick = false;\n\n    rfb.addEventListener('connect', () => this.connected());\n    rfb.addEventListener('disconnect', () => this.disconnected());\n    this.setState((prevState) => ({\n      ...prevState,\n      rfb,\n      isNotFocused: true,\n      isForcedScreenResizing: false,\n      connections: setInterval(this.fetchConnections, TIME_CONN)\n    }));\n  }\n\n  fetchConnections() {\n    const {\n      selected, isNotFocused\n    } = this.state;\n    fetch(`/api/v1/devices/current_connection?id=${selected.id}&status=${isNotFocused}`, {\n      credentials: 'same-origin'\n    }).then((response) => response.json())\n      .then((json) => {\n        let using = 0;\n        let watching = 0;\n        const data = uniq(json.result).map((line) => line.split(','));\n        const conn = Object.fromEntries(data);\n\n        Object.keys(conn).forEach((k) => {\n          if (conn[k] === '0') { using += 1; }\n          if (conn[k] === '1') { watching += 1; }\n        });\n        this.setState({ using, watching });\n      });\n  }\n\n  autoDisconnect() {\n    clearInterval(this.state.connections);\n    this.state.rfb.disconnect();\n  }\n\n  disconnect() {\n    clearInterval(this.state.connections);\n    if (!this.state.rfb) {\n      return;\n    }\n    this.state.rfb.disconnect();\n    this.setState((prevState) => ({ ...prevState, rfb: null }));\n  }\n\n  toggleDeviceList() {\n    const { showDeviceList } = this.state;\n    const { isNotFocused } = this.state;\n\n    // If the device is currently in focus, we want to call handleBlur\n    // so that the device is blurred when the device list is toggled.\n    if (!this.state.isNotFocused) {\n      this.handleBlur();\n    }\n    this.setState({\n      showDeviceList: !showDeviceList,\n      indicatorClassName: showDeviceList ? 'fa fa-chevron-circle-right' : 'fa fa-chevron-circle-left',\n      mainContentClassName: showDeviceList ? 'small-col full-main' : 'small-col main-content'\n    });\n  }\n\n  deviceClick(device) {\n    UsersFetcher.fetchNoVNCDevices(device.id)\n      .then((devices) => this.setState(\n        (prevState) => ({ ...prevState, selected: devices[0] }),\n        this.connect\n      ));\n  }\n\n  tree(dev, selectedId) {\n    const sortedDevices = dev.sort((a, b) => {\n      if (a.name < b.name) {\n        return -1;\n      }\n      if (a.name > b.name) {\n        return 1;\n      }\n      return 0;\n    });\n\n    return (\n      <Col className=\"small-col collec-tree\">\n        <div className=\"tree-view\">\n          <div className=\"title\" style={{ backgroundColor: 'white' }}>\n            <i className=\"fa fa-list\" />\n            {' '}\n&nbsp;&nbsp; Devices\n          </div>\n        </div>\n        <div className=\"tree-wrapper\">\n          {sortedDevices.map((device, index) => (\n            <div\n              className=\"tree-view\"\n              key={`device${device.id}`}\n              onClick={() => this.deviceClick(device)}\n              role=\"button\"\n              tabIndex={index === 0 ? 0 : -1}\n            >\n              <div\n                className={`title ${selectedId === device.id ? 'selected' : null}`}\n\n              >\n                {device.name}\n                {selectedId === device.id && this.state.connected ? <ConnectedBtn /> : null}\n                {selectedId === device.id && !this.state.connected ? <DisconnectedBtn /> : null}\n              </div>\n            </div>\n          ))}\n        </div>\n      </Col>\n    );\n  }\n\n  render() {\n    const {\n      devices, selected, showDeviceList,\n      isNotFocused, isForcedScreenResizing, connected, watching, using, forceCursor\n    } = this.state;\n\n    return (\n      <div>\n        <Grid fluid>\n          <Row className=\"card-navigation\">\n            <Navigation toggleDeviceList={this.toggleDeviceList} />\n          </Row>\n          <Row className=\"card-content container-fluid\">\n            {showDeviceList && isNotFocused ? this.tree(devices, selected.id) : null}\n            <Col className=\"small-col main-content\">\n              <FocusNovnc\n                isNotFocused={isNotFocused}\n                isForcedScreenResizing={isForcedScreenResizing}\n                handleFocus={this.handleFocus}\n                handleBlur={this.handleBlur}\n                handleForceScreenResizing={this.handleForceScreenResizing}\n                connected={connected}\n                watching={watching}\n                using={using}\n                forceCursor={forceCursor}\n                handleCursor={this.handleCursor}\n              />\n              <div \n                className={forceCursor ? 'force-mouse-pointer' : ''}\n                ref={(ref) => { this.canvas = ref; }}\n                onMouseEnter={this.handleMouseEnter}\n                onMouseLeave={this.handleMouseLeave}\n              />\n            </Col>\n          </Row>\n        </Grid>\n      </div>\n    );\n  }\n}\n\nexport default CnC;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport CnC from 'src/apps/commandAndControl/CnC';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('CnC');\n  if (domElement) { ReactDOM.render(<CnC />, domElement); }\n});\n","import 'whatwg-fetch';\n\nconst converter_app_url = '/api/v1/converter';\n\nexport default class ConverterFetcher {\n  static deleteProfile(profile) {\n    const requestOptions = { method: 'DELETE' };\n    return fetch(`/api/v1/converter/profiles/${profile.id}`, requestOptions)\n      .then((response) => {\n        if (!response.ok) { throw response; }\n        return response;\n      });\n  }\n\n  static fetchProfiles() {\n    return fetch('/api/v1/converter/profiles', {\n      credentials: 'same-origin',\n      method: 'GET',\n    }).then((response) => {\n      if (response.status === 200) {\n        return response.json();\n      }\n      return null;\n    })\n      .then(json => json)\n      .catch((errorMessage) => { console.error(errorMessage); });\n  }\n\n  static fetchOptions() {\n    return fetch('/api/v1/converter/options', {\n      credentials: 'same-origin',\n      method: 'GET',\n    }).then((response) => {\n      if (response.status === 200) {\n        return response.json();\n      }\n      return null;\n    })\n      .then(json => json)\n      .catch((errorMessage) => { console.error(errorMessage); });\n  }\n\n  static fetchTables(file) {\n    const data = new FormData();\n    data.append('file[]', file);\n    return fetch('/api/v1/converter/tables', {\n      credentials: 'same-origin',\n      contentType: 'application/json',\n      method: 'POST',\n      body: data,\n    }).then((response) => {\n      if (response.ok) {\n        return response.json();\n      }\n      return null;\n    })\n      .then(json => json)\n      .catch((errorMessage) => { console.error(errorMessage); });\n  }\n\n\n  static createProfile(profile) {\n    const requestOptions = {\n      method: 'POST',\n      body: JSON.stringify(profile),\n      headers: { 'Content-Type': 'application/json' }\n    };\n\n    let ok;\n    return fetch('/api/v1/converter/profiles', requestOptions)\n      .then((response) => {\n        ok = response.ok;\n        return response.json();\n      })\n      .then((info) => {\n        if (ok) {\n          return info;\n        }\n        throw info;\n      });\n  }\n\n\n  static updateProfile(profile) {\n    const requestOptions = {\n      method: 'PUT',\n      body: JSON.stringify(profile),\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    };\n\n    let ok;\n    return fetch(`/api/v1/converter/profiles/${profile.id}`, requestOptions)\n      .then((response) => {\n        // eslint-disable-next-line prefer-destructuring\n        ok = response.ok;\n        return response.json();\n      })\n      .then((info) => {\n        if (ok) {\n          return info;\n        }\n        throw new Error(info);\n      });\n  }\n}\n","import React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Modal, Button } from 'react-bootstrap';\nimport { ProfileList, ProfileForm, FileUploadForm } from '@complat/chemotion-converter-client';\nimport ConverterApi from 'src/fetchers/ConverterFetcher';\nimport GenericDSsFetcher from 'src/fetchers/GenericDSsFetcher';\n\nclass ConverterAdmin extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      status: 'list',\n      client: null,\n      selectedFile: null,\n      profiles: [],\n      options: [],\n      datasets: [],\n      profile: null,\n      error: false,\n      errorMessage: '',\n      isLoading: false,\n      createdModal: false,\n      deleteModal: false\n    };\n\n    this.showCreateView = this.showCreateView.bind(this);\n    this.showUpdateView = this.showUpdateView.bind(this);\n    this.showImportView = this.showImportView.bind(this);\n\n    this.showCreatedModal = this.showCreatedModal.bind(this);\n    this.hideCreatedModal = this.hideCreatedModal.bind(this);\n\n    this.showDeleteModal = this.showDeleteModal.bind(this);\n    this.hideDeleteModal = this.hideDeleteModal.bind(this);\n\n    this.updateProfile = this.updateProfile.bind(this);\n    this.storeProfile = this.storeProfile.bind(this);\n    this.deleteProfile = this.deleteProfile.bind(this);\n    this.downloadProfile = this.downloadProfile.bind(this);\n\n    this.updateFile = this.updateFile.bind(this);\n    this.uploadFile = this.uploadFile.bind(this);\n    this.importFile = this.importFile.bind(this);\n\n    this.dispatchView = this.dispatchView.bind(this);\n  }\n\n  componentDidMount() {\n    Promise.all([\n      ConverterApi.fetchProfiles(),\n      GenericDSsFetcher.listDatasetKlass(),\n      ConverterApi.fetchOptions()\n    ]).then((responses) => {\n      const [profiles, klass, options] = responses;\n      const datasets = klass?.klass?.map((kl) => {\n        const pr = kl.properties_release;\n        pr.name = kl.label;\n        pr.ols = kl.ols_term_id;\n        return pr;\n      }) || [];\n\n      console.log(options?.client);\n      this.setState({\n        // eslint-disable-next-line max-len\n        profiles: profiles?.profiles || [], datasets, options: options?.options || [], client: options?.client || null\n      });\n    });\n  }\n\n  showImportView() {\n    this.setState({\n      status: 'import',\n      profile: null\n    });\n  }\n\n  showCreateView() {\n    this.setState({\n      status: 'upload',\n      profile: null\n    });\n  }\n\n  showUpdateView(profile) {\n    this.setState({\n      status: 'update',\n      profile: { ...profile },\n      error: false,\n      errorMessage: ''\n    });\n  }\n\n  showCreatedModal() {\n    this.setState({\n      createdModal: true\n    });\n  }\n\n  hideCreatedModal() {\n    this.setState({\n      createdModal: false\n    });\n  }\n\n  showDeleteModal(profile) {\n    this.setState({\n      deleteModal: true,\n      profile: { ...profile },\n    });\n  }\n\n  hideDeleteModal() {\n    this.setState({\n      deleteModal: false,\n      profile: null\n    });\n  }\n\n  updateProfile(profile) {\n    this.setState({ profile });\n  }\n\n  storeProfile() {\n    const { status, profile } = this.state;\n\n    // remove show flag\n    if (Array.isArray(profile.identifiers)) {\n      profile.identifiers.forEach((identifier) => {\n        // eslint-disable-next-line no-param-reassign\n        delete identifier.show;\n      });\n    }\n\n    if (status === 'create') {\n      ConverterApi.createProfile(profile)\n        .then((response) => {\n          const profiles = [...this.state.profiles];\n          profiles.push(response);\n          this.setState({\n            status: 'list',\n            profiles,\n            profile: null\n          }, this.showCreatedModal());\n        });\n    } else if (status === 'update') {\n      ConverterApi.updateProfile(profile)\n        .then((response) => {\n          const profiles = [...this.state.profiles]\n          const index = profiles.findIndex((p) => (p.id === response.id));\n          profiles[index] = response;\n          this.setState({\n            status: 'list',\n            profiles,\n            profile: null\n          });\n        });\n    }\n  }\n\n  deleteProfile() {\n    ConverterApi.deleteProfile(this.state.profile)\n      .then(() => {\n        const profiles = [...this.state.profiles]\n        const index = profiles.findIndex(p => (p.id == this.state.profile.id))\n        profiles.splice(index, 1)\n        this.setState({\n          status: 'list',\n          profiles: profiles,\n          profile: null\n        }, this.hideDeleteModal())\n      }\n    )\n  }\n\n  downloadProfile(profile) {\n    const a = document.createElement('a')\n    a.href = 'data:application/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(profile, null, 2))\n    a.download = profile.id + '.json'\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n  }\n\n  updateFile(event) {\n    this.setState({\n      selectedFile: event.target.files[0],\n      loaded: 0,\n      isLoading: false,\n      error: false,\n      errorMessage: ''\n    })\n  }\n\n  uploadFile() {\n    const { selectedFile } = this.state\n\n    this.setState({\n      isLoading: true\n    })\n\n    ConverterApi.fetchTables(selectedFile)\n      .then(data => {\n        if (data) {\n          const profile = {\n            title: '',\n            description: '',\n            tables: [],\n            identifiers: [],\n            data: data,\n          }\n\n          this.setState({\n            status: 'create',\n            profile: profile,\n            selectedFile: null,\n            isLoading: false,\n            error: false,\n            errorMessage: ''\n          })\n        }\n      })\n      .catch(error => {\n        if (error.status === 413) {\n          this.setState({\n            error: true,\n            errorMessage: 'The uploaded file is too large.',\n            isLoading: false\n          })\n        } else {\n          error.text().then(errorMessage => {\n            this.setState({\n              error: true,\n              errorMessage: JSON.parse(errorMessage).error,\n              isLoading: false\n            })\n          })\n        }\n      })\n  }\n\n  importFile() {\n    const { selectedFile } = this.state\n\n    this.setState({\n      isLoading: true\n    })\n\n    const createProfile = e => {\n      const fileProfile = JSON.parse(e.target.result)\n\n      ConverterApi.createProfile(fileProfile)\n        .then(profile => {\n          const profiles = [...this.state.profiles]\n          profiles.push(profile)\n          this.setState({\n            status: 'list',\n            profiles: profiles,\n            profile: null\n          }, this.showCreatedModal())\n        })\n        .catch(errors => {\n          this.setState({\n            error: true,\n            errorMessage: Object.values(errors).join(', '),\n            isLoading: false\n          })\n        })\n    }\n\n    const reader = new FileReader()\n    reader.readAsText(selectedFile)\n    reader.onload = createProfile.bind(this)\n  }\n\n  dispatchView() {\n    if (this.state.status === 'list') {\n      return (\n        <ProfileList\n          profiles={this.state.profiles}\n          isAdmin={this.state.client !== null}\n          updateProfile={this.showUpdateView}\n          deleteProfile={this.showDeleteModal}\n          downloadProfile={this.downloadProfile}\n        />\n      )\n    } else if (this.state.status == 'import') {\n      return (\n        <FileUploadForm\n          onFileChangeHandler={this.updateFile}\n          onSubmitFileHandler={this.importFile}\n          errorMessage={this.state.errorMessage}\n          error={this.state.error}\n          isLoading={this.state.isLoading}\n          disabled={this.state.selectedFile === null}\n        />\n      )\n    } else if (this.state.status == 'upload') {\n      return (\n        <FileUploadForm\n          onFileChangeHandler={this.updateFile}\n          onSubmitFileHandler={this.uploadFile}\n          errorMessage={this.state.errorMessage}\n          error={this.state.error}\n          isLoading={this.state.isLoading}\n          disabled={this.state.selectedFile === null}\n        />\n      );\n    } else {\n      return (\n        <ProfileForm\n          status={this.state.status}\n          profile={this.state.profile}\n          options={this.state.options}\n          datasets={this.state.datasets}\n          updateProfile={this.updateProfile}\n          storeProfile={this.storeProfile}\n        />\n      )\n    }\n  }\n\n  render() {\n    return (\n      <div className={['create', 'update'].includes(this.state.status) ? 'container-fluid' : 'container'}>\n        <header>\n          <nav aria-label=\"breadcrumb\">\n            {this.state.status == 'list' &&\n              <ol className=\"breadcrumb\">\n                <li className=\"breadcrumb-item active\" aria-current=\"page\">Chemotion file converter admin</li>\n              </ol>\n            }\n            {['upload', 'create'].includes(this.state.status) &&\n              <ol className=\"breadcrumb\">\n                <li className=\"breadcrumb-item\" aria-current=\"page\"><a href=\"\">Chemotion file converter admin</a></li>\n                <li className=\"breadcrumb-item active\" aria-current=\"page\">{'Create Profile'}</li>\n              </ol>\n            }\n            {this.state.status == 'update' &&\n              <ol className=\"breadcrumb\">\n                <li className=\"breadcrumb-item\" aria-current=\"page\"><a href=\"\">Chemotion file converter admin</a></li>\n                <li className=\"breadcrumb-item active\" aria-current=\"page\">{'Edit Profile: ' + this.state.title}</li>\n              </ol>\n            }\n            {this.state.status == 'import' &&\n              <ol className=\"breadcrumb\">\n                <li className=\"breadcrumb-item\" aria-current=\"page\"><a href=\"\">Chemotion file converter admin</a></li>\n                <li className=\"breadcrumb-item active\" aria-current=\"page\">{'Import Profile'}</li>\n              </ol>\n            }\n          </nav>\n\n          <div>\n            {this.state.status == \"list\" && this.state.client !== null &&\n              <div className=\"pull-right\">\n                <button type=\"button\" onClick={this.showImportView} className=\"btn btn-success mr-10\">\n                  Import profile\n                </button>\n                <button type=\"button\" onClick={this.showCreateView} className=\"btn btn-primary\">\n                  Create new profile\n                </button>\n              </div>\n            }\n\n            <h2>\n              {this.state.status == 'list' && 'Profiles List' }\n              {['upload', 'create'].includes(this.state.status) && 'Create Profile'}\n              {this.state.status == 'update' && 'Edit Profile'}\n              {this.state.status == 'import' && 'Import Profile'}\n            </h2>\n          </div>\n        </header>\n\n        <main>\n          {this.dispatchView()}\n        </main>\n        <div>\n          <a href=\"/\">Back to MyDB</a>\n        </div>\n\n        <Modal show={this.state.createdModal}>\n          <Modal.Header>\n            <Modal.Title>Profile successfully created!</Modal.Title>\n          </Modal.Header>\n\n          <Modal.Footer>\n            <Button bsStyle=\"primary\" onClick={this.hideCreatedModal}>Great!</Button>\n          </Modal.Footer>\n        </Modal>\n\n        <Modal show={this.state.deleteModal}>\n          <Modal.Header>\n            <Modal.Title>Do you really want to delete this profile?</Modal.Title>\n          </Modal.Header>\n          <Modal.Footer>\n            <Button bsStyle=\"default\" onClick={this.hideDeleteModal}>Cancel</Button>\n            <Button bsStyle=\"danger\" onClick={this.deleteProfile}>Delete profile</Button>\n          </Modal.Footer>\n        </Modal>\n      </div>\n    )\n  }\n\n}\n\nexport default ConverterAdmin;\n\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('ConverterAdmin');\n  if (domElement) ReactDOM.render(<ConverterAdmin />, domElement);\n});\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { orderBy } from 'lodash';\nimport { Constants, Designer } from 'chem-generic-ui';\nimport SyncBtn from 'src/apps/generic/SyncButton';\nimport LoadingModal from 'src/components/common/LoadingModal';\nimport Notifications from 'src/components/Notifications';\nimport GenericDSsFetcher from 'src/fetchers/GenericDSsFetcher';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport { FunctionLocation, GenericMenu, Unauthorized } from 'src/apps/generic/GenericUtils';\nimport { notification, submit } from 'src/apps/generic/Utils';\n\nconst FN_ID = 'GenericDatasets';\n\nexport default class GenericDatasetsAdmin extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      elements: [],\n      show: { tab: '', modal: '' },\n      revisions: [],\n      repoData: [],\n      user: {},\n    };\n    this.handleShowState = this.handleShowState.bind(this);\n    this.closeModal = this.closeModal.bind(this);\n    this.handleActivateKlass = this.handleActivateKlass.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.delRevision = this.delRevision.bind(this);\n    this.fetchRevisions = this.fetchRevisions.bind(this);\n    this.handleCreateRepo = this.handleCreateRepo.bind(this);\n    this.handleShowRepo = this.handleShowRepo.bind(this);\n  }\n\n  componentDidMount() {\n    this.fetchElements();\n    UsersFetcher.fetchCurrentUser()\n      .then(result => {\n        if (!result.error) {\n          this.setState({ user: result.user });\n        }\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  getShowState(att, val) {\n    return { ...this.state.show, [att]: val };\n  }\n\n  fetchElements() {\n    GenericDSsFetcher.listDatasetKlass().then(result => {\n      this.setState({ elements: result.klass });\n    });\n  }\n\n  handleActivateKlass(e) {\n    const act = e.is_active ? 'De-activate' : 'Activate';\n    GenericDSsFetcher.deActivateKlass({\n      id: e.id,\n      is_active: !e.is_active,\n      klass: 'DatasetKlass',\n    })\n      .then(result => {\n        if (result.error) {\n          notification({\n            title: `${act} Dataset fail`,\n            lvl: 'error',\n            msg: result.error,\n          });\n        } else {\n          notification({\n            title: `${act} Dataset successfully`,\n            lvl: 'info',\n            msg: `${e.label} is ${act.toLowerCase()} now`,\n          });\n          this.closeModal(this.fetchElements);\n          // this.fetchElements();\n        }\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  handleShowState(att, val, cb = () => {}) {\n    this.setState({ show: this.getShowState(att, val) }, cb);\n  }\n\n  closeModal(cb = () => {}) {\n    this.handleShowState('modal', '', cb);\n  }\n\n  fetchRevisions(_element) {\n    const element = _element;\n    if (element?.id) {\n      GenericDSsFetcher.fetchKlassRevisions(element.id, 'DatasetKlass').then(\n        result => {\n          let curr = Object.assign({}, { ...element.properties_template });\n          curr = Object.assign(\n            {},\n            { properties_release: curr },\n            { uuid: 'current' }\n          );\n          const revisions = [].concat(curr, result.revisions);\n          this.setState({ revisions });\n        }\n      );\n    }\n  }\n\n  delRevision(params) {\n    const { id, data, uuid } = params;\n    GenericDSsFetcher.deleteKlassRevision({\n      id: id,\n      klass_id: data?.id,\n      klass: 'DatasetKlass',\n    }).then(response => {\n      if (response.error) {\n        notification({\n          title: 'Delete Revision',\n          lvl: 'error',\n          msg: response.error,\n        });\n      } else {\n        this.fetchRevisions(data);\n        notification({\n          title: `Revision [${uuid}] deleted successfully`,\n          lvl: 'info',\n          msg: 'Deleted successfully',\n        });\n      }\n    });\n  }\n\n  handleShowRepo() {\n    LoadingActions.start();\n    GenericDSsFetcher.fetchRepo().then(result => {\n      if (result.error) {\n        notification({\n          title: 'Cannot connect to Chemotion Repository',\n          lvl: 'error',\n          msg: result.error,\n        });\n        LoadingActions.stop();\n      } else {\n        this.setState(\n          { repoData: result, show: this.getShowState('modal', 'NewRepo') },\n          () => LoadingActions.stop()\n        );\n      }\n\n    });\n  }\n\n  handleCreateRepo(element) {\n    GenericDSsFetcher.createRepo({ identifier: element['identifier'] }).then(\n      result => {\n        if (result?.status === 'success') {\n          this.setState({ elements: result?.klass || this.state.elements });\n        }\n        notification({\n          title: 'Sync from LabIMotion Hub',\n          lvl: result?.status || 'error',\n          msg: result?.message || 'Unknown error',\n        });\n      }\n    );\n    this.closeModal();\n  }\n\n  async handleSubmit(_element, _release = 'draft') {\n    const [element, release] = [_element, _release];\n    element.release = release;\n    LoadingActions.start();\n    const result = await submit(GenericDSsFetcher, { update: Constants.GENERIC_TYPES.DATASET, element, release });\n    if (result.isSuccess) {\n      notification(result);\n      this.fetchElements();\n      this.setState({ element: result.response }, () => LoadingActions.stop());\n    } else {\n      notification(result);\n    }\n    LoadingActions.stop();\n  }\n\n  renderGrid() {\n    const { elements } = this.state;\n    const els = orderBy(elements, ['is_active', 'label'], ['desc', 'asc']);\n    return (\n      <Designer\n        fnCopy={() => {}}\n        fnCreate={() => {}}\n        fnSubmit={this.handleSubmit}\n        fnActive={this.handleActivateKlass}\n        fnDerive={() => {}}\n        fnUpdate={() => {}}\n        preview={{\n          fnDelRevisions: this.delRevision,\n          fnRevisions: this.fetchRevisions,\n          revisions: this.state.revisions,\n        }}\n        genericType=\"Dataset\"\n        gridData={els}\n      />\n    );\n  }\n\n  render() {\n    const { user } = this.state;\n    if (!user.generic_admin?.datasets) {\n      return <Unauthorized userName={user.name} text={FN_ID} />;\n    }\n\n    return (\n      <div style={{ width: '90vw', margin: 'auto' }}>\n        <GenericMenu userName={user.name} text={FN_ID} />\n        <div>\n          <FunctionLocation name={FN_ID} />\n          <SyncBtn\n            data={this.state.repoData}\n            fnCreate={this.handleCreateRepo}\n            fnModalClose={this.closeModal}\n            fnModalOpen={this.handleShowRepo}\n            genericType={Constants.GENERIC_TYPES.DATASET}\n            klasses={this.state.klasses}\n            showModal={this.state.show.modal === 'NewRepo'}\n          />\n          &nbsp;\n          {this.renderGrid()}\n        </div>\n        <Notifications />\n        <LoadingModal />\n      </div>\n    );\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById(`${FN_ID}Admin`);\n  if (domElement)\n    ReactDOM.render(\n      <DndProvider backend={HTML5Backend}>\n        <GenericDatasetsAdmin />\n      </DndProvider>,\n      domElement\n    );\n});\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { orderBy } from 'lodash';\nimport { Constants, Designer } from 'chem-generic-ui';\nimport SyncBtn from 'src/apps/generic/SyncButton';\nimport LoadingModal from 'src/components/common/LoadingModal';\nimport Notifications from 'src/components/Notifications';\nimport GenericElsFetcher from 'src/fetchers/GenericElsFetcher';\nimport GenericKlassFetcher from 'src/fetchers/GenericKlassFetcher'; \nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport { FunctionLocation, GenericMenu, Unauthorized } from 'src/apps/generic/GenericUtils';\nimport { notification, submit } from 'src/apps/generic/Utils';\n\nconst FN_ID = 'GenericElements';\n\nconst validateKlass = klass => /\\b[a-z]{3,5}\\b/g.test(klass);\nconst validateInput = element => {\n  if (element.name === '') {\n    notification({\n      title: `Element [${element.name}]`,\n      lvl: 'error',\n      msg: 'Please input Element.',\n    });\n    return false;\n  }\n  if (element.klass_prefix === '') {\n    notification({\n      title: `Element [${element.name}]`,\n      lvl: 'error',\n      msg: 'Please input Prefix.',\n    });\n    return false;\n  }\n  if (element.label === '') {\n    notification({\n      title: `Element [${element.name}]`,\n      lvl: 'error',\n      msg: 'Please input Element Label.',\n    });\n    return false;\n  }\n  if (element.icon_name === '') {\n    notification({\n      title: `Element [${element.name}]`,\n      lvl: 'error',\n      msg: 'Please input Icon.',\n    });\n    return false;\n  }\n  return true;\n};\n\nexport default class GenericElementsAdmin extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      elements: [],\n      element: {},\n      show: { tab: '', modal: '' },\n      revisions: [],\n      repoData: [],\n      user: {},\n    };\n\n    this.fetchElements = this.fetchElements.bind(this);\n    this.handleShowState = this.handleShowState.bind(this);\n    this.closeModal = this.closeModal.bind(this);\n    this.handleCreateKlass = this.handleCreateKlass.bind(this);\n    this.handleUpdateKlass = this.handleUpdateKlass.bind(this);\n    this.handleActivateKlass = this.handleActivateKlass.bind(this);\n    this.handleDeleteKlass = this.handleDeleteKlass.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.delRevision = this.delRevision.bind(this);\n    this.fetchRevisions = this.fetchRevisions.bind(this);\n    this.handleCreateRepo = this.handleCreateRepo.bind(this);\n    this.handleShowRepo = this.handleShowRepo.bind(this);\n    this.handleUploadKlass = this.handleUploadKlass.bind(this);\n    this.handleDownloadKlass = this.handleDownloadKlass.bind(this);\n  }\n\n  componentDidMount() {\n    this.fetchElements();\n    UsersFetcher.fetchCurrentUser()\n      .then(result => {\n        if (!result.error) {\n          this.setState({ user: result.user });\n        }\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  handleShowRepo() {\n    LoadingActions.start();\n    GenericElsFetcher.fetchRepo().then(result => {\n      if (result.error) {\n        notification({\n          title: 'Cannot connect to Chemotion Repository',\n          lvl: 'error',\n          msg: result.error,\n        });\n        LoadingActions.stop();\n      } else {\n        this.setState(\n          { repoData: result, show: this.getShowState('modal', 'NewRepo') },\n          () => LoadingActions.stop()\n        );\n      }\n    });\n  }\n\n  handleCreateRepo(element) {\n    GenericElsFetcher.createRepo({ identifier: element['identifier'] }).then(\n      result => {\n        if (result?.status === 'success') {\n          this.setState({ elements: result?.klass || this.state.elements });\n        }\n        notification({\n          title: 'Sync from LabIMotion Hub',\n          lvl: result?.status || 'error',\n          msg: result?.message || 'Unknown error',\n        });\n      }\n    );\n    this.closeModal();\n  }\n\n  getShowState(att, val) {\n    return { ...this.state.show, [att]: val };\n  }\n\n  handleShowState(att, val, cb = () => {}) {\n    this.setState({ show: this.getShowState(att, val) }, cb);\n  }\n\n  closeModal(cb = () => {}) {\n    this.handleShowState('modal', '', cb);\n  }\n\n  handleCreateKlass(_response) {\n    const { element, notify } = _response;\n    if (!notify.isSuccess) {\n      notification(notify);\n      return;\n    }\n    element.is_generic = true;\n    if (!validateInput(element)) return;\n    if (!validateKlass(element.name)) {\n      notification({\n        title: `Element [${element.name}]`,\n        lvl: 'error',\n        msg: 'This Element is invalid, please try a different one.',\n      });\n      return;\n    }\n    const { elements } = this.state;\n    const existKlass = elements.filter(el => el.name === element.name);\n    if (existKlass.length > 0) {\n      notification({\n        title: `Element [${element.name}]`,\n        lvl: 'error',\n        msg: 'This Element is already taken. Please choose another one.',\n      });\n      return;\n    }\n    LoadingActions.start();\n    GenericElsFetcher.createElementKlass(element)\n      .then(result => {\n        if (result.error) {\n          notification({\n            title: `Element [${element.name}]`,\n            lvl: 'error',\n            msg: result.error,\n          });\n        } else {\n          notification({\n            title: `Element [${element.name}]`,\n            lvl: 'info',\n            msg: 'Created successfully',\n          });\n          this.fetchElements();\n        }\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n\n  handleUpdateKlass(_response) {\n    const { element, notify } = _response;\n    if (!notify.isSuccess) {\n      notification(notify);\n      return;\n    }\n    const inputs = element;\n    if (!validateInput(element)) return;\n    LoadingActions.start();\n    GenericElsFetcher.updateElementKlass(inputs)\n      .then(result => {\n        if (result.error) {\n          notification({\n            title: `Element [${inputs.name}]`,\n            lvl: 'error',\n            msg: result.error,\n          });\n        } else {\n          notification({\n            title: `Element [${inputs.name}]`,\n            lvl: 'info',\n            msg: 'Updated successfully',\n          });\n          this.fetchElements();\n        }\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n\n\n  handleActivateKlass(e) {\n    const act = e.is_active ? 'De-activate' : 'Activate';\n    LoadingActions.start();\n    GenericElsFetcher.deActivateKlass({\n      id: e.id,\n      is_active: !e.is_active,\n      klass: 'ElementKlass',\n    })\n      .then(result => {\n        if (result.error) {\n          notification({\n            title: `${act} Element failed`,\n            lvl: 'error',\n            msg: result.error,\n          });\n        } else {\n          notification({\n            title: `${act} Element [${result.name}] successfully`,\n            lvl: 'info',\n            msg: `Element is ${act.toLowerCase()} now`,\n          });\n          this.fetchElements();\n        }\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n  \n  handleDeleteKlass(element) {\n    if (element.is_active) {\n      notification({\n        title: 'Delete failed',\n        lvl: 'error',\n        msg: `You cannot delete an active element [${element.name}]. Please make it [inactive] first.`,\n      });\n      return;\n    }\n    const confirmed = confirm('Are you sure you want to delete this record?');\n    if (confirmed) {\n      GenericElsFetcher.deleteKlass({\n        id: element.id,\n        klass: 'ElementKlass',\n      })\n        .then(result => {\n          if (result.error) {\n            notification({\n              title: `Element [${element.name}]`,\n              lvl: 'error',\n              msg: result.error,\n            });\n          } else {\n            notification({\n              title: `Element [${element.name}]`,\n              lvl: 'info',\n              msg: 'Deleted successfully',\n            });\n            this.fetchElements();\n          }\n        })\n        .finally(() => {\n          LoadingActions.stop();\n        });\n    }\n  }\n  \n  handleDownloadKlass(e) {\n    LoadingActions.start();\n    GenericKlassFetcher.downloadKlass(e.id, 'ElementKlass')\n      .then(result => {\n        LoadingActions.stop();\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n\n  handleUploadKlass(_response) {\n    const { elements } = this.state;\n    const { element, notify } = _response;\n    if (!notify.isSuccess) {\n      notification(notify);\n      return;\n    }\n    if (!validateInput(element)) return;\n    if (!validateKlass(element.name)) {\n      notification({\n        title: `Element [${element.name}]`,\n        lvl: 'error',\n        msg: 'This Element is invalid, please try a different one.',\n      });\n      return;\n    }\n    const existKlass = elements.filter(el => el.name === element.name && el.identifier !== element.identifier);\n    if (existKlass.length > 0) {\n      notification({\n        title: `Element [${element.name}]`,\n        lvl: 'error',\n        msg: 'This Element is already taken. The Element name must be unique. Please choose another one.',\n      });\n      return;\n    }\n    LoadingActions.start();\n    GenericElsFetcher.uploadKlass(element)\n      .then(result => {\n        if (result?.status === 'success') {\n          this.fetchElements();          \n        }\n        notification({\n          title: 'Upload Element',\n          lvl: result?.status || 'error',\n          msg: result?.message || 'Unknown error',\n        });\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n\n  fetchRevisions(_element) {\n    const element = _element;\n    if (element?.id) {\n      GenericElsFetcher.fetchKlassRevisions(element.id, 'ElementKlass').then(\n        result => {\n          let curr = Object.assign({}, { ...element.properties_template });\n          curr = Object.assign(\n            {},\n            { properties_release: curr },\n            { uuid: 'current' }\n          );\n          const revisions = [].concat(curr, result.revisions);\n          this.setState({ revisions });\n        }\n      );\n    }\n  }\n\n  delRevision(params) {\n    const { id, data, uuid } = params;\n    LoadingActions.start();\n    GenericElsFetcher.deleteKlassRevision({\n      id: id,\n      klass_id: data?.id,\n      klass: 'ElementKlass',\n    })\n      .then(response => {\n        if (response.error) {\n          notification({\n            title: 'Delete Revision',\n            lvl: 'error',\n            msg: response.error,\n          });\n        } else {\n          this.fetchRevisions(data);\n          notification({\n            title: `Revision [${uuid}] deleted successfully`,\n            lvl: 'info',\n            msg: 'Deleted successfully',\n          });\n        }\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n\n  fetchElements() {\n    GenericElsFetcher.fetchElementKlasses().then(result => {\n      if (\n        typeof result !== 'undefined' &&\n        typeof result.klass !== 'undefined' &&\n        result?.klass?.length > 0\n      )\n        this.setState(\n          { elements: result.klass.filter(k => k.is_generic) },\n          () => LoadingActions.stop()\n        );\n    });\n  }\n\n  async handleSubmit(_element, _release = 'draft') {\n    const [element, release] = [_element, _release];\n    element.release = release;\n    LoadingActions.start();\n    const result = await submit(GenericElsFetcher, { update: Constants.GENERIC_TYPES.ELEMENT, element, release });\n    if (result.isSuccess) {\n      notification(result);\n      this.fetchElements();\n      this.setState({ element: result.response }, () => LoadingActions.stop());\n    } else {\n      notification(result);\n    }\n    LoadingActions.stop();\n  }\n\n  renderGrid() {\n    const { elements } = this.state;\n    const els = orderBy(\n      elements,\n      ['is_active', 'name', 'klass_prefix'],\n      ['desc', 'asc', 'asc']\n    );\n    return (\n      <Designer\n        fnCopy={this.handleCreateKlass}\n        fnCreate={this.handleCreateKlass}\n        fnSubmit={this.handleSubmit}\n        fnActive={this.handleActivateKlass}\n        fnDelete={this.handleDeleteKlass}\n        fnUpdate={this.handleUpdateKlass}\n        fnUpload={this.handleUploadKlass}\n        fnDownload={this.handleDownloadKlass}\n        preview={{\n          fnDelRevisions: this.delRevision,\n          fnRevisions: this.fetchRevisions,\n          revisions: this.state.revisions,\n        }}\n        genericType=\"Element\"\n        gridData={els}\n      />\n    );\n  }\n\n  render() {\n    const { user } = this.state;\n    if (!user.generic_admin?.elements) {\n      return <Unauthorized userName={user.name} text={FN_ID} />;\n    }\n\n    return (\n      <div style={{ width: '90vw', margin: 'auto' }}>\n        <GenericMenu userName={user.name} text={FN_ID} />\n        <div>\n          <FunctionLocation name={FN_ID} />\n          <SyncBtn\n            data={this.state.repoData}\n            fnCreate={this.handleCreateRepo}\n            fnModalClose={this.closeModal}\n            fnModalOpen={this.handleShowRepo}\n            genericType={Constants.GENERIC_TYPES.ELEMENT}\n            klasses={this.state.klasses}\n            showModal={this.state.show.modal === 'NewRepo'}\n          />\n          &nbsp;\n          {this.renderGrid()}\n        </div>\n        <Notifications />\n        <LoadingModal />\n      </div>\n    );\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById(`${FN_ID}Admin`);\n  if (domElement)\n    ReactDOM.render(\n      <DndProvider backend={HTML5Backend}>\n        <GenericElementsAdmin />\n      </DndProvider>,\n      domElement\n    );\n});\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { orderBy } from 'lodash';\nimport { Constants, Designer } from 'chem-generic-ui';\nimport SyncBtn from 'src/apps/generic/SyncButton';\nimport LoadingModal from 'src/components/common/LoadingModal';\nimport Notifications from 'src/components/Notifications';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport GenericSgsFetcher from 'src/fetchers/GenericSgsFetcher';\nimport GenericElsFetcher from 'src/fetchers/GenericElsFetcher';\nimport GenericKlassFetcher from 'src/fetchers/GenericKlassFetcher';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport { FunctionLocation, GenericMenu, Unauthorized } from 'src/apps/generic/GenericUtils';\nimport { notification, submit } from 'src/apps/generic/Utils';\n\nconst FN_ID = 'GenericSegments';\n\nconst validateInput = element => {\n  if (element.klass_element === '') {\n    notification({\n      title: 'Create Segment Error',\n      lvl: 'error',\n      msg: 'Please select Element.',\n    });\n    return false;\n  }\n  if (element.label === '') {\n    notification({\n      title: 'Create Segment Error',\n      lvl: 'error',\n      msg: 'Please input Segment Label.',\n    });\n    return false;\n  }\n  return true;\n};\n\nexport default class GenericSegmentsAdmin extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      elements: [],\n      klasses: [],\n      show: { tab: '', modal: '' },\n      propTabKey: 1,\n      revisions: [],\n      repoData: [],\n      user: {},\n    };\n\n    this.fetchElements = this.fetchElements.bind(this);\n    this.handleShowState = this.handleShowState.bind(this);\n    this.closeModal = this.closeModal.bind(this);\n    this.handleCreateKlass = this.handleCreateKlass.bind(this);\n    this.handleUpdateKlass = this.handleUpdateKlass.bind(this);\n    this.handleActivateKlass = this.handleActivateKlass.bind(this);\n    this.handleDeleteKlass = this.handleDeleteKlass.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.delRevision = this.delRevision.bind(this);\n    this.fetchRevisions = this.fetchRevisions.bind(this);\n    this.handleCreateRepo = this.handleCreateRepo.bind(this);\n    this.handleShowRepo = this.handleShowRepo.bind(this);\n    this.fetchElementKlasses = this.fetchElementKlasses.bind(this);\n    this.handleUploadKlass = this.handleUploadKlass.bind(this);\n    this.handleDownloadKlass = this.handleDownloadKlass.bind(this);\n  }\n\n  componentDidMount() {\n    const fetchData = async () => {\n      LoadingActions.start();\n      try {\n        const [segmentResult, klassResult, userResult] = await Promise.all([\n          GenericSgsFetcher.listSegmentKlass(),\n          GenericElsFetcher.fetchElementKlasses(),\n          UsersFetcher.fetchCurrentUser()\n        ]);\n\n        const klasses = klassResult.error ? [] : klassResult?.klass?.sort((a, b) => a.place - b.place) || [];\n        this.setState({\n          elements: segmentResult.error ? [] : segmentResult.klass,\n          klasses,\n          user: userResult.error ? {} : userResult.user\n        });\n      } catch (error) {\n        console.log(error);\n      } finally {\n        LoadingActions.stop();\n      }\n    };\n\n    fetchData();\n  }\n\n  getShowState(att, val) {\n    return { ...this.state.show, [att]: val };\n  }\n\n  fetchRevisions(_element) {\n    const element = _element;\n    if (element?.id) {\n      LoadingActions.start();\n      GenericSgsFetcher.fetchKlassRevisions(element.id, 'SegmentKlass')\n        .then(result => {\n          let curr = Object.assign({}, { ...element.properties_template });\n          curr = Object.assign(\n            {},\n            { properties_release: curr },\n            { uuid: 'current' }\n          );\n          const revisions = [].concat(curr, result.revisions);\n          this.setState({ revisions });\n        })\n        .finally(() => {\n          LoadingActions.stop();\n        });\n    }\n  }\n\n  delRevision(params) {\n    const { id, data, uuid } = params;\n    LoadingActions.start();\n    GenericSgsFetcher.deleteKlassRevision({\n      id: id,\n      klass_id: data?.id,\n      klass: 'SegmentKlass',\n    })\n      .then(response => {\n        if (response.error) {\n          notification({\n            title: 'Delete Revision',\n            lvl: 'error',\n            msg: response.error,\n          });\n        } else {\n          this.fetchRevisions(data);\n          notification({\n            title: `Revision [${uuid}] deleted successfully`,\n            lvl: 'info',\n            msg: 'Deleted successfully',\n          });\n        }\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n\n  handleShowState(att, val, cb = () => {}) {\n    this.setState({ show: this.getShowState(att, val) }, cb);\n  }\n  closeModal(cb = () => {}) {\n    this.handleShowState('modal', '', cb);\n  }\n\n  handleShowRepo() {\n    LoadingActions.start();\n    GenericSgsFetcher.fetchRepo().then(result => {\n      if (result.error) {\n        notification({\n          title: 'Cannot connect to Chemotion Repository',\n          lvl: 'error',\n          msg: result.error,\n        });\n        LoadingActions.stop();\n      } else {\n        this.setState(\n          { repoData: result, show: this.getShowState('modal', 'NewRepo') },\n          () => LoadingActions.stop()\n        );\n      }\n    });\n  }\n\n  handleCreateRepo(element) {\n    GenericSgsFetcher.createRepo({ identifier: element['identifier'] }).then(\n      result => {\n        if (result?.status === 'success') {\n          this.setState({ elements: result?.klass || this.state.elements });\n        }\n        notification({\n          title: 'Sync from LabIMotion Hub',\n          lvl: result?.status || 'error',\n          msg: result?.message || 'Unknown error',\n        });\n      }\n    );\n    this.closeModal(this.fetchElements);\n  }\n\n  handleCreateKlass(_response) {\n    const { element, notify } = _response;\n    if (!notify.isSuccess) {\n      notification(notify);\n      return;\n    }\n    if (!validateInput(element)) return;\n    GenericSgsFetcher.createKlass(element)\n      .then(result => {\n        if (result.error) {\n          notification({\n            title: 'Create Segment fail',\n            lvl: 'error',\n            msg: result.error,\n          });\n        } else {\n          notification({\n            title: 'Create Segment successfully',\n            lvl: 'info',\n            msg: 'Created successfully',\n          });\n          this.fetchElements();\n        }\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n\n  handleUpdateKlass(_response) {\n    const { element, notify } = _response;\n    if (!notify.isSuccess) {\n      notification(notify);\n      return;\n    }\n    const inputs = element;\n    if (!validateInput(inputs)) return;\n    GenericSgsFetcher.updateSegmentKlass(inputs)\n      .then(result => {\n        if (result.error) {\n          notification({\n            title: 'Update Segment fail',\n            lvl: 'error',\n            msg: result.error,\n          });\n        } else {\n          notification({\n            title: 'Update Segment successfully',\n            lvl: 'info',\n            msg: 'Updated successfully',\n          });\n          this.fetchElements();\n        }\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n\n  handleActivateKlass(e) {\n    const act = e.is_active ? 'De-activate' : 'Activate';\n    GenericSgsFetcher.deActivateKlass({\n      id: e.id,\n      is_active: !e.is_active,\n      klass: 'SegmentKlass',\n    })\n      .then(result => {\n        if (result.error) {\n          notification({\n            title: `${act} Segment fail`,\n            lvl: 'error',\n            msg: result.error,\n          });\n        } else {\n          notification({\n            title: `${act} Segment successfully`,\n            lvl: 'info',\n            msg: `Segment is ${act.toLowerCase()} now`,\n          });\n          this.fetchElements();\n        }\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n\n  handleDeleteKlass(element) {\n    if (element.is_active) {\n      notification({\n        title: 'Delete Segment fail',\n        lvl: 'error',\n        msg: `You cannot delete an active segment [${element.label}]. Please make it [inactive] first.`,\n      });\n      return;\n    }\n    const confirmed = confirm('Are you sure you want to delete this record?');\n    if (confirmed) {\n      GenericSgsFetcher.deleteKlass({\n        id: element.id,\n        klass: 'SegmentKlass',\n      })\n        .then(result => {\n          if (result.error) {\n            notification({\n              title: 'Delete Segment fail',\n              lvl: 'error',\n              msg: result.error,\n            });\n          } else {\n            notification({\n              title: `Segment [${element.label}]`,\n              lvl: 'info',\n              msg: 'Deleted successfully',\n            });\n            this.fetchElements();\n            this.handleShowState('tab', '');\n          }\n        })\n        .finally(() => {\n          LoadingActions.stop();\n        });\n    }\n  }\n\n  handleDownloadKlass(e) {\n    LoadingActions.start();\n    GenericKlassFetcher.downloadKlass(e.id,'SegmentKlass')\n      .then(result => {\n        LoadingActions.stop();\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n\n  handleUploadKlass(_response) {\n    const { elements } = this.state;\n    const { element, notify } = _response;\n    if (!notify.isSuccess) {\n      notification(notify);\n      return;\n    }\n    if (!validateInput(element)) return;\n    LoadingActions.start();\n    GenericSgsFetcher.uploadKlass(element)\n      .then(result => {\n        if (result?.status === 'success') {\n          this.fetchElements();\n        }\n        notification({\n          title: 'Upload Segment',\n          lvl: result?.status || 'error',\n          msg: result?.message || 'Unknown error',\n        });\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      })\n      .finally(() => {\n        LoadingActions.stop();\n      });\n  }\n\n  fetchElements() {\n    GenericSgsFetcher.listSegmentKlass().then(result => {\n      this.setState({ elements: result.klass }, () => LoadingActions.stop());\n    });\n  }\n\n  fetchElementKlasses() {\n    GenericElsFetcher.fetchElementKlasses().then(result => {\n      const klasses = result?.klass?.sort((a, b) => a.place - b.place) || [];\n      this.setState({ klasses });\n    });\n  }\n\n  async handleSubmit(_element, _release = 'draft') {\n    const [element, release] = [_element, _release];\n    element.release = release;\n    LoadingActions.start();\n    const result = await submit(GenericSgsFetcher, { update: Constants.GENERIC_TYPES.SEGMENT, element, release });\n    if (result.isSuccess) {\n      notification(result);\n      this.fetchElements();\n      this.setState({ element: result.response }, () => LoadingActions.stop());\n    } else {\n      notification(result);\n    }\n    LoadingActions.stop();\n  }\n\n  renderGrid() {\n    const { elements } = this.state;\n    const els = orderBy(elements, ['is_active', 'label'], ['desc', 'asc']);\n\n    return (\n      <Designer\n        fnCopy={this.handleCreateKlass}\n        fnCreate={this.handleCreateKlass}\n        fnSubmit={this.handleSubmit}\n        fnActive={this.handleActivateKlass}\n        fnDelete={this.handleDeleteKlass}\n        fnUpdate={this.handleUpdateKlass}\n        fnUpload={this.handleUploadKlass}\n        fnDownload={this.handleDownloadKlass}\n        genericType=\"Segment\"\n        gridData={els}\n        klasses={this.state.klasses}\n        preview={{\n          fnDelRevisions: this.delRevision,\n          fnRevisions: this.fetchRevisions,\n          revisions: this.state.revisions,\n        }}\n      />\n    );\n  }\n\n  render() {\n    const { user } = this.state;\n    if (!user.generic_admin?.segments) {\n      return <Unauthorized userName={user.name} text={FN_ID} />;\n    }\n    return (\n      <div style={{ width: '90vw', margin: 'auto' }}>\n        <GenericMenu userName={user.name} text={FN_ID} />\n        <div>\n          <FunctionLocation name={FN_ID} />\n          <SyncBtn\n            data={this.state.repoData}\n            fnCreate={this.handleCreateRepo}\n            fnModalClose={this.closeModal}\n            fnModalOpen={this.handleShowRepo}\n            genericType={Constants.GENERIC_TYPES.SEGMENT}\n            klasses={this.state.klasses}\n            showModal={this.state.show.modal === 'NewRepo'}\n          />\n          &nbsp;\n          {this.renderGrid()}\n        </div>\n        <Notifications />\n        <LoadingModal />\n      </div>\n    );\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById(`${FN_ID}Admin`);\n  if (domElement)\n    ReactDOM.render(\n      <DndProvider backend={HTML5Backend}>\n        <GenericSegmentsAdmin />\n      </DndProvider>,\n      domElement\n    );\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Navbar } from 'react-bootstrap';\n\nconst contentComponents = {\n  GenericElements: 'Generic Elements Designer',\n  GenericSegments: 'Generic Segments Designer',\n  GenericDatasets: 'Generic Datasets Designer',\n};\n\nexport function FunctionLocation({ name }) {\n  const text = contentComponents[name];\n  return (\n    <span style={{ float: 'right' }}>\n      <span>You&apos;re in the </span>\n      <span style={{ fontWeight: 'bold' }}>{text}</span>\n    </span>\n  );\n}\n\nFunctionLocation.propTypes = { name: PropTypes.string.isRequired };\n\nconst createMenu = (text, type) => {\n  let menu = (\n    <a href={`/${type.split(/(?=[A-Z])/).join('_').toLowerCase()}_admin`}>\n      {contentComponents[type]}\n    </a>\n  );\n  menu = text === type ? <b>{menu}</b> : menu;\n  return <Navbar.Text key={type}>{menu}</Navbar.Text>;\n};\n\nexport function GenericMenu({ userName, text }) {\n  return (\n    <Navbar staticTop>\n      <Navbar.Header>\n        <Navbar.Brand>\n          <a href=\"/\">Back to MyDB</a>\n        </Navbar.Brand>\n        <Navbar.Toggle />\n      </Navbar.Header>\n      <Navbar.Collapse>\n        {['GenericElements', 'GenericSegments', 'GenericDatasets'].map((e) => createMenu(text, e))}\n        <Navbar.Text pullRight>{`Login as: ${userName}`}</Navbar.Text>\n      </Navbar.Collapse>\n    </Navbar>\n  );\n}\n\nGenericMenu.propTypes = { userName: PropTypes.string, text: PropTypes.string.isRequired };\nGenericMenu.defaultProps = { userName: 'unknown' };\n\nexport function Unauthorized({ userName, text }) {\n  return (\n    <div style={{ width: '90vw', margin: 'auto' }}>\n      <GenericMenu userName={userName} text={text} />\n      <hr />\n      <div style={{ marginTop: '60px', textAlign: 'center' }}>\n        <h3>Unauthorized!</h3>\n      </div>\n    </div>\n  );\n}\n\nUnauthorized.propTypes = { userName: PropTypes.string, text: PropTypes.string.isRequired };\nUnauthorized.defaultProps = { userName: 'unknown' };\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport { RepoNewModal, Constants } from 'chem-generic-ui';\n\nfunction SyncBtn(props) {\n  const {\n    data,\n    fnCreate,\n    fnModalClose,\n    fnModalOpen,\n    genericType,\n    klasses,\n    showModal,\n  } = props;\n  return (\n    <>\n      <OverlayTrigger\n        placement=\"top\"\n        delayShow={500}\n        overlay={(\n          <Tooltip id=\"_tooltip_fetch_from_hub\">\n            Fetch public templates from Hub\n          </Tooltip>\n        )}\n      >\n        <Button\n          style={{ float: 'left' }}\n          bsStyle=\"info\"\n          bsSize=\"sm\"\n          onClick={fnModalOpen}\n        >\n          <i className=\"fa fa-refresh\" aria-hidden=\"true\" />\n          {' '}\n          Fetch from LabIMotion Hub\n        </Button>\n      </OverlayTrigger>\n      <RepoNewModal\n        content={genericType}\n        fnClose={fnModalClose}\n        fnCreate={fnCreate}\n        gridData={data}\n        klasses={klasses}\n        showModal={showModal}\n      />\n    </>\n  );\n}\n\nSyncBtn.propTypes = {\n  data: PropTypes.array,\n  fnCreate: PropTypes.func.isRequired,\n  fnModalClose: PropTypes.func.isRequired,\n  fnModalOpen: PropTypes.func.isRequired,\n  genericType: PropTypes.oneOf([\n    Constants.GENERIC_TYPES.ELEMENT,\n    Constants.GENERIC_TYPES.SEGMENT,\n    Constants.GENERIC_TYPES.DATASET,\n  ]).isRequired,\n  klasses: PropTypes.array,\n  showModal: PropTypes.bool.isRequired,\n};\n\nSyncBtn.defaultProps = { data: [], klasses: [] };\n\nexport default SyncBtn;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport uuid from 'uuid';\nimport { filter, cloneDeep } from 'lodash';\nimport { Constants } from 'chem-generic-ui';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\n\nexport async function loadEls() {\n  const response = await fetch('/klasses.json', {\n    cache: 'no-store',\n    headers: {\n      'Cache-Control': 'no-cache'\n    }\n  });\n  if (!response.ok) {\n    console.log('Network response was not ok: ', response);\n    return [];\n  }\n  const json = await response.json();\n  return json;\n}\n\nexport const ALL_TYPES = [\n  Constants.GENERIC_TYPES.ELEMENT,\n  Constants.GENERIC_TYPES.SEGMENT,\n  Constants.GENERIC_TYPES.DATASET,\n];\n\nexport const notification = props =>\n  NotificationActions.add({\n    title: props.title,\n    message: props.msg,\n    level: props.lvl,\n    position: 'tc',\n    dismissible: 'button',\n    autoDismiss: props.autoDismiss || 5,\n    uid: props.uid || uuid.v4(),\n  });\n\nexport const GenericDSMisType = () => {\n  const currentUser =\n    (UserStore.getState() && UserStore.getState().currentUser) || {};\n  if (MatrixCheck(currentUser.matrix, `generic${Constants.GENERIC_TYPES.DATASET}`)) {\n    return (\n      <OverlayTrigger\n        delayShow={500}\n        placement=\"top\"\n        overlay={\n          <Tooltip id=\"tooltip\">\n            Type (Chemical Methods Ontology) has been changed. <br />\n            Please review this Dataset content.\n          </Tooltip>\n        }\n      >\n        <span style={{ color: 'red' }}>\n          <i className=\"fa fa-exclamation-triangle\" />\n          &nbsp;\n        </span>\n      </OverlayTrigger>\n    );\n  }\n  return null;\n};\n\nexport const renderFlowModal = (generic, isToggle) => {\n  let shortLabel = generic.short_label;\n  if (!shortLabel) {\n    const segmentKlasses =\n      (UserStore.getState() && UserStore.getState().segmentKlasses) || [];\n    shortLabel = segmentKlasses.filter(s => s.id === generic.segment_klass_id);\n    shortLabel = shortLabel.length > 0 ? shortLabel[0].label : '';\n  }\n  const params = {\n    properties_release: cloneDeep(generic.properties_release) || {},\n    properties: cloneDeep(generic.properties) || {},\n    shortLabel,\n    toggle: isToggle,\n  };\n  UIActions.rerenderGenericWorkflow(params);\n};\n\nexport const segmentsByKlass = name => {\n  const allSegments = UserStore.getState().segmentKlasses || [];\n  return filter(\n    allSegments,\n    se => (se.element_klass && se.element_klass.name) === name\n  );\n};\n\nexport const elementNames = async (all = true, generics = null) => {\n  const elnElements = all\n    ? ['sample', 'reaction', 'screen', 'wellplate', 'research_plan', 'cell_line']\n    : [];\n  try {\n    if (generics?.length > 0) return elnElements.concat(generics?.map((el) => el.name));\n    const result = await loadEls();\n    if (result?.length > 0) return elnElements.concat(result);\n    return elnElements;\n  } catch (error) {\n    console.error('Can not get Element Names:', error);\n    return elnElements;\n  }\n};\n\nexport const submit = async (_action, _params) => {\n  const [action, params] = [_action, _params];\n  let result = {\n    title: 'Update template fail',\n    lvl: 'error',\n    msg: `Update ${params.update} template fail`,\n    isSuccess: false,\n  };\n  try {\n    const response = await action[`update${params.update}Template`](params.element);\n    if (!response.error) {\n      result = {\n        title: `Update ${params.update} [${params.element.label}] template`,\n        lvl: 'info',\n        msg: `Saved successfully (${params.release})`,\n        isSuccess: true,\n        response,\n      };\n    } else {\n      result = { ...result, msg: response.error };\n    }\n  } catch (errorMessage) {\n    result = { ...result, msg: errorMessage };\n  }\n  return result;\n};\n","import PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport PublicFetcher from 'src/repo/fetchers/PublicFetcher';\nimport RepoNavListTypes from 'src/repoHome/RepoNavListTypes';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\nimport EmbargoActions from 'src/stores/alt/repo/actions/EmbargoActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nconst routes = {\n  '/': 'root',\n  target: {\n    root: function(e) {\n      Aviator.navigate('/home/welcome')\n    }\n  },\n\n  '/welcome': {\n    target: {\n      show: function(e) {\n        PublicActions.openRepositoryPage(\"welcome\")\n      },\n    },\n    '/': 'show'\n  },\n\n  '/home': {\n    target: {\n      show: function(e) {\n        PublicActions.openRepositoryPage(\"home\")\n      },\n    },\n    '/': 'show'\n  },\n  '/publications': {\n    target: {\n      show: function(e) {\n        LoadingActions.start();\n        PublicActions.setSearchParams({\n          advType: 'Authors', advValue: [], page: 1, searchOptions: []\n        });\n        PublicActions.getReactions.defer();\n        PublicActions.openRepositoryPage(`publications=${RepoNavListTypes.REACTION}`)\n      },\n    },\n    '/': 'show',\n  },\n  '/genericHub': {\n    target: {\n      show: function(e) {\n        PublicActions.openRepositoryPage('genericHub')\n      },\n    },\n    '/': 'show'\n  },\n  '/moleculeArchive': {\n    target: {\n      show: function(e) {\n        LoadingActions.start();\n        PublicActions.setSearchParams({\n          advType: 'Authors', advValue: [], page: 1, searchOptions: []\n        });\n        PublicActions.getMolecules({ listType: RepoNavListTypes.MOLECULE_ARCHIVE }); // .defer();\n        PublicActions.openRepositoryPage(`publications=${RepoNavListTypes.MOLECULE_ARCHIVE}`)\n      },\n    },\n    '/': 'show'\n  },\n  '/review': {\n    target: {\n      show: function(e) {\n        PublicActions.openRepositoryPage(\"review\")\n      },\n    },\n    '/': 'show'\n  },\n  '/about': {\n    target: {\n      show: function(e) {\n        PublicActions.openRepositoryPage(\"about\")\n      },\n    },\n    '/': 'show'\n  },\n  '/contact': {\n    target: {\n      show: function(e) {\n        PublicActions.openRepositoryPage(\"contact\")\n      },\n    },\n    '/': 'show'\n  },\n\n  '/newsroom': {\n    target: {\n      list: function (e) {\n        PublicActions.articles();\n      },\n      show: function (e) {\n        PublicActions.displayArticle(e.params.key)\n      },\n    },\n    '/': 'list',\n    '/:key': 'show'\n  },\n\n  '/newseditor': {\n    target: {\n      edit: function (e) {\n        PublicActions.editArticle(e.params.key)\n      },\n      show: function (e) {\n        PublicActions.editArticle('new')\n      },\n    },\n    '/show': 'show',\n    '/:key': 'edit'\n  },\n\n  '/howtoeditor': {\n    target: {\n      edit: function (e) {\n        PublicActions.editHowTo(e.params.key)\n      },\n      show: function (e) {\n        PublicActions.editHowTo('ein')\n      },\n    },\n    '/show': 'show',\n    '/:key': 'edit'\n  },\n\n  '/directive': {\n    target: {\n      show: function(e) {\n        PublicActions.openRepositoryPage(\"directive\")\n      },\n    },\n    '/': 'show'\n  },\n\n  '/preservation': {\n    target: {\n      show: function(e) {\n        PublicActions.openRepositoryPage(\"preservation\")\n      },\n    },\n    '/': 'show'\n  },\n\n  '/imprint': {\n    target: {\n      show: function(e) {\n        PublicActions.openRepositoryPage(\"imprint\")\n      },\n    },\n    '/': 'show'\n  },\n\n  '/datasets': {\n    target: {\n      show: function(e) {\n        PublicActions.displayDataset(e.params.datasetId)\n      },\n    },\n    '/:datasetId': 'show'\n  },\n\n  '/molecules': {\n    target: {\n      show: function(e) {\n        PublicActions.displayMolecule(e.params.moleculeId)\n      },\n      tag: function (e) {\n        PublicActions.displayMolecule(e.params.moleculeId, e.params.suffix)\n      }\n    },\n    '/:moleculeId/:suffix': 'tag',\n    '/:moleculeId': 'show'\n  },\n\n  '/reactions': {\n    target: {\n      show: function(e) {\n        PublicActions.displayReaction(e.params.reactionId)\n      },\n    },\n    '/:reactionId': 'show'\n  },\n\n  '/collection': {\n    target: {\n      show: function(e) {\n        PublicActions.displayCollection(e.params.collectionId)\n      },\n    },\n    '/:collectionId': 'show'\n  },\n\n  '/pid': {\n    target: {\n      show: function(e) {\n        PublicFetcher.queryPid({id: e.params.id})\n        }\n    },\n    '/:id': 'show'\n  },\n\n  '/inchikey': {\n    target: {\n      show: function(e) {\n        let url = e.uri.replace(\"/inchikey/\", \"\")\n        let query = url.split(\".\")\n\n        if (query.length > 0) {\n          let version = query[1] || \"\"\n          let splitIndex = query[0].indexOf(\"/\")\n          if (splitIndex < 0) splitIndex = query[0].length\n          let params = {\n            inchikey: query[0].substring(0, splitIndex),\n            type:  query[0].substring(splitIndex + 1),\n            version: version\n          }\n\n          PublicFetcher.queryInchikey(params)\n        }\n\n      },\n    },\n    '/*': 'show'\n  },\n\n  '/review_reaction': {\n    target: {\n      show: function(e) {\n        ReviewActions.displayReviewReaction(e.params.reactionId)\n      },\n    },\n    '/:reactionId': 'show'\n  },\n\n  '/review_sample': {\n    target: {\n      show: function(e) {\n        ReviewActions.displayReviewSample(e.params.sampleId)\n      },\n    },\n    '/:sampleId': 'show'\n  },\n\n  '/embargo': {\n    target: {\n      list: function (e) {\n        PublicActions.openRepositoryPage(\"embargo\");\n      },\n      show: function (e) {\n        EmbargoActions.displayReviewEmbargo(e.params.elementType, e.params.elementId)\n      },\n    },\n    '/': 'list',\n    '/:elementType/:elementId': 'show'\n  },\n\n  '/howto': {\n    target: {\n      list: function (e) {\n        PublicActions.howtos();\n      },\n      show: function (e) {\n        PublicActions.displayHowTo(e.params.key)\n      },\n    },\n    '/': 'list',\n    '/:key': 'show'\n  },\n}\n\nexport default function() {\n  Aviator.root = '/home'\n  Aviator.pushStateEnabled = true\n  Aviator.setRoutes(routes)\n}\n","import React from 'react'\nimport { NavDropdown, Navbar, MenuItem } from 'react-bootstrap';\n\nconst Title = <span><img alt=\"chemotion-\" src=\"/images/repo/logo.png\" style={{ width: '20%' }} /> Repository</span>\n\nconst NavHead = () => {\n  const isHome = window.location.href.match(/\\/home/)\n  return(\n    <Navbar.Brand>\n      <NavDropdown title={Title} className=\"navig-brand navig-smaller-font\" id=\"bg-nested-dropdown-brand\">\n        <MenuItem eventKey=\"21\" href=\"/home/welcome/\">\n          Home\n        </MenuItem>\n        <MenuItem eventKey=\"22\" href=\"/home/publications\">\n          Publications\n        </MenuItem>\n        <MenuItem eventKey=\"23\" href=\"/home/about\">\n          About\n        </MenuItem>\n        <MenuItem eventKey=\"24\" href=\"/home/directive\">\n          Directive\n        </MenuItem>\n      </NavDropdown>\n    </Navbar.Brand>\n  )\n}\n\nexport default NavHead;\n","import React from 'react';\nimport {\n  Button,\n  Nav,\n  Navbar,\n  NavItem,\n  OverlayTrigger,\n  Tooltip,\n} from 'react-bootstrap';\nimport Aviator from 'aviator';\nimport UserAuth from 'src/components/navigation/UserAuth';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport NavNewSession from 'src/components/navigation/NavNewSession';\nimport NavHead from 'src/repoHome/NavHead';\nimport DocumentHelper from 'src/utilities/DocumentHelper';\n\nconst aviItem = (currentUser, key, url, text) => {\n  if (!currentUser) return null;\n  return (\n    <NavItem\n      eventKey={key}\n      onClick={() => Aviator.navigate(url)}\n      className=\"white-nav-item\"\n    >\n      {text}\n    </NavItem>\n  );\n};\n\nexport default class Navigation extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentUser: null,\n      modalProps: {\n        show: false,\n        title: '',\n        component: '',\n        action: null,\n        listSharedCollections: false,\n      },\n    };\n    this.onChange = this.onChange.bind(this);\n    this.onUIChange = this.onUIChange.bind(this);\n    // this.toggleCollectionTree = this.toggleCollectionTree.bind(this)\n  }\n\n  componentDidMount() {\n    UIStore.listen(this.onUIChange);\n    UserStore.listen(this.onChange);\n    UserActions.fetchCurrentUser();\n    UserActions.fetchUserLabels();\n    UserActions.fetchOmniauthProviders();\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onUIChange);\n    UserStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    const newId = state.currentUser ? state.currentUser.id : null;\n    const oldId = this.state.currentUser ? this.state.currentUser.id : null;\n    if (newId !== oldId) { this.setState({ currentUser: state.currentUser }); }\n\n\n    if (state.omniauthProviders !== this.state.omniauthProviders) {\n      this.setState({\n        omniauthProviders: state.omniauthProviders\n      });\n    }\n  }\n\n  onUIChange(state) {\n    this.setState({\n      modalProps: state.modalParams,\n    });\n  }\n\n  // toggleCollectionTree() {\n  //   this.props.toggleCollectionTree();\n  // }\n\n  token() { return DocumentHelper.getMetaContent(\"csrf-token\") }\n\n  updateModalProps(modalProps) { this.setState({ modalProps }); }\n\n  navHeader() {\n    return (\n      <Navbar.Header className=\"collec-tree\">\n        <Navbar.Text style={{cursor: \"pointer\"}}>\n          {/* <i  className=\"fa fa-list\" style={{fontStyle: \"normal\"}}\n              onClick={this.toggleCollectionTree} /> */}\n        </Navbar.Text>\n        <Navbar.Text />\n        <NavHead />\n      </Navbar.Header>\n    )\n  }\n\n  render() {\n    const { modalProps, currentUser, omniauthProviders } = this.state;\n\n    let userBar = <span />;\n    if (currentUser) {\n      userBar = <UserAuth />;\n    } else {\n      userBar = (\n        <NavNewSession\n          authenticityToken={this.token()}\n          omniauthProviders={omniauthProviders}\n        />\n      );\n    }\n    // const logo = <img height={50} alt=\"Chemotion-Repository\" src=\"/images/repo/chemotion_full.svg\"/>\n    return (\n      <Navbar fluid className=\"navbar-custom\">\n        <Navbar.Header>\n          <Navbar.Brand>\n            <a\n              role=\"button\"\n              tabIndex={0}\n              onClick={() => Aviator.navigate('/home')}\n            >\n              Chemotion-Repository\n            </a>\n          </Navbar.Brand>\n          <Navbar.Toggle />\n        </Navbar.Header>\n        <Navbar.Collapse>\n          {userBar}\n          <Nav>\n            {currentUser ? (\n              <NavItem eventKey={1} href=\"/mydb\" className=\"white-nav-item\">\n                My DB\n              </NavItem>\n            ) : null}\n            {aviItem(true, 2, '/home/publications', 'Data Publications')}\n            {aviItem(true, 7, '/home/moleculeArchive', 'Molecule Archive')}\n            {aviItem(currentUser, 3, '/home/review', 'Review')}\n            {aviItem(currentUser, 6, '/home/embargo', 'Embargoed Publications')}\n            {aviItem(true, 9, '/home/newsroom', 'News')}\n            <NavItem\n              eventKey={5}\n              target=\"_blank\"\n              href=\"https://www.chemotion.net/docs/repo\"\n              className=\"white-nav-item\"\n            >\n              <b style={{ color: '#1890ff' }}>How-To</b>\n            </NavItem>\n            <NavItem\n              eventKey={8}\n              onClick={() => Aviator.navigate('/home/genericHub')}\n              className=\"repo-generic-hub-btn\"\n            >\n              <OverlayTrigger\n                placement=\"bottom\"\n                overlay={\n                  <Tooltip id=\"_tooltip_labimotion_hub\">\n                    LabIMotion Template Hub\n                  </Tooltip>\n                }\n              >\n                <Button>\n                  <i className=\"fa fa-empire\" aria-hidden=\"true\" /> LabIMotion\n                </Button>\n              </OverlayTrigger>\n            </NavItem>\n          </Nav>\n        </Navbar.Collapse>\n      </Navbar>\n    );\n  }\n}\n","import Aviator from 'aviator';\nimport alt from 'src/stores/alt/alt';\nimport EmbargoActions from 'src/stores/alt/repo/actions/EmbargoActions';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\n\nclass EmbargoStore {\n  constructor() {\n    this.selectEmbargoId;\n    this.bundles = [];\n    this.selectType;\n    this.selectState;\n    this.searchType;\n    this.searchValue;\n    this.review_info == {};\n    this.element = null;\n    // this.elements = [];\n\n    this.bindListeners({\n      handleEmbargoMove: EmbargoActions.moveEmbargo,\n      handleEmbargoAssign: EmbargoActions.assignEmbargo,\n      handleEmbargoRelease: [EmbargoActions.releaseEmbargo, EmbargoActions.deleteEmbargo],\n      handleFetchBundles: EmbargoActions.fetchEmbargoBundle,\n      handleDisplayEmbargoElement: EmbargoActions.displayReviewEmbargo,\n      handleGetEmbargoElements: EmbargoActions.getEmbargoElements,\n      handleGetEmbargoElement: EmbargoActions.getEmbargoElement,\n      handleClose: PublicActions.close,\n    });\n  }\n\n  handleClose({ deleteEl }) {\n    this.setState({ currentElement: null });\n  }\n\n  handleDisplayEmbargoElement(result) {\n    const publication = result?.element?.publication || {};\n    if (result?.element?.review_info?.review_level === 0) {\n      Aviator.navigate('/home/');\n    } else {\n      const elementType = (result.element.sample ? 'sample' : 'reaction');\n      this.setState({\n        selectEmbargo: result.element.selectEmbargo,\n        guestPage: 'embargo',\n        elementType,\n        queryId: result.id,\n        currentElement: result.element,\n        review: publication?.review || {},\n        review_info: result.element?.review_info\n      });\n      Aviator.navigate(`/embargo/${elementType}/${result.id}`, { silent: true });\n    }\n  }\n\n  handleGetEmbargoElement(results) {\n    this.setState({ element: results })\n  }\n\n\n  handleEmbargoRelease(result) {\n    EmbargoActions.fetchEmbargoBundle();\n  }\n\n  handleEmbargoAssign(result) {\n    if (result.error) {\n      alert(result.error);\n    } else {\n      alert(result.message);\n      // refresh embargo list\n      EmbargoActions.getEmbargoBundle();\n      // refresh element list\n      PublicActions.getElements(\n        this.selectType, this.selectState, null, this.searchType,\n        this.searchValue, this.page, this.perPage\n      );\n    }\n  }\n\n  handleEmbargoMove(results) {\n    const { col_id, is_new_embargo, new_embargo, message } = results.result;\n    if (is_new_embargo === true) {\n      this.bundles.push(new_embargo);\n    }\n    alert(message);\n    EmbargoActions.getEmbargoElements(col_id);\n  }\n\n\n  handleRefreshEmbargoBundles(result) {\n    const cols = result.repository;\n    const { current_user } = result;\n    const bundles = [];\n    if (cols && cols.length > 0) {\n      cols.forEach((col) => {\n        bundles.push(col);\n      });\n    }\n    this.setState({ bundles, current_user });\n  }\n  handleFetchBundles(result) {\n    const bundles = result.repository || [];\n    // eslint-disable-next-line camelcase\n    const { current_user } = result;\n    this.setState({\n      guestPage: 'embargo', bundles, current_user, elements: [], element: null\n    });\n  }\n\n  handleGetEmbargoElements(results) {\n    const { elements, current_user, embargo_id, embargo } = results;\n    this.setState({\n      selectEmbargoId: embargo_id,\n      selectEmbargo: embargo,\n      elements,\n      element: null,\n      currentUser: current_user\n    });\n  }\n}\n\nexport default alt.createStore(EmbargoStore, 'EmbargoStore');\n","import React, { Component } from 'react';\nimport EmbargoStore from 'src/stores/alt/repo/stores/EmbargoStore';\nimport RepoReactionDetails from 'src/repoHome/RepoReactionDetails';\nimport RepoSampleDetails from 'src/repoHome/RepoSampleDetails';\n\nexport default class RepoEmbargoDetails extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      element: props.element\n    };\n\n    this.onStoreChange = this.onStoreChange.bind(this);\n  }\n\n  componentDidMount() {\n    EmbargoStore.listen(this.onStoreChange);\n  }\n\n  componentWillUnmount() {\n    EmbargoStore.unlisten(this.onStoreChange);\n  }\n\n  onStoreChange(state) {\n    this.setState(prevState => ({ ...prevState, ...state }));\n  }\n\n  switchTypeRender() {\n    const { elementType } = this.state;\n    const { currentElement } = this.props;\n\n    if (typeof (currentElement) === 'undefined' || !currentElement) {\n      return <span />;\n    }\n    switch (elementType) {\n      case 'reaction':\n        return (\n          <RepoReactionDetails\n            reaction={currentElement.reaction}\n            canComment\n            review_info={this.state.review_info}\n            showComment={false}\n            btnAction={this.state.btnAction}\n            isReview={false}\n            review={this.state.review}\n          />);\n      case 'sample':\n        return (\n          <RepoSampleDetails\n            element={currentElement}\n            canComment\n            btnAction={this.state.btnAction}\n            review_info={this.state.review_info}\n            showComment={false}\n            review={this.state.review}\n          />);\n      default: return <span />;\n    }\n  }\n\n  render() {\n    return (\n      <div style={{ border: 'none' }}>\n        {this.switchTypeRender()}\n      </div>);\n  }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Label, Modal, ButtonToolbar, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport { AffiliationMap } from 'repo-review-ui';\nimport Utils from 'src/utilities/Functions';\nimport {\n  AffiliationList,\n  AuthorList,\n  ContributorInfo,\n  DownloadMetadataBtn\n} from 'src/repoHome/RepoCommon';\n\nconst Doi = (props) => {\n  const { type, id, doi } = props;\n  const title = `${type} DOI:`.replace(/(^\\w)/g, m => m.toUpperCase());\n  const data = (\n    <span>\n      <Button key={`${type}-jumbtn-${id}`} bsStyle=\"link\" onClick={() => { window.location = `https://dx.doi.org/${doi}`; }}>{doi}</Button>\n      <DownloadMetadataBtn type={type} id={id} />\n      <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"tip_clipboard\">copy to clipboard</Tooltip>}>\n        <Button onClick={() => { navigator.clipboard.writeText(`https://dx.doi.org/${doi}`); }} bsSize=\"xsmall\" >\n          <i className=\"fa fa-clipboard\" aria-hidden=\"true\" />\n        </Button>\n      </OverlayTrigger>\n    </span>\n  );\n  return (\n    <h5>\n      <b>{title} </b>\n      {data}\n    </h5>\n  );\n};\n\nconst MetadataModal = ({ showModal, label, metadata, onCloseFn, elementId, elementType }) => {\n  const contentUrl = `/api/v1/public/metadata/download?type=${elementType.toLowerCase()}&id=${elementId}`;\n  return (\n    <div>\n      <Modal\n        show={showModal}\n        onHide={onCloseFn}\n        dialogClassName=\"news-preview-dialog\"\n      >\n        <Modal.Body style={{ overflow: 'auto' }}>\n          <div><h4><Label>{label}</Label></h4></div>\n          <div style={{ maxHeight: '50vh', overflow: 'auto', whiteSpace: 'pre', backgroundColor: 'black', color: 'white', fontFamily: 'monospace' }}>\n            {metadata}\n          </div>\n          <br />\n          <ButtonToolbar>\n            <Button bsStyle=\"warning\" onClick={onCloseFn}> Close</Button>\n            <Button bsStyle=\"primary\" onClick={() => Utils.downloadFile({ contents: contentUrl })}> Download</Button>\n          </ButtonToolbar>\n        </Modal.Body>\n      </Modal>\n    </div>\n  );\n};\n\nMetadataModal.propTypes = {\n  elementId: PropTypes.number.isRequired,\n  elementType: PropTypes.string.isRequired\n};\n\nconst ElementDoi = (edois, isPublished) => {\n  if (edois == null || typeof edois === 'undefined' || edois.length === 0) { return (<div />); }\n  const dois = edois.map(edoi => (<div key={`${edoi.element_type}_${edoi.element_id}`}><Doi type={edoi.element_type} id={edoi.element_id} doi={edoi.doi || ''} isPublished={isPublished} /></div>));\n  return (<div>{dois}</div>);\n};\n\nconst InfoModal = ({ showModal, selectEmbargo, onCloseFn, editable=false }) => {\n  const tag = (selectEmbargo && selectEmbargo.taggable_data) || {};\n  const affiliationMap = AffiliationMap(tag.affiliation_ids);\n  const doi = tag.col_doi || '';\n  const la =  selectEmbargo && selectEmbargo.taggable_data && selectEmbargo.taggable_data.label;\n  const isPublished = true;\n  const author_ids = tag.author_ids || [];\n  const id = (selectEmbargo && selectEmbargo.element_id) || 0;\n  return (\n    <Modal show={showModal} onHide={onCloseFn} bsSize=\"large\">\n      <Modal.Header closeButton>\n        <Modal.Title>\n          <h4><Label>{la}</Label></h4>\n          <ContributorInfo contributor={tag.contributors} />\n          <h5>\n            <b>Author{author_ids.length > 1 ? 's' : ''}: </b>\n            <AuthorList creators={tag.creators} affiliationMap={affiliationMap} />\n          </h5>\n          <AffiliationList\n            affiliations={tag.affiliations}\n            affiliationMap={affiliationMap}\n          />\n          <Doi type=\"collection\" id={id} doi={doi} isPublished={isPublished} />\n        </Modal.Title>\n      </Modal.Header>\n      <Modal.Body style={{ height: '50vh', overflow: 'auto' }}>\n        <div>\n          {ElementDoi(tag.element_dois, isPublished)}\n        </div>\n      </Modal.Body>\n      <Modal.Footer>\n        <ButtonToolbar>\n          <Button bsStyle=\"warning\" onClick={onCloseFn}> Close</Button>\n        </ButtonToolbar>\n      </Modal.Footer>\n    </Modal>\n  );\n};\n\nexport { MetadataModal, InfoModal };\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport uuid from 'uuid';\nimport {\n  Modal,\n  Button,\n  ButtonToolbar,\n  Table,\n  Label,\n  FormControl,\n} from 'react-bootstrap';\n\nexport default class EmbargoCommentsModal extends React.Component {\n  constructor(props) {\n    super(props);\n    this.onSave = this.onSave.bind(this);\n  }\n\n  componentDidMount() {}\n\n  onSave(comment) {\n    this.props.onSaveFn(comment);\n  }\n\n  render() {\n    const { showModal, selectEmbargo, onCloseFn } = this.props;\n    const review = selectEmbargo?.review || {};\n    const label = selectEmbargo?.taggable_data?.label || '';\n    const history = review?.history || [];\n    const historyTbl = history.map((his, idx) => {\n      if (idx === history.length - 1) return <div />;\n      return (\n        <tr key={uuid.v4()}>\n          <td style={{ width: '5%' }}>{idx + 1}</td>\n          <td style={{ width: '12%' }}>{his.timestamp}</td>\n          <td style={{ width: '48%' }}>{his.comment}</td>\n          <td style={{ width: '10%' }}>{his.username}</td>\n        </tr>\n      );\n    });\n    return (\n      <span>\n        <Modal show={showModal} onHide={onCloseFn} bsSize=\"large\">\n          <Modal.Header closeButton>\n            <Modal.Title>\n              <h4>\n                <Label>{label}</Label>\n              </h4>\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body style={{ height: '50vh', overflow: 'auto' }}>\n            <div>\n              <div>\n                <Table striped bordered>\n                  <thead>\n                    <tr>\n                      <th width=\"5%\">#</th>\n                      <th width=\"12%\">Date</th>\n                      <th width=\"48%\">Comment</th>\n                      <th width=\"10%\">From User</th>\n                    </tr>\n                  </thead>\n                  <tbody key={uuid.v4()}>{historyTbl}</tbody>\n                </Table>\n              </div>\n              <br />\n              Comment:\n              <FormControl\n                componentClass=\"textarea\"\n                style={{ height: '120px', overflow: 'auto', whiteSpace: 'pre' }}\n                inputRef={m => {\n                  this.summaryInput = m;\n                }}\n              />\n            </div>\n          </Modal.Body>\n          <Modal.Footer>\n            <ButtonToolbar>\n              <Button bsStyle=\"warning\" onClick={onCloseFn}>Close</Button>\n              <Button bsStyle=\"primary\" onClick={() => this.onSave(this.summaryInput?.value)}>\n                Save\n              </Button>\n            </ButtonToolbar>\n          </Modal.Footer>\n        </Modal>\n      </span>\n    );\n  }\n}\n\nEmbargoCommentsModal.propTypes = {\n  showModal: PropTypes.bool.isRequired,\n  // eslint-disable-next-line react/require-default-props\n  selectEmbargo: PropTypes.object,\n  onSaveFn: PropTypes.func.isRequired,\n  onCloseFn: PropTypes.func.isRequired,\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport { Col, Button } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport uuid from 'uuid';\nimport { AffiliationMap } from 'repo-review-ui';\nimport { OrcidIcon } from 'src/repoHome/RepoCommon';\nimport RepoConst from 'src/components/chemrepo/common/RepoConst';\nimport StateLabel from 'src/components/chemrepo/common/StateLabel';\nimport EmbargoActions from 'src/stores/alt/repo/actions/EmbargoActions';\n\nconst renderAffiliations = ({ affiliations, affiliationMap }) => {\n  const names = [];\n  Object.keys(affiliationMap).map(affiliationId => {\n    const ind = affiliationMap[affiliationId];\n    names[ind] = affiliations[affiliationId];\n    return null;\n  });\n  return (\n    <div>\n      {names.map((e, i) =>\n        i === 0 ? null : (\n          <div style={{ fontSize: 'small' }} key={uuid.v4()}>\n            {i}. {e}\n          </div>\n        )\n      )}\n    </div>\n  );\n};\n\nconst renderAuthors = ({ creators, affiliationMap }) => {\n  if (!creators) return null;\n  return (\n    <span>\n      {creators.map(creator => (\n        <div key={`auth_${creator.id}_${uuid.v4()}`}>\n          <OrcidIcon orcid={creator.ORCID} />\n          {creator.name}\n          <sup>\n            {creator.affiliationIds &&\n              creator.affiliationIds\n                .map(e => affiliationMap[e])\n                .sort()\n                .join()}\n          </sup>\n        </div>\n      ))}\n    </span>\n  );\n};\n\nconst renderOverview = ({ states, state }) => {\n  return (\n    <Col sm={4} md={4} style={{ display: 'flex', flexDirection: 'column' }}>\n      {StateLabel(state)}\n      <div\n        style={{\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'space-evenly',\n        }}\n      >\n        <div>\n          <i className=\"icon-reaction\" aria-hidden=\"true\" />\n          {` ${states[state].Reaction || 0} `}\n        </div>\n        <div>\n          <i className=\"icon-sample\" aria-hidden=\"true\" />\n          {` ${states[state].Sample || 0}`}\n        </div>\n      </div>\n    </Col>\n  );\n};\n\nconst renderRecord = (rec, index, currentUser) => {\n  const history = rec?.review?.history || [];\n  const comment = history.length > 1 ? history[history.length - 2].comment : '';\n  const { element_id: recId, taggable_data: taggableData } = rec;\n  const { element_dois: dois = [] } = taggableData;\n  const affiliationMap = AffiliationMap(taggableData.affiliation_ids);\n  const states = { reviewed: {}, accepted: {}, pending: {} };\n\n  dois.forEach(item => {\n    const {\n      label,\n      id,\n      element_id: elementId,\n      state,\n      element_type: elementType,\n    } = item;\n    if (!states[state]) {\n      console.log(\n        'label, id, elementId, elementType, state=',\n        label,\n        id,\n        elementId,\n        elementType,\n        state\n      );\n      states[state] = {};\n    }\n    if (!states[state][elementType]) {\n      states[state][elementType] = 0;\n    }\n    states[state][elementType] += 1;\n  });\n\n  const viewDetailBtn =\n    currentUser.is_reviewer ||\n    currentUser.is_submitter ||\n    (rec?.review?.submitters || []).includes(currentUser?.id) ||\n    currentUser?.type === RepoConst.U_TYPE.ANONYMOUS ? (\n      <Button\n        className=\"detail-button\"\n        onClick={() => EmbargoActions.getEmbargoElements(recId)}\n      >\n        View details\n      </Button>\n    ) : null;\n\n  const viewComment =\n    comment && (currentUser.is_reviewer || currentUser.is_submitter) ? (\n      <span\n        role=\"alert\"\n        className=\"alert alert-info\"\n        style={{ fontSize: 'small' }}\n      >\n        {comment}\n      </span>\n    ) : null;\n\n  return (\n    <Col sm={12} md={12} className=\"repo-ebg-line\" key={index}>\n      <Col sm={12} md={12} className=\"line-title\">\n        <h3>\n          <i className=\"fa fa-database\" aria-hidden=\"true\" />\n          {` ${taggableData.label} `}\n          {viewDetailBtn}\n          &nbsp;\n          {viewComment}\n        </h3>\n      </Col>\n      <Col sm={12} md={12}>\n        <div style={{ display: 'inline-flex', alignItems: 'center' }}>\n          <span style={{ fontSize: '4em', minWidth: '80px' }}>\n            <i className=\"fa fa-user-circle\" aria-hidden=\"true\" />\n          </span>\n          <span style={{ fontSize: '4em' }}>\n            <h3 style={{ fontWeight: 'bolder' }}>\n              <OrcidIcon orcid={taggableData.contributors?.ORCID} />\n              {` ${taggableData.contributors?.name}`}\n            </h3>\n            <h4>\n              {taggableData.contributors?.affiliations?.map((e, i) => (\n                <React.Fragment key={uuid.v4()}>\n                  <span style={{ wordWrap: 'break-word' }}>\n                    {i + 1}. {e.replace(/,/g, ',\\u00A0')}\n                  </span>\n                  <br />\n                </React.Fragment>\n              ))}\n            </h4>\n          </span>\n        </div>\n      </Col>\n      <Col sm={6} md={6}>\n        <h4>\n          <b>Author(s):</b>\n        </h4>{' '}\n        {renderAuthors({ creators: taggableData.creators, affiliationMap })}\n        {renderAffiliations({\n          affiliations: taggableData.affiliations,\n          affiliationMap,\n        })}\n      </Col>\n      <Col sm={6} md={6} style={{ fontSize: 'x-large' }}>\n        <h4>\n          <b>Overview:</b>\n        </h4>\n        {renderOverview({ states, state: 'pending' })}\n        {renderOverview({ states, state: 'reviewed' })}\n        {renderOverview({ states, state: 'accepted' })}\n      </Col>\n    </Col>\n  );\n};\n\nfunction RepoEmbargoOverview(props) {\n  const { collections, currentUser } = props;\n\n  if (collections?.length === 0) return null;\n\n  const overview = collections.map((m, index) =>\n    renderRecord(m, index, currentUser)\n  );\n\n  return overview;\n}\n\nRepoEmbargoOverview.propTypes = {\n  collections: PropTypes.arrayOf(PropTypes.object).isRequired,\n  currentUser: PropTypes.object.isRequired,\n};\n\nexport default RepoEmbargoOverview;\n","import React, { Component } from 'react';\nimport {\n  Table,\n  Col,\n  Row,\n  Navbar,\n  ButtonGroup,\n  Button,\n  ButtonToolbar,\n  Modal,\n  Panel,\n  OverlayTrigger,\n  Tooltip,\n} from 'react-bootstrap';\nimport uuid from 'uuid';\nimport Select from 'react-select';\nimport { filter } from 'lodash';\nimport RepoEmbargoDetails from 'src/repoHome/RepoEmbargoDetails';\nimport EmbargoActions from 'src/stores/alt/repo/actions/EmbargoActions';\nimport EmbargoStore from 'src/stores/alt/repo/stores/EmbargoStore';\nimport { ElAspect } from 'src/repoHome/RepoCommon';\nimport { ConfirmModal } from 'src/components/common/ConfirmModal';\nimport { MetadataModal, InfoModal } from 'src/repoHome/RepoEmbargoModal';\nimport RepoReviewAuthorsModal from 'src/components/chemrepo/common/RepoReviewAuthorsModal';\nimport EmbargoCommentsModal from 'src/components/chemrepo/common/EmbargoCommentsModal';\nimport EmbargoFetcher from 'src/repo/fetchers/EmbargoFetcher';\nimport RepoEmbargoOverview from 'src/repoHome/RepoEmbargoOverview';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\n\nconst btnMessage = (_msg, _btn) => (\n  <OverlayTrigger\n    placement=\"top\"\n    overlay={<Tooltip id={uuid.v4()}>{_msg}</Tooltip>}\n  >\n    {_btn}\n  </OverlayTrigger>\n);\n\nexport default class RepoEmbargo extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      elements: [],\n      current_user: {},\n      currentElement: null,\n      moveElement: {},\n      newEmbargo: null,\n      selectEmbargo: null,\n      bundles: [],\n      showConfirmModal: false,\n      showMoveModal: false,\n      showInfoModal: false,\n      showCommentsModal: false,\n      showAuthorModal: false,\n      showMetadataModal: false,\n    };\n    this.onChange = this.onChange.bind(this);\n    this.handleElementSelection = this.handleElementSelection.bind(this);\n    this.handleEmbargoAccount = this.handleEmbargoAccount.bind(this);\n    this.handleEmbargoRelease = this.handleEmbargoRelease.bind(this);\n    this.handleEmbargoDelete = this.handleEmbargoDelete.bind(this);\n    this.handleMoveEmbargo = this.handleMoveEmbargo.bind(this);\n    this.handleMoveShow = this.handleMoveShow.bind(this);\n    this.handleMoveClose = this.handleMoveClose.bind(this);\n    this.handleInfoShow = this.handleInfoShow.bind(this);\n    this.handleInfoClose = this.handleInfoClose.bind(this);\n    this.handleAuthorShow = this.handleAuthorShow.bind(this);\n    this.handleAuthorClose = this.handleAuthorClose.bind(this);\n    this.handleMetadataShow = this.handleMetadataShow.bind(this);\n    this.handleMetadataClose = this.handleMetadataClose.bind(this);\n    this.handleEmbargoChange = this.handleEmbargoChange.bind(this);\n    this.handleCommentsShow = this.handleCommentsShow.bind(this);\n    this.handleCommentsClose = this.handleCommentsClose.bind(this);\n    this.handleCommentsSave = this.handleCommentsSave.bind(this);\n    this.handleOverview = this.handleOverview.bind(this);\n  }\n\n  componentDidMount() {\n    EmbargoStore.listen(this.onChange);\n    EmbargoActions.fetchEmbargoBundle();\n  }\n\n  componentWillUnmount() {\n    EmbargoStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    let { selectEmbargo, elements, current_user, currentElement, bundles } = this.state;\n    if (state.selectEmbargo && state.selectEmbargo?.id !== this.state.selectEmbargo?.id) {\n      ({ selectEmbargo } = state);\n    }\n    if (state.elements) { ({ elements } = state); }\n    if (state.current_user) { ({ current_user } = state); }\n    if (!state.currentElement && !this.state.currentElement) {\n      currentElement = null;\n    } else {\n      ({ currentElement } = state);\n    }\n    if (state.bundles) { ({ bundles } = state); }\n    if ((selectEmbargo?.id !== this.state.selectEmbargo?.id)\n      || (JSON.stringify(elements) !== JSON.stringify(this.state.elements))\n      || (current_user?.id !== this.state.current_user?.id)\n      || (currentElement !== this.state.currentElement)\n      || (bundles !== this.state.bundles)) {\n      const validSelect = bundles?.find(b => b.element_id === selectEmbargo?.element_id);\n      if (typeof (validSelect) === 'undefined') {\n        this.setState(prevState => ({ ...prevState, selectEmbargo: null, elements, current_user, currentElement, bundles }));\n      } else {\n        EmbargoFetcher.refreshEmbargo(selectEmbargo || {})\n          .then((result) => {\n            if (!result.error) this.setState(prevState => ({ ...prevState, selectEmbargo: result, elements, current_user, currentElement, bundles }), EmbargoActions.getEmbargoElements(selectEmbargo.element_id));\n          }).catch((errorMessage) => {\n            console.log(errorMessage);\n          });\n      }\n    }\n  }\n\n  onClickDelete() {\n    this.setState({ showConfirmModal: true });\n  }\n\n  handleMoveShow(element) {\n    this.setState({ showMoveModal: true, moveElement: element });\n  }\n\n  handleMoveClose() {\n    this.setState({ showMoveModal: false, moveElement: {} });\n  }\n\n  handleInfoShow() {\n    this.setState({ showInfoModal: true });\n  }\n\n  handleInfoClose() {\n    this.setState({ showInfoModal: false });\n  }\n\n  handleCommentsShow() {\n    this.setState({ showCommentsModal: true });\n  }\n\n  handleCommentsClose() {\n    this.setState({ showCommentsModal: false });\n  }\n\n  handleOverview() {\n    this.setState({ selectEmbargo: null, elements: [], selectEmbargoId: null });\n  }\n\n  handleCommentsSave(comment) {\n    const { selectEmbargo, bundles } = this.state;\n\n    RepositoryFetcher.repoReviewPublish(selectEmbargo?.element_id, 'collection', comment, 'Comments', {}, null)\n      .then(result => {\n        if (result.review && selectEmbargo) {\n          selectEmbargo.review = result.review;\n          const index = bundles.findIndex(b => b.element_id === selectEmbargo.element_id);\n          if (index !== -1) bundles[index] = selectEmbargo;\n        }\n        this.setState({ showCommentsModal: false, selectEmbargo, bundles });\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  handleAuthorShow() {\n    this.setState({ showAuthorModal: true });\n  }\n\n  handleAuthorClose() {\n    this.setState({ showAuthorModal: false });\n  }\n\n  handleMetadataShow() {\n    this.setState({ showMetadataModal: true });\n  }\n\n  handleMetadataClose() {\n    this.setState({ showMetadataModal: false });\n  }\n\n  handleEmbargoChange(selectedValue) {\n    if (selectedValue) {\n      this.setState({ newEmbargo: selectedValue });\n    }\n  }\n\n  handleElementSelection(eventKey, event) {\n    if (eventKey) {\n      const { bundles } = this.state;\n      const selectEmbargo = bundles.find(b => b.element_id === eventKey.value);\n      this.setState({ selectEmbargo }, EmbargoActions.getEmbargoElements(eventKey.value));\n    }\n  }\n\n  handleEmbargoAccount() {\n    const { selectEmbargo, current_user } = this.state;\n\n    if (selectEmbargo === null) {\n      alert('Please select an embargo first!');\n    } else if (current_user.id !== selectEmbargo.published_by) {\n      alert('only the submitter can generate a temporary account!');\n    } else {\n      EmbargoActions.generateEmbargoAccount(selectEmbargo.element_id);\n      alert(`A temporary account for [${selectEmbargo.taggable_data && selectEmbargo.taggable_data.label}] has been created. The details have been sent to you by e-mail.`);\n    }\n  }\n\n  handleEmbargoRelease() {\n    const { selectEmbargo, current_user } = this.state;\n    const isSubmitter =\n      current_user?.id === selectEmbargo?.published_by ||\n      (selectEmbargo?.review?.submitters || []).includes(current_user?.id);\n    if (selectEmbargo === null) {\n      alert('Please select an embargo first!');\n    } else if (!isSubmitter) {\n      alert('only the submitter can perform the release!');\n    } else {\n      EmbargoActions.releaseEmbargo(selectEmbargo.element_id);\n      alert(`The submission for the release of the embargo [${selectEmbargo.taggable_data && selectEmbargo.taggable_data.label}] has been completed!`);\n    }\n  }\n\n  handleEmbargoDelete(shouldPerform) {\n    if (shouldPerform) {\n      const { selectEmbargo, current_user } = this.state;\n      const isSubmitter =\n      current_user?.id === selectEmbargo?.published_by ||\n      (selectEmbargo?.review?.submitters || []).includes(current_user?.id);\n\n      if (selectEmbargo === null) {\n        alert('Please select an embargo first!');\n      } else if (!isSubmitter) {\n        alert('only the submitter can delete the release!');\n      } else {\n        EmbargoActions.deleteEmbargo(selectEmbargo.element_id);\n      }\n    }\n    this.setState({ showConfirmModal: false });\n  }\n\n  handleMoveEmbargo() {\n    const { selectEmbargo, moveElement, newEmbargo } = this.state;\n    EmbargoActions.moveEmbargo(selectEmbargo.element_id, newEmbargo, moveElement);\n    this.setState({ showMoveModal: false });\n  }\n\n  rendeActionBtn(bundles) {\n    const { selectEmbargo, elements, current_user } = this.state;\n    const acceptedEl = ((typeof (elements) !== 'undefined' && elements) || []).filter(e => e.state === 'accepted');\n    const is_submitter = current_user?.id === selectEmbargo?.published_by || (selectEmbargo?.review?.submitters || []).includes(current_user?.id);\n    const actionButtons = (!selectEmbargo || !current_user || (current_user?.is_reviewer == false && !is_submitter)) ? <span /> :\n      (\n        <span>\n          <ButtonToolbar>\n            <ButtonGroup>\n              <Button\n                bsStyle=\"primary\"\n                id=\"all-inner-button\"\n                disabled={selectEmbargo === null || elements.length === 0}\n                onClick={() => this.handleEmbargoAccount()}\n              >\n                <i className=\"fa fa-envelope-o\" aria-hidden=\"true\" />&nbsp;Anonymous\n              </Button>\n              <Button\n                bsStyle=\"warning\"\n                id=\"all-inner-button\"\n                disabled={selectEmbargo === null || acceptedEl.length === 0 || acceptedEl.length !== elements.length}\n                onClick={() => this.handleEmbargoRelease()}\n              >\n                <i className=\"fa fa-telegram\" aria-hidden=\"true\" />&nbsp;Release\n              </Button>\n              <Button\n                bsStyle=\"danger\"\n                id=\"all-inner-button\"\n                disabled={selectEmbargo === null || elements.length !== 0}\n                onClick={() => this.onClickDelete()}\n              >\n                <i className=\"fa fa-trash-o\" aria-hidden=\"true\" />&nbsp;Delete\n              </Button>\n            </ButtonGroup>\n          </ButtonToolbar>\n        </span>\n      );\n    const filterDropdown = (\n      <ButtonGroup>\n        {actionButtons}\n      </ButtonGroup>\n    );\n\n    return (\n      <div style={{ paddingLeft: '15px', marginTop: '8px', marginBottom: '8px' }}>\n        {filterDropdown}\n      </div>\n    );\n  }\n\n  renderSearch(bundles) {\n    const { selectEmbargo, elements, current_user } = this.state;\n    const acceptedEl = ((typeof (elements) !== 'undefined' && elements) || []).filter(e => e.state === 'accepted');\n    const options = [];\n    const hasComment = selectEmbargo?.review?.history?.length > 0;\n    bundles?.forEach((col) => {\n      if (current_user.is_reviewer || current_user.is_submitter || col.published_by === current_user.id ||\n        (col.review?.submitters || []).includes(current_user.id) || current_user.type === 'anonymous') {\n        const tag = col.taggable_data || {};\n        options.push({ value: col.element_id, name: tag.label, label: tag.label });\n      }\n    });\n\n    const filterDropdown = (\n      <div className=\"home-embargo-search\">\n        <Select\n          value={selectEmbargo && selectEmbargo.element_id}\n          onChange={e => this.handleElementSelection(e)}\n          options={options}\n          style={{ width: '148px' }}\n          clearable={false}\n        />\n        <ButtonGroup>\n          {btnMessage('Show all embargos', <Button\n            id=\"overview-button\"\n            disabled={selectEmbargo === null}\n            onClick={() => this.handleOverview()}\n          >\n            <i className=\"fa fa-list-ul\" aria-hidden=\"true\" />\n          </Button>\n          )}\n          {btnMessage('Comments', <Button\n            id=\"comment-button\"\n            disabled={selectEmbargo === null || elements?.length === 0}\n            bsStyle={hasComment ? 'success' : 'default'}\n            onClick={() => this.handleCommentsShow()}\n          >\n            <i className=\"fa fa-comments\" aria-hidden=\"true\" />\n          </Button>\n          )}\n          {btnMessage('Metadata', <Button\n            id=\"metadata-info-button\"\n            disabled={selectEmbargo === null || elements?.length === 0}\n            onClick={() => this.handleMetadataShow()}\n          >\n            <i className=\"fa fa-file-code-o\" aria-hidden=\"true\" />\n          </Button>\n          )}\n          {btnMessage('Info. and DOIs', <Button\n            id=\"all-info-button\"\n            disabled={selectEmbargo === null || elements?.length === 0}\n            onClick={() => this.handleInfoShow()}\n          >\n            <i className=\"fa fa-users\" aria-hidden=\"true\" />\n          </Button>\n          )}\n          <RepoReviewAuthorsModal\n            element={selectEmbargo}\n            isEmbargo\n            disabled={selectEmbargo === null || elements?.length === 0}\n            schemeOnly={false}\n            title=''\n            taggData={selectEmbargo?.taggable_data}\n          />\n        </ButtonGroup>\n      </div>\n    );\n\n    return (\n      <div style={{ paddingLeft: '1px', marginTop: '5px', marginBottom: '5px' }}>\n        {filterDropdown}\n      </div>\n    );\n  }\n\n  renderMoveModal() {\n    const { showMoveModal, selectEmbargo, moveElement, bundles } = this.state;\n    const options = [\n      { value: '0', name: 'new', label: '--Create a new Embargo Bundle--' },\n    ];\n\n    bundles?.forEach((col) => {\n      const tag = col.taggable_data || {};\n      options.push({ value: col.element_id, name: tag.label, label: tag.label });\n    });\n\n    const allBundles = filter(options, b => b.value !== (selectEmbargo == null ? '' : selectEmbargo.element_id));\n\n    return (\n      <Modal\n        show={showMoveModal}\n        dialogClassName=\"move-embargo-dialog\"\n        onHide={this.handleMoveClose}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>{moveElement.type}: [{moveElement.title}]</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <div>\n            <Panel bsStyle=\"success\">\n              <Panel.Heading>\n                <Panel.Title>\n                  Move {moveElement.type} [{moveElement.title}] from Embargo Bundle [{selectEmbargo && selectEmbargo.taggable_data.label}] to :\n                </Panel.Title>\n              </Panel.Heading>\n              <Panel.Body>\n                <div>\n                  <Select\n                    value={this.state.newEmbargo}\n                    onChange={e => this.handleEmbargoChange(e)}\n                    options={allBundles}\n                    className=\"select-assign-collection\"\n                  />\n                  <br />\n                  <ButtonToolbar>\n                    <Button bsStyle=\"primary\" onClick={() => this.handleMoveEmbargo()}>Move Embargoed Bundle</Button>\n                  </ButtonToolbar>\n                </div>\n              </Panel.Body>\n            </Panel>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  render() {\n    const {\n      elements, bundles, currentElement, current_user, showConfirmModal, showInfoModal, showCommentsModal, selectEmbargo, showMetadataModal\n    } = this.state;\n    const id = (selectEmbargo && selectEmbargo.element_id) || 0;\n    const la = selectEmbargo && selectEmbargo.taggable_data && selectEmbargo.taggable_data.label;\n    const metadata = (selectEmbargo && selectEmbargo.metadata_xml) || '';\n    const isOwner =\n      selectEmbargo?.published_by === current_user.id ||\n      (selectEmbargo?.review?.submitters || []).includes(current_user?.id) ||\n      false;\n\n    if (selectEmbargo === null && bundles?.length > 0) {\n      return (\n        <Col sm={12} md={12}>\n          <Navbar fluid className=\"navbar-custom\" style={{ marginBottom: '5px' }}>\n            {this.renderSearch(bundles)}\n            <div style={{ clear: 'both' }} />\n          </Navbar>\n          <RepoEmbargoOverview collections={bundles} currentUser={current_user} />\n        </Col>\n      );\n    }\n\n    return (\n      <Row style={{ maxWidth: '2000px', margin: 'auto' }}>\n        <Col md={currentElement ? 4 : 12} >\n          <Navbar fluid className=\"navbar-custom\" style={{ marginBottom: '5px' }}>\n            {this.renderSearch(bundles)}\n            <div style={{ clear: 'both' }} />\n          </Navbar>\n          <div>\n            <div className=\"embargo-list\" style={{ backgroundColor: '#f5f5f5' }} >\n              <Table striped className=\"review-entries\">\n                <tbody striped=\"true\" bordered=\"true\" hover=\"true\">\n                  {((typeof (elements) !== 'undefined' && elements) || []).map(r => ElAspect(r, EmbargoActions.displayReviewEmbargo, current_user, isOwner, currentElement, this.handleMoveShow)) }\n                </tbody>\n              </Table>\n            </div>\n            {this.rendeActionBtn(bundles)}\n          </div>\n          <ConfirmModal\n            showModal={showConfirmModal}\n            title=\"Warning\"\n            content=\"Are you sure that you want to delete this ?\"\n            onClick={this.handleEmbargoDelete}\n          />\n        </Col>\n        <Col className=\"review-element\" md={currentElement ? 8 : 0}>\n          <RepoEmbargoDetails currentElement={currentElement} />\n          {this.renderMoveModal()}\n\n          <InfoModal\n            showModal={showInfoModal}\n            selectEmbargo={selectEmbargo}\n            onCloseFn={this.handleInfoClose}\n          />\n          <EmbargoCommentsModal\n            showModal={showCommentsModal}\n            selectEmbargo={selectEmbargo}\n            onCloseFn={this.handleCommentsClose}\n            onSaveFn={this.handleCommentsSave}\n          />\n          <MetadataModal\n            showModal={showMetadataModal}\n            label={la}\n            metadata={metadata}\n            onCloseFn={this.handleMetadataClose}\n            elementId={id}\n            elementType=\"Collection\"\n          />\n        </Col>\n      </Row>\n    );\n  }\n}\n","import React, { Component } from 'react';\nimport RepoReactionDetails from 'src/repoHome/RepoReactionDetails';\nimport RepoSampleDetails from 'src/repoHome/RepoSampleDetails';\n\nexport default class RepoCollectionDetails extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      element: props.element\n    };\n    this.loadSVG = this.loadSVG.bind(this);\n  }\n\n  componentDidMount() {\n    const { element } = this.state;\n    if (element) {\n      this.loadSVG(element);\n    }\n  }\n\n  componentDidUpdate(prevProps, prevState, snapshot) {\n    if (this.props.element !== prevProps.element) {\n      this.loadSVG(this.props.element);\n    }\n  }\n\n  loadSVG(element) {\n    this.setState({ element });\n  }\n\n  switchTypeRender() {\n    const { element } = this.props;\n    if (typeof (element) === 'undefined' || !element) {\n      return <span />;\n    }\n    const elementType = element && element.elementType;\n\n    switch (elementType) {\n      case 'reaction': return <RepoReactionDetails isPublished reaction={element} />;\n      case 'molecule': return <RepoSampleDetails isPublished element={element} />;\n      default: return <span />;\n    }\n  }\n\n  render() {\n    return (\n      <div style={{ border: 'none' }}>\n        {this.switchTypeRender()}\n      </div>);\n  }\n}\n","import React, { Component } from 'react';\nimport { Table, Col, Row, Navbar, ButtonGroup, Button, ButtonToolbar, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport uuid from 'uuid';\nimport RepoCollectionDetails from 'src/repoHome/RepoCollectionDetails';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport { MetadataModal, InfoModal } from 'src/repoHome/RepoEmbargoModal';\nimport EmbargoFetcher from 'src/repo/fetchers/EmbargoFetcher';\nimport { getFormattedISODate } from 'src/components/chemrepo/date-utils';\nimport SVGView from 'src/components/chemrepo/SVGViewPan';\n\nconst infoTag = (el, la) => {\n  let authorInfo = '';\n  authorInfo = (<div className=\"home_wrapper_item\"><div>Author</div><div className=\"item_xvial\">{el.published_by}</div></div>);\n  return (\n    <Row key={`list-reaction-info-${el.id}`} className=\"home_wrapper\">\n      <OverlayTrigger placement=\"top\" overlay={<Tooltip id={uuid.v4()} className=\"left_tooltip bs_tooltip\">Chemotion-Repository unique ID</Tooltip>}>\n        <div className=\"home_wrapper_item\">\n          <div>ID</div><div className=\"item_xvial\">{`${el.type === 'Reaction' ? 'CRR' : 'CRS'}-${el.pub_id}`}</div>\n        </div>\n      </OverlayTrigger>\n      <OverlayTrigger placement=\"top\" overlay={<Tooltip id={uuid.v4()} className=\"left_tooltip bs_tooltip\">an embargo bundle contains publications which have been published at the same time</Tooltip>}>\n        <div className=\"home_wrapper_item\">\n          <div>Embargo</div><div className=\"item_xvial\">{la}</div>\n        </div>\n      </OverlayTrigger>\n      {authorInfo}\n      <div className=\"home_wrapper_item\">\n        <div>Published on</div><div className=\"item_xvial\">{getFormattedISODate(el.published_at)}</div>\n      </div>\n      <div className=\"home_wrapper_item\">\n        <div>Analyses</div><div className=\"item_xvial\">{el.ana_cnt || 0}</div>\n      </div>\n    </Row>\n  );\n};\n\nconst Elist = (cid, la, el, selectEmbargo = null, user = null, element = null, fetchEmbargoElement = () => {}) => {\n  if (!el) {\n    return '';\n  }\n  let listClass;\n  if (el.type === 'Reaction') {\n    listClass = (element?.publication && element.publication.element_id === el.id) ? 'list_focus_on' : 'list_focus_off';\n  } else {\n    listClass = (element?.published_samples && element.published_samples[0] && element.published_samples[0].sample_id === el.id) ? 'list_focus_on' : 'list_focus_off';\n  }\n  return (\n    <Col md={element ? 12 : 6} key={`list-embargo-${el.id}`} onClick={() => fetchEmbargoElement(cid, el)}>\n      <div className={`home_reaction ${listClass}`}>\n        <Row key={`list-reaction-svg-${el.id}`}>\n          <Col md={12}>\n            <SVGView svg={el.svg} type={el.type} className=\"layout_svg_reaction\" />\n          </Col>\n        </Row>\n        {infoTag(el, la)}\n      </div>\n    </Col>\n  );\n};\n\nexport default class RepoCollection extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      elements: [],\n      element: null,\n      selectEmbargo: null,\n      showInfoModal: false,\n      showMetadataModal: false,\n    };\n    this.onChange = this.onChange.bind(this);\n    this.handleInfoShow = this.handleInfoShow.bind(this);\n    this.handleInfoClose = this.handleInfoClose.bind(this);\n    this.handleMetadataShow = this.handleMetadataShow.bind(this);\n    this.handleMetadataClose = this.handleMetadataClose.bind(this);\n    this.fetchEmbargoElement = this.fetchEmbargoElement.bind(this);\n    this.fetchEmbargoElements = this.fetchEmbargoElements.bind(this);\n  }\n\n  componentDidMount() {\n    PublicStore.listen(this.onChange);\n    if (!this.state.selectEmbargo) {\n      const id = window.location.pathname.split('/').pop();\n      this.fetchEmbargoElements(id);\n    }\n  }\n\n  componentWillUnmount() {\n    PublicStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    if (state.elements && state.elements != this.state.elements) {\n      this.setState({ elements: state.elements });\n    }\n    if (state.selectEmbargo && state.selectEmbargo != this.state.selectEmbargo) {\n      this.setState({ selectEmbargo: state.selectEmbargo });\n      this.fetchEmbargoElements(state.selectEmbargo.element_id);\n    }\n\n    if (state.element !== this.state.element) {\n      this.setState({ element: state.element });\n    }\n  }\n\n  fetchEmbargoElements(embargoId) {\n    EmbargoFetcher.fetchEmbargoElements(embargoId)\n      .then((result) => {\n        if (!result.error) {\n          const {\n            elements, current_user, embargo\n          } = result;\n          this.setState({\n            selectEmbargo: embargo,\n            elements,\n            currentUser: current_user\n          });\n        }\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  fetchEmbargoElement(cid, el) {\n    EmbargoFetcher.fetchEmbargoElement(cid, el)\n      .then((result) => {\n        if (!result.error) { this.setState({ element: result }); }\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  handleInfoShow() {\n    this.setState({ showInfoModal: true });\n  }\n\n  handleInfoClose() {\n    this.setState({ showInfoModal: false });\n  }\n\n  handleMetadataShow() {\n    this.setState({ showMetadataModal: true });\n  }\n\n  handleMetadataClose() {\n    this.setState({ showMetadataModal: false });\n  }\n\n  renderSearch() {\n    const { selectEmbargo, elements } = this.state;\n    const la = selectEmbargo && selectEmbargo.taggable_data && selectEmbargo.taggable_data.label;\n\n    const actionButtons =\n      (\n        <span style={{ float: 'right' }}>\n          <ButtonToolbar>\n            <Button\n              id=\"all-info-button\"\n              disabled={selectEmbargo === null || (elements && elements.length === 0)}\n              onClick={() => this.handleMetadataShow()}\n            >\n              <i className=\"fa fa-file-code-o\" aria-hidden=\"true\" />&nbsp;Metadata\n            </Button>\n            <Button\n              id=\"all-info-button\"\n              disabled={selectEmbargo === null || (elements && elements.length === 0)}\n              onClick={() => this.handleInfoShow()}\n            >\n              <i className=\"fa fa-users\" aria-hidden=\"true\" />&nbsp;Info and DOI\n            </Button>\n            <Button href=\"/home/publications\" target=\"_blank\">\n              back to all publications\n            </Button>\n          </ButtonToolbar>\n        </span>\n      );\n    const filterDropdown = (\n      <ButtonGroup>\n        {actionButtons}\n      </ButtonGroup>\n    );\n\n    return (\n      <div style={{ paddingLeft: '15px', marginTop: '8px', marginBottom: '8px' }}>\n        <span><b>The data on this page refers to the data collection: &nbsp;{la}&nbsp;</b></span>\n        {filterDropdown}\n      </div>\n    );\n  }\n\n  render() {\n    const {\n      elements, element, currentUser, showInfoModal, selectEmbargo, showMetadataModal\n    } = this.state;\n    const id = (selectEmbargo && selectEmbargo.element_id) || 0;\n    const la = selectEmbargo && selectEmbargo.taggable_data && selectEmbargo.taggable_data.label;\n    const metadata = (selectEmbargo && selectEmbargo.metadata_xml) || '';\n    return (\n      <Row style={{ maxWidth: '2000px', margin: 'auto' }}>\n        <Col md={element ? 4 : 12} >\n          <Navbar fluid className=\"navbar-custom\" style={{ marginBottom: '5px' }}>\n            {this.renderSearch()}\n            <div style={{ clear: 'both' }} />\n          </Navbar>\n          <div className=\"public-list\" style={{ backgroundColor: '#efefef' }}>\n            <Table className=\"sample-entries\">\n              <tbody>\n                {((typeof (elements) !== 'undefined' && elements) || []).map(r => Elist(id, la, r, selectEmbargo, currentUser, element, this.fetchEmbargoElement)) }\n              </tbody>\n            </Table>\n          </div>\n        </Col>\n        <Col md={element ? 8 : 0}>\n          <div className=\"public-element\">\n            <RepoCollectionDetails element={element} />\n          </div>\n          <InfoModal\n            key=\"info-modal\"\n            showModal={showInfoModal}\n            selectEmbargo={selectEmbargo}\n            onCloseFn={this.handleInfoClose}\n            editable\n          />\n          <MetadataModal\n            key=\"metadata-modal\"\n            showModal={showMetadataModal}\n            label={la}\n            metadata={metadata}\n            onCloseFn={this.handleMetadataClose}\n            elementId={id}\n            elementType=\"Collection\"\n          />\n        </Col>\n      </Row>\n    );\n  }\n}\n","import React from 'react';\nimport { Button, Col, Row, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport RepoNavListTypes from 'src/repoHome/RepoNavListTypes';\n\nconst RepoCardStaticsBoard = (params) => {\n  const { publishedStatics } = params;\n  if (publishedStatics && publishedStatics.length !== 0) {\n    const stsSample = publishedStatics.find(p => (p.el_type === 'sample' && p.ex_type === 'sample'));\n    const stsSampleReview = publishedStatics.find(p => (p.el_type === 'sample' && p.ex_type === 'sample-review'));\n    const stsSampleEmbargo = publishedStatics.find(p => (p.el_type === 'sample' && p.ex_type === 'sample-embargo'));\n    const stsReaction = publishedStatics.find(p => (p.el_type === 'reaction' && p.ex_type === 'reaction'));\n    const stsReactionReview = publishedStatics.find(p => (p.el_type === 'reaction' && p.ex_type === 'reaction-review'));\n    const stsReactionEmbargo = publishedStatics.find(p => (p.el_type === 'reaction' && p.ex_type === 'reaction-embargo'));\n    const stsAnalysis = publishedStatics.filter(p => p.el_type === 'analysis');\n    const stsAnalysisSort = stsAnalysis.sort((a, b) => a.e_cnt - b.e_cnt).reverse();\n    const stsAnalysisCnt = stsAnalysisSort\n      .map(e => Number(e.e_cnt)).reduce((accumulator, currentValue) => accumulator + currentValue);\n    const tooltipView = <Tooltip id=\"id_icon_tip\">Click to view publications</Tooltip>;\n    const pubPage = {\n      sample: `publications=${RepoNavListTypes.SAMPLE}`,\n      reaction: `publications=${RepoNavListTypes.REACTION}`\n    };\n    return (\n      <Row className=\"repo-statistic\">\n        <Col lg={12} md={12} sm={12}>\n          <h3 style={{ textAlign: 'center' }}>research data repository</h3>\n        </Col>\n        <Col lg={12} md={12} sm={12} className=\"panel panel-info elem-info\">\n          <Col lg={12} md={12} sm={12} className=\"panel-heading dtl\">\n            <Row className=\"rl\">\n              <OverlayTrigger placement=\"top\" overlay={tooltipView}>\n                <Button className=\"animation-ring\" bsStyle=\"link\" onClick={() => { PublicActions.openRepositoryPage(pubPage.sample); PublicActions.getMolecules({ listType: 'sample' }); }}>\n                  <i className=\"icon-sample\" />\n                </Button>\n              </OverlayTrigger>\n              <div className=\"tit\">Samples</div>\n            </Row>\n          </Col>\n          <Col lg={12} md={12} sm={12} className=\"panel-heading dtl\">\n            <Row className=\"rr\">\n              <div className=\"cnt\">\n                {stsSample.e_cnt}{' '}\n                <OverlayTrigger placement=\"top\" overlay={tooltipView}>\n                  <Button bsStyle=\"link\" onClick={() => { PublicActions.openRepositoryPage(pubPage.sample); PublicActions.getMolecules({ listType: 'sample' }); }}>\n                    published\n                  </Button>\n                </OverlayTrigger>\n              </div>\n              <div className=\"italic-desc\">{stsSampleReview.e_cnt} under review</div>\n              <div className=\"italic-desc\">{stsSampleEmbargo.e_cnt} under embargo</div>\n            </Row>\n          </Col>\n        </Col>\n        <Col lg={12} md={12} sm={12} className=\"panel panel-info elem-info\">\n          <Col lg={12} md={12} sm={12} className=\"panel-heading dtl\">\n            <Row className=\"rl\">\n              <OverlayTrigger placement=\"top\" overlay={tooltipView}>\n                <Button className=\"animation-ring\" bsStyle=\"link\" onClick={() => { PublicActions.openRepositoryPage(pubPage.reaction); PublicActions.getReactions(); }}>\n                  <i className=\"icon-reaction\" />\n                </Button>\n              </OverlayTrigger>\n              <div className=\"tit\">Reactions</div>\n            </Row>\n          </Col>\n          <Col lg={12} md={12} sm={12} className=\"panel-heading dtl\">\n            <Row className=\"rr\">\n              <div className=\"cnt\">\n                {stsReaction.e_cnt}{' '}\n                <OverlayTrigger placement=\"top\" overlay={tooltipView}>\n                  <Button bsStyle=\"link\" onClick={() => { PublicActions.openRepositoryPage(pubPage.reaction); PublicActions.getReactions(); }}>\n                    published\n                  </Button>\n                </OverlayTrigger>\n              </div>\n              <div className=\"italic-desc\">{stsReactionReview.e_cnt} under review</div>\n              <div className=\"italic-desc\">{stsReactionEmbargo.e_cnt} under embargo</div>\n            </Row>\n          </Col>\n        </Col>\n        <Col lg={12} md={12} sm={12} className=\"panel panel-info elem-info\">\n          <Col lg={12} md={12} sm={12} className=\"panel-heading dtl\">\n            <Row className=\"rl\">\n              <i className=\"fa fa-area-chart i-ext\" aria-hidden />\n              <div className=\"tit\">Analyses</div>\n            </Row>\n          </Col>\n          <Col lg={12} md={12} sm={12} className=\"panel-heading dtl\">\n            <Row className=\"rr\">\n              <div className=\"cnt\">{stsAnalysisCnt}&nbsp;<span className=\"tit\">published</span></div>\n              <div style={{ display: 'flex' }}>\n                <div>Top 3:&nbsp;&nbsp;</div>\n                <div className=\"italic-desc\">\n                  {stsAnalysisSort[0].e_cnt}&nbsp;{stsAnalysisSort[0].ex_type}\n                  <br />\n                  {stsAnalysisSort[1].e_cnt}&nbsp;{stsAnalysisSort[1].ex_type}\n                  <br />\n                  {stsAnalysisSort[2].e_cnt}&nbsp;{stsAnalysisSort[2].ex_type}\n                </div>\n              </div>\n            </Row>\n          </Col>\n        </Col>\n      </Row>\n    );\n  }\n  return <div />;\n};\n\nexport default RepoCardStaticsBoard;\n","import React from 'react';\nimport { Carousel } from 'react-bootstrap';\nimport SVG from 'react-inlinesvg';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\n\nconst timeInterval = (_date) => {\n  let date = _date;\n  if (!date) { return null; }\n  switch (typeof date) {\n    case 'number':\n      break;\n    case 'string':\n      date = +new Date(date);\n      break;\n    case 'object':\n      if (date.constructor === Date) date = date.getTime();\n      break;\n    default:\n      date = +new Date();\n  }\n  const seconds = Math.floor((new Date() - date) / 1000);\n  const intrvlTypes = [\n    [31536000, 'year', 'a'],\n    [2592000, 'month', 'a'],\n    [604800, 'week', 'a'],\n    [86400, 'day', 'a'],\n    [3600, 'hour', 'an'],\n    [60, 'minute', 'a'],\n    [1, 'second', 'a'],\n  ];\n  let intrvlCount = 0;\n  const intrvlType = intrvlTypes.find((e) => {\n    intrvlCount = Math.floor(seconds / e[0]);\n    return intrvlCount >= 1;\n  });\n  return `${intrvlCount === 1 ? intrvlType[2] : intrvlCount} ${intrvlType[1]}${intrvlCount > 1 ? 's' : ''} ago`;\n};\n\nconst RepoCardLatestPublish = ({ lastPublished }) => {\n  if (lastPublished) {\n    const { sample, reaction } = lastPublished;\n    const svgPathSample = sample.sample_svg_file\n      ? `/images/samples/${sample.sample_svg_file}`\n      : `/images/molecules/${sample.molecule.molecule_svg_file}`;\n    const pubTagSample = sample.tag || {};\n    const svgPathReaction = reaction\n      ? `/images/reactions/${reaction.reaction_svg_file}`\n      : '/images/no_image_180.svg';\n    const pubTagReaction = reaction.tag || {};\n    return (\n      <div className=\"card-well-competition card-latest\">\n        <Carousel className=\"carl-spt\" indicators={false} interval={6000}>\n          <Carousel.Item className=\"carl-spt-item\">\n            <div className=\"img\">\n              <a title=\"Click to view details\" onClick={() => PublicActions.displayMolecule(sample.molecule.id)}>\n                <SVG src={svgPathSample} key={svgPathSample} className=\"carl-sample\" />\n              </a>\n              <Carousel.Caption className=\"caption\">\n                Published {timeInterval(pubTagSample.published_at || pubTagSample.doi_reg_at || pubTagSample.queued_at)} by {sample.contributor}\n              </Carousel.Caption>\n            </div>\n          </Carousel.Item>\n          <Carousel.Item className=\"carl-spt-item\">\n            <div className=\"img\">\n              <a title=\"Click to view details\" onClick={() => PublicActions.displayReaction(reaction.id)}>\n                <SVG src={svgPathReaction} key={svgPathReaction} className=\"carl-sample\" />\n              </a>\n              <Carousel.Caption className=\"caption\">\n                Published {timeInterval(pubTagReaction.published_at || pubTagReaction.doi_reg_at || pubTagReaction.queued_at)} by {reaction.contributor}\n              </Carousel.Caption>\n            </div>\n          </Carousel.Item>\n        </Carousel>\n      </div>\n    );\n  }\n  return <div />;\n};\n\nexport default RepoCardLatestPublish;\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\nimport RepoCardLatestPublish from 'src/repoHome/RepoCardLatestPublish';\n\nconst RepoCardIntro = ({ lastPublished }) => (\n  <div className=\"repo-intro\">\n    <Row>\n      <Col lg={12} md={12} sm={12}>\n        <h1>Repository for samples, reactions and related research data</h1>\n      </Col>\n    </Row>\n    <Row className=\"row-bottom\">\n      <Col lg={4} md={4} sm={12}>\n        <div className=\"card-well-competition card-nfdi4chem\">\n          <h4>\n            this repository is part of the strategy of\n          </h4>\n          <img\n            className=\"icon-nfdi4chem\"\n            src=\"/images/repo/NFDI4Chem_logo.svg\"\n            key=\"NFDI4Chem\"\n            alt=\"NFDI4Chem\"\n          />\n        </div>\n      </Col>\n      <Col lg={8} md={8} sm={12}>\n        <RepoCardLatestPublish lastPublished={lastPublished} />\n      </Col>\n    </Row>\n  </div>\n);\n\nexport default RepoCardIntro;\n","import React from 'react';\nimport { Button, Col, Row, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport Aviator from 'aviator';\n\nconst RepoCardMoleculeArchive = (params) => {\n  const { publishedStatics } = params;\n  let count = 0;\n  if (publishedStatics && publishedStatics.length !== 0) {\n    count = publishedStatics.find(p => (p.el_type === 'sample' && p.ex_type === 'xvial'))?.e_cnt || 0;\n  }\n  const tooltipView = <Tooltip id=\"id_icon_tip\">Click to view chemical compounds</Tooltip>;\n  return (\n    <Row className=\"repo-statistic\">\n      <Col lg={12} md={12} sm={12}>\n        <h3>archive for materials</h3>\n      </Col>\n      <Col lg={12} md={12} sm={12} className=\"panel panel-info elem-info\">\n        <Col lg={12} md={12} sm={12} className=\"panel-heading dtl\">\n          <Row className=\"rl\">\n            <OverlayTrigger placement=\"top\" overlay={tooltipView}>\n              <Button className=\"animation-ring\" bsStyle=\"link\" onClick={() => Aviator.navigate('/home/moleculeArchive')}>\n                <i className=\"icon-sample\" />\n              </Button>\n            </OverlayTrigger>\n            <div className=\"tit\">Samples</div>\n          </Row>\n        </Col>\n        <Col lg={12} md={12} sm={12} className=\"panel-heading dtl\">\n          <div className=\"rr\">\n            <div className=\"cnt\">\n              {count}{' '}\n              <OverlayTrigger placement=\"top\" overlay={tooltipView}>\n                <Button bsStyle=\"link\" onClick={() => Aviator.navigate('/home/moleculeArchive')}>\n                  published\n                </Button>\n              </OverlayTrigger>\n            </div>\n            <div className=\"italic-desc\">Compounds</div>\n          </div>\n        </Col>\n      </Col>\n      <Col lg={12} md={12} sm={12}>\n        <Col lg={12} md={12} sm={12} className=\"panel-heading dtl\">\n          find chemical compounds provided as reference compounds from <b>Molecule Archive</b>\n        </Col>\n        <Col lg={12} md={12} sm={12} className=\"panel-heading dtl\" style={{ display: 'inline-flex', justifyContent: 'center' }}>\n          <img\n            className=\"icon-molecule-archive2\"\n            src=\"/images/repo/molecule-archive-logo-weiss.svg\"\n            key=\"chemotion_full\"\n            alt=\"Molecule Archive\"\n          />\n        </Col>\n      </Col>\n    </Row>\n  );\n};\n\nexport default RepoCardMoleculeArchive;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Col, Row } from 'react-bootstrap';\nimport uuid from 'uuid';\nimport ContactEmail from 'src/components/chemrepo/core/ContactEmail';\nimport PublicFetcher from 'src/repo/fetchers/PublicFetcher';\n\nconst ReviewerCard = ({\n  name, photo, tel, email\n}) => (\n  <div className=\"card-reviewers\">\n    <img src={`/images/reviewers/${photo}?random=${uuid.v4()}`} alt={photo} />\n    <h4>{name}</h4>\n    <p>Tel.: {tel}</p>\n    <ContactEmail email={email} label={name} />\n    <br /><br /><br /><br />\n  </div>\n);\n\nReviewerCard.propTypes = {\n  name: PropTypes.string.isRequired,\n  photo: PropTypes.string.isRequired,\n  tel: PropTypes.string.isRequired,\n  email: PropTypes.string.isRequired,\n};\n\nexport const ReviewGuidelines = () => (\n  <Row>\n    <Col md={12} sm={12}>\n      <div className=\"card-reviewers\">\n        <h3>Chemotion Repository Review Guidelines</h3>\n        <p className=\"description\">\n          The Chemotion Repository is a curated repository. The submitted entries are curated with respect to formal aspects and feedback is given referring to possible questions or errors. This effort is done to ensure a high quality of the submitted data and to provide data according to community standards. The most important formatting requirements and other hints that can help users to pass the curation easily are described in detail in the documentation, e.g. here (and following pages): <a href=\"https://chemotion.net/docs/repo/details_standards\" target=\"_blank\" rel=\"noreferrer\">Chemotion Repository &gt; Details and Standards</a>\n        </p>\n        <p className=\"description\">\n          The reviewers involved in the curation are volunteers that support the idea of collecting open data. They do their best to guide and support users. All reviewers confirmed to work according to ethical standards. This means in detail that reviewers declare that they will thoroughly review all submissions for publication to the best of their knowledge and ability. They pledge to treat all content confidentially and to not disclose any information, whether personal or factual, to third parties during the review process. They will assess all submissions neutrally, impartially, and by the same criteria. If a conflict of interest arises, they will decline the review of the submission and transfer it to another reviewer for evaluation.\n        </p>\n        <p className=\"description\">\n          Please don&#39;t hesitate to contact the reviewers assigned to your submissions if there are any questions. Please use the option to answer per feedback note, we are glad for all comments and explanations.\n        </p>\n      </div>\n    </Col>\n  </Row>\n);\n\nconst RepoCardReviewers = () => {\n  const [data, setData] = useState([]);\n  useEffect(() => {\n    PublicFetcher.reviewers().then((json) => {\n      setData(json);\n    }).catch(err => console.log('error while loading reviewers, message =', err));\n  }, []);\n\n  if (!data || data?.length < 1) return null;\n\n  const cards = data.map(item =>\n    (<Col key={item.id} lg={3} md={6} sm={12}><ReviewerCard {...item} /></Col>));\n\n  return (\n    <>\n      <Row>\n        <Col md={12} sm={12}><div className=\"home-title\"><span>The Reviewers</span></div></Col>\n      </Row>\n      <Row>\n        <Col md={0} sm={12}>&nbsp;</Col>\n        <Col md={12} sm={12}>{cards}</Col>\n        <Col md={0} sm={12}>&nbsp;</Col>\n      </Row>\n    </>\n  );\n};\n\nexport const RepoCardReviewerIntro = () => (\n  <Row className=\"reviewers-intro\">\n    <Col lg={12} md={12} sm={12}>\n      <ReviewGuidelines />\n      <RepoCardReviewers />\n    </Col>\n  </Row>\n);\n\nexport const RepoCardReviewerIntroBtn = (props) => {\n  const { onClick, show } = props;\n  return (\n    <Button style={{ backgroundColor: '#efefef', color: 'black', flex: 'auto', fontWeight: 'bolder' }} bsSize=\"small\" onClick={onClick}>\n      Chemotion Repository Review Guidelines<br />\n      <i style={{ color: 'black' }} className={`fa fa-caret-${show ? 'up' : 'down'}`} aria-hidden=\"true\" />\n    </Button>);\n};\n\nRepoCardReviewerIntroBtn.propTypes = {\n  onClick: PropTypes.func.isRequired,\n  show: PropTypes.bool.isRequired,\n};\n","import React, { useRef, useState } from 'react';\nimport { Row, Col, Radio, Well, Button, FormGroup } from 'react-bootstrap';\nimport AsyncSelect from 'react-select5/async';\nimport PublicFetcher from 'src/repo/fetchers/PublicFetcher';\nimport { capitalizeFirstLetter } from 'src/components/chemrepo/format-utils';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport RepoNavListTypes from 'src/repoHome/RepoNavListTypes';\nimport SuggestionsFetcher from 'src/fetchers/SuggestionsFetcher';\n\nconst constructHolder = (searchBy, searchIn) => {\n  const holder = { authors: \"author's name\", ontologies: 'chemical methods ontology (1H NMR, mass spectrometry, ...)', sample: 'IUPAC, InChI, SMILES, ...' };\n  return `Enter ${holder[searchBy]} to find information from ${searchIn === 'dataPublications' ? 'Data Publications' : 'Molecule Archive'}`;\n};\n\nconst searchIcon = {\n  chemotion_id: { icon: 'icon-sample', label: 'Chemotion Id' },\n  sample_name: { icon: 'icon-sample', label: 'Sample Name' },\n  sample_short_label: { icon: 'icon-sample', label: 'Sample Short Label' },\n  sample_external_label: { icon: 'icon-sample', label: 'Sample External Label' },\n  polymer_type: { icon: 'icon-polymer', label: 'Polymer' },\n  reaction_name: { icon: 'icon-reaction', label: 'Reaction name' },\n  reaction_status: { icon: 'icon-reaction', label: 'Reaction status' },\n  reaction_short_label: { icon: 'icon-reaction', label: 'Reaction label' },\n  reaction_rinchi_string: { icon: 'icon-reaction', label: 'Reaction RInChI' },\n  wellplate_name: { icon: 'icon-wellplate', label: 'Wellplate' },\n  screen_name: { icon: 'icon-screen', label: 'Screen' },\n  iupac_name: { icon: 'icon-sample', label: 'Molecule' },\n  inchistring: { icon: 'icon-sample', label: 'InChI' },\n  inchikey: { icon: 'icon-sample', label: 'InChIKey' },\n  cano_smiles: { icon: 'icon-sample', label: 'Canonical Smiles' },\n  sum_formula: { icon: 'icon-sample', label: 'Sum Formula' },\n  requirements: { icon: 'icon-screen', label: 'Requirement' },\n  conditions: { icon: 'icon-screen', label: 'Condition' },\n  element_short_label: { icon: 'icon-element', label: 'Element Short Label' },\n  embargo: { icon: 'fa fa-object-group', label: 'Embargo Bundle Number' },\n  authors: { icon: 'fa fa-user', label: 'Author' },\n  ontologies: { icon: 'fa fa-area-chart', label: 'Ontology' }\n};\n\nconst getLabelIcon = (key, label) => {\n  if (searchIcon[key]) {\n    return <>{label}&nbsp;(<i className={searchIcon[key].icon} aria-hidden=\"true\" />&nbsp;{searchIcon[key].label})</>;\n  }\n  return <>{label}</>;\n};\n\nconst updateLabel = (_searchBy, _label, _method) => {\n  switch (_searchBy) {\n    case 'authors':\n    case 'ontologies':\n      return getLabelIcon(_searchBy, _label);\n    case 'sample':\n      return getLabelIcon(_method, _label);\n    default:\n      return <>{_label}</>;\n  }\n};\n\nconst constructParams = (searchBy, searchIn, searchValue, searchOptions = []) => ({\n  page: 1,\n  perPage: 10,\n  advFlag: true,\n  advType: searchBy,\n  advValue: [searchValue],\n  schemeOnly: false,\n  searchIn,\n  searchOptions\n});\n\nconst constructSearchParams = (input, options = []) => {\n  const selection = options.filter(o => o.original.value === input.value);\n  return {\n    advFlag: true,\n    elementType: 'all',\n    page: 1,\n    perPage: 10,\n    selection: selection[0].original,\n    isSearch: true,\n  };\n};\n\nconst PublicSearchIcons = () => {\n  const [searchBy, setSearchBy] = useState('authors');\n  const [searchIn, setSearchIn] = useState('dataPublications');\n  const [searchValue, setSearchValue] = useState(null);\n  const [searchOptions, setSearchOptions] = useState([]);\n  const asyncRef = useRef(null);\n\n  const loadOptions = (input) => {\n    if (!input || input.length < 3) {\n      setSearchOptions([]);\n      return Promise.resolve([]);\n    }\n    if (searchBy === 'sample') {\n      return SuggestionsFetcher.fetchSuggestionsForCurrentUser('all', input, 'public')\n        .then((res) => {\n          const result = res.map((u, index) => ({\n            original: { ...u, value: `suggestion_${index}` },\n            value: `suggestion_${index}`,\n            name: u.name,\n            label: updateLabel(searchBy, u.name, u.search_by_method)\n          }));\n          setSearchOptions(result);\n          return result;\n        })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    }\n    return PublicFetcher.fetchAdvancedValues(capitalizeFirstLetter(searchBy), input)\n      .then((res) => {\n        const result = res.result.map(u => ({\n          original: u, value: u.key, name: u.name, label: updateLabel(searchBy, u.label, searchBy)\n        }));\n        setSearchOptions(result);\n        return result;\n      })\n      .catch((errorMessage) => { console.log(errorMessage); });\n  };\n\n  // search by authors, ontologies, reaction, sample\n  const onChangeSearchBy = (e) => {\n    setSearchBy(e.target.value);\n  };\n\n  // search in publications, moleculeArchive\n  const onChangeSearchIn = (e) => {\n    setSearchIn(e.target.value);\n  };\n\n  const onChangeSearchValue = (_value) => {\n    const pageParams = constructParams(capitalizeFirstLetter(searchBy), searchIn, _value, searchOptions);\n    if (_value) {\n      if (searchIn === 'dataPublications') {\n        if (['authors', 'ontologies'].includes(searchBy)) {\n          PublicActions.getReactions(pageParams);\n          PublicActions.publicSearch.defer(pageParams);\n        } else {\n          const maParams = constructSearchParams(_value, searchOptions);\n          PublicActions.getSearchReactions(maParams);\n          PublicActions.publicSearch.defer({\n            ...maParams, listType: RepoNavListTypes.REACTION, searchOptions: [], defaultSearchValue: _value.name\n          });\n        }\n        PublicActions.openRepositoryPage.defer(`publications=${RepoNavListTypes.REACTION}`);\n      } else {\n        if (['authors', 'ontologies'].includes(searchBy)) {\n          PublicActions.getMolecules({ ...pageParams, listType: RepoNavListTypes.MOLECULE_ARCHIVE });\n          PublicActions.publicSearch.defer(pageParams);\n        } else {\n          const maParams = constructSearchParams(_value, searchOptions);\n          PublicActions.getSearchMolecules({ ...maParams, listType: RepoNavListTypes.MOLECULE_ARCHIVE });\n          PublicActions.publicSearch.defer({\n            ...maParams, listType: RepoNavListTypes.MOLECULE_ARCHIVE, searchOptions: [], defaultSearchValue: _value.name\n          });\n        }\n        PublicActions.openRepositoryPage.defer(`publications=${RepoNavListTypes.MOLECULE_ARCHIVE}`);\n      }\n    }\n    setSearchValue(_value);\n  };\n\n  const onDrawStructure = () => {\n    const listType = searchIn === 'dataPublications' ? RepoNavListTypes.REACTION : RepoNavListTypes.MOLECULE_ARCHIVE;\n    PublicActions.openRepositoryPage(`publications=${listType}`);\n    PublicActions.setSearchParams.defer({\n      showStructureEditor: true, advFlag: true, advType: 'Authors', advValue: [], page: 1, searchOptions: []\n    });\n  };\n\n  return (\n    <Row style={{ width: '100%' }}>\n      <Col md={12} sm={12} xs={12}>\n        <Row>\n          <Col md={2} smHidden xsHidden>&nbsp;</Col>\n          <Col md={8} sm={12} xs={12} className=\"search-keyword\">\n            <Well bsSize=\"small\">\n              <span>Search by</span>\n              &nbsp;&nbsp;\n              <FormGroup>\n                <Radio name=\"radioSearchBy\" value=\"authors\" checked={searchBy === 'authors'} inline onChange={onChangeSearchBy}>\n                  <i className=\"fa fa-user\" aria-hidden=\"true\" />&nbsp;Author\n                </Radio>{' '}\n                <Radio name=\"radioSearchBy\" value=\"ontologies\" checked={searchBy === 'ontologies'} inline onChange={onChangeSearchBy}>\n                  <i className=\"fa fa-area-chart\" aria-hidden=\"true\" />&nbsp;Ontology\n                </Radio>{' '}\n                <Radio name=\"radioSearchBy\" value=\"sample\" checked={searchBy === 'sample'} inline onChange={onChangeSearchBy}>\n                  <i className=\"icon-sample\" />&nbsp;Substance\n                </Radio>&nbsp;&nbsp;or&nbsp;&nbsp;<Button bsSize=\"small\" onClick={onDrawStructure}><i className=\"fa fa-paint-brush\" aria-hidden=\"true\" />&nbsp;Draw Structure</Button>\n              </FormGroup>\n            </Well>\n            &nbsp;&nbsp;\n            <Well bsSize=\"small\">\n              <span>in</span>\n              &nbsp;&nbsp;\n              <FormGroup>\n                <Radio name=\"radioSearchIn\" value=\"dataPublications\" checked={searchIn === 'dataPublications'} inline onChange={onChangeSearchIn}>\n                  Data Publications\n                </Radio>{' '}\n                <Radio name=\"radioSearchIn\" value=\"moleculeArchive\" checked={searchIn === 'moleculeArchive'} inline onChange={onChangeSearchIn}>\n                  Molecule Archive\n                </Radio>\n              </FormGroup>\n            </Well>\n          </Col>\n          <Col md={2} smHidden xsHidden>&nbsp;</Col>\n        </Row>\n        <Row style={{ marginBottom: '10px' }}>\n          <Col md={2}>&nbsp;</Col>\n          <Col md={8}>\n            <AsyncSelect\n              placeholder={constructHolder(searchBy, searchIn)}\n              backspaceRemoves\n              isClearable\n              valueKey=\"value\"\n              labelKey=\"label\"\n              ref={asyncRef}\n              loadOptions={loadOptions}\n              onChange={onChangeSearchValue}\n              styles={{\n                container: baseStyles => ({\n                  ...baseStyles,\n                  width: '100%',\n                }),\n              }}\n            />\n            <span style={{ fontSize: '12px', fontStyle: 'italic' }}>Explore using the author&apos;s name, chemical methods ontology, IUPAC, InChI, SMILES..., or even draw a structure to search the Chemotion Repository.</span>\n          </Col>\n          <Col md={2}>&nbsp;</Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n\nexport default PublicSearchIcons;\n","import React from 'react';\nimport { Thumbnail } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nfunction PartnerInfo(info) {\n  const { header, img, content } = info;\n  const imgSrc = `/images/repo/${img}`;\n\n  return (\n    <Thumbnail alt={header} src={imgSrc} className=\"partners-info\" key={img}>\n      <div className=\"info\">\n        <h4>{header}</h4>\n        <p>{content}</p>\n      </div>\n    </Thumbnail>\n  );\n}\n\nconst Infos = [\n  {\n    header: 'KIT',\n    img: 'KIT.svg',\n    content: 'Karlsruher Institut für Technologie',\n  },\n  {\n    header: 'KIT Stiftung',\n    img: 'KITStiftung.svg',\n    content:\n      'The KIT foundation honors excellent contributions to chemistry research with the Chemotion Award.',\n  },\n  {\n    header: 're3data',\n    img: 're3data_Logo_RGB_free.png',\n    content:\n      'Karlsruhe Institute of Technology Registry of Research Data Repositories',\n  },\n  {\n    header: 'DFG',\n    img: 'dfg_logo_schriftzug_blau_foerderung_en.jpg',\n    content: 'Funded by Deutsche Forschungsgemeinschaft.',\n  },\n  // {\n  //   header: 'Inchitrust',\n  //   img: 'InChITRUST.png',\n  //   content: 'The KIT has a Supporter Membership.',\n  // },\n  {\n    header: 'NFDI4Chem',\n    img: 'NFDI4Chem-Logo_mehrfarbig_schwarz.png',\n    content:\n      'NFDI4Chem is building an open and FAIR infrastructure for research data management in chemistry.',\n  },\n  {\n    header: 'RIsources',\n    img: 'ri_logo.png',\n    content: 'Listed in the DFG catalogue for Research Infrastructures.',\n  },\n  {\n    header: 'Datacite',\n    img: 'DataCite-Logos_secondary.svg',\n    content: 'Helping you to find, access, and reuse data.',\n  },\n  // {\n  //   header: 'Pubmed',\n  //   img: 'pubchem.jpg',\n  //   content: 'All compounds are automatically registered with PubChem.',\n  // },\n  // {\n  //   header: 'Thomson Reuters',\n  //   img: 'DCIbadge.png',\n  //   content:\n  //     'Datasets are automatically registered at the Data Citation Index.',\n  // },\n  {\n    header: 'Database API',\n    img: 'OAI.png',\n    content:\n      'The molecule and dataset metadata are available via a low-barrier mechanism for repository interopability.',\n  },\n];\nfunction Partners({ start = 0, end = 0 }) {\n  return (\n    <div className=\"partner-row\">\n      {Infos.slice(start, end).map((info, index) => PartnerInfo(info, index))}\n    </div>\n  );\n}\n\nPartners.propTypes = {\n  start: PropTypes.number.isRequired,\n  end: PropTypes.number.isRequired,\n};\n\nexport default Partners;\n","import React, { Component } from 'react';\nimport { Col, Row } from 'react-bootstrap';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport { HomeFeature } from 'src/repoHome/RepoCommon';\nimport RepoCardStaticsBoard from 'src/repoHome/RepoCardStaticsBoard';\nimport RepoCardIntro from 'src/repoHome/RepoCardIntro';\nimport RepoCardMoleculeArchive from 'src/repoHome/RepoCardMoleculeArchive';\nimport {\n  RepoCardReviewerIntro,\n  RepoCardReviewerIntroBtn,\n} from 'src/repoHome/RepoCardReviewerIntro';\nimport PublicSearchIcons from 'src/components/chemrepo/search/PublicSearchIcons';\nimport Partners from 'src/repoHome/RepoPartners';\n\nconst features = {\n  metadata: {\n    fa: 'fa fa-file-code-o',\n    title: 'Metadata',\n    intro:\n      'Keep your research data findable and accessible and collect descriptions about the data. ' +\n      'Based on DataCite Metadata Scheme.',\n  },\n  doi: {\n    fa: 'fa fa-id-card-o',\n    title: 'DOI',\n    intro:\n      'Tie Digital Object Identifier (DOI) to your research data. ' +\n      'This registers your data in DataCite and makes it identifiable, ' +\n      'searchable and citable.',\n  },\n  license: {\n    fa: 'fa fa-creative-commons',\n    title: 'Licenses',\n    intro:\n      'Choose which license is suitable for your research data to allow others to re-use your data.',\n  },\n  embargo: {\n    fa: 'fa fa-ban',\n    title: 'Embargo',\n    intro:\n      'Put an embargo on your data. This allows you to delay the publication of your research data. ' +\n      'You can release to make your research data visible to the public whenever you are ready.',\n  },\n  // usage: {\n  //   fa: 'fa fa-bar-chart',\n  //   title: 'Usage',\n  //   intro: 'Assess your research data and track the published research data......'\n  // },\n  oai: {\n    fa: 'fa fa-tasks',\n    title: 'OAI Provider',\n    intro:\n      'Exposes your research data using the Open Archives Initiative Protocol ' +\n      'for Metadata Harvesting (OAI-PMH). OAI-PMH is a protocol developed for harvesting metadata ' +\n      'and we support representing the metadata of your published research data.',\n  },\n  dataQuality: {\n    fa: 'fa fa-diamond',\n    title: 'Data Quality',\n    intro:\n      'Release your research data and pass an internal review that ensures data quality.',\n  },\n  peer: {\n    fa: 'fa fa-users',\n    title: 'Peer review',\n    intro:\n      'Before publication, you can share your data with external reviewers or the publishers.',\n  },\n  store: {\n    fa: 'fa fa-database',\n    title: 'Storage',\n    intro:\n      'Hosted by an experienced data center, ' +\n      'Chemotion repository can store your research data reliably and securely.',\n  },\n  api: {\n    fa: 'fa fa-connectdevelop',\n    title: 'APIs',\n    intro:\n      'With Chemotion APIs, transfer data easily from your ELN to the Chemotion repository.',\n  },\n  labimotion: {\n    fa: 'fa fa-empire',\n    title: 'Extensive Customization',\n    intro:\n      'With LabIMotion: Tailor your modules or benefit from the availability of new elements, ' +\n      \"sections, and dataset templates that can be tailored to meet scientists' specific requirements.\",\n  },\n};\n\nclass RepoHome extends Component {\n  constructor() {\n    super();\n    this.state = { showReviewers: false };\n    this.onChange = this.onChange.bind(this);\n    this.onShow = this.onShow.bind(this);\n  }\n\n  componentDidMount() {\n    PublicStore.listen(this.onChange);\n    PublicActions.lastPublished();\n    PublicActions.publishedStatics();\n  }\n\n  componentWillUnmount() {\n    PublicStore.unlisten(this.onChange);\n  }\n\n  onChange(PublicState) {\n    if (PublicState.lastPublished || PublicState.publishedStatics) {\n      this.setState(prevState => ({\n        ...prevState,\n        lastPublished: PublicState.lastPublished,\n        publishedStatics: PublicState.publishedStatics,\n      }));\n    }\n  }\n\n  onShow() {\n    this.setState(prevState => ({\n      ...prevState,\n      showReviewers: !prevState.showReviewers,\n    }));\n  }\n\n  render() {\n    const { publishedStatics, lastPublished, showReviewers } = this.state;\n\n    return (\n      <Row className=\"repo-welcome\">\n        <Col\n          lg={12}\n          md={12}\n          sm={12}\n          style={{\n            display: 'flex',\n            flexDirection: 'column',\n            alignItems: 'center',\n            justifyContent: 'center',\n          }}\n        >\n          <img\n            className=\"icon-chemotion\"\n            src=\"/images/repo/Chemotion-V1.png\"\n            key=\"chemotion_full\"\n            alt=\"Chemotion Repository\"\n          />\n          <PublicSearchIcons />\n        </Col>\n        <Col md={12} sm={12}>\n          <div style={{ display: 'flex', flexWrap: 'wrap' }}>\n            <Col md={3} sm={12}>\n              <RepoCardMoleculeArchive publishedStatics={publishedStatics} />\n            </Col>\n            <Col md={6} sm={12}>\n              <RepoCardIntro lastPublished={lastPublished} />\n            </Col>\n            <Col md={3} sm={12}>\n              <RepoCardStaticsBoard publishedStatics={publishedStatics} />\n            </Col>\n          </div>\n        </Col>\n        <Col md={12} sm={12}>\n          <Row>\n            <Col md={12} sm={12}>\n              <Row>\n                <Col md={12} sm={12}>\n                  <div className=\"home-title\">\n                    <span>Features</span>\n                  </div>\n                </Col>\n              </Row>\n            </Col>\n          </Row>\n          <Row>\n            <Col md={1} smHidden />\n            <Col md={10} sm={12}>\n              <Row className=\"feature\">\n                <Col md={4} smHidden />\n                <Col md={4} sm={12}>\n                  <HomeFeature\n                    extraStyle={{ display: 'flex', flexWrap: 'wrap' }}\n                    fa={features.peer.fa}\n                    title={features.peer.title}\n                    intro={features.peer.intro}\n                    extra={\n                      <RepoCardReviewerIntroBtn\n                        show={showReviewers}\n                        onClick={() => this.onShow()}\n                      />\n                    }\n                  />\n                </Col>\n                <Col md={4} smHidden />\n              </Row>\n              {showReviewers && <RepoCardReviewerIntro />}\n              <Row className=\"feature\">\n                <Col md={4} sm={12}>\n                  <HomeFeature\n                    fa={features.store.fa}\n                    title={features.store.title}\n                    intro={features.store.intro}\n                  />\n                </Col>\n                <Col md={4} sm={12}>\n                  <HomeFeature\n                    fa={features.metadata.fa}\n                    title={features.metadata.title}\n                    intro={features.metadata.intro}\n                  />\n                </Col>\n                <Col md={4} sm={12}>\n                  <HomeFeature\n                    fa={features.doi.fa}\n                    title={features.doi.title}\n                    intro={features.doi.intro}\n                  />\n                </Col>\n              </Row>\n              <Row className=\"feature\">\n                <Col md={4} sm={12}>\n                  <HomeFeature\n                    fa={features.license.fa}\n                    title={features.license.title}\n                    intro={features.license.intro}\n                  />\n                </Col>\n                <Col md={4} sm={12}>\n                  <HomeFeature\n                    fa={features.dataQuality.fa}\n                    title={features.dataQuality.title}\n                    intro={features.dataQuality.intro}\n                  />\n                </Col>\n                <Col md={4} sm={12}>\n                  <HomeFeature\n                    fa={features.embargo.fa}\n                    title={features.embargo.title}\n                    intro={features.embargo.intro}\n                  />\n                </Col>\n              </Row>\n              <Row className=\"feature\">\n                <Col md={4} sm={12}>\n                  <HomeFeature\n                    fa={features.labimotion.fa}\n                    title={features.labimotion.title}\n                    intro={features.labimotion.intro}\n                  />\n                </Col>\n                <Col md={4} sm={12}>\n                  <HomeFeature\n                    fa={features.oai.fa}\n                    title={features.oai.title}\n                    intro={features.oai.intro}\n                  />\n                </Col>\n                <Col md={4} sm={12}>\n                  <HomeFeature\n                    fa={features.api.fa}\n                    title={features.api.title}\n                    intro={features.api.intro}\n                  />\n                </Col>\n              </Row>\n            </Col>\n            <Col md={1} smHidden />\n          </Row>\n          <Row className=\"card-partners\">\n            <Col md={12} sm={12}>\n              <Row>\n                <Col md={12} sm={12}>\n                  <div className=\"home-title\">\n                    <span>Partners, Affiliations, APIs</span>\n                  </div>\n                </Col>\n              </Row>\n              <Row>\n                <Col md={1} smHidden />\n                <Col md={10} sm={12}>\n                  <Partners start={0} end={4} />\n                  <Partners start={4} end={8} />\n                </Col>\n                <Col md={1} smHidden />\n              </Row>\n            </Col>\n          </Row>\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default RepoHome;\n","import React, { Component } from 'react';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport { DatasetDetail } from 'src/repoHome/RepoCommon';\nimport RepoReactionDetails from 'src/repoHome/RepoReactionDetails';\nimport RepoSampleDetails from 'src/repoHome/RepoSampleDetails';\n\nexport default class RepoElementDetails extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentElement: PublicStore.getState().currentElement,\n      elementType: PublicStore.getState().elementType\n    };\n    this.onStoreChange = this.onStoreChange.bind(this);\n  }\n\n  componentDidMount() {\n    PublicStore.listen(this.onStoreChange);\n  }\n\n  componentWillUnmount() {\n    PublicStore.unlisten(this.onStoreChange);\n  }\n\n  onStoreChange(state) {\n    this.setState(prevState => ({ ...prevState, ...state }));\n  }\n\n  switchTypeRender() {\n    const { currentElement, elementType, listType } = this.state;\n    if (typeof (currentElement) === 'undefined' || !currentElement) {\n      return <span />;\n    }\n    switch (elementType) {\n      case 'dataset': return <DatasetDetail isPublished element={currentElement} />;\n      case 'molecule': return (\n        <RepoSampleDetails\n          isPublished\n          element={currentElement}\n          isCI={currentElement.isCI}\n          review_info={this.state.review_info}\n          review={this.state.review || {}}\n          listType={listType}\n        />);\n      case 'reaction': return (\n        <RepoReactionDetails\n          isPublished\n          reaction={currentElement}\n          review_info={this.state.review_info}\n          review={this.state.review || {}}\n        />);\n      default: return <span />;\n    }\n  }\n\n  render() {\n    return (\n      <div style={{ border: 'none', maxHeight: '80%' }}>\n        {this.switchTypeRender()}\n      </div>\n    );\n  }\n}\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport uuid from 'uuid';\nimport SVG from 'react-inlinesvg';\nimport PropTypes from 'prop-types';\nimport { Popover, OverlayTrigger, Row, Col, Tooltip } from 'react-bootstrap';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport { getFormattedISODate } from 'src/components/chemrepo/date-utils';\n\nconst xvialTag = (element, hasXvial = null) => {\n  const hasX = hasXvial || (element.xvial_count && element.xvial_count > 0);\n  let hasXCom = hasX && (element.xvial_com && element.xvial_com !== 0);\n  if (element.xvial_com === -1 || element.xvial_com === -2) {\n    hasXCom = hasX;\n  } else {\n    hasXCom = (element.xvial_com > 0);\n  }\n  if (!hasX && !hasXCom) return (<span className=\"xvial-span xvial\" style={{ border: 'unset', backgroundColor: 'unset' }}>-</span>);\n  return (<span className={`xvial-span ${hasX ? 'xvial' : ''} ${hasXCom ? 'xvial-com' : ''}`}><i className=\"icon-xvial\" /></span>);\n};\n\nconst svgTag = (path, klassName, isPubElement) => {\n  const popHover = (\n    <Popover id=\"repo-pub-popover-svg\" style={{ maxWidth: 'none', maxHeight: 'none' }}>\n      <img src={path} alt=\"\" style={{ height: '26vh', width: '52vw' }} />\n    </Popover>\n  );\n  return isPubElement ? (\n    <OverlayTrigger trigger={['hover', 'focus']} placement=\"right\" rootClose onHide={null} overlay={popHover}>\n      <div><SVG src={path} className={`layout_svg_${klassName}`} key={path} height={300} /></div>\n    </OverlayTrigger>\n  ) : <SVG src={path} className={`layout_svg_${klassName}`} key={path} />;\n};\n\nconst infoTag = (reaction, schemeOnly) => {\n  const pubData = (reaction && reaction.pub_id) || '';\n  const taggData = (reaction && reaction.taggable_data) || {};\n\n  let authorInfo = '';\n  if (taggData && taggData.creators && taggData.creators.length > 0) {\n    authorInfo = (<div className=\"home_wrapper_item\"><div>Author</div><div className=\"item_xvial\">{taggData.creators[0] && taggData.creators[0].name}</div></div>);\n  } else if (taggData && taggData.contributors) {\n    authorInfo = (<div className=\"home_wrapper_item\"><div>Contributor</div><div className=\"item_xvial\">{taggData.contributors.name}</div></div>);\n  } else {\n    authorInfo = (<div className=\"home_wrapper_item\"><div>Author</div><div /></div>);\n  }\n\n  return (\n    <Row key={`list-reaction-info-${reaction.id}`} className=\"home_wrapper\">\n      <OverlayTrigger placement=\"top\" overlay={<Tooltip id={uuid.v4()} className=\"left_tooltip bs_tooltip\">Chemotion-Repository unique ID</Tooltip>}>\n        <div className=\"home_wrapper_item\">\n          <div>ID</div><div className=\"item_xvial\">{`CRR-${pubData}`}</div>\n        </div>\n      </OverlayTrigger>\n      <OverlayTrigger placement=\"top\" overlay={<Tooltip id={uuid.v4()} className=\"left_tooltip bs_tooltip\">an embargo bundle contains publications which have been published at the same time</Tooltip>}>\n        <div className=\"home_wrapper_item\">\n          <div>Embargo</div><div className=\"item_xvial\">{reaction.embargo}</div>\n        </div>\n      </OverlayTrigger>\n      {authorInfo}\n      <div className=\"home_wrapper_item\">\n        <div>Published on</div><div className=\"item_xvial\">{getFormattedISODate(reaction.published_at)}</div>\n      </div>\n      <div className=\"home_wrapper_item\">\n        <div>Analyses</div><div className=\"item_xvial\">{reaction.ana_cnt || 0}</div>\n      </div>\n      <OverlayTrigger placement=\"top\" overlay={<Tooltip id={uuid.v4()} className=\"left_tooltip bs_tooltip\">When the X-Vial icon available, a physical sample of this molecule was registered to the Molecule Archive of the Compound Platform and can be requested from there</Tooltip>}>\n        <div className=\"home_wrapper_item\">\n          <div>Sample</div><div className=\"item_xvial\">{xvialTag(reaction)}</div>\n        </div>\n      </OverlayTrigger>\n    </Row>\n  );\n};\nconst RepoReactionList = (props) => {\n  const {\n    element, currentElement, isPubElement, schemeOnly\n  } = props;\n  const listClass = (currentElement !== null && currentElement && currentElement.id === element.id) ? 'list_focus_on' : 'list_focus_off';\n  return (\n    <Col md={isPubElement === true ? 12 : 6} key={`list-reaction-${element.id}`} onClick={() => { LoadingActions.start(); PublicActions.displayReaction(element.id); }}>\n      <div className={`home_reaction ${listClass}`}>\n        <Row key={`list-reaction-svg-${element.id}`}>\n          <Col md={12}>\n            {svgTag(element.svgPath, 'reaction', isPubElement)}\n          </Col>\n        </Row>\n        {infoTag(element, schemeOnly, listClass)}\n      </div>\n    </Col>\n  );\n};\n\nRepoReactionList.propTypes = {\n  element: PropTypes.object.isRequired,\n  currentElement: PropTypes.object,\n  isPubElement: PropTypes.bool,\n  schemeOnly: PropTypes.bool\n};\n\nRepoReactionList.defaultProps = {\n  isPubElement: false,\n  schemeOnly: false,\n  currentElement: null\n};\n\nexport default RepoReactionList;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport uuid from 'uuid';\nimport PropTypes from 'prop-types';\nimport { OverlayTrigger, Row, Col, Tooltip } from 'react-bootstrap';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport Formula from 'src/components/common/Formula';\nimport PubchemLabels from 'src/components/pubchem/PubchemLabels';\nimport { xvialTag, svgTag } from 'src/repoHome/RepoPubCommon';\nimport { getFormattedISODate } from 'src/components/chemrepo/date-utils';\nimport { ExtIcon } from 'src/components/chemrepo/ExtIcon';\n\nconst pubchemTag = molecule => {\n  if (molecule?.tag?.taggable_data?.pubchem_cid) {\n    return {\n      pubchem_tag: { pubchem_cid: molecule.tag.taggable_data.pubchem_cid },\n    };\n  }\n  return false;\n};\n\nconst infoTag = molecule => {\n  const pubData = (molecule && molecule.pub_id) || '';\n  return (\n    <Row key={`list-reaction-info-${molecule.id}`} className=\"home_wrapper\">\n      <OverlayTrigger\n        placement=\"top\"\n        overlay={\n          <Tooltip id={uuid.v4()} className=\"left_tooltip bs_tooltip\">\n            Chemotion-Repository unique ID\n          </Tooltip>\n        }\n      >\n        <div className=\"home_wrapper_item\">\n          <div>ID</div>\n          <div className=\"item_xvial\">{`CRS-${pubData}`}</div>\n        </div>\n      </OverlayTrigger>\n      <OverlayTrigger\n        placement=\"top\"\n        overlay={\n          <Tooltip id={uuid.v4()} className=\"left_tooltip bs_tooltip\">\n            an embargo bundle contains publications which have been published at\n            the same time\n          </Tooltip>\n        }\n      >\n        <div className=\"home_wrapper_item\">\n          <div>Embargo</div>\n          <div className=\"item_xvial\">{molecule.embargo}</div>\n        </div>\n      </OverlayTrigger>\n      <div className=\"home_wrapper_item\">\n        <div>Author</div>\n        <div className=\"item_xvial\">{molecule.author_name}</div>\n      </div>\n      <div className=\"home_wrapper_item\">\n        <div>Published on</div>\n        <div className=\"item_xvial\">\n          {getFormattedISODate(molecule.published_at)}\n        </div>\n      </div>\n      <div className=\"home_wrapper_item\">\n        <div>Analyses</div>\n        <div className=\"item_xvial\">{molecule.ana_cnt || 0}</div>\n      </div>\n      <OverlayTrigger\n        placement=\"top\"\n        overlay={\n          <Tooltip id={uuid.v4()} className=\"left_tooltip bs_tooltip\">\n            When the X-Vial icon available, a physical sample of this molecule\n            was registered to the Molecule Archive of the Compound Platform and\n            can be requested from there\n          </Tooltip>\n        }\n      >\n        <div className=\"home_wrapper_item\">\n          <div>Sample</div>\n          <div className=\"item_xvial\">{xvialTag(molecule)}</div>\n        </div>\n      </OverlayTrigger>\n    </Row>\n  );\n};\n\nfunction RepoMoleculeList(props) {\n  const { molecule, currentElement, isPubElement, advFlag, advType, advValue } =\n    props;\n  const listClass =\n    currentElement?.molecule?.id === molecule.id\n      ? 'list_focus_on'\n      : 'list_focus_off';\n  const svgPathSample = molecule.sample_svg_file\n    ? `/images/samples/${molecule.sample_svg_file}`\n    : `/images/molecules/${molecule.molecule_svg_file}`;\n  const pubchemInfo = pubchemTag(molecule);\n  return (\n    <Col\n      md={isPubElement === true ? 12 : 6}\n      key={`list-molecule-${molecule.id}`}\n      onClick={() => {\n        LoadingActions.start();\n        PublicActions.displayMolecule(\n          molecule.id,\n          '',\n          advFlag,\n          advType,\n          advValue\n        );\n      }}\n    >\n      <div className={`home_reaction ${listClass}`}>\n        <Row key={`list-reaction-svg-${molecule.id}`}>\n          <Col md={2}>{svgTag(svgPathSample, 'molecule', true)}</Col>\n          <Col md={10}>\n            <Row>\n              <Formula formula={molecule.sum_formular} />\n              <span className=\"ext-icon-list\">{ExtIcon(molecule.embargo)}</span>\n            </Row>\n            <Row>\n              {molecule.iupac_name}\n              <span className=\"repo-pub-list-icons\">\n                {pubchemInfo ? (\n                  <PubchemLabels element={pubchemTag(molecule)} />\n                ) : null}\n              </span>\n            </Row>\n          </Col>\n        </Row>\n        {infoTag(molecule)}\n      </div>\n    </Col>\n  );\n}\n\nRepoMoleculeList.propTypes = {\n  molecule: PropTypes.object.isRequired,\n  currentElement: PropTypes.object,\n  isPubElement: PropTypes.bool,\n  advFlag: PropTypes.bool.isRequired,\n  advType: PropTypes.string.isRequired,\n  advValue: PropTypes.array.isRequired,\n};\n\nRepoMoleculeList.defaultProps = { isPubElement: false, currentElement: null };\n\nexport default RepoMoleculeList;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport SVG from 'react-inlinesvg';\nimport { Popover, OverlayTrigger } from 'react-bootstrap';\n\nconst xvialTag = (element, hasXvial = null) => {\n  const hasX = hasXvial || (element.xvial_count && element.xvial_count > 0);\n  let hasXCom = hasX && (element.xvial_com && element.xvial_com !== 0);\n  if (element.xvial_com === -1 || element.xvial_com === -2) {\n    hasXCom = hasX;\n  } else {\n    hasXCom = (element.xvial_com > 0);\n  }\n  if (!hasX && !hasXCom) return (<span className=\"xvial-span xvial\" style={{ border: 'unset', backgroundColor: 'unset' }}>-</span>);\n  return (<span className={`xvial-span ${hasX ? 'xvial' : ''} ${hasXCom ? 'xvial-com' : ''}`}><i className=\"icon-xvial\" /></span>);\n};\n\nconst svgTag = (path, klassName, isPop, popW = '26vw') => {\n  const popHover = (\n    <Popover id=\"repo-pub-popover-svg\" style={{ maxWidth: 'none', maxHeight: 'none' }}>\n      <img src={path} alt=\"\" style={{ height: '26vh', width: `${popW}` }} />\n    </Popover>\n  );\n  return isPop ? (\n    <OverlayTrigger trigger={['hover', 'focus']} placement=\"right\" rootClose onHide={null} overlay={popHover}>\n      <div><SVG src={path} className={`layout_svg_${klassName}`} key={path} /></div>\n    </OverlayTrigger>\n  ) : <SVG src={path} className={`layout_svg_${klassName}`} key={path} />;\n};\n\nexport { xvialTag, svgTag };\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport uuid from 'uuid';\nimport PropTypes from 'prop-types';\nimport { OverlayTrigger, Row, Col, Tooltip } from 'react-bootstrap';\nimport SVG from 'react-inlinesvg';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport Formula from 'src/components/common/Formula';\nimport PubchemLabels from 'src/components/pubchem/PubchemLabels';\nimport RepoNavListTypes from 'src/repoHome/RepoNavListTypes';\n\nconst pubchemTag = (molecule) => {\n  if (molecule && molecule.tag &&\n    molecule.tag.taggable_data && molecule.tag.taggable_data.pubchem_cid) {\n    return {\n      pubchem_tag: { pubchem_cid: molecule.tag.taggable_data.pubchem_cid }\n    };\n  }\n  return false;\n};\n\nconst infoTag = (molecule) => {\n  const pubData = (molecule && molecule.pub_id) || '';\n  return (\n    <Row key={`list-reaction-info-${molecule.id}`} className=\"home_wrapper\">\n      <OverlayTrigger placement=\"top\" overlay={<Tooltip id={uuid.v4()} className=\"left_tooltip bs_tooltip\">Chemotion-Repository unique ID</Tooltip>}>\n        <div className=\"home_wrapper_item\">\n          <div>ID</div><div className=\"item_xvial\">{`CRS-${pubData}`}</div>\n        </div>\n      </OverlayTrigger>\n      <div className=\"home_wrapper_item\">\n        <div>Embargo</div><div className=\"item_xvial\">{molecule.embargo}</div>\n      </div>\n      <div className=\"home_wrapper_item\">\n        <div>Analyses</div><div className=\"item_xvial\">{molecule.ana_cnt || 0}</div>\n      </div>\n    </Row>\n  );\n};\n\nconst RepoMoleculeArchive = (props) => {\n  const {\n    molecule, currentElement, isPubElement, advFlag, advType, advValue\n  } = props;\n  if (!molecule.xvial_count) return null;\n  const listClass = (currentElement && currentElement.molecule && currentElement.molecule.id === molecule.id) ? 'list_focus_on' : 'list_focus_off';\n  const svgPathSample = molecule.sample_svg_file\n    ? `/images/samples/${molecule.sample_svg_file}`\n    : `/images/molecules/${molecule.molecule_svg_file}`;\n  const pubchemInfo = pubchemTag(molecule);\n  return (\n    <Col xs={12} sm={12} md={isPubElement === true ? 12 : 6} key={`list-molecule-${molecule.id}`} onClick={() => PublicActions.displayMolecule(molecule.id, '', advFlag, advType, advValue, RepoNavListTypes.MOLECULE_ARCHIVE)}>\n      <div className={`home_archive ${listClass}`}>\n        <div className=\"svg_border\">\n          <SVG src={svgPathSample} className=\"archive_svg_molecule\" key={svgPathSample} />\n        </div>\n        <div className=\"content\">\n          <div className=\"info\">\n            <div className=\"border\">\n              <div className=\"dl\">\n                Formula\n              </div>\n              <div className=\"dr\"><Formula formula={molecule.sum_formular} />\n                {' '}\n                <span className=\"repo-pub-list-icons\">\n                  {pubchemInfo ? <PubchemLabels element={pubchemTag(molecule)} /> : null }\n                </span>\n              </div>\n            </div>\n            <div className=\"border\">\n              <div className=\"dl\">Provided by</div>\n              <div className=\"dr\">{molecule.xvial_archive[0]?.provided_by}</div>\n            </div>\n            <div className=\"border\">\n              <div className=\"dl\">Group</div>\n              <div className=\"dr\">{molecule.xvial_archive[0]?.group || 'Stefan Bräse Group'}</div>\n            </div>\n          </div>\n          <div>\n            {infoTag(molecule)}\n          </div>\n        </div>\n      </div>\n    </Col>\n  );\n};\n\nRepoMoleculeArchive.propTypes = {\n  molecule: PropTypes.object.isRequired,\n  currentElement: PropTypes.object,\n  isPubElement: PropTypes.bool,\n};\n\nRepoMoleculeArchive.defaultProps = {\n  isPubElement: false,\n  currentElement: null\n};\n\nexport default RepoMoleculeArchive;\n","import React, { Component } from 'react';\nimport {\n  Pagination, Table, Form, Col, Row, InputGroup, ButtonGroup, Button,\n  Grid, Radio, DropdownButton, MenuItem,\n  FormGroup, FormControl, Navbar, Tooltip, OverlayTrigger,\n  Tabs, Tab\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport AsyncSelect from 'react-select5/async';\nimport uuid from 'uuid';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport RepoElementDetails from 'src/repoHome/RepoElementDetails';\nimport SuggestionsFetcher from 'src/fetchers/SuggestionsFetcher';\nimport PublicFetcher from 'src/repo/fetchers/PublicFetcher';\nimport AutoCompleteInput from 'src/components/navigation/search/AutoCompleteInput';\nimport StructureEditorModal from 'src/components/structureEditor/StructureEditorModal';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport RepoReactionList from 'src/repoHome/RepoReactionList';\nimport RepoMoleculeList from 'src/repoHome/RepoMoleculeList';\nimport RepoMoleculeArchive from 'src/repoHome/RepoMoleculeArchive';\nimport RepoNavListTypes from 'src/repoHome/RepoNavListTypes';\nimport { capitalizeFirstLetter } from 'src/components/chemrepo/format-utils';\nimport { SearchUserLabels } from 'src/components/UserLabels';\n\nconst renderMoleculeArchive =\n  (molecule, currentElement, isPubElement, advFlag, advType, advValue) => (\n    <RepoMoleculeArchive\n      key={molecule.id}\n      molecule={molecule}\n      currentElement={currentElement}\n      isPubElement={isPubElement}\n      advFlag={advFlag}\n      advValue={advValue}\n      advType={advType}\n    />\n  );\n\nconst renderMolecule = (molecule, currentElement, isPubElement, advFlag, advType, advValue) => (\n  <RepoMoleculeList\n    key={molecule.id}\n    molecule={molecule}\n    currentElement={currentElement}\n    isPubElement={isPubElement}\n    advFlag={advFlag}\n    advValue={advValue}\n    advType={advType}\n  />\n);\n\nconst renderReaction = (element, currentElement, isPubElement, schemeOnly = false) => (\n  <RepoReactionList\n    key={element.id}\n    element={element}\n    currentElement={currentElement}\n    isPubElement={isPubElement}\n    schemeOnly={schemeOnly}\n  />\n);\n\nconst hints = {\n  reaction: {\n    title: 'Reactions',\n    content: 'Reaction entries contain information on the reaction details, the reagents, reactants and products of a reaction and a description of the protocols. Successful reactions are proven by the characterization of the obtained target compounds.'\n  },\n  sample: {\n    title: 'Samples',\n    content: 'Sample entries contain information and properties of the provided sample as well as the characterization of the sample by analytical measurements.'\n  },\n  scheme: {\n    title: 'Scheme-only reactions',\n    content: 'Scheme-only reactions contain the schematic representation of the reaction and its reagents, reactants and products including the most relevant reaction conditions. Scheme-only entries are generated if analytical data are missing.'\n  },\n  moleculeArchive: {\n    title: 'Physical samples',\n    content: 'A physical sample was registered to the Molecule Archive of the Compound Platform and can be requested from there.'\n  }\n};\n\nconst overTip = tab => (\n  <Tooltip id=\"t_tip\" className=\"left_tooltip bs_tooltip\">\n    <i className=\"fa fa-lightbulb-o\" aria-hidden=\"true\" />&nbsp;{hints[tab].content}\n  </Tooltip>\n);\n\nconst TabTip = props => (\n  <OverlayTrigger\n    placement=\"bottom\"\n    overlay={overTip(props.tab)}\n  >\n    <div>{hints[props.tab].title}</div>\n  </OverlayTrigger>\n);\n\nconst handleSelectAdvType = (val) => {\n  if (val) PublicActions.setSearchParams({ advFlag: true, advType: val, advValue: null });\n};\n\nexport default class RepoPubl extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      // ...PublicStore.getState(),\n      page: 1,\n      perPage: 10,\n      showStructureEditor: false,\n      isSearch: false,\n      defaultSearchValue: null,\n      selectType: 'all',\n      inputDisabled: false,\n      queryMolfile: null,\n      searchType: 'similar',\n      tanimotoThreshold: 0.7,\n      listType: props.listType || RepoNavListTypes.REACTION,\n      advFlag: false,\n      advType: 'Authors',\n      advValue: [],\n      selectUsers: [],\n      key: uuid.v4(),\n      showSearch: false,\n    };\n\n    this.onChange = this.onChange.bind(this);\n    this.changeSort = this.changeSort.bind(this);\n    this.handleClearSearchSelection = this.handleClearSearchSelection.bind(this);\n    this.handleStructureEditorCancel = this.handleStructureEditorCancel.bind(this);\n    this.handleSelectAdvValue = this.handleSelectAdvValue.bind(this);\n    this.showAdvancedSearch = this.showAdvancedSearch.bind(this);\n    this.closeAdvancedSearch = this.closeAdvancedSearch.bind(this);\n    this.renderAdvancedSearch = this.renderAdvancedSearch.bind(this);\n    this.advSearchClick = this.advSearchClick.bind(this);\n    this.loadAdvValuesByName = this.loadAdvValuesByName.bind(this);\n    this.handleElementSelection = this.handleElementSelection.bind(this);\n    this.handleShowSearch = this.handleShowSearch.bind(this);\n  }\n\n  componentDidMount() {\n    PublicActions.selectPublicCollection.defer();\n    PublicStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    PublicStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    const { searchOptions, advFlag } = state;\n    this.setState(prevState => ({\n      ...prevState, ...state, searchOptions: searchOptions || [], showSearch: (advFlag || false)\n    }));\n  }\n\n  handleSearchTypeChange(e) {\n    this.setState({ searchType: e.target && e.target.value });\n  }\n\n  handleStructureEditorCancel() {\n    this.setState({ isSearch: false });\n    this.hideStructureEditor();\n  }\n\n  showStructureEditor() {\n    this.setState(\n      { showStructureEditor: true },\n      () => PublicActions.setSearchParams({ showStructureEditor: true, advFlag: true })\n    );\n  }\n\n  hideStructureEditor() {\n    this.setState(\n      { showStructureEditor: false },\n      () => {\n        PublicActions.setSearchParams({ showStructureEditor: false });\n        LoadingActions.stop();\n      }\n    );\n  }\n\n  showAdvancedSearch() {\n    this.setState({ advFlag: true });\n  }\n\n  onPerPageChange(e) {\n    this.setState({ perPage: e.target.value }, () => {\n      PublicActions.setSearchParams({ perPage: e.target.value });\n      this.getList();\n    });\n  }\n\n  getList(ps = {}) {\n    const {\n      advFlag, advType, advValue,\n      isSearch,\n      selectType, selection,\n      page, perPage, listType\n    } = this.state;\n    let params = {\n      advFlag,\n      advType,\n      advValue,\n      elementType: selectType,\n      page,\n      perPage,\n      selection,\n      listType,\n      ...ps\n    };\n    LoadingActions.start();\n    if (isSearch) {\n      switch (listType) {\n        case RepoNavListTypes.REACTION:\n          PublicActions.getSearchReactions(params);\n          break;\n        case RepoNavListTypes.MOLECULE_ARCHIVE:\n        case RepoNavListTypes.SAMPLE:\n          PublicActions.getSearchMolecules(params);\n          break;\n        case RepoNavListTypes.SCHEME:\n          params = { ...params, collectionId: 'schemeOnly' };\n          PublicActions.getSearchReactions(params);\n          break;\n        default:\n      }\n      return;\n    }\n    switch (listType) {\n      case RepoNavListTypes.REACTION:\n        params = { ...params, schemeOnly: false };\n        PublicActions.getReactions(params);\n        break;\n      case RepoNavListTypes.MOLECULE_ARCHIVE:\n      case RepoNavListTypes.SAMPLE:\n        PublicActions.getMolecules(params);\n        break;\n      case RepoNavListTypes.SCHEME:\n        params = { ...params, schemeOnly: true };\n        PublicActions.getReactions(params);\n        break;\n      default:\n        PublicActions.getReactions(params);\n    }\n    UIActions.clearSearchSelection();\n  }\n\n  handleClearSearchSelection() {\n    this.setState({\n      defaultSearchValue: null,\n      searchType: 'similar',\n      tanimotoThreshold: 0.7,\n      queryMolfile: null,\n      isSearch: false,\n      key: uuid.v4(),\n      page: 1\n    }, () => {\n      PublicActions.setSearchParams({\n        defaultSearchValue: null,\n        searchType: 'similar',\n        tanimotoThreshold: 0.7,\n        queryMolfile: null,\n        isSearch: false,\n        key: uuid.v4(),\n        page: 1\n      });\n      this.getList();\n    });\n  }\n\n  handleElementSelection(event) {\n    this.setState({ selectType: event.toLowerCase() });\n  }\n\n  handleShowSearch() {\n    const { showSearch, advFlag } = this.state;\n    PublicActions.setSearchParams({\n      showSearch: !showSearch, advFlag: !advFlag\n    });\n  }\n\n  closeAdvancedSearch() {\n    this.setState({\n      advType: 'Authors', advValue: [], page: 1, searchOptions: []\n    }, () => {\n      PublicActions.setSearchParams({\n        advType: 'Authors', advValue: [], page: 1, searchOptions: []\n      });\n      this.getList();\n    });\n  }\n\n\n  loadAdvValuesByName(input) {\n    if (!input || input.length < 3) {\n      this.setState({ searchOptions: [] });\n      return Promise.resolve([]);\n    }\n    return PublicFetcher.fetchAdvancedValues(capitalizeFirstLetter(this.state.advType), input)\n      .then((res) => {\n        const result = res.result.map(u => ({ value: u.key, name: u.name, label: u.label }))\n        this.setState({ searchOptions: result });\n        return result;\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  changeSort(e) {\n    this.setState({\n      page: 1,\n      listType: e\n    }, () => this.getList());\n  }\n\n  renderMenuItems() {\n    const elements = [\n      'All', 'Samples', 'Reactions'\n    ];\n\n    const menu = elements.map(element => (\n      <MenuItem key={element} eventKey={element} onSelect={this.handleElementSelection}>\n        {element}\n      </MenuItem>\n    ));\n\n    return menu;\n  }\n\n  handleTanimotoChange(e) {\n    const val = e.target && e.target.value;\n    if (!isNaN(val - val)) {\n      this.setState({ tanimotoThreshold: val });\n    }\n  }\n\n  handleSelectionChange(selection) {\n    this.setState({\n      isSearch: true,\n      selection,\n      page: 1\n    }, () => {\n      PublicActions.setSearchParams({\n        isSearch: true,\n        selection,\n        page: 1,\n      });\n      this.getList();\n    });\n  }\n\n  structureSearch(molfile) {\n    const { searchType, tanimotoThreshold } = this.state;\n\n    const tanimoto = (tanimotoThreshold <= 0 || tanimotoThreshold > 1) ? 0.3 : tanimotoThreshold;\n    const selection = {\n      molfile,\n      search_type: searchType,\n      tanimoto_threshold: tanimoto,\n      search_by_method: 'structure',\n      structure_search: true\n    };\n\n    this.setState(\n      {\n        isSearch: true,\n        selection,\n        page: 1,\n        defaultSearchValue: 'structure',\n        queryMolfile: molfile\n      },\n      () => {\n        PublicActions.setSearchParams({\n          isSearch: true,\n          selection,\n          page: 1,\n          defaultSearchValue: 'structure',\n          queryMolfile: molfile,\n          showStructureEditor: false\n        });\n        this.getList();\n      }\n    );\n  }\n\n  handleStructureEditorSave(molfile) {\n    this.hideStructureEditor();\n    if (molfile) {\n      const molfileLines = molfile.match(/[^\\r\\n]+/g);\n      if (molfileLines && molfileLines[1].trim()[0] !== 0) {\n        this.structureSearch(molfile);\n      } else {\n        // TODO: clear search?\n      }\n    }\n  }\n\n  perPageInput() {\n    const { perPage } = this.state;\n    return (\n      <Form horizontal className=\"list-show-count\" >\n        <FormGroup>\n          <InputGroup>\n            <InputGroup.Addon>Show</InputGroup.Addon>\n            <FormControl\n              type=\"text\"\n              style={{ textAlign: 'center' }}\n              onChange={e => this.onPerPageChange(e)}\n              value={perPage || 0}\n            />\n          </InputGroup>\n        </FormGroup>\n      </Form>\n    );\n  }\n\n  onPaginationSelect(eventKey) {\n    const { pages } = this.state;\n    if (eventKey > 0 && eventKey <= pages) {\n      this.setState({ page: eventKey }, () => this.getList());\n    }\n  }\n\n  pagination() {\n    const { page, pages } = this.state;\n    const items = [];\n    const minPage = Math.max(page - 2, 1);\n    const maxPage = Math.min(minPage + 4, pages);\n    items.push(<Pagination.First key=\"first-page\" onClick={() => this.onPaginationSelect(1)} />);\n    if (page > 1) {\n      items.push(<Pagination.Prev key=\"previous-page\" onClick={() => this.onPaginationSelect(page - 1)} />);\n    }\n    for (let tpage = minPage; tpage <= maxPage; tpage += 1) {\n      items.push((\n        <Pagination.Item\n          key={`${tpage}-page`}\n          active={tpage === page}\n          onClick={() => this.onPaginationSelect(tpage)}\n        >\n          {tpage}\n        </Pagination.Item>\n      ));\n    }\n\n    if (pages > maxPage) {\n      items.push(<Pagination.Ellipsis key=\"ellipsis-page\" />);\n    }\n    if (page !== pages) {\n      items.push(<Pagination.Next key=\"next-page\" onClick={() => this.onPaginationSelect(page + 1)} />);\n    }\n    items.push(<Pagination.Last key=\"last-page\" onClick={() => this.onPaginationSelect(pages)} />);\n\n    return <div className=\"list-pagination\"><Pagination>{items}</Pagination></div>;\n  }\n\n  renderSwitch() {\n    const { listType } = this.state;\n    if (listType === RepoNavListTypes.MOLECULE_ARCHIVE) {\n      return (\n        <Tabs\n          activeKey={listType}\n          onSelect={this.changeSort}\n          id=\"element-list-type\"\n        >\n          <Tab eventKey={RepoNavListTypes.MOLECULE_ARCHIVE} title={<TabTip tab=\"moleculeArchive\" />} />\n        </Tabs>\n      );\n    }\n    return (\n      <Tabs\n        activeKey={listType}\n        onSelect={this.changeSort}\n        id=\"element-list-type\"\n      >\n        <Tab eventKey={RepoNavListTypes.REACTION} title={<TabTip tab={RepoNavListTypes.REACTION} />} />\n        <Tab eventKey={RepoNavListTypes.SAMPLE} title={<TabTip tab={RepoNavListTypes.SAMPLE} />} />\n        <Tab eventKey={RepoNavListTypes.SCHEME} title={<TabTip tab={RepoNavListTypes.SCHEME} />} />\n      </Tabs>\n    );\n  }\n\n  handleSelectAdvValue(val) {\n    if (this.state.advType === 'Label') {\n      this.setState({ advValue: val }, () => {\n        PublicActions.setSearchParams({ advValue: val });\n      });\n  } else {\n      if (val && val.length > 0) {\n        this.setState({ advValue: val }, () => {\n          PublicActions.setSearchParams({ advValue: val });\n        });\n      } else {\n        this.setState({ advValue: [], searchOptions: [] }, () => {\n          PublicActions.setSearchParams({ advValue: [], searchOptions: [] });\n        });\n      }\n    }\n  }\n\n  advSearchClick() {\n    const {\n      advType, advValue, searchOptions = []\n    } = this.state;\n    this.setState({ page: 1 }, () => {\n      PublicActions.setSearchParams({\n        advFlag: true, advType: advType || 'Authors', advValue, searchOptions, page: 1\n      });\n      this.getList();\n    });\n  }\n\n  renderAdvancedSearch() {\n    const {\n      advFlag, advType, advValue, searchOptions = []\n    } = this.state;\n    if (advFlag) {\n      this.listOptions = [\n        { value: 'Authors', label: 'by authors' },\n        { value: 'Ontologies', label: 'by analysis type' },\n        { value: 'Embargo', label: 'by Embargo Bundle#' },\n        { value: 'Label', label: 'by label' }\n      ];\n      // const userLabel = [];\n      const customClass = '.btn-unified';\n      let valSelect = '';\n      if (advType === 'Label') {\n        valSelect = (\n          <SearchUserLabels\n            userLabel={advValue}\n            isPublish\n            className={customClass}\n            fnCb={this.handleSelectAdvValue}\n          />\n        );\n      } else {\n        valSelect = (\n          <AsyncSelect\n            isMulti\n            backspaceRemovesValue\n            value={advValue}\n            valueKey=\"value\"\n            labelKey=\"label\"\n            defaultOptions={searchOptions}\n            loadOptions={this.loadAdvValuesByName}\n            onChange={this.handleSelectAdvValue}\n            styles={{\n              control: base => ({\n                ...base,\n                height: '36px',\n                minHeight: '36px',\n                minWidth: '200px',\n                borderRadius: 'unset',\n                border: '1px solid #ccc',\n              }),\n              multiValue: styles => ({\n                ...styles,\n                backgroundColor: '#00b8d91a',\n                opacity: '0.8',\n              }),\n              multiValueLabel: styles => ({\n                ...styles,\n                color: '#0052CC',\n              }),\n            }}\n          />\n        );\n      }\n      return (\n        <div className=\"home-adv-search\">\n          <div>\n            <Select\n              simpleValue\n              searchable={false}\n              options={this.listOptions}\n              placeholder=\"Select search field\"\n              clearable={false}\n              valueKey=\"value\"\n              labelKey=\"label\"\n              onChange={handleSelectAdvType}\n              defaultValue=\"Authors\"\n              value={advType}\n              className=\"o-author\"\n            />\n          </div>\n          <div>{valSelect}</div>\n          <div className=\"btns-grp\">\n            <ButtonGroup>\n              <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"advSearch\">Advanced Search</Tooltip>}>\n                <Button onClick={this.advSearchClick}>\n                  <i className=\"fa fa-search\" />\n                </Button>\n              </OverlayTrigger>\n              <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"closeAdvSearch\">Reset Advanced Search</Tooltip>}>\n                <Button onClick={this.closeAdvancedSearch}>\n                  <i className=\"fa fa-times\" />\n                </Button>\n              </OverlayTrigger>\n            </ButtonGroup>\n          </div>\n        </div>\n      );\n    }\n    return (<div />);\n  }\n\n  renderSearch() {\n    const { isSearch, defaultSearchValue } = this.state;\n    const customClass = '.btn-unified';\n\n    const stSearchTooltip = <Tooltip id=\"search_tooltip\">Draw Molecule Structure to query</Tooltip>;\n    const clearTooltip = <Tooltip id=\"search_tooltip\">Clear search</Tooltip>;\n\n    const buttonAfter = (\n      <ButtonGroup className=\"home-search\">\n        <OverlayTrigger placement=\"bottom\" delayShow={1000} overlay={stSearchTooltip}>\n          <Button bsStyle={customClass ? null : 'primary'} className={customClass} onClick={() => this.showStructureEditor()}>\n            <i className=\"fa fa-paint-brush\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        <OverlayTrigger placement=\"right\" delayShow={1000} overlay={clearTooltip}>\n          <Button bsStyle={customClass ? null : 'danger'} className={customClass} onClick={this.handleClearSearchSelection}>\n            <i className=\"fa fa-times\" />\n          </Button>\n        </OverlayTrigger>\n      </ButtonGroup>\n    );\n\n    const submitAddons = (\n      <Grid>\n        <Row>\n          <Col sm={6} md={4}>\n            <Form inline>\n              <Radio\n                ref={(input) => { this.searchSimilarRadio = input; }}\n                value=\"similar\"\n                checked={this.state.searchType === 'similar'}\n                onChange={e => this.handleSearchTypeChange(e)}\n              >\n                &nbsp; Similarity Search &nbsp;\n              </Radio>\n              &nbsp;&nbsp;\n              <FormControl\n                style={{ width: '40%' }}\n                type=\"text\"\n                value={this.state.tanimotoThreshold}\n                ref={(input) => { this.searchTanimotoInput = input; }}\n                onChange={e => this.handleTanimotoChange(e)}\n              />\n            </Form>\n          </Col>\n          <Col sm={4} md={2}>\n            <Radio\n              ref={(input) => { this.searchSubstructureRadio = input; }}\n              value=\"sub\"\n              checked={this.state.searchType === 'sub'}\n              onChange={e => this.handleSearchTypeChange(e)}\n            >\n              Substructure Search\n            </Radio>\n          </Col>\n        </Row>\n      </Grid>\n    );\n\n    const inputAttributes = {\n      placeholder: 'IUPAC, InChI, SMILES, ...',\n      style: { minWidth: 168, maxWidth: 268 }\n    };\n\n    const suggestionsAttributes = {\n      style: {\n        marginTop: 15,\n        width: 398,\n        maxHeight: 400\n      }\n    };\n\n    const searchTooltip = <Tooltip id=\"search_tooltip\">Select search type</Tooltip>;\n\n    const innerDropdown = (\n      <OverlayTrigger placement=\"top\" delayShow={1000} overlay={searchTooltip}>\n        <DropdownButton\n          style={{ borderRadius: 'unset' }}\n          id=\"search-inner-dropdown\"\n          title={this.state.selectType === 'all' ? 'All' :\n          <span><i className={`icon-${this.state.selectType.toLowerCase().slice(0, -1)}`} aria-hidden=\"true\" /></span>}\n        >\n          {this.renderMenuItems()}\n        </DropdownButton>\n      </OverlayTrigger>\n    );\n\n    return (\n      <div className=\"chemotion-search\">\n        <div className=\"search-structure-draw\">\n          <StructureEditorModal\n            showModal={this.state.showStructureEditor}\n            onSave={this.props.noSubmit ? null : this.handleStructureEditorSave.bind(this)}\n            onCancel={this.handleStructureEditorCancel}\n            molfile={this.state.queryMolfile}\n            submitBtnText=\"Search\"\n            submitAddons={submitAddons}\n          />\n        </div>\n        {\n          this.state.showSearch ?\n          (\n            <span>\n              <Button bsStyle=\"primary\" className=\"button-caret\" onClick={this.handleShowSearch}>\n                <i className=\"fa fa-caret-left\" aria-hidden=\"true\" />&nbsp;<i className=\"fa fa-search\" aria-hidden=\"true\" />\n              </Button>\n              <div className=\"search-autocomplete\">\n                <AutoCompleteInput\n                  key={this.state.key}\n                  inputAttributes={inputAttributes}\n                  inputDisabled={isSearch}\n                  defaultSearchValue={defaultSearchValue}\n                  suggestionsAttributes={suggestionsAttributes}\n                  suggestions={input => SuggestionsFetcher.fetchSuggestionsForCurrentUser(\n                    this.state.selectType.toLowerCase(), input, 'public', false)}\n                  ref={(input) => { this.autoComplete = input; }}\n                  onSelectionChange={selection => this.handleSelectionChange(selection)}\n                  buttonBefore={innerDropdown}\n                  buttonAfter={buttonAfter}\n                />\n              </div>\n            </span>\n          ) :\n          (\n            <Button bsStyle=\"primary\" className=\"button-caret\" onClick={this.handleShowSearch}>\n              <i className=\"fa fa-search\" aria-hidden=\"true\" />&nbsp;<i className=\"fa fa-caret-right\" aria-hidden=\"true\" />\n            </Button>\n          )\n        }\n      </div>\n    );\n  }\n\n  render() {\n    const {\n      molecules, listType, reactions, currentElement, showSearch, advFlag, advType, advValue\n    } = this.state;\n    const isPubElement = !!(((currentElement && this.state.currentElement.publication &&\n      this.state.currentElement.publication.published_at) || (\n      this.state.currentElement && this.state.currentElement.published_samples\n      && this.state.currentElement.published_samples.length > 0 &&\n      this.state.currentElement.published_samples[0].published_at\n    )));\n    const listClass = (showSearch && isPubElement) ? 'public-list-adv' : 'public-list';\n    const elementList = () => {\n      switch (listType) {\n        case RepoNavListTypes.MOLECULE_ARCHIVE:\n          return (molecules || []).map(m => renderMoleculeArchive(m, currentElement, isPubElement, advFlag, advType, advValue));\n        case RepoNavListTypes.REACTION:\n          return (reactions || []).map(r => renderReaction(r, currentElement, isPubElement));\n        case RepoNavListTypes.SAMPLE:\n          return (molecules || []).map(m => renderMolecule(m, currentElement, isPubElement, advFlag, advType, advValue));\n        case RepoNavListTypes.SCHEME:\n          return (reactions || []).map(r => renderReaction(r, currentElement, isPubElement, true));\n        default:\n          return (reactions || []).map(r => renderReaction(r, currentElement, isPubElement));\n      }\n    };\n\n    return (\n      <Row style={{ maxWidth: '2000px', margin: 'auto' }}>\n        <Col md={isPubElement === true ? 4 : 12}>\n          <Navbar fluid className=\"navbar-custom\" style={{ marginBottom: '0px' }}>\n            <Navbar.Form pullLeft>\n              {this.renderSearch()}\n            </Navbar.Form>\n            <Navbar.Form pullLeft>\n              {this.renderAdvancedSearch()}\n            </Navbar.Form>\n            <Navbar.Form style={{ marginBottom: 'unset' }} pullRight>\n              {this.renderSwitch()}\n            </Navbar.Form>\n          </Navbar>\n\n          <div className={listClass} style={{ backgroundColor: '#efefef' }}>\n            <Table className=\"sample-entries\">\n              <tbody>\n                {elementList()}\n              </tbody>\n            </Table>\n          </div>\n          <div className=\"list-container-bottom\">\n            <Row>\n              <Col sm={8}>{this.pagination()}</Col>\n              <Col sm={4}>{this.perPageInput()}</Col>\n            </Row>\n          </div>\n        </Col>\n        <Col md={isPubElement === true ? 8 : 0}>\n          <div className=\"public-element\">\n            <RepoElementDetails />\n          </div>\n        </Col>\n      </Row>\n    );\n  }\n}\n","import React, { Component } from 'react';\nimport ReviewStore from 'src/stores/alt/repo/stores/ReviewStore';\nimport RepoReactionDetails from 'src/repoHome/RepoReactionDetails';\nimport RepoSampleDetails from 'src/repoHome/RepoSampleDetails';\n\nexport default class RepoReviewDetails extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      element: props.element,\n      review: {},\n      btnAction: '',\n      review_info: {},\n    };\n\n    this.onStoreChange = this.onStoreChange.bind(this);\n  }\n\n  componentDidMount() {\n    ReviewStore.listen(this.onStoreChange);\n  }\n\n  componentWillUnmount() {\n    ReviewStore.unlisten(this.onStoreChange);\n  }\n\n  onStoreChange(state) {\n    this.setState(prevState => ({ ...prevState, ...state }));\n  }\n\n\n  switchTypeRender() {\n    const { currentElement, elementType } = this.state;\n    if (typeof (currentElement) === 'undefined' || !currentElement) {\n      return <span />;\n    }\n    switch (elementType) {\n      case 'reaction':\n        return (\n          <RepoReactionDetails\n            reaction={currentElement.reaction}\n            canComment\n            review_info={this.state.review_info}\n            btnAction={this.state.btnAction}\n            isReview={true}\n            review={this.state.review}\n          />);\n      case 'sample':\n        return (\n          <RepoSampleDetails\n            element={currentElement}\n            canComment\n            btnAction={this.state.btnAction}\n            review_info={this.state.review_info}\n            review={this.state.review}\n          />);\n      default: return <span />;\n    }\n  }\n\n  render() {\n    return (\n      <div style={{ border: 'none' }}>\n        {this.switchTypeRender()}\n      </div>\n    );\n  }\n}\n","import React, { Component } from 'react';\nimport SVG from 'react-inlinesvg';\nimport { Table, Col, Row, Navbar, DropdownButton, MenuItem, ButtonGroup, Pagination, Form, FormGroup, InputGroup, FormControl, Modal, Panel, ButtonToolbar, Button, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport Select from 'react-select';\nimport { filter } from 'lodash';\nimport { RepoReviewModal, RepoCommentModal } from 'repo-review-ui';\nimport RepoReviewDetails from 'src/repoHome/RepoReviewDetails';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\nimport EmbargoActions from 'src/stores/alt/repo/actions/EmbargoActions';\nimport ReviewStore from 'src/stores/alt/repo/stores/ReviewStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport { getFormattedISODateTime } from 'src/components/chemrepo/date-utils';\nimport StateLabel from 'src/components/chemrepo/common/StateLabel';\nimport SVGView from 'src/components/chemrepo/SVGViewPan';\nimport { SchemeWord, ChecklistPanel } from 'src/repoHome/RepoCommon';\nimport { ShowUserLabels, SearchUserLabels } from 'src/components/UserLabels';\n\n\n// import RepoReviewModal from '../components/common/RepoReviewModal';\n\nconst renderElement = (e, currentElement, embargoBtn) => {\n  if (e.type === 'Reaction') {\n    const listClass = (currentElement !== null && currentElement.reaction && currentElement.reaction.id === e.id) ? 'list_focus_on' : 'list_focus_off';\n    const schemeOnly = (e && e.scheme_only === true) || false;\n    return (\n      <tr\n        key={e.id}\n        className={listClass}\n        onClick={() => ReviewActions.displayReviewReaction(e.id)}\n      >\n        <td style={{ position: 'relative' }} >\n          <span className=\"review_element_label\">\n            <i className=\"icon-reaction\" />{schemeOnly ? <SchemeWord /> : ''}&nbsp;{e.title}\n          </span>\n          &nbsp;By&nbsp;{e.published_by}&nbsp;at&nbsp;\n          {getFormattedISODateTime(e.submit_at)}&nbsp;{StateLabel(e.state)}&nbsp;{StateLabel(e.embargo)}\n          &nbsp;{embargoBtn}\n          <div style={{ paddingTop: '5px' }}>\n            <ShowUserLabels element={e} />\n          </div>\n          <div>\n            <SVGView svg={e.svg} type={e.type} className=\"molecule-mid\" />\n            <ChecklistPanel isReviewer={e.isReviewer} checklist={e.checklist} review_info={e?.review_info || {}}  />\n          </div>\n        </td>\n      </tr>\n    );\n  }\n  const listClass = (currentElement !== null && currentElement.sample && currentElement.sample.id === e.id) ? 'list_focus_on' : 'list_focus_off';\n  return (\n    <tr\n      key={e.id}\n      className={listClass}\n      onClick={() => ReviewActions.displayReviewSample(e.id)}\n    >\n      <td style={{ position: 'relative' }}>\n        <span className=\"review_element_label\">\n          <i className=\"icon-sample\" />&nbsp;{e.title}\n        </span>\n        &nbsp;By&nbsp;{e.published_by}&nbsp;at&nbsp;\n        {getFormattedISODateTime(e.submit_at)}&nbsp;{StateLabel(e.state)}&nbsp;{StateLabel(e.embargo)}\n        &nbsp;{embargoBtn}\n        <div style={{ paddingTop: '5px' }}>\n          <ShowUserLabels element={e} />\n        </div>\n        <div>\n          <SVGView svg={e.svg} type={e.type} className=\"molecule-mid\" />\n          <ChecklistPanel isReviewer={e.isReviewer} checklist={e.checklist} review_info={e?.review_info || {}} />\n        </div>\n      </td>\n    </tr>\n  );\n};\n\nconst defaultState = 'pending';\n\nexport default class RepoReview extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      page: 1,\n      perPage: 10,\n      elements: [],\n      currentElement: null,\n      showReviewModal: false,\n      showCommentModal: false,\n      reviewData: {},\n      selectType: 'All',\n      searchType: 'All',\n      searchValue: '',\n      listTypeOptions: [],\n      selectState: defaultState,\n      bundles: [],\n      btnAction: '',\n      field: '',\n      orgInfo: '',\n      showEmbargoModal: false,\n      selectedElement: null,\n      selectedEmbargo: null\n    };\n    this.onChange = this.onChange.bind(this);\n    this.handleElementSelection = this.handleElementSelection.bind(this);\n    this.handleSelectType = this.handleSelectType.bind(this);\n    this.handleSelectAdvValue = this.handleSelectAdvValue.bind(this);\n    this.handleSearchNameInput = this.handleSearchNameInput.bind(this);\n    this.onEmbargoBtnClick = this.onEmbargoBtnClick.bind(this);\n    this.onEmbargoBtnSave = this.onEmbargoBtnSave.bind(this);\n    this.handleSubmitReview = this.handleSubmitReview.bind(this);\n    this.handleReviewUpdate = this.handleReviewUpdate.bind(this);\n    this.handleCommentUpdate = this.handleCommentUpdate.bind(this);\n    this.setUserLabel = this.setUserLabel.bind(this);\n  }\n\n  componentDidMount() {\n    ReviewStore.listen(this.onChange);\n    ReviewActions.getElements.defer();\n    EmbargoActions.getEmbargoBundle(); // added to ReviewStore\n  }\n\n  componentWillUnmount() {\n    ReviewStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState(prevState => ({ ...prevState, ...state }));\n  }\n\n  handleSubmitReview(elementId, elementType, comment, btnAction, checklist, reviewComments){\n    LoadingActions.start();\n    ReviewActions.reviewPublish(elementId, elementType, comment, btnAction, checklist, reviewComments);\n    // this.props.onHide(false);\n  }\n\n  handleReviewUpdate(e, col, rr) {\n    const { review } = this.state;\n    const checklist = rr.checklist || {};\n    if (typeof (checklist[col]) === 'undefined') checklist[col] = {};\n    checklist[col].status = e.target.checked;\n    review.checklist = checklist;\n    ReviewActions.updateReview(review);\n  }\n\n  handleCommentUpdate(elementId, elementType, field, commentInput, origInfo) {\n    LoadingActions.start();\n    const cinfo = {};\n    if (typeof (cinfo[field]) === 'undefined') {\n      cinfo[field] = {};\n    }\n    cinfo[field].comment = commentInput;\n    cinfo[field].origInfo = origInfo;\n    ReviewActions.updateComment(elementId, elementType, cinfo);\n  }\n\n  setUserLabel(label) {\n    const { userLabel } = this.state;\n    this.setState({ userLabel: label });\n    if (userLabel !== label) ReviewActions.setUserLabel(label);\n\n    this.handleElementSelection('label', label);\n  }\n\n\n  onPerPageChange(e) {\n    const {\n      page, selectType, selectState, selectLabel, searchType, searchValue\n    } = this.state;\n    const perPage = e.target.value;\n    this.setState({ perPage });\n    ReviewActions.getElements(selectType, selectState, selectLabel, searchType, searchValue, page, perPage);\n  }\n\n  onPaginationSelect(eventKey) {\n    const {\n      pages, perPage, selectType, selectState, selectLabel, searchType, searchValue\n    } = this.state;\n    if (eventKey > 0 && eventKey <= pages) {\n      ReviewActions.getElements(\n        selectType, selectState, selectLabel, searchType, searchValue,\n        eventKey, perPage\n      );\n    }\n  }\n\n  onEmbargoBtnClick(e, element) {\n    e.preventDefault();\n    e.stopPropagation();\n    const selectedElement = !this.state.showEmbargoModal ? element : null;\n    this.setState({ showEmbargoModal: !this.state.showEmbargoModal, selectedElement });\n  }\n\n  onEmbargoBtnSave(e, element) {\n    const { selectedEmbargo, selectedElement } = this.state;\n    if (selectedEmbargo === null) {\n      return alert('Please select an embargo first!');\n    }\n    EmbargoActions.assignEmbargo(selectedEmbargo.value, selectedElement);\n    this.onEmbargoBtnClick(e, element);\n    return true;\n  }\n\n  perPageInput() {\n    const { perPage } = this.state;\n    return (\n      <Form horizontal className=\"list-show-count\" >\n        <FormGroup>\n          <InputGroup>\n            <InputGroup.Addon>Show</InputGroup.Addon>\n            <FormControl\n              type=\"text\"\n              style={{ textAlign: 'center' }}\n              onChange={e => this.onPerPageChange(e)}\n              value={perPage || 0}\n            />\n          </InputGroup>\n        </FormGroup>\n      </Form>\n    );\n  }\n\n  pagination() {\n    const { page, pages } = this.state;\n    const items = [];\n    const minPage = Math.max(page - 2, 1);\n    const maxPage = Math.min(minPage + 4, pages);\n    items.push(<Pagination.First key=\"first-page\" onClick={() => this.onPaginationSelect(1)} />);\n    if (page > 1) {\n      items.push(<Pagination.Prev key=\"previous-page\" onClick={() => this.onPaginationSelect(page - 1)} />);\n    }\n    for (let tpage = minPage; tpage <= maxPage; tpage += 1) {\n      items.push((\n        <Pagination.Item\n          key={`${tpage}-page`}\n          active={tpage === page}\n          onClick={() => this.onPaginationSelect(tpage)}\n        >\n          {tpage}\n        </Pagination.Item>\n      ));\n    }\n\n    if (pages > maxPage) {\n      items.push(<Pagination.Ellipsis key=\"ellipsis-page\" />);\n    }\n    if (page !== pages) {\n      items.push(<Pagination.Next key=\"next-page\" onClick={() => this.onPaginationSelect(page + 1)} />);\n    }\n    items.push(<Pagination.Last key=\"last-page\" onClick={() => this.onPaginationSelect(pages)} />);\n\n    return <div className=\"list-pagination\"><Pagination>{items}</Pagination></div>;\n  }\n\n  handleSelectType(val) {\n    const { selectType, selectState, perPage, selectLabel } = this.state;\n    if (val && (val === 'Submitter' || val === 'Embargo')) {\n      RepositoryFetcher.fetchReviewSearchOptions(val, selectType, selectState).then((res) => {\n        const options = res && res.result && res.result\n          .map(u => ({ value: u.key, name: u.name, label: u.label }));\n        this.setState({ listTypeOptions: options });\n        ReviewActions.getElements(selectType, selectState, selectLabel, val, '', 1, perPage);\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    } else {\n      ReviewActions.getElements(selectType, selectState, selectLabel, val, '', 1, perPage);\n    }\n  }\n\n  handleSearchNameInput(event) {\n    const { value } = event.target;\n    if (value) {\n      this.setState({ searchValue: value });\n    }\n  }\n\n  handleSelectAdvValue(val) {\n    const {\n      perPage, selectType, selectState, selectLabel, searchType\n    } = this.state;\n    if (val) {\n      this.setState({ page: 1, searchValue: val });\n      ReviewActions.getElements(selectType, selectState, selectLabel, searchType, val, 1, perPage);\n    }\n  }\n\n  handleElementSelection(t, event) {\n    const { perPage, searchType, selectLabel, searchValue } = this.state;\n    if (t === 'type') {\n      this.setState({ selectType: event });\n      ReviewActions.getElements(event, this.state.selectState, selectLabel, searchType, searchValue, 1, perPage);\n    } else if (t === 'state') {\n      this.setState({ selectState: event });\n      ReviewActions.getElements(this.state.selectType, event, selectLabel, searchType, searchValue, 1, perPage);\n    } else if (t === 'label') {\n      // this.setState({ selectState: event });\n      ReviewActions.getElements(this.state.selectType, this.state.selectState, event, searchType, searchValue, 1, perPage);\n    }\n  }\n\n  handleKeyDown(event) {\n    const {\n      perPage, selectType, selectState, selectLabel, searchType, searchValue\n    } = this.state;\n    switch (event.keyCode) {\n      case 13: // Enter\n        ReviewActions.getElements(selectType, selectState, selectLabel, searchType, searchValue, 1, perPage);\n        event.preventDefault();\n        break;\n      default:\n        break;\n    }\n  }\n\n  loadValuesByType(input) {\n    if (!input || input.length < 3) {\n      return Promise.resolve({ options: [] });\n    }\n    return RepositoryFetcher.fetchReviewSearchValues(this.state.searchType, input)\n      .then(res => ({\n        options: res.result\n          .map(u => ({\n            value: u.key,\n            name: u.name,\n            label: u.label\n          }))\n      })).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  renderMenuItems(t, elements) {\n    const menu = elements.map(element => (\n      <MenuItem key={element} onSelect={() => this.handleElementSelection(t, element)}>\n        {element}\n      </MenuItem>\n    ));\n    return menu;\n  }\n\n  renderSearch() {\n    const { searchType, searchValue, listTypeOptions, userLabel } = this.state;\n\n    const customClass = '.btn-unified';\n    const optSearchType = ['All', 'Samples', 'Reactions'];\n    const optSearchState = ['All', 'pending', 'reviewed', 'accepted'];\n\n    this.listOptions = [\n      { value: 'All', label: 'filter by' },\n      { value: 'Name', label: 'name' },\n      { value: 'Embargo', label: 'embargo' },\n      { value: 'Submitter', label: 'submitter' },\n    ];\n\n    const filterDropdown = (\n      <ButtonGroup className=\"home-search\" style={{ display: 'flex' }}>\n        <DropdownButton\n          className={customClass}\n          id=\"type-inner-dropdown\"\n          title={this.state.selectType === 'All' ? 'Type' : this.state.selectType}\n        >\n          {this.renderMenuItems('type', optSearchType)}\n        </DropdownButton>\n        <DropdownButton\n          className={customClass}\n          id=\"state-inner-dropdown\"\n          title={this.state.selectState}\n        >\n          {this.renderMenuItems('state', optSearchState)}\n        </DropdownButton>\n        <SearchUserLabels fnCb={this.setUserLabel} userLabel={userLabel} className={customClass} />\n      </ButtonGroup>\n    );\n\n    const searchTypeTbl = (\n      <Select\n        simpleValue\n        searchable={false}\n        options={this.listOptions}\n        placeholder=\"Select search field\"\n        clearable={false}\n        valueKey=\"value\"\n        labelKey=\"label\"\n        onChange={this.handleSelectType}\n        defaultValue=\"All\"\n        value={searchType}\n        className=\"o-author\"\n      />\n    );\n\n    let searchValueTbl = (<div />);\n    switch (searchType) {\n      case 'Embargo':\n      case 'Submitter':\n        searchValueTbl = (\n          <Select\n            simpleValue\n            searchable\n            options={listTypeOptions}\n            placeholder=\"Select...\"\n            valueKey=\"value\"\n            labelKey=\"label\"\n            onChange={this.handleSelectAdvValue}\n            value={searchValue}\n            className=\"o-name\"\n          />\n        );\n        break;\n      case 'Name':\n        searchValueTbl = (\n          <FormControl\n            type=\"text\"\n            placeholder=\"Name...\"\n            value={this.state.searchValue || ''}\n            onChange={event => this.handleSearchNameInput(event)}\n            onKeyDown={event => this.handleKeyDown(event)}\n          />\n        );\n        break;\n      default:\n        searchValueTbl = (<div />);\n    }\n\n    const searchTbl = (\n      <div className=\"home-adv-search\">\n        <div style={{ display: 'flex' }}>\n          { filterDropdown }\n          { searchTypeTbl }\n          { searchValueTbl }\n        </div>\n      </div>\n    );\n\n    return (\n      <div style={{ paddingLeft: '15px', marginTop: '8px', marginBottom: '8px' }}>\n        {searchTbl}\n      </div>\n    );\n  }\n\n  renderEmabrgoModal() {\n    const { showEmbargoModal, bundles, selectedElement, selectedEmbargo } = this.state;\n\n    const options = [\n      { value: '0', name: 'new', label: '--Create a new Embargo Bundle--' },\n    ];\n\n    bundles.forEach((col) => {\n      const tag = col.taggable_data || {};\n      options.push({ value: col.element_id, name: tag.label, label: tag.label });\n    });\n\n    const allBundles = filter(options, b => b.value !== (selectedEmbargo == null ? '' : selectedEmbargo.element_id));\n\n    const element = selectedElement || {};\n    return (\n      <Modal backdrop=\"static\" show={showEmbargoModal}>\n        <Modal.Header><Modal.Title>{element.type}: [{element.title}]</Modal.Title></Modal.Header>\n        <Modal.Body>\n          <Panel bsStyle=\"success\">\n            <Panel.Heading>\n              <Panel.Title>Movee {element.type} [{element.title}] to :</Panel.Title>\n            </Panel.Heading>\n            <Panel.Body>\n              <Select\n                value={this.state.selectedEmbargo}\n                onChange={e => this.setState({ selectedEmbargo: e })}\n                options={allBundles}\n                className=\"select-assign-collection\"\n              />\n              <br />\n              <ButtonToolbar>\n                <Button bsStyle=\"warning\" onClick={e => this.onEmbargoBtnClick(e, element)}>Cancel</Button>\n                <Button bsStyle=\"primary\" onClick={e => this.onEmbargoBtnSave(e, element)}>Move Embargoed Bundle</Button>\n              </ButtonToolbar>\n            </Panel.Body>\n          </Panel>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n\n  renderReviewModal() {\n    const { showReviewModal, reviewData, review_info, review, currentElement, elementType, btnAction } = this.state;\n    const obj = {};\n    obj['review_info'] = review_info;\n    obj['review'] = review;\n    obj['btnAction'] = btnAction;\n    obj['elementType'] = elementType;\n    if (elementType === 'sample') {\n      obj['elementId'] = currentElement?.sample?.id;\n    } else {\n      obj['elementId'] = currentElement?.reaction?.id;\n    }\n\n    return (\n      <RepoReviewModal\n        show={showReviewModal}\n        data={obj}\n        onSubmit={this.handleSubmitReview}\n        onUpdate={this.handleReviewUpdate}\n        onHide={() => this.setState({ showReviewModal: false })}\n      />\n    );\n  }\n\n  renderCommentModal() {\n    const { showCommentModal, review_info, review, currentElement, elementType, btnAction, field, orgInfo } = this.state;\n    const obj = {};\n    obj['review_info'] = review_info;\n    obj['field'] = field;\n    obj['orgInfo'] = orgInfo;\n    obj['review'] = review;\n    obj['btnAction'] = btnAction;\n    obj['elementType'] = elementType;\n    if (elementType === 'sample') {\n      obj['elementId'] = currentElement?.sample?.id;\n    } else {\n      obj['elementId'] = currentElement?.reaction?.id;\n    }\n\n    return (\n      <RepoCommentModal\n        show={showCommentModal}\n        data={obj}\n        onUpdate={this.handleCommentUpdate}\n        onHide={() => this.setState({ showCommentModal: false })}\n      />\n    );\n  }\n\n  render() {\n    const { elements, currentElement } = this.state;\n    const { currentUser } = UserStore.getState();\n    const embargoBtn = (element) => {\n      if (element.state === 'reviewed' && element.embargo === '' && element.submitter_id === currentUser.id) {\n        return (\n          <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"moveEmbargo\">Move to an embargoed bundle</Tooltip>}>\n            <Button bsSize=\"xsmall\" onClick={e => this.onEmbargoBtnClick(e, element)}><i className=\"fa fa-exchange\" aria-hidden=\"true\" /></Button>\n          </OverlayTrigger>\n        );\n      }\n      return null;\n    };\n    return (\n      <div>\n        <Row style={{ maxWidth: '2000px', margin: 'auto' }}>\n          <Col md={currentElement ? 4 : 12} >\n            <Navbar fluid className=\"navbar-custom\" style={{ marginBottom: '5px' }}>\n              {this.renderSearch()}\n              <div style={{ clear: 'both' }} />\n            </Navbar>\n            <div>\n              <div className=\"review-list\" style={{ backgroundColor: '#f5f5f5' }} >\n                <Table striped className=\"review-entries\">\n                  <tbody striped=\"true\" bordered=\"true\" hover=\"true\">\n                    {((typeof (elements) !== 'undefined' && elements) || []).map(r => renderElement(r, currentElement, embargoBtn(r))) }\n                  </tbody>\n                </Table>\n              </div>\n              <div className=\"list-container-bottom\">\n                <Row>\n                  <Col sm={8}>{this.pagination()}</Col>\n                  <Col sm={4}>{this.perPageInput()}</Col>\n                </Row>\n              </div>\n            </div>\n          </Col>\n          <Col className=\"review-element\" md={currentElement ? 8 : 0}>\n            <RepoReviewDetails />\n            {this.renderEmabrgoModal()}\n          </Col>\n        </Row>\n        {this.renderReviewModal()}\n        {this.renderCommentModal()}\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport { Col, Row, Panel } from 'react-bootstrap';\nimport { OrcidIcon } from 'src/repoHome/RepoCommon';\n\nfunction RepoAbout() {\n  const bodyStyle = {\n    maxHeight: 'calc(100vh - 262px)',\n    overflowY: 'auto',\n    backgroundColor: '#f5f5f5',\n    borderRadius: '6px',\n    padding: '30px',\n    textAlign: 'center',\n  };\n\n  return (\n    <Row style={{ maxWidth: '2000px', margin: 'auto' }}>\n      <Col md={2} />\n      <Col md={8}>\n        <Panel style={{ border: 'none' }}>\n          <Panel.Heading style={{ backgroundColor: 'white', border: 'none' }}>\n            <CardIcons />\n          </Panel.Heading>\n          <Panel.Body style={bodyStyle}>\n            <CardAbout />\n          </Panel.Body>\n        </Panel>\n      </Col>\n      <Col md={2} />\n    </Row>\n  );\n}\n\nfunction CardIcons() {\n  return (\n    <div className=\"card-icons\">\n      <Col md={4}>\n        <img\n          src=\"/images/repo/KIT.svg\"\n          alt=\"Karlsruhe Institute of Technology\"\n        />\n      </Col>\n      <Col md={4}>\n        <img src=\"/images/repo/Chemotion-V1.png\" alt=\"\" />\n      </Col>\n      <Col md={4}>\n        <img src=\"/images/repo/dfg_logo_schriftzug_blau.jpg\" alt=\"\" />\n      </Col>\n    </div>\n  );\n}\n\nfunction CardAbout() {\n  return (\n    <div>\n      <h4>\n        This development is part of the work of the Stefan Bräse group at the\n        KIT.\n      </h4>\n      <br />\n      <h2>Project description and mission</h2>\n      <div style={{ textAlign: 'justify' }}>\n        <p>\n          Chemotion Repository was developed as a freely available\n          infrastructure for the publication of research data in order to\n          increase the amount of available data and to improve the quality of\n          the information obtained and published.\n        </p>\n        <p>\n          The aim of Chemotion Repository is to make a substantial contribution\n          to securing research results in a cost-efficient and simple manner, to\n          support scientists, in particular chemists, in their efforts to\n          generate FAIR data and to increase the visibility of research data in\n          the domain of chemistry.\n        </p>\n        <p>\n          Free access to and free use of scientific data is one principle of\n          this project allowing and promoting collaborative work and scientific\n          exchange among scientists. We think that openly available data is the\n          prerequisite for better science in terms of more efficient and\n          sustainable work but also with respect to a faster progress of science\n          in general.\n        </p>\n        <p>\n          To date, a lot of research data in chemistry is not made available due\n          to technical limitations and missing infrastructure. Chemotion\n          repository can be used to overcome these limitations - providing an\n          option for the chemistry community to collect and share data on\n          chemical reactions and analytical data of chemical compounds. The\n          repository can be used to build data collections as an alternative to\n          commercial databases.\n        </p>\n        <p>\n          The mission of Chemotion Repository is supported by its host\n          institution KIT and the science data center MoMaF as well as the\n          National Research Data Infrastructure NFDI4Chem.\n        </p>\n      </div>\n      <br />\n      <h2>Chemotion Repository and related projects</h2>\n      <div style={{ textAlign: 'justify' }}>\n        <p>\n          Chemotion Repository is one of several projects that are built to\n          support research data management in chemistry. It can be used as stand\n          alone software for the publication of research data or it can be used\n          in combination with chemotion ELN (electronic lab notebook), an open\n          source software for the documentation of research data. Both system\n          are being developed on the same technological level which allows a\n          combination of recording and documentation as well as publication and\n          storage of data sets. The ELN enables a fast and easy transfer of\n          selected research data to the repository as a requirement for\n          efficient strategies for the publication of research data.\n        </p>\n      </div>\n      <br />\n      <h3>Karlsruhe Institute of Technology</h3>\n      <h3>Leader of the research group</h3>\n      <p>\n        <OrcidIcon orcid=\"0000-0003-4845-3191\" />\n        {' Prof. Stefan Bräse'}\n      </p>\n      <p>Institute of Organic Chemistry</p>\n      <p>Fritz-Haber-Weg 6, Building 30.42</p>\n      <p>76131 Karlsruhe </p>\n      <p>Germany</p>\n      <br />\n      <p>\n        Institute of Biological and Chemical Systems – Functional Molecular\n        Systems (IBCS-FMS)\n      </p>\n      <p>Hermann-von-Helmholtz-Platz 1, Building 341</p>\n      <p>76344 Eggenstein-Leopoldshafen</p>\n      <p>Germany</p>\n      <p>Phone: +49 721 608 42903</p>\n      <p>Fax: +49 721 608 48581</p>\n      <br />\n      <p />\n      <a\n        href=\"http://www.ioc.kit.edu/braese/\"\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n      >\n        Research Group Bräse{' '}\n        <i className=\"fa fa-external-link\" aria-hidden=\"true\" />\n      </a>\n      <br />\n      <h3>Office Campus North (KIT)</h3>\n      <p>\n        <OrcidIcon orcid=\"0000-0001-9513-2468\" />\n        {' Dr. Nicole Jung'}\n      </p>\n      <p>Institute of Organic Chemistry</p>\n      <p>\n        Institute of Biological and Chemical Systems – Functional Molecular\n        Systems (IBCS-FMS)\n      </p>\n      <p>Hermann-von-Helmholtz-Platz 1, Building 319</p>\n      <p>76344 Eggenstein-Leopoldshafen </p>\n      <p>Germany</p>\n      <p>Phone: +49 721 608 24697 </p>\n      <br />\n      <h3>Authors</h3>\n      <p>\n        {' '}\n        <OrcidIcon orcid=\"0000-0003-4845-3191\" />\n        {' Prof. Stefan Bräse'}\n      </p>\n      <p>\n        <OrcidIcon orcid=\"0000-0001-9513-2468\" />\n        {' Dr. Nicole Jung'}\n      </p>\n      <p>\n        <OrcidIcon orcid=\"0000-0002-0487-3947\" />\n        {' Dr. Pierre Tremouilhac '}\n        <OrcidIcon orcid=\"0000-0002-9976-4507\" />\n        {' Pei-Chi Huang '}\n        <OrcidIcon orcid=\"0000-0002-9772-0455\" />\n        {' Chia-Lin Lin '}\n        <OrcidIcon orcid=\"0000-0002-4261-9886\" />\n        {' Dr. Yu-Chieh Huang '}\n        <OrcidIcon orcid=\"0000-0002-1692-6778\" />\n        {' Dr. An Nguyen '}\n        <OrcidIcon orcid=\"0000-0002-5035-7978\" />\n        {' Dr. Felix Bach'}\n      </p>\n    </div>\n  );\n}\n\nexport default RepoAbout;\n","import React from 'react';\nimport { Well, Col, Row } from 'react-bootstrap';\n\nconst RepoContact = () => {\n  const cpmail = <span>nicole.jung<i className=\"fa fa-at\" aria-hidden=\"true\" />kit.edu</span>;\n  const institute = 'Institute of Biological and Chemical Systems – Functional Molecular Systems (IBCS-FMS)';\n  return (\n    <div >\n      <br /><br /><br />\n      <Well style={{ width: '90%', margin: 'auto' }}>\n        <Row>\n          <Col md={6}>\n            <table style={{ width: '80%', height: 400, margin: 'auto' }}>\n              <tbody>\n                <tr><td><h3>Complat</h3><br /><br /></td></tr>\n                <tr><td>{institute}</td></tr>\n                <tr><td>Hermann-von-Helmholtz-Platz 1</td></tr>\n                <tr><td>Building 341</td></tr>\n                <tr><td>76344 Eggenstein-Leopoldshafen</td></tr>\n                <tr><td>Germany<br /><br /></td></tr>\n                <tr><td><i className=\"fa fa-user\" aria-hidden=\"true\" /> Dr. Nicole Jung</td></tr>\n                <tr><td><i className=\"fa fa-phone\" aria-hidden=\"true\" /> +49 721 608 24697</td></tr>\n                <tr><td><i className=\"fa fa-envelope\" aria-hidden=\"true\" /> {cpmail}</td></tr>\n              </tbody>\n            </table>\n          </Col>\n          <Col md={6}>\n            <iframe\n              title=\"Complat location\"\n              src=\"https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2612.4795306481205!2d8.428392315993667!3d49.09652997931155!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x0!2zNDnCsDA1JzQ3LjUiTiA4wrAyNSc1MC4xIkU!5e0!3m2!1sde!2sde!4v1473947291352\"\n              style={{\n                width: '80%', height: 400, frameborder: '0', margin: 'auto'\n              }}\n            />\n          </Col>\n        </Row>\n      </Well>\n      <br /><br /><br />\n    </div>\n  );\n};\n\nexport default RepoContact;\n","import React, { useState, useEffect } from 'react';\nimport { Col, Row, Panel } from 'react-bootstrap';\nimport { Parser } from 'html-to-react';\n\nexport default function RepoDirective() {\n  const [content, setContent] = useState();\n\n  useEffect(() => {\n    fetch('/directives/directives.html', { credentials: 'same-origin' })\n      .then((res) => res.text())\n      .then((html) => {\n        setContent(Parser().parse(html));\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }, []);\n\n  return (\n    <Row style={{ maxWidth: '2000px', margin: 'auto' }}>\n      <Col md={2} />\n      <Col md={8}>\n        <Panel>\n          <Panel.Heading>\n            <Panel.Title>Directive to use the service</Panel.Title>\n          </Panel.Heading>\n          <Panel.Body\n            style={{ maxHeight: 'calc(100vh - 200px)', overflowY: 'auto' }}\n          >\n            {content}\n          </Panel.Body>\n        </Panel>\n      </Col>\n      <Col md={2} />\n    </Row>\n  );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Col, Row, Panel } from 'react-bootstrap';\nimport { Parser } from 'html-to-react';\n\nexport default function RepoPreservation() {\n  const [content, setContent] = useState();\n\n  useEffect(() => {\n    fetch('/preservation/strategy.html', { credentials: 'same-origin' })\n      .then(res => res.text())\n      .then(html => {\n        // const parser = new HtmlToReactParser();\n        setContent(Parser().parse(html));\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }, []);\n\n  return (\n    <Row style={{ maxWidth: '2000px', margin: 'auto' }}>\n      <Col md={2} />\n      <Col md={8}>\n        <Panel style={{ borderColor: 'unset' }}>\n          <Panel.Heading style={{ background: 'unset' }}>\n            <Panel.Title style={{ fontSize: '30px', fontWeight: 'bolder' }}>\n              Preservation Strategy\n            </Panel.Title>\n          </Panel.Heading>\n          <Panel.Body\n            style={{ maxHeight: 'calc(100vh - 220px)', overflowY: 'auto' }}\n          >\n            {content}\n          </Panel.Body>\n        </Panel>\n      </Col>\n      <Col md={2} />\n    </Row>\n  );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Col, Row, Panel } from 'react-bootstrap';\nimport { Parser } from 'html-to-react';\n\nexport default function RepoImprint() {\n  const [content, setContent] = useState();\n\n  useEffect(() => {\n    fetch('/legals/imprint.html', { credentials: 'same-origin' })\n      .then((res) => res.text())\n      .then((html) => {\n        setContent(Parser().parse(html));\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }, []);\n\n  return (\n    <Row style={{ maxWidth: '2000px', margin: 'auto' }}>\n      <Col md={2} />\n      <Col md={8}>\n        <Panel style={{ borderColor: 'unset' }}>\n          <Panel.Heading style={{ background: 'unset' }}>\n            <Panel.Title style={{ fontSize: '30px', fontWeight: 'bolder' }}>\n              Imprint\n            </Panel.Title>\n          </Panel.Heading>\n          <Panel.Body\n            style={{ maxHeight: 'calc(100vh - 220px)', overflowY: 'auto' }}\n          >\n            {content}\n          </Panel.Body>\n        </Panel>\n      </Col>\n      <Col md={2} />\n    </Row>\n  );\n}\n","import React from 'react';\nimport ContactEmail from 'src/components/chemrepo/core/ContactEmail';\n\nfunction BackSoonPage() {\n  return (\n    <div>\n      <h1>{`We'll be back soon!`}</h1>\n      <h3>\n        <i className=\"fa fa-cog fa-spin fa-5x\" />\n      </h3>\n      <h3>\n        {`Apologies for the inconvenience as we're currently undergoing maintenance.`}\n      </h3>\n      <h3>\n        If you need assistance, please feel free to <ContactEmail />\n        {`. Otherwise, we'll be back online shortly!`}\n      </h3>\n      <h4>&mdash; ComPlat Team</h4>\n    </div>\n  );\n}\n\nexport default BackSoonPage;\n","import React, { Component } from 'react';\nimport { Col, Row } from 'react-bootstrap';\nimport { orderBy, slice } from 'lodash';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport ArticleFetcher from 'src/repo/fetchers/ArticleFetcher';\nimport { DateFormatYMDLong } from 'src/repoHome/RepoCommon';\nimport BackSoonPage from 'src/components/chemrepo/BackSoonPage';\n\nconst renderEditRead = (article, isEditor) => {\n  if (isEditor === true) {\n    return (\n      <div className=\"readedit\">\n        <a style={{ cursor: 'pointer' }} onClick={() => Aviator.navigate(`/home/newseditor/${article.key}`)}><i className=\"fa fa-pencil\" />&nbsp;Edit&nbsp;</a>\n        <a style={{ cursor: 'pointer' }} onClick={() => Aviator.navigate(`/home/newsroom/${article.key}`)}><i className=\"fa fa-wpexplorer\" />&nbsp;Read more</a>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"readedit\">\n      <a style={{ cursor: 'pointer' }} onClick={() => Aviator.navigate(`/home/newsroom/${article.key}`)}><i className=\"fa fa-wpexplorer\" />&nbsp;Read more</a>\n    </div>\n  );\n};\n\n\nconst mainImage = (article) => {\n  let imageUrl = '/images/repo/news_cover.png';\n  if (typeof (article) !== 'undefined' && article\n   && typeof (article.cover_image) !== 'undefined' && article.cover_image) {\n    imageUrl = `/newsroom/${article.cover_image}`;\n  }\n  return (\n    <div style={{ maxWidth: '100%', height: 'auto' }}>\n      <img\n        src={imageUrl}\n        style={{\n          display: 'block',\n          width: '100%',\n          height: 'auto',\n        }}\n        alt=\"\"\n      />\n    </div>\n  );\n};\n\nexport default class RepoNewsroom extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      articles: PublicStore.getState().articles || [],\n      isEditor: false\n    };\n    this.onChange = this.onChange.bind(this);\n    this.initial = this.initial.bind(this);\n  }\n\n  componentDidMount() {\n    this.initial();\n    PublicStore.listen(this.onChange);\n    PublicActions.articles();\n  }\n\n  componentWillUnmount() {\n    PublicStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    if (state.articles) {\n      this.setState(prevState => ({\n        ...prevState, articles: state.articles\n      }));\n    }\n    if (state.isEditor) {\n      this.setState(prevState => ({\n        ...prevState, isEditor: state.isEditor\n      }));\n    }\n  }\n\n  initial() {\n    ArticleFetcher.initial()\n      .then((result) => {\n        this.setState({\n          isEditor: result.is_article_editor\n        });\n      });\n  }\n\n  render() {\n    let { articles } = this.state;\n    const { isEditor } = this.state;\n    articles = isEditor ? articles : articles.filter(d => new Date() > new Date(d.published_at));\n    articles = orderBy(\n      articles,\n      (o) => {\n        if (!o.published_at || o.published_at === '') return o.created_at;\n        return o.published_at;\n      },\n      'desc'\n    );\n\n    return articles.length > 0 ? (\n      <Row style={{ maxWidth: '2000px', margin: 'auto', minHeight: 'calc(80vh)' }}>\n        <Col md={12}>\n          <Row>\n            <Col md={2} />\n            <Col md={8} sm={12}>\n              <LatestNews article={articles[0]} isEditor={isEditor} />\n            </Col>\n            <Col md={2} />\n          </Row>\n          <NewsList articles={slice(articles, 1)} isEditor={isEditor} />\n        </Col>\n      </Row>\n    ) : <Row style={{ maxWidth: '2000px', margin: 'auto', textAlign: 'center', height: 'calc(80vh)' }}><Col md={12}><BackSoonPage /></Col></Row>;\n  }\n}\n\nconst LatestNews = ({ article, isEditor }) => {\n  return (\n    <div className=\"news_latest_block\">\n      <div className=\"ribbon ribbon-top-right\" style={{ right: '5px' }}><span>Latest</span></div>\n      <Col md={4} sm={12}>{mainImage(article)}</Col>\n      <Col md={8} sm={12}>\n        <Col md={12} sm={12}>\n          <span className=\"news_title\">{article.title}</span>\n          <div className=\"news_content\">\n            <p />\n            {article.firstParagraph}\n            <p />\n          </div>\n          <div>\n            {renderEditRead(article, isEditor)}\n          </div>\n        </Col>\n        <Col md={12} sm={12}>\n          <div className=\"heading_separator\" />\n          <div className=\"news_author\">\n            <i className=\"fa fa-user-circle\" aria-hidden=\"true\" />&nbsp;{article.creator_name}&nbsp;&nbsp;&nbsp;\n            <i className=\"fa fa-calendar\" aria-hidden=\"true\" />&nbsp;{DateFormatYMDLong(article.published_at ? article.published_at : article.created_at)}\n          </div>\n        </Col>\n      </Col>\n    </div>\n  );\n};\n\nconst NewsList = ({ articles, isEditor }) => {\n  return articles.length > 0 ? (\n    <Row>\n      <Col md={2} />\n      <Col md={8} sm={12}>\n        <Row>\n          <div className=\"news_time_box\">\n            {\n              articles.map(a => (<NewsTBox isEditor={isEditor} key={`news_col_${a.key}`} article={a} />))\n            }\n          </div>\n        </Row>\n      </Col>\n      <Col md={2} />\n    </Row>\n  ) : <div />;\n};\n\nconst NewsTBox = ({ article, isEditor }) => {\n  return (\n    <ul>\n      <li>\n        <span />\n        <div className=\"title\">{article.title}</div>\n        <div className=\"content\">{article.firstParagraph}</div>\n\n        <div className=\"author\">\n          <i className=\"fa fa-user-circle\" aria-hidden=\"true\" />&nbsp;<span>&nbsp;{article.creator_name}</span>\n          {renderEditRead(article, isEditor)}\n        </div>\n        <div className=\"created_at\">\n          <span><i className=\"fa fa-calendar\" />&nbsp;{DateFormatYMDLong(article.published_at ? article.published_at : article.created_at)}</span><span />\n        </div>\n      </li>\n    </ul>\n  );\n};\n","import React, { Component } from 'react';\nimport { Col, Row } from 'react-bootstrap';\nimport { orderBy } from 'lodash';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport ArticleFetcher from 'src/repo/fetchers/ArticleFetcher';\nimport { DateFormatYMDLong } from 'src/repoHome/RepoCommon';\nimport BackSoonPage from 'src/components/chemrepo/BackSoonPage';\n\nconst renderEditRead = (article, isEditor) => {\n  if (isEditor === true) {\n    return (\n      <div style={{ position: 'relative' }}>\n        <a style={{ cursor: 'pointer' }} onClick={() => Aviator.navigate(`/home/howtoeditor/${article.key}`)}><i className=\"fa fa-pencil\" />&nbsp;Edit&nbsp;</a>\n        <a style={{ cursor: 'pointer' }} onClick={() => Aviator.navigate(`/home/howto/${article.key}`) }><i className=\"fa fa-wpexplorer\" />&nbsp;Read more</a>\n      </div>\n    );\n  }\n\n  return (\n    <div style={{ position: 'relative' }}>\n      <a style={{ cursor: 'pointer' }} onClick={() => Aviator.navigate(`/home/howto/${article.key}`)}><i className=\"fa fa-wpexplorer\" />&nbsp;Read more</a>\n    </div>\n  );\n};\n\n\nconst mainImage = (howto) => {\n  let imageUrl = '';\n  if (typeof (howto) !== 'undefined' && howto\n    && typeof (howto.cover_image) !== 'undefined' && howto.cover_image) {\n    imageUrl = `/howto/${howto.cover_image}`;\n  }\n  return (\n    <div style={{ maxWidth: '100%', height: 'auto' }}>\n      {\n        imageUrl === '' ?\n          <div style={{ textAlign: 'center', width: '100%', height: 'auto', whiteSpace: 'nowrap' }}>\n            <i className=\"fa fa-quote-left fa-2x\" aria-hidden=\"true\" />\n            <span style={{ fontSize: '3em', fontWeight: 'bold' }}>&nbsp;HOW TO&nbsp;</span>\n            <i className=\"fa fa-quote-right fa-2x\" aria-hidden=\"true\" style={{ position: 'absolute' }} />\n          </div>\n          :\n          <img\n            src={imageUrl}\n            style={{\n              display: 'block',\n              width: '100%',\n              height: 'auto'\n            }}\n            alt=\"\"\n          />\n      }\n    </div>\n  );\n};\n\nexport default class RepoHowTo extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      howtos: PublicStore.getState().howtos || [],\n      isEditor: false\n    };\n    this.onChange = this.onChange.bind(this);\n    this.initial = this.initial.bind(this);\n  }\n\n  componentDidMount() {\n    this.initial();\n    PublicStore.listen(this.onChange);\n    PublicActions.howtos();\n  }\n\n  componentWillUnmount() {\n    PublicStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    if (state.howtos) {\n      this.setState(prevState => ({\n        ...prevState, howtos: state.howtos\n      }));\n    }\n    if (state.isEditor) {\n      this.setState(prevState => ({\n        ...prevState, isEditor: state.isEditor\n      }));\n    }\n  }\n\n  initial() {\n    ArticleFetcher.initialHowTo()\n      .then((result) => {\n        this.setState({\n          isEditor: result.is_howto_editor\n        });\n      });\n  }\n\n  render() {\n    let { howtos } = this.state;\n    const { isEditor } = this.state;\n    howtos = isEditor ? howtos : howtos.filter(d => new Date() > new Date(d.published_at));\n    howtos = orderBy(\n      howtos,\n      (o) => {\n        if (!o.published_at || o.published_at === '') return o.created_at;\n        return o.published_at;\n      },\n      'desc'\n    );\n\n    return howtos.length > 0 ? (\n      <Row className=\"howto_page\">\n        <Col lg={12} md={12}>\n          <NewsList howtos={howtos} isEditor={isEditor} />\n        </Col>\n      </Row>\n    ) :\n      <Row className=\"howto_page\" style={{ textAlign: 'center' }}>\n        <Col md={12}>\n          <BackSoonPage />\n        </Col>\n      </Row>;\n  }\n}\n\nconst NewsColSmall = (param) => {\n  const { howto, isEditor } = param;\n  return (\n    <Col lg={12} md={12} sm={12} className=\"news_column\">\n      <div className=\"news_card_content\">\n        <div className=\"news_card_s\">\n          <Col md={4} sm={12}>{mainImage(howto)}</Col>\n          <Col md={8} sm={12}>\n            <div className=\"card_info\">\n              <div className=\"info\">\n                <h1 style={{ overflow: 'hidden', textOverflow: 'ellipsis', maxHeight: '50px' }}>{howto.title}</h1>\n                <div className=\"news_content_card_s\">\n                  <p />\n                  {howto.firstParagraph}\n                  <p />\n                </div>\n              </div>\n            </div>\n            <div className=\"read\">\n              {renderEditRead(howto, isEditor)}\n            </div>\n          </Col>\n        </div>\n        <div className=\"news_card_badge_s\">\n          <i className=\"fa fa-user-circle\" aria-hidden=\"true\" />&nbsp;<span>{howto.creator_name}</span>&nbsp;\n          <i className=\"fa fa-calendar\" aria-hidden=\"true\" />&nbsp;<span>Published on {DateFormatYMDLong(howto.published_at ? howto.published_at : howto.created_at)}</span>\n          <span>, updated on {DateFormatYMDLong(howto.updated_at ? howto.updated_at : howto.published_at)}</span>\n        </div>\n      </div>\n    </Col>\n  );\n};\n\nconst NewsList = (param) => {\n  const { howtos } = param;\n  return howtos.length > 0 ? (\n    <Row>\n      <Col md={1} />\n      <Col md={10} sm={12} style={{ display: 'flex', flexDirection: 'column' }}>\n        <Row>\n          {\n            howtos.map(a => (<NewsColSmall isEditor={param.isEditor} key={`news_col_${a.key}`} howto={a} />))\n          }\n        </Row>\n      </Col>\n      <Col md={1} />\n    </Row>\n  ) : <div />;\n};\n\n","import Aviator from 'aviator';\nimport alt from 'src/stores/alt/alt';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\nimport EmbargoActions from 'src/stores/alt/repo/actions/EmbargoActions';\n\nclass RStore {\n  constructor() {\n    this.bindListeners({\n      navigateReview: [ReviewActions.displayReviewSample, ReviewActions.displayReviewReaction],\n      navigateEmbargoReview: [EmbargoActions.displayReviewEmbargo],\n    });\n  }\n\n  navigate(page, result) {\n    const elementType = (result.element.sample ? 'sample' : 'reaction');\n    const subPage = page === 'embargo' ? elementType : `review_${elementType}`;\n    if (result.element && result.element?.review_info?.review_level === 0) {\n      Aviator.navigate('/home');\n    } else {\n      this.setState({ guestPage: page });\n      Aviator.navigate(`/${page}/${subPage}/${result.id}`, { silent: true });\n    }\n  }\n\n  navigateEmbargoReview(result) {\n    this.navigate('embargo', result);\n  }\n\n  navigateReview(result) {\n    this.navigate('review', result);\n  }\n}\n\nexport default alt.createStore(RStore, 'RStore');\n","import React from 'react';\nimport { Button } from 'react-bootstrap';\nimport ContactEmail from 'src/components/chemrepo/core/ContactEmail';\n\nfunction RepoGenericHubDesc() {\n  return (\n    <div className=\"repo-generic-hub-desc\">\n      <h1>\n        LabIMotion Template Hub\n        <span className=\"contact\">\n          <ContactEmail\n            email=\"chemotion-labimotion@lists.kit.edu\"\n            label=\"Send feedback about LabIMotion\"\n          />\n        </span>\n        <span className=\"contact\">\n          <Button\n            bsSize=\"small\"\n            onClick={() => {\n              window.open(\n                'https://www.chemotion.net/docs/labimotion',\n                '_blank'\n              );\n            }}\n          >\n            <i className=\"fa fa-book\" aria-hidden=\"true\" />\n            &nbsp;LabIMotion Docs\n          </Button>\n        </span>\n      </h1>\n      <h3>\n        Welcome to the <b>LabIMotion Template Hub</b>, your platform for sharing\n        new elements, segments, and datasets templates.\n      </h3>\n      <br />\n      <h3>Getting Started: Selecting a Template</h3>\n      <p>\n        The templates are conveniently displayed in a grid layout. You can:{' '}\n      </p>\n      <h5>\n        <p>\n          <i className=\"fa fa-check\" aria-hidden=\"true\" />\n          &nbsp;<b>Sort</b> the grid by clicking on the column headers.{' '}\n        </p>\n        <p>\n          <i className=\"fa fa-check\" aria-hidden=\"true\" />\n          &nbsp;<b>Filter</b> the grid by clicking on the filter icon{' '}\n          <span className=\"download\">\n            <i className=\"fa fa-bars\" aria-hidden=\"true\" />\n          </span>{' '}\n          located at the right of the column headers.{' '}\n        </p>\n        <p>\n          <i className=\"fa fa-check\" aria-hidden=\"true\" />\n          &nbsp;<b>Download</b> a specific template by clicking on the button{' '}\n          <span className=\"download\">\n            <i className=\"fa fa-download\" aria-hidden=\"true\" />\n            &nbsp;Download\n          </span>\n          .{' '}\n        </p>\n      </h5>\n      <h3>\n        Now, let&apos;s get started. Choose the template you need and begin the\n        download process.\n      </h3>\n    </div>\n  );\n}\n\nexport default RepoGenericHubDesc;\n","import React, { useState } from 'react';\nimport { Button, ButtonGroup, Col, Row } from 'react-bootstrap';\nimport { GenGridBase } from 'chem-generic-ui-viewer';\nimport GenericBaseFetcher from 'src/fetchers/GenericBaseFetcher';\nimport Utils from 'src/utilities/Functions';\nimport RepoGenericHubDesc from 'src/repoHome/RepoGenericHubDesc';\nimport { capitalizeFirstLetter } from 'src/components/chemrepo/format-utils';\n\nconst getCurrentDateTimeString = () => {\n  const now = new Date();\n  const year = now.getFullYear();\n  const month = String(now.getMonth() + 1).padStart(2, '0'); // Month is zero-based, so we add 1 and pad with leading zero if needed.\n  const day = String(now.getDate()).padStart(2, '0');\n  const hours = String(now.getHours()).padStart(2, '0');\n  const minutes = String(now.getMinutes()).padStart(2, '0');\n  const seconds = String(now.getSeconds()).padStart(2, '0');\n\n  return `${year}-${month}-${day}_${hours}-${minutes}-${seconds}`;\n};\n\nconst downloadFile = (data, filename) => {\n  const href = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(data))}`;\n  Utils.downloadFile({ contents: href, name: `${filename}_${getCurrentDateTimeString()}.json` });\n};\n\nconst RepoGenericHub = () => {\n  const [state, setState] = useState({\n    menuSelected: '',\n    gridData: [],\n  });\n\n  const { menuSelected, gridData } = state;\n\n  const TemplateRenderer = (params) => {\n    const {\n      node, downloadName\n    } = params;\n    const onShow = () => {\n      node.setSelected(true, true);\n      downloadFile(\n        node.data.properties_release || {}\n        , `${downloadName}_${node.data.label || ''}_${node.data.identifier || ''}`\n      );\n    };\n\n    return (\n      <span>\n        <Button onClick={onShow}><i className=\"fa fa-download\" aria-hidden=\"true\" />&nbsp;Download</Button>\n      </span>\n    );\n  };\n\n  const BelongsToRenderer = (params) => {\n    const { data } = params;\n    return (\n      <>\n        {data.element_klass?.label}\n        &nbsp;\n        <i className={data.element_klass?.icon_name} aria-hidden=\"true\" />\n      </>\n    );\n  };\n\n  const IconRenderer = (params) => {\n    const { value, iconStyle } = params;\n    return <i className={value} aria-hidden=\"true\" style={iconStyle || { color: 'black' }} />;\n  };\n\n  const elColumnDefs = [\n    {\n      field: 'name',\n      minWidth: 170,\n    },\n    { headerName: 'Prefix', width: 80, minWidth: 80, field: 'klass_prefix' },\n    { headerName: 'Element label', field: 'label' },\n    {\n      headerName: 'Icon',\n      field: 'icon_name',\n      minWidth: 80,\n      width: 80,\n      sortable: false,\n      filter: false,\n      cellRenderer: IconRenderer,\n    },\n    { headerName: 'Description', field: 'desc' },\n    { headerName: 'Version', width: 80, minWidth: 80, field: 'version' },\n    { headerName: 'Released at', field: 'released_at' },\n    { headerName: 'Id', field: 'uuid' },\n    {\n      headerName: 'Template',\n      cellRenderer: TemplateRenderer,\n      cellRendererParams: { downloadName: `Generic ${capitalizeFirstLetter(menuSelected)} Template` },\n      sortable: false,\n      filter: false,\n    },\n  ];\n\n  const sgColumnDefs = [\n    { headerName: 'Segment label', field: 'label' },\n    { headerName: 'Description', field: 'desc' },\n    {\n      headerName: 'Belongs to',\n      field: 'element_klass.name',\n      minWidth: 80,\n      cellRenderer: BelongsToRenderer,\n    },\n    { headerName: 'Version', width: 80, minWidth: 80, field: 'version' },\n    { headerName: 'Released at', field: 'released_at' },\n    { headerName: 'Id', field: 'uuid' },\n    {\n      headerName: 'Template',\n      cellRenderer: TemplateRenderer,\n      cellRendererParams: { downloadName: `Generic ${capitalizeFirstLetter(menuSelected)} Template` },\n      sortable: false,\n      filter: false,\n    },\n  ];\n\n  const dsColumnDefs = [\n    {\n      hide: true,\n      headerName: '#',\n      valueFormatter: params => `${parseInt(params.node.id, 10) + 1}`,\n      sortable: false,\n    },\n    {\n      headerName: 'Chemical Methods Ontology', field: 'label', minWidth: 350,\n    },\n    { headerName: 'Version', width: 80, minWidth: 80, field: 'version' },\n    { headerName: 'Released at', field: 'released_at' },\n    { headerName: 'Id', field: 'uuid' },\n    {\n      headerName: 'Template',\n      cellRenderer: TemplateRenderer,\n      cellRendererParams: { downloadName: `Generic ${capitalizeFirstLetter(menuSelected)} Template` },\n      sortable: false,\n      filter: false,\n    },\n  ];\n\n\n  const columnDefs = {\n    element: elColumnDefs,\n    segment: sgColumnDefs,\n    dataset: dsColumnDefs,\n  };\n\n  const clickMenu = (e, type) => {\n    e.stopPropagation();\n    GenericBaseFetcher.open(`list?klass=${capitalizeFirstLetter(type)}Klass&with_props=true`, 'GET')\n      .then((result) => {\n        setState({ ...state, menuSelected: type, gridData: result?.list || [] });\n      })\n      .catch((error) => {\n        console.error('Error fetching dataset klasses:', error);\n        setState({ ...state, menuSelected: type, gridData: [] });\n      });\n  };\n\n  return (\n    <Row className=\"repo-welcome\">\n      <Col lg={12} md={12} sm={12}>\n        <div className=\"repo-generic-hub-layout\">\n          <div className=\"repo-generic-hub-inner\">\n            <div className=\"content\">\n              <RepoGenericHubDesc />\n              <ButtonGroup>\n                <Button className=\"hub-menu\" active={menuSelected === 'element'} onClick={e => clickMenu(e, 'element')}>Generic Element Template</Button>\n                <Button className=\"hub-menu\" active={menuSelected === 'segment'} onClick={e => clickMenu(e, 'segment')}>Generic Segment Template</Button>\n                <Button className=\"hub-menu\" active={menuSelected === 'dataset'} onClick={e => clickMenu(e, 'dataset')}>Generic Dataset Template</Button>\n              </ButtonGroup>\n              {\n                menuSelected && (\n                  <div style={{ flex: '1', margin: '0px 15px 15px 15px' }}>\n                    <h3>{menuSelected ? `Generic ${capitalizeFirstLetter(menuSelected)} Template` : ''}</h3>\n                    <div>\n                      <GenGridBase columnDefs={columnDefs[menuSelected]} rowData={gridData} />\n                    </div>\n                  </div>\n                )\n              }\n            </div>\n          </div>\n        </div>\n      </Col>\n    </Row>\n  );\n};\n\nexport default RepoGenericHub;\n","/* eslint-disable no-underscore-dangle */\nconst embedMatomo = () => {\n  const matomoUrl = process.env.MATOMO_URL || 'https://subsys.chemotion-repository.net/js/container_G3PH9NrK.js';\n  if (matomoUrl) {\n    if (!window._mtm) {\n      window._mtm = [];\n    }\n    const mtm = window._mtm;\n    mtm.push({ 'mtm.startTime': new Date().getTime(), event: 'mtm.Start' });\n    const g = document.createElement('script');\n    const s = document.getElementsByTagName('script')[0];\n    g.async = true;\n    g.src = matomoUrl;\n    s.parentNode.insertBefore(g, s);\n  }\n};\n\nexport default embedMatomo;\n","import Aviator from 'aviator';\nimport React from 'react';\nimport { Nav, NavItem } from 'react-bootstrap';\n\nfunction NavFooter() {\n  const navItems = [\n    { key: 'home', label: 'Home', path: '/home', eventKey: '21' },\n    {\n      key: 'publications',\n      label: 'Publications',\n      path: '/home/publications',\n      eventKey: '22',\n    },\n    { key: 'about', label: 'About', path: '/home/about', eventKey: '23' },\n    {\n      key: 'directive',\n      label: 'Directive',\n      path: '/home/directive',\n      eventKey: '24',\n    },\n    {\n      key: 'preservation',\n      label: 'Preservation Strategy',\n      path: '/home/preservation',\n      eventKey: '25',\n    },\n    { key: 'imprint', label: 'Imprint', path: '/home/imprint', eventKey: '26' },\n  ];\n\n  const handleNavigation = path => {\n    Aviator.navigate(path);\n  };\n\n  return (\n    <Nav justified style={{ margin: 0 }}>\n      {navItems.map(item => (\n        <NavItem\n          key={item.key}\n          eventKey={item.eventKey}\n          role=\"button\"\n          tabIndex={0}\n          onClick={() => handleNavigation(item.path)}\n        >\n          {item.label}\n        </NavItem>\n      ))}\n    </Nav>\n  );\n}\n\nexport default NavFooter;\n","import React from 'react';\nimport NavFooter from 'src/libHome/NavFooter';\n\nfunction Footer() {\n  return (\n    <footer\n      style={{\n        position: 'fixed',\n        bottom: '0',\n        left: '0',\n        right: '0',\n        zIndex: '1000',\n        backgroundColor: 'white',\n        minHeight: '20px',\n        display: 'flex',\n        fontSize: '12px',\n      }}\n    >\n      <NavFooter />\n    </footer>\n  );\n}\n\nexport default Footer;\n","import React, { useState, useEffect } from 'react';\nimport { Button } from 'react-bootstrap';\nimport ContactEmail from 'src/components/chemrepo/core/ContactEmail';\n\nconst sessSysInfoClosed = 'infoBarClosed';\nconst infoLink = (href, text) => {\n  return (\n    <a\n      href={href}\n      target=\"_blank\"\n      rel=\"noreferrer\"\n      style={{ color: '#1890ff' }}\n    >\n      {text}\n    </a>\n  );\n};\n\nfunction SysInfo() {\n  const [show, setShow] = useState(true);\n\n  useEffect(() => {\n    const closed = sessionStorage.getItem(sessSysInfoClosed);\n    if (closed === 'true') {\n      setShow(false);\n    }\n  }, []);\n\n  const handleClose = () => {\n    setShow(false);\n    sessionStorage.setItem(sessSysInfoClosed, 'true');\n  };\n\n  return (\n    show && (\n      <div\n        role=\"alert\"\n        className=\"alert alert-info\"\n        style={{ marginBottom: 'unset' }}\n      >\n        <div style={{ width: '100%', display: 'flex', alignItems: 'center' }}>\n          <i\n            className=\"fa fa-bullhorn\"\n            aria-hidden=\"true\"\n            style={{ marginRight: '10px' }}\n          >\n            {' '}\n            &#41;&#41;&#41;\n          </i>\n          <div\n            style={{\n              display: 'flex',\n              flexGrow: '1',\n              marginRight: '20px',\n            }}\n          >\n            <div style={{ flexGrow: '1', fontWeight: 'bold' }}>\n              <span>\n                New to the Repository? Check the{' '}\n                {infoLink(\n                  'https://chemotion.net/docs/repo/settings_preparation',\n                  'Settings and Preparation'\n                )}{' '}\n                guide.{' '}\n              </span>\n              <span>\n                Starting your research? Review our{' '}\n                {infoLink(\n                  'https://www.chemotion.net/docs/repo/workflow/new',\n                  'How to provide data'\n                )}{' '}\n                instructions.{' '}\n              </span>\n              <span>\n                Learn more in{' '}\n                {infoLink('https://www.chemotion.net/docs/repo', 'How-To')}{' '}\n                section, and feel free to reach out via{' '}\n                <ContactEmail label=\"\" size=\"xs\" />\n                {' or '}\n                <Button\n                  bsSize=\"xs\"\n                  onClick={() =>\n                    window.open(\n                      'https://github.com/ComPlat/chemotion_REPO',\n                      '_blank'\n                    )\n                  }\n                >\n                  <img\n                    src=\"/images/repo/mark-github.svg\"\n                    className=\"pubchem-logo\"\n                    alt=\"Chemotion Repository at GitHub\"\n                    title=\"Chemotion Repository at GitHub\"\n                  />\n                </Button>\n              </span>\n            </div>\n            <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n              <Button bsSize=\"xs\" bsStyle=\"info\" onClick={handleClose}>\n                Close\n              </Button>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  );\n}\n\nexport default SysInfo;\n","import React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Grid, Row } from 'react-bootstrap';\nimport Aviator from 'aviator';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport initPublicRoutes from 'src/libHome/homeRoutes';\nimport Navigation from 'src/libHome/Navigation';\nimport Notifications from 'src/components/Notifications';\nimport RepoEmbargo from 'src/repoHome/RepoEmbargo';\nimport RepoCollection from 'src/repoHome/RepoCollection';\nimport RepoHome from 'src/repoHome/RepoHome';\nimport RepoPubl from 'src/repoHome/RepoPubl';\nimport RepoReview from 'src/repoHome/RepoReview';\nimport RepoAbout from 'src/repoHome/RepoAbout';\nimport RepoContact from 'src/repoHome/RepoContact';\nimport RepoDirective from 'src/repoHome/RepoDirective';\nimport RepoPreservation from 'src/repoHome/RepoPreservation';\nimport RepoImprint from 'src/repoHome/RepoImprint';\nimport RepoNewsroom from 'src/repoHome/RepoNewsroom';\nimport RepoNewsReader from 'src/repoHome/RepoNewsReader';\nimport RepoNewsEditor from 'src/repoHome/RepoNewsEditor';\nimport RepoHowTo from 'src/repoHome/RepoHowTo';\nimport RepoHowToReader from 'src/repoHome/RepoHowToReader';\nimport RepoHowToEditor from 'src/repoHome/RepoHowToEditor';\n\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport RStore from 'src/stores/alt/repo/stores/RStore';\nimport RepoElementDetails from 'src/repoHome/RepoElementDetails';\nimport LoadingModal from 'src/components/common/LoadingModal';\n\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport RepoGenericHub from 'src/repoHome/RepoGenericHub';\n\nimport embedMatomo from 'src/components/chemrepo/matomo';\nimport Footer from 'src/components/chemrepo/Footer';\nimport SysInfo from 'src/components/chemrepo/SysInfo';\n\nclass Home extends Component {\n  constructor(props) {\n    super();\n    this.state = {\n      guestPage: null,\n    };\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    embedMatomo();\n    PublicStore.listen(this.onChange);\n    RStore.listen(this.onChange);\n    PublicActions.initialize();\n    PublicActions.fetchOlsChmo();\n  }\n\n  componentWillUnmount() {\n    PublicStore.unlisten(this.onChange);\n    RStore.unlisten(this.onChange);\n  }\n\n  onChange(publicState) {\n    const { guestPage, listType } = this.state;\n    if (\n      (publicState.guestPage && publicState.guestPage !== guestPage) ||\n      (publicState.listType && publicState.listType !== listType) ||\n      publicState.searchOptions\n    ) {\n      this.setState(prevState => ({\n        ...prevState,\n        guestPage: publicState.guestPage,\n        listType: publicState.listType,\n      }));\n    }\n  }\n\n  renderGuestPage() {\n    const { guestPage, listType } = this.state;\n    switch (guestPage) {\n      case 'genericHub':\n        return <RepoGenericHub />;\n      case 'moleculeArchive':\n        return <RepoPubl listType=\"moleculeArchive\" />;\n      case 'newseditor':\n        return <RepoNewsEditor />;\n      case 'newsreader':\n        return <RepoNewsReader />;\n      case 'newsroom':\n        return <RepoNewsroom />;\n      case 'howtoeditor':\n        return <RepoHowToEditor />;\n      case 'howtoreader':\n        return <RepoHowToReader />;\n      case 'howto':\n        return <RepoHowTo />;\n      case 'about':\n        return <RepoAbout />;\n      case 'contact':\n        return <RepoContact />;\n      case 'publications':\n        return <RepoPubl listType={listType || ''} />;\n      case 'review':\n        return <RepoReview />;\n      case 'collection':\n        return <RepoCollection />;\n      case 'embargo':\n        return <RepoEmbargo />;\n      case 'dataset':\n      case 'molecule':\n        return <RepoElementDetails />;\n      case 'home':\n        return <RepoHome />;\n      case 'welcome':\n        return <RepoHome />;\n      case 'directive':\n        return <RepoDirective />;\n      case 'preservation':\n        return <RepoPreservation />;\n      case 'imprint':\n        return <RepoImprint />;\n      default:\n        return <RepoHome />;\n    }\n  }\n\n  render() {\n    return (\n      <div>\n        <SysInfo />\n        <div>\n          <Grid fluid>\n            <Row className=\"card-navigation\">\n              <Navigation />\n              <Notifications />\n            </Row>\n            <Row style={{ margin: '10px', paddingBottom: '10px' }}>\n              {this.renderGuestPage()}\n            </Row>\n          </Grid>\n        </div>\n        <Footer />\n        <LoadingModal />\n      </div>\n    );\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('Home');\n  if (domElement) {\n    ReactDOM.render(\n      <DndProvider backend={HTML5Backend}>\n        <Home />\n      </DndProvider>,\n      domElement\n    );\n    initPublicRoutes();\n    Aviator.dispatch();\n  }\n});\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport SVG from 'react-inlinesvg';\nimport { Col, Panel, Button, Row, FormControl, Table, Popover, ButtonGroup, Modal, OverlayTrigger, Tooltip, Form, FormGroup, InputGroup } from 'react-bootstrap';\nimport { findIndex } from 'lodash';\n\nimport MoleculesFetcher from 'src/fetchers/MoleculesFetcher';\nimport StructureEditorModal from 'src/components/structureEditor/StructureEditorModal';\n\nexport default class MoleculeModeratorComponent extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      show: false,\n      isNew: false,\n      molName: {},\n      molNames: (this.props.molecule && this.props.molecule.molecule_names) || []\n    };\n    this.handleStructureEditorSave = this.handleStructureEditorSave.bind(this);\n    this.handleStructureEditorCancel = this.handleStructureEditorCancel.bind(this);\n    this.handleSave = this.handleSave.bind(this);\n    this.confirmDelete = this.confirmDelete.bind(this);\n    this.handleShowModal = this.handleShowModal.bind(this);\n    this.handleCloseModal = this.handleCloseModal.bind(this);\n    this.onSaveName = this.onSaveName.bind(this);\n    this.onAddName = this.onAddName.bind(this);\n  }\n\n\n  componentDidUpdate(prevProps) {\n    if (this.props !== prevProps) {\n      // eslint-disable-next-line react/no-did-update-set-state\n      this.setState({\n        molNames: (this.props.molecule && this.props.molecule.molecule_names) || []\n      });\n    }\n  }\n  onAddName() {\n    const molName = {\n      id: -1,\n      description: 'defined by user',\n      name: ''\n    };\n    this.setState({\n      molName,\n      isNew: true,\n      show: true\n    });\n  }\n\n  onSaveName() {\n    const { molecule } = this.props;\n    const { molNames, molName, isNew } = this.state;\n\n    const name = this.m_name.value.trim();\n    if (name == '') {\n      // eslint-disable-next-line no-alert\n      alert('Please input name!');\n      return false;\n    }\n\n    molName.name = name;\n\n    const params = {\n      id: molecule.id,\n      name_id: molName.id,\n      description: molName.description,\n      name\n    };\n\n    MoleculesFetcher.saveMoleculeName(params).then((result) => {\n      if (result.error) {\n        console.log(result);\n        alert(result.error);\n      } else {\n        if (isNew == true) {\n          molNames.push(result);\n        } else {\n          const idx = findIndex(molNames, o => o.id === molName.id);\n          molNames.splice(idx, 1, molName);\n        }\n        this.setState({\n          show: false,\n          molNames\n        });\n      }\n    });\n    return true;\n  }\n\n  handleStructureEditorCancel() {\n    this.props.handleEditor(false);\n  }\n\n  handleStructureEditorSave(molfile, svg_file = null, config = null) {\n    this.props.handleEditorSave(molfile, svg_file, config);\n  }\n\n  handleSave() {\n    this.props.onSave();\n  }\n\n  handleShowModal(nameObj, isNew = false) {\n    this.setState({\n      show: true,\n      isNew,\n      molName: nameObj\n    });\n  }\n\n  handleCloseModal() {\n    this.setState({\n      show: false\n    });\n  }\n\n  confirmDelete(nameObj) {\n    const { molNames } = this.state;\n    const params = { id: nameObj.id };\n    MoleculesFetcher.deleteMoleculeName(params).then((result) => {\n      if (result.error) {\n        console.log(result);\n        alert(result.error);\n      } else {\n        const idx = findIndex(molNames, o => o.id === nameObj.id);\n        molNames.splice(idx, 1);\n        this.setState({\n          molNames\n        });\n      }\n    });\n  }\n\n  renderDeleteButton(nameObj) {\n    const popover = (\n      <Popover id=\"popover-positioned-scrolling-left\">\n        delete this molecule name <br />\n        <div className=\"btn-toolbar\">\n          <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.confirmDelete(nameObj)}>\n            Yes\n          </Button><span>&nbsp;&nbsp;</span>\n          <Button bsSize=\"xsmall\" bsStyle=\"warning\" onClick={this.handleClick} >\n            No\n          </Button>\n        </div>\n      </Popover>\n    );\n\n    return (\n      <ButtonGroup className=\"actions\">\n        <OverlayTrigger\n          animation\n          placement=\"right\"\n          root\n          trigger=\"focus\"\n          overlay={popover}\n        >\n          <Button bsSize=\"xsmall\" bsStyle=\"danger\" >\n            <i className=\"fa fa-trash-o\" />\n          </Button>\n        </OverlayTrigger>\n      </ButtonGroup>\n    );\n  }\n\n\n  renderEditButton(nameObj) {\n    return (\n      <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"groupUsersAdd\">Edit molecule name</Tooltip>}>\n        <Button bsSize=\"xsmall\" bsStyle=\"primary\" type=\"button\" onClick={() => this.handleShowModal(nameObj)} >\n          <i className=\"fa fa-pencil-square-o\" />\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n\n\n  renderModal() {\n    const { show, isNew, molName } = this.state;\n    return (\n      <Modal show={show} onHide={this.handleCloseModal}>\n        <Modal.Header closeButton>\n          <Modal.Title>{isNew ? 'Create Molecule Name' : 'Edit Molecule Name'}</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <Panel bsStyle=\"success\">\n            <Panel.Heading>\n              <Panel.Title>\n                {isNew ? 'Create Molecule Name' : 'Edit Molecule Name'}\n              </Panel.Title>\n            </Panel.Heading>\n            <Panel.Body>\n              <Form horizontal className=\"input-form\">\n                <FormGroup controlId=\"formControlId\">\n                  <InputGroup>\n                    <InputGroup.Addon>Attr.</InputGroup.Addon>\n                    <FormControl type=\"text\" defaultValue={molName.description} readOnly />\n                  </InputGroup>\n                </FormGroup>\n                <FormGroup controlId=\"formControlName\">\n                  <InputGroup>\n                    <InputGroup.Addon>Molecule name</InputGroup.Addon>\n                    <FormControl type=\"text\" defaultValue={molName.name} inputRef={(ref) => { this.m_name = ref; }} />\n                  </InputGroup>\n                </FormGroup>\n              </Form>\n              <Button bsSize=\"small\" type=\"button\" bsStyle=\"warning\" onClick={() => this.onSaveName()}>Save</Button>\n            </Panel.Body>\n          </Panel>\n        </Modal.Body>\n\n      </Modal>\n    );\n  }\n\n  render() {\n    const { molNames } = this.state;\n    const componentEditor = (\n      <div className=\"search-structure-draw\">\n        <StructureEditorModal\n          showModal={this.props.showStructureEditor}\n          onSave={this.handleStructureEditorSave}\n          onCancel={this.handleStructureEditorCancel}\n          molfile={this.props.molecule.molfile}\n        />\n      </div>\n    );\n\n    const tbodyHeader = (\n      <thead>\n        <tr>\n          <td width=\"5%\">#</td>\n          <td width=\"15%\">Action &nbsp;\n            <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"groupUsersAdd\">Add new molecule name</Tooltip>}>\n              <Button bsSize=\"xsmall\" bsStyle=\"success\" onClick={() => this.onAddName()}>\n                <i className=\"fa fa-plus\" />\n              </Button>\n            </OverlayTrigger>\n          </td>\n          <td width=\"20%\">Attr.</td>\n          <td width=\"60%\">Moledule Name</td>\n        </tr>\n      </thead>\n    );\n\n    const tbodyContent = molNames.map((na, i) => (\n      <tr key={`row_${na.id}`} id={`row_${na.id}`}>\n        <td>{i + 1}</td>\n        <td>\n          {this.renderDeleteButton(na)}\n          &nbsp;\n          {this.renderEditButton(na)}\n        </td>\n        <td>{na.description}</td>\n        <td>{na.name}</td>\n      </tr>\n    ));\n\n    return (\n      <div>\n        {componentEditor}\n        <div className=\"container\">\n          <Panel>\n            <Panel.Heading>\n              <b>InChIKey:</b>&nbsp;{this.props.molecule.inchikey}\n              &nbsp;(<b>Chemotion molecule id:</b>&nbsp;{this.props.molecule.id})\n              <br />\n              <b>Canonical SMILES:</b>&nbsp;{this.props.molecule.cano_smiles}\n            </Panel.Heading>\n            <Panel.Body>\n              <Row>\n                <Col md={12}>\n                  <Button bsStyle=\"primary\" bsSize=\"sm\" onClick={() => this.props.handleEditor(true)}>Open Editor&nbsp;<i className=\"fa fa-pencil\" aria-hidden=\"true\" /></Button>&nbsp;\n                  <Button bsStyle=\"warning\" bsSize=\"sm\" onClick={() => this.handleSave()}>Update molfile and svg&nbsp;<i className=\"fa fa-floppy-o\" aria-hidden=\"true\" /></Button>\n                </Col>\n              </Row>\n              <Row>\n                <Col md={4}>\n                  <b>molfile:</b><br />\n                  <FormControl componentClass=\"textarea\" placeholder=\"textarea\" value={this.props.molecule.molfile} readOnly style={{ minHeight: 'calc(50vh)' }} />\n                </Col>\n                <Col md={8}>\n                  <b>svg:</b><br />\n                  <div className=\"svg-container\">\n                    <SVG key={this.props.molecule.molecule_svg_file} src={`/images/molecules/${this.props.molecule.molecule_svg_file}`} className=\"molecule-mid\" />\n                  </div>\n                </Col>\n              </Row>\n              &nbsp;\n              <Row>\n                <Col md={12}>\n                  <Table>\n                    {tbodyHeader}\n                    <tbody>\n                      {tbodyContent}\n                    </tbody>\n                  </Table>\n                </Col>\n              </Row>\n              {this.renderModal()}\n            </Panel.Body>\n          </Panel>\n        </div>\n      </div>\n    );\n  }\n}\n\nMoleculeModeratorComponent.propTypes = {\n  molecule: PropTypes.object,\n  showStructureEditor: PropTypes.bool.isRequired,\n  handleEditorSave: PropTypes.func.isRequired,\n  handleEditor: PropTypes.func.isRequired,\n  onSave: PropTypes.func.isRequired,\n};\n","import React, { Component } from 'react';\nimport { Navbar, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap';\n\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport LoadingModal from 'src/components/common/LoadingModal';\nimport MoleculeModeratorComponent from 'src/apps/moleculeModerator/MoleculeModeratorComponent';\nimport MoleculesFetcher from 'src/fetchers/MoleculesFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport Notifications from 'src/components/Notifications';\n\nconst pageNav = (\n  <Navbar fixedTop>\n    <Navbar.Header>\n      <Navbar.Brand>\n        <a href=\"/\">Home</a>\n      </Navbar.Brand>\n      <Navbar.Toggle />\n    </Navbar.Header>\n    <Navbar.Collapse>\n      <Navbar.Text>\n        Molecule Moderator\n      </Navbar.Text>\n    </Navbar.Collapse>\n  </Navbar>\n);\n\nconst pageNotify = (title, level, message) => {\n  const notification = {\n    title,\n    message,\n    level,\n    dismissible: 'button',\n    autoDismiss: 5,\n    position: 'tc',\n    uid: 'moderator'\n  };\n  NotificationActions.add(notification);\n};\n\nclass MoleculeModerator extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      molecule: null,\n      showStructureEditor: false,\n      msg: { show: false, level: null, message: null },\n    };\n\n    this.handleEditor = this.handleEditor.bind(this);\n    this.handleSearch = this.handleSearch.bind(this);\n    this.handleEditorSave = this.handleEditorSave.bind(this);\n    this.onSave = this.onSave.bind(this);\n  }\n\n  onSave() {\n    LoadingActions.start();\n    let { molecule } = this.state;\n    const { msg } = this.state;\n    MoleculesFetcher.updateMolfileSVG(molecule).then((json) => {\n      if (json.msg.level !== 'error') {\n        ({ molecule } = json);\n      }\n      msg.show = true;\n      msg.level = json.msg.level;\n      msg.message = json.msg.message;\n      this.setState({ molecule, msg, showStructureEditor: false });\n      LoadingActions.stop();\n      pageNotify('Save', msg.level, msg.message);\n    });\n  }\n\n  handleEditor(show) {\n    this.setState({ showStructureEditor: show });\n  }\n\n  handleSearch() {\n    LoadingActions.start();\n    const { msg } = this.state;\n    MoleculesFetcher.getByInChiKey(this.refInChiKey.value.trim())\n      .then((result) => {\n        msg.show = true;\n        msg.level = result ? 'info' : 'error';\n        msg.message = result ? 'Record found!' : 'No record found!';\n        this.setState({ msg, molecule: result.molecule, showStructureEditor: false });\n        LoadingActions.stop();\n        pageNotify('Search', msg.level, msg.message);\n      }).catch((errorMessage) => {\n        msg.show = true;\n        msg.level = 'error';\n        msg.message = errorMessage;\n        this.setState({ msg });\n        LoadingActions.stop();\n        pageNotify('Search', msg.level, msg.message);\n      });\n  }\n\n  handleEditorSave(molfile, svg_file = null, config = null) {\n    const { molecule } = this.state;\n    molecule.molfile = molfile;\n    const smiles = config ? config.smiles : null;\n    const isChemdraw = !!smiles;\n    MoleculesFetcher.renewSVGFile(molecule.id, svg_file, isChemdraw).then((json) => {\n      molecule.molecule_svg_file = json.svg_path;\n      this.setState({ molecule, showStructureEditor: false });\n    });\n  }\n\n  render() {\n    const formSearch = (\n      <form>\n        <FormGroup controlId=\"frmCtrlInChiKey\">\n          <ControlLabel>InChiKey</ControlLabel>\n          <FormControl type=\"text\" placeholder=\"Enter text\" inputRef={(ref) => { this.refInChiKey = ref; }} />\n        </FormGroup>\n        <Button onClick={this.handleSearch}>Search&nbsp;<i className=\"fa fa-search\" aria-hidden=\"true\" /></Button>\n      </form>\n    );\n\n    const pageComponent = this.state.molecule ?\n      (<MoleculeModeratorComponent\n        molecule={this.state.molecule}\n        showStructureEditor={this.state.showStructureEditor}\n        handleEditorSave={this.handleEditorSave}\n        handleEditor={this.handleEditor}\n        onSave={this.onSave}\n      />) : <div />;\n\n    return (\n      <div>\n        {pageNav}\n        <div className=\"container\" style={{ marginTop: '60px' }}>\n          {formSearch}\n          <hr />\n        </div>\n        {pageComponent}\n        <Notifications />\n        <LoadingModal />\n      </div>\n    );\n  }\n}\n\nexport default MoleculeModerator;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport MoleculeModerator from 'src/apps/moleculeModerator/MoleculeModerator';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('MoleculeModerator');\n  if (domElement) ReactDOM.render(<MoleculeModerator />, domElement);\n});\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport { SpectraEditor, FN } from '@complat/react-spectra-editor';\nimport { Modal, Well, Button } from 'react-bootstrap';\nimport Select from 'react-select';\nimport Sample from 'src/models/Sample';\nimport PropTypes from 'prop-types';\nimport TreeSelect from 'antd/lib/tree-select';\nimport { InlineMetadata } from 'chem-generic-ui';\n\nimport ElementActions from 'src/stores/alt/actions/ElementActions'; // For REPO\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport SpectraActions from 'src/stores/alt/actions/SpectraActions';\nimport SpectraStore from 'src/stores/alt/stores/SpectraStore';\nimport { SpectraOps } from 'src/utilities/quillToolbarSymbol';\nimport ResearchPlan from 'src/models/ResearchPlan';\nimport { inlineNotation } from 'src/utilities/SpectraHelper';\n\nconst rmRefreshed = (analysis) => {\n  if (!analysis) return analysis;\n  const { refreshed, ...coreAnalysis } = analysis;\n  return coreAnalysis;\n};\n\nconst layoutsWillShowMulti = [\n  FN.LIST_LAYOUT.CYCLIC_VOLTAMMETRY,\n  FN.LIST_LAYOUT.SEC,\n  FN.LIST_LAYOUT.AIF\n];\n\nclass ViewSpectra extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      ...SpectraStore.getState(),\n    };\n\n    this.onChange = this.onChange.bind(this);\n    this.writeCommon = this.writeCommon.bind(this);\n    this.writePeakOp = this.writePeakOp.bind(this);\n    this.writeMpyOp = this.writeMpyOp.bind(this);\n    this.writeCloseCommon = this.writeCloseCommon.bind(this);\n    this.writeClosePeakOp = this.writeClosePeakOp.bind(this);\n    this.writeCloseMpyOp = this.writeCloseMpyOp.bind(this);\n    this.saveOp = this.saveOp.bind(this);\n    this.saveCloseOp = this.saveCloseOp.bind(this);\n    this.refreshOp = this.refreshOp.bind(this);\n    this.closeOp = this.closeOp.bind(this);\n    this.predictOp = this.predictOp.bind(this);\n    this.buildOpsByLayout = this.buildOpsByLayout.bind(this);\n    this.renderSpectraEditor = this.renderSpectraEditor.bind(this);\n    this.renderEmpty = this.renderEmpty.bind(this);\n    this.renderTitle = this.renderTitle.bind(this);\n    this.formatPks = this.formatPks.bind(this);\n    this.getContent = this.getContent.bind(this);\n    this.getSpcInfo = this.getSpcInfo.bind(this);\n    this.getQDescVal = this.getQDescVal.bind(this);\n    this.buildOthers = this.buildOthers.bind(this);\n    this.onSpectraDescriptionChanged = this.onSpectraDescriptionChanged.bind(this);\n    this.isShowMultipleSelectFile = this.isShowMultipleSelectFile.bind(this);\n    this.updateROPredict = this.updateROPredict.bind(this);\n    this.onChangeElement = this.onChangeElement.bind(this);\n  }\n\n  componentDidMount() {\n    SpectraStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    SpectraStore.unlisten(this.onChange);\n  }\n\n  onChange(newState) {\n    const origState = this.state;\n    this.setState({ ...origState, ...newState });\n  }\n\n  onChangeElement() {\n    const { sample } = this.props;\n    const { updatedElement } = this.state;\n    return updatedElement || sample;\n  }\n\n  opsSolvent(shift) {\n    const { label } = shift.ref;\n\n    switch (label) {\n      case false:\n        return [];\n      case 'CDCl$3':\n        return [\n          { insert: 'CDCl' },\n          { insert: '3', attributes: { script: 'sub' } },\n          { insert: ', ' },\n        ];\n      case 'C$6D$1$2':\n        return [\n          { insert: 'C' },\n          { insert: '6', attributes: { script: 'sub' } },\n          { insert: 'D' },\n          { insert: '12', attributes: { script: 'sub' } },\n          { insert: ', ' },\n        ];\n      case 'CD2Cl2':\n      case 'CD$2Cl$2':\n        return [\n          { insert: 'CD' },\n          { insert: '2', attributes: { script: 'sub' } },\n          { insert: 'Cl' },\n          { insert: '2', attributes: { script: 'sub' } },\n          { insert: ', ' },\n        ];\n      case 'D$2O':\n        return [\n          { insert: 'D' },\n          { insert: '2', attributes: { script: 'sub' } },\n          { insert: 'O' },\n          { insert: ', ' },\n        ];\n      default:\n        return [{ insert: `${label}, ` }];\n    }\n  }\n\n  onDSSelectChange(e) {\n    const { value } = e;\n    const { spcInfos } = this.state;\n    const sis = spcInfos.filter(x => x.idDt === value);\n    const si = sis.length > 0 ? sis[0] : spcInfos[0];\n    SpectraActions.SelectIdx(si.idx, []);\n  }\n\n  getDSList() {\n    let sample = this.onChangeElement(); // REPO multiple samples\n    const { spcInfos } = this.state;\n    const spcDts = spcInfos.map(e => e.idDt);\n    if (sample && !(sample instanceof Sample)) {\n      sample = new Sample(sample);\n    }\n    const dcs = sample?.datasetContainers();\n    const dcss = dcs?.filter(e => spcDts.includes(e.id));\n    return dcss;\n  }\n\n  isShowMultipleSelectFile(idx) {\n    const { spcMetas, arrSpcIdx } = this.state;\n    let spcs = false;\n    if (arrSpcIdx.length > 0) {\n      spcs = spcMetas.filter(x => arrSpcIdx.includes(x.idx));\n    }\n    else {\n      spcs = spcMetas.filter(x => x.idx === idx);\n    }\n\n    if (spcs && spcs.length > 0) {\n      const spc = spcs[0];\n      const { jcamp } = spc;\n      if (layoutsWillShowMulti.includes(jcamp.layout)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  getContent() {\n    const { spcMetas, spcIdx, arrSpcIdx, spcInfos } = this.state;\n    if (arrSpcIdx.length > 0) {\n      const listMuliSpcs = [];\n      const listEntityFiles = [];\n      for (let i = 0; i < arrSpcIdx.length; i++) {\n        const idx = arrSpcIdx[i];\n        const spc = spcMetas.filter(x => x.idx === idx)[0];\n        if (spc) {\n          const { jcamp } = spc;\n          if (!layoutsWillShowMulti.includes(jcamp.layout)) {\n            return spc;\n          }\n          listMuliSpcs.push(spc);\n        }\n        const entity = spcInfos.filter(x => x.idx === idx)[0];\n        if (entity) {\n          listEntityFiles.push(entity);\n        }\n      }\n      return { listMuliSpcs: listMuliSpcs, listEntityFiles: listEntityFiles };\n    } else {\n      const sm = spcMetas.filter(x => x.idx === spcIdx)[0];\n      return sm || spcMetas[0] || { jcamp: null, predictions: null };\n    }\n  }\n\n  getSpcInfo(curveIdx = 0) {\n    const { spcInfos, spcIdx, arrSpcIdx } = this.state;\n    let selectedIdx = spcIdx;\n    if (arrSpcIdx.length > 0) {\n      selectedIdx = arrSpcIdx[curveIdx];\n    }\n    const sis = spcInfos.filter(x => x.idx === selectedIdx);\n    const si = sis.length > 0 ? sis[0] : spcInfos[0];\n    return si;\n  }\n\n  getQDescVal() {\n    const sample = this.onChangeElement(); // REPO multiple samples\n    const { spcInfos, spcIdx } = this.state;\n    const sis = spcInfos.filter(x => x.idx === spcIdx);\n    const si = sis.length > 0 ? sis[0] : spcInfos[0];\n\n    const ops = sample.analysesContainers().map((ae) => {\n      if (ae.id !== si.idAe) return null;\n      return ae.children.map((ai) => {\n        if (ai.id !== si.idAi) return null;\n        return ai.extended_metadata.content.ops; // eslint-disable-line\n      }).filter(r => r !== null);\n    }).filter(r => r !== null)?.[0]?.[0];\n    return ops;\n  }\n\n  formatPks({\n    peaks, shift, layout, isAscend, decimal, body,\n    isIntensity, integration, curveSt, waveLength\n  }) {\n    const layoutOpsObj = SpectraOps[layout];\n    if (!layoutOpsObj) {\n      return [];\n    }\n\n    const { curveIdx } = curveSt;\n    const { shifts } = shift;\n    const selectedShift = shifts[curveIdx];\n\n    const { integrations } = integration;\n    const selectedIntegration = integrations[curveIdx];\n\n    if (!selectedShift || !selectedIntegration) {\n      return [];\n    }\n\n    const { jcamp } = this.getContent();\n    const { entity } = FN.buildData(jcamp);\n    const { features } = entity;\n    const { temperature } = entity;\n    const { observeFrequency } = Array.isArray(features)\n      ? features[0]\n      : (features.editPeak || features.autoPeak);\n    const freq = Array.isArray(observeFrequency) ? observeFrequency[0] : observeFrequency;\n    const freqStr = freq ? `${parseInt(freq, 10)} MHz, ` : '';\n    // peaks\n    const { maxY, minY } = Array.isArray(features)\n      ? features[0]\n      : (features.editPeak || features.autoPeak);\n    const boundary = { maxY, minY };\n    const mBody = body || FN.peaksBody({\n      peaks,\n      layout,\n      decimal,\n      shift,\n      isAscend,\n      isIntensity,\n      boundary,\n      integration: selectedIntegration,\n      waveLength,\n      temperature\n    });\n    let solventDecimal = decimal\n    if (FN.is13CLayout(layout)){\n      solventDecimal = 2\n    }\n\n    const { label, value, name } = selectedShift.ref;\n    const solvent = label ? `${name.split('(')[0].trim()} [${value.toFixed(solventDecimal)} ppm], ` : '';\n    return [\n      ...layoutOpsObj.head(freqStr, solvent),\n      { insert: mBody },\n      ...layoutOpsObj.tail(),\n    ];\n  }\n\n  formatMpy({\n    shift, isAscend, decimal,\n    integration, multiplicity, layout, curveSt\n  }) {\n    const { curveIdx } = curveSt;\n    const { shifts } = shift;\n    const selectedShift = shifts[curveIdx];\n    const { integrations } = integration;\n    const selectedIntegration = integrations[curveIdx];\n    const { multiplicities } = multiplicity;\n    const selectedMutiplicity = multiplicities[curveIdx];\n    // if (!selectedShift || !selectedIntegration) {\n    //   return []\n    // }\n\n    // obsv freq\n    const { jcamp } = this.getContent();\n    const { entity } = FN.buildData(jcamp);\n    const { features } = entity;\n    const { observeFrequency } = Array.isArray(features)\n      ? features[0]\n      : (features.editPeak || features.autoPeak);\n    const freq = Array.isArray(observeFrequency) ? observeFrequency[0] : observeFrequency;\n    const freqStr = freq ? `${parseInt(freq, 10)} MHz, ` : '';\n    // multiplicity\n    const { refArea, refFactor } = selectedIntegration;\n    const shiftVal = selectedMutiplicity.shift;\n    const ms = selectedMutiplicity.stack;\n    const is = selectedIntegration.stack;\n\n    const macs = ms.map((m) => {\n      const { peaks, mpyType, xExtent } = m;\n      const { xL, xU } = xExtent;\n      const it = is.filter((i) => i.xL === xL && i.xU === xU)[0] || { area: 0 };\n      const area = (it.area * refFactor) / refArea;\n      const center = FN.calcMpyCenter(peaks, shiftVal, mpyType);\n      const xs = m.peaks.map(p => p.x).sort((a, b) => a - b);\n      const [aIdx, bIdx] = isAscend ? [0, xs.length - 1] : [xs.length - 1, 0];\n      const mxA = mpyType === 'm' ? (xs[aIdx] - shiftVal).toFixed(decimal) : 0;\n      const mxB = mpyType === 'm' ? (xs[bIdx] - shiftVal).toFixed(decimal) : 0;\n      return Object.assign({}, m, {\n        area, center, mxA, mxB,\n      });\n    }).sort((a, b) => (isAscend ? a.center - b.center : b.center - a.center));\n    let couplings = [].concat(...macs.map((m) => {\n      m.js.sort((a, b) => (isAscend ? a - b : b - a));\n      const c = m.center;\n      const type = m.mpyType;\n      const it = Math.round(m.area);\n      const js = [].concat(...m.js.map(j => (\n        [\n          { insert: 'J', attributes: { italic: true } },\n          { insert: ` = ${j.toFixed(1)} Hz` },\n          { insert: ', ' },\n        ]\n      )));\n      const atomCount = layout === '1H' ? `, ${it}H` : '';\n      const location = type === 'm' ? `${m.mxA}–${m.mxB}` : `${c.toFixed(decimal)}`;\n      return m.js.length === 0\n        ? [\n          { insert: `${location} (${type}${atomCount})` },\n          { insert: ', ' },\n        ]\n        : [\n          { insert: `${location} (${type}, ` },\n          ...js.slice(0, js.length - 1),\n          { insert: `${atomCount})` },\n          { insert: ', ' },\n        ];\n    }));\n    couplings = couplings.slice(0, couplings.length - 1);\n    const { label, value, name } = selectedShift.ref;\n    const solvent = label ? `${name.split('(')[0].trim()} [${value.toFixed(decimal)} ppm], ` : '';\n    return [\n      { attributes: { script: 'super' }, insert: layout.slice(0, -1) },\n      { insert: `${layout.slice(-1)} NMR (${freqStr}${solvent}ppm) δ = ` },\n      ...couplings,\n      { insert: '.' },\n    ];\n  }\n\n  writeCommon({\n    peaks, shift, scan, thres, analysis, layout, isAscend, decimal, body,\n    keepPred, isIntensity, multiplicity, integration, cyclicvoltaSt, curveSt,\n    waveLength, axesUnitsSt, detectorSt, dscMetaData,\n  }, isMpy = false) {\n    const { handleSampleChanged } = this.props;\n    const sample = this.onChangeElement(); // REPO multiple samples\n\n    const si = this.getSpcInfo();\n    if (!si) return;\n\n    let ops = [];\n    if (['1H', '13C', '15N', '19F', '29Si', '31P'].includes(layout) && isMpy) {\n      ops = this.formatMpy({\n        multiplicity, integration, shift, isAscend, decimal, layout, curveSt\n      });\n    } else if (FN.isCyclicVoltaLayout(layout)) {\n      ops = this.notationVoltammetry(cyclicvoltaSt, curveSt, layout, sample, si?.idDt);\n    } else {\n      ops = this.formatPks({\n        peaks,\n        shift,\n        layout,\n        isAscend,\n        decimal,\n        body,\n        isIntensity,\n        integration,\n        curveSt,\n        waveLength\n      });\n    }\n\n    sample.analysesContainers().forEach((ae) => {\n      if (ae.id !== si.idAe) return;\n      ae.children.forEach((ai) => {\n        if (ai.id !== si.idAi) return;\n        ai.extended_metadata.content.ops = [ // eslint-disable-line\n          ...ai.extended_metadata.content.ops,\n          ...ops,\n        ];\n        const firstOps = ai.extended_metadata.content.ops[0];\n        if (firstOps && firstOps.insert && firstOps.insert === '\\n') {\n          ai.extended_metadata.content.ops.shift();\n        }\n\n      });\n    });\n\n    const cb = () => (\n      this.saveOp({\n        peaks, shift, scan, thres, analysis, keepPred, integration, multiplicity, cyclicvoltaSt, curveSt, layout, waveLength, axesUnitsSt, detectorSt, dscMetaData,\n      })\n    );\n    handleSampleChanged(sample, cb);\n  }\n\n  notationVoltammetry(cyclicvoltaSt, curveSt, layout, sample, idDt) {\n    const { spectraList } = cyclicvoltaSt;\n    const { curveIdx, listCurves } = curveSt;\n    const selectedVolta = spectraList[curveIdx];\n    const selectedCurve = listCurves[curveIdx];\n    const { feature } = selectedCurve;\n    const { scanRate } = feature;\n    const metadata = InlineMetadata(sample?.datasetContainers(), idDt);\n    const data = {\n      scanRate,\n      voltaData: {\n        listPeaks: selectedVolta.list,\n        xyData: feature.data[0],\n      },\n      sampleName: sample.name,\n    };\n    const desc = inlineNotation(layout, data, metadata);\n    const { quillData } = desc;\n    return quillData;\n  }\n\n  writePeakOp(params) {\n    const isMpy = false;\n    this.writeCommon(params, isMpy);\n  }\n\n  // For REPO\n  updateROPredict() {\n    const sample = this.onChangeElement(); // REPO multiple samples\n    ElementActions.fetchSampleById(sample.id);\n  }\n\n  writeMpyOp(params) {\n    const isMpy = true;\n    this.writeCommon(params, isMpy);\n  }\n\n  saveOp({\n    peaks, shift, scan, thres, analysis, keepPred, integration, multiplicity, waveLength, cyclicvoltaSt, curveSt, simulatenmr = false, layout, axesUnitsSt, detectorSt, dscMetaData,\n  }) {\n    const { handleSubmit } = this.props;\n    const { curveIdx } = curveSt;\n    const si = this.getSpcInfo(curveIdx);\n    if (!si) return;\n    const fPeaks = FN.rmRef(peaks, shift);\n    const peaksStr = FN.toPeakStr(fPeaks);\n    const predict = JSON.stringify(rmRefreshed(analysis));\n    const waveLengthStr = JSON.stringify(waveLength);\n    const cyclicvolta = JSON.stringify(cyclicvoltaSt);\n    const axesUnitsStr = JSON.stringify(axesUnitsSt);\n    const detector = JSON.stringify(detectorSt);\n\n    const { shifts } = shift;\n    const selectedShift = shifts[curveIdx];\n    const { integrations } = integration;\n    const selectedIntegration = integrations[curveIdx];\n    const { multiplicities } = multiplicity;\n    const selectedMutiplicity = multiplicities[curveIdx];\n\n    const isSaveCombined = FN.isCyclicVoltaLayout(layout);\n    const { spcInfos, arrSpcIdx } = this.state;\n    const previousSpcInfos = spcInfos.filter((spc) => (spc.idDt === si.idDt && arrSpcIdx.includes(spc.idx)));\n    LoadingActions.start.defer();\n    SpectraActions.SaveToFile.defer(\n      si,\n      peaksStr,\n      selectedShift,\n      scan,\n      thres,\n      JSON.stringify(selectedIntegration),\n      JSON.stringify(selectedMutiplicity),\n      predict,\n      handleSubmit,\n      keepPred,\n      waveLengthStr,\n      cyclicvolta,\n      curveIdx,\n      simulatenmr,\n      previousSpcInfos,\n      isSaveCombined,\n      axesUnitsStr,\n      detector,\n      JSON.stringify(dscMetaData),\n    );\n  }\n\n  refreshOp({\n    peaks, shift, scan, thres, analysis, keepPred, integration, multiplicity, waveLength, cyclicvoltaSt, curveSt, layout, axesUnitsSt, detectorSt\n  }) {\n    this.saveOp({\n      peaks, shift, scan, thres, analysis, integration, multiplicity, waveLength, cyclicvoltaSt, curveSt, simulatenmr: true, layout, axesUnitsSt, detectorSt\n    });\n  }\n\n  closeOp() {\n    SpectraActions.ToggleModal.defer();\n  }\n\n  writeCloseCommon(params, isMpy = false) {\n    this.writeCommon(params, isMpy);\n    this.closeOp();\n  }\n\n  writeClosePeakOp(params) {\n    const isMpy = false;\n    this.writeCommon(params, isMpy);\n    this.closeOp();\n  }\n\n  writeCloseMpyOp(params) {\n    const isMpy = true;\n    this.writeCommon(params, isMpy);\n    this.closeOp();\n  }\n\n  saveCloseOp({\n    peaks, shift, scan, thres, analysis, integration, multiplicity, waveLength, cyclicvoltaSt, curveSt, layout, axesUnitsSt, detectorSt, dscMetaData,\n  }) {\n    this.saveOp({\n      peaks, shift, scan, thres, analysis, integration, multiplicity, waveLength, cyclicvoltaSt, curveSt, layout, axesUnitsSt, detectorSt, dscMetaData,\n    });\n    this.closeOp();\n  }\n\n  getPeaksByLayout(peaks, layout, multiplicity, curveIdx = 0) {\n    if (['IR'].indexOf(layout) >= 0) return peaks;\n    if (['13C'].indexOf(layout) >= 0) return FN.CarbonFeatures(peaks, multiplicity);\n\n    const { multiplicities } = multiplicity;\n    const selectedMultiplicity = multiplicities[curveIdx];\n\n    const { stack, shift } = selectedMultiplicity;\n    const nmrMpyCenters = stack.map((stk) => {\n      const { mpyType, peaks } = stk;\n      return {\n        x: FN.CalcMpyCenter(peaks, shift, mpyType),\n        y: 0,\n      };\n    });\n    const defaultCenters = [{ x: -1000.0, y: 0 }];\n    return nmrMpyCenters.length > 0 ? nmrMpyCenters : defaultCenters;\n  }\n\n  predictOp({\n    peaks, shift, scan, thres, analysis, keepPred, integration, multiplicity,\n    layout, curveSt,\n  }) {\n    const { handleSubmit } = this.props;\n    const sample = this.onChangeElement(); // REPO multiple samples\n\n    const si = this.getSpcInfo();\n    if (!si) return;\n    const fPeaks = FN.rmRef(peaks, shift);\n    const peaksStr = FN.toPeakStr(fPeaks);\n    const predict = JSON.stringify(rmRefreshed(analysis));\n\n    const { curveIdx } = curveSt;\n\n    const targetPeaks = this.getPeaksByLayout(peaks, layout, multiplicity, curveIdx);\n\n    const { multiplicities } = multiplicity;\n    const selectedMultiplicity = multiplicities[curveIdx];\n    const { shifts } = shift;\n    const selectedShift = shifts[curveIdx];\n    const { integrations } = integration;\n    const selectedIntegration = integrations[curveIdx];\n\n    // LoadingActions.start.defer();\n    SpectraActions.InferRunning.defer();\n    SpectraActions.InferSpectrum.defer(\n      si,\n      peaksStr,\n      selectedShift,\n      scan,\n      thres,\n      JSON.stringify(selectedIntegration),\n      JSON.stringify(selectedMultiplicity),\n      predict,\n      targetPeaks,\n      layout,\n      sample.can_update === true ? handleSubmit : this.updateROPredict,\n      keepPred,\n    );\n  }\n\n  buildOpsByLayout(et) {\n    const sample = this.onChangeElement(); // REPO multiple samples\n    if (sample && sample instanceof ResearchPlan) {\n      return [\n        { name: 'write & save', value: this.saveOp },\n        { name: 'write, save & close', value: this.saveCloseOp },\n      ];\n    }\n    const updatable = sample && sample.can_update;\n    let baseOps = updatable ? [\n      { name: 'write peak & save', value: this.writePeakOp },\n      { name: 'write peak, save & close', value: this.writeClosePeakOp },\n    ] : [];\n    const isNmr = updatable && ['1H', '13C', '15N', '19F', '29Si', '31P'].includes(et.layout);\n    if (isNmr) {\n      baseOps = [\n        ...baseOps,\n        { name: 'write multiplicity & save', value: this.writeMpyOp },\n        { name: 'write multiplicity, save & close', value: this.writeCloseMpyOp },\n      ];\n    }\n\n    if (layoutsWillShowMulti.includes(et.layout)) {\n      if (FN.isCyclicVoltaLayout(et.layout)) {\n        return [\n          { name: 'save', value: this.writeCommon },\n          { name: 'save & close', value: this.writeCloseCommon },\n        ];\n      } else {\n      return [\n        { name: 'save', value: this.saveOp },\n        { name: 'save & close', value: this.saveCloseOp },\n      ];\n      }\n    }\n    const saveable = updatable;\n    if (saveable) {\n      baseOps = [\n        ...baseOps,\n        { name: 'save', value: this.saveOp },\n        { name: 'save & close', value: this.saveCloseOp },\n      ];\n    }\n\n    // TO BE CHECKED\n    if (baseOps.length === 0 && !this.props.isPublic) {\n      baseOps = [{ name: 'predict', value: this.predictOp }];\n    }\n\n    return baseOps;\n  }\n\n  buildOthers() {\n    const { others } = this.state;\n\n    return {\n      others,\n      addOthersCb: SpectraActions.AddOthers,\n    };\n  }\n\n  renderEmpty() {\n    const { fetched } = this.state;\n    const content = fetched\n      ? (\n        <Well onClick={this.closeOp}>\n          <i className=\"fa fa-exclamation-triangle fa-3x\" />\n          <h3>No Spectra Found!</h3>\n          <h3>Please refresh the page!</h3>\n          <br />\n          <h5>Click here to close the window...</h5>\n        </Well>\n      )\n      : <i className=\"fa fa-refresh fa-spin fa-3x fa-fw\" />;\n\n    return (\n      <div className=\"card-box\">\n        {content}\n      </div>\n    );\n  }\n\n  renderInvalid() {\n    const { fetched } = this.state;\n    const content = fetched\n      ? (\n        <Well onClick={this.closeOp}>\n          <i className=\"fa fa-chain-broken fa-3x\" />\n          <h3>Invalid spectrum!</h3>\n          <h3>Please delete it and upload a valid file!</h3>\n          <br />\n          <h5>Click here to close the window...</h5>\n        </Well>\n      )\n      : <i className=\"fa fa-refresh fa-spin fa-3x fa-fw\" />;\n\n    return (\n      <div className=\"card-box\">\n        {content}\n      </div>\n    );\n  }\n\n  renderSpectraEditor(jcamp, predictions, listMuliSpcs, listEntityFiles) {\n    const sample = this.onChangeElement(); // REPO multiple samples\n    const {\n      entity, isExist,\n    } = FN.buildData(jcamp);\n\n    let currEntity = entity;\n\n    let multiEntities = false;\n    let entityFileNames = false;\n    if (!isExist) {\n      if (!listMuliSpcs || listMuliSpcs.length === 0) return this.renderInvalid();\n      listMuliSpcs = listMuliSpcs.filter(((x) => x !== undefined));\n      listEntityFiles = listEntityFiles.filter(((x) => x !== undefined));\n      multiEntities = listMuliSpcs.map((spc) => {\n        const {\n          entity\n        } = FN.buildData(spc.jcamp);\n        currEntity = entity;\n        return entity;\n      });\n      entityFileNames = listEntityFiles.map((x) => x.label);\n    }\n\n    const others = this.buildOthers();\n    const operations = this.buildOpsByLayout(currEntity);\n    const descriptions = this.getQDescVal();\n    const forecast = {\n      btnCb: this.predictOp,\n      refreshCb: this.refreshOp,\n      molecule: 'molecule',\n      predictions,\n    };\n\n    return (\n      <Modal.Body>\n        {\n          !isExist && multiEntities.length === 0\n            ? this.renderInvalid()\n            : <SpectraEditor\n                entity={currEntity}\n                multiEntities={multiEntities}\n                entityFileNames={entityFileNames}\n                others={others}\n                operations={operations}\n                forecast={forecast}\n                molSvg={sample.svgPath}\n                theoryMass={sample.molecule_molecular_weight}\n                descriptions={descriptions}\n                canChangeDescription\n                onDescriptionChanged={this.onSpectraDescriptionChanged}\n                userManualLink={{ cv: 'https://www.chemotion.net/docs/services/chemspectra/cv' }}\n            />\n        }\n      </Modal.Body>\n    );\n  }\n\n  renderTitle(idx) {\n    const { spcInfos, arrSpcIdx } = this.state;\n    const si = this.getSpcInfo();\n    if (!si) return null;\n    const modalTitle = si ? `Spectra Editor - ${si.title}` : '';\n    const options = spcInfos.filter((x) => x.idDt === si.idDt)\n      .map((x) => ({ value: x.idx, label: x.label }));\n    // const onSelectChange = e => SpectraActions.SelectIdx(e.value);\n    const isShowMultiSelect = this.isShowMultipleSelectFile(idx);\n    const onSelectChange = (value) => {\n      if (Array.isArray(value)) {\n        const reversedValue = value.reverse();\n        SpectraActions.SelectIdx(reversedValue[0], reversedValue);\n      } else {\n        SpectraActions.SelectIdx(value, []);\n      }\n    };\n    const dses = this.getDSList();\n    const dsOptions = dses.map((x) => ({ value: x.id, label: x.name }));\n\n    return (\n      <div className=\"spectra-editor-title\">\n        <span className=\"txt-spectra-editor-title\">\n          {modalTitle}\n        </span>\n        <div style={{ display: 'inline-flex', margin: '0 0 0 100px' }}>\n          <Select\n            options={dsOptions}\n            value={si.idDt}\n            clearable={false}\n            style={{ width: 200 }}\n            onChange={(e) => this.onDSSelectChange(e)}\n          />\n          <TreeSelect\n            treeData={options}\n            value={isShowMultiSelect ? arrSpcIdx : idx}\n            treeCheckable={isShowMultiSelect}\n            style={{ width: 500 }}\n            maxTagCount={1}\n            onChange={onSelectChange}\n          />\n        </div>\n        <Button\n          bsStyle=\"danger\"\n          bsSize=\"small\"\n          className=\"button-right\"\n          onClick={this.closeOp}\n        >\n          <span>\n            <i className=\"fa fa-times\" /> Close without Save\n          </span>\n        </Button>\n      </div>\n    );\n  }\n\n  onSpectraDescriptionChanged(value) {\n    const { spcInfos, spcIdx } = this.state;\n    const sis = spcInfos.filter((x) => x.idx === spcIdx);\n    const si = sis.length > 0 ? sis[0] : spcInfos[0];\n    const sample = this.onChangeElement(); // REPO multiple samples\n    sample.analysesContainers().forEach((ae) => {\n      if (ae.id !== si.idAe) return;\n      ae.children.forEach((ai) => {\n        if (ai.id !== si.idAi) return;\n        ai.extended_metadata.content.ops = value.ops;\n      });\n    });\n  }\n\n  render() {\n    const { showModal } = this.state;\n\n    const {\n      jcamp, predictions, idx, listMuliSpcs, listEntityFiles\n    } = this.getContent();\n    const dialogClassName = 'spectra-editor-dialog';\n    // WORKAROUND: react-stickydiv duplicates elements.\n    const specElements = Array.from(document.getElementsByClassName(dialogClassName));\n    if (specElements.length > 1) {\n      specElements.slice(1).forEach(el => el.parentNode.style.display = 'none'); // eslint-disable-line\n    }\n    // WORKAROUND: react-stickydiv duplicates elements.\n\n    return (\n      <div className=\"spectra-editor\">\n        <Modal\n          show={showModal}\n          dialogClassName={dialogClassName}\n          animation\n          onHide={this.closeOp}\n        >\n          {\n            this.renderTitle(idx)\n          }\n          {\n            showModal && (jcamp || (listMuliSpcs && listMuliSpcs.length > 0))\n              ? this.renderSpectraEditor(jcamp, predictions, listMuliSpcs, listEntityFiles)\n              : this.renderEmpty()\n          }\n        </Modal>\n      </div>\n    );\n  }\n}\n\nViewSpectra.propTypes = {\n  sample: PropTypes.object.isRequired,\n  handleSampleChanged: PropTypes.func.isRequired,\n  handleSubmit: PropTypes.func.isRequired,\n  isPublic: PropTypes.bool,\n};\n\nViewSpectra.defaultProps = { isPublic: false };\n\nexport default ViewSpectra;","import { cellLineCitationTypeMap, CitationTypeMap } from 'src/apps/mydb/elements/details/literature/CitationType';\n\nconst getKeysOfMap = (citationMap) => Object.keys(citationMap).filter((e) => e !== 'uncategorized');\n\nconst createCitationTypeMap = (type) => (type === 'placeholder' ? cellLineCitationTypeMap : CitationTypeMap);\n\nexport {\n  getKeysOfMap,\n  createCitationTypeMap\n};\n","const CitationTypeMap = {\n  citedOwn: {\n    def: 'cited own work - reference describing exactly this experiment/same authors',\n    short: 'cited own work',\n    datacite: ['IsCitedBy']\n  },\n  citedRef: {\n    def: 'cited reference - reference describing the experiment done by others',\n    short: 'cited reference',\n    dataCite: ['Continues']\n  },\n  referTo: {\n    def: 'referring to - reference similar experiments or related literature',\n    short: 'referring to',\n    dataCite: ['References']\n  },\n  uncategorized: {\n    def: 'uncategorized - no citation type has been set',\n    short: 'uncategorized',\n    dataCite: []\n  }\n};\n\nconst cellLineCitationTypeMap = {\n  literatureOfSource: {\n    def: 'Official literature',\n    short: 'literature from source',\n    datacite: []\n  },\n  additionalLiterature: {\n    def: 'Additional literature',\n    short: 'additional literature',\n    datacite: []\n  }\n};\nconst CitationType = Object.keys(CitationTypeMap).filter((e) => e !== 'uncategorized');\nconst CitationTypeEOL = ['cited', 'citing', null, ''];\n\nexport {\n  CitationTypeMap, CitationType, CitationTypeEOL, cellLineCitationTypeMap\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Button, FormControl, OverlayTrigger, Tooltip\n} from 'react-bootstrap';\nimport uuid from 'uuid';\nimport Literature from 'src/models/Literature';\nimport Cite from 'citation-js';\nimport { CitationType, CitationTypeMap } from 'src/apps/mydb/elements/details/literature/CitationType';\nimport { getKeysOfMap,createCitationTypeMap } from 'src/apps/mydb/elements/details/literature/CitationTools';\n\nfunction RefByUserInfo({ info, litype }) {\n  if (typeof (info) === 'undefined' || !info || info.length === 0) {\n    return (<div />);\n  }\n  return (\n    <OverlayTrigger\n      placement=\"bottom\"\n      overlay={(\n        <Tooltip id={`ref_by_user_${uuid.v4()}`} className=\"left_tooltip bs_tooltip\">\n          Reference added by\n          {\n            Object.keys(info).map((lid) => (litype[lid]\n              ? ` ${info[lid]} (${CitationTypeMap[litype[lid]].def})`\n              : info[lid])).join(', ')\n          }\n        </Tooltip>\n      )}\n    >\n      <i className=\"fa fa-book\" aria-hidden=\"true\" />\n    </OverlayTrigger>\n  );\n}\n\n\n// const Cite = require('citation-js');\n\nfunction LiteralType({\n  val,\n  handleInputChange,\n  disabled = false,\n  citationMap = createCitationTypeMap('')\n}) {\n  return (\n    <FormControl\n      componentClass=\"select\"\n      onChange={(event) => handleInputChange('litype', event)}\n      placeholder=\"type\"\n      value={val}\n      disabled={disabled}\n    >\n      {getKeysOfMap(citationMap).map(\n        (e) => (\n          <option\n            key={`_litype_opt_${e}`}\n            value={e}\n          >\n            {citationMap[e].def}\n          </option>\n        )\n      )}\n    </FormControl>\n  );\n}\n\nfunction LiteratureInput({\n  literature, handleInputChange, field, placeholder, readOnly = false\n}) {\n  return (\n    <FormControl\n      type=\"text\"\n      disabled={readOnly}\n      onChange={(event) => handleInputChange(field, event)}\n      placeholder={placeholder}\n      value={literature[field] || ''}\n    />\n  );\n}\n\nconst isLiteratureValid = (literature) => (\n  literature.title !== '' && literature.url.concat(literature.doi) !== ''\n);\n\nfunction AddButton({\n  onLiteratureAdd, literature, title, readOnly = false\n}) {\n  return (\n    <Button\n      bsStyle=\"success\"\n      bsSize=\"small\"\n      onClick={() => onLiteratureAdd(literature)}\n      style={{ marginTop: 2 }}\n      disabled={!isLiteratureValid(literature) || readOnly}\n      title={title}\n    >\n      <i className=\"fa fa-plus\" />\n    </Button>\n  );\n}\n\nAddButton.propTypes = {\n  onLiteratureAdd: PropTypes.func.isRequired,\n  literature: PropTypes.instanceOf(Literature).isRequired,\n  title: PropTypes.string,\n};\n\nAddButton.defaultProps = {\n  title: 'add citation'\n};\n\nconst literatureUrl = (literature) => {\n  const { url } = literature;\n  if (url.match(/https?\\:\\/\\//)) {\n    return url;\n  }\n  return `//${url}`;\n};\n\nconst sanitizeDoi = (doi) => {\n  const m = doi.match(/(?:\\.*10\\.)(\\S+)\\s*/);\n  return m ? '10.'.concat(m[1]) : null;\n};\n\nconst doiValid = (doi) => {\n  const sanitized = sanitizeDoi(doi);\n  return sanitized && sanitized.match(/10.\\w+\\/\\S+/) && true;\n};\n\nconst literatureContent = (literature, onlyText) => {\n  let content;\n  if (literature.refs && literature.refs.bibliography) {\n    const { bibliography } = literature.refs;\n    content = bibliography;\n  } else if (literature.refs && literature.refs.bibtex) {\n    let litBibtex = literature.refs.bibtex;\n    if (litBibtex.split('{').length > 1) {\n      let indexData = litBibtex.split('{')[1];\n      indexData = indexData.substr(0, indexData.lastIndexOf(','));\n      litBibtex = litBibtex.replace(indexData, indexData.replace(/[^a-zA-Z0-9\\-_]/g, ''));\n    }\n    let citation;\n    try {\n      citation = new Cite(litBibtex);\n    } catch (error) {\n      console.error('An error occurred:', error);\n    }\n    if (onlyText) {\n      content = citation?.format('bibliography', { format: 'text', template: 'apa' });\n    } else {\n      content = (\n        <div>\n          {citation?.format('bibliography', { format: 'text', template: 'apa' })}\n        </div>\n      );\n    }\n  } else if (onlyText) {\n    content = literature.title || ' ';\n  } else {\n    content = (\n      <span>\n        {literature.title}\n        {literature.year ? `, ${literature.year}` : null}\n      </span>\n    );\n  }\n  return content;\n};\n\nfunction Citation({ literature }) {\n  const {\n    title, doi, url, isbn\n  } = literature;\n  const formatedDoi = doi ? `https://dx.doi.org/${sanitizeDoi(doi)}` : null;\n  const link = formatedDoi || url || isbn;\n  const content = literatureContent(literature);\n  return (\n    <a\n      href={link}\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n      title={title}\n      style={{ wordBreak: 'break-word' }}\n      onClick={(e) => e.stopPropagation()}\n    >\n      {content}\n    </a>\n  );\n}\nCitation.propTypes = {\n  literature: PropTypes.any.isRequired,\n};\n\nfunction CitationUserRow({ literature, userId }) {\n  return (\n    <span>\n      added by\n      {userId && literature.user_id === userId ? 'me' : literature.user_name}\n    &nbsp;\n      {(typeof literature.litype === 'undefined' || literature.litype == null || literature.litype === '')\n        ? ''\n        : `, type: ${literature.litype}`}\n    </span>\n  );\n}\n\nCitationUserRow.propTypes = {\n  literature: PropTypes.instanceOf(Literature).isRequired,\n  userId: PropTypes.number,\n};\nCitationUserRow.defaultProps = {\n  userId: 0,\n};\n\nconst groupByCitation = literatures => (\n  literatures?.keySeq()?.toArray()?.sort((i, j) => {\n    // group by literature id then sort by user id\n    const a = literatures.get(i);\n    const b = literatures.get(j);\n    return ((a.id === b.id) ? (a.user_id - b.user_id) : (a.id - b.id));\n  }).reduce((acc, currentValue, i, array) => {\n    // duplicate first row of each literature group\n    acc.push(currentValue);\n    if (i > 0) {\n      const a = literatures.get(array[i]);\n      const b = literatures.get(array[i - 1]);\n      if (a.id !== b.id) { acc.push(currentValue); }\n    } else { acc.push(currentValue); }\n    return acc;\n  }, [])\n);\n\nconst sortByElement = (literatures) => (\n  literatures.keySeq().toArray().sort((i, j) => {\n    // group by literature id then sort by user id\n    const a = literatures.get(i);\n    const b = literatures.get(j);\n    if (a.element_id === b.element_id && a.element_type === b.element_type) {\n      return (a.id - b.id);\n    }\n    return (a.element_id - b.element_id);\n  }).reduce((acc, currentValue, i, array) => {\n    // duplicate first row of each literature group\n    acc.push(currentValue);\n    if (i > 0) {\n      const a = literatures.get(array[i]);\n      const b = literatures.get(array[i - 1]);\n      if (a.id !== b.id || (a.element_id !== b.element_id || a.element_type !== b.element_type)) {\n        acc.push(currentValue);\n      }\n    } else { acc.push(currentValue); }\n    return acc;\n  }, [])\n);\n\nconst sortByReference = (literatures) => (\n  literatures.keySeq().toArray().sort((i, j) => {\n    // group by literature id then sort by user id\n    const a = literatures.get(i);\n    const b = literatures.get(j);\n    if (a.id === b.id) {\n      return ((a.element_id === b.element_id && a.element_type === b.element_type)\n        ? (a.user_id - b.user_id) : (a.element_updated_at - b.element_updated_at));\n    }\n    return (a.id - b.id);\n  }).reduce((acc, currentValue, i, array) => {\n    // duplicate first row of each literature group\n    acc.push(currentValue);\n    if (i > 0) {\n      const a = literatures.get(array[i]);\n      const b = literatures.get(array[i - 1]);\n      if (a.id !== b.id) { acc.push(currentValue); }\n    } else { acc.push(currentValue); }\n    return acc;\n  }, [])\n);\n\nexport {\n  Citation,\n  CitationUserRow,\n  doiValid,\n  sanitizeDoi,\n  literatureUrl,\n  AddButton,\n  isLiteratureValid,\n  LiteratureInput,\n  groupByCitation,\n  sortByElement,\n  sortByReference,\n  literatureContent,\n  LiteralType,\n  RefByUserInfo\n};\n","/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport Attachment from 'src/models/Attachment';\n\nexport default class ImageAnnotationEditButton extends Component {\n  allowedFileTypes = ['png', 'jpg', 'bmp', 'tif', 'svg', 'jpeg', 'tiff'];\n\n  renderButton(isActive, tooltipText) {\n    return (\n      <OverlayTrigger\n        placement=\"top\"\n        overlay={<Tooltip id=\"annotate_tooltip\">{tooltipText}</Tooltip>}\n      >\n        <span>\n          <Button\n            bsSize=\"xs\"\n            bsStyle=\"warning\"\n            style={this.props.style}\n            className={this.props.className}\n            onClick={() => {\n              if (isActive) {\n                this.props.parent.setState({\n                  imageEditModalShown: true,\n                  chosenAttachment: this.props.attachment,\n                  imageName: this.props.attachment.filename,\n                });\n              }\n            }}\n            disabled={!isActive}\n          >\n            <i className=\"fa fa-pencil-square-o\" aria-hidden=\"true\" />\n          </Button>\n        </span>\n      </OverlayTrigger>\n    );\n  }\n\n  render() {\n    if (!this.props.attachment || !this.props.attachment.filename) {\n      return null;\n    }\n\n    const extension = this.props.attachment.filename.split('.').pop();\n    const isAllowedFileType = this.allowedFileTypes.includes(extension);\n    const isActive = isAllowedFileType && !this.props.attachment.isNew;\n\n    const tooltipText = isActive\n      ? 'Annotate image'\n      : 'Cannot annotate - invalid file type or the image is new';\n\n    return this.renderButton(isActive && !this.props.disabled, tooltipText);\n  }\n}\n\nImageAnnotationEditButton.propTypes = {\n  attachment: PropTypes.instanceOf(Attachment),\n  parent: PropTypes.object.isRequired,\n  style: PropTypes.object,\n  className: PropTypes.string,\n  disabled: PropTypes.bool,\n};\n\nImageAnnotationEditButton.defaultProps = {\n  attachment: null,\n  style: {},\n  className: '',\n  disabled: false,\n};\n","/* eslint-disable react/destructuring-assignment */\n/* eslint-disable react/prefer-stateless-function */\nimport React, { Component } from 'react';\nimport { Modal, Button } from 'react-bootstrap';\n\nexport default class ImageAnnotationModalSVG extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      canSave: false\n    };\n  }\n\n  render() {\n    return (\n      <Modal\n        backdrop=\"static\"\n        bsSize=\"large\"\n        show={this.props.isShow}\n        dialogClassName=\"attachment-annotation-modal\"\n      >\n\n        <Modal.Header>\n          <Modal.Title>Image annotation</Modal.Title>\n        </Modal.Header>\n        <Modal.Body style={{ overflow: 'hidden' }}>\n          <iframe\n            title=\"SVGEditor\"\n            src=\"/svgedit/index.html\"\n            id=\"svgEditId\"\n            ref={(iframe) => { this.iframe = iframe; }}\n            style={{\n              minHeight: '500px', height: '100%', width: '100%', visibility: 'hidden'\n            }}\n            onLoad={() => {\n              // before we start: not that the iframe is visibility: hidden\n              // it looks ugly that we lazy-load a lot of UI changes on slower connections\n              // so we hide the iframe, make our changes and then show it again.\n\n              const subWindow = document.getElementById('svgEditId').contentWindow;\n              const subDocument = subWindow.document;\n              const { svgEditor } = subWindow;\n              svgEditor.setBackground('white');\n              const { attachment } = this.props;\n\n              // clear localStorage to prevent loading of previous SVGs\n              localStorage.removeItem('svgedit-default');\n\n              // Make lower toolbar a bit bigger\n              const styleOverride = subDocument.querySelector('#styleoverrides');\n              if (styleOverride) {\n                styleOverride.innerHTML = '.svg_editor { grid-template-rows: auto 15px 1fr 60px !important; }'\n                  + '.never {display: none !important; }';\n              }\n\n              // remove excess colors. we are good with 17 colors.\n              const paletteShadowDOM = subDocument.querySelector('#palette').shadowRoot || undefined;\n              if (paletteShadowDOM) {\n                paletteShadowDOM.querySelectorAll('#js-se-palette > div:nth-child(n+19)')\n                  .forEach((elem) => { elem.setAttribute('style', 'display: none'); });\n                paletteShadowDOM.querySelector('#js-se-palette')?.setAttribute('style', 'width: auto');\n                const paletteHolder = paletteShadowDOM.querySelector('#palette_holder');\n                if (paletteHolder) {\n                  paletteHolder.setAttribute(\n                    'style',\n                    'display: flex; width: auto; flex-direction: row; margin-right: 12px;'\n                  );\n                }\n              }\n\n              // hide some panels\n              subDocument.querySelector('#sidepanels')?.setAttribute('style', 'display: none');\n              subDocument.querySelector('#title_panel')?.setAttribute('style', 'display: none');\n              subDocument.querySelector('#editor_panel')?.setAttribute('style', 'display: none');\n              subDocument.querySelector('#history_panel')?.setAttribute('style', 'display: none');\n\n              // make sure top is at least 40px to prevent view bobbing\n              subDocument.querySelector('#tools_top')?.setAttribute('style', 'min-height: 40px');\n\n              // hide some buttons from the main menu\n              let buttonsToRemoveOnSight = [\n                'tool_clear',\n                'tool_open',\n                'tool_save',\n                'tool_save_as',\n                'tool_import',\n                'tool_editor_homepage',\n              ];\n\n              subDocument.querySelector('#main_button')?.setAttribute('style', 'display: none');\n\n              // first, the ones that are always present\n              buttonsToRemoveOnSight = buttonsToRemoveOnSight.map((id) => {\n                // sometimes they are in the shadow DOM, sometimes not.... do not ask me why.\n                const elem = (subDocument.querySelector(`#main_button #${id}`)\n                            || subDocument.querySelector('#main_button')?.shadowRoot.querySelector(`#${id}`));\n                if (elem) {\n                  elem?.setAttribute('style', 'display: none');\n                  elem?.remove();\n                  return undefined;\n                }\n                return id;\n              }).filter((id) => id !== undefined);\n\n              // the \"Document Property\" button only seems to update the shortcut label when the\n              // button attribute label when `label` property changes. so we do that:\n              // remove sortcut, change label -> shortcut is gone.\n              const DocumentPropertiesEntry = subDocument.querySelector('#main_button #tool_docprops')\n                || subDocument.querySelector('#main_button')?.shadowRoot.querySelector('#tool_docprops');\n              if (DocumentPropertiesEntry) {\n                DocumentPropertiesEntry?.removeAttribute('shortcut');\n                DocumentPropertiesEntry?.setAttribute('label', 'Document Properties');\n              }\n\n              // then the ones that are added later. we need to observe the DOM for changes.\n              const targetNode = subDocument.querySelector('#main_button');\n              const config = { attributes: false, childList: true, subtree: true };\n\n              // Callback function to execute when mutations are observed\n              const callback = (mutationList, observer) => {\n                mutationList.forEach((mutation) => {\n                  if (mutation.type === 'childList') {\n                    const addedNodes = Array.from(mutation.addedNodes || []);\n                    const toDelete = addedNodes.filter((node) => (\n                      node.id\n                      && buttonsToRemoveOnSight.indexOf(node.id) > -1\n                    ));\n                    toDelete.forEach((node) => {\n                      buttonsToRemoveOnSight.splice(buttonsToRemoveOnSight.indexOf(node.id), 1);\n                      node.remove();\n                    });\n\n                    if (buttonsToRemoveOnSight.length === 0) {\n                      observer.disconnect();\n                    }\n                  }\n                });\n              };\n\n              // Create an observer instance linked to the callback function and start observing\n              const observer = new MutationObserver(callback);\n              observer.observe(targetNode, config);\n\n              // no need to show shortcuts in the right-click menu ...\n              subDocument.querySelector('#se-cmenu_canvas')?.shadowRoot?.querySelectorAll('.shortcut')\n                .forEach((elem) => { elem?.setAttribute('style', 'display: none'); });\n\n              // ... since we disable all of them except the basics.\n              subDocument.addEventListener('keydown', (e) => {\n                const allowedKeys = ['Delete', 'CTRL+KeyC', 'CTRL+KeyV', 'CTRL+KeyX'];\n                const currentKey = e.ctrlKey ? `CTRL+${e.code}` : e.code;\n                if (allowedKeys.indexOf(currentKey) === -1 && e.target.nodeName === 'BODY') {\n                  console.log('Preventing default keydown event', e, currentKey, allowedKeys);\n                  e.preventDefault();\n                  e.stopImmediatePropagation();\n                  e.stopPropagation();\n                }\n              }, true);\n\n              fetch(`/api/v1/attachments/${attachment.id}/annotation`).finally(() => {\n                // make sure the iframe is visible after the fetch is done\n                // no matter if it fails or not...\n                const iframeStyle = this.iframe?.getAttribute('style');\n                const visibleStyle = iframeStyle?.replace(\n                  'visibility: hidden',\n                  'visibility: visible'\n                );\n                const newStyle = visibleStyle;\n                this.iframe?.setAttribute('style', newStyle);\n              }).then((res) => res.text())\n                .then((text) => {\n                  if (attachment.updatedAnnotation) {\n                    svgEditor.svgCanvas.setSvgString(\n                      attachment.updatedAnnotation\n                    );\n                    this.setState({ canSave: true });\n                  } else {\n                    const safeParseJson = (str) => {\n                      try {\n                        const ret = JSON.parse(str);\n                        this.setState({ canSave: true });\n                        return ret;\n                      } catch (e) {\n                        console.log('Could not parse JSON when requesting attachment!', e);\n                        this.setState({ canSave: false });\n                        return '';\n                      }\n                    };\n                    const errorSVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1920\"'\n                    + ' height=\"1080\"><text fill=\"#000000\" font-size=\"12\" stroke=\"#FF0000\" stroke-width=\"0\"'\n                    + ' text-anchor=\"middle\" transform=\"matrix(7.15604 0 0 7.15604 -3493.72 -3162.82)\"'\n                    + ' x=\"622.37\" xml:space=\"preserve\" y=\"525.48\">Loading error :(</text></svg>';\n                    const svgString = decodeURIComponent(safeParseJson(text)) || errorSVG;\n                    svgEditor.svgCanvas.setSvgString(svgString);\n                  }\n                  // Zoom fit-to-canvas\n                  subDocument.querySelector('se-text[text=\"tools.fit_to_all\"]')?.click();\n                  svgEditor.updateCanvas(false, false);\n                });\n            }}\n          />\n        </Modal.Body>\n        <Modal.Footer style={{ textAlign: 'right' }}>\n          <Button\n            onClick={() => {\n              this.setState({ canSave: false });\n              const { handleOnClose } = this.props;\n              return handleOnClose();\n            }}\n          >\n            Discard changes and close\n          </Button>\n          <Button\n            bsStyle=\"primary\"\n            disabled={!this.state.canSave}\n            onClick={() => {\n              this.setState({ canSave: false });\n              const { handleSave } = this.props;\n              return handleSave();\n            }}\n          >\n            Accept changes\n          </Button>\n        </Modal.Footer>\n      </Modal>\n    );\n  }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Alert } from 'react-bootstrap';\n\nfunction SaveEditedImageWarning({ visible, warningStyle, warningMessage }) {\n  if (!visible) {\n    return null;\n  }\n\n  return (\n    <div className={warningStyle}>\n      <Alert>{warningMessage}</Alert>\n    </div>\n  );\n}\n\nSaveEditedImageWarning.propTypes = {\n  visible: PropTypes.bool.isRequired,\n  warningStyle: PropTypes.string,\n  warningMessage: PropTypes.string\n};\n\nSaveEditedImageWarning.defaultProps = {\n  warningStyle: 'imageEditedWarning',\n  warningMessage: 'Image was edited. Please save Element to apply changes.'\n};\n\nexport default SaveEditedImageWarning;\n","import React, { useState, useEffect } from 'react';\nimport {\n  Button, OverlayTrigger, Tooltip, Dropdown, MenuItem, Glyphicon, Overlay, ButtonGroup\n} from 'react-bootstrap';\nimport ImageAnnotationEditButton from 'src/apps/mydb/elements/details/researchPlans/ImageAnnotationEditButton';\nimport { values } from 'lodash';\n// import { v4 as uuidv4 } from 'uuid';\nimport uuid from 'uuid';\nimport mime from 'mime-types';\nimport SpinnerPencilIcon from 'src/components/common/SpinnerPencilIcon';\nimport Dropzone from 'react-dropzone';\nimport Utils from 'src/utilities/Functions';\nimport ImageModal from 'src/components/common/ImageModal';\nimport ThirdPartyAppFetcher from 'src/fetchers/ThirdPartyAppFetcher';\n\nexport const attachmentThumbnail = (attachment, pubSrc = '') => (\n  <div className=\"attachment-row-image\">\n    <ImageModal\n      imageStyle={{\n        width: '45px',\n        height: '45px',\n        borderRadius: '5px',\n        backgroundColor: '#FFF',\n        objectFit: 'contain',\n        boxShadow: '0 2px 10px rgba(0, 0, 0, 0.1)',\n        transition: 'transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out',\n      }}\n      alt=\"thumbnail\"\n      previewObject={{\n        src: attachment.preview,\n      }}\n      popObject\n      disableClick\n    />\n    <div className=\"large-preview-modal\">\n      <ImageModal\n        imageStyle={{\n          width: '400px',\n          height: '400px',\n          borderRadius: '5px',\n          backgroundColor: '#FFF',\n          objectFit: 'contain',\n          boxShadow: '0 2px 10px rgba(0, 0, 0, 0.1)',\n          transition: 'transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out',\n        }}\n        hasPop\n        showPopImage\n        alt=\"thumbnail\"\n        previewObject={{\n          src: attachment.preview,\n        }}\n        popObject={\n        attachment.filename && attachment.filename.toLowerCase().match(/\\.(png|jpg|bmp|tif|svg|jpeg|tiff)$/)\n          ? {\n              fetchNeeded:true,\n              src:\n                pubSrc ||\n                `/api/v1/attachments/${attachment.id}/annotated_image`,\n            }\n          : {\n            src: attachment.preview,\n          }\n        }\n        disableClick\n      />\n    </div>\n  </div>\n);\n\nconst isImageFile = (fileName) => {\n  const acceptedImageTypes = ['png', 'jpg', 'bmp', 'tif', 'svg', 'jpeg', 'tiff'];\n  const dataType = fileName.split('.').pop().toLowerCase();\n  return acceptedImageTypes.includes(dataType);\n};\n\nexport const formatFileSize = (sizeInB) => {\n  if (sizeInB >= 1024 * 1024) {\n    return `${(sizeInB / (1024 * 1024)).toFixed(2)} MB`;\n  } if (sizeInB >= 1024) {\n    return `${(sizeInB / 1024).toFixed(1)} kB`;\n  }\n  return `${sizeInB} bytes`;\n};\n\nconst handleDownloadAnnotated = (attachment, isPublic = false) => {\n  const isImage = isImageFile(attachment.filename);\n  if (isImage && !attachment.isNew) {\n    const contents = isPublic\n      ? `/api/v1/public/download/annotated_image?id=${attachment.id}`\n      : `/api/v1/attachments/${attachment.id}/annotated_image`;\n    Utils.downloadFile({\n      contents,\n      name: attachment.filename,\n    });\n  }\n};\n\nconst handleDownloadOriginal = (attachment, isPublic = false) => {\n  const contents = isPublic\n    ? `/api/v1/public/download/attachment?id=${attachment.id}`\n    : `/api/v1/attachments/${attachment.id}`;\n  Utils.downloadFile({\n    contents,\n    name: attachment.filename,\n  });\n};\n\nconst handleOpenLocally = (attachment, option = 0) => {\n  ThirdPartyAppFetcher.getHandlerUrl(attachment.id, option).then((url) => {\n    const link = document.createElement('a');\n    link.download = attachment.filename;\n    link.href = url;\n    const event = new window.MouseEvent('click', {\n      view: window,\n      bubbles: true,\n      cancelable: true\n    });\n    link.dispatchEvent(event);\n  });\n};\n\nexport const downloadButton = (attachment, isPublic = false) => (\n  <Dropdown id={`dropdown-download-${attachment.id}`}>\n    <Dropdown.Toggle style={{ height: '30px' }} bsSize=\"xs\" bsStyle=\"primary\">\n      <i className=\"fa fa-download\" aria-hidden=\"true\" />\n    </Dropdown.Toggle>\n    <Dropdown.Menu>\n      <MenuItem\n        eventKey=\"1\"\n        onClick={() => handleDownloadOriginal(attachment, isPublic)}\n      >\n        Download Original\n      </MenuItem>\n      <MenuItem\n        eventKey=\"2\"\n        onClick={() => handleDownloadAnnotated(attachment, isPublic)}\n        disabled={!isImageFile(attachment.filename) || attachment.isNew}\n      >\n        Download Annotated\n      </MenuItem>\n      <MenuItem\n        eventKey=\"3\"\n        onClick={() => handleOpenLocally(attachment, 0)}\n        disabled={attachment.isNew}\n      >\n        Open locally\n      </MenuItem>\n    </Dropdown.Menu>\n  </Dropdown>\n);\n\nexport const removeButton = (attachment, onDelete, readOnly) => (\n  <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"delete_tooltip\">Delete attachment</Tooltip>}>\n    <Button\n      bsSize=\"xs\"\n      bsStyle=\"danger\"\n      className=\"attachment-button-size\"\n      onClick={() => onDelete(attachment)}\n      disabled={readOnly}\n    >\n      <i className=\"fa fa-trash-o\" aria-hidden=\"true\" />\n    </Button>\n  </OverlayTrigger>\n);\n\nexport const moveBackButton = (attachment, onBack, readOnly) => (\n  <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"back_tooltip\">Move attachment back to inbox</Tooltip>}>\n    <Button\n      bsSize=\"xs\"\n      bsStyle=\"danger\"\n      className=\"attachment-button-size\"\n      onClick={() => onBack(attachment)}\n      disabled={readOnly}\n    >\n      <i className=\"fa fa-backward\" aria-hidden=\"true\" />\n    </Button>\n  </OverlayTrigger>\n\n);\n\nexport const annotateButton = (attachment, parent, disabled = false) => (\n  <ImageAnnotationEditButton\n    parent={parent}\n    attachment={attachment}\n    className={`attachment-button-size ${!isImageFile(attachment.filename) ? 'attachment-gray-button' : ''}`}\n    disabled={!isImageFile(attachment.filename) || disabled}\n  />\n);\n\nexport const editButton = (\n  attachment,\n  extension,\n  attachmentEditor,\n  isEditing,\n  editDisable,\n  handleEdit\n) => {\n  const editorTooltip = (exts) => (\n    <Tooltip id=\"editor_tooltip\">\n      {editDisable ? (\n        <span>\n          Editing is only available for these files:&nbsp;\n          <strong>{exts}</strong>\n          .\n          <br />\n          Or you are not authorized to edit this file.\n        </span>\n      ) : (\n        <span>Edit attachment</span>\n      )}\n    </Tooltip>\n  );\n  return (\n    <OverlayTrigger placement=\"top\" overlay={editorTooltip(values(extension).join(','))}>\n      <Button\n        className={`attachment-button-size ${editDisable ? 'attachment-gray-button' : ''}`}\n        bsSize=\"xs\"\n        bsStyle=\"success\"\n        disabled={editDisable}\n        onClick={() => handleEdit(attachment)}\n      >\n        <SpinnerPencilIcon spinningLock={!attachmentEditor || isEditing} />\n      </Button>\n    </OverlayTrigger>\n  );\n};\n\nexport const importButton = (\n  attachment,\n  showImportConfirm,\n  importDisabled,\n  importButtonRefs,\n  showImportConfirmFunction,\n  hideImportConfirmFunction,\n  confirmAttachmentImportFunction\n) => {\n  const show = showImportConfirm[attachment.id];\n  const extension = attachment.filename.split('.').pop();\n\n  const importTooltip = importDisabled || extension !== 'xlsx'\n    ? <Tooltip id=\"import_tooltip\">Invalid type for import or element must be saved before import</Tooltip>\n    : <Tooltip id=\"import_tooltip\">Import as element data</Tooltip>;\n\n  const confirmTooltip = (\n    <Tooltip placement=\"bottom\" className=\"in\" id=\"tooltip-bottom\">\n      Import data from Spreadsheet? This will overwrite existing data.\n      <br />\n      <ButtonGroup>\n        <Button\n          bsStyle=\"success\"\n          bsSize=\"xs\"\n          onClick={() => confirmAttachmentImportFunction(attachment)}\n        >\n          Yes\n        </Button>\n        <Button\n          bsStyle=\"warning\"\n          bsSize=\"xs\"\n          onClick={() => hideImportConfirmFunction(attachment.id)}\n        >\n          No\n        </Button>\n      </ButtonGroup>\n    </Tooltip>\n  );\n\n  return (\n    <div>\n      <OverlayTrigger placement=\"top\" overlay={importTooltip}>\n        <div style={{ float: 'right' }}>\n          <Button\n            bsSize=\"xs\"\n            bsStyle=\"success\"\n            disabled={importDisabled || extension !== 'xlsx'}\n            // eslint-disable-next-line no-param-reassign\n            ref={(ref) => { importButtonRefs[attachment.id] = ref; }}\n            className={`attachment-button-size ${importDisabled\n              || extension !== 'xlsx' ? 'attachment-gray-button' : ''}`}\n            onClick={() => showImportConfirmFunction(attachment.id)}\n          >\n            <Glyphicon glyph=\"import\" />\n          </Button>\n        </div>\n      </OverlayTrigger>\n      <Overlay\n        show={show}\n        placement=\"bottom\"\n        rootClose\n        onHide={() => hideImportConfirmFunction(attachment.id)}\n        target={importButtonRefs[attachment.id]}\n      >\n        {confirmTooltip}\n      </Overlay>\n    </div>\n  );\n};\n\nexport const customDropzone = (onDrop) => (\n  <Dropzone onDrop={onDrop} className=\"attachment-dropzone\">\n    Drop files here, or click to upload.\n  </Dropzone>\n);\n\nexport const sortingAndFilteringUI = (\n  sortDirection,\n  handleSortChange,\n  toggleSortDirection,\n  handleFilterChange,\n  isSortingEnabled\n) => (\n  <div style={{\n    marginBottom: '20px', display: 'flex', justifyContent: 'space-between',\n  }}\n  >\n    {isSortingEnabled && (\n      <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center' }}>\n        {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n        <label style={{ marginRight: '10px' }}>Sort: </label>\n        <div className=\"sort-container\" style={{ display: 'flex', alignItems: 'center' }}>\n          <select\n            onChange={handleSortChange}\n            className=\"sorting-row-style\"\n            style={{ width: '100px', marginRight: '10px' }}\n          >\n            <option value=\"name\">Name</option>\n            <option value=\"size\">Size</option>\n            <option value=\"date\">Date</option>\n          </select>\n          <Button\n            style={{ marginRight: '10px', marginLeft: '-15px' }}\n            onClick={toggleSortDirection}\n            className=\"sort-icon-style\"\n          >\n            {sortDirection === 'asc' ? '▲' : '▼'}\n          </Button>\n        </div>\n      </div>\n    )}\n\n    <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center' }}>\n      {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n      <label style={{ marginRight: '10px' }}>Filter: </label>\n      <input\n        type=\"text\"\n        placeholder=\"Filter by name...\"\n        onChange={handleFilterChange}\n        className=\"sorting-row-style\"\n        style={{ width: '250px' }}\n      />\n    </div>\n  </div>\n);\n\n// validate id as uuid\n// TODO replace with uuid.validate after upgrade to uuid 10\nconst isUUID = (id) => {\n  const uuidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-6][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;\n  return uuidRegex.test(id);\n};\n\nconst filterOptions = (contentType, options) => {\n  const [itemType, itemSubtype] = (contentType || '').split('/');\n  return (options || [])\n    .filter((option) => {\n      if (!option.fileTypes || option.fileTypes.length === 0) { return false; }\n      return option.fileTypes.split(',').some((filter) => {\n        const [type, subtype] = filter.split('/');\n        return (type === '*' || type === itemType) && (!subtype || subtype === '*' || subtype === itemSubtype);\n      });\n    });\n};\n\nconst noChoice = [<MenuItem key={uuid.v4()} disabled>None Available</MenuItem>];\n\nexport function ThirdPartyAppButton({ attachment, options = [] }) {\n  const [menuItems, setMenuItems] = useState([]);\n  const contentType = mime.contentType(attachment.content_type) ? attachment.content_type : mime.lookup(attachment.filename);\n\n  useEffect(() => {\n    const generatedMenuItems = () => {\n      if (isUUID(attachment?.id)) { return noChoice; }\n      const filteredOptions = filterOptions(contentType, options);\n      if (filteredOptions.length === 0) { return noChoice; }\n      return filteredOptions.map((option) => (\n        <MenuItem\n          key={uuid.v4()}\n          eventKey={option.id}\n          onClick={() => {\n            ThirdPartyAppFetcher.fetchAttachmentToken(attachment.id, option.id)\n              .then((result) => window.open(result, '_blank'));\n          }}\n        >\n          {option.name}\n        </MenuItem>\n      ));\n    };\n    setMenuItems(generatedMenuItems());\n  }, [attachment, options]);\n\n  return (\n    <Dropdown id={`dropdown-TPA-attachment${attachment?.id || uuid.v4()}`} style={{ float: 'right' }}>\n      <Dropdown.Toggle style={{ height: '30px' }} bsSize=\"xs\" bsStyle=\"primary\">\n        <i className=\"fa fa-external-link\" aria-hidden=\"true\" />\n      </Dropdown.Toggle>\n      <Dropdown.Menu>\n        {menuItems}\n      </Dropdown.Menu>\n    </Dropdown>\n  );\n}\n","export default class SharingShortcuts {\n  static user() {\n    return {\n      permissionLevel: 3,\n      sampleDetailLevel: 10,\n      reactionDetailLevel: 10,\n      wellplateDetailLevel: 10,\n      screenDetailLevel: 10\n    }\n  }\n\n  static partner() {\n    return {\n      permissionLevel: 1,\n      sampleDetailLevel: 10,\n      reactionDetailLevel: 0,\n      wellplateDetailLevel: 10,\n      screenDetailLevel: 1\n    }\n  }\n\n  static collaborator() {\n    return {\n      permissionLevel: 0,\n      sampleDetailLevel: 1,\n      reactionDetailLevel: 0,\n      wellplateDetailLevel: 0,\n      screenDetailLevel: 0\n    }\n  }\n\n  static reviewer() {\n    return {\n      permissionLevel: 0,\n      sampleDetailLevel: 2,\n      reactionDetailLevel: 10,\n      wellplateDetailLevel: 1,\n      screenDetailLevel: 0\n    }\n  }\n\n  static supervisor() {\n    return {\n      permissionLevel: 4,\n      sampleDetailLevel: 10,\n      reactionDetailLevel: 10,\n      wellplateDetailLevel: 10,\n      screenDetailLevel: 10\n    }\n  }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, FormGroup, FormControl, ControlLabel } from 'react-bootstrap';\nimport Select from 'react-select';\n\nimport SharingShortcuts from 'src/components/managingActions/SharingShortcuts';\n\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport { selectUserOptionFormater } from 'src/utilities/selectHelper';\nimport { elementNames } from 'src/apps/generic/Utils';\n\nexport default class ManagingModalSharing extends React.Component {\n\n  constructor(props) {\n    super(props);\n\n    // TODO update for new check/uncheck info\n    let { currentUser } = UserStore.getState();\n    this.state = {\n      currentUser: currentUser,\n      role: 'Pick a sharing role',\n      permissionLevel: props.permissionLevel,\n      sampleDetailLevel: props.sampleDetailLevel,\n      reactionDetailLevel: props.reactionDetailLevel,\n      wellplateDetailLevel: props.wellplateDetailLevel,\n      screenDetailLevel: props.screenDetailLevel,\n      elementDetailLevel: props.elementDetailLevel,\n      selectedUsers: null,\n    }\n\n    this.onUserChange = this.onUserChange.bind(this);\n    this.handleSelectUser = this.handleSelectUser.bind(this);\n    this.handleSharing = this.handleSharing.bind(this);\n    this.promptTextCreator = this.promptTextCreator.bind(this);\n\n    this.loadUserByName = this.loadUserByName.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onUserChange);\n    UserActions.fetchCurrentUser();\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onUserChange);\n  }\n\n  onUserChange(state) {\n    this.setState({\n      currentUser: state.currentUser\n    })\n  }\n\n  isElementSelectionEmpty(element) {\n    return !element.checkedAll &&\n      element.checkedIds.size == 0 &&\n      element.uncheckedIds.size == 0;\n  }\n\n  isSelectionEmpty(uiState) {\n    let isSampleSelectionEmpty = this.isElementSelectionEmpty(uiState.sample);\n    let isReactionSelectionEmpty = this.isElementSelectionEmpty(uiState.reaction);\n    let isWellplateSelectionEmpty = this.isElementSelectionEmpty(uiState.wellplate);\n    let isScreenSelectionEmpty = this.isElementSelectionEmpty(uiState.screen);\n    let isCelllineSelectionEmpty = this.isElementSelectionEmpty(uiState.cell_line);\n\n    let isElementSelectionEmpty = false;\n\n    const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n    if (MatrixCheck(currentUser.matrix, 'genericElement')) {\n\n      // eslint-disable-next-line no-unused-expressions\n      elementNames(false).then((klassArray) => {\n        klassArray.forEach((klass) => {\n          isElementSelectionEmpty = isElementSelectionEmpty && this.isElementSelectionEmpty(uiState[`${klass}`]);\n        });\n      });\n    }\n\n    return isSampleSelectionEmpty &&\n      isReactionSelectionEmpty &&\n      isWellplateSelectionEmpty &&\n      isScreenSelectionEmpty &&\n      isCelllineSelectionEmpty &&\n      isElementSelectionEmpty;\n  }\n\n  filterParamsWholeCollection(uiState) {\n    let collectionId = uiState.currentCollection.id;\n    let filterParams = {\n      sample: {\n        all: true,\n        included_ids: [],\n        excluded_ids: [],\n        collection_id: collectionId\n      },\n      reaction: {\n        all: true,\n        included_ids: [],\n        excluded_ids: [],\n        collection_id: collectionId\n      },\n      wellplate: {\n        all: true,\n        included_ids: [],\n        excluded_ids: [],\n        collection_id: collectionId\n      },\n      screen: {\n        all: true,\n        included_ids: [],\n        excluded_ids: [],\n        collection_id: collectionId\n      },\n      research_plan: {\n        all: true,\n        included_ids: [],\n        excluded_ids: [],\n        collection_id: collectionId\n      },\n      currentSearchSelection: uiState.currentSearchSelection\n    };\n\n    elementNames(false).then((klassArray) => {\n      klassArray.forEach((klass) => {\n        filterParams[`${klass}`] = {\n          all: true,\n          included_ids: [],\n          excluded_ids: [],\n          collection_id: collectionId\n        };\n      });\n    });\n\n    return filterParams;\n  }\n\n  filterParamsFromUIState(uiState) {\n    let collectionId = uiState.currentCollection.id;\n\n    let filterParams = {\n      sample: {\n        all: uiState.sample.checkedAll,\n        included_ids: uiState.sample.checkedIds,\n        excluded_ids: uiState.sample.uncheckedIds,\n        collection_id: collectionId\n      },\n      reaction: {\n        all: uiState.reaction.checkedAll,\n        included_ids: uiState.reaction.checkedIds,\n        excluded_ids: uiState.reaction.uncheckedIds,\n        collection_id: collectionId\n      },\n      wellplate: {\n        all: uiState.wellplate.checkedAll,\n        included_ids: uiState.wellplate.checkedIds,\n        excluded_ids: uiState.wellplate.uncheckedIds,\n        collection_id: collectionId\n      },\n      screen: {\n        all: uiState.screen.checkedAll,\n        included_ids: uiState.screen.checkedIds,\n        excluded_ids: uiState.screen.uncheckedIds,\n        collection_id: collectionId\n      },\n      research_plan: {\n        all: uiState.research_plan.checkedAll,\n        included_ids: uiState.research_plan.checkedIds,\n        excluded_ids: uiState.research_plan.uncheckedIds,\n        collection_id: collectionId\n      },\n      cell_line: {\n        all: uiState.cell_line.checkedAll,\n        included_ids: uiState.cell_line.checkedIds,\n        excluded_ids: uiState.cell_line.uncheckedIds,\n        collection_id: collectionId\n      },\n      currentSearchSelection: uiState.currentSearchSelection\n    };\n\n    elementNames(false).then((klassArray) => {\n      klassArray.forEach((klass) => {\n        filterParams[`${klass}`] = {\n          all: uiState[`${klass}`].checkedAll,\n          included_ids: uiState[`${klass}`].checkedIds,\n          excluded_ids: uiState[`${klass}`].uncheckedIds,\n          collection_id: collectionId\n        };\n      });\n    });\n    return filterParams;\n  }\n\n  handleSharing() {\n    const {\n      permissionLevel, sampleDetailLevel, reactionDetailLevel,\n      wellplateDetailLevel, screenDetailLevel, elementDetailLevel\n    } = this.state;\n\n    const params = {\n      id: this.props.collectionId,\n      collection_attributes: {\n        permission_level: permissionLevel,\n        sample_detail_level: sampleDetailLevel,\n        reaction_detail_level: reactionDetailLevel,\n        wellplate_detail_level: wellplateDetailLevel,\n        screen_detail_level: screenDetailLevel,\n        element_detail_level: elementDetailLevel\n      },\n    };\n\n    if (this.props.collAction === \"Create\") {\n      const userIds = this.state.selectedUsers;\n      const uiState = UIStore.getState();\n      const currentCollection = uiState.currentCollection;\n      const filterParams =\n        this.isSelectionEmpty(uiState)\n          ? this.filterParamsWholeCollection(uiState)\n          : this.filterParamsFromUIState(uiState);\n      const fullParams = {\n        ...params,\n        elements_filter: filterParams,\n        user_ids: userIds,\n        currentCollection\n      };\n      CollectionActions.createSharedCollections(fullParams);\n    }\n\n    if (this.props.collAction === 'Update') { CollectionActions.updateSharedCollection(params); }\n\n    if (this.props.collAction === 'EditSync') { CollectionActions.editSync(params); }\n\n    if (this.props.collAction === 'CreateSync') {\n      const userIds = this.state.selectedUsers;\n      const fullParams = {\n        ...params,\n        user_ids: userIds,\n      };\n      CollectionActions.createSync(fullParams);\n    }\n\n    this.props.onHide();\n  }\n\n  handleShortcutChange(e) {\n    let val = e.target.value\n    let permAndDetLevs = {}\n    switch (val) {\n      case 'user':\n        permAndDetLevs = SharingShortcuts.user();\n        break;\n      case 'partner':\n        permAndDetLevs = SharingShortcuts.partner();\n        break;\n      case 'collaborator':\n        permAndDetLevs = SharingShortcuts.collaborator();\n        break;\n      case 'reviewer':\n        permAndDetLevs = SharingShortcuts.reviewer();\n        break;\n      case 'supervisor':\n        permAndDetLevs = SharingShortcuts.supervisor();\n        break;\n    }\n    this.setState({ ...permAndDetLevs, role: val });\n  }\n\n  handlePLChange(e) {\n    let val = e.target.value\n    this.setState({\n      role: 'Pick a sharing role',\n      permissionLevel: val\n    });\n  }\n\n  handleDLChange(e, elementType) {\n    let val = e.target.value\n    let state = {}\n    state[elementType + 'DetailLevel'] = val\n    state.role = 'Pick a sharing role'\n    this.setState(state)\n  }\n\n  handleSelectUser(val) {\n    if (val) {\n      this.setState({ selectedUsers: val })\n    }\n  }\n\n  loadUserByName(input) {\n    let { selectedUsers } = this.state;\n\n    if (!input) {\n      return Promise.resolve({ options: [] });\n    }\n\n    return UsersFetcher.fetchUsersByName(input, 'Person,Group')\n      .then((res) => selectUserOptionFormater(\n        { data: res, withType: true, currentUserId: this.state.currentUser.id }\n      )).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  promptTextCreator(label) {\n    return (\"Share with \\\"\" + label + \"\\\"\");\n  }\n\n  selectUsers() {\n    let style = this.props.selectUsers ? {} : { display: 'none' };\n    let { selectedUsers } = this.state;\n\n    return (\n      <div style={style}>\n        <ControlLabel>Select Users to share with</ControlLabel>\n        <Select.AsyncCreatable id=\"share-users-select\" multi={true} isLoading={true}\n          backspaceRemoves={true} value={selectedUsers}\n          valueKey=\"value\" labelKey=\"label\" matchProp=\"name\"\n          promptTextCreator={this.promptTextCreator}\n          loadOptions={this.loadUserByName}\n          onChange={this.handleSelectUser}\n        />\n      </div>\n    )\n  }\n\n  render() {\n    const displayWarning = (this.state.permissionLevel || '') === '5' ? 'inline-block' : 'none';\n    return (\n      <div>\n        <FormGroup controlId=\"shortcutSelect\">\n          <ControlLabel>Role</ControlLabel>\n          <FormControl componentClass=\"select\"\n            placeholder=\"Pick a sharing role (optional)\"\n            value={this.state.role || ''}\n            onChange={(e) => this.handleShortcutChange(e)}>\n            <option value='Pick a sharing role'>Pick a sharing role (optional)</option>\n            <option value='user'>User</option>\n            <option value='partner'>Partner</option>\n            <option value='collaborator'>Collaborator</option>\n            <option value='reviewer'>Reviewer</option>\n            <option value='supervisor'>Supervisor</option>\n          </FormControl>\n        </FormGroup>\n        <FormGroup controlId=\"permissionLevelSelect\" id=\"permissionLevelSelect\">\n          <ControlLabel>Permission level</ControlLabel>\n          <FormControl componentClass=\"select\"\n            onChange={(e) => this.handlePLChange(e)}\n            value={this.state.permissionLevel || ''}>\n            <option value='0'>Read</option>\n            <option value='1'>Write</option>\n            <option value='2'>Share</option>\n            <option value='3'>Delete</option>\n            <option value='4'>Import Elements</option>\n            <option value='5'>Pass ownership</option>\n          </FormControl>\n          <div style={{\n            color: '#d9534f', fontSize: '12px', paddingLeft: '8px', paddingTop: '4px', display: displayWarning\n          }}\n          >\n            <i className=\"fa fa-exclamation-circle\" aria-hidden=\"true\" />&nbsp;Transfering ownership applies for all sub collections.\n          </div>\n        </FormGroup>\n        <FormGroup controlId=\"sampleDetailLevelSelect\">\n          <ControlLabel>Sample detail level</ControlLabel>\n          <FormControl componentClass=\"select\"\n            onChange={(e) => this.handleDLChange(e, 'sample')}\n            value={this.state.sampleDetailLevel || ''}>\n            <option value='0'>Molecular mass of the compound, external label</option>\n            <option value='1'>Molecule, structure</option>\n            <option value='2'>Analysis Result + Description</option>\n            <option value='3'>Analysis Datasets</option>\n            <option value='10'>Everything</option>\n          </FormControl>\n        </FormGroup>\n        <FormGroup controlId=\"reactionDetailLevelSelect\">\n          <ControlLabel>Reaction detail level</ControlLabel>\n          <FormControl componentClass=\"select\"\n            onChange={(e) => this.handleDLChange(e, 'reaction')}\n            value={this.state.reactionDetailLevel || ''}>\n            <option value='0'>Observation, description, calculation</option>\n            <option value='10'>Everything</option>\n          </FormControl>\n        </FormGroup>\n        <FormGroup controlId=\"wellplateDetailLevelSelect\">\n          <ControlLabel>Wellplate detail level</ControlLabel>\n          <FormControl componentClass=\"select\"\n            onChange={(e) => this.handleDLChange(e, 'wellplate')}\n            value={this.state.wellplateDetailLevel || ''}>\n            <option value='0'>Wells (Positions)</option>\n            <option value='1'>Readout</option>\n            <option value='10'>Everything</option>\n          </FormControl>\n        </FormGroup>\n        <FormGroup controlId=\"screenDetailLevelSelect\">\n          <ControlLabel>Screen detail level</ControlLabel>\n          <FormControl componentClass=\"select\"\n            onChange={(e) => this.handleDLChange(e, 'screen')}\n            value={this.state.screenDetailLevel || ''}>\n            <option value='0'>Name, description, condition, requirements</option>\n            <option value='10'>Everything</option>\n          </FormControl>\n        </FormGroup>\n        <FormGroup controlId=\"screenDetailLevelSelect\">\n          <ControlLabel>Element detail level</ControlLabel>\n          <FormControl componentClass=\"select\"\n            onChange={(e) => this.handleDLChange(e, 'element')}\n            value={this.state.elementDetailLevel || ''}>\n            <option value='10'>Everything</option>\n          </FormControl>\n        </FormGroup>\n        {this.selectUsers()}\n        <br />\n        <Button id=\"create-sync-shared-col-btn\" bsStyle=\"warning\" onClick={this.handleSharing}>{this.props.collAction} Shared Collection</Button>\n      </div>\n    )\n  }\n}\n\nManagingModalSharing.propTypes = {\n  collectionId: PropTypes.number,\n  collAction: PropTypes.string,\n  selectUsers: PropTypes.bool,\n  permissionLevel: PropTypes.number,\n  sampleDetailLevel: PropTypes.number,\n  reactionDetailLevel: PropTypes.number,\n  wellplateDetailLevel: PropTypes.number,\n  screenDetailLevel: PropTypes.number,\n  elementDetailLevel: PropTypes.number,\n  onHide: PropTypes.func.isRequired,\n  listSharedCollections: PropTypes.bool\n};\n\nManagingModalSharing.defaultProps = {\n  collectionId: null,\n  collAction: \"Create\",\n  selectUsers: true,\n  permissionLevel: 0,\n  sampleDetailLevel: 0,\n  reactionDetailLevel: 0,\n  wellplateDetailLevel: 0,\n  screenDetailLevel: 0,\n  elementDetailLevel: 10\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UserInfoIcon = ({type}) =>{\n  switch(type) {\n    case 'Person':\n      return <i className=\"fa fa-user\" aria-hidden=\"true\"/>\n    case 'Group':\n      return <i className=\"fa fa-users\" aria-hidden=\"true\"/>\n    default:\n      return  <i className=\"fa fa-question\" aria-hidden=\"true\"/>\n  }\n}\n\nUserInfoIcon.propTypes = {\n  type: PropTypes.string.isRequired,\n}\n\nexport default UserInfoIcon;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst PermissionIcons = ({pl}) =>{\n  return(pl>-1 ?\n    <span>\n      <i className=\"fa fa-newspaper-o\"></i>\n      &nbsp;{pl>0 ? <i className=\"fa fa-pencil-square-o\"></i> : null}\n      &nbsp;{pl>1 ? <i className=\"fa fa-share-alt\"></i> : null}\n      &nbsp;{pl>2 ? <i className=\"fa fa-trash\"></i> : null}\n      &nbsp;{pl>3 ? <i className=\"fa fa-download\"></i> : null}\n      &nbsp;{pl>4 ? <i className=\"fa fa-exchange\"></i> : null}\n    </span>\n    : null\n  )\n}\n\nPermissionIcons.propTypes = {\n  pl: PropTypes.number.isRequired,\n}\n\nexport default PermissionIcons;\n","import React from 'react';\nimport Tree from 'react-ui-tree';\nimport { Button, ButtonGroup, FormControl, Modal } from 'react-bootstrap';\nimport ManagingModalSharing from 'src/components/managingActions/ManagingModalSharing';\nimport CollectionStore from 'src/stores/alt/stores/CollectionStore';\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\nimport UserInfoIcon from 'src/apps/mydb/collections/UserInfoIcon';\nimport PermissionIcons from 'src/apps/mydb/collections/PermissionIcons'\n\nexport default class MyCollections extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      active: { id: null },\n      deleted_ids: [],\n\n      tree: {\n        label: 'My Collections',\n        id: -1,\n        children: [{}]\n      },\n      modalProps: {\n        show: false,\n        title: \"\",\n        component: \"\",\n        action: null,\n        collection: {},\n        selectUsers: true,\n        isChange: false\n      }\n    }\n    this.addSubcollection=this.addSubcollection.bind(this);\n    this.onStoreChange = this.onStoreChange.bind(this);\n  }\n\n  componentDidMount() {\n    CollectionStore.listen(this.onStoreChange)\n    CollectionActions.fetchUnsharedCollectionRoots()\n  }\n\n  componentWillUnmount() {\n    CollectionStore.unlisten(this.onStoreChange)\n  }\n\n  onStoreChange(state) {\n    let children = state.unsharedRoots.length > 0 ? state.unsharedRoots : [{}];\n\n    this.setState({\n      tree: {\n        label: 'My Collections',\n        id: -1,\n        children: children\n      }\n    });\n  }\n\n  handleChange(tree) {\n    this.setState({\n      tree: tree,\n      isChange: true\n    });\n  }\n\n  isActive(node) {\n    return node === this.state.active ? \"node is-active\" : \"node\";\n  }\n\n  hasChildren(node) {\n    return node.children && node.children.length > 0\n  }\n\n  label(node) {\n    if (node.id == -1) {\n      return (\n        <FormControl \n        value =\"My Collections\" \n        type=\"text\" \n        className=\"root-label\" \n        disabled/>);\n    } else {\n      return (\n        <FormControl\n          className=\"collection-label\"\n          type=\"text\"\n          value={node.label || ''}\n          onChange={(e) => { this.handleLabelChange(e, node) }}\n        />\n      )\n    }\n  }\n\n  handleLabelChange(e, node) {\n    node.label = e.target.value;\n    this.setState({\n      tree: this.state.tree\n    });\n  }\n\n  // TODO: confirmation before start the updating process?\n  bulkUpdate() {\n    // filter empty objects\n    let collections = this.state.tree.children.filter((child) => {\n      return child.label\n    });\n\n    let params = {\n      collections: collections,\n      deleted_ids: this.state.deleted_ids\n    }\n\n    CollectionActions.bulkUpdateUnsharedCollections(params);\n  }\n\n  actions(node) {\n    if (node.id == -1) {\n      const { isChange } = this.state;\n      return (\n        <div className=\"root-actions\">\n          {isChange && <Button \n          id=\"save-collections-button\" \n          bsSize=\"xsmall\" \n          bsStyle=\"warning\" \n          onMouseDown={(e)=>{e.stopPropagation();}}\n          onClick={this.bulkUpdate.bind(this)}> Save </Button>}\n          {this.addCollectionButton(node)}\n        </div>\n      )\n    } else {\n      return (\n        <ButtonGroup className=\"actions\">\n          <Button\n            id=\"sync-users-btn\"\n            bsSize=\"xsmall\"\n            bsStyle=\"primary\"\n            disabled={node.isNew === true}\n            onClick={() => this.doSync(node, 'CreateSync')}\n          >\n            <i className=\"fa fa-plus\"></i> <i className=\"fa fa-share-alt\"></i>\n          </Button>\n\n          {this.addSubcollectionButton(node)}\n\n          <Button\n            bsSize=\"xsmall\"\n            bsStyle=\"danger\"\n            id={`delete-collection-button_${node.id}`}\n            onClick={this.deleteCollection.bind(this, node)}\n          >\n            <i className=\"fa fa-trash-o\"></i>\n          </Button>\n        </ButtonGroup>\n      )\n    }\n  }\n\n  renderSync(node) {\n    let syncOut = node.sync_collections_users;\n    let users = [];\n\n    if (syncOut) {\n      users = syncOut.map((collection, ind) => {\n        return (\n          <div className=\"node\">\n            <span key={ind} className=\"collection-sync-info\">\n              <UserInfoIcon type={collection.type} /> {collection.name}\n              &nbsp; <PermissionIcons pl={collection.permission_level} />\n            </span>\n            <ButtonGroup className=\"actions\">\n              <Button bsSize=\"xsmall\" bsStyle=\"primary\"\n                onClick={() => this.doSync(collection, 'EditSync')}>\n                <i className=\"fa fa-share-alt\">edit</i>\n              </Button>\n              <Button bsSize=\"xsmall\" bsStyle=\"danger\"\n                onClick={() => CollectionActions.deleteSync({ id: collection.id, is_syncd: false })}\n              >\n                <i className=\"fa fa-share-alt\" /> <i className=\"fa fa-trash-o\"></i>\n              </Button>\n            </ButtonGroup>\n\n\n          </div>\n        )\n      })\n    }\n    return (\n      <div>{users.map(u => u)}</div>\n    )\n  }\n\n  doSync(node, action) {\n    let { modalProps, active } = this.state\n    modalProps.title = action == \"CreateSync\"\n      ? \"Synchronize '\" + node.label + \"'\"\n      : \"Edit Synchronization\"\n    modalProps.show = true\n    modalProps.action = action\n    modalProps.collection = node\n    modalProps.selectUsers = action == \"CreateSync\"\n      ? true\n      : false\n    active = node\n    this.setState({ modalProps, active })\n  }\n\n  addCollectionButton(node) {\n    return (\n      <Button\n        id=\"add-new-collection-button\"\n        bsSize=\"xsmall\"\n        bsStyle=\"success\"\n        onClick={(e)=>{this.addSubcollection(node);}}\n        onMouseDown={(e)=>{e.stopPropagation();}}\n      >\n        <i className=\"fa fa-plus\"></i>\n      </Button>\n    )\n  }\n\n  addSubcollectionButton(node) {\n    return (\n      <Button\n        id={`add-subcollection-to-collection_${node.id}`}\n        bsSize=\"xsmall\"\n        bsStyle=\"success\"\n        onClick={this.addSubcollection.bind(this, node)}\n      >\n        <i className=\"fa fa-plus\"></i>\n      </Button>\n    )\n  }\n\n  addSubcollection(node) {\n    if (node.children) {\n      node.children.push({\n        id: Math.random(),\n        label: 'New Collection',\n        isNew: true\n      });\n    } else {\n      node.children = [{\n        id: Math.random(),\n        label: 'New Collection',\n        isNew: true\n      }];\n    }\n  }\n\n  deleteCollection(node) {\n    let children = node.children || [];\n    let parent = this.findParentById(this.state.tree, node.id);\n\n    this.removeNodeById(parent, node.id)\n    this.appendChildrenToParent(parent, children)\n\n    if (!node.isNew) {\n      let deleted_ids = this.state.deleted_ids.concat([node.id])\n\n      this.setState({\n        deleted_ids: deleted_ids\n      })\n    }\n  }\n\n  appendChildrenToParent(parent, children) {\n    if (children.length > 0) {\n      children.forEach((child) => {\n        parent.children.push(child);\n      });\n    } else if (parent.label == 'My Collections') {\n      parent.children.push({});\n    }\n  }\n\n  findParentById(root, id) {\n    if (!root.children) {\n      root.children = [];\n      return null;\n    }\n\n    let children = root.children;\n\n    for (let i = 0; i < children.length; i++) {\n      if (children[i].id == id) {\n        return root;\n      } else {\n        let parent = this.findParentById(children[i], id);\n        if (parent) {\n          return parent\n        }\n      }\n    }\n  }\n\n  removeNodeById(parent, id) {\n    parent.children = parent.children.filter((child) => {\n      return child.id != id\n    });\n  }\n\n  onClickNode(node) {\n    if (node.is_locked) {\n      this.setState({\n        active: { id: null }\n      });\n    } else {\n      this.setState({\n        active: node\n      });\n    }\n  }\n\n  handleModalHide() {\n    this.setState({\n      modalProps: {\n        show: false,\n        title: \"\",\n        component: \"\",\n        action: null,\n        collection: {},\n        selectUsers: true,\n      }\n    });\n  }\n\n  renderNode(node) {\n    if (!Object.keys(node).length == 0) {\n      return (\n        <div>\n          <span className={this.isActive(node)} onClick={this.onClickNode.bind(this, node)}>\n            {this.label(node)}\n            {this.actions(node)}\n          </span>\n          {this.renderSync(node)}\n        </div>\n      );\n    }\n  }\n  render() {\n    let mPs = this.state.modalProps\n    let mPsC = mPs.collection\n    return (\n      <div className=\"tree\">\n        <Tree\n          paddingLeft={20}                         // left padding for children nodes in pixels\n          tree={this.state.tree}                   // tree object\n          isNodeCollapsed={this.isNodeCollapsed}\n          onChange={this.handleChange.bind(this)}  // onChange(tree) tree object changed\n          renderNode={this.renderNode.bind(this)}  // renderNode(node) return react element\n        />\n        <Modal animation show={mPs.show} onHide={this.handleModalHide.bind(this)}>\n          <Modal.Header closeButton>\n            <Modal.Title>{mPs.title}</Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <ManagingModalSharing collectionId={mPsC.id}\n              onHide={this.handleModalHide.bind(this)}\n              permissionLevel={mPsC.permission_level}\n              sampleDetailLevel={mPsC.sample_detail_level} reactionDetailLevel={mPsC.reaction_detail_level}\n              wellplateDetailLevel={mPsC.wellplate_detail_level} screenDetailLevel={mPsC.screen_detail_level}\n              selectUsers={mPs.selectUsers}\n              collAction={mPs.action} />\n          </Modal.Body>\n        </Modal>\n      </div>\n    )\n  }\n}\n","import React from 'react';\nimport Tree from 'react-ui-tree';\nimport { Button, ButtonGroup, FormControl, Modal } from 'react-bootstrap';\nimport ManagingModalSharing from 'src/components/managingActions/ManagingModalSharing';\nimport CollectionStore from 'src/stores/alt/stores/CollectionStore';\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\n\nexport default class MySharedCollections extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      active: { id: null },\n      deleted_ids: [],\n\n      tree: {\n        label: 'My Shared Collections',\n        id: -1,\n        children: [{}]\n      },\n      modalProps: {\n        show: false,\n        title: \"\",\n        component: \"\",\n        action: null\n      }\n    }\n\n    this.onStoreChange = this.onStoreChange.bind(this);\n  }\n\n  componentDidMount() {\n    CollectionStore.listen(this.onStoreChange)\n    CollectionActions.fetchSharedCollectionRoots()\n  }\n\n  componentWillUnmount() {\n    CollectionStore.unlisten(this.onStoreChange)\n  }\n\n  onStoreChange(state) {\n    let children = state.sharedRoots.length > 0 ? state.sharedRoots : [{}];\n\n    this.setState({\n      tree: {\n        label: 'My Shared Collections',\n        children: children\n      }\n    });\n  }\n\n  handleChange(tree) {\n    let oldTree = this.state.tree\n    let children = oldTree.children\n    children.map((child, i) => {\n      if ('label' in tree && typeof (tree.label) == 'string' && tree.label == child.label) {\n        children[i] = tree\n        return\n      }\n    });\n    oldTree.children = children\n    this.setState({\n      tree: oldTree\n    });\n\n  }\n\n  isActive(node) {\n    return node === this.state.active ? \"node is-active\" : \"node\";\n  }\n\n  hasChildren(node) {\n    return node.children && node.children.length > 0\n  }\n\n  label(node) {\n    if (node.label == \"My Shared Collections\") {\n      return (\n        <FormControl \n        value =\"My Shared Collections\" \n        type=\"text\" \n        className=\"root-label\" \n        disabled/>);\n    } else if (node.is_locked) {\n      return (\n        <FormControl className=\"collection-label\" type=\"text\"\n          disabled\n          value={node.label || ''}\n        />\n      )\n\n    } else {\n      return (\n        <FormControl className=\"collection-label\" type=\"text\"\n          value={node.label || ''}\n          onChange={(e) => { this.handleLabelChange(e, node) }}\n        />\n      )\n    }\n  }\n\n  handleLabelChange(e, node) {\n    node.label = e.target.value;\n    this.setState({\n      tree: this.state.tree\n    });\n  }\n\n  // TODO: confirmation before start the updating process?\n  bulkUpdate() {\n    // filter empty objects\n    let collections = this.state.tree.children.filter((child) => {\n      return child.label\n    });\n\n    let params = {\n      collections: collections,\n      deleted_ids: this.state.deleted_ids\n    }\n\n    CollectionActions.bulkUpdateUnsharedCollections(params);\n  }\n\n  actions(node) {\n    if (node.label == \"My Shared Collections\") {\n      return (\n        <div className=\"root-actions\">\n          <Button bsSize=\"xsmall\" bsStyle=\"warning\"\n            onClick={this.bulkUpdate.bind(this)}\n            onMouseDown={(e)=>{e.stopPropagation();}}\n            >\n            Update\n          </Button>\n        </div>\n      )\n    } else if (!node.is_locked) {\n      return (\n        <ButtonGroup className=\"actions\">\n          <Button bsSize=\"xsmall\" bsStyle=\"primary\"\n            onClick={() => this.editShare(node)}>\n            <i className=\"fa fa-share-alt\"></i>\n          </Button>\n          <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={this.deleteCollection.bind(this, node)}>\n            <i className=\"fa fa-trash-o\"></i>\n          </Button>\n        </ButtonGroup>\n      )\n    }\n  }\n\n  editShare(node) {\n    let { modalProps, active } = this.state\n    modalProps.title = \"Update Share Settings for '\" + node.label + \"'\"\n    modalProps.show = true\n    active = node\n    this.setState({ modalProps, active })\n  }\n  deleteCollection(node) {\n    let children = node.children || [];\n    let parent = this.findParentById(this.state.tree, node.id);\n\n    this.removeNodeById(parent, node.id)\n    this.appendChildrenToParent(parent, children)\n\n    if (!node.isNew) {\n      let deleted_ids = this.state.deleted_ids.concat([node.id])\n\n      this.setState({\n        deleted_ids: deleted_ids\n      })\n    }\n  }\n\n  appendChildrenToParent(parent, children) {\n    if (children.length > 0) {\n      children.forEach((child) => {\n        parent.children.push(child);\n      });\n    } else if (parent.label == 'My Shared Collections') {\n      parent.children.push({});\n    }\n  }\n\n  findParentById(root, id) {\n    if (!root.children) {\n      root.children = [];\n      return null;\n    }\n\n    let children = root.children;\n\n    for (let i = 0; i < children.length; i++) {\n      if (children[i].id == id) {\n        return root;\n      } else {\n        let parent = this.findParentById(children[i], id);\n        if (parent) {\n          return parent\n        }\n      }\n    }\n  }\n\n  removeNodeById(parent, id) {\n    parent.children = parent.children.filter((child) => {\n      return child.id != id\n    });\n  }\n\n  onClickNode(node) {\n    if (node.is_locked) {\n      this.setState({\n        active: { id: null }\n      });\n    } else {\n      this.setState({\n        active: node\n      });\n    }\n  }\n\n  handleModalHide() {\n    this.setState({\n      modalProps: {\n        show: false,\n        title: \"\",\n        component: \"\",\n        action: null\n      }\n    });\n  }\n\n  renderNode(node) {\n    if (!Object.keys(node).length == 0) {\n      if (node.is_locked) {\n        return (\n          <span className={this.isActive(node)} onClick={this.onClickNode.bind(this, node)}>\n            {this.label(node)}\n            {this.actions(node)}\n          </span>\n        )\n      } else {\n        return (\n          <span className={this.isActive(node)} onClick={this.onClickNode.bind(this, node)}>\n            {this.label(node)}\n            {this.actions(node)}\n          </span>\n        );\n\n      }\n\n    }\n  }\n\n\n\n  render() {\n    let actNode = this.state.active\n    let trees = () => this.state.tree.children.map((e, i) => {\n      return (\n        <Tree\n          key={i}\n          paddingLeft={20}                         // left padding for children nodes in pixels\n          tree={e}                   // tree object\n          onChange={this.handleChange.bind(this)}  // onChange(tree) tree object changed\n          renderNode={this.renderNode.bind(this)}  // renderNode(node) return react element\n        />\n      )\n    })\n\n    return (\n      <div className=\"tree\">\n        <Tree\n          paddingLeft={20}                         // left padding for children nodes in pixels\n          tree={{\n            label: 'My Shared Collections',\n            id: -1,\n          }}                   // tree object\n          onChange={this.handleChange.bind(this)}  // onChange(tree) tree object changed\n          renderNode={this.renderNode.bind(this)}  // renderNode(node) return react element\n        />\n        {trees()}\n        <Modal animation show={this.state.modalProps.show} onHide={this.handleModalHide.bind(this)}>\n          <Modal.Header closeButton>\n            <Modal.Title>{this.state.modalProps.title}</Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <ManagingModalSharing collectionId={actNode.id}\n              onHide={this.handleModalHide.bind(this)}\n              permissionLevel={actNode.permission_level}\n              sampleDetailLevel={actNode.sample_detail_level} reactionDetailLevel={actNode.reaction_detail_level}\n              wellplateDetailLevel={actNode.wellplate_detail_level} screenDetailLevel={actNode.screen_detail_level}\n              selectUsers={false}\n              collAction=\"Update\" />\n          </Modal.Body>\n        </Modal>\n      </div>\n    )\n  }\n}\n","import React from 'react';\nimport Tree from 'react-ui-tree';\nimport { Button, ButtonGroup, FormControl, OverlayTrigger, Popover } from 'react-bootstrap';\nimport CollectionStore from 'src/stores/alt/stores/CollectionStore';\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\n\nexport default class SharedWithMeCollections extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      tree: {\n        label: 'Shared with me Collections',\n        id: -1,\n        children: [{}]\n      }\n    }\n    this.onStoreChange = this.onStoreChange.bind(this);\n    this.handleClick = this.handleClick.bind(this);\n  }\n\n  componentDidMount() {\n    CollectionStore.listen(this.onStoreChange)\n    CollectionActions.fetchRemoteCollectionRoots()\n  }\n\n  componentWillUnmount() {\n    CollectionStore.unlisten(this.onStoreChange)\n  }\n\n  onStoreChange(state) {\n    const children = state.remoteRoots.length > 0 ? state.remoteRoots : [{}];\n\n    children.map((child) => {\n      if (child.is_locked) {\n        let label = '';\n        if (child.shared_by != null) {\n          label = `by ${child.shared_by.initials} (${child.shared_by.name})`;\n        }\n        if (child.shared_to != null) {\n          label += ` with ${child.shared_to.initials} (${child.shared_to.name})`;\n        }\n        child.label = label;\n      }\n      return child;\n    });\n\n    this.setState({\n      tree: {\n        label: 'Shared with me Collections',\n        children\n      }\n    });\n  }\n\n  handleClick() {\n    this.setState({ show: !this.state.show });\n  }\n\n  label(node) {\n    if(node.label == \"Shared with me Collections\") {\n      return (\n        <FormControl \n        value =\"Synchronized with me Collections\" \n        type=\"text\" \n        className=\"root-label\" \n        disabled/>);\n    } else {\n      return (\n        <FormControl\n          className=\"collection-label\"\n          type=\"text\"\n          disabled\n          value={node.label || ''}\n        />\n      )\n    }\n  }\n\n  actions(node) {\n    const popover = (\n      <Popover id=\"popover-positioned-scrolling-left\">\n        delete collection: <br /> {node.label} ?<br />\n        <ButtonGroup>\n          <Button bsStyle=\"danger\" bsSize=\"xsmall\" onClick={() => CollectionActions.rejectShared({ id: node.id })}>\n          Yes\n          </Button>\n          <Button bsStyle=\"warning\" bsSize=\"xsmall\" onClick={this.handleClick} >\n          No\n          </Button>\n        </ButtonGroup>\n      </Popover>\n    );\n\n    if (!node.is_locked && node.label !== 'Shared with me Collections') {\n      if (typeof (node.shared_to) === 'undefined' || !node.shared_to) {\n        return (\n          <ButtonGroup className=\"actions\">\n            <OverlayTrigger\n              animation\n              placement=\"bottom\"\n              root\n              trigger=\"focus\"\n              overlay={popover}\n            >\n              <Button bsSize=\"xsmall\" bsStyle=\"danger\" >\n                <i className=\"fa fa-trash-o\" />\n              </Button>\n            </OverlayTrigger>\n          </ButtonGroup>\n        )\n      }\n    }\n    return (\n      <div />\n    )\n  }\n\n  renderNode(node) {\n    if (!Object.keys(node).length == 0) {\n      return (\n        <span className=\"node\">\n          {this.label(node)}\n          {this.actions(node)}\n        </span>\n      );\n    }\n    return (\n      <div />\n    )\n  }\n\n  render() {\n    const trees = () => this.state.tree.children.map((e, i) => {\n      return (\n        <Tree\n          key={i}\n          draggable={false}\n          paddingLeft={20}\n          tree={e}\n          renderNode={this.renderNode.bind(this)}\n        />\n      )\n    })\n\n    return (\n      <div className=\"tree\">\n        <Tree\n          draggable={false}\n          paddingLeft={20}\n          tree={{\n            label: 'Shared with me Collections',\n            id: -1,\n          }}\n          renderNode={this.renderNode.bind(this)}\n        />\n        {trees()}\n      </div>\n    )\n  }\n}\n","import React from 'react';\nimport Tree from 'react-ui-tree';\nimport { Button, ButtonGroup, FormControl, OverlayTrigger, Popover } from 'react-bootstrap';\nimport CollectionStore from 'src/stores/alt/stores/CollectionStore';\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\n\nexport default class SyncWithMeCollections extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      tree: {\n        label: 'Synchronized with me Collections',\n        id: -1,\n        children: [{}],\n      }\n    }\n    this.onStoreChange = this.onStoreChange.bind(this);\n    this.handleClick = this.handleClick.bind(this);\n  }\n\n  componentDidMount() {\n    CollectionStore.listen(this.onStoreChange)\n    CollectionActions.fetchSyncInCollectionRoots()\n  }\n\n  componentWillUnmount() {\n    CollectionStore.unlisten(this.onStoreChange)\n  }\n\n  onStoreChange(state) {\n    const children = state.syncInRoots.length > 0 ? state.syncInRoots : [{}];\n    children.map((child) => {\n      if (child.is_locked) {\n        let label = '';\n        if (child.shared_by != null) {\n          label = `by ${child.shared_by.initials} (${child.shared_by.name})`;\n        }\n        if (child.shared_to != null) {\n          label += ` with ${child.shared_to.initials} (${child.shared_to.name})`;\n        }\n        child.label = label;\n      }\n      return child;\n    });\n\n    this.setState({\n      tree: {\n        label: 'Synchronized with me Collections',\n        children\n      }\n    });\n  }\n\n  handleClick() {\n    this.setState({ show: !this.state.show });\n  }\n\n  label(node) {\n    if (node.root) {\n      return (\n        <FormControl \n        value =\"Synchronized with me Collections\" \n        type=\"text\" \n        className=\"root-label\" \n        disabled/>);\n    }\n    return (\n      <FormControl\n        className=\"collection-label\"\n        type=\"text\"\n        disabled\n        value={node.label || ''}\n      />\n    )\n  }\n\n  actions(node) {\n    const popover = (\n      <Popover id=\"popover-positioned-scrolling-left\">\n        delete collection: <br /> {node.label} ?<br />\n        <ButtonGroup>\n          <Button bsStyle=\"danger\" bsSize=\"xsmall\" onClick={() => CollectionActions.rejectSync({ id: node.id, is_syncd: true })}>\n          Yes\n          </Button>\n          <Button bsStyle=\"warning\" bsSize=\"xsmall\" onClick={this.handleClick} >\n          No\n          </Button>\n        </ButtonGroup>\n      </Popover>\n    );\n    if (!node.is_locked && node.label !== 'Synchronized with me Collections') {\n      if (typeof (node.user) !== 'undefined' && node.user.type === 'Person') {\n        return (\n          <ButtonGroup className=\"actions\">\n            <OverlayTrigger\n              animation\n              placement=\"bottom\"\n              onExit={document.body.click()}\n              root\n              trigger=\"focus\"\n              overlay={popover}\n            >\n              <Button bsSize=\"xsmall\" bsStyle=\"danger\" >\n                <i className=\"fa fa-trash-o\" />\n              </Button>\n            </OverlayTrigger>\n          </ButtonGroup>\n        )\n      }\n    }\n    return (\n      <div />\n    )\n  }\n\n  renderNode(node) {\n    if (!Object.keys(node).length == 0) {\n      return (\n        <span className=\"node\">\n          {this.label(node)}\n          {this.actions(node)}\n        </span>\n      );\n    }\n    return (\n      <div />\n    )\n  }\n\n  render() {\n    const trees = () => this.state.tree.children.map((e, i) => {\n      return (\n        <Tree\n          key={i}\n          draggable={false}\n          paddingLeft={20}\n          tree={e}\n          renderNode={this.renderNode.bind(this)}\n        />\n      )\n    })\n\n    return (\n      <div className=\"tree\">\n        <Tree\n          draggable={false}\n          paddingLeft={20}\n          tree={{\n            label: 'Synchronized with me Collections',\n            root: true,\n            id: -1,\n            path: -1\n          }}\n          renderNode={this.renderNode.bind(this)}\n        />\n        {trees()}\n      </div>\n    )\n  }\n}\n","// replace _ with space and capitalize first letter of each word\nconst capitalizeWords = (string) => (string || '')\n  .replace(/_+/, ' ')\n  .replace(/\\s+/g, ' ')\n  .trim()\n  .replace(/\\b\\w/g, (m) => m.toUpperCase());\n\nexport default capitalizeWords;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport flow from 'lodash/flow';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport capitalizeWords from 'src/utilities/textHelper';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\n\nconst layoutSource = {\n  beginDrag(props) {\n    return props;\n  }\n};\n\nconst layoutTarget = {\n  drop(props, monitor, component) {\n    props.moveLayout(monitor.getItem(), props);\n  }\n};\n\nclass TabLayoutCell extends Component {\n  render() {\n    const {\n      cell,\n      connectDragSource,\n      connectDropTarget,\n      isElementDetails,\n      isHidden,\n      title,\n      isCollectionTab\n    } = this.props;\n\n    const elnElements = ['sample', 'reaction', 'screen', 'wellplate', 'research_plan','cell_line'];\n    let cellIcon = `icon-${cell}`;\n    let cellTitle = capitalizeWords(cell);\n    let cellDescription = '';\n\n    if (!elnElements.includes(cell)) {\n      const genericElements = UserStore.getState().genericEls || [];\n      const genericElement = (genericElements && genericElements.find((el) => el.name === cell)) || {};\n      cellIcon = genericElement.icon_name || 'fa fa-circle-thin';\n      cellTitle = genericElement.label;\n      cellDescription = genericElement.desc;\n    }\n\n    let content = isElementDetails ? (\n      <div style={{ width: '100%' }}>\n        <p className=\"tab-layout-cell\">{title === 'hidden' ? '-' : title}</p>\n      </div>\n    ) : (\n      <div>\n        <i className={cellIcon} title={[cellTitle, cellDescription].join(': ')}>\n          {isHidden ? '\\u00A0' : ''}\n        </i>\n      </div>\n    );\n\n    content = isCollectionTab ? (\n      <div style={{ width: 'auto' }}>\n        <p className=\"tab-layout-cell\">{title === 'hidden' ? '-' : title}</p>\n      </div>\n    ) : (\n      content\n    );\n\n    return connectDragSource(connectDropTarget(content), { dropEffect: 'copy' });\n  }\n}\n\nexport default flow(\n  DragSource(DragDropItemTypes.LAYOUT, layoutSource, (connect, monitor) => ({\n    connectDragSource: connect.dragSource(),\n    isDragging: monitor.isDragging()\n  })),\n  DropTarget(DragDropItemTypes.LAYOUT, layoutTarget, (connect) => ({\n    connectDropTarget: connect.dropTarget()\n  }))\n)(TabLayoutCell);\n\nTabLayoutCell.propTypes = {\n  connectDragSource: PropTypes.func.isRequired,\n  isDragging: PropTypes.bool.isRequired,\n  isHidden: PropTypes.bool.isRequired,\n  cell: PropTypes.string.isRequired,\n  index: PropTypes.any.isRequired,\n  moveLayout: PropTypes.func.isRequired\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Immutable from 'immutable';\nimport uuid from 'uuid';\n\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport TabLayoutCell from 'src/apps/mydb/elements/tabLayout/TabLayoutCell';\nimport capitalizeWords from 'src/utilities/textHelper';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nexport default class TabLayoutContainer extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      visible: Immutable.List(props.visible),\n      hidden: Immutable.List(props.hidden)\n    };\n\n    this.moveLayout = this.moveLayout.bind(this);\n  }\n\n  moveLayout(dragItem, hoverItem) {\n    let { visible, hidden } = this.state;\n\n    if (!dragItem.isHidden && hoverItem.isHidden && visible.size === 1) return;\n\n    if (dragItem.isHidden && dragItem.title === 'hidden') return;\n\n    if (dragItem.isHidden) {\n      hidden = hidden.splice(dragItem.index, 1);\n    } else if (visible.size > 1) {\n      visible = visible.splice(dragItem.index, 1);\n    }\n\n    if (hoverItem.isHidden) {\n      hidden = hidden.splice(hoverItem.index, 0, dragItem.cell);\n    } else {\n      visible = visible.splice(hoverItem.index, 0, dragItem.cell);\n    }\n\n    if (hidden.size === 0) {\n      hidden = ArrayUtils.pushUniq(hidden, 'hidden');\n    } else if (hidden.size > 1) {\n      hidden = ArrayUtils.removeFromListByValue(hidden, 'hidden');\n    }\n\n    visible = ArrayUtils.removeFromListByValue(visible, 'hidden');\n    this.setState({ visible, hidden });\n  }\n\n  render() {\n    const { visible, hidden } = this.state;\n    const { isElementDetails, tabTitles, isCollectionTab } = this.props;\n    const { moveLayout } = this;\n    let segmentKlasses = (UserStore.getState() && UserStore.getState().segmentKlasses) || [];\n    let segmentTabs = segmentKlasses.map(s => s.label);\n\n    const visibleCells = visible.map((cell, index) => {\n      const defTitle = segmentTabs.includes(cell) ? cell : capitalizeWords(cell);\n      return (\n        <td key={uuid.v4()}>\n          <TabLayoutCell\n            cell={cell}\n            index={index}\n            isElementDetails={isElementDetails}\n            isHidden={false}\n            moveLayout={moveLayout}\n            title={tabTitles[cell] || defTitle}\n            isCollectionTab={isCollectionTab}\n          />\n        </td>\n      );\n    });\n\n    const hiddenCells = hidden.map((cell, index) => {\n      const defTitle = segmentTabs.includes(cell) ? cell : capitalizeWords(cell);\n      return (\n        <td className=\"hidden-layout\" key={uuid.v4()}>\n          <TabLayoutCell\n            cell={cell}\n            index={index}\n            isElementDetails={isElementDetails}\n            isHidden\n            moveLayout={moveLayout}\n            title={tabTitles[cell] || defTitle}\n            isCollectionTab={isCollectionTab}\n          />\n        </td>\n      );\n    });\n\n    return (\n      <table className=\"layout-container\" style={{ overflowY: 'scroll' }}>\n        <tbody style={{ textAlign: 'left' }}>\n          <tr>{visibleCells}</tr>\n          <tr>{hiddenCells}</tr>\n        </tbody>\n      </table>\n    );\n  }\n}\n\nTabLayoutContainer.propTypes = {\n  tabTitles: PropTypes.object,\n};\n\nTabLayoutContainer.defaultProps = {\n  tabTitles: {},\n};\n","import { getElementSegments } from 'src/utilities/ElementUtils';\nimport Immutable from 'immutable';\n\nconst getVisibilityList = (layout, availableTabs, addInventoryTab) => {\n  if (typeof layout === 'undefined') {\n    // eslint-disable-next-line no-param-reassign\n    layout = { properties: 1, analyses: 2, attachments: 3 };\n  }\n  const layoutKeys = Object.keys(layout);\n\n  if (addInventoryTab && layout) {\n    // eslint-disable-next-line no-param-reassign\n    layout.inventory = layout.inventory || layoutKeys.length + 1;\n  }\n  const enabled = availableTabs.filter(val => layoutKeys.includes(val));\n  const leftover = availableTabs.filter(val => !layoutKeys.includes(val));\n  const visible = [];\n  let hidden = [];\n\n  enabled.forEach((key) => {\n    const order = layout[key];\n    if (order < 0) { hidden[Math.abs(order)] = key; }\n    if (order > 0) { visible[order] = key; }\n  });\n\n  leftover.forEach(key => hidden.push(key));\n\n  let first = null;\n  if (visible.length === 0) {\n    first = hidden.filter(n => n !== undefined)[0];\n    if (first) {\n      visible.push(first);\n    }\n  }\n  hidden = hidden.filter(n => n);\n  if (hidden.length === 0) {\n    hidden.push('hidden');\n  }\n  return {\n    visible: Immutable.List(visible.filter(n => n !== undefined)),\n    hidden: Immutable.List(hidden.filter(n => (n !== undefined && n !== first)))\n  };\n};\n\nconst getArrayFromLayout = (layout, element, addInventoryTab, availableTabs = null ) => {\n  if (typeof layout === 'undefined') {\n    // eslint-disable-next-line no-param-reassign\n    layout = { properties: 1, analyses: 2, attachments: 3 };\n  }\n  const layoutKeys = Object.keys(layout);\n  let segmentAvailableTabs = availableTabs ? [] : getElementSegments(element, layoutKeys);\n  availableTabs = [...availableTabs, ...segmentAvailableTabs];\n  return getVisibilityList(layout, availableTabs, addInventoryTab);\n};\n\nconst filterTabLayout = (layoutState) => {\n  const { visible, hidden } = layoutState;\n  const layout = {};\n\n  visible.forEach((value, index) => {\n    layout[value] = (index + 1);\n  });\n  hidden.filter(val => val !== 'hidden').forEach((value, index) => {\n    layout[value] = (-index - 1);\n  });\n  return layout;\n};\n\nexport { getArrayFromLayout, filterTabLayout };\n","import React from 'react';\nimport Tree from 'react-ui-tree';\nimport {\n  Button, FormControl, Modal, Col, ButtonGroup,\n} from 'react-bootstrap';\nimport _ from 'lodash';\nimport CollectionStore from 'src/stores/alt/stores/CollectionStore';\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\nimport TabLayoutContainer from 'src/apps/mydb/elements/tabLayout/TabLayoutContainer';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport { filterTabLayout, getArrayFromLayout } from 'src/utilities/CollectionTabsHelper';\n\nconst elements = [\n  { name: 'sample', label: 'Sample' },\n  { name: 'reaction', label: 'Reaction' },\n  { name: 'wellplate', label: 'Wellplate' },\n  { name: 'screen', label: 'Screen' },\n  { name: 'research_plan', label: 'Research Plan' }\n];\n\nexport default class CollectionTabs extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      profileData: {},\n      showModal: false,\n      currentCollection: {},\n      layouts: [],\n      tree: {\n        label: 'My Collections',\n        id: -1,\n        children: [{}]\n      },\n    };\n    this.tabRef = [];\n\n    this.onStoreChange = this.onStoreChange.bind(this);\n    this.onClickCollection = this.onClickCollection.bind(this);\n    this.clickedOnBack = this.clickedOnBack.bind(this);\n    this.onUserStoreChange = this.onUserStoreChange.bind(this);\n  }\n\n  componentDidMount() {\n    CollectionStore.listen(this.onStoreChange);\n    UserStore.listen(this.onUserStoreChange);\n    UserActions.fetchProfile();\n    CollectionActions.fetchUnsharedCollectionRoots();\n  }\n\n  componentWillUnmount() {\n    CollectionStore.unlisten(this.onStoreChange);\n    UserStore.unlisten(this.onUserStoreChange);\n  }\n\n  onStoreChange(state) {\n    const children = state.unsharedRoots.length > 0 ? state.unsharedRoots : [{}];\n\n    this.setState({\n      tree: {\n        label: 'My Collections',\n        id: -1,\n        children\n      }\n    });\n  }\n\n  onUserStoreChange(state) {\n    const data = (state.profile && state.profile.data) || {};\n    if (!data) {\n      UserActions.fetchProfile();\n    }\n    this.setState({ profileData: data });\n  }\n\n  onClickCollection(node) {\n    const { addInventoryTab } = this.props;\n    const { layouts, profileData } = this.state;\n    this.setState({ currentCollection: node });\n    this.handleModalOptions(this.state.showModal);\n    elements.forEach((element, index) => {\n      let layout = {};\n      if (_.isEmpty(node.tabs_segment[element.name])) {\n        layout = (profileData && profileData[`layout_detail_${element.name}`]) || {};\n      } else {\n        layout = node.tabs_segment[element.name];\n      }\n      const { visible, hidden } = getArrayFromLayout(layout, element.name, addInventoryTab);\n      layout = { visible, hidden };\n      layouts[index] = layout;\n    });\n\n    this.setState({ layouts });\n  }\n\n  handleChange(tree) {\n    this.setState({\n      tree\n    });\n  }\n\n  handleModalOptions(showModal) {\n    this.setState({ showModal: !showModal });\n  }\n\n  handleSave(showModal) {\n    const cCol = this.state.currentCollection;\n    let layoutSegments = {};\n    elements.map((_e, index) => {\n      const layout = filterTabLayout(this.tabRef[index].state);\n      layoutSegments = { ...layoutSegments, [elements[index].name]: layout };\n    });\n    const params = { layoutSegments, currentCollectionId: cCol.id };\n    CollectionActions.createTabsSegment(params);\n    this.setState({ showModal: !showModal });\n    if (cCol.ancestry) {\n      this.state.tree.children.find((c) => c.id === parseInt(cCol.ancestry)).children.find((ch) => ch.id === cCol.id).tabs_segment = layoutSegments;\n    } else {\n      this.state.tree.children.find((c) => c.id === cCol.id).tabs_segment = layoutSegments;\n    }\n  }\n\n  clickedOnBack() {\n    this.handleModalOptions(this.state.showModal);\n  }\n\n  label(node) {\n    if (node.label === 'My Collections') {\n      return (\n        <FormControl \n        value =\"My Collections\" \n        type=\"text\" \n        className=\"root-label\" \n        disabled/>);\n    }\n    return (\n      <FormControl className=\"collection-label\" type=\"text\" value={node.label || ''} disabled />\n    );\n  }\n\n  isActive(node) {\n    return node === this.state.active ? 'node is-active' : 'node';\n  }\n\n  renderNode(node) {\n    if (!Object.keys(node).length == 0) {\n      if (node.is_locked || node.id < 1) {\n        return (\n          <span className={this.isActive(node)}>\n            {this.label(node)}\n          </span>\n        );\n      } else {\n        return (\n          <tr>\n            <td colSpan='6'>\n              <span className={this.isActive(node)}>\n                {this.label(node)}\n              </span>\n            </td>\n            <td colSpan='6'>\n              <ButtonGroup className='collection-tab-edit-btn'>\n                <Button\n                  className='collection-tab-edit-btn'\n                  bsSize='xsmall'\n                  bsStyle='primary'\n                  onClick={this.onClickCollection.bind(this, node)}\n                  title='Click to edit collection tab sorting'\n                >\n                  <i className='glyphicon glyphicon-pencil'/>\n                </Button>\n              </ButtonGroup>\n            </td>\n          </tr>\n        );\n      }\n    }\n  }\n\n  render() {\n    const { tree, showModal, layouts } = this.state;\n    const tabTitlesMap = {\n      qc_curation: 'QC & curation',\n      computed_props: 'computed props',\n      nmr_sim: 'NMR Simulation'\n    };\n    return (\n      <div className=\"tree\">\n        <Tree\n          paddingLeft={30}\n          tree={tree}\n          isElementDetails\n          onChange={this.handleChange.bind(this)}\n          renderNode={this.renderNode.bind(this)}\n        />\n        <Modal className=\"collection-tab-modal\" animation show={showModal} onHide={() => this.handleModalOptions(showModal)}>\n          <Modal.Header closeButton>\n            <Modal.Title>{this.state.currentCollection.label}</Modal.Title>\n          </Modal.Header>\n          <Modal.Body style={{ paddingTop: '2px', paddingBottom: '2px', overflow: 'auto' }} className=\"collection-tab-modal-body\">\n            {layouts.map((lay, index) => {\n              const callbackRef = (node) => this.tabRef[index] = node;\n              return (\n                <div style={{ textAlign: 'left' }}>\n                  <Col md={6}>\n                    <p className=\"collection-tag-element\">{elements[index].label}</p>\n                  </Col>\n                  <Col md={12}>\n                    <TabLayoutContainer\n                      visible={lay.visible}\n                      hidden={lay.hidden}\n                      tabTitles={tabTitlesMap}\n                      isCollectionTab\n                      ref={callbackRef}\n                    />\n                  </Col>\n                  &nbsp;\n                </div>\n              );\n            })}\n          </Modal.Body>\n          <Modal.Footer style={{ textAlign: 'left' }}>\n            <div className=\"alert alert-info\" role=\"alert\" style={{ width: 'fit-content' }}>\n              <p style={{ fontSize: '13px' }}>\n                For the selected collection you can adjust the visibility of segment tabs and their order for each of the above items.\n                Drag and drop to select the order of segment tab layout.\n                Items in the white area will be displayed in the order they are placed and the grey area items will be hidden.\n              </p>\n            </div>\n            <Button bsStyle=\"primary\" onClick={() => this.handleSave(showModal)}>Save</Button>\n          </Modal.Footer>\n        </Modal>\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport { Tabs, Tab } from 'react-bootstrap';\n\nimport MyCollections from 'src/apps/mydb/collections/MyCollections';\nimport MySharedCollections from 'src/apps/mydb/collections/MySharedCollections';\nimport SharedWithMeCollections from 'src/apps/mydb/collections/SharedWithMeCollections';\nimport SyncWithMeCollections from 'src/apps/mydb/collections/SyncWithMeCollections';\nimport CollectionTabs from 'src/apps/mydb/collections/CollectionTabs';\n\nconst CollectionManagement = () => {\n  const tabContents = [\n    <Tab eventKey={0} key={0} title=\"My Collections\"><MyCollections /></Tab>,\n    <Tab eventKey={1} key={1} title=\"My Shared Collections\"><MySharedCollections /></Tab>,\n    <Tab eventKey={2} key={2} title=\"Collections shared with me \"><SharedWithMeCollections /></Tab>,\n    <Tab eventKey={3} key={3} title=\"Collections synchronized with me \"><SyncWithMeCollections /></Tab>,\n    <Tab eventKey={4} key={4} title=\"Collection Tabs\"><CollectionTabs /></Tab>\n  ];\n\n  return (\n    <div id=\"collection-management\">\n      <Tabs defaultActiveKey={0} id=\"collection-management-tab\">\n        {tabContents.map(e => e)}\n      </Tabs>\n    </div>\n  );\n};\n\nexport default CollectionManagement;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Tooltip } from 'react-bootstrap';\nimport UserInfoIcon from 'src/apps/mydb/collections/UserInfoIcon';\n\nconst UserInfos = ({ users }) => {\n  let tipUsers = users.map((user, ind) => {\n    return <div key={ind}><UserInfoIcon type={user.type} /> {user.name}<br /></div>\n  })\n  return (\n    <Tooltip id=\"tooltip\">\n      {tipUsers.map(u => u)}\n    </Tooltip>\n  )\n}\n\nUserInfos.propTypes = {\n  users: PropTypes.array.isRequired,\n}\n\nexport default UserInfos;\n","import React from 'react';\nimport { ButtonGroup, Button, Tooltip, OverlayTrigger } from 'react-bootstrap';\n\nclass GatePushBtn extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {};\n  }\n\n  transmitting(e, collection_id, method = 'GET') {\n    if (this.ovltg) {\n      this.ovltg.hide();\n    }\n    this.setState(() => ({}));\n    // eslint-disable-next-line camelcase\n    return fetch(`/api/v1/gate/transmitting/${collection_id}`, {\n      credentials: 'same-origin',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      method,\n    })\n      .then(resp =>\n        resp.json().then(data => ({\n          status: resp.status,\n          ok: resp.ok,\n          error: data && data.error,\n          target: data && data.target,\n        }))\n      )\n      .then(response => {\n        const newState = { status: 'redirect', target: response.target };\n        if (response.status === 404) {\n          newState.message =\n            'The access token is not set. Retrieve one now on chemotion.net?';\n        } else if (response.status === 401) {\n          if (response.error && response.error.match(/expired/)) {\n            newState.message =\n              'The access token has expired. Renew it now on chemotion.net?';\n          } else {\n            newState.message = `The access token is misconfigured ('${response.error}'). Renew it now on chemotion.net?`;\n          }\n        } else if (!response.ok) {\n          newState.status = 'unavailable';\n        } else {\n          newState.status = 'confirm';\n        }\n        this.setState(() => newState);\n      });\n  }\n\n  tooltipContent() {\n    const { status, message, target } = this.state;\n    let content;\n    if (status === 'confirm') {\n      content = (\n        <div>\n          Mirror Sample and Reaction data to your chemotion.net account ?\n          <ButtonGroup>\n            <Button\n              bsStyle=\"danger\"\n              bsSize=\"xsmall\"\n              onClick={e =>\n                this.transmitting(e, this.props.collection_id, 'POST')\n              }\n            >\n              Yes\n            </Button>\n            <Button\n              bsStyle=\"warning\"\n              bsSize=\"xsmall\"\n              onClick={() => this.ovltg.hide()}\n            >\n              No\n            </Button>\n          </ButtonGroup>\n        </div>\n      );\n    } else if (status === 'unavailable') {\n      content = (\n        <div>\n          Sorry, it seems chemotion-repository.net can not be reached at the\n          moment\n          <ButtonGroup>\n            <Button\n              bsStyle=\"warning\"\n              bsSize=\"xsmall\"\n              onClick={() => this.ovltg.hide()}\n            >\n              OK\n            </Button>\n          </ButtonGroup>\n        </div>\n      );\n    } else if (status === 'redirect') {\n      content = (\n        <div>\n          {message} &nbsp;\n          <ButtonGroup>\n            <Button\n              bsStyle=\"danger\"\n              bsSize=\"xsmall\"\n              onClick={e => {\n                this.ovltg.hide();\n                window.location.assign(\n                  `${target}pages/tokens?origin=${encodeURI(\n                    window.location.origin\n                  )}`\n                );\n                // window.open(`${target}pages/tokens?origin=${encodeURI(window.location.origin)}` , '_blank');\n              }}\n            >\n              Yes\n            </Button>\n            <Button\n              bsStyle=\"warning\"\n              bsSize=\"xsmall\"\n              onClick={() => this.ovltg.hide()}\n            >\n              No\n            </Button>\n          </ButtonGroup>\n        </div>\n      );\n    } else if (this.ovlg) {\n      this.ovltg.hide();\n    }\n    return <Tooltip id=\"chemotion-net-gate\">{content}</Tooltip>;\n  }\n\n  render() {\n    return (\n      <ButtonGroup>\n        <OverlayTrigger\n          trigger=\"click\"\n          overlay={this.tooltipContent()}\n          placement=\"bottom\"\n          ref={ov => {\n            this.ovltg = ov;\n          }}\n        >\n          <Button\n            bsStyle=\"success\"\n            bsSize=\"xsmall\"\n            onClick={e => this.transmitting(e, this.props.collection_id)}\n          >\n            <i className=\"fa fa-cloud\" />\n          </Button>\n        </OverlayTrigger>\n      </ButtonGroup>\n    );\n  }\n}\n\nexport default GatePushBtn;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Aviator from 'aviator';\nimport { Glyphicon, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport CollectionStore from 'src/stores/alt/stores/CollectionStore';\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\nimport UserInfos from 'src/apps/mydb/collections/UserInfos';\nimport GatePushBtn from 'src/components/common/GatePushBtn';\nimport { collectionShow, scollectionShow } from 'src/utilities/routesUtils';\nimport { CollectionDesc } from 'src/repoHome/RepoCommon';\n\nconst labeling = (label) => {\n  if (typeof (label) === 'string' && (label.startsWith('Reviewing') || label.startsWith('Element To Review') || label.startsWith('Reviewed'))) {\n    const ls = label.split(',');\n    if (ls.length >= 3) {\n      const sicon = ls[1].substr(1) === '0' ? '' : <i className=\"icon-sample\"> {ls[1].substr(1)} &nbsp; </i>;\n      const ricon = ls[2].substr(1) === '0' ? '' : <i className=\"icon-reaction\"> {ls[2].substr(1)} &nbsp;  </i>;\n      return label.startsWith('Reviewing') ?\n        (\n          <div style={{ display: 'inline', color: 'red' }}>\n            {ls[0]} &nbsp; {sicon} {ricon}\n          </div>\n        ) :\n        (\n          <div style={{ display: 'inline' }}>\n            {ls[0]} &nbsp; {sicon} {ricon}\n          </div>\n        );\n    }\n  }\n  return label;\n}\n\nexport default class CollectionSubtree extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      isRemote: props.isRemote,\n      currentCollection: props.currentCollection,\n      label: props.root.label,\n      inventoryPrefix: props.root.inventory_prefix,\n      selected: false,\n      root: props.root,\n      visible: false\n    }\n\n    this.onChange = this.onChange.bind(this)\n    this.toggleExpansion = this.toggleExpansion.bind(this)\n    this.handleClick = this.handleClick.bind(this)\n  }\n\n\n  componentDidMount() {\n    UIStore.listen(this.onChange);\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    this.setState({\n      root: nextProps.root,\n      label: nextProps.root.label,\n      inventoryPrefix: nextProps.root.inventory_prefix\n    });\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    if (state.currentCollection) {\n      const visible = this.isVisible(this.state.root, state)\n      const { root } = this.state;\n\n      const selectedCol = (\n        state.currentCollection.id == root.id &&\n        state.currentCollection.is_synchronized == root.is_synchronized\n      ) || (\n          state.currentCollection.id == root.id &&\n          state.currentCollection.isRemote == root.isRemote\n        )\n\n      if (selectedCol) {\n        this.setState({\n          selected: true,\n          currentCollection: state.currentCollection,\n          visible\n        });\n      } else {\n        this.setState({\n          selected: false,\n          currentCollection: state.currentCollection,\n          visible\n        });\n      }\n    }\n  }\n\n  isVisible(node, uiState) {\n    if (node.descendant_ids && uiState.currentCollection?.id) {\n      let currentCollectionId = parseInt(uiState.currentCollection.id)\n      if (node.descendant_ids.indexOf(currentCollectionId) > -1) return true\n    }\n\n    let { visibleRootsIds } = CollectionStore.getState();\n    return (visibleRootsIds.indexOf(node.id) > -1)\n  }\n\n  selectedCssClass(currentCollection) {\n    const { root } = this.state;\n    if (this.state.selected || (currentCollection && currentCollection.id == root.id && currentCollection.is_synchronized == root.is_synchronized)) {\n      return 'selected';\n    }\n    return '';\n  }\n\n  children() {\n    return this.state.root.children || [];\n  }\n\n  hasChildren() {\n    return this.children().length > 0;\n  }\n\n  subtrees() {\n    const children = this.children();\n\n    if (this.hasChildren()) {\n      return children.map((child, index) => {\n        return (\n          <li key={index}>\n            <CollectionSubtree root={child} isRemote={this.state.isRemote} />\n          </li>\n        );\n      });\n    }\n    return null;\n  }\n\n  expandButton() {\n    let icon = this.state.visible ? 'minus' : 'plus';\n\n    if (this.hasChildren()) {\n      return (\n        <Glyphicon\n          glyph={icon}\n          style={{ float: 'right', marginLeft: '5px' }}\n          onClick={this.toggleExpansion}\n        />\n      );\n    }\n    return (<div />);\n  }\n\n  takeOwnershipButton() {\n    const { root } = this.state;\n    const { isRemote } = this.state;\n    const isTakeOwnershipAllowed = this.state.root.permission_level === 5;\n    const isSync = !!((root.sharer && root.user && root.user.type !== 'Group'));\n    if ((isRemote || isSync) && isTakeOwnershipAllowed) {\n      return (\n        <div className=\"take-ownership-btn\">\n          <i className=\"fa fa-exchange\" onClick={e => this.handleTakeOwnership(e)} />\n        </div>\n      )\n    }\n    return (<div />);\n  }\n\n  handleTakeOwnership() {\n    const isSync = !!this.state.root.sharer;\n    CollectionActions.takeOwnership({ id: this.state.root.id, isSync });\n  }\n\n  handleClick(e) {\n    const { root } = this.state\n    let {visible} = this.state\n    const uiState = UIStore.getState()\n\n    visible = visible || this.isVisible(root, uiState);\n    this.setState({ visible });\n    let collectionID = 'all';\n    if (root.label === 'All' && root.is_locked) {\n      Aviator.navigate(`/collection/all/${this.urlForCurrentElement()}`, { silent: true });\n      collectionShow({ params: { collectionID } });\n      return;\n    }\n    const url = (this.props.root.sharer)\n      ? `/scollection/${root.id}/${this.urlForCurrentElement()}`\n      : `/collection/${root.id}/${this.urlForCurrentElement()}`;\n    Aviator.navigate(url, { silent: true });\n    collectionID = this.state.root.id;\n    const collShow = this.props.root.sharer ? scollectionShow : collectionShow;\n    collShow({ params: { collectionID } });\n  }\n\n  urlForCurrentElement() {\n    const { currentElement } = ElementStore.getState();\n    if (currentElement) {\n      if (currentElement.isNew) {\n        return `${currentElement.type}/new`;\n      }\n      return `${currentElement.type}/${currentElement.id}`;\n    }\n    return '';\n  }\n\n  toggleExpansion(e) {\n    e.stopPropagation()\n    let { visible, root } = this.state\n    visible = !visible\n    this.setState({ visible: visible })\n\n    let { visibleRootsIds } = CollectionStore.getState()\n    if (visible) {\n      visibleRootsIds.push(root.id)\n    } else {\n      let descendantIds = root.descendant_ids\n        ? root.descendant_ids\n        : root.children.map(function (s) { return s.id })\n      descendantIds.push(root.id)\n      visibleRootsIds = visibleRootsIds.filter(x => descendantIds.indexOf(x) == -1)\n    }\n\n    // Remove duplicate\n    let newIds = Array.from(new Set(visibleRootsIds))\n    CollectionActions.updateCollectrionTree(newIds)\n  }\n\n  synchronizedIcon() {\n    let sharedUsers = this.state.root.sync_collections_users\n    return (\n      sharedUsers && sharedUsers.length > 0\n        ? <OverlayTrigger placement=\"bottom\" overlay={UserInfos({ users: sharedUsers })}>\n          <i className=\"fa fa-share-alt\" style={{ float: \"right\" }}></i>\n        </OverlayTrigger>\n        : null\n    )\n  }\n\n\n  render() {\n    const { root, visible, currentCollection } = this.state\n    let { label } = this.state\n\n    label = labeling(label);\n\n    let style;\n    if (!visible) {\n      style = {\n        display: 'none',\n        marginBottom: 0\n      };\n    }\n    const gated = root && root.is_locked && label == 'chemotion-repository.net' ?\n      <GatePushBtn collection_id={root.id} /> : null;\n    return (\n      <div className=\"tree-view\" key={root.id}>\n        {this.takeOwnershipButton()}\n\n        <div id={`tree-id-${root.label}`} className={\"title \" + this.selectedCssClass(currentCollection)}\n          onClick={this.handleClick}>\n          {this.expandButton()}\n          {this.synchronizedIcon()}\n          {gated}\n          {label}\n          <CollectionDesc label={root.label} />\n        </div>\n        <ul style={style}>\n          {this.subtrees()}\n        </ul>\n      </div>\n    )\n  }\n}\n\nCollectionSubtree.propTypes = {\n  isRemote: PropTypes.bool,\n  root: PropTypes.object\n};\n","import React from 'react';\nimport { Button, OverlayTrigger, Badge, Glyphicon, Tooltip } from 'react-bootstrap';\nimport update from 'immutability-helper';\nimport Aviator from 'aviator';\nimport CollectionStore from 'src/stores/alt/stores/CollectionStore';\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\nimport CollectionSubtree from 'src/apps/mydb/collections/CollectionSubtree';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport UserInfos from 'src/apps/mydb/collections/UserInfos';\n\nconst colVisibleTooltip = <Tooltip id=\"col_visible_tooltip\">Toggle own collections</Tooltip>;\n\nexport default class CollectionTree extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const collecState = CollectionStore.getState();\n\n    this.state = {\n      unsharedRoots: collecState.unsharedRoots,\n      sharedRoots: collecState.sharedRoots,\n      remoteRoots: collecState.remoteRoots,\n      lockedRoots: collecState.lockedRoots,\n      syncInRoots: collecState.syncInRoots,\n      ownCollectionVisible: true,\n      sharedWithCollectionVisible: false,\n      sharedToCollectionVisible: false,\n      syncCollectionVisible: false,\n      visible: false,\n      root: {},\n      selected: false,\n    };\n\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    CollectionStore.listen(this.onChange);\n    CollectionActions.fetchLockedCollectionRoots();\n    CollectionActions.fetchUnsharedCollectionRoots();\n    CollectionActions.fetchSharedCollectionRoots();\n    CollectionActions.fetchRemoteCollectionRoots();\n    CollectionActions.fetchSyncInCollectionRoots();\n  }\n\n  componentWillUnmount() {\n    CollectionStore.unlisten(this.onChange);\n  }\n\n  handleSectionToggle = (visible) => {\n    this.setState((prevState) => ({\n      [visible]: !prevState[visible],\n    }));\n  };\n\n  onChange(state) {\n    this.setState(state);\n  }\n\n  lockedSubtrees() {\n    const roots = this.state.lockedRoots;\n\n    return this.subtrees(roots, null, false);\n  }\n\n  removeOrphanRoots(roots) {\n    let newRoots = []\n    roots.forEach((root) => {\n      if (root.children.length > 0) newRoots.push(root)\n    })\n\n    return newRoots;\n  }\n\n  unsharedSubtrees() {\n    let roots = this.state.unsharedRoots;\n    roots = roots.filter(function (item) { return !item.isNew })\n\n    return this.subtrees(roots, null, false);\n  }\n\n  sharedSubtrees() {\n    let { sharedRoots, sharedToCollectionVisible } = this.state\n    sharedRoots = this.removeOrphanRoots(sharedRoots)\n\n    let labelledRoots = sharedRoots.map(e => {\n      return update(e, {\n        label: {\n          $set:\n            <span>{this.labelRoot('shared_to', e)}</span>\n        }\n      })\n    })\n\n    let subTreeLabels = (\n      <div className=\"tree-view\">\n        <div\n          className=\"title\"\n          style={{ backgroundColor: 'white' }}\n          onClick={() => this.handleSectionToggle('sharedToCollectionVisible')}\n        >\n          <i className=\"fa fa-share-alt share-icon\" />&nbsp;&nbsp;\n          My shared collections\n        </div>\n      </div>\n    )\n    return this.subtrees(labelledRoots, subTreeLabels,\n      false, sharedToCollectionVisible)\n  }\n\n  remoteSubtrees() {\n    let { remoteRoots, sharedWithCollectionVisible } = this.state\n    remoteRoots = this.removeOrphanRoots(remoteRoots)\n\n    let labelledRoots = remoteRoots.map(e => {\n      return update(e, {\n        label: {\n          $set:\n            <span>\n              {this.labelRoot('shared_by', e)}\n              {' '}\n              {this.labelRoot('shared_to', e)}\n            </span>\n        }\n      })\n    })\n\n    let subTreeLabels = (\n      <div className=\"tree-view\">\n        <div\n          id=\"shared-home-link\"\n          className=\"title\"\n          style={{ backgroundColor: 'white' }}\n          onClick={() => this.handleSectionToggle('sharedWithCollectionVisible')}\n        >\n          <i className=\"fa fa-share-alt share-icon\" />\n          &nbsp;&nbsp;\n          Shared with me &nbsp;\n        </div>\n      </div>\n    )\n\n    return this.subtrees(labelledRoots, subTreeLabels,\n      false, sharedWithCollectionVisible)\n  }\n\n  remoteSyncInSubtrees() {\n    let { syncInRoots, syncCollectionVisible } = this.state\n    syncInRoots = this.removeOrphanRoots(syncInRoots)\n\n    let labelledRoots = syncInRoots.map(e => {\n      return update(e, {\n        label: {\n          $set:\n            <span>\n              {this.labelRoot('shared_by', e)}\n              {' '}\n              {this.labelRoot('shared_to', e)}\n            </span>\n        }\n      })\n    })\n\n    let subTreeLabels = (\n      <div className=\"tree-view\">\n        <div\n          id=\"synchron-home-link\"\n          className=\"title\"\n          style={{ backgroundColor: 'white' }}\n          onClick={() => this.handleSectionToggle('syncCollectionVisible')}\n        >\n          <i className=\"fa fa-share-alt\" />&nbsp;&nbsp;\n          Synchronized with me &nbsp;\n        </div>\n      </div>\n    )\n\n    return this.subtrees(labelledRoots, subTreeLabels,\n      false, syncCollectionVisible)\n  }\n\n\n  labelRoot(sharedToOrBy, rootCollection) {\n    let shared = rootCollection[sharedToOrBy]\n    if (!shared) return <span />\n\n    return (\n      <OverlayTrigger placement=\"bottom\" overlay={UserInfos({ users: [shared] })}>\n        <span>\n          &nbsp; {sharedToOrBy == 'shared_to' ? 'with' : 'by'}\n          &nbsp; {shared.initials}\n        </span>\n      </OverlayTrigger>\n    )\n  }\n\n  convertToSlug(name) {\n    return name.toLowerCase()\n  }\n\n  subtrees(roots, label, isRemote, visible = true) {\n    const { currentCollection } = UIStore.getState();\n    const subtrees = roots && roots.map((root, index) => {\n      return <CollectionSubtree root={root} key={index} isRemote={isRemote} currentCollection={currentCollection} />\n    });\n\n    let subtreesVisible = visible ? \"\" : \"none\"\n    return (\n      <div>\n        {label}\n        <div style={{ display: subtreesVisible }}>\n          {subtrees}\n        </div>\n      </div>\n    )\n  }\n\n  collectionManagementButton() {\n    return (\n      <div className=\"take-ownership-btn\">\n        <Button id=\"collection-management-button\" bsSize=\"xsmall\" bsStyle=\"danger\"\n          title=\"Manage & organize collections: create or delete collections, adjust sharing options, adjust the visibility of tabs based on the collection level\"\n          onClick={() => this.handleCollectionManagementToggle()}>\n          <i className=\"fa fa-cog\"></i>\n        </Button>\n      </div>\n    )\n  }\n\n  handleCollectionManagementToggle() {\n    UIActions.toggleCollectionManagement();\n    const { showCollectionManagement, currentCollection, isSync } = UIStore.getState();\n    if (showCollectionManagement) {\n      Aviator.navigate('/collection/management');\n    } else {\n      if (currentCollection == null || currentCollection.label == 'All') {\n        Aviator.navigate(`/collection/all/${this.urlForCurrentElement()}`);\n      } else {\n        Aviator.navigate(isSync\n          ? `/scollection/${currentCollection.id}/${this.urlForCurrentElement()}`\n          : `/collection/${currentCollection.id}/${this.urlForCurrentElement()}`);\n      }\n    }\n  }\n\n  urlForCurrentElement() {\n    const { currentElement } = ElementStore.getState();\n    if (currentElement) {\n      if (currentElement.isNew) {\n        return `${currentElement.type}/new`;\n      }\n      else {\n        return `${currentElement.type}/${currentElement.id}`;\n      }\n    }\n    else {\n      return '';\n    }\n  }\n\n  // For Repository\n  publicRoots(roots, preservePublic) {\n    let newRoots =[]\n    roots.forEach((root) => {\n      if(preservePublic) {\n        if (root.is_public) newRoots.push(root)\n      } else {\n        if (!root.is_public) newRoots.push(root)\n      }\n    })\n\n    return newRoots\n  }\n\n\n  // For Repository\n  publicSubtrees() {\n    let {syncInRoots, syncChemotionVisible} = this.state\n    syncInRoots = this.removeOrphanRoots(syncInRoots)\n    syncInRoots = this.publicRoots(syncInRoots, true)\n\n    let orderedRoots = []\n    if (syncInRoots && syncInRoots[0] && syncInRoots[0].children) {\n      syncInRoots[0].children.map((e,idx) => {\n        if (e.label.match(/hemotion/) ) {\n          orderedRoots[0] = e;\n          orderedRoots[0].label = 'Chemotion';\n        } else if (typeof e.label === 'string' && e.label === 'Scheme-only reactions') {\n          orderedRoots[1] = e;\n        } else if (e.label.match(/Published Elements/)) {\n          orderedRoots[2] = e\n          orderedRoots[2].label = 'My Published Elements'\n        } else if (e.label === 'Pending Publications') {orderedRoots[3] = e  }\n        else if (typeof e.label === 'string' && e.label.startsWith('Reviewing')) {orderedRoots[4] = e  }\n        else if (typeof e.label === 'string' && e.label.startsWith('Element To Review')) {orderedRoots[5] = e  }\n        else if (typeof e.label === 'string' && e.label.startsWith('Reviewed')) { orderedRoots[6] = e }\n        else if (typeof e.label === 'string' && e.label === 'Embargo Accepted') { orderedRoots[7] = e }\n        else if (e.label === 'Embargoed Publications') {orderedRoots[8] = e  }\n        else {orderedRoots[idx+10] = e  }\n      })\n    }\n\n    let subTreeLabels = (\n      <div className=\"tree-view\">\n        <div className={\"title title-public \" } style={{backgroundColor:'white'}}\n        >\n        </div>\n      </div>\n    )\n\n    return this.subtrees(orderedRoots, subTreeLabels,\n                         true, syncChemotionVisible)\n  }\n\n  render() {\n    const { ownCollectionVisible } = this.state;\n\n    const ownCollectionDisplay = ownCollectionVisible ? '' : 'none';\n\n    return (\n      <div>\n        <div className=\"tree-view\">\n        <div className=\"tree-wrapper\">\n            {this.publicSubtrees()}\n          </div>\n\n          <OverlayTrigger placement=\"top\" delayShow={1000} overlay={colVisibleTooltip}>\n            <div\n              className=\"title\"\n              style={{ backgroundColor: 'white' }}\n              onClick={() => this.handleSectionToggle('ownCollectionVisible')}\n            >\n              <i className=\"fa fa-list\" /> &nbsp;&nbsp; My Collections\n            </div>\n          </OverlayTrigger>\n        </div>\n        <div className=\"tree-wrapper\" style={{ display: ownCollectionDisplay }}>\n          {this.lockedSubtrees()}\n          {/* {this.unsharedSubtrees()} */}\n        </div>\n        {/* <div className=\"tree-wrapper\">\n          {this.sharedSubtrees()}\n        </div>\n        <div className=\"tree-wrapper\">\n          {this.remoteSubtrees()}\n        </div>\n        <div className=\"tree-wrapper\">\n          {this.remoteSyncInSubtrees()}\n        </div> */}\n      </div>\n    );\n  }\n}\n","import React from 'react'\n\nimport UIActions from 'src/stores/alt/actions/UIActions'\n\nexport default class ElementAllCheckbox extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state =  {\n      showOptions: false,\n      currentOption: 2\n    }\n\n    this.options = [\"current\", \"all\", \"none\"]\n\n    this.toggleCheckbox = this.toggleCheckbox.bind(this)\n    this.showOptions = this.showOptions.bind(this)\n    this.selectAll = this.selectAll.bind(this)\n  }\n\n  toggleCheckbox(e) {\n    let {currentOption} = this.state\n    currentOption = (currentOption + 1) % 3\n\n    this.setState({currentOption: currentOption}, this.selectAll)\n\n    e.preventDefault()\n    e.stopPropagation()\n  }\n\n  showOptions(e) {\n    this.setState({ showOptions: !this.state.showOptions })\n  }\n\n  selectAll(option) {\n    if (option == null) option = this.state.currentOption\n    let range = this.options[option]\n\n    let newChecked = !this.props.checked\n    let params = {\n      type: this.props.type,\n      range: range\n    }\n\n    if(newChecked) {\n      UIActions.checkAllElements(params)\n    } else {\n      UIActions.uncheckAllElements(params)\n    }\n\n    this.setState({ showOptions: false, currentOption: option })\n  }\n\n  render() {\n    let {showOptions, currentOption} = this.state\n    let {ui, type} = this.props\n\n    let checkMarkClass = \"fa \"\n    if (ui.checkedAll == true) {\n      checkMarkClass += \"fa-check\"\n    } else if (ui.checkedIds && ui.checkedIds.size > 0) {\n      checkMarkClass += \"fa-minus\"\n    }\n    let checkMark = (<i className={checkMarkClass}/>)\n\n    let optionStyle = {}\n    if (showOptions) {\n      optionStyle.display = \"block\"\n    } else {\n      optionStyle.display = \"none\"\n    }\n\n    return (\n      <div className=\"all-checkbox\" onClick={this.showOptions}>\n        <div className=\"checkbox-dropdown\">\n          <span className=\"span-checkbox\" onClick={this.toggleCheckbox}>\n            {checkMark}\n          </span>\n          &nbsp;&nbsp;\n          <i className=\"fa fa-caret-down\"/>\n        </div>\n        <div className=\"checkbox-options\" style={optionStyle}>\n          <div onClick={() => this.selectAll(0)}>Current page</div>\n          <div onClick={() => this.selectAll(1)}>All pages</div>\n          <div onClick={() => this.selectAll(2)}>None</div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DragSource } from 'react-dnd';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\n\nconst listSource = { beginDrag(props) { return props; } };\n\nconst collectSource = (connect, monitor) => ({\n  connectDragSource: connect.dragSource(),\n  isDragging: monitor.isDragging(),\n});\n\nconst ElementContainer = ({ connectDragSource, sourceType }) => {\n  if (sourceType === DragDropItemTypes.SAMPLE || sourceType === DragDropItemTypes.MOLECULE) {\n    return connectDragSource(\n      <span className=\"fa fa-arrows dnd-arrow-enable text-info\" />,\n      { dropEffect: 'copy' },\n    );\n  } else if (sourceType === DragDropItemTypes.GENERALPROCEDURE) {\n    return connectDragSource(<span className=\"fa fa-home dnd-arrow-enable text-info\" />);\n  } else if (sourceType === DragDropItemTypes.WELLPLATE ||\n             sourceType === DragDropItemTypes.REACTION ||\n             sourceType === DragDropItemTypes.RESEARCH_PLAN) {\n    return connectDragSource(<span className=\"fa fa-arrows dnd-arrow-enable text-info\" />);\n  } else if (sourceType === DragDropItemTypes.ELEMENT) {\n    return connectDragSource(<span className=\"fa fa-arrows dnd-arrow-enable text-info\" />);\n  }\n  return <span className=\"fa fa-arrows dnd-arrow-disable\" />;\n};\n\nexport default DragSource(props => props.sourceType, listSource, collectSource)(ElementContainer);\n\nElementContainer.propTypes = {\n  connectDragSource: PropTypes.func.isRequired,\n  sourceType: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport UIActions from 'src/stores/alt/actions/UIActions';\n\nexport default class ElementCheckbox extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      checked: false,\n      element: props.element\n    }\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const { element, checked } = nextProps;\n    this.setState({\n      element,\n      checked\n    });\n  }\n\n  updateCheckedStatus(element, state) {\n    let checked = this.isChecked(element, state);\n    this.setState({checked: checked});\n  }\n\n  toggleCheckbox() {\n    let newChecked = !this.props.checked;\n\n    if(newChecked) {\n      UIActions.checkElement(this.state.element);\n    } else {\n      UIActions.uncheckElement(this.state.element);\n    }\n  }\n\n  render() {\n    return (\n      <input\n        type=\"checkbox\"\n        onChange={this.toggleCheckbox.bind(this)}\n        checked={this.props.checked}\n        className=\"element-checkbox\"\n      />\n    );\n  }\n}\n","/* eslint-disable react/destructuring-assignment */\n/* eslint-disable camelcase */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Label, OverlayTrigger, Popover, Button\n} from 'react-bootstrap';\nimport Aviator from 'aviator';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nexport default class ElementCollectionLabels extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      element: props.element\n    };\n\n    this.handleOnClick = this.handleOnClick.bind(this);\n    this.preventOnClick = this.preventOnClick.bind(this);\n  }\n\n  handleOnClick(label, e, is_synchronized) {\n    e.stopPropagation();\n\n    const collectionUrl = is_synchronized ? '/scollection' : '/collection';\n    const url = `${collectionUrl}/${label.id}/${this.state.element.type}/${this.state.element.id}`;\n\n    Aviator.navigate(url);\n  }\n\n  preventOnClick(e) {\n    e.stopPropagation();\n  }\n\n  labelStyle(label) {\n    return label.is_shared ? 'warning' : 'info';\n  }\n\n  formatLabels(labels, is_synchronized) {\n    return labels.map((label, index) => {\n      if (is_synchronized && label.isOwner) {\n        return (\n          <span className=\"collection-label\" key={index}>\n            <Button disabled bsStyle=\"default\" bsSize=\"xs\">\n              {label.name}\n            </Button>\n            &nbsp;\n          </span>\n        );\n      }\n      return (\n        <span className=\"collection-label\" key={index}>\n          <Button bsStyle=\"default\" bsSize=\"xs\" onClick={(e) => this.handleOnClick(label, e, is_synchronized)}>\n            {label.name}\n          </Button>\n          &nbsp;\n        </span>\n      );\n    });\n  }\n\n  renderCollectionsLabels(collectionName, labels, is_synchronized = false) {\n    if (labels.length === 0) return <span />;\n\n    return (\n      <div>\n        <h3 className=\"popover-title\">{collectionName}</h3>\n        <div className=\"popover-content\">\n          {this.formatLabels(labels, is_synchronized)}\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    const { element } = this.state;\n\n    if (!element.tag || !element.tag.taggable_data || !element.tag.taggable_data.collection_labels) {\n      return (<span />);\n    }\n\n    let { currentUser } = UserStore.getState();\n    currentUser = currentUser || {};\n\n    const { collection_labels } = element.tag.taggable_data;\n    const shared_labels = [];\n    const labels = [];\n    const sync_labels = [];\n    collection_labels.forEach((label) => {\n      if (label) {\n        if (!label.is_shared && !label.is_synchronized && label.user_id === currentUser.id) {\n          labels.push(label);\n        } else if (label.is_shared && !label.is_synchronized\n          && (label.user_id === currentUser.id || label.shared_by_id === currentUser.id)) {\n          shared_labels.push(label);\n        } else if (label.is_synchronized && (label.user_id\n          === currentUser.id || label.shared_by_id === currentUser.id)) {\n          let isOwner = false;\n          if (label.shared_by_id === currentUser.id) {\n            isOwner = true;\n          }\n          sync_labels.push({ ...label, isOwner });\n        }\n      }\n    });\n\n    const total_shared_collections = shared_labels.length + sync_labels.length;\n\n    if (labels.length === 0 && total_shared_collections === 0) { return (<span />); }\n\n    const collectionOverlay = (\n      <Popover className=\"collection-overlay\" id=\"element-collections\">\n        {this.renderCollectionsLabels('My Collections', labels)}\n        {this.renderCollectionsLabels('Shared Collections', shared_labels)}\n        {this.renderCollectionsLabels('Synchronized Collections', sync_labels, true)}\n      </Popover>\n    );\n\n    return (\n      <div style={{ display: 'inline-block' }} onClick={this.preventOnClick}>\n        <OverlayTrigger\n          trigger=\"click\"\n          rootClose\n          placement={this.props.placement}\n          overlay={collectionOverlay}\n        >\n          <span className=\"collection-label\" key={element.id}>\n            <Label>\n              <i className=\"fa fa-list\" />\n              {` ${labels.length} `}\n              {' - '}\n              {`${total_shared_collections} `}\n              <i className=\"fa fa-share-alt\" />\n            </Label>\n          </span>\n        </OverlayTrigger>\n      </div>\n    );\n  }\n}\n\nElementCollectionLabels.propTypes = {\n  element: PropTypes.shape({\n    id: PropTypes.number,\n    type: PropTypes.string,\n    tag: PropTypes.shape({\n      taggable_data: PropTypes.shape({\n        collection_labels: PropTypes.arrayOf(PropTypes.shape({\n          id: PropTypes.number,\n          name: PropTypes.string,\n          is_shared: PropTypes.bool,\n          is_synchronized: PropTypes.bool,\n          user_id: PropTypes.number,\n          shared_by_id: PropTypes.number,\n        })),\n      }),\n    }),\n  }).isRequired,\n  placement: PropTypes.string,\n};\n\nElementCollectionLabels.defaultProps = {\n  placement: 'left',\n};\n","import React from 'react';\nimport { Label, OverlayTrigger, Popover } from 'react-bootstrap';\n\nexport default class ElementAnalysesLabels extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      element: props.element\n    }\n  }\n\n  render() {\n\n    return (\n      <div style={{ display: 'inline-block', marginTop: '-5px' }}\n        onClick={(e) => { e.stopPropagation() }}>\n        {this.analysesLabels(this.state.element)}\n      </div>\n    );\n  }\n\n\n\n  analysesLabels(element) {\n    if (!element.tag) return (<span />)\n    if (!element.tag.taggable_data) return (<span />)\n\n    let analyses = element.tag.taggable_data.analyses\n\n    if (!analyses) return (<span />)\n\n    let unconfirmedTitle = 'Unconfirmed Analysis'\n    if (analyses.Unconfirmed && Object.keys(analyses.unconfirmed).length > 1)\n      unconfirmedTitle = 'Unconfirmed Analyses'\n\n    let confirmedTitle = 'Confirmed Analysis'\n    if (analyses.Confirmed && Object.keys(analyses.confirmed).length > 1)\n      confirmedTitle = 'Confirmed Analyses'\n\n    return (\n      <div style={{ display: 'inline-block' }}>\n        {this.labelWithPopover(unconfirmedTitle, analyses.unconfirmed)}\n        {this.labelWithPopover(confirmedTitle, analyses.confirmed)}\n      </div>\n    )\n  }\n\n  labelWithPopover(title, labels) {\n    if (!labels) return (<span />)\n\n    let { element } = this.state\n    let experiment = <i className='fa fa-bar-chart' />\n\n    let label_popover = (\n      <Popover title={title} id={'labelpop' + element.id}>\n        {this.formatLabels(labels)}\n      </Popover>\n    )\n\n    let status = title.match(/Unconfirmed/)\n      ? <i className=\"fa fa-question\" />\n      : <i className=\"fa fa-check\" />\n    let total = Object.values(labels).reduce((a, b) => a + b, 0)\n\n    return (\n      <OverlayTrigger trigger=\"click\" rootClose placement=\"left\" overlay={label_popover}>\n        <span className=\"collection-label\" key={element.id}>\n          <Label>\n            {experiment} {total} {status}\n          </Label>\n        </span>\n      </OverlayTrigger>\n    );\n  }\n\n  formatLabels(labels) {\n    const regExp = /\\(([^)]+)\\)/;\n    return Object.keys(labels).map((key) => {\n      let key_syn = (regExp.exec(key || '') || ['']).pop().trim();\n      if (key_syn === '') {\n        key_syn = (key || '').split('|').pop().trim();\n      };\n\n      return (\n        <span className=\"collection-label\" key={key}>\n          <Label bsStyle='default' bsSize='xs'>\n            {key_syn || \"Analysis type Unkown\"} - {labels[key]}\n          </Label>\n        </span>\n      )\n    })\n  }\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { OverlayTrigger, Popover } from 'react-bootstrap';\nimport SVG from 'react-inlinesvg';\nimport SvgFileZoomPan from 'react-svg-file-zoom-pan-latest';\n\nexport default class SvgWithPopover extends Component {\n  constructor(props) {\n    super(props);\n    this.renderPreview = this.renderPreview.bind(this);\n  }\n\n  popHover() {\n    const { popObject, previewObject } = this.props;\n    return (\n      <Popover\n        id=\"popover-trigger-hover-focus\"\n        title={popObject.title}\n        style={{ maxWidth: 'none', maxHeight: 'none' }}\n      >\n        {\n          previewObject.isSVG\n          ? \n          <div style={{ height: popObject.height, width: popObject.width }}>\n            <SvgFileZoomPan\n              svgPath={popObject.src}\n              duration={0}\n              resize\n            />\n          </div>\n          : <img src={popObject.src} style={{ height: popObject.height, width: popObject.width }} alt=\"\" />\n        }\n      </Popover>\n    );\n  }\n\n  renderPreview() {\n    const { previewObject } = this.props;\n    let previewObj = previewObject.txtOnly;\n    if (previewObj === '') {\n      previewObj = (\n        previewObject.isSVG\n          ? <SVG src={previewObject.src} className={previewObject.className || 'molecule'} key={previewObject.src} />\n          : <img src={previewObject.src} alt=\"\" />\n      );\n    }\n\n    return (\n      <div className=\"preview-table\">\n        {previewObj}\n      </div>\n    );\n  }\n\n  render() {\n    const { hasPop } = this.props;\n\n    if (!hasPop) {\n      return this.renderPreview();\n    }\n\n    return (\n      <div>\n        <OverlayTrigger\n          trigger={['hover', 'focus']}\n          placement=\"right\"\n          rootClose\n          onHide={null}\n          overlay={this.popHover()}\n        >\n          {this.renderPreview()}\n        </OverlayTrigger>\n      </div>\n    );\n  }\n}\n\nSvgWithPopover.propTypes = {\n  hasPop: PropTypes.bool.isRequired,\n  previewObject: PropTypes.shape({\n    txtOnly: PropTypes.string.isRequired,\n    isSVG: PropTypes.bool,\n    src: PropTypes.string,\n    className: PropTypes.string,\n  }).isRequired,\n  popObject: PropTypes.shape({\n    title: PropTypes.string,\n    src: PropTypes.string,\n    height: PropTypes.string,\n    width: PropTypes.string,\n  }).isRequired,\n};\n","const formatSection = (section, type = '') => {\n  const words = type ? section?.replace(`${type}_`, '')?.split('_') : section?.replace('_header', '')?.split('_');\n  for (let i = 0; i < words?.length; i += 1) {\n    words[i] = words[i][0].toUpperCase() + words[i].substr(1);\n  }\n  return words?.join(' ');\n};\n\nconst getSectionComments = (comments, section) => {\n  return comments?.filter((cmt) => (cmt.section === section));\n};\nconst getAllComments = (comments, section) => comments?.filter((cmt) => (cmt.section !== section));\n\nconst selectCurrentUser = (state) => state.currentUser || {};\n\nconst commentActivation = 'commentActivation';\n\nexport {\n  formatSection,\n  getSectionComments,\n  getAllComments,\n  selectCurrentUser,\n  commentActivation,\n};\n","import React from 'react';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport { selectCurrentUser, commentActivation } from 'src/utilities/CommentHelper';\n\nexport default function CommentIcon(props) {\n  const { commentCount } = props;\n  const currentUser = selectCurrentUser(UserStore.getState());\n\n  if (MatrixCheck(currentUser.matrix, commentActivation)) {\n    return (\n      commentCount && commentCount > 0\n        ? (\n          <OverlayTrigger\n            key=\"ot_comments\"\n            placement=\"bottom\"\n            overlay={<Tooltip id=\"showCommentsCount\">{`${commentCount} comment/s`}</Tooltip>}\n          >\n            <span className=\"commentIcon\">\n              <i className=\"fa fa-comments\" />\n            </span>\n          </OverlayTrigger>\n        )\n        : <span />\n    );\n  }\n  return null;\n}\n\nCommentIcon.propTypes = {\n  commentCount: PropTypes.number,\n};\n\nCommentIcon.defaultProps = {\n  commentCount: null,\n};\n","import React, { Component } from 'react';\nimport SVG from 'react-inlinesvg';\nimport {\n  Tooltip, OverlayTrigger, Table, Label\n} from 'react-bootstrap';\nimport classnames from 'classnames';\n\nimport ElementContainer from 'src/apps/mydb/elements/list/ElementContainer';\nimport ElementCheckbox from 'src/apps/mydb/elements/list/ElementCheckbox';\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport ElementAnalysesLabels from 'src/apps/mydb/elements/labels/ElementAnalysesLabels';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\n\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport KeyboardStore from 'src/stores/alt/stores/KeyboardStore';\n\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport { elementShowOrNew } from 'src/utilities/routesUtils';\nimport SvgWithPopover from 'src/components/common/SvgWithPopover';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport { ShowUserLabels } from 'src/components/UserLabels';\nimport CommentIcon from 'src/components/comments/CommentIcon';\nimport PropTypes from 'prop-types';\nimport Aviator from 'aviator';\n\n// for REPO\nimport { PublishedTag } from 'src/components/chemrepo/PublishCommon';\n\nexport function reactionRole(element) {\n  let tooltip = null;\n  if (element.type === 'reaction') {\n    switch (element.role) {\n      case 'gp':\n        tooltip = <Tooltip id=\"roleTp\">General Procedure</Tooltip>;\n        return (\n          <OverlayTrigger placement=\"top\" overlay={tooltip}>\n            <i className=\"fa fa-home c-bs-primary\" />\n          </OverlayTrigger>\n        );\n      case 'parts':\n        tooltip = <Tooltip id=\"roleTp\">Parts of General Procedure</Tooltip>;\n        return (\n          <OverlayTrigger placement=\"top\" overlay={tooltip}>\n            <i className=\"fa fa-bookmark c-bs-success\" />\n          </OverlayTrigger>\n        );\n      case 'single':\n        tooltip = <Tooltip id=\"roleTp\">Single</Tooltip>;\n        return (\n          <OverlayTrigger placement=\"top\" overlay={tooltip}>\n            <i className=\"fa fa-asterisk c-bs-danger\" />\n          </OverlayTrigger>\n        );\n      default:\n    }\n  }\n\n  return null;\n}\n\nfunction reactionVariations(element) {\n  if (element.type === 'reaction' && element.variations && element.variations.length) {\n    return (\n      <Label bsStyle=\"info\">{`${element.variations.length} variation(s)`}</Label>\n    );\n  }\n  return null;\n}\n\nfunction showDetails(element) {\n  const { currentCollection, isSync } = UIStore.getState();\n  const { id, type } = element;\n  const uri = isSync\n    ? `/scollection/${currentCollection.id}/${type}/${id}`\n    : `/collection/${currentCollection.id}/${type}/${id}`;\n  Aviator.navigate(uri, { silent: true });\n  const e = { type, params: { collectionID: currentCollection.id } };\n  e.params[`${type}ID`] = id;\n\n  const genericEls = (UserStore.getState() && UserStore.getState().genericEls) || [];\n  if (genericEls.find((el) => el.name === type)) {\n    e.klassType = 'GenericEl';\n  }\n\n  elementShowOrNew(e);\n\n  return null;\n}\n\nfunction sampleAnalysesLabels(element) {\n  if (element.type === 'sample') {\n    return (\n      <ElementAnalysesLabels element={element} key={`${element.id}_analyses`} />\n    );\n  }\n\n  return null;\n}\n\nexport function reactionStatus(element) {\n  if (element.type === 'reaction' && element.status) {\n    const tooltip = (\n      <Tooltip id={`reaction_${element.status}`}>\n        {element.status}\n        &nbsp;\n        Reaction\n      </Tooltip>\n    );\n\n    const overlay = (_icons) => (\n      <OverlayTrigger placement=\"top\" overlay={tooltip}>\n        {_icons}\n      </OverlayTrigger>\n    );\n\n    switch (element.status) {\n      case 'Planned':\n        return overlay(<i className=\"fa fa-clock-o c-bs-warning\" />);\n      case 'Running': {\n        const icon = (\n          <span\n            style={{ width: '12px', height: '14px', lineHeight: '14px' }}\n            className=\"fa fa-stack\"\n          >\n            <i className=\"fa fa-stack-1x fa-hourglass-1 running-1 c-bs-warning\" />\n            <i className=\"fa fa-stack-1x fa-hourglass-2 running-2 c-bs-warning\" />\n            <i className=\"fa fa-stack-1x fa-hourglass-3 running-3 c-bs-warning\" />\n          </span>\n        );\n        return overlay(icon);\n      }\n      case 'Done':\n        return overlay(<i className=\"fa fa-hourglass-3 c-bs-primary\" />);\n      case 'Analyses Pending':\n        return overlay(<i className=\"fa fa-ellipsis-h c-bs-primary\" />);\n      case 'Successful':\n        return overlay(<i className=\"fa fa-check-circle-o c-bs-success\" />);\n      case 'Not Successful':\n        return overlay(<i className=\"fa fa-times-circle-o c-bs-danger\" />);\n      default:\n        return null;\n    }\n  }\n\n  return null;\n}\n\nfunction topSecretIcon(element) {\n  if (element.type === 'sample' && element.is_top_secret === true) {\n    const tooltip = (<Tooltip id=\"top_secret_icon\">Top secret</Tooltip>);\n    return (\n      <OverlayTrigger placement=\"top\" overlay={tooltip}>\n        <i className=\"fa fa-user-secret\" />\n      </OverlayTrigger>\n    );\n  }\n\n  return null;\n}\n\nconst reactionPublished = (element) => {\n  if (element.type === 'reaction') {\n    return (\n      <PublishedTag element={element} />\n    );\n  }\n  return (<span />);\n};\n\nexport default class ElementsTableEntries extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      keyboardElementIndex: null\n    };\n\n    this.entriesOnKeyDown = this.entriesOnKeyDown.bind(this);\n  }\n\n  componentDidMount() {\n    KeyboardStore.listen(this.entriesOnKeyDown);\n  }\n\n  componentWillUnmount() {\n    KeyboardStore.unlisten(this.entriesOnKeyDown);\n  }\n\n  entriesOnKeyDown(state) {\n    const { context } = state;\n    const { elements } = this.props;\n\n    if (elements[0] == null || context !== elements[0].type) return false;\n\n    const { documentKeyDownCode } = state;\n    let { keyboardElementIndex } = this.state;\n\n    switch (documentKeyDownCode) {\n      case 13: // Enter\n      case 39: // Right\n        if (keyboardElementIndex && elements[keyboardElementIndex]) {\n          showDetails(elements[keyboardElementIndex]);\n        }\n        break;\n      case 38: // Up\n        if (keyboardElementIndex > 0) {\n          keyboardElementIndex -= 1;\n        } else {\n          keyboardElementIndex = 0;\n        }\n        break;\n      case 40: // Down\n        if (keyboardElementIndex == null) {\n          keyboardElementIndex = 0;\n        } else if (keyboardElementIndex < elements.length - 1) {\n          keyboardElementIndex += 1;\n        }\n        break;\n      default:\n    }\n    this.setState({ keyboardElementIndex });\n\n    return null;\n  }\n\n  isElementChecked(element) {\n    const { ui } = this.props;\n    const { checkedIds, uncheckedIds, checkedAll } = ui;\n    return (checkedAll && ArrayUtils.isValNotInArray(uncheckedIds || [], element.id))\n      || ArrayUtils.isValInArray(checkedIds || [], element.id);\n  }\n\n  isElementSelected(element) {\n    const { currentElement } = this.props;\n    return (currentElement && currentElement.id === element.id);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  isCurrEleDropType(type) {\n    const { currentElement } = ElementStore.getState();\n    const targets = {\n      sample: ['reaction', 'wellplate'],\n      reaction: ['research_plan'],\n      wellplate: ['screen', 'research_plan'],\n      generalProcedure: ['reaction'],\n      research_plan: ['screen']\n    };\n    return type && currentElement && targets[type].includes(currentElement.type);\n  }\n\n  dragHandle(element) {\n    const sourceType = this.dropSourceType(element);\n    return (\n      <ElementContainer\n        key={element.id}\n        sourceType={sourceType}\n        element={element}\n      />\n    );\n  }\n\n  dropSourceType(el) {\n    let sourceType = '';\n    const isDropForSample = el.type === 'sample' && this.isCurrEleDropType('sample');\n    const isDropForWellPlate = el.type === 'wellplate' && this.isCurrEleDropType('wellplate');\n    const isDropForResearchPlan = el.type === 'reaction' && this.isCurrEleDropType('reaction');\n    const isDropForGP = el.type === 'reaction' && el.role === 'gp' && this.isCurrEleDropType('generalProcedure');\n    const isDropForScreen = el.type === 'research_plan' && this.isCurrEleDropType('research_plan');\n\n    if (isDropForSample) {\n      sourceType = DragDropItemTypes.SAMPLE;\n    } else if (isDropForWellPlate) {\n      sourceType = DragDropItemTypes.WELLPLATE;\n    } else if (isDropForResearchPlan) {\n      sourceType = DragDropItemTypes.REACTION;\n    } else if (isDropForGP) {\n      sourceType = DragDropItemTypes.GENERALPROCEDURE;\n    } else if (isDropForScreen) {\n      sourceType = DragDropItemTypes.RESEARCH_PLAN;\n    } else {\n      sourceType = DragDropItemTypes.ELEMENT;\n    }\n    return sourceType;\n  }\n\n  previewColumn(element) {\n    const classNames = classnames(\n      {\n        molecule: element.type === 'sample'\n      },\n      {\n        reaction: element.type === 'reaction'\n      },\n      {\n        'molecule-selected': element.type === 'sample' && this.isElementSelected(element)\n      },\n      {\n        reaction: element.type === 'reaction' && this.isElementSelected(element)\n      },\n      {\n        research_plan: element.type === 'research_plan'\n      }\n    );\n\n    const svgContainerStyle = {\n      verticalAlign: 'middle',\n      textAlign: 'center',\n      cursor: 'pointer'\n    };\n\n    const { showPreviews } = UIStore.getState();\n    if (showPreviews && (element.type === 'reaction')) {\n      return (\n        <td role=\"gridcell\" style={svgContainerStyle} onClick={() => showDetails(element)}>\n          <SVG src={element.svgPath} className={classNames} key={element.svgPath} />\n        </td>\n      );\n    }\n    if (element.type === 'research_plan' || element.element_klass) {\n      if (element.thumb_svg !== 'not available') {\n        return (\n          <td role=\"gridcell\" style={svgContainerStyle} onClick={() => showDetails(element)}>\n            <img src={`data:image/png;base64,${element.thumb_svg}`} alt=\"\" style={{ cursor: 'pointer' }} />\n          </td>\n        );\n      }\n      return (\n        <td\n          role=\"gridcell\"\n          aria-label=\"Element\"\n          style={svgContainerStyle}\n          onClick={() => showDetails(element)}\n        />\n      );\n    }\n\n    return (\n      <td\n        role=\"gridcell\"\n        aria-label=\"Element\"\n        style={{ display: 'none', cursor: 'pointer' }}\n        onClick={() => showDetails(element)}\n      />\n    );\n  }\n\n  dragColumn(element) {\n    const { showDragColumn } = this.props;\n    if (showDragColumn) {\n      return (\n        <td style={{ verticalAlign: 'middle', textAlign: 'center' }}>\n          {this.dragHandle(element)}\n        </td>\n      );\n    }\n    return <td style={{ display: 'none' }} />;\n  }\n\n  render() {\n    const { elements } = this.props;\n    const { keyboardElementIndex } = this.state;\n\n    return (\n      <Table className=\"elements\" bordered hover style={{ borderTop: 0 }}>\n        <tbody>\n          {elements.map((element, index) => {\n            const sampleMoleculeName = (element.type === 'sample') ? element.molecule.iupac_name : '';\n            let style = {};\n            if (this.isElementSelected(element)\n              || (keyboardElementIndex != null && keyboardElementIndex === index)) {\n              style = {\n                color: '#000',\n                background: '#ddd',\n                border: '4px solid #337ab7'\n              };\n            }\n\n            return (\n              <tr key={element.id} style={style}>\n                <td width=\"30px\">\n                  <ElementCheckbox\n                    element={element}\n                    key={element.id}\n                    checked={this.isElementChecked(element)}\n                  />\n                  <br />\n                </td>\n                <td\n                  role=\"gridcell\"\n                  onClick={() => showDetails(element)}\n                  style={{ cursor: 'pointer' }}\n                  width={element.type === 'research_plan' ? '280px' : 'unset'}\n                  data-cy={\"researchPLanItem-\"+ element.id}\n                >\n                  <div>\n                    <SvgWithPopover\n                      hasPop={['reaction'].includes(element.type)}\n                      previewObject={{\n                        txtOnly: element.title(),\n                        isSVG: true,\n                        src: element.svgPath\n                      }}\n                      popObject={{\n                        title: (element.type === 'reaction' && element.short_label) || '',\n                        src: element.svgPath,\n                        height: '26vh',\n                        width: '52vw'\n                      }}\n                    />\n                    {reactionStatus(element)}\n                    {' '}\n                    {reactionRole(element)}\n                    <ShowUserLabels element={element} />\n                    {reactionVariations(element)}\n                    <br />\n                    {sampleMoleculeName}\n                    {reactionPublished(element)}\n                    <CommentIcon commentCount={element.comment_count} />\n                    <ElementCollectionLabels element={element} key={element.id} />\n                    {sampleAnalysesLabels(element)}\n                    {topSecretIcon(element)}\n                  </div>\n                </td>\n                {this.previewColumn(element)}\n                {this.dragColumn(element)}\n              </tr>\n            );\n          })}\n        </tbody>\n      </Table>\n    );\n  }\n}\n\nElementsTableEntries.defaultProps = {\n  currentElement: null\n};\n\n/* eslint-disable react/forbid-prop-types */\nElementsTableEntries.propTypes = {\n  elements: PropTypes.arrayOf(PropTypes.object).isRequired,\n  showDragColumn: PropTypes.bool.isRequired,\n  ui: PropTypes.object.isRequired,\n  currentElement: PropTypes.object,\n};\n","import React from 'react';\nimport {Label, Modal, Button} from 'react-bootstrap';\n\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\n\nexport default class ElementReactionLabels extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showWarning: false,\n      clicked: false\n    };\n    let { element } = props;\n\n    this.handleOnClick = this.handleOnClick.bind(this);\n    this.closeWarning = this.closeWarning.bind(this);\n\n    this.onStoreChange = this.onStoreChange.bind(this);\n  }\n\n  componentDidMount() {\n    ElementStore.listen(this.onStoreChange);\n  }\n\n  componentWillUnmount() {\n    ElementStore.unlisten(this.onStoreChange);\n  }\n\n  onStoreChange(state) {\n    if (this.state.showWarning != state.elementWarning) {\n      this.setState({\n        showWarning: state.elementWarning\n      });\n    }\n  }\n\n  closeWarning() {\n    this.setState({showWarning: false });\n    ElementActions.closeWarning();\n  }\n\n  handleOnClick(e) {\n    let { element } = this.props;\n\n    ElementActions.tryFetchReactionById(element.tag.taggable_data.reaction_id);\n    this.setState({ clicked: true });\n    e.stopPropagation();\n  }\n\n  render() {\n    let { element } = this.props;\n\n    if (!element.tag || !element.tag.taggable_data ||\n        !element.tag.taggable_data.reaction_id)\n      return (<span />);\n\n    const { showWarning, clicked } = this.state;\n\n    const reaction = <i className=\"icon-reaction\" />;\n\n\n    return (\n      <div style={{ display: 'inline-block', marginTop: '-5px' }}>\n        <div onClick={this.handleOnClick}>\n          <span className=\"collection-label\" key={element.id}>\n            <Label>{reaction}</Label>\n          </span>\n        </div>\n        {/* <div style={{clear: 'both'}} /> */}\n        <div className=\"center\">\n          <Modal show={showWarning && clicked} onHide={this.closeWarning}>\n            <Modal.Header closeButton>\n              <Modal.Title>No Access to Element</Modal.Title>\n            </Modal.Header>\n            <Modal.Body>\n              Sorry, you cannot access this Reaction.\n            </Modal.Body>\n            <Modal.Footer>\n              <Button onClick={this.closeWarning}>Close</Button>\n            </Modal.Footer>\n          </Modal>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from 'react';\nimport { Label, Modal, Button } from 'react-bootstrap';\n\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\n\nexport default class ElementWellplateLabels extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      showWarning: false,\n      clicked: false\n    }\n\n    let { element } = props;\n\n    this.handleOnClick = this.handleOnClick.bind(this)\n    this.closeWarning = this.closeWarning.bind(this)\n\n    this.onStoreChange = this.onStoreChange.bind(this)\n  }\n\n  componentDidMount() {\n    ElementStore.listen(this.onStoreChange)\n  }\n\n  componentWillUnmount() {\n    ElementStore.unlisten(this.onStoreChange)\n  }\n\n  onStoreChange(state) {\n    if (this.state.showWarning != state.elementWarning) {\n      this.setState({\n        showWarning: state.elementWarning\n      })\n    }\n  }\n\n  closeWarning() {\n    this.setState({ showWarning: false });\n    ElementActions.closeWarning();\n  }\n\n  handleOnClick(e) {\n    let { element } = this.props;\n\n    ElementActions.tryFetchWellplateById(element.tag.taggable_data.wellplate_id)\n    this.setState({ clicked: true });\n    e.stopPropagation();\n  }\n\n  render() {\n    let { element } = this.props;\n\n    if (!element.tag || !element.tag.taggable_data ||\n        !element.tag.taggable_data.wellplate_id) {\n      return (<span />);\n    }\n\n    const { showWarning, clicked } = this.state;\n\n    const wellplate = <i className='icon-wellplate'/>\n\n    return (\n      <div style={{ display: 'inline-block' }}>\n        <div onClick={this.handleOnClick}>\n          <span className=\"collection-label\" key={element.id}>\n            <Label>{wellplate}</Label>\n          </span>\n        </div>\n        {/* <div style={{clear: 'both'}} /> */}\n        <div className=\"center\">\n          <Modal show={showWarning && clicked} onHide={this.closeWarning}>\n            <Modal.Header closeButton>\n              <Modal.Title>No Access to Element</Modal.Title>\n            </Modal.Header>\n            <Modal.Body>\n              Sorry, you cannot access this Wellplate.\n            </Modal.Body>\n            <Modal.Footer>\n              <Button onClick={this.closeWarning}>Close</Button>\n            </Modal.Footer>\n          </Modal>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from 'react';\nimport { Label, Modal, Button } from 'react-bootstrap';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nexport default class GenericElementLabels extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = { showWarning: false, clicked: false };\n    this.handleOnClick = this.handleOnClick.bind(this);\n    this.closeWarning = this.closeWarning.bind(this);\n    this.onStoreChange = this.onStoreChange.bind(this);\n  }\n\n  componentDidMount() {\n    ElementStore.listen(this.onStoreChange);\n  }\n\n  componentWillUnmount() {\n    ElementStore.unlisten(this.onStoreChange);\n  }\n\n  onStoreChange(state) {\n    if (this.state.showWarning !== state.elementWarning) {\n      this.setState({ showWarning: state.elementWarning });\n    }\n  }\n\n  closeWarning() {\n    this.setState({ showWarning: false });\n    ElementActions.closeWarning();\n  }\n\n  handleOnClick(e) {\n    const { element } = this.props;\n    const elInfo = element.tag.taggable_data.element || {};\n    ElementActions.tryFetchGenericElById(elInfo.id);\n    this.setState({ clicked: true });\n    e.stopPropagation();\n  }\n\n  render() {\n    const { element } = this.props;\n    if (!element.tag || !element.tag.taggable_data || !element.tag.taggable_data.element) {\n      return (<span />);\n    }\n    const elInfo = element.tag.taggable_data.element;\n    const klasses = UserStore.getState().genericEls;\n    const klass = (klasses && klasses.find(el => el.name === elInfo.type)) || {};\n    const { showWarning, clicked } = this.state;\n    return (\n      <div style={{ display: 'inline-block' }}>\n        <div onClick={this.handleOnClick}>\n          <span className=\"collection-label\" key={element.id}>\n            <Label><i className={`${klass.icon_name}`} /></Label>\n          </span>\n        </div>\n        <div className=\"center\">\n          <Modal show={showWarning && clicked} onHide={this.closeWarning}>\n            <Modal.Header closeButton>\n              <Modal.Title>No Access to Element</Modal.Title>\n            </Modal.Header>\n            <Modal.Body>Sorry, you cannot access this Element.</Modal.Body>\n            <Modal.Footer>\n              <Button onClick={this.closeWarning}>Close</Button>\n            </Modal.Footer>\n          </Modal>\n        </div>\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst ChemrepoLabels = ({ chemrepoId }) => {\n  const id = chemrepoId;\n  const handleOnClick = (e) => {\n    e.stopPropagation();\n  };\n  return (\n    id == null ? <div /> :\n      (\n        <a href={`https://www.chemotion-repository.net/home/publications/molecules/${id}`} target=\"_blank\" rel=\"noopener noreferrer\" onClick={handleOnClick}>\n          <img src=\"/favicon.ico\" className=\"pubchem-logo\" alt=\"Chemotion Repository\" title=\"Chemotion Repository\" />\n        </a>\n      )\n  );\n};\n\nChemrepoLabels.propTypes = {\n  chemrepoId: PropTypes.number\n};\n\nChemrepoLabels.defaultProps = {\n  chemrepoId: null\n};\n\nexport default ChemrepoLabels;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport _ from 'lodash';\n\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\n\nconst ComputedPropLabel = ({ cprops }) => {\n  const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n  const enableComputedProps = MatrixCheck(currentUser.matrix, 'computedProp');\n  if (!enableComputedProps) return <span />;\n\n  if (!cprops || cprops.length === 0) return <span />;\n  cprops.sort((a, b) => a.updated_at - b.updated_at);\n  const { status } = cprops[cprops.length - 1];\n\n  let statusIcon = '';\n  const style = {};\n  if (['success','completed'].includes(status)) {\n    statusIcon = 'fa-calculator';\n    style.color = 'green';\n  } else if (status === 'pending') {\n    statusIcon = 'fa-ellipsis-h';\n    style.color = '#f0ad4e';\n  } else if (status === 'started') {\n    statusIcon = 'fa-spinner fa-spin';\n    style.color = '#5bc0de';\n  } else if (status === 'failure') {\n    statusIcon = 'fa-calculator';\n    style.color = 'black';\n  }\n\n  return (\n    <i className={`fa ${statusIcon}`} style={style} />\n  );\n};\n\nComputedPropLabel.propTypes = {\n  cprops: PropTypes.arrayOf(PropTypes.object),\n};\n\nexport default ComputedPropLabel;\n","import React, { Component } from 'react';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport Clipboard from 'clipboard';\n\nimport Formula from 'src/components/common/Formula';\n\nexport default class ClipboardCopyText extends Component {\n  constructor(props) {\n    super(props);\n    this.clipboard = new Clipboard('.clipboardBtn');\n  }\n\n  render() {\n    const clipText = this.props.clipText === '' ? this.props.text : this.props.clipText;\n    return (\n      <OverlayTrigger\n        placement=\"bottom\"\n        overlay={<Tooltip id=\"copy_clipboard\">copy to clipboard</Tooltip>}\n      >\n        <span\n          style={{ display: 'inline' }}\n          role=\"button\"\n          data-clipboard-text={clipText}\n          className=\"clipboardBtn\"\n        >\n          {this.props.text}\n        </span>\n      </OverlayTrigger>\n    );\n  }\n}\n\nClipboardCopyText.propTypes = {\n  text: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.shape({\n      type: PropTypes.oneOf([Formula])\n    }),\n  ]),\n  clipText: PropTypes.string\n};\n\nClipboardCopyText.defaultProps = {\n  text: '',\n  clipText: ''\n};\n","import React from 'react';\nimport Formula from 'src/components/common/Formula';\nimport ClipboardCopyText from 'src/components/common/ClipboardCopyText';\n\nconst SampleName = ({ sample }) => {\n  const { contains_residues, polymer_type, molecule_formula, decoupled } = sample;\n  const moleculeName = sample.decoupled ? null :\n    (<p style={{ wordBreak: 'break-all' }}><ClipboardCopyText text={sample.showed_name} /></p>);\n  let stereo = '';\n  if (sample.stereo) {\n    const stereoInfo = Object.keys(sample.stereo).reduce((acc, k) => {\n      const val = sample.stereo[k];\n      if (val === 'any' || !val) return acc;\n\n      const linker = acc === '' ? '' : ', ';\n      return `${acc}${linker}${k}: ${val}`;\n    }, '');\n\n    stereo = stereoInfo === '' ? '' : ` - ${stereoInfo}`;\n  }\n  const sumFormulaCom = <Formula formula={molecule_formula} customText={stereo} />;\n  let clipText = molecule_formula;\n  if (contains_residues) {\n    const polymerName = (decoupled && polymer_type === 'self_defined') ? '' : `${polymer_type.charAt(0).toUpperCase()}${polymer_type.slice(1)}`.replace('_', '-');\n    clipText = (decoupled && polymer_type === 'self_defined') ? clipText : `${polymerName} - ${molecule_formula}`;\n    return (\n      <div>\n        <p>\n          {polymerName}&nbsp;\n          <ClipboardCopyText text={sumFormulaCom} clipText={clipText} />\n        </p>\n        {moleculeName}\n      </div>\n    );\n  }\n  return (\n    <div>\n      <p><ClipboardCopyText text={sumFormulaCom} clipText={clipText} /></p>\n      {moleculeName}\n    </div>\n  );\n};\n\nexport default SampleName;\n","import React, { Component } from 'react';\nimport {\n  Table, Button, Tooltip, OverlayTrigger, Label\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport ElementCheckbox from 'src/apps/mydb/elements/list/ElementCheckbox';\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport ElementAnalysesLabels from 'src/apps/mydb/elements/labels/ElementAnalysesLabels';\nimport ElementReactionLabels from 'src/apps/mydb/elements/labels/ElementReactionLabels';\nimport ElementWellplateLabels from 'src/apps/mydb/elements/labels/ElementWellplateLabels';\nimport GenericElementLabels from 'src/apps/mydb/elements/labels/GenericElementLabels';\nimport PubchemLabels from 'src/components/pubchem/PubchemLabels';\nimport ChemrepoLabels from 'src/apps/mydb/elements/labels/ChemrepoLabels';\nimport ComputedPropLabel from 'src/apps/mydb/elements/labels/ComputedPropLabel';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport ElementContainer from 'src/apps/mydb/elements/list/ElementContainer';\n\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport KeyboardStore from 'src/stores/alt/stores/KeyboardStore';\n\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport SampleName from 'src/components/common/SampleName';\nimport { sampleShowOrNew } from 'src/utilities/routesUtils';\nimport SvgWithPopover from 'src/components/common/SvgWithPopover';\nimport { ShowUserLabels } from 'src/components/UserLabels';\nimport CommentIcon from 'src/components/comments/CommentIcon';\n\nimport { LabelPublication, PublishedTag, ChemotionTag } from 'src/components/chemrepo/PublishCommon';\n\nconst buildFlattenSampleIds = (displayedMoleculeGroup) => {\n  let flatIndex = 0;\n  const flattenSamplesId = [];\n\n  displayedMoleculeGroup.forEach((groupSample, index) => {\n    const length = displayedMoleculeGroup[index].numSamples;\n    for (let i = 0; i < length; i++) {\n      flattenSamplesId[flatIndex + i] = groupSample[i].id;\n    }\n    flatIndex += length;\n  });\n\n  return flattenSamplesId;\n};\n\nconst showDetails = (id) => {\n  const { currentCollection, isSync } = UIStore.getState();\n  const uri = `/${isSync ? 's' : ''}collection/${currentCollection.id}/sample/${id}`;\n  Aviator.navigate(uri, { silent: true });\n  sampleShowOrNew({ params: { sampleID: id, collectionID: currentCollection.id } });\n};\n\nconst targets = {\n  sample: ['reaction', 'wellplate', 'device', 'research_plan'],\n  molecule: ['reaction'],\n};\n\nconst isCurrEleDropType = (sourceType, targetType) => {\n  if (['molecule', 'sample'].includes(sourceType) && !['wellplate', 'device', 'research_plan'].includes(targetType)) {\n    return sourceType && targetType;\n  }\n  return sourceType && targetType && targets[sourceType].includes(targetType);\n};\n\nconst dragColumn = (element, showDragColumn, sourceType, targetType) => {\n  if (showDragColumn) {\n    return (\n      <td style={{ verticalAlign: 'middle', textAlign: 'center' }}>\n        <ElementContainer\n          key={element.id}\n          sourceType={isCurrEleDropType(sourceType, targetType) ? sourceType : ''}\n          element={element}\n        />\n      </td>\n    );\n  }\n  return null;\n};\n\nfunction TopSecretIcon({ element }) {\n  if (element.type === 'sample' && element.is_top_secret === true) {\n    const tooltip = (<Tooltip id=\"top_secret_icon\">Top secret</Tooltip>);\n    return (\n      <OverlayTrigger placement=\"top\" overlay={tooltip}>\n        <i className=\"fa fa-user-secret\" />\n      </OverlayTrigger>\n    );\n  }\n  return null;\n}\n\nTopSecretIcon.propTypes = {\n  element: PropTypes.object,\n};\n\nfunction XvialIcon({ label }) {\n  return (label || '').match(/^X\\d+.*/) ? (\n    <i\n      className=\"icon-xvial\"\n      style={{ marginRight: '5px', fontSize: '20px' }}\n    />\n  ) : null;\n}\n\nXvialIcon.propTypes = {\n  label: PropTypes.string,\n};\n\nXvialIcon.defaultProps = {\n  label: ''\n};\n\nconst showDecoupledIcon = (sample) => (sample.decoupled ? (\n  <div className=\"decoupled-icon\" onClick={(e) => e.stopPropagation()}>\n    <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"tip_decoupled_icon\">is decoupled from molecule</Tooltip>}>\n      <Label><i className=\"fa fa-chain-broken\" aria-hidden=\"true\" /></Label>\n    </OverlayTrigger>\n  </div>\n) : null);\n\nconst overlayToggle = <Tooltip id=\"toggle_molecule\">Toggle Molecule</Tooltip>;\n\nconst svgPreview = (showPreviews, sample) => (\n  <div style={{ float: 'left' }}>\n    {\n      showPreviews\n        ? (\n          <SvgWithPopover\n            hasPop\n            previewObject={{\n              txtOnly: '',\n              isSVG: true,\n              src: sample.svgPath\n            }}\n            popObject={{\n              title: sample.molecule_iupac_name,\n              src: sample.svgPath,\n              height: '26vh',\n              width: '52vw',\n            }}\n          />\n        )\n        : null\n    }\n  </div>\n);\n\nfunction MoleculeHeader({\n  sample, show, showDragColumn, onClick, targetType\n}) {\n  const showIndicator = (show) ? 'glyphicon-chevron-down' : 'glyphicon-chevron-right';\n\n  const { collId, showPreviews } = UIStore.getState();\n  return (\n    <tr\n      style={{ backgroundColor: '#F5F5F5', cursor: 'pointer' }}\n      onClick={onClick}\n    >\n      {sample.molecule?.inchikey === 'DUMMY' && sample.molfile == null\n        ? (<td colSpan=\"3\" style={{ position: 'relative ' }}><div><h4>(No-structure sample)</h4></div></td>)\n        : (\n          <td colSpan=\"2\" style={{ position: 'relative ' }}>\n            {svgPreview(showPreviews, sample)}\n            <div style={{ position: 'absolute', right: '3px', top: '14px' }}>\n              <OverlayTrigger placement=\"bottom\" overlay={overlayToggle}>\n                <span style={{ fontSize: 15, color: '#337ab7', lineHeight: '10px' }}>\n                  <i className={`glyphicon ${showIndicator}`} />\n                </span>\n              </OverlayTrigger>\n            </div>\n            <div style={{ paddingLeft: 5, wordWrap: 'break-word' }}>\n              <h4><SampleName sample={sample} /></h4>\n            </div>\n            <div style={{\n              position: 'absolute', top: '10px', right: '25px', float: 'right'\n            }}\n            >\n              <ChemrepoLabels chemrepoId={sample.molecule.chem_repo && sample.molecule.chem_repo.id} />\n              <PubchemLabels element={sample} />\n              <ChemotionTag tagData={sample.pubchem_tag} />\n            </div>\n            <div style={{\n              position: 'absolute', bottom: '10px', right: '25px', float: 'right'\n            }}\n            >\n              <ComputedPropLabel cprops={sample.molecule_computed_props} />\n            </div>\n          </td>\n        )}\n      {sample.molecule?.inchikey === 'DUMMY' && sample.molfile == null\n        ? null : dragColumn(sample, showDragColumn, DragDropItemTypes.MOLECULE, targetType)}\n    </tr>\n  );\n}\n\nexport default class ElementsTableSampleEntries extends Component {\n  constructor(props) {\n    super();\n    this.state = {\n      displayedMoleculeGroup: [],\n      moleculeGroupsShown: [],\n      flattenSamplesId: [],\n      keyboardIndex: null,\n      keyboardSeletectedElementId: null,\n    };\n\n    this.sampleOnKeyDown = this.sampleOnKeyDown.bind(this);\n  }\n\n  componentDidMount() {\n    KeyboardStore.listen(this.sampleOnKeyDown);\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const displayedMoleculeGroup = [];\n    const { currentElement } = ElementStore.getState();\n    const { elements } = nextProps;\n    const moleculelist = {};\n    elements.forEach((sample) => {\n      let samples = [];\n      let molId = '';\n      if (sample.decoupled && sample.molfile) {\n        molId = `M${sample.id}`;\n      } else if (sample.stereo == null) {\n        molId = `M${sample.molecule.id}_any_any`;\n      } else {\n        molId = `M${sample.molecule.id}_${sample.stereo.abs || 'any'}_${sample.stereo.rel || 'any'}`;\n      }\n      if (moleculelist[molId]) {\n        samples = moleculelist[molId];\n      }\n      samples.push(sample);\n      moleculelist[molId] = samples;\n    });\n    Object.keys(moleculelist).forEach((moleculeId, idx) => {\n      displayedMoleculeGroup.push(moleculelist[moleculeId]);\n      let numSamples = moleculelist[moleculeId].length;\n      if (nextProps.moleculeSort && numSamples > 3) { numSamples = 3; }\n      displayedMoleculeGroup[idx].numSamples = numSamples;\n    });\n    this.setState({\n      displayedMoleculeGroup,\n      targetType: currentElement && currentElement.type,\n      flattenSamplesId: buildFlattenSampleIds(displayedMoleculeGroup)\n    }, this.forceUpdate());\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    const {\n      collapseAll, showDragColumn, moleculeSort, currentElement, elements, ui\n    } = this.props;\n    const { checkedAll, checkedIds, uncheckedIds } = ui;\n    const nextUi = nextProps.ui;\n    return collapseAll !== nextProps.collapseAll // Bool\n      || showDragColumn !== nextProps.showDragColumn // Bool\n      || moleculeSort !== nextProps.moleculeSort // Bool\n      || currentElement !== nextProps.currentElement // instance of Sample\n      || elements !== nextProps.elements // Arr\n      || checkedAll !== nextUi.checkedAll // Bool\n      || checkedIds !== nextUi.checkedIds // Immutable List\n      || uncheckedIds !== nextUi.uncheckedIds // Immutable List\n      || this.state.keyboardIndex !== nextState.keyboardIndex // int\n      || this.state.keyboardSeletectedElementId !== nextState.keyboardSeletectedElementId; // int\n  }\n\n  componentWillUnmount() {\n    KeyboardStore.unlisten(this.sampleOnKeyDown);\n  }\n\n  handleMoleculeToggle(moleculeName) {\n    let { moleculeGroupsShown } = this.state;\n    if (!moleculeGroupsShown.includes(moleculeName)) {\n      moleculeGroupsShown = moleculeGroupsShown.concat(moleculeName);\n    } else {\n      moleculeGroupsShown = moleculeGroupsShown.filter((item) => item !== moleculeName);\n    }\n    this.setState({ moleculeGroupsShown }, this.forceUpdate());\n    this.props.onChangeCollapse(false);\n  }\n\n  sampleOnKeyDown(state) {\n    const { context } = state;\n    if (context != 'sample') { return false; }\n\n    const { documentKeyDownCode } = state;\n    let { keyboardIndex, keyboardSeletectedElementId, flattenSamplesId } = this.state;\n\n    switch (documentKeyDownCode) {\n      case 13: // Enter\n      case 39: // Right\n        if (keyboardIndex != null && keyboardSeletectedElementId != null) {\n          showDetails(keyboardSeletectedElementId);\n        }\n        break;\n      case 38: // Up\n        if (keyboardIndex > 0) {\n          keyboardIndex--;\n        } else {\n          keyboardIndex = 0;\n        }\n        break;\n      case 40: // Down\n        if (keyboardIndex == null) {\n          keyboardIndex = 0;\n        } else if (keyboardIndex < (flattenSamplesId.length - 1)) {\n          keyboardIndex++;\n        }\n        break;\n      default:\n        break;\n    }\n\n    keyboardSeletectedElementId = flattenSamplesId[keyboardIndex];\n    this.setState({ keyboardIndex, keyboardSeletectedElementId });\n  }\n\n  showMoreSamples(index) {\n    const { displayedMoleculeGroup } = this.state;\n    let length = displayedMoleculeGroup[index].numSamples;\n    length += 3;\n    if (displayedMoleculeGroup[index].length < length) {\n      length = displayedMoleculeGroup[index].length;\n    }\n    displayedMoleculeGroup[index].numSamples = length;\n\n    this.setState({\n      displayedMoleculeGroup,\n      flattenSamplesId: buildFlattenSampleIds(displayedMoleculeGroup)\n    }, this.forceUpdate());\n  }\n\n  isElementChecked(element) {\n    const { checkedIds, uncheckedIds, checkedAll } = this.props.ui;\n    return (checkedAll && ArrayUtils.isValNotInArray(uncheckedIds || [], element.id))\n      || ArrayUtils.isValInArray(checkedIds || [], element.id);\n  }\n\n  isElementSelected(element) {\n    const { currentElement } = this.props;\n    return (currentElement && currentElement.id === element.id);\n  }\n\n  renderSamples(samples, index) {\n    const { keyboardSeletectedElementId, displayedMoleculeGroup } = this.state;\n    const { showDragColumn } = this.props;\n    const { length } = samples;\n    const { numSamples } = displayedMoleculeGroup[index];\n\n    const sampleRows = samples.slice(0, numSamples).map((sample, ind) => {\n      const selected = this.isElementSelected(sample);\n      const style = (selected || keyboardSeletectedElementId === sample.id) ? {\n        color: '#fff', background: '#337ab7'\n      } : {};\n\n      return (\n        <tr key={ind} style={style}>\n          <td width=\"30px\">\n            <ElementCheckbox\n              element={sample}\n              key={sample.id}\n              checked={this.isElementChecked(sample)}\n            />\n          </td>\n          <td\n            style={{ cursor: 'pointer', verticalAlign: 'middle' }}\n            onClick={showDetails.bind(this, sample.id)}\n          >\n            {sample.title(selected)}\n\n            <div style={{\n              float: 'right', display: 'flex', alignItems: 'center', gap: '2px'\n            }}\n            >\n              <div style={{ marginTop: '1px' }}><CommentIcon commentCount={sample.comment_count} /></div>\n              <div style={{ marginTop: '3px' }}><ShowUserLabels element={sample} /></div>\n              <div style={{ marginTop: '3px' }}><XvialIcon label={(sample.tag.taggable_data.xvial && sample.tag.taggable_data.xvial.num) || ''} /></div>\n              <div style={{ marginTop: '1px' }}><ElementReactionLabels element={sample} key={`${sample.id}_reactions`} /></div>\n\n              <div style={{ marginTop: '1px' }}><LabelPublication element={sample} key={sample.id + \"_publication\"} /></div>\n              <div style={{ marginTop: '1px' }}><PublishedTag element={sample} /></div>\n              \n              <ElementWellplateLabels element={sample} key={`${sample.id}_wellplate`} />\n              <GenericElementLabels element={sample} key={`${sample.id}_element`} />\n              <ElementCollectionLabels element={sample} key={`${sample.id}`} />\n              <div style={{ marginTop: '1px' }}><ElementAnalysesLabels element={sample} key={`${sample.id}_analyses`} /></div>\n              {showDecoupledIcon(sample)}\n              <TopSecretIcon element={sample} />\n            </div>\n          </td>\n          {dragColumn(sample, showDragColumn, DragDropItemTypes.SAMPLE, this.state.targetType)}\n        </tr>\n      );\n    });\n\n    if (numSamples < length) {\n      const showMoreSamples = (\n        <tr key={`${index}_showMore`}>\n          <td colSpan=\"3\" style={{ padding: 0 }}>\n            <Button\n              bsStyle=\"info\"\n              onClick={() => this.showMoreSamples(index)}\n              style={{\n                fontSize: '14px', width: '100%', float: 'left', borderRadius: '0px'\n              }}\n            >\n              Show more samples\n            </Button>\n          </td>\n\n        </tr>\n      );\n      sampleRows.push(showMoreSamples);\n    }\n\n    return sampleRows;\n  }\n\n  renderMoleculeGroup(moleculeGroup, index) {\n    const { showDragColumn, collapseAll } = this.props;\n    const { moleculeGroupsShown, targetType } = this.state;\n    const { molecule } = moleculeGroup[0];\n    const moleculeName = molecule.iupac_name || molecule.inchistring;\n    const showGroup = !moleculeGroupsShown.includes(moleculeName) && !collapseAll;\n\n    return (\n      <tbody key={index}>\n        <MoleculeHeader\n          sample={moleculeGroup[0]}\n          show={showGroup}\n          showDragColumn={showDragColumn}\n          onClick={() => this.handleMoleculeToggle(moleculeName)}\n          targetType={targetType}\n        />\n        {showGroup ? this.renderSamples(moleculeGroup, index) : null}\n      </tbody>\n    );\n  }\n\n  render() {\n    const { displayedMoleculeGroup } = this.state;\n    return (\n      <Table className=\"sample-entries\">\n        {Object.keys(displayedMoleculeGroup).map((group, index) => {\n          const moleculeGroup = displayedMoleculeGroup[group];\n          const { numSamples } = displayedMoleculeGroup[group];\n          return this.renderMoleculeGroup(moleculeGroup, index, numSamples);\n        })}\n      </Table>\n    );\n  }\n}\n\nElementsTableSampleEntries.propTypes = {\n  onChangeCollapse: PropTypes.func,\n  collapseAll: PropTypes.bool,\n  elements: PropTypes.array,\n  currentElement: PropTypes.object,\n  showDragColumn: PropTypes.bool,\n  ui: PropTypes.object,\n  moleculeSort: PropTypes.bool,\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport { Table, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport ElementCheckbox from 'src/apps/mydb/elements/list/ElementCheckbox';\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport ElementContainer from 'src/apps/mydb/elements/list/ElementContainer';\n\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport KeyboardStore from 'src/stores/alt/stores/KeyboardStore';\n\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport { elementShowOrNew } from 'src/utilities/routesUtils';\nimport SvgWithPopover from 'src/components/common/SvgWithPopover';\n\nimport { reactionStatus, reactionRole } from 'src/apps/mydb/elements/list/ElementsTableEntries';\nimport CommentIcon from 'src/components/comments/CommentIcon';\nimport { ShowUserLabels } from 'src/components/UserLabels';\nimport Aviator from 'aviator';\n\nconst dragHandle = (element) => {\n  const { currentElement } = ElementStore.getState();\n\n  let sourceType = '';\n\n  if (element.type === 'reaction' && currentElement && currentElement.type === 'research_plan') {\n    sourceType = DragDropItemTypes.REACTION;\n  }\n\n  return (\n    <ElementContainer\n      key={element.id}\n      sourceType={sourceType}\n      element={element}\n    />\n  );\n};\n\nconst dragColumn = (element, showDragColumn) => {\n  if (showDragColumn) {\n    return (\n      <td style={{ verticalAlign: 'middle', textAlign: 'center' }}>\n        {dragHandle(element)}\n      </td>\n    );\n  }\n\n  return <td style={{ display: 'none' }} />;\n};\n\nconst overlayToggle = <Tooltip id=\"toggle_molecule\">Toggle Group</Tooltip>;\n\nconst svgPreview = (showPreviews, group, element) => {\n  if (showPreviews) {\n    return (\n      <div style={{ float: 'left' }}>\n        <SvgWithPopover\n          hasPop\n          previewObject={{\n            txtOnly: '',\n            isSVG: true,\n            className: 'reaction-header',\n            src: element.svgPath\n          }}\n          popObject={{\n            title: group,\n            src: element.svgPath,\n            height: '26vh',\n            width: '52vw',\n          }}\n        />\n      </div>\n    );\n  }\n\n  return null;\n};\n\nfunction ReactionsHeader({\n  group, element, show, showDragColumn, onClick\n}) {\n  const showIndicator = (show) ? 'glyphicon-chevron-down' : 'glyphicon-chevron-right';\n  const { showPreviews } = UIStore.getState();\n\n  return (\n    <tr\n      style={{ backgroundColor: '#F5F5F5', cursor: 'pointer' }}\n      onClick={onClick}\n    >\n      <td colSpan=\"2\" style={{ position: 'relative' }}>\n        {svgPreview(showPreviews, group, element)}\n        <div style={{ position: 'absolute', right: '3px', top: '14px' }}>\n          <OverlayTrigger placement=\"bottom\" overlay={overlayToggle}>\n            <span style={{ fontSize: 15, color: '#337ab7', lineHeight: '10px' }}>\n              <i className={`glyphicon ${showIndicator}`} />\n            </span>\n          </OverlayTrigger>\n        </div>\n      </td>\n      {dragColumn(element, showDragColumn)}\n    </tr>\n  );\n}\n\nReactionsHeader.propTypes = {\n  group: PropTypes.string.isRequired,\n  element: PropTypes.object.isRequired,\n  show: PropTypes.bool.isRequired,\n  showDragColumn: PropTypes.bool.isRequired,\n  onClick: PropTypes.func.isRequired,\n};\n\nfunction GenericElementsHeader({\n  group, element, show, showDragColumn, onClick\n}) {\n  const showIndicator = (show) ? 'glyphicon-chevron-down' : 'glyphicon-chevron-right';\n\n  return (\n    <tr\n      style={{ backgroundColor: '#F5F5F5', cursor: 'pointer' }}\n      onClick={onClick}\n    >\n      <td colSpan=\"2\" style={{ position: 'relative' }}>\n        <div style={{ float: 'left' }}>\n          <div className=\"preview-table\">\n            {group}\n          </div>\n        </div>\n        <div style={{ position: 'absolute', right: '3px', top: '14px' }}>\n          <OverlayTrigger placement=\"bottom\" overlay={overlayToggle}>\n            <span style={{ fontSize: 15, color: '#337ab7', lineHeight: '10px' }}>\n              <i className={`glyphicon ${showIndicator}`} />\n            </span>\n          </OverlayTrigger>\n        </div>\n      </td>\n      {dragColumn(element, showDragColumn)}\n    </tr>\n  );\n}\n\nGenericElementsHeader.propTypes = {\n  group: PropTypes.string.isRequired,\n  element: PropTypes.object.isRequired,\n  show: PropTypes.bool.isRequired,\n  showDragColumn: PropTypes.bool.isRequired,\n  onClick: PropTypes.func.isRequired,\n};\n\nexport default class ElementsTableGroupedEntries extends Component {\n  constructor() {\n    super();\n\n    this.state = {\n      elementsShown: [],\n      keyboardIndex: null,\n      keyboardSelectedElementId: null,\n      sortedElementIds: [],\n    };\n  }\n\n  componentDidMount() {\n    KeyboardStore.listen(this.reactionsOnKeyDown);\n    this.updateTargetType();\n  }\n\n  componentDidUpdate() {\n    this.updateTargetType();\n  }\n\n  componentWillUnmount() {\n    KeyboardStore.unlisten(this.reactionsOnKeyDown);\n  }\n\n  handleGroupToggle(group) {\n    let { elementsShown } = this.state;\n\n    if (elementsShown.includes(group)) {\n      elementsShown = elementsShown.filter((item) => item !== group);\n    } else {\n      elementsShown = elementsShown.concat(group);\n    }\n\n    this.setState({ elementsShown });\n    const { onChangeCollapse } = this.props;\n    onChangeCollapse(false);\n  }\n\n  reactionsOnKeyDown = (state) => {\n    const { context } = state;\n    if (context !== 'reaction') { return false; }\n\n    const { documentKeyDownCode } = state;\n    const { sortedElementIds } = this.state;\n    let { keyboardIndex, keyboardSelectedElementId } = this.state;\n\n    switch (documentKeyDownCode) {\n      case 13: // Enter\n      case 39: // Right\n        if (keyboardIndex != null && keyboardSelectedElementId != null) {\n          this.showDetails(keyboardSelectedElementId);\n        }\n        break;\n      case 38: // Up\n        if (keyboardIndex > 0) {\n          keyboardIndex -= 1;\n        } else {\n          keyboardIndex = 0;\n        }\n        break;\n      case 40: // Down\n        if (keyboardIndex == null) {\n          keyboardIndex = 0;\n        } else if (keyboardIndex < (sortedElementIds.length - 1)) {\n          keyboardIndex += 1;\n        }\n        break;\n      default:\n        break;\n    }\n\n    keyboardSelectedElementId = sortedElementIds[keyboardIndex];\n    this.setState({ keyboardIndex, keyboardSelectedElementId });\n\n    return null;\n  };\n\n  updateTargetType() {\n    const { currentElement } = ElementStore.getState();\n    const targetType = currentElement && currentElement.type;\n    // eslint-disable-next-line react/no-direct-mutation-state\n    this.state.targetType = targetType;\n  }\n\n  showDetails(id) {\n    const { currentCollection, isSync } = UIStore.getState();\n    const { type, genericEl } = this.props;\n\n    const uri = `/${isSync ? 's' : ''}collection/${currentCollection.id}/${type}/${id}`;\n    Aviator.navigate(uri, { silent: true });\n    const e = { type, params: { collectionID: currentCollection.id } };\n    e.params[`${type}ID`] = id;\n\n    if (genericEl) {\n      e.klassType = 'GenericEl';\n    }\n\n    elementShowOrNew(e);\n  }\n\n  isElementChecked(element) {\n    const { ui } = this.props;\n    const { checkedIds, uncheckedIds, checkedAll } = ui;\n    return (checkedAll && ArrayUtils.isValNotInArray(uncheckedIds || [], element.id))\n      || ArrayUtils.isValInArray(checkedIds || [], element.id);\n  }\n\n  isElementSelected(element) {\n    const { currentElement } = this.props;\n    return (currentElement && currentElement.id === element.id);\n  }\n\n  groupedElements() {\n    const { elements, elementsGroup, type } = this.props;\n\n    const groupedElements = {};\n\n    if (type === 'reaction') {\n      elements.forEach((element) => {\n        const key = element[elementsGroup];\n\n        if (!Object.prototype.hasOwnProperty.call(groupedElements, key)) {\n          groupedElements[key] = [];\n        }\n\n        groupedElements[key].push(element);\n      });\n    } else {\n      const groupElements = elementsGroup.split('.');\n      const layer = groupElements[0];\n      const field = groupElements[1];\n\n      elements.forEach((element) => {\n        const { fields } = (element.properties.layers[layer] || { fields: [{ field, value: '' }] });\n        const key = fields.find((f) => f.field === field)?.value || '[empty]';\n\n        if (!Object.prototype.hasOwnProperty.call(groupedElements, key)) {\n          groupedElements[key] = [];\n        }\n\n        groupedElements[key].push(element);\n      });\n    }\n\n    const sortedElementIds = [];\n    Object.entries(groupedElements).forEach((entry) => {\n      entry[1].forEach((element) => {\n        sortedElementIds.push(element.id);\n      });\n    });\n\n    // you are not able to use this.setState because this would rerender it again and again ...\n    // eslint-disable-next-line react/no-direct-mutation-state\n    this.state.sortedElementIds = sortedElementIds;\n\n    return groupedElements;\n  }\n\n  renderReactionElements(elements) {\n    const { keyboardSelectedElementId } = this.state;\n    const { showDragColumn } = this.props;\n\n    const rows = elements.map((element) => {\n      const selected = this.isElementSelected(element);\n      const style = (selected || keyboardSelectedElementId === element.id) ? {\n        color: '#fff', background: '#337ab7'\n      } : {};\n\n      return (\n        <tr key={element.id} style={style}>\n          <td width=\"30px\">\n            <ElementCheckbox\n              element={element}\n              key={element.id}\n              checked={this.isElementChecked(element)}\n            />\n          </td>\n          <td\n            role=\"gridcell\"\n            style={{ cursor: 'pointer' }}\n            onClick={() => this.showDetails(element.id)}\n          >\n            <div style={{ display: 'flex', gap: 8 }}>\n              <SvgWithPopover\n                hasPop\n                previewObject={{\n                  txtOnly: element.title(),\n                  isSVG: true,\n                  src: element.svgPath\n                }}\n                popObject={{\n                  title: element.short_label,\n                  src: element.svgPath,\n                  height: '26vh',\n                  width: '52vw'\n                }}\n              />\n              <div style={{ alignItems: 'center', display: 'flex', gap: 5 }}>\n                {reactionStatus(element)}\n                {reactionRole(element)}\n                <ShowUserLabels element={element} />\n              </div>\n              <CommentIcon commentCount={element.comment_count} />\n              <ElementCollectionLabels element={element} key={element.id} />\n            </div>\n          </td>\n          {dragColumn(element, showDragColumn)}\n        </tr>\n      );\n    });\n\n    return rows;\n  }\n\n  renderGenericElements(elements) {\n    const { keyboardSelectedElementId } = this.state;\n    const { showDragColumn } = this.props;\n\n    const rows = elements.map((element) => {\n      const selected = this.isElementSelected(element);\n      const style = (selected || keyboardSelectedElementId === element.id) ? {\n        color: '#fff', background: '#337ab7'\n      } : {};\n\n      return (\n        <tr key={element.id} style={style}>\n          <td width=\"30px\">\n            <ElementCheckbox\n              element={element}\n              key={element.id}\n              checked={this.isElementChecked(element)}\n            />\n          </td>\n          <td\n            role=\"gridcell\"\n            style={{ cursor: 'pointer' }}\n            onClick={() => this.showDetails(element.id)}\n          >\n            <div style={{ display: 'flex', gap: 8 }}>\n              <div className=\"preview-table\">\n                {element.title()}\n              </div>\n              <ShowUserLabels element={element} />\n              <ElementCollectionLabels element={element} key={element.id} />\n            </div>\n          </td>\n          {dragColumn(element, showDragColumn)}\n        </tr>\n      );\n    });\n\n    return rows;\n  }\n\n  renderGroup(group, elements, index) {\n    const { showDragColumn, collapseAll, type } = this.props;\n    const { elementsShown, targetType } = this.state;\n\n    const showGroup = !elementsShown.includes(group) && !collapseAll;\n    let groupedElements;\n    let groupHeader;\n\n    if (type === 'reaction') {\n      groupedElements = this.renderReactionElements(elements);\n      groupHeader = (\n        <ReactionsHeader\n          group={group}\n          element={elements[0]}\n          show={showGroup}\n          showDragColumn={showDragColumn}\n          onClick={() => this.handleGroupToggle(group)}\n          targetType={targetType}\n        />\n      );\n    } else {\n      groupedElements = this.renderGenericElements(elements);\n      groupHeader = (\n        <GenericElementsHeader\n          group={group}\n          element={elements[0]}\n          show={showGroup}\n          showDragColumn={showDragColumn}\n          onClick={() => this.handleGroupToggle(group)}\n          targetType={targetType}\n        />\n      );\n    }\n\n    return (\n      <tbody key={index}>\n        {groupHeader}\n        {showGroup && groupedElements}\n      </tbody>\n    );\n  }\n\n  render() {\n    const tableContent = Object.entries(this.groupedElements()).map(\n      (entry, index) => (this.renderGroup(entry[0], entry[1], index))\n    );\n\n    return (\n      <Table>\n        {tableContent}\n      </Table>\n    );\n  }\n}\n\nElementsTableGroupedEntries.defaultProps = {\n  currentElement: null,\n  genericEl: null,\n};\n\nElementsTableGroupedEntries.propTypes = {\n  onChangeCollapse: PropTypes.func.isRequired,\n  collapseAll: PropTypes.bool.isRequired,\n  elements: PropTypes.array.isRequired,\n  currentElement: PropTypes.object,\n  showDragColumn: PropTypes.bool.isRequired,\n  ui: PropTypes.object.isRequired,\n  elementsGroup: PropTypes.string.isRequired,\n  genericEl: PropTypes.object,\n  type: PropTypes.string.isRequired,\n};\n","export default class CellLineGroup {\n  constructor() {\n    this.cellLineItems = [];\n  }\n\n  static buildFromElements(cellLineElements = []) {\n    const cellLineGroups = [];\n    cellLineElements.forEach((cellLine) => {\n      CellLineGroup.addCelllineToGroup(cellLine, cellLineGroups);\n    });\n\n    return cellLineGroups;\n  }\n\n  static addCelllineToGroup(cellLine, cellLineGroups) {\n    const matchingGroups = CellLineGroup.findMatchingGroups(cellLineGroups, cellLine);\n\n    if (matchingGroups.length === 0) {\n      CellLineGroup.addCellLineToNewGroup(cellLineGroups, cellLine);\n    } else {\n      matchingGroups[0].cellLineItems.push(cellLine);\n    }\n  }\n\n  static addCellLineToNewGroup(cellLineGroups, cellLine) {\n    const groupInFocus = new CellLineGroup();\n    cellLineGroups.push(groupInFocus);\n    groupInFocus.cellLineItems.push(cellLine);\n  }\n\n  static findMatchingGroups(cellLineGroups, cellLine) {\n    let matchingGroups = [];\n    cellLineGroups.forEach((g) => {\n      if (g.matchingGroup(cellLine)) {\n        matchingGroups = [g];\n      }\n    });\n    return matchingGroups;\n  }\n\n  matchingGroup(cellLineToCheck) {\n    if (this.cellLineItems.length === 0) { return false; }\n\n    const firstItemInGroup = this.cellLineItems[0];\n\n    return firstItemInGroup.cellLineName === cellLineToCheck.cellLineName\n    && firstItemInGroup.source === cellLineToCheck.source;\n  }\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport default class CellLineItemEntry extends Component {\n  render() {\n    const { cellLineItem, showDetails } = this.props;\n    if (!cellLineItem) { return null; }\n\n    return (\n      // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n      // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n      <td\n        className=\"item-text\"\n        onClick={() => { showDetails(); }}\n      >\n        <div>\n          <div className=\"item-properties floating\">\n            <div className=\" starting floating item-property-value\">{cellLineItem.itemName}</div>\n          </div>\n        </div>\n      </td>\n    );\n  }\n}\n\nCellLineItemEntry.propTypes = {\n  cellLineItem: PropTypes.shape({\n    amount: PropTypes.number.isRequired,\n    itemName: PropTypes.string,\n    passage: PropTypes.number.isRequired,\n    contamination: PropTypes.string.isRequired,\n  }).isRequired,\n  showDetails: PropTypes.func.isRequired\n};\n","import PropTypes from 'prop-types';\n\nexport const CellLinePropTypeTableEntry = PropTypes.shape({\n    id: PropTypes.string.isRequired,\n    cellLineName: PropTypes.string.isRequired,\n    organism: PropTypes.string.isRequired,\n    disease: PropTypes.string.isRequired,\n    tissue:PropTypes.string.isRequired,\n    mutation:PropTypes.string.isRequired,\n    variant:PropTypes.string.isRequired,\n    bioSafetyLevel:PropTypes.string.isRequired,\n    cryopreservationMedium:PropTypes.string.isRequired,\n    gender:PropTypes.string.isRequired,\n})","import React, { Component } from 'react';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport { Table } from 'react-bootstrap';\nimport ElementCheckbox from 'src/apps/mydb/elements/list/ElementCheckbox';\nimport ElementContainer from 'src/apps/mydb/elements/list/ElementContainer';\nimport { elementShowOrNew } from 'src/utilities/routesUtils';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport Aviator from 'aviator';\nimport CellLineItemText from 'src/apps/mydb/elements/list/cellLine/CellLineItemText';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport { CellLinePropTypeTableEntry } from 'src/models/cellLine/CellLinePropTypes';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\n\nexport default class CellLineItemEntry extends Component {\n  constructor(props) {\n    super(props);\n    this.showDetails = this.showDetails.bind(this);\n  }\n\n  showDetails() {\n    const { currentCollection, isSync } = UIStore.getState();\n    const { cellLineItem } = this.props;\n    const { id, type } = cellLineItem;\n\n    const uri = isSync\n      ? `/scollection/${currentCollection.id}/${type}/${id}`\n      : `/collection/${currentCollection.id}/${type}/${id}`;\n    Aviator.navigate(uri, { silent: true });\n    const e = {\n      type,\n      params: {\n        collectionID: currentCollection.id,\n        new_cellLine: false,\n        cellLineId: id\n      }\n    };\n    e.params[`${type}ID`] = id;\n\n    elementShowOrNew(e);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  isElementChecked(element) {\n    const { checkedIds, uncheckedIds, checkedAll } = UIStore.getState().cell_line;\n    return (checkedAll && ArrayUtils.isValNotInArray(uncheckedIds || [], element.id))\n      || ArrayUtils.isValInArray(checkedIds || [], element.id);\n  }\n\n  render() {\n    const { cellLineItem } = this.props;\n    const { currentElement } = ElementStore.getState();\n    let backgroundColor=\"white-background\"\n    if(currentElement) { \n     backgroundColor=currentElement!==null&&currentElement.id==cellLineItem.id?\"blue-background\":\"white-background\";\n    }\n    return (\n      <div className=\"group-entry\">\n        <Table className=\"elements\" hover>\n          <tbody>\n            <tr className={backgroundColor+\" top-border\"}>\n              <td className=\"select-checkBox\">\n                <ElementCheckbox\n                  element={cellLineItem}\n                  checked={this.isElementChecked(cellLineItem)}\n                />\n              </td>\n              <td \n                className=\"short_label\"\n                onClick={() => { this.showDetails(); }}>\n                {cellLineItem.short_label}\n              </td>\n\n              <CellLineItemText\n                cellLineItem={cellLineItem}\n                showDetails={this.showDetails}\n              />\n               <td >\n                <ElementCollectionLabels element={cellLineItem} />\n              </td>\n              <td className=\"arrow\">\n               \n                <ElementContainer\n                  sourceType={DragDropItemTypes.CELL_LINE}\n                  element={cellLineItem}\n                />\n              </td>\n            </tr>\n          </tbody>\n        </Table>\n      </div>\n    );\n  }\n}\n\nCellLineItemEntry.propTypes = {\n  cellLineItem: CellLinePropTypeTableEntry.isRequired\n};\n","import React, { Component } from 'react';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport CellLineItemEntry from 'src/apps/mydb/elements/list/cellLine/CellLineItemEntry';\nimport PropTypes from 'prop-types';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport { elementShowOrNew } from 'src/utilities/routesUtils';\nimport { CellLinePropTypeTableEntry } from 'src/models/cellLine/CellLinePropTypes';\nimport Aviator from 'aviator';\n\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n\nexport default class CellLineEntry extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      detailedInformation: false,\n      showEntries: true\n    };\n  }\n\n  componentDidMount() {\n    UIStore.getState();\n  }\n\n  getBorderStyle() {\n    const { showEntries } = this.state;\n    return showEntries\n      ? 'list-container title-panel'\n      : 'list-container title-panel cell-line-group-bottom-border';\n  }\n\n  renderItemEntries(cellLineItems) {\n    const { showEntries } = this.state;\n    return showEntries ? cellLineItems.map(\n      (cellLineItem) => <CellLineItemEntry key={cellLineItem.id} cellLineItem={cellLineItem} />\n    ) : [];\n  }\n\n  renderNameHeader(firstCellLineItem) {\n    return [\n      this.renderArrow(),\n      this.renderDetailedInfoButton(),\n      this.renderCreateSubSampleButton(),\n      <div\n        key={firstCellLineItem.cellLineName}\n        className=\"cell-line-group-header-name\"\n      >\n        {firstCellLineItem.cellLineName}\n        {' '}\n        -\n        {' '}\n        {firstCellLineItem.source}\n      </div>];\n  }\n\n  renderArrow() {\n    const { showEntries } = this.state;\n    const arrowType = showEntries ? 'glyphicon-chevron-right' : 'glyphicon-chevron-down';\n    return (\n      <div key=\"arrow\" className=\"cell-line-group-arrow floating-right\">\n        <i className={`glyphicon ${arrowType}`} />\n      </div>\n\n    );\n  }\n\n  renderDetailedInfos(firstCellLineItem) {\n    const { detailedInformation } = this.state;\n    return !detailedInformation ? [] : [\n      this.renderProperty('Organism', firstCellLineItem.organism),\n      this.renderProperty('Disease', firstCellLineItem.disease),\n      this.renderProperty('Tissue', firstCellLineItem.tissue),\n      this.renderProperty('Mutation', firstCellLineItem.mutation),\n      this.renderProperty('Variant', firstCellLineItem.variant),\n      this.renderProperty('Bio safety level', firstCellLineItem.bioSafetyLevel),\n      this.renderProperty('Cryopreservation medium', firstCellLineItem.cryopreservationMedium),\n      this.renderProperty('Gender', firstCellLineItem.gender)\n    ];\n  }\n\n  renderDetailedInfoButton() {\n    const { detailedInformation } = this.state;\n    const buttonActive = detailedInformation ? 'detailed-info-on' : 'detailed-info-off';\n    return (\n      <OverlayTrigger key=\"detailedInfoButton\" placement=\"top\" overlay={<Tooltip id=\"detailed-info-button\">Show detailed information about the material</Tooltip>}>\n        <Button\n          className={`button-right ${buttonActive}`}\n          bsSize=\"xsmall\"\n          onClick={(e) => {\n            e.stopPropagation();\n            this.setState({ detailedInformation: !detailedInformation });\n          }}\n        >\n          <i className=\"fa fa-info-circle\" aria-hidden=\"true\" />\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n\n  renderCreateSubSampleButton() {\n    const { cellLineItems } = this.props;\n    const { currentCollection, isSync } = UIStore.getState();\n    if (currentCollection.label === 'All') { return null; }\n    if (currentCollection.is_sync_to_me && currentCollection.permission_level==0){return null;}\n    \n    return (\n      <OverlayTrigger key=\"subSampleButton\" placement=\"top\" overlay={<Tooltip id=\"detailed-info-button\">Create sample of cell line material</Tooltip>}>\n        <Button\n          className=\"button-right quick-sample\"\n          bsSize=\"xsmall\"\n          onClick={(event) => {\n            event.stopPropagation();\n\n            const uri = isSync\n              ? `/scollection/${currentCollection.id}/cell_line/new`\n              : `/collection/${currentCollection.id}/cell_line/new`;\n            Aviator.navigate(uri, { silent: true });\n\n            const creationEvent = {\n              type: 'cell_line',\n              params:\n              {\n                collectionID: currentCollection.id,\n                cell_lineID: 'new',\n                cell_line_template: cellLineItems[0]\n              }\n            };\n            elementShowOrNew(creationEvent);\n          }}\n        >\n          <i className=\"fa fa-plus\" aria-hidden=\"true\" />\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  renderProperty(propertyName, propertyValue) {\n    if (!propertyValue) { return null; }\n    return (\n      <div className=\"cell-line-group-header-property\">\n        <div className=\"property-key floating\">{propertyName}</div>\n        <div className=\"property-key-minus floating\" floating>-</div>\n        <div className=\"property-value\">\n          {propertyValue}\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    const { cellLineItems } = this.props;\n    const { showEntries } = this.state;\n    if (cellLineItems.length === 0) { return (null); }\n    return (\n      <div className=\"cell-line-group\">\n        <div\n          className={this.getBorderStyle()}\n          onClick={() => { this.setState({ showEntries: !showEntries }); }}\n        >\n          {this.renderNameHeader(cellLineItems[0])}\n          {this.renderDetailedInfos(cellLineItems[0])}\n        </div>\n        {this.renderItemEntries(cellLineItems)}\n      </div>\n    );\n  }\n}\n\nCellLineEntry.propTypes = {\n  cellLineItems: PropTypes.arrayOf(\n    CellLinePropTypeTableEntry\n  ).isRequired\n};\n","import React, { Component } from 'react';\nimport CellLineEntry from 'src/apps/mydb/elements/list/cellLine/CellLineEntry';\nimport PropTypes from 'prop-types';\nimport { CellLinePropTypeTableEntry } from 'src/models/cellLine/CellLinePropTypes';\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport default class CellLineContainer extends Component {\n  render() {\n    const { cellLineGroups } = this.props;\n\n    return (\n      <div className=\"list-container\">\n        {cellLineGroups.map(\n          (group) => (\n            <CellLineEntry\n              key={group.cellLineItems[0].id}\n              cellLineItems={group.cellLineItems}\n            />\n          )\n        )}\n      </div>\n    );\n  }\n}\n\nCellLineContainer.propTypes = {\n  cellLineGroups: PropTypes.arrayOf(\n    PropTypes.shape({\n      cellLineItems: PropTypes.arrayOf(CellLinePropTypeTableEntry),\n    })\n  ).isRequired\n};\n","/* eslint-disable camelcase */\nimport React from 'react';\n\nimport {\n  Pagination, Form, Col, Row, InputGroup, FormGroup, FormControl, Glyphicon, Tooltip, OverlayTrigger\n} from 'react-bootstrap';\nimport DatePicker from 'react-datepicker';\nimport deepEqual from 'deep-equal';\n\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport UserActions from 'src/stores/alt/actions/UserActions';\n\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport ElementAllCheckbox from 'src/apps/mydb/elements/list/ElementAllCheckbox';\nimport ElementsTableEntries from 'src/apps/mydb/elements/list/ElementsTableEntries';\nimport ElementsTableSampleEntries from 'src/apps/mydb/elements/list/ElementsTableSampleEntries';\nimport { SearchUserLabels } from 'src/components/UserLabels';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport ElementsTableGroupedEntries from 'src/apps/mydb/elements/list/ElementsTableGroupedEntries';\nimport Select from 'react-select';\nimport PropTypes from 'prop-types';\nimport { stopEvent } from 'src/utilities/DomHelper';\nimport CellLineGroup from 'src/models/cellLine/CellLineGroup';\nimport CellLineContainer from 'src/apps/mydb/elements/list/cellLine/CellLineContainer';\n\nexport default class ElementsTable extends React.Component {\n  constructor(props) {\n    super(props);\n    this.elementRef = React.createRef();\n\n    this.state = {\n      elements: [],\n      currentElement: null,\n      ui: {},\n      collapseAll: false,\n      moleculeSort: false,\n      searchResult: false,\n      productOnly: false,\n      page: null,\n      pages: null,\n      elementsGroup: 'none',\n      elementsSort: true,\n      sortDirection: 'DESC',\n    };\n\n    this.onChange = this.onChange.bind(this);\n    this.onChangeUI = this.onChangeUI.bind(this);\n\n    this.changeDateFilter = this.changeDateFilter.bind(this);\n\n    this.toggleProductOnly = this.toggleProductOnly.bind(this);\n    this.setUserLabel = this.setUserLabel.bind(this);\n    this.setFromDate = this.setFromDate.bind(this);\n    this.setToDate = this.setToDate.bind(this);\n    this.timer = null;\n  }\n\n  componentDidMount() {\n    UIStore.getState();\n    ElementStore.listen(this.onChange);\n    UIStore.listen(this.onChangeUI);\n    this.initState();\n  }\n\n  componentWillUnmount() {\n    ElementStore.unlisten(this.onChange);\n    UIStore.unlisten(this.onChangeUI);\n  }\n\n  handlePaginationSelect(eventKey) {\n    const { pages } = this.state;\n    const { type } = this.props;\n\n    if (eventKey > 0 && eventKey <= pages) {\n      this.setState({\n        page: eventKey\n      }, () => {\n        const { page } = this.state;\n        UIActions.setPagination({ type, page });\n        this.handleScrollToElement(this.elementRef);\n      });\n    }\n  }\n  handleScrollToElement = () => {\n    if (this.elementRef.current) {\n      this.elementRef.current.scrollTo({ top: 0, left: 0, behavior: \"smooth\", });\n    }\n  };\n\n  handleNumberOfResultsChange(event, query=false) {\n    const { value } = event.target;\n    const { type } = this.props;\n\n    if (parseInt(value, 10) > 0) {\n      UIActions.changeNumberOfResultsShown(value);\n      if (query === true) ElementActions.refreshElements(type);\n    }\n  }\n\n  handleKeyDown(event) {\n    switch (event.keyCode) {\n      case 13: // Enter\n        stopEvent(event);\n        break;\n      default:\n        break;\n    }\n  }\n\n  onChangeUI(state) {\n    const { type } = this.props;\n    if (typeof state[type] === 'undefined' || state[type] === null) {\n      return;\n    }\n    const { checkedIds, uncheckedIds, checkedAll } = state[type];\n    const {\n      filterCreatedAt, fromDate, toDate, userLabel, number_of_results, currentSearchByID, productOnly\n    } = state;\n\n    // check if element details of any type are open at the moment\n    const currentId = state.sample.currentId || state.reaction.currentId\n      || state.wellplate.currentId;\n\n    let isSearchResult = currentSearchByID ? true : false;\n\n    const { currentStateProductOnly, searchResult } = this.state;\n    const stateChange = (\n      checkedIds || uncheckedIds || checkedAll || currentId || filterCreatedAt\n      || fromDate || toDate || userLabel || productOnly !== currentStateProductOnly\n      || isSearchResult !== searchResult\n    );\n    const moleculeSort = isSearchResult ? true : ElementStore.getState().moleculeSort;\n\n    if (stateChange) {\n      this.setState({\n        filterCreatedAt,\n        ui: {\n          checkedIds,\n          uncheckedIds,\n          checkedAll,\n          currentId,\n          number_of_results,\n          fromDate,\n          toDate,\n          userLabel,\n        },\n        productOnly,\n        searchResult: isSearchResult,\n        moleculeSort: moleculeSort\n      });\n    }\n  }\n\n  onChange(state) {\n    const { type } = this.props;\n    const elementsState = (state && state.elements && state.elements[`${type}s`]) || {};\n    const { elements, page, pages } = elementsState;\n\n    let currentElement;\n    if (!state.currentElement || state.currentElement.type === type) {\n      const { currentElement: stateCurrentElement } = state;\n      currentElement = stateCurrentElement;\n    }\n\n    const { elements: stateElements, currentElement: stateCurrentElement } = this.state;\n    const elementsDidChange = elements && !deepEqual(elements, stateElements);\n    const currentElementDidChange = !deepEqual(currentElement, stateCurrentElement);\n\n    const nextState = { page, pages, currentElement };\n    if (elementsDidChange) { nextState.elements = elements; }\n    if (elementsDidChange || currentElementDidChange) { this.setState(nextState); }\n  }\n\n  setUserLabel(label) {\n    const { userLabel } = this.state;\n    if (userLabel !== label) UIActions.setUserLabel(label);\n  }\n\n  setFromDate(date) {\n    const { fromDate } = this.state;\n    if (fromDate !== date) UIActions.setFromDate(date);\n  }\n\n  setToDate(date) {\n    const { toDate } = this.state;\n    if (toDate !== date) UIActions.setToDate(date);\n  }\n\n  initState = () => {\n    this.onChange(ElementStore.getState());\n\n    const { type, genericEl } = this.props;\n\n    if (type === 'reaction' || genericEl) {\n      const userState = UserStore.getState();\n      const filters = userState.profile.data.filters || {};\n\n      // you are not able to use this.setState because this would rerender it again and again ...\n      // eslint-disable-next-line react/no-direct-mutation-state\n      this.state.elementsGroup = filters[type]?.group || 'none';\n      // eslint-disable-next-line react/no-direct-mutation-state\n      this.state.elementsSort = filters[type]?.sort ?? true;\n      // eslint-disable-next-line react/no-direct-mutation-state\n      this.state.sortDirection = filters[type]?.direction || 'DESC';\n    }\n  };\n\n  changeCollapse = (collapseAll) => {\n    this.setState({ collapseAll: !collapseAll });\n  };\n\n  changeSampleSort = () => {\n    let { moleculeSort } = this.state;\n    moleculeSort = !moleculeSort;\n\n    this.setState({\n      moleculeSort\n    }, () => ElementActions.changeSorting(moleculeSort));\n  };\n\n  updateFilterAndUserProfile = (elementsSort, sortDirection, elementsGroup) => {\n    const { type } = this.props;\n\n    ElementActions.changeElementsFilter({\n      name: type,\n      sort: elementsSort,\n      direction: sortDirection,\n      group: elementsGroup,\n    });\n\n    UserActions.updateUserProfile({\n      data: {\n        filters: {\n          [type]: {\n            sort: elementsSort,\n            direction: sortDirection,\n            group: elementsGroup,\n          },\n        },\n      },\n    });\n  };\n\n  changeElementsGroup = (elementsGroup) => {\n    const { elementsSort, sortDirection } = this.state;\n\n    this.setState({\n      elementsGroup,\n      elementsSort,\n    }, () => {\n      this.updateFilterAndUserProfile(elementsSort, sortDirection, elementsGroup);\n    });\n  };\n\n  changeElementsSort = () => {\n    const { elementsGroup, sortDirection } = this.state;\n    let { elementsSort } = this.state;\n    elementsSort = !elementsSort;\n\n    this.setState({\n      elementsSort\n    }, () => {\n      this.updateFilterAndUserProfile(elementsSort, sortDirection, elementsGroup);\n    });\n  };\n\n  changeSortDirection = () => {\n    const { elementsGroup, elementsSort, sortDirection } = this.state;\n    const newSortDirection = sortDirection === 'DESC' ? 'ASC' : 'DESC';\n\n    this.setState(\n      { sortDirection: newSortDirection },\n      () => {\n        this.updateFilterAndUserProfile(elementsSort, newSortDirection, elementsGroup);\n      }\n    );\n  };\n\n  collapseButton = () => {\n    const { collapseAll } = this.state;\n    const collapseIcon = collapseAll ? 'chevron-right' : 'chevron-down';\n\n    return (\n      <Glyphicon\n        glyph={collapseIcon}\n        title=\"Collapse/Uncollapse\"\n        onClick={() => this.changeCollapse(collapseAll)}\n        style={{\n          fontSize: '20px',\n          cursor: 'pointer',\n          color: '#337ab7',\n          top: 0\n        }}\n      />\n    );\n  };\n\n  changeDateFilter() {\n    let { filterCreatedAt } = this.state;\n    filterCreatedAt = !filterCreatedAt;\n    UIActions.setFilterCreatedAt(filterCreatedAt);\n  }\n\n  toggleProductOnly() {\n    const { productOnly } = this.state;\n    UIActions.setProductOnly(!productOnly);\n  }\n\n  handleNumberOfResultsChange(event) {\n    const { value } = event.target;\n\n    if (parseInt(value, 10) > 0) {\n      UIActions.changeNumberOfResultsShown(value);\n      this.handleDelayForNumberOfResults();\n    }\n  }\n\n  handleDelayForNumberOfResults() {\n    const { type } = this.props;\n\n    clearTimeout(this.timer);\n    this.timer = setTimeout(() => {\n      ElementActions.refreshElements(type);\n    }, 900);\n  }\n\n  numberOfResultsInput() {\n    const { ui } = this.state;\n    return (\n      <Form horizontal className=\"list-show-count\">\n        <FormGroup>\n          <InputGroup>\n            <InputGroup.Addon>Show</InputGroup.Addon>\n            <FormControl\n              type=\"text\"\n              style={\n                { textAlign: 'center', zIndex: 0 }\n              }\n              onChange={(event) => this.handleNumberOfResultsChange(event, false)}\n              onBlur={(event) => this.handleNumberOfResultsChange(event, true)}\n              onKeyDown={(event) => this.handleKeyDown(event)}\n              value={ui.number_of_results ? ui.number_of_results : 0}\n            />\n          </InputGroup>\n        </FormGroup>\n      </Form>\n    );\n  }\n\n  pagination() {\n    const { page, pages } = this.state;\n    if (pages <= 1) {\n      return null;\n    }\n\n    const items = [];\n    const minPage = Math.max(page - 2, 1);\n    const maxPage = Math.min(minPage + 4, pages);\n\n    items.push(<Pagination.First key=\"First\" onClick={() => this.handlePaginationSelect(1)} />);\n    if (page > 1) {\n      items.push(<Pagination.Prev key=\"Prev\" onClick={() => this.handlePaginationSelect(page - 1)} />);\n    }\n    for (let currentPage = minPage; currentPage <= maxPage; currentPage += 1) {\n      items.push(\n        <Pagination.Item\n          key={`eltPage${currentPage}`}\n          active={currentPage === page}\n          onClick={() => this.handlePaginationSelect(currentPage)}\n        >\n          {currentPage}\n        </Pagination.Item>\n      );\n    }\n\n    if (pages > maxPage) {\n      items.push(<Pagination.Ellipsis key=\"Ell\" />);\n    }\n    if (page === pages) {\n      items.push(<Pagination.Next key=\"Next\" onClick={() => this.handlePaginationSelect(page + 1)} />);\n    }\n    items.push(<Pagination.Last key=\"Last\" onClick={() => this.handlePaginationSelect(pages)} />);\n\n    return (\n      <div className=\"list-pagination\">\n        <Pagination>\n          {items}\n        </Pagination>\n      </div>\n    )\n  }\n\n  renderSamplesHeader = () => {\n    const {\n      moleculeSort,\n      productOnly,\n    } = this.state;\n\n    const options = [\n      { value: false, label: 'Grouped by Sample' },\n      { value: true, label: 'Grouped by Molecule' }\n    ];\n    const color = productOnly ? '#5cb85c' : 'currentColor';\n    const tooltipText = productOnly ? 'Show all' : 'Show products only';\n\n    return (\n      <>\n        <Select\n          simpleValue\n          options={options}\n          clearable={false}\n          searchable\n          value={moleculeSort}\n          onChange={this.changeSampleSort}\n          className=\"header-group-select\"\n        />\n        <OverlayTrigger\n          placement=\"top\"\n          overlay={<Tooltip id=\"showProductsOnly\">{tooltipText}</Tooltip>}\n        >\n          <button\n            type=\"button\"\n            style={{ border: 'none' }}\n            onClick={this.toggleProductOnly}\n          >\n            <i\n              style={{ cursor: 'pointer', color }}\n              className=\"fa fa-lg fa-product-hunt\"\n            />\n          </button>\n        </OverlayTrigger>\n        {this.collapseButton()}\n      </>\n    );\n  };\n\n  renderChangeSortDirectionIcon = () => {\n    const { sortDirection } = this.state;\n    const sortDirectionIcon = sortDirection === 'ASC' ? 'fa-long-arrow-up' : 'fa-long-arrow-down';\n    const changeSortDirectionTitle = sortDirection === 'ASC' ? 'change to descending' : 'change to ascending';\n    const sortDirectionTooltip = <Tooltip id=\"change_sort_direction\">{changeSortDirectionTitle}</Tooltip>;\n    return (\n      <OverlayTrigger placement=\"top\" overlay={sortDirectionTooltip}>\n        <button\n          type=\"button\"\n          style={{ border: 'none' }}\n          onClick={this.changeSortDirection}\n        >\n          <i className={`fa fa-fw ${sortDirectionIcon}`} />\n        </button>\n      </OverlayTrigger>\n    );\n  };\n\n  renderReactionsHeader = () => {\n    const { elementsGroup, elementsSort, sortDirection } = this.state;\n    const optionsHash = {\n      none: { sortColumn: 'create date', label: 'List' },\n      rinchi_short_key: { sortColumn: 'RInChI', label: 'Grouped by RInChI' },\n      rxno: { sortColumn: 'type', label: 'Grouped by type' },\n    };\n    const options = Object.entries(optionsHash).map((option) => ({\n      value: option[0],\n      label: option[1].label\n    }));\n    const { sortColumn } = optionsHash[elementsGroup];\n    const sortDirectionText = sortDirection === 'ASC' ? 'ascending' : 'descending';\n    const sortTitle = elementsSort\n      ? `click to sort by update date (${sortDirectionText}) - currently sorted by ${sortColumn} (${sortDirectionText})`\n      : `click to sort by ${sortColumn} (${sortDirectionText})`\n      + ` - currently sorted by update date (${sortDirectionText})`;\n    const sortTooltip = <Tooltip id=\"reaction_sort_tooltip\">{sortTitle}</Tooltip>;\n    let sortIconClass = 'fa-clock-o';\n    if (elementsGroup !== 'none') {\n      sortIconClass = elementsSort ? 'fa-sort-alpha-desc' : 'fa-clock-o';\n    } else {\n      sortIconClass = elementsSort ? 'fa-history' : 'fa-clock-o';\n    }\n    const sortIcon = <i className={`fa fa-fw ${sortIconClass}`} />;\n    const sortContent = (\n      <OverlayTrigger placement=\"top\" overlay={sortTooltip}>\n        <button\n          type=\"button\"\n          style={{ border: 'none' }}\n          onClick={this.changeElementsSort}\n        >\n          {sortIcon}\n        </button>\n      </OverlayTrigger>\n    );\n\n    return (\n      <>\n        <Select\n          simpleValue\n          options={options}\n          clearable={false}\n          searchable={false}\n          value={elementsGroup}\n          onChange={this.changeElementsGroup}\n          className=\"header-group-select\"\n        />\n        {sortContent}\n        {this.renderChangeSortDirectionIcon()}\n        {elementsGroup !== 'none' ? (this.collapseButton()) : null}\n      </>\n    );\n  };\n\n  renderGenericElementsHeader = () => {\n    const { elementsGroup, elementsSort } = this.state;\n    const { genericEl } = this.props;\n\n    if (!genericEl.properties_release) return null;\n\n    const optionsHash = {\n      none: { sortColumn: 'update date', label: 'List' },\n    };\n    const { layers } = genericEl.properties_release;\n    const allowedTypes = [\n      'select',\n      'text',\n      'integer',\n      'system-defined',\n      'textarea'\n    ];\n\n    Object.entries(layers).forEach((layerEntry) => {\n      layerEntry[1].fields\n        .filter((field) => (allowedTypes.includes(field.type)))\n        .forEach((field) => {\n          if (Object.keys(optionsHash).length < 11) {\n            optionsHash[`${layerEntry[0]}.${field.field}`] = {\n              sortColumn: field.label,\n              label: field.label\n            };\n          }\n        });\n    });\n    const options = Object.entries(optionsHash).map((option, index) => {\n      const label = index === 0 ? option[1].label : `Grouped by ${option[1].label}`;\n\n      return { value: option[0], label };\n    });\n\n    if (!optionsHash[elementsGroup]) {\n      // you are not able to use this.setState because this would rerender it again and again ...\n      // eslint-disable-next-line react/no-direct-mutation-state\n      this.state.elementsGroup = 'none';\n    }\n    const { sortColumn } = optionsHash[elementsGroup] || optionsHash.none;\n    const sortTitle = elementsSort ? `sort by ${sortColumn}` : 'sort by update date';\n    const sortTooltip = <Tooltip id=\"reaction_sort_tooltip\">{sortTitle}</Tooltip>;\n    const sortIconClass = elementsSort ? 'fa-sort-alpha-desc' : 'fa-clock-o';\n    const sortIcon = <i className={`fa fa-fw ${sortIconClass}`} />;\n    const sortContent = (\n      <OverlayTrigger placement=\"top\" overlay={sortTooltip}>\n        <button\n          type=\"button\"\n          style={{ border: 'none' }}\n          onClick={this.changeElementsSort}\n        >\n          {sortIcon}\n        </button>\n      </OverlayTrigger>\n    );\n\n    return (\n      <>\n        <Select\n          simpleValue\n          options={options}\n          clearable={false}\n          searchable\n          value={elementsGroup}\n          onChange={this.changeElementsGroup}\n          className=\"header-group-select\"\n        />\n        {elementsGroup !== 'none' ? (sortContent) : null}\n        {elementsGroup !== 'none' ? (this.collapseButton()) : null}\n      </>\n    );\n  };\n\n  renderHeader = () => {\n    const { filterCreatedAt, ui } = this.state;\n    const { type, showReport, genericEl } = this.props;\n    const { fromDate, toDate, userLabel } = ui;\n\n    let searchLabel = <span />;\n    let typeSpecificHeader = <span />;\n    if (type === 'sample') {\n      typeSpecificHeader = this.renderSamplesHeader();\n      searchLabel = <SearchUserLabels userLabel={userLabel} fnCb={this.setUserLabel} />;\n    } else if (type === 'reaction') {\n      typeSpecificHeader = this.renderReactionsHeader();\n      searchLabel = <SearchUserLabels userLabel={userLabel} fnCb={this.setUserLabel} />;\n    } else if (genericEl) {\n      typeSpecificHeader = this.renderGenericElementsHeader();\n      searchLabel = <SearchUserLabels userLabel={userLabel} fnCb={this.setUserLabel} />;\n    }\n\n    const filterTitle = filterCreatedAt === true\n      ? 'click to filter by update date - currently filtered by creation date'\n      : 'click to filter by creation date - currently filtered by update date';\n    const filterIconClass = filterCreatedAt === true ? 'fa-calendar' : 'fa-calendar-o';\n\n    const filterTooltip = <Tooltip id=\"date_tooltip\">{filterTitle}</Tooltip>;\n    const filterIcon = <i className={`fa ${filterIconClass}`} />;\n\n    return (\n      <div className=\"table-header\">\n        <div className=\"select-all\">\n          <ElementAllCheckbox\n            type={type}\n            ui={ui}\n            showReport={showReport}\n          />\n        </div>\n        <div\n          className=\"header-right\"\n          style={{\n            display: 'flex',\n            alignItems: 'center',\n            gap: 5,\n            flexWrap: 'wrap'\n          }}\n        >\n          {searchLabel}\n          <OverlayTrigger placement=\"top\" overlay={filterTooltip}>\n            <button\n              type=\"button\"\n              style={{ border: 'none' }}\n              onClick={this.changeDateFilter}\n            >\n              {filterIcon}\n            </button>\n          </OverlayTrigger>\n          <div className=\"sample-list-from-date\">\n            <DatePicker\n              selected={fromDate}\n              placeholderText=\"From\"\n              onChange={this.setFromDate}\n              popperPlacement=\"bottom-start\"\n              isClearable\n              dateFormat=\"dd-MM-YY\"\n            />\n          </div>\n          <div className=\"sample-list-to-date\">\n            <DatePicker\n              selected={toDate}\n              placeholderText=\"To\"\n              popperPlacement=\"bottom\"\n              onChange={this.setToDate}\n              isClearable\n              dateFormat=\"dd-MM-YY\"\n            />\n          </div>\n          {typeSpecificHeader}\n        </div>\n      </div>\n    );\n  };\n\n  renderEntries() {\n    const {\n      elements,\n      ui,\n      currentElement,\n      collapseAll,\n      moleculeSort,\n      elementsGroup,\n    } = this.state;\n\n    const { overview, type, genericEl } = this.props;\n    let elementsTableEntries;\n\n    if (type === 'sample') {\n      elementsTableEntries = (\n        <ElementsTableSampleEntries\n          collapseAll={collapseAll}\n          elements={elements}\n          currentElement={currentElement}\n          showDragColumn={!overview}\n          ui={ui}\n          moleculeSort={moleculeSort}\n          onChangeCollapse={(checked) => this.changeCollapse(!checked)}\n        />\n      );\n    } else if ((type === 'reaction' || genericEl) && elementsGroup !== 'none') {\n      elementsTableEntries = (\n        <ElementsTableGroupedEntries\n          collapseAll={collapseAll}\n          elements={elements}\n          currentElement={currentElement}\n          showDragColumn={!overview}\n          ui={ui}\n          elementsGroup={elementsGroup}\n          onChangeCollapse={(checked) => this.changeCollapse(!checked)}\n          genericEl={genericEl}\n          type={type}\n        />\n      );\n    } else if (type === 'cell_line'){\n      elementsTableEntries = (\n        <CellLineContainer\n        cellLineGroups={CellLineGroup.buildFromElements(elements)}\n      />\n      );\n    }\n\n\n    else {\n      elementsTableEntries = (\n        <ElementsTableEntries\n          elements={elements}\n          currentElement={currentElement}\n          showDragColumn={!overview}\n          ui={ui}\n        />\n      );\n    }\n\n    return (\n      <div ref={this.elementRef} className=\"list-elements\">\n        {elementsTableEntries}\n      </div>\n    );\n  }\n\n  render() {\n    return (\n      <div className=\"list-container\">\n        {this.renderHeader()}\n        {this.renderEntries()}\n        <div className=\"list-container-bottom\">\n          <Row>\n            <Col sm={6}>{this.pagination()}</Col>\n            <Col sm={6}>{this.numberOfResultsInput()}</Col>\n          </Row>\n        </div>\n      </div>\n    );\n  }\n}\n\nElementsTable.defaultProps = {\n  genericEl: null,\n};\n\nElementsTable.propTypes = {\n  overview: PropTypes.bool.isRequired,\n  showReport: PropTypes.bool.isRequired,\n  type: PropTypes.string.isRequired,\n  // eslint-disable-next-line react/forbid-prop-types\n  genericEl: PropTypes.object,\n};\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Popover, Button, FormGroup, Checkbox, Overlay } from 'react-bootstrap';\nimport _ from 'lodash';\n\nimport TabLayoutContainer from 'src/apps/mydb/elements/tabLayout/TabLayoutContainer';\n\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport UIActions from 'src/stores/alt/actions/UIActions';\n\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nexport default class ElementsTableSettings extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      visible: props.visible,\n      hidden: props.hidden,\n      currentType: '',\n      showSampleExternalLabel: false,\n      showSampleShortLabel: false,\n      showSampleName: false,\n      tableSchemePreviews: true,\n      showTabLayoutContainer: false\n    }\n\n    this.onCloseTabLayoutContainer = this.onCloseTabLayoutContainer.bind(this);\n    this.handleToggleSampleExt = this.handleToggleSampleExt.bind(this);\n    this.handleToggleSampleShortLabel = this.handleToggleSampleShortLabel.bind(this);\n    this.handleToggleSampleName = this.handleToggleSampleName.bind(this);\n    this.handleToggleScheme = this.handleToggleScheme.bind(this);\n    this.onChangeUser = this.onChangeUser.bind(this);\n    this.onChangeUI = this.onChangeUI.bind(this);\n    this.toggleTabLayoutContainer = this.toggleTabLayoutContainer.bind(this);\n  }\n\n  // to force popups to stay anchored to button\n  resize = () => this.forceUpdate()\n\n  componentDidMount() {\n    UserStore.listen(this.onChangeUser);\n    UIStore.listen(this.onChangeUI);\n    window.addEventListener('resize', this.resize);\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChangeUser);\n    UIStore.unlisten(this.onChangeUI);\n    window.removeEventListener('resize', this.resize);\n  }\n\n  onChangeUI(state) {\n    const tableSchemePreviews = state.showPreviews;\n\n    if (this.state.tableSchemePreviews != tableSchemePreviews) {\n      this.setState({ tableSchemePreviews });\n    }\n  }\n\n  onChangeUser(state) {\n    let { currentType } = this.state;\n    if (state && state.profile) {\n      this.setState({\n        showSampleExternalLabel: state.profile.show_external_name,\n        showSampleName: state.profile.show_sample_name,\n        showSampleShortLabel: state.profile.show_sample_short_label\n      });\n    }\n    if (state && (currentType !== state.currentType)) {\n      this.setState({ currentType: state.currentType });\n    }\n  }\n\n  onCloseTabLayoutContainer() {\n    this.toggleTabLayoutContainer();\n    this.updateLayout();\n\n    if (this.state.currentType == \"sample\" || this.state.currentType == \"reaction\") {\n      const show_previews = UIStore.getState().showPreviews;\n      const cur_previews = this.state.tableSchemePreviews;\n      if (cur_previews != show_previews) {\n        UIActions.toggleShowPreviews(cur_previews);\n\n      }\n\n    }\n\n    const { showSampleExternalLabel, showSampleShortLabel, showSampleName } = this.state;\n    UserActions.updateUserProfile({\n      show_external_name: showSampleExternalLabel,\n      show_sample_short_label: showSampleShortLabel,\n      show_sample_name: showSampleName\n    });\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    this.setState({\n      visible: nextProps.visible,\n      hidden: nextProps.hidden\n    });\n  }\n\n  handleToggleScheme() {\n    const { tableSchemePreviews } = this.state;\n    this.setState({ tableSchemePreviews: !tableSchemePreviews });\n  }\n\n  handleToggleSampleExt() {\n    const { showSampleExternalLabel } = this.state;\n    this.setState({\n      showSampleExternalLabel: !showSampleExternalLabel,\n      showSampleShortLabel: false,\n      showSampleName: false\n    });\n  }\n\n  handleToggleSampleShortLabel() {\n    const { showSampleShortLabel } = this.state;\n    this.setState({\n      showSampleShortLabel: !showSampleShortLabel,\n      showSampleExternalLabel: false,\n      showSampleName: false\n    });\n  }\n\n  handleToggleSampleName() {\n    const { showSampleName } = this.state;\n    this.setState({\n      showSampleName: !showSampleName,\n      showSampleExternalLabel: false,\n      showSampleShortLabel: false\n    });\n  }\n\n  updateLayout() {\n    const { visible, hidden } = this.tabLayoutContainerElement.state;\n    const layout = {};\n\n    visible.forEach((value, index) => {\n      layout[value] = (index + 1);\n    });\n    hidden.forEach((value, index) => {\n      if (value !== 'hidden') layout[value] = (- index - 1)\n    });\n\n    const userProfile = UserStore.getState().profile;\n    _.set(userProfile, 'data.layout', layout);\n\n    UserActions.updateUserProfile(userProfile);\n  }\n\n  toggleTabLayoutContainer() {\n    this.setState({ showTabLayoutContainer: !this.state.showTabLayoutContainer });\n  }\n\n  render() {\n    const {\n      visible, hidden, currentType,\n      tableSchemePreviews, showSampleExternalLabel, showSampleShortLabel, showSampleName,\n    } = this.state;\n\n    const wd = 35 + ((visible && visible.size * 50) || 0) + ((hidden && hidden.size * 50) || 0);\n\n    let sampleSettings = (<span />);\n    if (currentType == \"sample\" || currentType == \"reaction\") {\n      sampleSettings = (\n        <div>\n          <h3 className=\"popover-title\">Settings</h3>\n          <div className=\"popover-content\">\n            <FormGroup>\n              <Checkbox\n                onChange={this.handleToggleScheme}\n                checked={tableSchemePreviews}\n              >\n                Show schemes images\n              </Checkbox>\n            </FormGroup>\n            <FormGroup>\n              <Checkbox\n                onChange={this.handleToggleSampleExt}\n                checked={showSampleExternalLabel}\n              >\n                Show sample external name on title\n              </Checkbox>\n              <Checkbox\n                onChange={this.handleToggleSampleShortLabel}\n                checked={showSampleShortLabel}\n              >\n                Show sample short label\n              </Checkbox>\n              <Checkbox\n                onChange={this.handleToggleSampleName}\n                checked={showSampleName}\n              >\n                Show sample name\n              </Checkbox>\n            </FormGroup>\n          </div>\n        </div>\n      )\n    }\n    const tabLayoutContainerElement = (\n      <TabLayoutContainer\n        visible={visible}\n        hidden={hidden}\n        ref={(tabLayoutContainerElement) => this.tabLayoutContainerElement = tabLayoutContainerElement}\n      />\n    );\n\n    const popoverSettings = (\n      <Popover\n        className=\"collection-overlay\"\n        id=\"popover-layout\"\n        style={{ maxWidth: 'none', width: `${wd}px` }}\n      >\n        <div>\n          <h3 className=\"popover-title\">Tab Layout</h3>\n          <div className=\"popover-content\">\n            {tabLayoutContainerElement}\n          </div>\n        </div>\n        {sampleSettings}\n      </Popover>\n    )\n\n    return (\n      <div style={{position: 'relative'}}>\n        <Button\n          bsSize=\"xsmall\"\n          style={{ margin: '10px 10px 10px 0', float: 'right' }}\n          ref={button => { this.tabLayoutButton = button; }}\n          onClick={this.toggleTabLayoutContainer}\n        >\n          <i className=\"fa fa-sliders\" />\n        </Button>\n        <Overlay\n          container={this}\n          onHide={this.onCloseTabLayoutContainer}\n          placement=\"bottom\"\n          rootClose\n          show={this.state.showTabLayoutContainer}\n          target={() => ReactDOM.findDOMNode(this.tabLayoutButton)}\n          shouldUpdatePosition // works alongside resize event listener\n        >\n          {popoverSettings}\n        </Overlay>\n      </div>\n    );\n  }\n}\n","import Immutable from 'immutable';\nimport React from 'react';\nimport { Col, Nav, NavItem, Row, Tab, OverlayTrigger, Tooltip, Alert, Button } from 'react-bootstrap';\nimport KeyboardActions from 'src/stores/alt/actions/KeyboardActions';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport ElementsTable from 'src/apps/mydb/elements/list/ElementsTable';\nimport ElementsTableSettings from 'src/apps/mydb/elements/list/ElementsTableSettings';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport PropTypes from 'prop-types';\n\nfunction getSortedHash(inputHash) {\n  const resultHash = {};\n\n  const keys = Object.keys(inputHash);\n  keys.sort((a, b) => inputHash[a] - inputHash[b]).forEach((k) => {\n    resultHash[k] = inputHash[k];\n  });\n  return resultHash;\n}\n\nfunction getArrayFromLayout(layout, isVisible) {\n  let array = Immutable.List();\n  let sortedLayout = layout;\n\n  if (isVisible === true) {\n    sortedLayout = getSortedHash(sortedLayout);\n  }\n\n  Object.keys(sortedLayout).forEach((key, idx) => {\n    const order = sortedLayout[key];\n    if (isVisible && order < 0) { return; }\n    if (!isVisible && order > 0) { return; }\n\n    if (isVisible === true) {\n      array = array.set(idx + 1, key);\n    } else {\n      array = array.set(Math.abs(order), key);\n    }\n  });\n\n  array = array.filter((n) => n !== undefined);\n  return array;\n}\n\nexport default class ElementsList extends React.Component {\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      totalElements: {},\n      visible: Immutable.List(),\n      hidden: Immutable.List(),\n      genericEls: [],\n      currentTab: 0,\n      totalCheckedElements: {},\n    };\n\n    this.onChange = this.onChange.bind(this);\n    this.onChangeUser = this.onChangeUser.bind(this);\n    this.onChangeUI = this.onChangeUI.bind(this);\n    this.initState = this.initState.bind(this);\n    this.handleTabSelect = this.handleTabSelect.bind(this);\n  }\n\n  componentDidMount() {\n    ElementStore.listen(this.onChange);\n    UserStore.listen(this.onChangeUser);\n    UIStore.listen(this.onChangeUI);\n\n    this.initState();\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    const { overview, showReport } = this.props;\n    const {\n      visible, hidden, currentTab, totalElements\n    } = this.state;\n\n    return nextProps.overview !== overview\n      || nextProps.showReport !== showReport\n      || nextProps.totalElements !== totalElements\n      || nextState.visible !== visible\n      || nextState.hidden !== hidden\n      || nextState.currentTab !== currentTab;\n  }\n\n  componentWillUnmount() {\n    ElementStore.unlisten(this.onChange);\n    UserStore.unlisten(this.onChangeUser);\n    UIStore.unlisten(this.onChangeUI);\n  }\n\n  handleTabSelect(tab) {\n    UserActions.selectTab(tab);\n\n    // TODO sollte in tab action handler\n    const uiState = UIStore.getState();\n    const { visible } = this.state;\n    const type = visible.get(tab);\n\n    if (!uiState[type] || !uiState[type].page) { return; }\n\n    const { page } = uiState[type];\n\n    UIActions.setPagination({ type, page });\n\n    KeyboardActions.contextChange(type);\n  }\n\n  onChange(state) {\n    const { totalElements } = this.state;\n    Object.keys(state.elements).forEach((key) => {\n      totalElements[key] = state.elements[key]?.totalElements;\n    });\n\n    this.setState({\n      totalElements\n    });\n  }\n\n  onChangeUser(state) {\n    let visible = '';\n    let hidden = '';\n    let currentTabIndex = 0;\n\n    const { currentType } = state;\n    let type = state.currentType;\n\n    if (typeof (state.profile) !== 'undefined' && state.profile\n      && typeof (state.profile.data) !== 'undefined' && state.profile.data) {\n      visible = getArrayFromLayout(state.profile.data.layout, true);\n      hidden = getArrayFromLayout(state.profile.data.layout, false);\n      currentTabIndex = visible.findIndex((e) => e === currentType);\n      if (type === '') { type = visible.get(0); }\n    }\n    if (hidden.size === 0) {\n      hidden = ArrayUtils.pushUniq(hidden, 'hidden');\n    }\n\n    if (currentTabIndex < 0) currentTabIndex = 0;\n\n    if (typeof type !== 'undefined' && type != null) {\n      KeyboardActions.contextChange.defer(type);\n    }\n\n    this.setState({\n      currentTab: currentTabIndex,\n      genericEls: state.genericEls || [],\n      visible,\n      hidden\n    });\n  }\n\n  onChangeUI(state) {\n    const { totalCheckedElements } = this.state;\n    let forceUpdate = false;\n    // const genericNames = (genericEls && genericEls.map(el => el.name)) || [];\n    let genericKlasses = [];\n    const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n    if (MatrixCheck(currentUser.matrix, 'genericElement')) {\n      const { klasses } = UIStore.getState();\n      genericKlasses = klasses;\n    }\n    const elNames = ['sample', 'reaction', 'screen', 'wellplate', 'research_plan', 'cell_line'].concat(genericKlasses);\n\n    elNames.forEach((type) => {\n      const elementUI = state[type] || {\n        checkedAll: false, checkedIds: [], uncheckedIds: [], currentId: null\n      };\n      const element = ElementStore.getState().elements[`${type}s`];\n      const nextCount = elementUI.checkedAll\n        ? (element.totalElements - elementUI.uncheckedIds.size)\n        : elementUI.checkedIds.size;\n      if (!forceUpdate && nextCount !== (totalCheckedElements[type] || 0)) { forceUpdate = true; }\n      totalCheckedElements[type] = nextCount;\n    });\n\n    this.setState((previousState) => ({ ...previousState, totalCheckedElements }));\n    // could not use shouldComponentUpdate because state.totalCheckedElements\n    // has already changed independently of setstate\n    if (forceUpdate) { this.forceUpdate(); }\n  }\n\n  handleRemoveSearchResult(searchStore) {\n    searchStore.changeShowSearchResultListValue(false);\n    UIActions.clearSearchById();\n    ElementActions.changeSorting(false);\n    const { currentCollection, isSync } = UIStore.getState();\n    isSync ? UIActions.selectSyncCollection(currentCollection)\n      : UIActions.selectCollection(currentCollection);\n  }\n\n  handleTabSelect(tab) {\n    UserActions.selectTab(tab);\n\n    // TODO sollte in tab action handler\n    const uiState = UIStore.getState();\n    const type = this.state.visible.get(tab);\n\n    if (!uiState[type] || !uiState[type].page) { return; }\n\n    const { page } = uiState[type];\n\n    UIActions.setPagination({ type, page });\n\n    KeyboardActions.contextChange(type);\n  }\n\n  initState() {\n    this.onChange(ElementStore.getState());\n  }\n\n  getSortedHash(inputHash) {\n    var resultHash = {};\n\n    var keys = Object.keys(inputHash);\n    keys.sort(function (a, b) {\n      return inputHash[a] - inputHash[b]\n    }).forEach(function (k) {\n      resultHash[k] = inputHash[k];\n    });\n    return resultHash;\n  }\n\n  getArrayFromLayout(layout, isVisible) {\n    let array = Immutable.List();\n\n    if (isVisible == true) {\n      layout = this.getSortedHash(layout);\n    }\n\n    Object.keys(layout).forEach(function (key, idx) {\n      const order = layout[key]\n      if (isVisible && order < 0) { return; }\n      if (!isVisible && order > 0) { return; }\n\n      if (isVisible == true) {\n        array = array.set(idx+1, key)\n      } else {\n        array = array.set(Math.abs(order), key)\n      }\n    })\n\n    array = array.filter( n => [\"sample\", \"reaction\"].includes(n));\n    return array;\n  }\n\n  render() {\n    const {\n      visible, hidden, currentTab, totalCheckedElements\n    } = this.state;\n    const constEls = ['sample', 'reaction', 'screen', 'wellplate', 'research_plan', 'cell_line'];\n    const { overview, showReport } = this.props;\n    const elementState = this.state;\n\n    let removeSearchResultAlert = '';\n    if (UIStore.getState().currentSearchByID) {\n      removeSearchResultAlert = (\n        <Alert bsStyle=\"info\" style={{ padding: '4px' }}>\n          <Button bsStyle=\"link\" style={{ fontSize: '15px' }} onClick={() => this.handleRemoveSearchResult(this.context.search)}>Remove search result</Button>\n        </Alert>\n      );\n    }\n\n    const navItems = [];\n    const tabContents = [];\n    for (let i = 0; i < visible.size; i += 1) {\n      const value = visible.get(i);\n\n      let iconClass = `icon-${value}`;\n      let ttl = (\n        <Tooltip\n          id=\"_tooltip_history\"\n          className=\"left_tooltip\"\n        >\n          {value && (value.replace('_', ' ').replace(/(^\\w|\\s\\w)/g, (m) => m.toUpperCase()))}\n        </Tooltip>\n      );\n      let genericEl = null;\n\n      if (!constEls.includes(value)) {\n        const { genericEls } = this.state;\n        genericEl = (genericEls && genericEls.find((el) => el.name === value)) || {};\n        iconClass = `${genericEl.icon_name} icon_generic_nav`;\n        ttl = (\n          <Tooltip id=\"_tooltip_history\" className=\"left_tooltip\">\n            {genericEl.label}\n            <br />\n            {genericEl.desc}\n          </Tooltip>\n        );\n      }\n\n      const navItem = (\n        <NavItem eventKey={i} key={`${value}_navItem`} className={`elements-list-tab-${value}s`}>\n          <OverlayTrigger delayShow={500} placement=\"top\" overlay={ttl}>\n            <i className={iconClass} />\n          </OverlayTrigger>\n          <span style={{ paddingLeft: 5 }}>\n            {elementState.totalElements && elementState.totalElements[`${value}s`]}\n            (\n            {totalCheckedElements[value] || 0}\n            )\n          </span>\n        </NavItem>\n      );\n\n      const tabContent = (\n        <Tab.Pane eventKey={i} key={`${value}_tabPanel`}>\n          <ElementsTable\n            overview={overview}\n            showReport={showReport}\n            type={value}\n            genericEl={genericEl}\n          />\n        </Tab.Pane>\n      );\n\n      navItems.push(navItem);\n      tabContents.push(tabContent);\n    }\n\n    return (\n      <Tab.Container\n        id=\"tabList\"\n        defaultActiveKey={0}\n        activeKey={currentTab}\n        onSelect={this.handleTabSelect}\n      >\n        <Row className=\"clearfix\">\n          <Col sm={12}>\n            {removeSearchResultAlert}\n            <Nav bsStyle=\"tabs\">\n              {navItems}\n              <ElementsTableSettings\n                visible={visible}\n                hidden={hidden}\n                ref={(m) => { this.elementsTableSettings = m; }}\n              />\n            </Nav>\n          </Col>\n          <Col sm={12}>\n            <Tab.Content animation>\n              {tabContents}\n            </Tab.Content>\n          </Col>\n        </Row>\n      </Tab.Container>\n    );\n  }\n}\n\nElementsList.propTypes = {\n  overview: PropTypes.bool.isRequired,\n  showReport: PropTypes.bool.isRequired,\n};\n","import 'whatwg-fetch';\nimport { camelizeKeys } from 'humps';\n\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nexport default class ComputeTaskFetcher {\n  static fetchAll() {\n    return fetch('/api/v1/compute_tasks/all', {\n      method: 'GET',\n      credentials: 'same-origin',\n    }).then(res => res.json()).then(json => (\n      camelizeKeys(json.compute_tasks || [])\n    )).catch(err => console.log(err));\n  }\n\n  static checkState(taskId) {\n    return fetch(`/api/v1/compute_tasks/${taskId}/check`, {\n      method: 'GET',\n      credentials: 'same-origin',\n    }).then(res => res.json()).then((json) => {\n      LoadingActions.stop.defer();\n      return camelizeKeys(json.check);\n    }).catch(err => console.log(err));\n  }\n\n  static revokeTask(taskId) {\n    return fetch(`/api/v1/compute_tasks/${taskId}/revoke`, {\n      method: 'GET',\n      credentials: 'same-origin',\n    }).then(res => res.json()).then((json) => {\n      LoadingActions.stop.defer();\n      return camelizeKeys(json.revoke);\n    }).catch(err => console.log(err));\n  }\n\n  static deleteTask(taskId) {\n    return fetch(`/api/v1/compute_tasks/${taskId}`, {\n      method: 'DELETE',\n      credentials: 'same-origin',\n    }).then(res => res.json()).then((json) => {\n      LoadingActions.stop.defer();\n      return camelizeKeys(json);\n    }).catch(err => console.log(err));\n  }\n}\n\n","/* eslint-disable class-methods-use-this */\nimport alt from 'src/stores/alt/alt';\nimport ComputeTaskFetcher from 'src/fetchers/ComputeTaskFetcher';\n\nclass ComputeTaskActions {\n  fetchAll() {\n    return (dispatch) => {\n      ComputeTaskFetcher.fetchAll().then(res => (\n        dispatch(res)\n      )).catch((err) => {\n        console.log(err);\n      });\n    };\n  }\n\n  checkState(taskId) {\n    return (dispatch) => {\n      ComputeTaskFetcher.checkState(taskId).then(res => (\n        dispatch(res)\n      )).catch((err) => {\n        console.log(err);\n      });\n    };\n  }\n\n  revokeTask(taskId) {\n    return (dispatch) => {\n      ComputeTaskFetcher.revokeTask(taskId).then(res => (\n        dispatch(res)\n      )).catch((err) => {\n        console.log(err);\n      });\n    };\n  }\n\n  deleteTask(taskId) {\n    return (dispatch) => {\n      ComputeTaskFetcher.deleteTask(taskId).then(res => (\n        dispatch(res)\n      )).catch((err) => {\n        console.log(err);\n      });\n    };\n  }\n}\n\nexport default alt.createActions(ComputeTaskActions);\n","import alt from 'src/stores/alt/alt';\n\nimport ComputeTaskActions from 'src/stores/alt/actions/ComputeTaskActions';\n\nclass ComputeTaskStore {\n  constructor() {\n    this.state = {\n      tasks: [],\n    };\n\n    this.bindListeners({\n      handleFetchAll: ComputeTaskActions.fetchAll,\n      handleUpdateTask: [\n        ComputeTaskActions.checkState,\n        ComputeTaskActions.revokeTask,\n      ],\n      handleDeleteTask: ComputeTaskActions.deleteTask\n    });\n  }\n\n  handleFetchAll(tasks) {\n    this.state.tasks = tasks;\n  }\n\n  handleUpdateTask(newTask) {\n    const { tasks } = this.state;\n    this.state.tasks = tasks.map(task => (\n      task.id === newTask.id ? { ...newTask } : task\n    ));\n  }\n\n  handleDeleteTask(deletedTask) {\n    const { tasks } = this.state;\n    this.state.tasks = tasks.filter(task => task.id !== deletedTask.id);\n  }\n}\n\nexport default alt.createStore(ComputeTaskStore, 'ComputeTaskStore');\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Label } from 'react-bootstrap';\n\nimport Aviator from 'aviator';\n\nconst statusMap = {\n  not_computed: 'pending'\n};\n\nexport default class ComputeTask extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.navigateSample = this.navigateSample.bind(this);\n    this.checkState = this.checkState.bind(this);\n    this.revokeTask = this.revokeTask.bind(this);\n    this.deleteTask = this.deleteTask.bind(this);\n  }\n\n  navigateSample() {\n    const { task } = this.props;\n    const currentURI = Aviator.getCurrentURI();\n\n    const collectionMatch = currentURI.match(/\\/collection\\/(\\d+)\\//);\n    if (collectionMatch) {\n      const collectionId = collectionMatch[1];\n      const url = `/collection/${collectionId}/sample/${task.sampleId}`;\n      Aviator.navigate(url);\n    }\n  }\n\n  checkState() {\n    const { task } = this.props;\n    this.props.checkState(task.id);\n  }\n\n  revokeTask() {\n    const { task } = this.props;\n    this.props.revokeTask(task.id);\n  }\n\n  deleteTask() {\n    const { task } = this.props;\n    this.props.deleteTask(task.id);\n  }\n\n  render() {\n    const { task } = this.props;\n    const { status } = task;\n    const displayStatus = (status in statusMap) ? statusMap[status] : status;\n\n    return (\n      <tr>\n        <td style={{ textAlign: 'center' }}>\n          <Button bsStyle=\"link\" onClick={this.navigateSample}>\n            Sample\n          </Button>\n        </td>\n        <td style={{ textAlign: 'center' }}>\n          <Label bsStyle=\"primary\">{displayStatus}</Label>\n        </td>\n        <td style={{ textAlign: 'center' }}>{task.updatedAt}</td>\n        <td style={{ textAlign: 'center' }}>\n          <Button bsStyle=\"info\" onClick={this.checkState} bsSize=\"xs\" style={{ width: '22px' }}>\n            <i className=\"fa fa-long-arrow-up\" />\n            <i className=\"fa fa-long-arrow-down\" />\n          </Button>\n          &nbsp;&nbsp;\n          <Button bsStyle=\"warning\" onClick={this.revokeTask} bsSize=\"xs\">\n            <i className=\"fa fa-stop\" />\n          </Button>\n          &nbsp;&nbsp;\n          <Button bsStyle=\"danger\" onClick={this.deleteTask} bsSize=\"xs\">\n            <i className=\"fa fa-trash\" />\n          </Button>\n        </td>\n      </tr>\n    );\n  }\n}\n\nComputeTask.propTypes = {\n  // eslint-disable-next-line react/forbid-prop-types\n  task: PropTypes.object.isRequired,\n  checkState: PropTypes.func.isRequired,\n  revokeTask: PropTypes.func.isRequired,\n  deleteTask: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Panel, Button, Table } from 'react-bootstrap';\n\nimport ComputeTaskActions from 'src/stores/alt/actions/ComputeTaskActions';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nimport ComputeTaskStore from 'src/stores/alt/stores/ComputeTaskStore';\nimport ComputeTask from 'src/apps/mydb/elements/details/computeTasks/ComputeTask';\n\nexport default class ComputeTaskContainer extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      tasks: []\n    };\n\n    this.onChangeComputeTask = this.onChangeComputeTask.bind(this);\n    this.onClose = this.onClose.bind(this);\n\n    this.checkState = this.checkState.bind(this);\n    this.revokeTask = this.revokeTask.bind(this);\n    this.deleteTask = this.deleteTask.bind(this);\n  }\n\n  componentDidMount() {\n    ComputeTaskStore.listen(this.onChangeComputeTask);\n\n    ComputeTaskActions.fetchAll();\n  }\n\n  componentWillUnmount() {\n    ComputeTaskStore.unlisten(this.onChangeComputeTask);\n  }\n\n  onClose() {\n    DetailActions.close(this.props.task, true);\n  }\n\n  onChangeComputeTask(state) {\n    const { tasks } = state;\n\n    this.setState({ tasks });\n  }\n\n  /* eslint-disable class-methods-use-this */\n  checkState(taskId) {\n    LoadingActions.start();\n    ComputeTaskActions.checkState(taskId);\n  }\n\n  revokeTask(taskId) {\n    LoadingActions.start();\n    ComputeTaskActions.revokeTask(taskId);\n  }\n\n  deleteTask(taskId) {\n    LoadingActions.start();\n    ComputeTaskActions.deleteTask(taskId);\n  }\n  /* eslint-enable class-methods-use-this */\n\n  render() {\n    const { tasks } = this.state;\n\n    return (\n      <Panel className=\"eln-panel-detail\" bsStyle=\"primary\">\n        <Panel.Heading>\n          {'Task'}\n          <div className=\"button-right\">\n            <Button\n              key=\"closeBtn\"\n              onClick={this.onClose}\n              bsStyle=\"danger\"\n              bsSize=\"xsmall\"\n              className=\"button-right\"\n            >\n              <i className=\"fa fa-times\" />\n            </Button>\n          </div>\n        </Panel.Heading>\n        <Panel.Body>\n          <Table striped condensed hover>\n            <thead>\n              <tr>\n                <th style={{ textAlign: 'center' }}>Sample</th>\n                <th style={{ textAlign: 'center' }}>Status</th>\n                <th style={{ textAlign: 'center' }}>Updated at</th>\n                <th style={{ textAlign: 'center' }}>Actions</th>\n              </tr>\n            </thead>\n            <tbody>\n              {tasks.map(task => (\n                <ComputeTask\n                  key={task.id}\n                  task={task}\n                  checkState={this.checkState}\n                  revokeTask={this.revokeTask}\n                  deleteTask={this.deleteTask}\n                />\n              ))}\n            </tbody>\n          </Table>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nComputeTaskContainer.propTypes = {\n  // eslint-disable-next-line react/forbid-prop-types\n  task: PropTypes.object.isRequired\n};\n","import React, { Component } from 'react'\nimport connectToStores from 'alt-utils/lib/connectToStores'\nimport {\n  PanelGroup, Panel, ButtonGroup, Button, ControlLabel, FormControl\n} from 'react-bootstrap';\nimport ElementActions from 'src/stores/alt/actions/ElementActions'\nimport UIActions from 'src/stores/alt/actions/UIActions'\nimport ElementStore from 'src/stores/alt/stores/ElementStore'\nimport UIStore from 'src/stores/alt/stores/UIStore'\n\nconst DeviceManagement = ({ devices, activeAccordionDevice }) => {\n  const handleCloseDeviceManagement = () => {\n    UIActions.closeDeviceManagement()\n    const { currentCollection } = UIStore.getState()\n    if (currentCollection == null || currentCollection.label == 'All') {\n      Aviator.navigate(`/collection/all/${urlForCurrentElement()}`)\n    } else {\n      Aviator.navigate(`/collection/${currentCollection.id}/${urlForCurrentElement()}`)\n    }\n  }\n\n  const urlForCurrentElement = () => {\n    const { currentElement } = ElementStore.getState()\n    if (currentElement) {\n      if (currentElement.isNew) {\n        return `${currentElement.type}/new`\n      }\n      else {\n        return `${currentElement.type}/${currentElement.id}`\n      }\n    }\n    else {\n      return ''\n    }\n  }\n\n  return (\n    <div>\n      <h1\n        style={{ margin: 0, float: \"left\" }}\n      >\n        Device-Management\n      </h1>\n      <Button\n        bsSize=\"xsmall\"\n        bsStyle=\"danger\"\n        style={{ margin: \"10px\" }}\n        onClick={() => handleCloseDeviceManagement()}\n      >\n        <i className=\"fa fa-times\"></i>\n      </Button>\n      <AddDeviceButton\n        activeAccordionDevice={activeAccordionDevice}\n      />\n      <Devices\n        devices={devices}\n        activeAccordionDevice={activeAccordionDevice}\n      />\n    </div>\n  )\n}\n\nDeviceManagement.getStores = () => {\n  return [ElementStore]\n}\n\nDeviceManagement.getPropsFromStores = () => {\n  return ElementStore.getState().elements.devices\n}\n\nexport default connectToStores(DeviceManagement)\n\nconst Devices = ({ devices, activeAccordionDevice }) => {\n  const styleByDeviceState = (device) => {\n    return device.isNew || device.isEdited\n      ? \"info\"\n      : \"default\"\n  }\n  if (devices.length > 0) {\n    return (\n      <PanelGroup defaultActiveKey={0} activeKey={activeAccordionDevice} accordion>\n        {devices.map(\n          (device, key) =>\n            <Panel\n              eventKey={key}\n              key={key}\n              onClick={() => ElementActions.changeActiveAccordionDevice(key)}\n              bsStyle={styleByDeviceState(device)}\n            >\n              <Panel.Heading>{<DeviceHeader device={device} />}</Panel.Heading>\n              <Panel.Body>\n                <Device\n                  device={device}\n                />\n              </Panel.Body>\n            </Panel>\n        )}\n      </PanelGroup>\n    )\n  } else {\n    return (\n      <p>\n        There are currently no Devices.\n      </p>\n    )\n  }\n}\n\nconst Device = ({ device }) => {\n  const styleBySelectedType = (type) => {\n    return device.types.includes(type)\n      ? \"primary\"\n      : \"default\"\n  }\n\n  const handleTypeClick = (type) => {\n    ElementActions.toggleDeviceType(device, type)\n  }\n\n  const handleSave = () => {\n    device.updateChecksum()\n    ElementActions.saveDevice(device)\n  }\n\n  const handleChangeDeviceProp = (prop, value) => {\n    ElementActions.changeDeviceProp(device, prop, value)\n  }\n\n  const bottomSpacer = {\n    marginBottom: \"10px\"\n  }\n\n  return (\n    <div>\n      <ControlLabel>Title</ControlLabel>\n      <FormControl\n        type=\"text\"\n        value={device.title}\n        placeholder=\"Enter device-title..\"\n        onChange={(e) => handleChangeDeviceProp(\"title\", e.target.value)}\n        style={bottomSpacer}\n      />\n      <ControlLabel>Code</ControlLabel>\n      <FormControl\n        type=\"text\"\n        value={device.code}\n        placeholder=\"Enter device-code..\"\n        onChange={(e) => handleChangeDeviceProp(\"code\", e.target.value)}\n        style={bottomSpacer}\n      />\n      <ControlLabel>Types</ControlLabel><br />\n      <ButtonGroup\n        style={bottomSpacer}\n      >\n        <Button\n          bsStyle={styleBySelectedType(\"NMR\")}\n          onClick={() => handleTypeClick(\"NMR\")}\n        >\n          NMR\n        </Button>\n        <Button\n          bsStyle={styleBySelectedType(\"EA\")}\n          onClick={() => handleTypeClick(\"EA\")}\n        >\n          EA\n        </Button>\n        <Button\n          bsStyle={styleBySelectedType(\"MS\")}\n          onClick={() => handleTypeClick(\"MS\")}\n        >\n          MS\n        </Button>\n        <Button\n          bsStyle={styleBySelectedType(\"IR\")}\n          onClick={() => handleTypeClick(\"IR\")}\n        >\n          IR\n        </Button>\n      </ButtonGroup>\n      <br />\n      <Button\n        style={{ marginTop: \"5px\" }}\n        onClick={(e) => handleSave()}\n      >\n        Save\n      </Button>\n    </div>\n  )\n}\n\nconst DeviceHeader = ({ device, state, onChangeState }) => {\n  const handleRemoveDevice = (e) => {\n    if (confirm('Delete the Device?')) {\n      ElementActions.deleteDevice(device)\n    }\n    e.preventDefault()\n  }\n\n  return (\n    <div style={{\n      width: '100%',\n      cursor: \"pointer\"\n    }}>\n      {device.title}\n      <Button\n        bsSize=\"xsmall\"\n        bsStyle=\"danger\"\n        className=\"button-right\"\n        onClick={(e) => handleRemoveDevice(e)}\n      >\n        <i className=\"fa fa-trash\"></i>\n      </Button>\n    </div>\n  )\n}\n\nconst AddDeviceButton = () => {\n  return (\n    <p>\n      &nbsp;\n      <Button className=\"button-right\" bsSize=\"xsmall\" bsStyle=\"success\" onClick={() => ElementActions.createDevice()}>\n        Add device\n      </Button>\n    </p>\n  )\n}\n","import React from 'react'\nimport { Panel, PanelGroup, ButtonToolbar, Button, OverlayTrigger, Tooltip } from 'react-bootstrap'\nimport ElementActions from 'src/stores/alt/actions/ElementActions'\nimport DetailActions from 'src/stores/alt/actions/DetailActions'\nimport DeviceManagement from 'src/apps/mydb/elements/details/devices/DeviceManagement'\n\n\nconst DeviceDetails = ({ device, toggleFullScreen }) => {\n  return (\n    <Panel\n      className='panel-detail'\n      bsStyle={device.isPendingToSave ? 'info' : 'primary'}\n    >\n      <Panel.Heading>\n        {<Header device={device} toggleFullScreen={toggleFullScreen} />}\n      </Panel.Heading>\n      <Panel.Body>\n        <PanelGroup defaultActiveKey=\"0\" accordion>\n          <Panel eventKey=\"1\">\n            <Panel.Heading>\n              <Panel.Title toggle>\n                Device Management\n              </Panel.Title>\n            </Panel.Heading>\n            <Panel.Body collapsible=\"true\">\n              <DeviceManagement />\n            </Panel.Body>\n          </Panel>\n        </PanelGroup>\n\n        <ButtonToolbar>\n          <Button bsStyle=\"primary\" onClick={() => DetailActions.close(device)}>\n            Close\n          </Button>\n          <Button bsStyle=\"warning\" onClick={() => handleSubmit(device)}>\n            Save\n          </Button>\n        </ButtonToolbar>\n      </Panel.Body>\n    </Panel>\n  )\n}\n\nexport default DeviceDetails\n\nconst handleSubmit = (device) => {\n  device.updateChecksum()\n  ElementActions.saveDevice(device)\n}\n\nconst Header = ({ device, toggleFullScreen }) => {\n  return (\n    <div>\n      {device.title}\n      <OverlayTrigger placement=\"bottom\"\n        overlay={<Tooltip id=\"closeReaction\">Close Device</Tooltip>}>\n        <Button bsStyle=\"danger\" bsSize=\"xsmall\" className=\"button-right\"\n          onClick={() => DetailActions.close(device)}>\n          <i className=\"fa fa-times\"></i>\n        </Button>\n      </OverlayTrigger>\n      <OverlayTrigger placement=\"bottom\"\n        overlay={<Tooltip id=\"saveReaction\">Save Device</Tooltip>}>\n        <Button bsStyle=\"warning\" bsSize=\"xsmall\" className=\"button-right\"\n          onClick={() => handleSubmit(device)}>\n          <i className=\"fa fa-floppy-o \"></i>\n        </Button>\n      </OverlayTrigger>\n      <OverlayTrigger placement=\"bottom\"\n        overlay={<Tooltip id=\"fullSample\">FullScreen</Tooltip>}>\n        <Button bsStyle=\"info\" bsSize=\"xsmall\" className=\"button-right\"\n          onClick={() => toggleFullScreen()}>\n          <i className=\"fa fa-expand\"></i>\n        </Button>\n      </OverlayTrigger>\n    </div>\n  )\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Quill from 'quill';\nimport _ from 'lodash';\n\nimport { keepSupSub } from 'src/utilities/quillFormat';\n\nexport default class QuillViewer extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.viewer = false;\n  }\n\n  componentDidMount() {\n    this.initQuill();\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const oldVal = this.props.value;\n    const newVal = nextProps.value;\n    if (oldVal && newVal && !_.isEqual(newVal, oldVal)) {\n      this.viewer.setContents(newVal);\n    }\n  }\n\n  initQuill() {\n    if (!this.viewer) {\n      const { quillViewer } = this;\n      const defaultOptions = {\n        theme: this.theme,\n        readOnly: this.readOnly,\n      };\n\n      this.viewer = new Quill(quillViewer, defaultOptions);\n      const oriValue = this.props.value;\n      const value = this.props.preview ? keepSupSub(oriValue) : oriValue;\n      this.viewer.setContents(value);\n    }\n  }\n\n  render() {\n    this.readOnly = true;\n\n    return (\n      this.props.preview\n        ? <div className=\"quill-viewer\"><div ref={(m) => { this.quillViewer = m; }} /></div>\n        : <span ref={(n) => { this.quillViewer = n; }} />\n    );\n  }\n}\n\nQuillViewer.propTypes = {\n  value: PropTypes.oneOfType([\n    PropTypes.object,\n    PropTypes.array\n  ]),\n  preview: PropTypes.bool\n};\n\nQuillViewer.defaultProps = {\n  value: [],\n  preview: false\n};\n","import React from 'react';\n\nconst PanelHeader = ({ title, btns }) => {\n  return (\n    <div>\n      {title}\n      <div className=\"button-right\">\n        {btns}\n      </div>\n    </div>\n  );\n};\n\nexport default PanelHeader;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Panel, Accordion, Button } from 'react-bootstrap';\nimport QuillViewer from 'src/components/QuillViewer';\n\nimport PanelHeader from 'src/components/common/PanelHeader';\n\nconst tryParse = function TryParseToJson(obj) {\n  if (typeof obj === 'object') return obj;\n  return JSON.parse(obj);\n};\n\nfunction ElementAnalyses({ element, idx }) {\n  const children = element.children.map(x => (\n    <ElementAnalyses key={x.id} element={x} />\n  ));\n\n  let analyses = element.analyses.map((x) => {\n    let kind = x.extended_metadata.kind || '';\n    kind = (kind.split('|')[1] || kind).trim();\n    const header = `Analysis name: ${x.name} - Type: ${kind}`;\n    return (\n      <Panel key={x.id}>\n        <Panel.Heading>\n          {header}\n        </Panel.Heading>\n        <Panel.Body>\n          <QuillViewer value={tryParse(x.extended_metadata.content)} />\n        </Panel.Body>\n      </Panel>\n    );\n  });\n\n  if (element.analyses.length === 0) {\n    analyses = (\n      <p> This {element.type} does not have any analysis.</p>\n    );\n  }\n\n  return (\n    <Panel\n      key={element.id}\n      eventKey={idx}\n    >\n      <Panel.Heading>\n        {`${element.type}: ${element.short_label}`}\n      </Panel.Heading>\n      <Panel.Body>\n      {children}\n      {analyses}\n      </Panel.Body>\n    </Panel>\n  );\n}\n\nfunction FormatComponentHeader({ onClose, onSave, onFormat }) {\n  const closeBtn = (\n    <Button\n      key=\"closeBtn\"\n      onClick={onClose}\n      bsStyle=\"danger\"\n      bsSize=\"xsmall\"\n      className=\"button-right\"\n    >\n      <i className=\"fa fa-times\" />\n    </Button>\n  );\n  const saveBtn = (\n    <Button\n      key=\"saveBtn\"\n      onClick={onSave}\n      bsStyle=\"warning\"\n      bsSize=\"xsmall\"\n      className=\"button-right\"\n    >\n      <i className=\"fa fa-floppy-o\" />\n    </Button>\n  );\n  const formatBtn = (\n    <Button\n      key=\"formatBtn\"\n      onClick={onFormat}\n      bsStyle=\"info\"\n      bsSize=\"xsmall\"\n      className=\"button-right\"\n    >\n      <i className=\"fa fa-magic\" />\n    </Button>\n  );\n  const btns = [closeBtn, saveBtn, formatBtn];\n\n  return <PanelHeader title=\"Analyses Formatting\" btns={btns} />;\n}\n\nfunction FormatComponent({\n  list, bsStyle, onSave, onFormat, onClose\n}) {\n  const elements = list.map((el, idx) => (\n    <ElementAnalyses key={el.id} element={el} idx={idx} />\n  ));\n  const header = (\n    <FormatComponentHeader\n      onSave={onSave}\n      onFormat={onFormat}\n      onClose={onClose}\n    />\n  );\n\n  return (\n    <Panel\n      bsStyle={bsStyle}\n      className=\"format-analysis-panel\"\n    >\n      <Panel.Heading>\n        {header}\n      </Panel.Heading>\n      <Panel.Body>\n        <Accordion>{elements}</Accordion>\n      </Panel.Body>\n    </Panel>\n  );\n}\n\nElementAnalyses.propTypes = {\n  element: PropTypes.shape({\n    type: PropTypes.string.isRequired,\n    short_label: PropTypes.string.isRequired,\n    id: PropTypes.number.isRequired,\n    children: PropTypes.arrayOf(PropTypes.object),\n    analyses: PropTypes.arrayOf(PropTypes.object)\n  }).isRequired,\n  idx: PropTypes.number\n};\n\nElementAnalyses.defaultProps = {\n  idx: null\n};\n\nFormatComponentHeader.propTypes = {\n  onSave: PropTypes.func.isRequired,\n  onFormat: PropTypes.func.isRequired,\n  onClose: PropTypes.func.isRequired\n};\n\nFormatComponent.propTypes = {\n  list: PropTypes.arrayOf(PropTypes.object).isRequired,\n  bsStyle: PropTypes.string,\n  onSave: PropTypes.func.isRequired,\n  onFormat: PropTypes.func.isRequired,\n  onClose: PropTypes.func.isRequired\n};\n\nFormatComponent.defaultProps = {\n  bsStyle: 'info'\n};\n\nexport default FormatComponent;\n","const isEqId = (a, b) => a.id === b.id;\n\nconst findArrIndex = (tagEl, criteria, arr = []) => {\n  let elIndex;\n  arr.forEach((el, i) => {\n    if (criteria(el, tagEl)) {\n      elIndex = i;\n    }\n  });\n  return elIndex;\n};\n\nconst reOrderArr = (sourceTagEl, targetTagEl, criteria, arr = []) => {\n  const sourceIndex = findArrIndex(sourceTagEl, criteria, arr);\n  const targetIndex = findArrIndex(targetTagEl, criteria, arr);\n  const arrWoSource = [...arr.slice(0, sourceIndex),\n    ...arr.slice(sourceIndex + 1)];\n  const newArr = [...arrWoSource.slice(0, targetIndex),\n    arr[sourceIndex],\n    ...arrWoSource.slice(targetIndex)]\n    .filter(o => o != null) || [];\n  return newArr;\n};\n\nexport { reOrderArr, isEqId };\n","import moment from 'moment';\nimport _ from 'lodash';\nimport alt from 'src/stores/alt/alt';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport Utils from 'src/utilities/Functions';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport { reOrderArr } from 'src/utilities/DndControl';\nimport { UpdateSelectedObjs, OrderPreviewObjs } from 'src/utilities/ReportHelper';\n\nconst splSettings = [\n  { checked: true, text: 'diagram' },\n  { checked: true, text: 'collection' },\n  { checked: true, text: 'analyses' },\n  { checked: true, text: 'reaction description' },\n  { checked: true, text: 'literature' },\n];\n\nconst rxnSettings = [\n  { checked: true, text: 'diagram' },\n  { checked: true, text: 'material' },\n  { checked: true, text: 'description' },\n  { checked: true, text: 'purification' },\n  { checked: true, text: 'dangerous products' },\n  { checked: true, text: 'tlc' },\n  { checked: true, text: 'observation' },\n  { checked: true, text: 'analysis' },\n  { checked: true, text: 'literature' },\n  { checked: true, text: 'variations' },\n];\n\nconst siRxnSettings = [\n  { checked: true, text: 'Name' },\n  { checked: true, text: 'CAS' },\n  { checked: true, text: 'Formula' },\n  { checked: true, text: 'Smiles' },\n  { checked: true, text: 'InChI' },\n  { checked: true, text: 'Molecular Mass' },\n  { checked: true, text: 'Exact Mass' },\n  { checked: true, text: 'EA' },\n];\n\nconst configs = [\n  { checked: true, text: 'Page Break' },\n  { checked: true, text: 'Show all chemicals in schemes (unchecked to show products only)' },\n];\n\nclass ReportStore {\n  constructor() {\n    this.splSettings = splSettings;\n    this.rxnSettings = rxnSettings;\n    this.siRxnSettings = siRxnSettings;\n    this.configs = configs;\n    this.checkedAllSplSettings = true;\n    this.checkedAllRxnSettings = true;\n    this.checkedAllSiRxnSettings = true;\n    this.checkedAllConfigs = true;\n    this.processingReport = false;\n    this.defaultObjTags = { sampleIds: [], reactionIds: [] };\n    this.selectedObjTags = { sampleIds: [], reactionIds: [] };\n    this.selectedObjs = [];\n    this.previewObjs = [];\n    this.selMolSerials = [];\n    this.imgFormat = 'png';\n    this.archives = [];\n    this.fileDescription = '';\n    this.activeKey = 0;\n    this.processings = [];\n    this.template = {};\n    this.prdAtts = [];\n    this.attThumbNails = [];\n    this.fileName = '';\n    this.templateOpts = [];\n    this.dois = [];\n\n    this.bindListeners({\n      handleUpdateSplSettings: ReportActions.updateSplSettings,\n      handleToggleSplSettingsCheckAll: ReportActions.toggleSplSettingsCheckAll,\n      handleUpdateRxnSettings: ReportActions.updateRxnSettings,\n      handleToggleRxnSettingsCheckAll: ReportActions.toggleRxnSettingsCheckAll,\n      handleUpdateSiRxnSettings: ReportActions.updateSiRxnSettings,\n      handleToggleSiRxnSettingsCheckAll: ReportActions.toggleSiRxnSettingsCheckAll,\n      handleUpdateConfigs: ReportActions.updateConfigs,\n      handleToggleConfigsCheckAll: ReportActions.toggleConfigsCheckAll,\n      handleGenerateReport: ReportActions.generateReport,\n      handleUpdateCheckedTags: ReportActions.updateCheckedTags,\n      handleMove: ReportActions.move,\n      handleUpdateImgFormat: ReportActions.updateImgFormat,\n      handleGetArchives: ReportActions.getArchives,\n      handleUpdateFileName: ReportActions.updateFileName,\n      handleUpdateFileDescription: ReportActions.updateFileDescription,\n      handleUpdateActiveKey: ReportActions.updateActiveKey,\n      handleDownloadReport: ReportActions.downloadReport,\n      handleUpdateProcessQueue: ReportActions.updateProcessQueue,\n      handleUpdateTemplate: ReportActions.updateTemplate,\n      handleClone: ReportActions.clone,\n      handleDelete: ReportActions.delete,\n      handleRemove: ReportActions.remove,\n      handleReset: [ReportActions.reset, UserActions.fetchCurrentUser],\n      handleUpdMSVal: ReportActions.updMSVal,\n      handleUpdateThumbNails: ReportActions.updateThumbNails,\n      handleUpdateDefaultTags: ReportActions.updateDefaultTags,\n      handleLoadReview: ReportActions.loadReview,\n      handleFetchTemplate: ReportActions.fetchTemplates\n    });\n  }\n\n  handleUpdateImgFormat(value) {\n    this.setState({ imgFormat: value });\n  }\n\n  handleUpdateTemplate(value) {\n    const newSelectedObjs = this.orderObjsForTemplate(value);\n    // const molSerials = this.updMolSerials(newSelectedObjs, value);\n    const newPrdAtts = this.extractPrdAtts(newSelectedObjs);\n    this.setState({\n      template: value,\n      fileName: this.initFileName(value),\n      selectedObjs: newSelectedObjs,\n      prdAtts: newPrdAtts,\n    });\n  }\n\n  orderObjsForTemplate(template, oldObjs = null) {\n    const oldSelectedObjs = oldObjs || this.selectedObjs;\n    if (template !== 'standard') {\n      let frontObjs = [];\n      let rearObjs = [];\n      oldSelectedObjs.forEach((obj) => {\n        if (obj.type === 'reaction' && obj.role === 'gp') {\n          frontObjs = [...frontObjs, obj];\n        } else {\n          rearObjs = [...rearObjs, obj];\n        }\n      });\n      return [...frontObjs, ...rearObjs];\n    }\n    return oldSelectedObjs;\n  }\n\n  handleUpdateSplSettings(target) {\n    this.setState({\n      splSettings: this.splSettings.map((s) => {\n        if (s.text === target.text) {\n          return Object.assign({}, s, { checked: !target.checked });\n        }\n        return s;\n      }),\n    });\n  }\n\n  handleToggleSplSettingsCheckAll() {\n    const newCheckValue = !this.checkedAllSplSettings;\n    this.setState({\n      splSettings: this.splSettings.map(s => (\n        Object.assign({}, s, { checked: newCheckValue })\n      )),\n      checkedAllSplSettings: newCheckValue,\n    });\n  }\n\n  handleUpdateRxnSettings(target) {\n    this.setState({\n      rxnSettings: this.rxnSettings.map((s) => {\n        if (s.text === target.text) {\n          return Object.assign({}, s, { checked: !target.checked });\n        }\n        return s;\n      }),\n    });\n  }\n\n  handleToggleRxnSettingsCheckAll() {\n    const newCheckValue = !this.checkedAllRxnSettings;\n    this.setState({\n      rxnSettings: this.rxnSettings.map(s => (\n        Object.assign({}, s, { checked: newCheckValue })\n      )),\n      checkedAllRxnSettings: newCheckValue,\n    });\n  }\n\n  handleUpdateSiRxnSettings(target) {\n    this.setState({\n      siRxnSettings: this.siRxnSettings.map((s) => {\n        if (s.text === target.text) {\n          return Object.assign({}, s, { checked: !target.checked });\n        }\n        return s;\n      }),\n    });\n  }\n\n  handleToggleSiRxnSettingsCheckAll() {\n    const newCheckValue = !this.checkedAllSiRxnSettings;\n    this.setState({\n      siRxnSettings: this.siRxnSettings.map(s => (\n        Object.assign({}, s, { checked: newCheckValue })\n      )),\n      checkedAllSiRxnSettings: newCheckValue,\n    });\n  }\n\n  handleUpdateConfigs(target) {\n    this.setState({\n      configs: this.configs.map((s) => {\n        if (s.text === target.text) {\n          return Object.assign({}, s, { checked: !target.checked });\n        }\n        return s;\n      }),\n    });\n  }\n\n  handleToggleConfigsCheckAll() {\n    const newCheckValue = !this.checkedAllConfigs;\n    this.setState({\n      configs: this.configs.map(s => (\n        Object.assign({}, s, { checked: newCheckValue })\n      )),\n      checkedAllConfigs: newCheckValue,\n    });\n  }\n\n  handleGenerateReport(result) {\n    const newArchives = [result.report, ...this.archives];\n    this.setState({\n      processingReport: !this.processingReport,\n      activeKey: 5,\n      archives: newArchives,\n      processings: this.getProcessings(newArchives),\n      fileName: this.initFileName(this.template),\n    });\n    this.loadingIcon();\n  }\n\n  getProcessings(archives) {\n    let ids = [];\n    archives.forEach((a) => {\n      if (!a.downloadable) {\n        ids = [...ids, a.id];\n      }\n    });\n    return ids;\n  }\n\n  loadingIcon() {\n    setTimeout(() => this.setState({\n      processingReport: false,\n    }), 2500);\n  }\n\n  mergeMemoryFetchObjs(newObjs) {\n    const fetchSpls = newObjs.samples.filter(x => !x.in_browser_memory);\n    const fetchRxns = newObjs.reactions.filter(x => !x.in_browser_memory);\n    let memSpls = [];\n    let memRxns = [];\n    this.selectedObjs.forEach((x) => {\n      x.type === 'sample'\n        ? memSpls = [...memSpls, x]\n        : memRxns = [...memRxns, x]\n    });\n    return {\n      samples: [...fetchSpls, ...memSpls],\n      reactions: [...fetchRxns, ...memRxns],\n    };\n  }\n\n  handleUpdateCheckedTags({ newTags, newObjs }) {\n    if (!newTags && !newObjs) return null;\n    const targetObjs = this.mergeMemoryFetchObjs(newObjs);\n    const newSelectedObjs = UpdateSelectedObjs(\n      newTags,\n      targetObjs,\n      this.defaultObjTags,\n      this.selectedObjs,\n    );\n    const finalObjs = this.orderObjsForTemplate(this.template, newSelectedObjs);\n    const molSerials = this.updMolSerials(finalObjs);\n    const newPrdAtts = this.extractPrdAtts(finalObjs);\n    this.setState({\n      selectedObjTags: newTags,\n      selectedObjs: finalObjs,\n      prdAtts: newPrdAtts,\n      selMolSerials: molSerials,\n    });\n  }\n\n  isEqTypeId(a, b) {\n    return a.type === b.type && a.id === b.id;\n  }\n\n  handleMove({ sourceTag, targetTag }) {\n    const oldObjs = this.selectedObjs || [];\n    const newObjs = reOrderArr(sourceTag, targetTag, this.isEqTypeId, oldObjs);\n    const finalObjs = this.orderObjsForTemplate(this.template, newObjs);\n    // const molSerials = this.updMolSerials(finalObjs);\n    const newPrdAtts = this.extractPrdAtts(finalObjs);\n    this.setState({\n      selectedObjs: finalObjs,\n      prdAtts: newPrdAtts,\n    });\n  }\n\n  stdReportPrefix(initial) {\n    if (initial) return initial;\n    const { currentUser } = UserStore.getState();\n    if (!currentUser) return '';\n    return currentUser.initials || '';\n  }\n\n  initFileName(template, initial) {\n    let prefix = 'Supporting_Information_';\n    let datetime = moment().format('YYYY-MM-DD[H]HH[M]mm[S]ss');\n\n    switch (template.value) {\n      case 'standard':\n        prefix = this.stdReportPrefix(initial);\n        datetime = moment().format('YYYYMMDD');\n        break;\n      case 'spectrum':\n        prefix = 'Spectra_';\n        break;\n      case 'supporting_information':\n        prefix = 'Supporting_Information_';\n        break;\n      case 'supporting_information_std_rxn':\n        prefix = 'Supporting_Information_Standard_Reaction_';\n        break;\n      case 'rxn_list_xlsx':\n      case 'rxn_list_csv':\n      case 'rxn_list_html':\n        prefix = 'Reaction_List_';\n        break;\n      case 'doi_list_xlsx':\n        prefix = 'DOI_List_';\n        break;\n      default:\n        prefix = '';\n        break;\n    }\n\n    return prefix + datetime;\n  }\n\n  handleGetArchives({ archives }) {\n    this.setState({ archives });\n  }\n\n  handleUpdateFileName(value) {\n    const validValue = this.validName(value);\n    this.setState({ fileName: validValue });\n  }\n\n  validName(text) {\n    let name = text.substring(0, 40);\n    name = name.replace(/[^a-zA-Z0-9\\-_]/g, '');\n    return name;\n  }\n\n  handleUpdateFileDescription(value) {\n    this.setState({ fileDescription: value });\n  }\n\n  handleUpdateActiveKey(key) {\n    this.setState({ activeKey: key });\n  }\n\n  handleDownloadReport({ id, template }) {\n    let ext = 'docx';\n    switch (template) {\n      case 'rxn_list_xlsx':\n      case 'doi_list_xlsx':\n        ext = 'xlsx';\n        break;\n      case 'rxn_list_csv':\n        ext = 'csv';\n        break;\n      case 'rxn_list_html':\n        ext = 'html';\n        break;\n      case 'standard':\n      case 'spectrum':\n      case 'supporting_information':\n      case 'supporting_information_std_rxn':\n      default:\n        ext = 'docx';\n        break;\n    }\n\n    const target = `id=${JSON.stringify(id)}&ext=${ext}`;\n    this.markReaded(id);\n    Utils.downloadFile({\n      contents: `/api/v1/download_report/file?${target}`,\n    });\n  }\n\n  markReaded(id) {\n    const newArchives = this.archives.map((archive) => {\n      const a = Object.assign({}, archive);\n      if (archive.id === id) a.unread = false;\n      return a;\n    });\n    this.setState({ archives: newArchives });\n  }\n\n  handleUpdateProcessQueue(result) {\n    const updatedArchives = result.archives;\n    const updatedIds = updatedArchives.map(a => a.id);\n    const newProcessings = this.processings.filter(x => updatedIds.indexOf(x) === -1);\n    const newArchives = this.archives.map((a) => {\n      const index = updatedIds.indexOf(a.id);\n      return index === -1 ? a : updatedArchives[index];\n    });\n    this.setState({\n      archives: newArchives,\n      processings: newProcessings,\n    });\n  }\n\n  orderObjsForArchive(objs, order) {\n    return order.map(od => objs.find(obj => this.isEqTypeId(obj, od)))\n      .filter(r => r != null);\n  }\n\n  handleClone(result) {\n    const { objs, archive, defaultObjTags } = result;\n    const { template, file_description, img_format, configs } = archive;\n    const ss = archive.sample_settings;\n    const rs = archive.reaction_settings;\n    const siRs = archive.si_reaction_settings;\n    const newObjs = UpdateSelectedObjs(defaultObjTags, objs, defaultObjTags);\n    const orderedArObjs = this.orderObjsForArchive(newObjs, archive.objects);\n    const orderedArTpObjs = this.orderObjsForTemplate(template, orderedArObjs);\n    const molSerials = archive.mol_serials ||\n      this.updMolSerials(orderedArTpObjs);\n    const newPrdAtts = this.extractPrdAtts(orderedArTpObjs);\n\n    this.setState({\n      activeKey: 0,\n      template,\n      fileDescription: file_description,\n      fileName: this.initFileName(template),\n      imgFormat: img_format,\n      checkedAllSplSettings: false,\n      checkedAllRxnSettings: false,\n      checkedAllSiRxnSettings: false,\n      checkedAllConfigs: false,\n      splSettings:\n        [\n          { text: 'diagram', checked: ss.diagram },\n          { text: 'collection', checked: ss.collection },\n          { text: 'analyses', checked: ss.analyses },\n          { text: 'reaction description', checked: ss.reaction_description },\n          { text: 'literature', checked: ss.literature },\n        ],\n      rxnSettings:\n        [\n          { text: 'diagram', checked: rs.diagram },\n          { text: 'material', checked: rs.material },\n          { text: 'description', checked: rs.description },\n          { text: 'purification', checked: rs.purification },\n          { text: 'dangerous products', checked: this.boolOrUdfTrue(rs.dangerous_products) },\n          { text: 'tlc', checked: rs.tlc },\n          { text: 'observation', checked: rs.observation },\n          { text: 'analysis', checked: rs.analysis },\n          { text: 'literature', checked: rs.literature },\n          { text: 'variations', checked: rs.variations },\n        ],\n      siRxnSettings:\n        [\n          { checked: siRs.Name, text: 'Name' },\n          { checked: siRs.CAS, text: 'CAS' },\n          { checked: siRs.Formula, text: 'Formula' },\n          { checked: siRs.Smiles, text: 'Smiles' },\n          { checked: siRs.InChI, text: 'InChI' },\n          { checked: siRs['Molecular Mass'], text: 'Molecular Mass' },\n          { checked: siRs['Exact Mass'], text: 'Exact Mass' },\n          { checked: siRs.EA, text: 'EA' },\n        ],\n      configs:\n        [\n          { text: 'Page Break', checked: configs.page_break },\n          { text: 'Show all chemicals in schemes (unchecked to show products only)', checked: configs.page_break },\n        ],\n      defaultObjTags,\n      selectedObjTags: { sampleIds: [], reactionIds: [] },\n      selectedObjs: orderedArTpObjs,\n      prdAtts: newPrdAtts,\n      selMolSerials: molSerials,\n    });\n  }\n\n  boolOrUdfTrue(inp) {\n    if (inp === undefined) {\n      return true;\n    }\n    return inp;\n  }\n\n  handleRemove(target) {\n    let dTags = this.defaultObjTags;\n    let sTags = this.selectedObjTags;\n    const currentObjs = this.selectedObjs;\n    if (target.type === 'sample') {\n      const tmpSDTags = dTags.sampleIds.filter(e => e !== target.id);\n      const tmpSSTags = sTags.sampleIds.filter(e => e !== target.id);\n      dTags = {\n        sampleIds: [...tmpSDTags, ...tmpSSTags],\n        reactionIds: [...dTags.reactionIds, ...sTags.reactionIds]\n      };\n    } else if (target.type === 'reaction') {\n      const tmpRDTags = dTags.reactionIds.filter(e => e !== target.id);\n      const tmpRSTags = sTags.reactionIds.filter(e => e !== target.id);\n      dTags = {\n        sampleIds: [...dTags.sampleIds, ...sTags.sampleIds],\n        reactionIds: [...tmpRDTags, ...tmpRSTags]\n      };\n    }\n    dTags = { sampleIds: Array.from(new Set(dTags.sampleIds)), reactionIds: Array.from(new Set(dTags.reactionIds)) };\n    sTags = { sampleIds: [], reactionIds: [] };\n    const newObjs = UpdateSelectedObjs(sTags, currentObjs, dTags, currentObjs);\n    const finalObjs = this.orderObjsForTemplate(this.template, newObjs);\n    // const molSerials = this.updMolSerials(finalObjs);\n    const newPrdAtts = this.extractPrdAtts(finalObjs);\n\n    this.setState({\n      defaultObjTags: dTags,\n      selectedObjTags: sTags,\n      selectedObjs: finalObjs,\n      prdAtts: newPrdAtts,\n    });\n  }\n\n  handleReset(user) {\n    const { initials } = user || {};\n    this.setState({\n      activeKey: 0,\n      template: 'standard',\n      fileDescription: '',\n      fileName: this.initFileName('standard', initials),\n      imgFormat: 'png',\n      checkedAllSplSettings: true,\n      checkedAllRxnSettings: true,\n      checkedAllSiRxnSettings: true,\n      checkedAllConfigs: true,\n      splSettings,\n      rxnSettings,\n      siRxnSettings,\n      configs,\n      defaultObjTags: { sampleIds: [], reactionIds: [] },\n      selectedObjTags: { sampleIds: [], reactionIds: [] },\n      selectedObjs: [],\n      selMolSerials: [],\n      prdAtts: [],\n      attThumbNails: [],\n    });\n  }\n\n  handleDelete(deletedId) {\n    const newArchives = this.archives.map(a => (\n      a.id !== deletedId ? a : null\n    )).filter(r => r != null);\n\n    this.setState({ archives: newArchives });\n  }\n\n  updMolSerials(objs, template) {\n    const currentTemplate = template || this.template;\n    if (currentTemplate === 'standard') return [];\n    if (objs.length === 0) return this.selMolSerials;\n\n    return this.extractMolSerials(objs);\n  }\n\n  extractMolSerials(objs) {\n    const oldSelMolSerials = this.selMolSerials;\n    const newSelMols = this.msMolFromSelected(objs);\n\n    const newSelMolSerials = newSelMols.map((newMol) => {\n      const unchangedMolSerial = oldSelMolSerials.find(osm => (\n        osm && osm.mol.id === newMol.id\n      ));\n      return unchangedMolSerial || { mol: newMol, value: null };\n    });\n\n    if (newSelMolSerials.length === 0) return this.selMolSerials;\n\n    return newSelMolSerials;\n  }\n\n  nonGpRxns(objs) {\n    return objs.map((obj) => {\n      if (obj.type === 'reaction' && obj.role !== 'gp') {\n        return obj;\n      }\n      return null;\n    }).filter(r => r !== null);\n  }\n\n  msMolFromSelected(objs) {\n    const rxns = this.nonGpRxns(objs);\n    let msMols = [];\n\n    rxns.forEach((o) => {\n      const samples = [...o.starting_materials, ...o.reactants, ...o.products];\n      samples.forEach((s) => {\n        msMols = [...msMols, this.createMSMol(s.molecule)];\n      });\n    });\n    msMols = ArrayUtils.uniqSortById(msMols);\n    return msMols;\n  }\n\n  createMSMol(molecule) {\n    return {\n      id: molecule.id,\n      svgPath: molecule.svgPath,\n      sumFormula: molecule.sum_formular,\n      iupacName: molecule.iupac_name,\n    };\n  }\n\n  handleUpdMSVal({ moleculeId, value }) {\n    const newSelMolSerials = this.selMolSerials.map((ms) => {\n      if (ms.mol.id === moleculeId) {\n        return Object.assign({}, ms, { value });\n      }\n      return ms;\n    });\n    this.setState({ selMolSerials: newSelMolSerials });\n  }\n\n  extractPrdAtts(selectedObjs) {\n    if (selectedObjs.length > 0) {\n      const prdAtts = selectedObjs.map((obj) => {\n        if (obj.role !== 'gp') {\n          return this.extractPrdsAtts(obj);\n        }\n        return null;\n      }).filter(r => r !== null);\n      return [].concat(...prdAtts).filter(r => r.atts.length !== 0);\n    }\n    return [];\n  }\n\n  extractPrdsAtts(obj) {\n    if (obj.type === 'reaction') {\n      return obj.products.map((prd) => {\n        const prdId = prd.id;\n        const { iupac_name, sum_formular, id } = prd.molecule;\n        const atts = this.extractAtts(prd);\n        const showedName = prd.showedName();\n        return Object.assign(\n          {}, { atts, prdId, iupac_name, sum_formular, molId: id, showedName },\n        );\n      });\n    }\n    return null;\n  }\n\n  extractAtts(prd) {\n    const atts = prd.container.children[0].children.map((container) => {\n      const isReport = container.extended_metadata.report;\n      if (!isReport) return null;\n      const kind = container.extended_metadata.kind;\n      return container.children.map(analysis => (\n        analysis.attachments.map(att => (\n          Object.assign({}, att, { kind })\n        ))\n      ));\n    });\n    return _.flattenDeep(atts).filter(r => r !== null);\n  }\n\n  handleUpdateThumbNails(result) {\n    const thumbs = result.thumbnails;\n    this.setState({ attThumbNails: thumbs });\n  }\n\n  handleUpdateDefaultTags(defaultTags) {\n    this.setState({ defaultTags });\n    // TODO: update selectedObjs?\n  }\n\n  handleLoadReview({ objs }) {\n    if (!objs) return null;\n    const { samples, reactions } = objs;\n    let previewObjs = OrderPreviewObjs(\n      this.previewObjs, this.selectedObjs, [...samples, ...reactions],\n    );\n    previewObjs = this.orderObjsForTemplate(this.template, previewObjs);\n    const molSerials = this.updMolSerials(previewObjs);\n    const newPrdAtts = this.extractPrdAtts(previewObjs);\n    this.setState({\n      previewObjs,\n      prdAtts: newPrdAtts,\n      selMolSerials: molSerials,\n    });\n    return null;\n  }\n\n  handleFetchTemplate(result) {\n    const templates = result.templates;\n    this.setState({ templateOpts: templates, template: templates[0] });\n  }\n}\n\nexport default alt.createStore(ReportStore, 'ReportStore');\n","/* eslint-disable no-param-reassign */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport _ from 'lodash';\nimport FormatComponent from 'src/apps/mydb/elements/details/formats/FormatComponent';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport ReportStore from 'src/stores/alt/stores/ReportStore';\nimport { formatAnalysisContent } from 'src/utilities/ElementUtils';\n\nfunction extractAnalyses(listEls) {\n  const listObjs = [];\n  listEls.forEach((el) => {\n    let obj = {};\n    if (el.type === 'sample') {\n      obj = {\n        type: 'Sample',\n        id: el.id,\n        short_label: el.short_label,\n        analyses: _.cloneDeep(el.analyses),\n        children: []\n      };\n      listObjs.push(obj);\n    } else if (el.type === 'reaction') {\n      let rAna = [];\n      const ana = el.container.children\n        .filter(x => x.container_type === 'analyses')[0];\n      if (ana) {\n        rAna = ana.children.filter(x => x.container_type === 'analysis');\n      }\n\n      let samplesAna = [];\n      samplesAna = samplesAna.concat(extractAnalyses(el.starting_materials));\n      samplesAna = samplesAna.concat(extractAnalyses(el.products));\n\n      obj = {\n        type: 'Reaction',\n        id: el.id,\n        short_label: el.short_label,\n        analyses: _.cloneDeep(rAna),\n        children: samplesAna\n      };\n\n      listObjs.push(obj);\n    }\n  });\n\n  return listObjs;\n}\n\nexport default class FormatContainer extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      selectedObjTags: { sampleIds: [], reactionIds: [] },\n      defaultObjTags: { sampleIds: [], reactionIds: [] },\n      selectedObjs: [],\n      isSaved: true\n    };\n\n    this.onChangeUI = this.onChangeUI.bind(this);\n    this.onChangeRp = this.onChangeRp.bind(this);\n    this.onFormat = this.onFormat.bind(this);\n    this.onSave = this.onSave.bind(this);\n    this.onClose = this.onClose.bind(this);\n  }\n\n  componentDidMount() {\n    ReportStore.listen(this.onChangeRp);\n    UIStore.listen(this.onChangeUI);\n    this.onChangeUI(UIStore.getState());\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onChangeUI);\n    ReportStore.unlisten(this.onChangeRp);\n  }\n\n  onChangeUI(state) {\n    const { selectedObjTags, defaultObjTags } = this.state;\n    ReportActions.updateCheckedTags.defer({\n      uiState: state,\n      reportState: { selectedObjTags, defaultObjTags }\n    });\n  }\n\n  onChangeRp(state) {\n    const selectedObjs = extractAnalyses(state.selectedObjs);\n\n    this.setState({\n      selectedObjs,\n      selectedObjTags: state.selectedObjTags,\n      defaultObjTags: state.defaultObjTags\n    });\n  }\n\n  onFormat() {\n    let selectedObjs = _.cloneDeep(this.state.selectedObjs);\n\n    const formatAnalyses = (el) => {\n      (el.analyses || []).forEach((ana) => {\n        const { content } = ana.extended_metadata;\n        if (typeof content === 'string') {\n          ana.extended_metadata.content = JSON.parse(content);\n        }\n\n        ana.extended_metadata.content = formatAnalysisContent(ana);\n      });\n    };\n\n    selectedObjs = selectedObjs.map((obj) => {\n      formatAnalyses(obj);\n      if (obj.type === 'Reaction') formatAnalyses(obj.children);\n\n      return obj;\n    });\n\n    const isSaved = _.isEqual(selectedObjs, this.state.selectedObjs);\n\n    this.setState({ selectedObjs, isSaved });\n  }\n\n  onSave() {\n    const { selectedObjs } = this.state;\n    const flattenObjs = (objs) => {\n      const flattenedObjs = objs.reduce((acc, cur) => {\n        if (cur.children && cur.children.length > 0) {\n          acc = acc.concat(cur.analyses);\n          return acc.concat(flattenObjs(cur.children));\n        }\n\n        return acc.concat(cur.analyses);\n      }, []);\n\n      return flattenedObjs;\n    };\n\n    const objs = flattenObjs(selectedObjs);\n\n    objs.forEach(obj => ElementActions.updateContainerContent(obj));\n\n    this.setState({ selectedObjs, isSaved: true });\n  }\n\n  onClose() {\n    DetailActions.close(this.props.format, this.state.isSaved);\n  }\n\n  render() {\n    const { selectedObjs, isSaved } = this.state;\n\n    return (\n      <FormatComponent\n        list={selectedObjs}\n        onFormat={this.onFormat}\n        bsStyle={isSaved ? 'primary' : 'info'}\n        onSave={this.onSave}\n        onClose={this.onClose}\n      />\n    );\n  }\n}\n\nFormatContainer.propTypes = {\n  format: PropTypes.shape.isRequired\n};\n\n/* eslint-enable no-param-reassign */\n","import React, { Component } from 'react';\nimport { Button, ButtonGroup, Tooltip, Overlay, OverlayTrigger } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\n\nexport default class ConfirmClose extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showTooltip: false,\n    };\n\n    this.onClickButton = this.onClickButton.bind(this);\n    this.getTargetButton = this.getTargetButton.bind(this);\n  }\n\n  onClickButton(el) {\n    this.setState(\n      prevState => ({ ...prevState, showTooltip: !prevState.showTooltip }),\n      () => DetailActions.close(el, this.props.forceClose)\n    );\n  }\n\n  getTargetButton() {\n    return this.target;\n  }\n\n  render() {\n    const { el } = this.props;\n    const popover = (\n      <Tooltip placement=\"left\" className=\"in\" id=\"tooltip-bottom\">\n        Unsaved data will be lost.<br /> Close {el.type}?<br />\n        <ButtonGroup>\n          <Button\n            bsStyle=\"danger\"\n            bsSize=\"xsmall\"\n            onClick={DetailActions.confirmDelete}\n          >Yes\n          </Button>\n          <Button\n            bsStyle=\"warning\"\n            bsSize=\"xsmall\"\n            onClick={() => this.setState({ showTooltip: false })}\n          >No\n          </Button>\n        </ButtonGroup>\n      </Tooltip>\n    );\n    const sharedProps = {\n      containter: this,\n      target: this.getTargetButton,\n      show: this.state.showTooltip,\n      placement: 'bottom',\n    };\n\n    return (\n      <span>\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"closeSample\">Close {el.type}</Tooltip>}>\n          <Button\n            bsStyle=\"danger\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.onClickButton(el)}\n            ref={(button) => { this.target = button; }}\n          >\n            <i className=\"fa fa-times\" />\n          </Button>\n        </OverlayTrigger>\n        <Overlay\n          {...sharedProps}\n          rootClose\n          onHide={() => this.setState({ showTooltip: false })}\n        >\n          { popover }\n        </Overlay>\n      </span>\n    );\n  }\n}\n\nConfirmClose.propTypes = {\n  // el: PropTypes.oneOfType([\n  //   PropTypes.instanceOf(ResearchPlan),\n  //   PropTypes.instanceOf(Reaction),\n  //   PropTypes.instanceOf(Sample),\n  //   PropTypes.instanceOf(Wellplate),\n  //   PropTypes.instanceOf(Screen),\n  // ]).isRequired,\n  forceClose: PropTypes.bool\n};\n\nConfirmClose.defaultProps = {\n  forceClose: false\n};\n","/* eslint-disable class-methods-use-this */\nimport alt from 'src/stores/alt/alt';\nimport TextTemplatesFetcher from 'src/fetchers/TextTemplatesFetcher';\n\nclass TextTemplateActions {\n  fetchTextTemplates(elementName) {\n    return (dispatch) => {\n      TextTemplatesFetcher.fetchTextTemplates(elementName)\n        .then(result => dispatch(result))\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  fetchPredefinedTemplateNames() {\n    return (dispatch) => {\n      TextTemplatesFetcher.fetchPredefinedTemplateNames()\n        .then(result => dispatch(result))\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  fetchPredefinedTemplateByNames(names) {\n    return (dispatch) => {\n      TextTemplatesFetcher.fetchPredefinedTemplateByNames(names)\n        .then(result => dispatch(result))\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  updateTextTemplates(elName, templates) {\n    return (dispatch) => {\n      TextTemplatesFetcher.updateTextTemplates(elName, templates)\n        .then((result) => {\n          if (result) {\n            dispatch({ [elName]: templates });\n          }\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n}\n\nexport default alt.createActions(TextTemplateActions);\n","import { Map, OrderedSet, fromJS } from 'immutable';\n\nimport alt from 'src/stores/alt/alt';\n\nimport TextTemplateActions from 'src/stores/alt/actions/TextTemplateActions';\n\nclass TextTemplateStore {\n  constructor() {\n    this.state = {\n      sample: Map(),\n      reaction: Map(),\n      screen: Map(),\n      wellplate: Map(),\n      researchPlan: Map(),\n      reactionDescription: Map(),\n      predefinedTemplateNames: OrderedSet(),\n      fetchedPredefinedTemplates: Map()\n    };\n\n    this.bindListeners({\n      handleFetchTextTemplates: TextTemplateActions.fetchTextTemplates,\n      handleFetchPredefinedTemplateNames: TextTemplateActions.fetchPredefinedTemplateNames,\n      handleUpdateTextTemplates: TextTemplateActions.updateTextTemplates,\n      handleFetchTemplateByNames: TextTemplateActions.fetchPredefinedTemplateByNames,\n    });\n  }\n\n  handleFetchTextTemplates(templates) {\n    Object.keys(templates).forEach((templateType) => {\n      const templateVal = templates[templateType];\n      this.state[templateType] = fromJS(templateVal);\n    });\n  }\n\n  handleUpdateTextTemplates(templates) {\n    Object.keys(templates).forEach((templateType) => {\n      const templateVal = templates[templateType];\n      this.state[templateType] = fromJS(templateVal);\n    });\n  }\n\n  handleFetchPredefinedTemplateNames(names) {\n    const { predefinedTemplateNames } = this.state;\n    this.state.predefinedTemplateNames = predefinedTemplateNames.concat(OrderedSet(names));\n  }\n\n  handleFetchTemplateByNames(templates) {\n    let fetchedTemplates = this.state.fetchedPredefinedTemplates;\n    templates.forEach((template) => {\n      fetchedTemplates = fetchedTemplates.set(template.name, fromJS(template));\n    });\n\n    this.state.fetchedPredefinedTemplates = fetchedTemplates;\n  }\n}\n\nexport default alt.createStore(TextTemplateStore, 'TextTemplateStore');\n","export const solventOptions = [{\n  label: 'Acetic acid',\n  value: 'Acetic acid'\n}, {\n  label: 'Acetone',\n  value: 'Acetone'\n}, {\n  label: 'Acetonitrile',\n  value: 'Acetonitrile'\n}, {\n  label: 'Benzene',\n  value: 'Benzene'\n}, {\n  label: 'Butanol',\n  value: 'Butanol'\n}, {\n  label: 'Carbon tetrachloride (CCl4)',\n  value: 'Carbon tetrachloride'\n}, {\n  label: 'Chloroform',\n  value: 'Chloroform'\n}, {\n  label: 'Cyclohexane',\n  value: 'Cyclohexane'\n}, {\n  label: 'Diethyl ether',\n  value: 'Diethyl ether'\n}, {\n  label: 'Dimethyl sulfoxide (DMSO)',\n  value: 'Dimethyl sulfoxide'\n}, {\n  label: 'Dimethylformamide (DMF)',\n  value: 'Dimethylformamide'\n}, {\n  label: '1,4-Dioxane',\n  value: '1,4-Dioxane'\n}, {\n  label: 'Ethanol',\n  value: 'Ethanol'\n}, {\n  label: 'Ethyl acetate',\n  value: 'Ethyl acetate'\n}, {\n  label: 'Isopropanol',\n  value: 'Isopropanol'\n}, {\n  label: 'Methanol',\n  value: 'Methanol'\n}, {\n  label: 'Dichloromethane (DCM - Methylene chloride)',\n  value: 'Methylene Chloride'\n}, {\n  label: 'Methyl tert-butyl ether (MTBE)',\n  value: 'Methyl tert-butyl ether'\n}, {\n  label: 'n-Hexane',\n  value: 'n-Hexane'\n}, {\n  label: 'N-Methyl-2-pyrrolidone (NMP)',\n  value: 'N-Methyl-2-pyrrolidone'\n}, {\n  label: 'Pentane',\n  value: 'Pentane'\n}, {\n  label: 'Pyridine',\n  value: 'Pyridine'\n}, {\n  label: 'Tetrahydrofuran (THF)',\n  value: 'Tetrahydrofuran'\n}, {\n  label: 'Toluene',\n  value: 'Toluene'\n}, {\n  label: 'Water',\n  value: 'Water'\n}, {\n  label: 'CDCl3',\n  value: 'CDCl3'\n}, {\n  label: 'MeOD-d4',\n  value: 'MeOD-d4'\n}, {\n  label: 'C6D6',\n  value: 'C6D6'\n}, {\n  label: 'D2O',\n  value: 'D2O'\n}];\n\nexport const defaultMultiSolventsSmilesOptions = [{\n  label: 'Acetic acid',\n  value: {\n    external_label: 'Acetic acid',\n    smiles: 'CC(O)=O',\n    density: 1.05\n  }\n}, {\n  label: 'Acetone',\n  value: {\n    external_label: 'Acetone',\n    smiles: 'CC(C)=O',\n    density: 0.79\n  }\n}, {\n  label: 'Acetonitrile',\n  value: {\n    external_label: 'Acetonitrile',\n    smiles: 'CC#N',\n    density: 0.78\n  }\n}, {\n  label: 'Argon',\n  value: {\n    external_label: 'Ar',\n    smiles: '[Ar]',\n    density: 0.001633\n  }\n}, {\n  label: 'Benzene',\n  value: {\n    external_label: 'Benzene',\n    smiles: 'C1=CC=CC=C1',\n    density: 0.88\n  }\n}, {\n  label: '2-Butanone',\n  value: {\n    external_label: '2-Butanone',\n    smiles: 'CCC(=O)C',\n    density: 0.805\n  }\n}, {\n  label: 'n-Butanol',\n  value: {\n    external_label: 'n-Butanol',\n    smiles: 'CCCCO',\n    density: 0.81\n  }\n}, {\n  label: 'Carbon tetrachloride (CCl4)',\n  value: {\n    external_label: 'CCl4',\n    smiles: 'ClC(Cl)(Cl)Cl',\n    density: 1.594\n  }\n}, {\n  label: 'Chloroform',\n  value: {\n    external_label: 'Chloroform',\n    smiles: 'ClC(Cl)Cl',\n    density: 1.48\n  }\n}, {\n  label: 'Cyclohexane',\n  value: {\n    external_label: 'Cyclohexane',\n    smiles: 'C1CCCCC1',\n    density: 0.78\n  }\n}, {\n  label: 'Diethyl ether',\n  value: {\n    external_label: 'Diethyl ether',\n    smiles: 'CCOCC',\n    density: 0.71\n  }\n}, {\n  label: 'Dimethyl sulfoxide (DMSO)',\n  value: {\n    external_label: 'DMSO',\n    smiles: 'CS(C)=O',\n    density: 1.10\n  }\n}, {\n  label: 'Dimethylformamide (DMF)',\n  value: {\n    external_label: 'DMF',\n    smiles: 'CN(C)C=O',\n    density: 0.95\n  }\n}, {\n  label: '1,4-Dioxane',\n  value: {\n    external_label: '1,4-Dioxane',\n    smiles: 'C1COCCO1',\n    density: 1.03\n  }\n}, {\n  label: 'Ethanol',\n  value: {\n    external_label: 'Ethanol',\n    smiles: 'OCC',\n    density: 0.789\n  }\n}, {\n  label: 'Ethyl acetate',\n  value: {\n    external_label: 'Ethyl acetate',\n    smiles: 'CC(OCC)=O',\n    density: 0.894\n  }\n}, {\n  label: 'Isopropanol',\n  value: {\n    external_label: 'Isopropanol',\n    smiles: 'CC(O)C',\n    density: 0.78\n  }\n}, {\n  label: 'Methanol',\n  value: {\n    external_label: 'Methanol',\n    smiles: 'CO',\n    density: 0.79\n  }\n}, {\n  label: 'Dichloromethane (DCM - Methylene chloride)',\n  value: {\n    external_label: 'Dichloromethane',\n    smiles: 'ClCCl',\n    density: 1.33\n  }\n}, {\n  label: 'Methyl tert-butyl ether (MTBE)',\n  value: {\n    external_label: 'MTBE',\n    smiles: 'O(C(C)(C)C)C',\n    density: 0.74\n  }\n}, {\n  label: 'N2',\n  value: {\n    external_label: 'N2',\n    smiles: 'N#N',\n    density: 0.00125\n  }\n}, {\n  label: 'n-Hexane',\n  value: {\n    external_label: 'n-Hexane',\n    smiles: 'CCCCCC',\n    density: 0.66\n  }\n}, {\n  label: 'N-Methyl-2-pyrrolidone (NMP)',\n  value: {\n    external_label: 'NMP',\n    smiles: 'O=C1CCCN1C',\n    density: 1.03\n  }\n}, {\n  label: 'Pentane',\n  value: {\n    external_label: 'Pentane',\n    smiles: 'CCCCC',\n    density: 0.63\n  }\n}, {\n  label: 'Pyridine',\n  value: {\n    external_label: 'Pyridine',\n    smiles: 'C1=CC=NC=C1',\n    density: 0.98\n  }\n}, {\n  label: 'Tetramethylethylenediamine (TMEDA)',\n  value: {\n    external_label: 'TMEDA',\n    smiles: 'CN(C)CCN(C)C',\n    density: 0.775\n  }\n}, {\n  label: 'Tetrahydrofuran (THF)',\n  value: {\n    external_label: 'THF',\n    smiles: 'C1CCCO1',\n    density: 0.889\n  }\n}, {\n  label: 'Toluene',\n  value: {\n    external_label: 'Toluene',\n    smiles: 'CC1=CC=CC=C1',\n    density: 0.87\n  }\n}, {\n  label: 'Water',\n  value: {\n    external_label: 'Water',\n    smiles: '[H]O[H]',\n    density: 1.00\n  }\n}, {\n  label: 'CDCl3',\n  value: {\n    external_label: 'CDCl3',\n    smiles: '[2H]C(Cl)(Cl)Cl',\n    density: 1.500\n  }\n}, {\n  label: 'MeOD-d4',\n  value: {\n    external_label: 'MeOD-d4',\n    smiles: '[2H]OC([2H])([2H])[2H]',\n    density: 0.888\n  }\n}, {\n  label: 'C6D6',\n  value: {\n    external_label: 'C6D6',\n    smiles: '[2H]c1c([2H])c([2H])c([2H])c([2H])c1[2H]',\n    density: 0.950\n  }\n}, {\n  label: 'D2O',\n  value: {\n    external_label: 'D2O',\n    smiles: '[2H]O[2H]',\n    density: 1.107\n  }\n}, {\n  label: 'Cyclopentane',\n  value: {\n    external_label: 'Cyclopentane',\n    smiles: 'C1CCCC1',\n    density: 0.74\n  }\n}, {\n  label: 'Nitromethane',\n  value: {\n    external_label: 'Nitromethane',\n    smiles: 'C[N+]([O-])=O',\n    density: 1.14\n  }\n}, {\n  label: 'Formic acid',\n  value: {\n    external_label: 'Formic acid',\n    smiles: 'O=CO',\n    density: 1.22\n  }\n}, {\n  label: 'n-octanol',\n  value: {\n    external_label: 'n-octanol',\n    smiles: 'CCCCCCCCO',\n    density: 0.817\n  }\n}, {\n  label: 'n-propanol',\n  value: {\n    external_label: 'n-propanol',\n    smiles: 'CCCO',\n    density: 0.8\n  }\n}, {\n  label: 'Dimethylacetamide',\n  value: {\n    external_label: 'Dimethylacetamide',\n    smiles: 'CC(N(C)C)=O',\n    density: 0.94\n  }\n}, {\n  label: '1,2-xylene',\n  value: {\n    external_label: '1,2-xylene',\n    smiles: 'CC1=CC=CC=C1C',\n    density: 0.8755\n  }\n}, {\n  label: '1,3-xylene',\n  value: {\n    external_label: '1,3-xylene',\n    smiles: 'CC1=CC=CC(C)=C1',\n    density: 0.8598\n  }\n}, {\n  label: '1,4-xylene',\n  value: {\n    external_label: '1,4-xylene',\n    smiles: 'CC1=CC=C(C)C=C1',\n    density: 0.8565\n  }\n}, {\n  label: 'Sulfolane',\n  value: {\n    external_label: 'Sulfolane',\n    smiles: 'O=S1(CCCC1)=O',\n    density: 1.261\n  }\n}, {\n  label: '2-methoxy ethanol',\n  value: {\n    external_label: '2-methoxy ethanol',\n    smiles: 'OCCOC',\n    density: 0.97\n  }\n}, {\n  label: 'Carbon tribromide',\n  value: {\n    external_label: 'Carbon tribromide',\n    smiles: 'BrC(Br)([H])Br',\n    density: 2.89\n  }\n}, {\n  label: 'Cyclopentylmethylether',\n  value: {\n    external_label: 'Cyclopentylmethylether',\n    smiles: 'COC1CCCC1',\n    density: 0.86\n  }\n}, {\n  label: '1,2-Dichloroethane',\n  value: {\n    external_label: '1,2-Dichloroethane',\n    smiles: 'ClCCCl',\n    density: 1.25\n  }\n}\n];\n\nexport const purificationOptions = [{\n  label: 'Flash-Chromatography',\n  value: 'Flash-Chromatography'\n}, {\n  label: 'TLC',\n  value: 'TLC'\n}, {\n  label: 'HPLC',\n  value: 'HPLC'\n}, {\n  label: 'Extraction',\n  value: 'Extraction'\n}, {\n  label: 'Distillation',\n  value: 'Distillation'\n}, {\n  label: 'Dialysis',\n  value: 'Dialysis'\n}, {\n  label: 'Filtration',\n  value: 'Filtration'\n}, {\n  label: 'Sublimation',\n  value: 'Sublimation'\n}, {\n  label: 'Crystallisation',\n  value: 'Crystallisation'\n}, {\n  label: 'Recrystallisation',\n  value: 'Recrystallisation'\n}, {\n  label: 'Precipitation',\n  value: 'Precipitation'\n}];\n\nexport const statusOptions = [{\n  label: 'Planned',\n  value: 'Planned',\n}, {\n  label: 'Running',\n  value: 'Running',\n}, {\n  label: 'Done',\n  value: 'Done',\n}, {\n  label: 'Analyses Pending',\n  value: 'Analyses Pending',\n}, {\n  label: 'Successful',\n  value: 'Successful',\n}, {\n  label: 'Not Successful',\n  value: 'Not Successful',\n}];\n\nexport const dangerousProductsOptions = [{\n  label: 'Causes cancer',\n  value: 'Causes cancer'\n}, {\n  label: 'Mutagenic',\n  value: 'Mutagenic'\n}, {\n  label: 'Damage to environment',\n  value: 'Damage to environment'\n}, {\n  label: 'Explosive (Class 1)',\n  value: 'Explosive (Class 1)'\n}, {\n  label: 'Pressure (Class 2)',\n  value: 'Pressure (Class 2)'\n}, {\n  label: 'Flammable liquid (Class 3)',\n  value: 'Flammable liquid (Class 3)'\n}, {\n  label: 'Flammable solid (Class 4.1)',\n  value: 'Flammable solid (Class 4.1)'\n}, {\n  label: 'Self-flammable solid (Class 4.2)',\n  value: 'Self-flammable solid (Class 4.2)'\n}, {\n  label: 'Flammable/contact with water (Class 4.3)',\n  value: 'Flammable/contact with water (Class 4.3)'\n}, {\n  label: 'Oxidizing (Class 5.1)',\n  value: 'Oxidizing (Class 5.1)'\n}, {\n  label: 'Peroxides (Class 5.2)',\n  value: 'Peroxides (Class 5.2)'\n}, {\n  label: 'Toxic and very toxic (Class 6.1)',\n  value: 'Toxic and very toxic (Class 6.1)'\n}, {\n  label: 'Infective (Class 6.2)',\n  value: 'Infective (Class 6.2)'\n}, {\n  label: 'Radioactive (Class 7)',\n  value: 'Radioactive (Class 7)'\n}, {\n  label: 'Corrosive (Class 8)',\n  value: 'Corrosive (Class 8)'\n}, {\n  label: 'Diverse (Class 9)',\n  value: 'Diverse (Class 9)'\n}];\n\nexport const confirmOptions = [{\n  label: 'Confirmed',\n  value: 'Confirmed'\n}, {\n  label: 'Unconfirmed',\n  value: 'Unconfirmed'\n}];\n\nexport const kindOptions = [{\n  label: \"1H NMR\",\n  value: \"1H NMR\"\n},{\n  label: \"13C NMR\",\n  value: \"13C NMR\"\n},{\n  label: \"15N NMR\",\n  value: \"15N NMR\"\n},{\n  label: \"NMR\",\n  value: \"NMR\"\n},{\n  label: \"Mass\",\n  value: \"Mass\"\n},{\n  label: \"IR\",\n  value: \"IR\"\n},{\n  label: 'Raman',\n  value: 'Raman'\n},{\n  label: 'UV-VIS',\n  value: 'UV-VIS'\n},{\n  label: \"EA\",\n  value: \"EA\"\n},{\n  label: \"GCMS\",\n  value: \"GCMS\"\n},{\n  label: \"HPLC\",\n  value: \"HPLC\"\n},{\n  label: \"TLC\",\n  value: \"TLC\"\n},{\n  label: \"Crystal-Structure\",\n  value: \"Crystal-Structure\"\n},{\n  label: \"Others\",\n  value: \"Others\"\n}];\n  // { label: 'no method', value: 'no_method'},\n  // { label: 'Others', value: 'others' },\n  //\n  // { label: '1H NMR CDCl3 250', value: 'NMR/1H/CDCl3/250'},\n  // { label: '1H NMR CDCl3 300', value: 'NMR/1H/CDCl3/300'},\n  // { label: '1H NMR CDCl3 400', value: 'NMR/1H/CDCl3/400'},\n  // { label: '1H NMR CDCl3 500', value: 'NMR/1H/CDCl3/500'},\n  //\n  //\n  // { label: '1H NMR C6D6 250', value:  'NMR/1H/C6D6/250'},\n  // { label: '1H NMR C6D6 300', value: 'NMR/1H/C6D6/300'},\n  // { label: '1H NMR C6D6 400', value: 'NMR/1H/C6D6/400'},\n  //\n  //\n  // { label: '1H NMR MeOD 250', value:  'NMR/1H/MeOD/250'},\n  // { label: '1H NMR MeOD 300', value: 'NMR/1H/MeOD/300'},\n  // { label: '1H NMR MeOD 400', value: 'NMR/1H/MeOD/400'},\n  //\n  //\n  // { label: '1H NMR DMSO 250', value:  'NMR/1H/DMSO/250'},\n  // { label: '1H NMR DMSO 300', value: 'NMR/1H/DMSO/300'},\n  // { label: '1H NMR DMSO 400', value: 'NMR/1H/DMSO/400'},\n  //\n  //\n  // { label: '13C NMR CDCl3 62.5', value: 'NMR/13C/CDCl3/62.5'},\n  // { label: '13C NMR CDCl3 75', value:  'NMR/13C/CDCl3/75'},\n  // { label: '13C NMR CDCl3 100', value: 'NMR/13C/CDCl3/100'},\n  // { label: '13C NMR CDCl3 125', value: 'NMR/13C/CDCl3/125'},\n  //\n  //\n  // { label: '13C NMR C6D6 62.5', value: 'NMR/13C/C6D6/62.5'},\n  // { label: '13C NMR C6D6 75', value:   'NMR/13C/C6D6/75'},\n  // { label: '13C NMR C6D6 100', value:  'NMR/13C/C6D6/100'},\n  //\n  // { label: '13C NMR MeOD 62.5', value: 'NMR/13C/MeOD/62.5'},\n  // { label: '13C NMR MeOD 75', value:   'NMR/13C/MeOD/75'},\n  // { label: '13C NMR MeOD 100', value:  'NMR/13C/MeOD/100'},\n  //\n  //\n  // { label: '13C NMR DMSO 62.5', value: 'NMR/13C/DMSO/62.5'},\n  // { label: '13C NMR DMSO 75', value: 'NMR/13C/DMSO/75'},\n  // { label: '13C NMR DMSO 100', value: 'NMR/13C/DMSO/100'},\n  //\n  //\n  // { label: '19F NMR acetone 400', value: 'NMR/19F/acetone/400'},\n  // { label: '19F NMR CDCl3 367', value: 'NMR/19F/CDCl3/367'},\n  // { label: '19F NMR MeOD 367', value: 'NMR/19F/MeOD/367'},\n  // { label: '19F NMR C6D6 367', value: 'NMR/19F/C6D6/367'},\n  //\n  //\n  // { label: 'H-H COSY NMR CDCl3', value: 'NMR/HHCOSY/CDCl3'},\n  // { label: 'H-H COSY NMR DMSO', value: 'NMR/HHCOSY/DMSO'},\n  // { label: 'H-H COSY NMR methanol', value: 'NMR/HHCOSY/methanol'},\n  //\n  // { label: 'H-C COSY NMR CDCl3', value: 'NMR/HCCOSY/CDCl3'},\n  // { label: 'H-C COSY NMR DMSO', value: 'NMR/HCCOSY/DMSO'},\n  // { label: 'H-C COSY NMR methanol', value: 'NMR/HCCOSY/methanol'},\n  //\n  // { label: 'DEPT 135', value: 'DEPT/135'},\n  // { label: 'DEPT 90', value: 'DEPT/90'},\n  // { label: 'DEPT 45', value: 'DEPT/45'},\n  //\n  // { label: 'IR', value: 'IR'},\n  // { label: 'Mass EI', value: 'Mass/EI'},\n  // { label: 'Mass GCMS', value: 'Mass/GCMS'},\n  // { label: 'Raman', value: 'Raman'},\n  // { label: 'UV-VIS', value: 'UV-VIS'},\n  // { label: 'TLC', value: 'TLC'},\n  // { label: 'Xray', value: 'Xray'},\n  // { label: 'Additional material', value: 'additional'},\n// ];\n\nexport const rolesOptions = [{\n  label: 'General Procedure',\n  value: 'gp',\n  icon: 'fa-home',\n  bsStyle: 'c-bs-primary',\n}, {\n  label: 'Parts of GP',\n  value: 'parts',\n  icon: 'fa-bookmark',\n  bsStyle: 'c-bs-success',\n}, {\n  label: 'Single',\n  value: 'single',\n  icon: 'fa-asterisk',\n  bsStyle: 'c-bs-danger',\n}];\n\nexport const conditionsOptions = [{\n  label: 'UV',\n  value: 'UV'\n}, {\n  label: 'microwave',\n  value: 'microwave'\n}, {\n  label: 'ultrasound',\n  value: 'ultrasound'\n}, {\n  label: 'visible light',\n  value: 'visible light'\n}, {\n  label: 'pH = value',\n  value: 'pH = value'\n}, {\n  label: 'pH < value',\n  value: 'pH &lt; value' /* &lt; renders < in HTML */\n}, {\n  label: 'pH > value',\n  value: 'pH &gt; value' /* &gt; renders > in HTML */\n}];\n\nexport const temperatureOptions = [\n  { value: '°C', label: '°C' },\n  { value: '°F', label: '°F' },\n  { value: 'K', label: 'K' }\n];\n\nexport const durationOptions = [\n  { value: 'Hour(s)', label: 'Hour(s)' },\n  { value: 'Minute(s)', label: 'Minute(s)' },\n  { value: 'Second(s)', label: 'Second(s)' },\n  { value: 'Week(s)', label: 'Week(s)' },\n  { value: 'Day(s)', label: 'Day(s)' },\n];\n\nexport const stereoAbsOptions = [\n  { label: 'any', value: 'any' },\n  { label: 'rac', value: 'rac' },\n  { label: 'meso', value: 'meso' },\n  { label: 'delta', value: 'delta' },\n  { label: 'lambda', value: 'lambda' },\n  { label: '(S)', value: '(S)' },\n  { label: '(R)', value: '(R)' },\n  { label: '(Sp)', value: '(Sp)' },\n  { label: '(Rp)', value: '(Rp)' },\n  { label: '(Sa)', value: '(Sa)' },\n  { label: '(Ra)', value: '(Ra)' },\n];\n\nexport const stereoRelOptions = [\n  { label: 'any', value: 'any' },\n  { label: 'syn', value: 'syn' },\n  { label: 'anti', value: 'anti' },\n  { label: 'p-geminal', value: 'p-geminal' },\n  { label: 'p-ortho', value: 'p-ortho' },\n  { label: 'p-meta', value: 'p-meta' },\n  { label: 'p-para', value: 'p-para' },\n  { label: 'cis', value: 'cis' },\n  { label: 'trans', value: 'trans' },\n  { label: 'fac', value: 'fac' },\n  { label: 'mer', value: 'mer' },\n];\n\nexport const chemicalStatusOptions = [\n  { label: 'Available', value: 'Available' },\n  { label: 'Out of stock', value: 'Out of stock' },\n  { label: 'To be ordered', value: 'To be ordered' },\n  { label: 'Ordered', value: 'Ordered' },\n];\n\nexport const amountSearchOptions = [\n  { label: 'g', value: 'g' },\n  { label: 'l', value: 'l' },\n  { label: 'mol', value: 'mol' },\n];\n","/* eslint-disable react/require-default-props */\n/* eslint-disable react/sort-comp */\n/* eslint-disable react/forbid-prop-types */\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\n\nimport Quill from 'quill';\n\nfunction postpone(fn) {\n  Promise.resolve().then(fn);\n}\n\nconst isDelta = value => value && value.ops;\n\nconst isEqualValue = (value, otherValue) => {\n  if (isDelta(value) && isDelta(otherValue)) {\n    return isEqual(value.ops, otherValue.ops);\n  }\n\n  return isEqual(value, otherValue);\n};\n\nconst makeUnprivilegedEditor = (editor) => {\n  const e = editor;\n\n  return {\n    getHTML: () => e.root.innerHTML,\n    getLength: e.getLength.bind(e),\n    getText: e.getText.bind(e),\n    getContents: e.getContents.bind(e),\n    getSelection: e.getSelection.bind(e),\n    getBounds: e.getBounds.bind(e),\n  };\n};\n\nconst setEditorTabIndex = (editor, tabIndex) => {\n  const check = (\n    editor == null || editor.scroll == null || editor.scroll.domNode == null\n  );\n  if (check) return;\n\n  // eslint-disable-next-line no-param-reassign\n  editor.scroll.domNode.tabIndex = tabIndex;\n};\n\nexport default class ReactQuill extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      generation: 0,\n    };\n\n    this.dirtyProps = ['modules', 'formats', 'bounds', 'theme', 'children'];\n    this.cleanProps = [\n      'id', 'className', 'style', 'placeholder', 'tabIndex',\n      'onChange', 'onChangeSelection', 'onFocus', 'onBlur',\n      'onKeyPress', 'onKeyDown', 'onKeyUp'\n    ];\n    this.allProps = this.dirtyProps.concat(this.cleanProps);\n\n    this.isControlled = this.isControlled.bind(this);\n\n    this.value = this.isControlled() ? props.value : props.defaultValue;\n\n    this.shouldComponentRegenerate = this.shouldComponentRegenerate.bind(this);\n    this.validateProps = this.validateProps.bind(this);\n\n    this.getEditor = this.getEditor.bind(this);\n    this.getEditingArea = this.getEditingArea.bind(this);\n    this.getEditorConfig = this.getEditorConfig.bind(this);\n    this.getEditorContents = this.getEditorContents.bind(this);\n    this.getEditorSelection = this.getEditorSelection.bind(this);\n\n    this.setEditorContents = this.setEditorContents.bind(this);\n    this.setEditorReadOnly = this.setEditorReadOnly.bind(this);\n    this.setEditorSelection = this.setEditorSelection.bind(this);\n\n    this.createEditor = this.createEditor.bind(this);\n    this.destroyEditor = this.destroyEditor.bind(this);\n    this.hookEditor = this.hookEditor.bind(this);\n    this.instantiateEditor = this.instantiateEditor.bind(this);\n    this.unhookEditor = this.unhookEditor.bind(this);\n\n    this.renderEditingArea = this.renderEditingArea.bind(this);\n\n    this.focus = this.focus.bind(this);\n    this.blur = this.blur.bind(this);\n\n    this.onEditorChange = this.onEditorChange.bind(this);\n    this.onEditorChangeText = this.onEditorChangeText.bind(this);\n    this.onEditorChangeSelection = this.onEditorChangeSelection.bind(this);\n  }\n\n  componentDidMount() {\n    this.instantiateEditor();\n    this.setEditorContents(this.editor, this.getEditorContents());\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    this.validateProps(nextProps);\n\n    // If the editor hasn't been instantiated yet, or the component has been\n    // regenerated, we already know we should update.\n    if (!this.editor || this.state.generation !== nextState.generation) {\n      return true;\n    }\n\n    // Handle value changes in-place\n    if ('value' in nextProps) {\n      const prevContents = this.getEditorContents();\n      const nextContents = nextProps.value ? nextProps.value : '';\n\n      // NOTE: Seeing that Quill is missing a way to prevent edits, we have to\n      //       settle for a hybrid between controlled and uncontrolled mode. We\n      //       can't prevent the change, but we'll still override content\n      //       whenever `value` differs from current state.\n      // NOTE: Comparing an HTML string and a Quill Delta will always trigger a\n      //       change, regardless of whether they represent the same document.\n      if (!isEqualValue(nextContents, prevContents)) {\n        this.setEditorContents(this.editor, nextContents);\n      }\n    }\n\n    // Handle read-only changes in-place\n    if (nextProps.readOnly !== this.props.readOnly && nextProps.readOnly !== null) {\n      this.setEditorReadOnly(!nextProps.readOnly);\n    }\n\n    return Object.keys(this.props).some(propKey => (\n      !isEqual(nextProps[propKey], this.props[propKey])\n    ));\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    // If we're changing one of the `dirtyProps`, the entire Quill Editor needs\n    // to be re-instantiated. Regenerating the editor will cause the whole tree,\n    // including the container, to be cleaned up and re-rendered from scratch.\n    // Store the contents so they can be restored later.\n    if (this.editor && this.shouldComponentRegenerate(prevProps)) {\n      const delta = this.editor.getContents();\n      const selection = this.editor.getSelection();\n      this.regenerationSnapshot = { delta, selection };\n\n      // eslint-disable-next-line react/no-did-update-set-state\n      this.setState({ generation: this.state.generation + 1 });\n      this.destroyEditor();\n    }\n\n    // The component has been regenerated, so it must be re-instantiated, and\n    // its content must be restored to the previous values from the snapshot.\n    if (this.state.generation !== prevState.generation && this.regenerationSnapshot) {\n      const { delta, selection } = this.regenerationSnapshot;\n      delete this.regenerationSnapshot;\n\n      this.instantiateEditor();\n\n      const { editor } = this;\n      if (editor) {\n        editor.setContents(delta);\n        postpone(() => this.setEditorSelection(editor, selection));\n      }\n    }\n  }\n\n  componentWillUnmount() {\n    this.destroyEditor();\n  }\n\n  validateProps(props) {\n    let error;\n    if (this.lastDeltaChangeSet && this.lastDeltaChangeSet === props.value) {\n      error = 'You are passing the `delta` object from the `onChange` event ' +\n              'back as `value`. You most probably ' +\n              'want `editor.getContents()` instead. ';\n      throw new Error(error);\n    }\n\n    const noChild = React.Children.count(props.children);\n    error = null;\n    if (noChild) {\n      if (noChild > 1) {\n        error = 'The Quill editing area can only be composed ' +\n                'of a single React element.';\n      }\n\n      const child = React.Children.only(props.children);\n      if (child && child.type === 'textarea') {\n        error = 'Quill does not support editing on a <textarea>. ' +\n                'Use a <div> instead.';\n      }\n\n      if (error) throw new Error(error);\n    }\n  }\n\n  shouldComponentRegenerate(nextProps) {\n    return this.dirtyProps.some(prop => (\n      !isEqual(nextProps[prop], this.props[prop])\n    ));\n  }\n\n  getEditorConfig() {\n    return {\n      bounds: this.props.bounds,\n      formats: this.props.formats,\n      modules: this.props.modules,\n      placeholder: this.props.placeholder,\n      readOnly: this.props.readOnly,\n      scrollingContainer: this.props.scrollingContainer,\n      tabIndex: this.props.tabIndex,\n      theme: this.props.theme,\n    };\n  }\n\n  getEditor() {\n    if (this.editor == null) {\n      throw new Error('Accessing non-instantiated editor');\n    }\n\n    return this.editor;\n  }\n\n  getEditorContents() {\n    return this.value;\n  }\n\n  getEditorSelection() {\n    return this.selection;\n  }\n\n  getEditingArea() {\n    if (!this.editingArea) {\n      throw new Error('Instantiating on missing editing area');\n    }\n\n    // eslint-disable-next-line react/no-find-dom-node\n    const element = ReactDOM.findDOMNode(this.editingArea);\n    if (!element) {\n      throw new Error('Cannot find element for editing area');\n    }\n\n    if (element.nodeType === 3) {\n      throw new Error('Editing area cannot be a text node');\n    }\n\n    return element;\n  }\n\n  /* eslint-disable class-methods-use-this */\n  setEditorContents(editor, value) {\n    if (!editor) return;\n\n    this.value = value;\n    const sel = this.getEditorSelection();\n\n    if (typeof value === 'string') {\n      editor.setContents(editor.clipboard.convert(value));\n    } else {\n      editor.setContents(value);\n    }\n\n    postpone(() => this.setEditorSelection(editor, sel));\n  }\n\n  setEditorSelection(editor, range) {\n    this.selection = range;\n\n    if (range) {\n      // Validate bounds before applying.\n      const length = editor.getLength();\n\n      /* eslint-disable no-param-reassign */\n      range.index = Math.max(0, Math.min(range.index, length - 1));\n      range.length = Math.max(0, Math.min(range.length, (length - 1) - range.index));\n      /* eslint-enable no-param-reassign */\n\n      editor.setSelection(range);\n    }\n  }\n\n  setEditorReadOnly(editor, value) {\n    if (value) {\n      editor.disable();\n    } else {\n      editor.enable();\n    }\n  }\n\n  hookEditor(editor) {\n    // Expose the editor on change events via a weaker, unprivileged proxy\n    // object that does not allow accidentally modifying editor state.\n    this.unprivilegedEditor = makeUnprivilegedEditor(editor);\n    // Using `editor-change` allows picking up silent updates, like selection\n    // changes on typing.\n    editor.on('editor-change', this.onEditorChange);\n  }\n\n  unhookEditor(editor) {\n    editor.off('editor-change', this.onEditorChange);\n  }\n\n  createEditor(element, config) {\n    const editor = new Quill(element, config);\n\n    if (config.tabIndex != null) {\n      setEditorTabIndex(editor, config.tabIndex);\n    }\n\n    this.hookEditor(editor);\n    return editor;\n  }\n\n  isControlled() {\n    const { value } = this.props;\n    return value && value !== '';\n  }\n\n  destroyEditor() {\n    if (!this.editor) return;\n\n    this.unhookEditor(this.editor);\n    delete this.editor;\n  }\n\n  instantiateEditor() {\n    if (this.editor) return;\n\n    this.editor = this.createEditor(\n      this.getEditingArea(),\n      this.getEditorConfig()\n    );\n  }\n\n  onEditorChange(eventName, rangeOrDelta, oldRangeOrDelta, source) {\n    if (eventName === 'text-change' && this.editor && this.unprivilegedEditor) {\n      this.onEditorChangeText(\n        this.editor.root.innerHTML,\n        rangeOrDelta,\n        source,\n        this.unprivilegedEditor\n      );\n    } else if (eventName === 'selection-change' && this.unprivilegedEditor) {\n      this.onEditorChangeSelection(\n        rangeOrDelta,\n        source,\n        this.unprivilegedEditor\n      );\n    }\n  }\n\n  onEditorChangeText(value, delta, source, editor) {\n    if (!this.editor) return;\n\n    // We keep storing the same type of value as what the user gives us,\n    // so that value comparisons will be more stable and predictable.\n    const nextContents = isDelta(this.value)\n      ? editor.getContents()\n      : editor.getHTML();\n\n    if (nextContents !== this.getEditorContents()) {\n      // Taint this `delta` object, so we can recognize whether the user\n      // is trying to send it back as `value`, preventing a likely loop.\n      this.lastDeltaChangeSet = delta;\n\n      this.value = nextContents;\n\n      const { onChange } = this.props;\n      if (onChange) onChange(value, delta, source, editor);\n    }\n  }\n\n  onEditorChangeSelection(nextSelection, source, editor) {\n    if (!this.editor) return;\n\n    const currentSelection = this.getEditorSelection();\n    const hasGainedFocus = !currentSelection && nextSelection;\n    const hasLostFocus = currentSelection && !nextSelection;\n\n    if (isEqual(nextSelection, currentSelection)) return;\n\n    this.selection = nextSelection;\n    const { onChangeSelection } = this.props;\n    if (onChangeSelection) onChangeSelection(nextSelection, source, editor);\n\n    const { onFocus, onBlur } = this.props;\n    if (hasGainedFocus && onFocus) {\n      onFocus(nextSelection, source, editor);\n    } else if (hasLostFocus && onBlur) {\n      onBlur(nextSelection, source, editor);\n    }\n  }\n\n  focus() {\n    if (!this.editor) return;\n\n    this.editor.focus();\n  }\n\n  blur() {\n    if (!this.editor) return;\n\n    this.selection = null;\n    this.editor.blur();\n  }\n\n  renderEditingArea() {\n    const { children, preserveWhitespace } = this.props;\n    const { generation } = this.state;\n\n    const properties = {\n      key: generation,\n      ref: (instance) => {\n        this.editingArea = instance;\n      }\n    };\n\n    if (React.Children.count(children)) {\n      return React.cloneElement(\n        React.Children.only(children),\n        properties\n      );\n    }\n\n    return preserveWhitespace\n      ? <pre {...properties} />\n      : <div {...properties} />;\n  }\n\n  render() {\n    const {\n      id, style, className, onKeyPress, onKeyDown, onKeyUp\n    } = this.props;\n\n    return (\n      // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n      <div\n        id={id}\n        style={style}\n        key={this.state.generation}\n        className={`quill ${className || ''}`}\n        onKeyPress={onKeyPress}\n        onKeyDown={onKeyDown}\n        onKeyUp={onKeyUp}\n      >\n        {this.renderEditingArea()}\n      </div>\n    );\n  }\n}\n\nReactQuill.propTypes = {\n  bounds: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.element\n  ]),\n  children: PropTypes.element,\n  className: PropTypes.string,\n  defaultValue: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.object\n  ]),\n  formats: PropTypes.arrayOf(PropTypes.string),\n  id: PropTypes.string,\n  modules: PropTypes.object,\n  onChange: PropTypes.func,\n  onChangeSelection: PropTypes.func,\n  onFocus: PropTypes.func,\n  onBlur: PropTypes.func,\n  onKeyDown: PropTypes.instanceOf(React.EventHanlder),\n  onKeyPress: PropTypes.instanceOf(React.EventHanlder),\n  onKeyUp: PropTypes.instanceOf(React.EventHanlder),\n  placeholder: PropTypes.string,\n  preserveWhitespace: PropTypes.bool,\n  readOnly: PropTypes.bool,\n  scrollingContainer: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.element\n  ]),\n  style: PropTypes.object,\n  tabIndex: PropTypes.number,\n  theme: PropTypes.string,\n  value: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.object\n  ]),\n};\n\nReactQuill.defaultProps = {\n  modules: {},\n  theme: 'snow',\n};\n\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport ReactQuill from 'src/components/reactQuill/ReactQuill';\n\nclass DynamicToolbarEditor extends React.Component {\n  constructor(props) {\n    super(props);\n\n\n    this.toolbarId = `_${Math.random().toString(36).substr(2, 9)}`;\n    this.modules = {\n      toolbar: { container: `#${this.toolbarId}` },\n    };\n  }\n\n  render() {\n    const { innerRef, children, ...otherProps } = this.props;\n\n    return (\n      <div>\n        <div id={this.toolbarId}>\n          {children}\n        </div>\n        <ReactQuill modules={this.modules} {...otherProps} ref={innerRef} />\n      </div>\n    );\n  }\n}\n\nDynamicToolbarEditor.propTypes = {\n  children: PropTypes.node.isRequired,\n};\n\nexport default React.forwardRef((props, ref) => (\n  <DynamicToolbarEditor innerRef={ref} {...props} />\n));\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nexport default class ToolbarIcon extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.onClick = this.onClick.bind(this);\n  }\n\n  onClick() {\n    const { onClick } = this.props;\n    if (onClick) onClick();\n  }\n\n  render() {\n    const { icon } = this.props;\n    if (React.isValidElement(icon)) {\n      return (\n        <button\n          style={{ width: 'auto' }}\n          onClick={this.onClick}\n        >\n          {icon}\n        </button>\n      );\n    }\n\n    return (\n      <button\n        className={`ql_${icon}`}\n        style={{ width: 'auto' }}\n        onClick={this.onClick}\n      >\n        <span>\n          {icon.toUpperCase()}\n        </span>\n      </button>\n    );\n  }\n}\n\nToolbarIcon.propTypes = {\n  icon: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.element\n  ]),\n  onClick: PropTypes.func\n};\n\nToolbarIcon.defaultProps = {\n  icon: <span />,\n  onClick: null\n};\n","import React from 'react';\n\nconst BaseToolbar = () => (\n  <React.Fragment>\n    <select className=\"ql-header\" defaultValue=\"\">\n      <option value=\"1\" />\n      <option value=\"2\" />\n      <option value=\"3\" />\n      <option value=\"4\" />\n      <option value=\"5\" />\n      <option value=\"6\" />\n      <option />\n    </select>\n    <button className=\"ql-bold\" />\n    <button className=\"ql-italic\" />\n    <button className=\"ql-underline\" />\n    <button className=\"ql-list\" value=\"ordered\" />\n    <button className=\"ql-list\" value=\"bullet\" />\n    <button className=\"ql-script\" value=\"sub\" />\n    <button className=\"ql-script\" value=\"super\" />\n  </React.Fragment>\n);\n\nexport default BaseToolbar;\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nconst dropdownSvg = (\n  <svg viewBox=\"0 0 18 18\">\n    <polygon className=\"ql-stroke\" points=\"7 11 9 13 11 11 7 11\" />\n    <polygon className=\"ql-stroke\" points=\"7 7 9 5 11 7 7 7\" />\n  </svg>\n);\n\nexport default class ToolbarDropdown extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = { expanded: false };\n\n    this.pickerSpan = React.createRef();\n    this.pickerLabel = React.createRef();\n\n    const genId = Math.random().toString().substr(2, 10);\n    this.ddQuillId = `ql-dropdown-${genId}`;\n\n    const sheets = document.styleSheets;\n    this.sheet = sheets[sheets.length - 1];\n\n    this.getTextWidth = this.getTextWidth.bind(this);\n    this.toggleExpand = this.toggleExpand.bind(this);\n  }\n\n  componentDidMount() {\n    const cssRule = \".ql-snow .ql-picker.\"+this.ddQuillId+\" .ql-picker-label::before, .\"+this.ddQuillId+\" .ql-picker.ql-size .ql-picker-item::before { content: attr(data-label); line-height: 25px; }\";\n\n    try {\n      this.ruleId = this.sheet.insertRule(cssRule);\n    } catch (err) {\n      console.log(err);\n    }\n\n    const requiredWidth = this.getTextWidth() + 40;\n    this.pickerLabel.current.style.width = `${requiredWidth}px`;\n\n    window.addEventListener('click', (e) => {\n      if (!this.pickerSpan.current) return;\n\n      if (!this.pickerSpan.current.contains(e.target)) {\n        this.pickerSpan.current.classList.remove('ql-expanded');\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    try {\n      this.sheet.deleteRule(this.ruleId);\n    } catch (err) {\n      console.log(err);\n    }\n  }\n\n  getTextWidth(font = \"500 14px 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\") {\n    const canvas = this.canvas || (this.canvas = document.createElement('canvas'));\n    const context = canvas.getContext('2d');\n    context.font = font;\n    const metrics = context.measureText(this.props.label);\n    return metrics.width;\n  }\n\n  toggleExpand() {\n    this.setState({ expanded: !this.state.expanded });\n  }\n\n  render() {\n    const { items, onSelect } = this.props;\n    let ddLabel = this.props.label;\n    const itemValues = Object.values(items);\n    if (!ddLabel && itemValues.length > 0) {\n      [ddLabel] = itemValues;\n    }\n\n    const ddItems = Object.entries(items).map(([k, v]) => {\n      const onClick = () => onSelect(k, v);\n\n      return (\n        <span\n          className=\"ql-picker-item\"\n          key={`mi_${v}`}\n          value={v}\n          onClick={onClick}\n        >\n          {k}\n        </span>\n      );\n    });\n\n    const { expanded } = this.state;\n    const expandedClass = expanded ? 'ql-expanded' : '';\n    const className = `${this.ddQuillId} ql-picker ${expandedClass}`;\n\n    return (\n      <span className=\"ql-formats\">\n        <span\n          className={className}\n          ref={this.pickerSpan}\n          onClick={this.toggleExpand}\n        >\n          <span\n            className=\"ql-picker-label\"\n            data-label={ddLabel}\n            ref={this.pickerLabel}\n          >\n            {dropdownSvg}\n          </span>\n          <span className=\"ql-picker-options\">\n            {ddItems}\n          </span>\n        </span>\n      </span>\n    );\n  }\n}\n\nToolbarDropdown.propTypes = {\n  label: PropTypes.string,\n  // eslint-disable-next-line react/forbid-prop-types\n  items: PropTypes.object,\n  onSelect: PropTypes.func,\n};\n\nToolbarDropdown.defaultProps = {\n  label: '',\n  items: {},\n  onSelect: null,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport ToolbarIcon from 'src/components/reactQuill/ToolbarIcon';\nimport TextTemplateIcon from 'src/apps/admin/textTemplates/TextTemplateIcon';\nimport ToolbarDropdown from 'src/components/reactQuill/ToolbarDropdown';\n\nconst getNamesFromTemplate = (template) => {\n  if (!template) return [];\n\n  // eslint-disable-next-line no-underscore-dangle\n  const iconNames = template._toolbar || [];\n  const dropdownNames = {};\n  Object.keys(template).filter(k => k !== '_toolbar').forEach((k) => {\n    dropdownNames[k] = template[k];\n  });\n\n  return [iconNames, dropdownNames];\n};\n\nconst TextTemplateToolbar = ({\n  template, predefinedTemplates, applyTemplate\n}) => {\n  const [iconNames, dropdownNames] = getNamesFromTemplate(template);\n\n  return (\n    <React.Fragment>\n      {iconNames.map((name) => {\n        const predefinedTemplate = predefinedTemplates[name];\n        if (!predefinedTemplate) return <span key={name} />;\n\n        const onClick = () => applyTemplate(predefinedTemplate.data || {});\n        const icon = <TextTemplateIcon template={predefinedTemplate} />;\n\n        return (\n          <ToolbarIcon\n            key={`icon_${name}`}\n            icon={icon}\n            template={predefinedTemplate}\n            onClick={onClick}\n          />\n        );\n      })}\n      {Object.keys(dropdownNames).map((label) => {\n        const items = {};\n        dropdownNames[label].forEach((k) => {\n          items[k.toUpperCase()] = k;\n        });\n        const onSelect = (_k, v) => {\n          const predefinedTemplate = predefinedTemplates[v];\n          if (predefinedTemplate) {\n            applyTemplate(predefinedTemplate.data || {});\n          }\n        };\n        const dropdownLabel = dropdownNames[label];\n        return (\n          <ToolbarDropdown\n            key={`dd_${label}`}\n            label={label !== '' ? label : `${dropdownLabel[0]} `}\n            items={items}\n            onSelect={onSelect}\n          />\n        );\n      })}\n    </React.Fragment>\n  );\n};\n\nTextTemplateToolbar.propTypes = {\n  /* eslint-disable react/forbid-prop-types */\n  template: PropTypes.object,\n  predefinedTemplates: PropTypes.object,\n  applyTemplate: PropTypes.func,\n};\n\nTextTemplateToolbar.defaultProps = {\n  template: {},\n  predefinedTemplates: [],\n  applyTemplate: null\n};\n\nexport default TextTemplateToolbar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, FormControl } from 'react-bootstrap';\nimport Select from 'react-select3';\n// import { template } from 'lodash';\n\nconst customStyles = {\n  container: ({ marginLeft, ...css }) => ({\n    marginLeft: '100px',\n    marginRight: '35px',\n    ...css\n  }),\n  menu: ({ width, ...css }) => ({ width: '465px', ...css })\n};\n\nconst getIconAndDropdown = (template) => {\n  const dropdownTemplates = Object.keys(template).filter(k => (\n    k !== '_toolbar'\n  )).map((k, idx) => (\n    { id: idx + 1, name: k, data: template[k] }\n  ));\n\n  // eslint-disable-next-line no-underscore-dangle\n  const toolbarTemplate = template._toolbar || [];\n  return [toolbarTemplate, dropdownTemplates];\n};\n\nexport default class ToolbarTemplateCreator extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.toolbarSelectRef = React.createRef();\n\n    const [iconTemplates, dropdownTemplates] = getIconAndDropdown(props.template);\n    this.state = { iconTemplates, dropdownTemplates };\n\n    this.toolbarDdSelectRefs = dropdownTemplates.map(dd => ({\n      id: dd.id,\n      ref: React.createRef()\n    }));\n    this.toolbarTitleRefs = dropdownTemplates.map(dd => ({\n      id: dd.id,\n      ref: React.createRef()\n    }));\n    this.id = dropdownTemplates.length + 1;\n\n    this.setTitleRef = this.setTitleRef.bind(this);\n    this.onChangeDropdown = this.onChangeDropdown.bind(this);\n\n    this.createDropdownTemplate = this.createDropdownTemplate.bind(this);\n    this.removeDropdownTemplate = this.removeDropdownTemplate.bind(this);\n    this.saveUserTemplates = this.saveUserTemplates.bind(this);\n  }\n\n  UNSAFE_componentWillReceiveProps(newProps) {\n    const [iconTemplates, dropdownTemplates] = getIconAndDropdown(newProps.template);\n    this.toolbarDdSelectRefs = dropdownTemplates.map(dd => ({\n      id: dd.id,\n      ref: React.createRef()\n    }));\n    this.toolbarTitleRefs = dropdownTemplates.map(dd => ({\n      id: dd.id,\n      ref: React.createRef()\n    }));\n    this.id = dropdownTemplates.length + 1;\n\n    this.setState({ iconTemplates, dropdownTemplates });\n  }\n\n  onChangeDropdown(type, e, id) {\n    const { dropdownTemplates } = this.state;\n\n    const tempOnChange = dropdownTemplates.filter(template => template.id === id);\n    if (type === 'DropdownName') {\n      tempOnChange[0].name = e.target.value;\n    } else {\n      const dataValues = [];\n      if (e !== null) {\n        e.forEach((object) => {\n          const tabContent = object.value;\n          if (tabContent) { dataValues.push(tabContent); }\n        });\n        tempOnChange[0].data = dataValues;\n      }\n    }\n  }\n\n  setTitleRef(id, ref) {\n    const refIdx = this.toolbarTitleRefs.findIndex(r => r.id === id);\n    if (refIdx < 0) return;\n\n    const titleRef = this.toolbarTitleRefs[refIdx];\n    titleRef.ref = ref;\n    this.toolbarTitleRefs[refIdx] = titleRef;\n  }\n\n  createDropdownTemplate() {\n    const { dropdownTemplates } = this.state;\n\n    this.toolbarDdSelectRefs.push({ id: this.id, ref: React.createRef() });\n    this.toolbarTitleRefs.push({ id: this.id, ref: React.createRef() });\n\n    const newDd = { id: this.id, name: '', data: [] };\n    this.setState({\n      dropdownTemplates: dropdownTemplates.concat([newDd])\n    });\n    this.id += 1;\n  }\n\n  removeDropdownTemplate(template) {\n    const { dropdownTemplates } = this.state;\n    const newDropdowTemplates = dropdownTemplates.filter(dd => (\n      dd.id !== template.id\n    ));\n\n    this.setState({ dropdownTemplates: newDropdowTemplates }, () => {\n      this.toolbarDdSelectRefs = this.toolbarDdSelectRefs.filter(ref => (\n        ref.id !== template.id\n      ));\n      this.toolbarTitleRefs = this.toolbarTitleRefs.filter(ref => (\n        ref.id !== template.id\n      ));\n    });\n  }\n\n  saveUserTemplates() {\n    const { updateTextTemplates } = this.props;\n    if (!updateTextTemplates) return;\n\n    const iconTemplates = this.toolbarSelectRef.current.state.value;\n    const userTemplate = { _toolbar: iconTemplates.map(n => n.value) };\n\n    const { dropdownTemplates } = this.state;\n    dropdownTemplates.forEach((template) => {\n      const selectRefs = this.toolbarDdSelectRefs.filter(r => r.id === template.id);\n      const titleRefs = this.toolbarTitleRefs.filter(r => r.id === template.id);\n      if (selectRefs.length === 0 || titleRefs.length === 0) return;\n\n      const selectRef = selectRefs[0].ref;\n      const selectedValue = selectRef.current.state.value;\n\n      const tempName = template.name;\n      userTemplate[tempName] = selectedValue.map(v => v.value);\n    });\n    this.setState({ dropdownTemplates });\n    updateTextTemplates(userTemplate);\n  }\n\n  render() {\n    const { templateOptions } = this.props;\n    const options = templateOptions.map(n => ({ label: n, value: n }));\n\n    const { iconTemplates, dropdownTemplates } = this.state;\n    const iconSelected = iconTemplates.map(n => ({ label: n, value: n }));\n\n    const dropdownTemplateSelector = dropdownTemplates.map((template) => {\n      const { name, id } = template;\n      const selectRef = this.toolbarDdSelectRefs.filter(r => (\n        r.id === template.id\n      ))[0];\n      const titleRef = this.toolbarTitleRefs.filter(r => (\n        r.id === template.id\n      ))[0];\n      if (!selectRef || !titleRef) return <span />;\n\n      const ddSelected = template.data.map(n => ({ label: n, value: n }));\n      const removeDropdown = () => this.removeDropdownTemplate(template);\n\n      return (\n        <div\n          key={`ttc_dd_${name}_${id}`}\n          style={{ marginTop: '10px' }}\n        >\n          <hr />\n          <FormControl\n            style={{ float: 'left', width: '90px', marginRight: '10px' }}\n            // inputRef={(ref) => { this.setTitleRef(id, ref); }}\n            onChange={e => this.onChangeDropdown('DropdownName', e, id)}\n            ref={titleRef.ref}\n            type=\"text\"\n            defaultValue={name}\n          />\n          <Button\n            bsStyle=\"danger\"\n            bsSize=\"xs\"\n            onClick={removeDropdown}\n            style={{ float: 'right', width: '25px', marginLeft: '10px' }}\n          >\n            <i className=\"fa fa-trash\" />\n          </Button>\n          <Select\n            styles={customStyles}\n            ref={selectRef.ref}\n            options={options}\n            defaultValue={ddSelected}\n            onChange={e => this.onChangeDropdown('DropdownData', e, id)}\n            isMulti\n            isSearchable\n            closeMenuOnSelect={false}\n          />\n        </div>\n      );\n    });\n\n    return (\n      <div style={{ width: '600px' }}>\n        <div>\n          <Button\n            bsStyle=\"success\"\n            onClick={this.saveUserTemplates}\n          >\n            Save\n          </Button>\n          &nbsp;&nbsp;\n          <Button\n            bsStyle=\"info\"\n            onClick={this.createDropdownTemplate}\n          >\n            New dropdown\n          </Button>\n        </div>\n        <hr />\n        <div style={{ marginTop: '10px' }}>\n          <FormControl\n            style={{ float: 'left', marginRight: '10px', width: '90px' }}\n            type=\"text\"\n            disabled\n            defaultValue=\"Toolbar\"\n          />\n          <div style={{ marginRight: '35px' }}>\n            <Select\n              ref={this.toolbarSelectRef}\n              styles={customStyles}\n              defaultValue={iconSelected}\n              options={options}\n              isMulti\n              isSearchable\n              closeMenuOnSelect={false}\n            />\n          </div>\n        </div>\n        {dropdownTemplateSelector}\n      </div>\n    );\n  }\n}\n\nToolbarTemplateCreator.propTypes = {\n  /* eslint-disable react/forbid-prop-types */\n  template: PropTypes.object,\n  templateOptions: PropTypes.arrayOf(PropTypes.string),\n  /* eslint-enable react/forbid-prop-types */\n  updateTextTemplates: PropTypes.func\n};\n\nToolbarTemplateCreator.defaultProps = {\n  template: {},\n  templateOptions: [],\n  updateTextTemplates: null\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { OverlayTrigger, Popover } from 'react-bootstrap';\n\nimport Delta from 'quill-delta';\n\nimport { formatAnalysisContent } from 'src/utilities/ElementUtils';\n\nimport TextTemplateStore from 'src/stores/alt/stores/TextTemplateStore';\nimport TextTemplateActions from 'src/stores/alt/actions/TextTemplateActions';\n\nimport DynamicToolbarEditor from 'src/components/reactQuill/DynamicToolbarEditor';\nimport ToolbarIcon from 'src/components/reactQuill/ToolbarIcon';\nimport BaseToolbar from 'src/components/reactQuill/BaseToolbar';\n\nimport TextTemplateToolbar from 'src/components/textTemplateToolbar/TextTemplateToolbar';\nimport ToolbarTemplateCreator from 'src/components/textTemplateToolbar/ToolbarTemplateCreator';\n\nconst toolbarOptions = [\n  'bold', 'italic', 'underline',\n  'header', 'script',\n  'list', 'bullet',\n];\n\nexport default class AnalysisEditor extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.reactQuillRef = React.createRef();\n\n    const templateStore = TextTemplateStore.getState();\n    const { predefinedTemplateNames, fetchedPredefinedTemplates } = templateStore;\n    const fetchedTemplates = fetchedPredefinedTemplates && fetchedPredefinedTemplates.toJS();\n    this.state = {\n      fetchedNames: Object.keys(fetchedTemplates),\n      predefinedTemplateNames: predefinedTemplateNames && predefinedTemplateNames.toJS(),\n      fetchedPredefinedTemplates,\n      updateTemplate: false\n    };\n\n    this.fetchPredefinedTemplates = this.fetchPredefinedTemplates.bind(this);\n\n    this.onChangeTemplateStore = this.onChangeTemplateStore.bind(this);\n    this.onChangeContent = this.onChangeContent.bind(this);\n    this.autoFormatContent = this.autoFormatContent.bind(this);\n    this.applyTemplate = this.applyTemplate.bind(this);\n    this.updateTextTemplates = this.updateTextTemplates.bind(this);\n\n    this.quillOnChange = this.quillOnChange.bind(this);\n  }\n\n  componentDidMount() {\n    TextTemplateStore.listen(this.onChangeTemplateStore);\n    TextTemplateActions.fetchPredefinedTemplateNames();\n\n    const { template } = this.props;\n    const namesToFetch = Object.values(template).flat();\n    this.fetchPredefinedTemplates(namesToFetch);\n  }\n\n  componentDidUpdate(prevProps) {\n    const { template } = this.props;\n    const namesToFetch = Object.values(template).flat();\n\n    if (!this.state.updateTemplate && Object.keys(template).length !== 0) {\n      // this.fetchPredefinedTemplates(namesToFetch);\n      TextTemplateActions.fetchPredefinedTemplateByNames(namesToFetch);\n\n      // eslint-disable-next-line react/no-did-update-set-state\n      this.setState({\n        updateTemplate: true\n      });\n    } else if (this.props.template !== prevProps.template && this.state.updateTemplate) {\n      const prevnamesToFetch = Object.values(prevProps.template).flat();\n\n      if (prevnamesToFetch.length !== namesToFetch.length) {\n        // this.fetchPredefinedTemplates(namesToFetch);\n        TextTemplateActions.fetchPredefinedTemplateByNames(namesToFetch);\n      }\n    }\n  }\n\n  componentWillUnmount() {\n    TextTemplateStore.unlisten(this.onChangeTemplateStore);\n  }\n\n  onChangeTemplateStore(state) {\n    const { predefinedTemplateNames, fetchedPredefinedTemplates } = state;\n    const { fetchedNames } = this.state;\n    const fetchedTemplates = (fetchedPredefinedTemplates && fetchedPredefinedTemplates.toJS()) || Map();\n\n    const templateStoreFetched = Object.keys(fetchedTemplates);\n    const fetched = [...new Set(fetchedNames.concat(templateStoreFetched))];\n    this.setState({\n      fetchedNames: fetched,\n      predefinedTemplateNames: predefinedTemplateNames && predefinedTemplateNames.toJS(),\n      fetchedPredefinedTemplates: fetchedTemplates\n    });\n  }\n\n  onChangeContent(quillEditor) {\n    const { onChangeContent } = this.props;\n\n    if (onChangeContent) {\n      onChangeContent(quillEditor.getContents());\n    }\n  }\n\n  fetchPredefinedTemplates(names) {\n    if (!names || names.length === 0) return;\n\n    const { fetchedNames } = this.state;\n    const namesToFetch = names.filter(n => !fetchedNames.includes(n));\n    if (namesToFetch.length === 0) return;\n\n    const fetched = [...new Set(fetchedNames.concat(names))];\n    this.setState({ fetchedNames: fetched }, () => {\n      TextTemplateActions.fetchPredefinedTemplateByNames(namesToFetch);\n    });\n  }\n\n  autoFormatContent() {\n    if (this.reactQuillRef.current == null) {\n      return;\n    }\n\n    const { analysis } = this.props;\n\n    let value = analysis.extended_metadata.content || {};\n    value = formatAnalysisContent(analysis);\n\n    const quill = this.reactQuillRef.current.getEditor();\n    quill.setContents(value);\n    this.onChangeContent(quill);\n  }\n\n  quillOnChange(content, delta, source, editor) {\n    if (this.reactQuillRef.current == null) {\n      return;\n    }\n\n    this.onChangeContent(editor);\n  }\n\n  applyTemplate(macro) {\n    const check = ('ops' in macro) && Array.isArray(macro.ops);\n    if (!check) return;\n\n    if (this.reactQuillRef.current == null) {\n      return;\n    }\n\n    const quill = this.reactQuillRef.current.getEditor();\n    const range = quill.getSelection();\n    if (!range) return;\n\n    let contents = quill.getContents();\n    let elementOps = macro.ops;\n    const insertDelta = new Delta(elementOps);\n    if (range.index > 0) {\n      elementOps = [{ retain: range.index }].concat(elementOps);\n    }\n    const macroDelta = new Delta(elementOps);\n    contents = contents.compose(macroDelta);\n    quill.setContents(contents);\n    range.length = 0;\n    range.index += insertDelta.length();\n    quill.setSelection(range);\n\n    this.onChangeContent(quill);\n  }\n\n  updateTextTemplates(template) {\n    const { updateTextTemplates } = this.props;\n    updateTextTemplates(template);\n  }\n\n  render() {\n    const { predefinedTemplateNames, fetchedPredefinedTemplates } = this.state;\n\n    const { template, analysis, readOnly } = this.props;\n    const value = analysis.extended_metadata.content || {};\n\n    const autoFormatIcon = <span className=\"fa fa-magic\" />;\n    const templateCreatorPopover = (\n      <Popover\n        id=\"popover-positioned-top\"\n        title=\"Custom toolbar\"\n        className=\"analyses-template-creator\"\n      >\n        <ToolbarTemplateCreator\n          template={template}\n          templateOptions={predefinedTemplateNames}\n          updateTextTemplates={this.updateTextTemplates}\n        />\n      </Popover>\n    );\n\n    return (\n      <DynamicToolbarEditor\n        theme=\"snow\"\n        formats={toolbarOptions}\n        style={{ height: '120px' }}\n        ref={this.reactQuillRef}\n        onChange={this.quillOnChange}\n        value={value}\n        readOnly={readOnly}\n      >\n        <BaseToolbar />\n        <ToolbarIcon\n          icon={autoFormatIcon}\n          onClick={this.autoFormatContent}\n        />\n        <TextTemplateToolbar\n          template={template}\n          predefinedTemplates={fetchedPredefinedTemplates}\n          applyTemplate={this.applyTemplate}\n        />\n        <OverlayTrigger\n          trigger=\"click\"\n          placement=\"top\"\n          rootClose\n          overlay={templateCreatorPopover}\n          onHide={this.onCloseTemplateCreator}\n        >\n          <span className=\"ql-formats\">\n            <button>\n              <span className=\"fa fa-cog\" />\n            </button>\n          </span>\n        </OverlayTrigger>\n      </DynamicToolbarEditor>\n    );\n  }\n}\n\nAnalysisEditor.propTypes = {\n  /* eslint-disable react/forbid-prop-types */\n  template: PropTypes.object,\n  analysis: PropTypes.object,\n  /* eslint-enable react/forbid-prop-types */\n  readOnly: PropTypes.bool,\n  onChangeContent: PropTypes.func,\n  updateTextTemplates: PropTypes.func,\n};\n\nAnalysisEditor.defaultProps = {\n  readOnly: false,\n  template: {},\n  analysis: {},\n  onChangeContent: null,\n  updateTextTemplates: null\n};\n","/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport { Map } from 'immutable';\nimport PropTypes from 'prop-types';\nimport {\n  Col,\n  FormControl,\n  FormGroup,\n  ControlLabel\n} from 'react-bootstrap';\nimport Select from 'react-select';\n\nimport TextTemplateStore from 'src/stores/alt/stores/TextTemplateStore';\nimport TextTemplateActions from 'src/stores/alt/actions/TextTemplateActions';\n\nimport ContainerDatasets from 'src/components/container/ContainerDatasets';\nimport QuillViewer from 'src/components/QuillViewer';\nimport OlsTreeSelect from 'src/components/OlsComponent';\nimport { confirmOptions } from 'src/components/staticDropdownOptions/options';\n\nimport AnalysisEditor from 'src/components/container/AnalysisEditor';\nimport HyperLinksSection from 'src/components/common/HyperLinksSection';\n\nexport default class ContainerComponent extends Component {\n  constructor(props) {\n    super();\n\n    const { container, templateType } = props;\n    const textTemplate = TextTemplateStore.getState()[templateType] || Map();\n    this.state = {\n      container,\n      textTemplate: textTemplate && textTemplate.toJS()\n    };\n\n    this.onChange = this.onChange.bind(this);\n    this.handleInputChange = this.handleInputChange.bind(this);\n    this.updateTextTemplates = this.updateTextTemplates.bind(this);\n\n    this.handleTemplateChange = this.handleTemplateChange.bind(this);\n\n    this.handleAddLink = this.handleAddLink.bind(this);\n    this.handleRemoveLink = this.handleRemoveLink.bind(this);\n  }\n\n  componentDidMount() {\n    TextTemplateStore.listen(this.handleTemplateChange);\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    this.setState({\n      container: nextProps.container,\n    });\n  }\n\n  componentWillUnmount() {\n    TextTemplateStore.unlisten(this.handleTemplateChange);\n  }\n\n  handleTemplateChange() {\n    const { templateType } = this.props;\n\n    const textTemplate = TextTemplateStore.getState()[templateType];\n    this.setState({ textTemplate: textTemplate && textTemplate.toJS() });\n  }\n\n  handleInputChange(type, ev) {\n    const { container } = this.state;\n    let isChanged = false;\n    switch (type) {\n      case 'name':\n        container.name = ev.currentTarget.value;\n        isChanged = true;\n        break;\n      case 'description':\n        container.description = ev.currentTarget.value;\n        isChanged = true;\n        break;\n      case 'kind': {\n        container.extended_metadata.kind = (ev || '').trim();\n        isChanged = true;\n        break;\n      }\n      case 'status':\n        container.extended_metadata.status = ev ? ev.value : undefined;\n        isChanged = true;\n        break;\n      case 'content':\n        container.extended_metadata.content = ev;\n        isChanged = true;\n        break;\n      default:\n        break;\n    }\n\n    if (isChanged) this.onChange(container);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n\n  handleAddLink(link) {\n    const { container } = this.state;\n    let { hyperlinks } = container.extended_metadata;\n    if (hyperlinks == null) {\n      container.extended_metadata.hyperlinks = [link];\n    } else {\n      if (typeof hyperlinks === 'string' || hyperlinks instanceof String) {\n        hyperlinks = JSON.parse(hyperlinks);\n      }\n\n      hyperlinks.push(link);\n      container.extended_metadata.hyperlinks = hyperlinks;\n    }\n    this.setState({ container });\n  }\n\n  handleRemoveLink(link) {\n    const { container } = this.state;\n    let { hyperlinks } = container.extended_metadata;\n    if (typeof hyperlinks === 'string' || hyperlinks instanceof String) {\n      hyperlinks = JSON.parse(hyperlinks);\n    }\n\n    const index = hyperlinks.indexOf(link);\n    if (index !== -1) {\n      hyperlinks.splice(index, 1);\n      container.extended_metadata.hyperlinks = hyperlinks;\n    }\n\n    this.setState({ container });\n  }\n\n  onChange(container) {\n    this.props.onChange(container);\n  }\n\n  updateTextTemplates(textTemplate) {\n    const { templateType } = this.props;\n    TextTemplateActions.updateTextTemplates(templateType, textTemplate);\n  }\n\n  render() {\n    const { container, textTemplate } = this.state;\n    const { readOnly, disabled } = this.props;\n\n    let quill = (<span />);\n    if (readOnly || disabled) {\n      quill = (\n        <QuillViewer value={container.extended_metadata.content} />\n      );\n    } else {\n      quill = (\n        <AnalysisEditor\n          height=\"120px\"\n          template={textTemplate}\n          analysis={container}\n          updateTextTemplates={this.updateTextTemplates}\n          // eslint-disable-next-line react/jsx-no-bind\n          onChangeContent={this.handleInputChange.bind(this, 'content')}\n        />\n      );\n    }\n\n    return (\n      <div>\n        <Col md={8}>\n          {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n          <label>Name</label>\n          <FormControl\n            type=\"text\"\n            label=\"Name\"\n            value={container.name}\n            // eslint-disable-next-line react/jsx-no-bind\n            onChange={this.handleInputChange.bind(this, 'name')}\n            disabled={readOnly || disabled}\n          />\n        </Col>\n        <Col md={4}>\n          <div style={{ marginBottom: 11 }}>\n            {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n            <label>Status</label>\n            <Select\n              name=\"status\"\n              multi={false}\n              options={confirmOptions}\n              value={container.extended_metadata.status}\n              disabled={readOnly || disabled}\n              // eslint-disable-next-line react/jsx-no-bind\n              onChange={this.handleInputChange.bind(this, 'status')}\n            />\n          </div>\n        </Col>\n        <Col md={12}>\n          <div style={{ marginBottom: 11 }}>\n            <ControlLabel>{this.props.analysisMethodTitle}</ControlLabel>\n            <OlsTreeSelect\n              selectName={this.props.ontologyName}\n              selectedValue={container.extended_metadata.kind || ''}\n              onSelectChange={(event) => this.handleInputChange('kind', event)}\n              selectedDisable={readOnly || disabled || false}\n            />\n          </div>\n        </Col>\n        <Col md={12}>\n          <FormGroup>\n            <ControlLabel>Content</ControlLabel>\n            {quill}\n          </FormGroup>\n          <FormGroup>\n            <ControlLabel>Description</ControlLabel>\n            <FormControl\n              componentClass=\"textarea\"\n              label=\"Description\"\n              value={container.description || ''}\n              disabled={readOnly || disabled}\n              // eslint-disable-next-line react/jsx-no-bind\n              onChange={this.handleInputChange.bind(this, 'description')}\n            />\n          </FormGroup>\n        </Col>\n        <Col md={12}>\n          {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n          <label>Datasets</label>\n          <ContainerDatasets\n            container={container}\n            readOnly={readOnly}\n            disabled={disabled}\n            onChange={this.onChange}\n          />\n        </Col>\n        <Col md={12}>\n          <HyperLinksSection\n            data={container.extended_metadata.hyperlinks ?? []}\n            onAddLink={this.handleAddLink}\n            onRemoveLink={this.handleRemoveLink}\n            readOnly={readOnly}\n            disabled={disabled}\n          />\n        </Col>\n      </div>\n    );\n  }\n}\n\nContainerComponent.propTypes = {\n  ontologyName: PropTypes.string,\n  analysisMethodTitle: PropTypes.string,\n  templateType: PropTypes.string,\n  onChange: PropTypes.func,\n  readOnly: PropTypes.bool,\n  disabled: PropTypes.bool,\n  container: PropTypes.object\n};\n\nContainerComponent.defaultProps = {\n  ontologyName: 'chmo',\n  analysisMethodTitle: 'Type (Chemical Methods Ontology)',\n  templateType: '',\n  onChange: () => {},\n  readOnly: false,\n  disabled: false,\n  container: {}\n};\n","/* eslint-disable react/forbid-prop-types */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport uuid from 'uuid';\nimport { Tooltip, Button, OverlayTrigger, SplitButton, ButtonGroup, MenuItem } from 'react-bootstrap';\n\nconst EditorAnalysisBtn = ({\n  element, spcInfos, hasJcamp, hasChemSpectra,\n  toggleSpectraModal, confirmRegenerate,\n}) => (\n  <OverlayTrigger\n    placement=\"bottom\"\n    delayShow={500}\n    overlay={<Tooltip id=\"spectra\">Spectra Editor {spcInfos.length > 0 ? '' : ': Reprocess'}</Tooltip>}\n  >{spcInfos.length > 0 ? (\n    <ButtonGroup className=\"button-right\">\n      <SplitButton\n        id=\"spectra-editor-split-button\"\n        pullRight\n        bsStyle=\"info\"\n        bsSize=\"xsmall\"\n        title={<i className=\"fa fa-area-chart\" />}\n        onToggle={(open, event) => { if (event) { event.stopPropagation(); } }}\n        onClick={toggleSpectraModal}\n        disabled={!(spcInfos.length > 0) || !hasChemSpectra}\n      >\n        <MenuItem\n          id=\"regenerate-spectra\"\n          key={uuid.v4()}\n          onSelect={(eventKey, event) => {\n            event.stopPropagation();\n            confirmRegenerate(event);\n          }}\n          disabled={!hasJcamp || !element.can_update}\n        >\n          <i className=\"fa fa-refresh\" aria-hidden=\"true\" /> Reprocess\n        </MenuItem>\n      </SplitButton>\n    </ButtonGroup>\n  ) : (\n    <Button\n      bsStyle=\"warning\"\n      bsSize=\"xsmall\"\n      className=\"button-right\"\n      onClick={confirmRegenerate}\n      disabled={!hasJcamp || !element.can_update || !hasChemSpectra}\n    >\n      <i className=\"fa fa-area-chart\" /><i className=\"fa fa-refresh \" />\n    </Button>\n    )}\n  </OverlayTrigger>\n);\n\nEditorAnalysisBtn.propTypes = {\n  element: PropTypes.object,\n  hasJcamp: PropTypes.bool,\n  spcInfos: PropTypes.array,\n  hasChemSpectra: PropTypes.bool,\n  toggleSpectraModal: PropTypes.func.isRequired,\n  confirmRegenerate: PropTypes.func.isRequired,\n};\n\nEditorAnalysisBtn.defaultProps = {\n  hasJcamp: false,\n  spcInfos: [],\n  element: {},\n  hasChemSpectra: false,\n};\n\nexport default EditorAnalysisBtn;\n","/* eslint-disable react/forbid-prop-types */\n/* eslint-disable no-alert */\n/* eslint-disable no-restricted-globals */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Panel, Button } from 'react-bootstrap';\nimport ContainerComponent from 'src/components/container/ContainerComponent';\nimport Quill2Viewer from 'src/components/Quill2Viewer';\nimport ImageModal from 'src/components/common/ImageModal';\nimport { instrumentText } from 'src/utilities/ElementUtils';\nimport { previewContainerImage } from 'src/utilities/imageHelper';\nimport { JcampIds, BuildSpcInfos } from 'src/utilities/SpectraHelper';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport SpectraActions from 'src/stores/alt/actions/SpectraActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ViewSpectra from 'src/apps/mydb/elements/details/ViewSpectra';\nimport EditorAnalysisBtn from 'src/components/generic/EditorAnalysisBtn';\n\nconst headerBtnGroup = (props) => {\n  const {\n    container, readOnly, generic, fnRemove, fnChange\n  } = props;\n  const jcampIds = JcampIds(container);\n  const hasJcamp = jcampIds.orig.length > 0;\n  const confirmRegenerate = (e) => {\n    e.stopPropagation();\n    if (confirm('Regenerate spectra?')) {\n      LoadingActions.start();\n      SpectraActions.Regenerate(jcampIds, fnChange);\n    }\n  };\n  const spcInfos = BuildSpcInfos(generic, container);\n  const { hasChemSpectra } = UIStore.getState();\n  const toggleSpectraModal = (e) => {\n    SpectraActions.ToggleModal();\n    SpectraActions.LoadSpectra.defer(spcInfos);\n  };\n  return (\n    <div className=\"upper-btn\">\n      <Button\n        bsSize=\"xsmall\"\n        bsStyle=\"danger\"\n        className=\"button-right\"\n        disabled={readOnly}\n        onClick={(e) => { e.preventDefault(); e.stopPropagation(); fnRemove(container); }}\n      >\n        <i className=\"fa fa-trash\" />\n      </Button>\n      <EditorAnalysisBtn\n        element={generic}\n        hasJcamp={hasJcamp}\n        spcInfos={spcInfos}\n        hasChemSpectra={hasChemSpectra}\n        toggleSpectraModal={toggleSpectraModal}\n        confirmRegenerate={confirmRegenerate}\n      />\n    </div>\n  );\n};\n\nconst newHeader = (props) => {\n  const { container } = props;\n  let kind = container.extended_metadata.kind || '';\n  kind = (kind.split('|')[1] || kind).trim();\n  const insText = instrumentText(container);\n  const previewImg = previewContainerImage(container);\n  const status = container.extended_metadata.status || '';\n  const content = container.extended_metadata.content || { ops: [{ insert: '' }] };\n  const contentOneLine = {\n    ops: content.ops.map((x) => {\n      const c = Object.assign({}, x);\n      if (c.insert) c.insert = c.insert.replace(/\\n/g, ' ');\n      return c;\n    }),\n  };\n  let hasPop = true;\n  let fetchNeeded = false;\n  let fetchId = 0;\n  if (previewImg.startsWith('data:image')) {\n    fetchNeeded = true;\n    fetchId = container.preview_img.id;\n  } else {\n    hasPop = false;\n  }\n\n  return (\n    <div className=\"analysis-header order\" style={{ width: '100%' }}>\n      <div className=\"preview\">\n        <ImageModal\n          hasPop={hasPop}\n          previewObject={{\n            src: previewImg\n          }}\n          popObject={{\n            title: container.name,\n            src: previewImg,\n            fetchNeeded,\n            fetchId\n          }}\n        />\n      </div>\n      <div className=\"abstract\">\n        {\n          headerBtnGroup(props)\n        }\n        <div className=\"lower-text\">\n          <div className=\"main-title\">{container.name}</div>\n          <div className=\"sub-title\">Type: {kind}</div>\n          <div className=\"sub-title\">Status: {status} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {insText}</div>\n\n          <div className=\"desc sub-title expand-p\">\n            <span style={{ float: 'left', marginRight: '5px' }}>\n              Content:\n            </span>\n            <Quill2Viewer value={contentOneLine} preview />\n          </div>\n\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst header = container => (\n  <>\n    {container.name}\n    {(container.extended_metadata && container.extended_metadata.kind && container.extended_metadata.kind !== '') ?\n      (` - Type: ${container.extended_metadata.kind.split('|')[1] || container.extended_metadata.kind}`) : ''}\n    {(container.extended_metadata && container.extended_metadata.status && container.extended_metadata.status !== '') ? (` - Status: ${container.extended_metadata.status}`) : ''}\n  </>\n);\n\nconst AiHeaderDeleted = (props) => {\n  const {\n    container, idx, fnUndo, noAct\n  } = props;\n  const id = container.id || `fake_${idx}`;\n\n  return (\n    <Panel eventKey={id} key={`gen_${id}_ai`}>\n      <Panel.Heading>\n        <Panel.Title toggle>\n          <strike>{header(container)}</strike>\n          {\n            noAct ? null : (\n              <Button className=\"pull-right\" bsSize=\"xsmall\" bsStyle=\"danger\" onClick={(e) => { e.preventDefault(); e.stopPropagation(); fnUndo(container); }}>\n                <i className=\"fa fa-undo\" aria-hidden=\"true\" />\n              </Button>\n            )\n          }\n        </Panel.Title>\n      </Panel.Heading>\n    </Panel>\n  );\n};\n\nAiHeaderDeleted.propTypes = {\n  container: PropTypes.object.isRequired,\n  idx: PropTypes.any.isRequired,\n  fnUndo: PropTypes.func,\n  noAct: PropTypes.bool,\n};\nAiHeaderDeleted.defaultProps = { fnUndo: () => {}, noAct: false };\n\nconst AiHeader = (props) => {\n  const {\n    container, idx, generic, readOnly, fnChange, fnRemove, noAct, handleSubmit\n  } = props;\n  const id = idx; // container.id || `fake_${idx}`;\n\n  return (\n    <Panel eventKey={id} key={`gen_${id}_ai`}>\n      <Panel.Heading>\n        <Panel.Title toggle>\n          {newHeader(props)}\n        </Panel.Title>\n      </Panel.Heading>\n      <Panel.Body collapsible>\n        <ContainerComponent\n          templateType={generic.type}\n          readOnly={readOnly}\n          container={container}\n          onChange={() => fnChange()}\n        />\n        <ViewSpectra\n          sample={generic}\n          handleSampleChanged={fnChange}\n          handleSubmit={handleSubmit}\n        />\n      </Panel.Body>\n    </Panel>\n  );\n};\n\nAiHeader.propTypes = {\n  container: PropTypes.object.isRequired,\n  idx: PropTypes.any.isRequired,\n  readOnly: PropTypes.bool.isRequired,\n  generic: PropTypes.object.isRequired,\n  fnChange: PropTypes.func.isRequired,\n  fnRemove: PropTypes.func,\n  noAct: PropTypes.bool,\n  handleSubmit: PropTypes.func.isRequired\n};\nAiHeader.defaultProps = { fnRemove: () => {}, noAct: false };\n\nexport { AiHeader, AiHeaderDeleted };\n","/* eslint-disable react/forbid-prop-types */\n/* eslint-disable react/no-array-index-key */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { PanelGroup } from 'react-bootstrap';\nimport { AiHeader, AiHeaderDeleted } from 'src/components/generic/GenericContainer';\n\nconst GenericContainerGroup = (props) => {\n  const {\n    ae, readOnly, generic, fnUndo, fnChange, fnRemove, noAct, linkedAis, handleSubmit\n  } = props;\n  // if (ae.length < 1 || ae[0].children.length < 0 || ae[0].children.filter(x => linkedAis.includes(x.id).length < 1)) return null;\n  if (ae.length < 1 || ae[0].children.length < 0) return null;\n  const ais = noAct ? ae[0].children.filter(x => linkedAis.includes(x.id)) : ae[0].children;\n  return (\n    <PanelGroup\n      id=\"gen_el_analysis_list\"\n      defaultActiveKey={0}\n      accordion\n    >\n      {ais.map((container, key) => {\n        if (container.is_deleted) {\n          return (\n            <AiHeaderDeleted\n              key={key}\n              container={container}\n              idx={key}\n              fnUndo={fnUndo}\n              noAct={noAct}\n              readOnly={readOnly}\n            />\n          );\n        }\n        return (\n          <AiHeader\n            key={key}\n            container={container}\n            idx={key}\n            generic={generic}\n            readOnly={readOnly}\n            fnChange={fnChange}\n            fnRemove={fnRemove}\n            noAct={noAct}\n            handleSubmit={handleSubmit}\n          />\n        );\n      })}\n    </PanelGroup>\n  );\n};\n\nGenericContainerGroup.propTypes = {\n  ae: PropTypes.array.isRequired,\n  readOnly: PropTypes.bool.isRequired,\n  generic: PropTypes.object.isRequired,\n  fnChange: PropTypes.func.isRequired,\n  handleSubmit: PropTypes.func.isRequired,\n  fnUndo: PropTypes.func,\n  fnRemove: PropTypes.func,\n  noAct: PropTypes.bool,\n  linkedAis: PropTypes.array\n};\n\nGenericContainerGroup.defaultProps = {\n  fnUndo: () => {}, fnRemove: () => {}, noAct: false, linkedAis: []\n};\n\nexport default GenericContainerGroup;\n","/* eslint-disable react/forbid-prop-types */\n/* eslint-disable react/no-array-index-key */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport Container from 'src/models/Container';\nimport TextTemplateActions from 'src/stores/alt/actions/TextTemplateActions';\nimport GenericContainerGroup from 'src/components/generic/GenericContainerGroup';\n\nexport default class GenericElDetailsContainers extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      activeContainer: 0\n    };\n    this.handleAccordionOpen = this.handleAccordionOpen.bind(this);\n    this.handleAdd = this.handleAdd.bind(this);\n    this.handleChange = this.handleChange.bind(this);\n    this.handleRemove = this.handleRemove.bind(this);\n    this.handleSpChange = this.handleSpChange.bind(this);\n    this.handleUndo = this.handleUndo.bind(this);\n  }\n\n  componentDidMount() {\n    TextTemplateActions.fetchTextTemplates(this.props.genericEl.type);\n  }\n\n  handleChange() {\n    const { genericEl, handleElChanged } = this.props;\n    handleElChanged(genericEl);\n  }\n\n  handleSpChange(genericEl, cb) {\n    const { handleElChanged } = this.props;\n    handleElChanged(genericEl);\n    cb();\n  }\n\n  handleAccordionOpen(key) {\n    this.setState({ activeContainer: key });\n  }\n\n  handleAdd() {\n    const { genericEl, handleElChanged } = this.props;\n    const container = Container.buildEmpty();\n    container.container_type = 'analysis';\n    container.extended_metadata.content = { ops: [{ insert: '' }] };\n\n    if (genericEl.container.children.length === 0) {\n      const analyses = Container.buildEmpty();\n      analyses.container_type = 'analyses';\n      genericEl.container.children.push(analyses);\n    }\n\n    genericEl.container.children.filter(element => ~element.container_type.indexOf('analyses'))[0].children.push(container);\n\n    const newKey = genericEl.container.children.filter(element => ~element.container_type.indexOf('analyses'))[0].children.length - 1;\n\n    this.handleAccordionOpen(newKey);\n    handleElChanged(genericEl);\n  }\n\n  handleRemove(container) {\n    const { genericEl, handleElChanged } = this.props;\n    container.is_deleted = true;\n    handleElChanged(genericEl);\n  }\n\n  handleUndo(container) {\n    const { genericEl, handleElChanged } = this.props;\n    container.is_deleted = false;\n    handleElChanged(genericEl);\n  }\n\n  addButton() {\n    const { readOnly } = this.props;\n    if (!readOnly) {\n      return (\n        <Button className=\"button-right\" bsSize=\"xsmall\" bsStyle=\"success\" onClick={() => this.handleAdd()}>\n          <i className=\"fa fa-plus\" aria-hidden=\"true\" />\n          {' '}\n          Add analysis\n        </Button>\n      );\n    }\n    return <div />;\n  }\n\n  renderNoAct(genericEl, readOnly) {\n    const { linkedAis, handleSubmit } = this.props;\n    if (linkedAis.length < 1) return null; // if layer has no linked analyses\n    if (genericEl.container != null) {\n      const analysesContainer = genericEl.container.children.filter(element => ~element.container_type.indexOf('analyses'));\n      if (analysesContainer.length === 1 && analysesContainer[0].children.length > 0) {\n        return (\n          <div className=\"gen_linked_container_group\">\n            <h5>Linked Analyses</h5>\n            <GenericContainerGroup\n              ae={analysesContainer}\n              readOnly={readOnly}\n              generic={genericEl}\n              fnChange={this.handleChange}\n              fnUndo={this.handleUndo}\n              fnRemove={this.handleRemove}\n              noAct\n              linkedAis={linkedAis}\n              handleSubmit={handleSubmit}\n            />\n          </div>\n        );\n      }\n      return null;\n    }\n    return null;\n  }\n\n  render() {\n    const {\n      genericEl, readOnly, noAct, handleSubmit\n    } = this.props;\n    if (noAct) return this.renderNoAct(genericEl, readOnly);\n    if (genericEl.container != null) {\n      const analysesContainer = genericEl.container.children.filter(element => ~element.container_type.indexOf('analyses'));\n      if (analysesContainer.length === 1 && analysesContainer[0].children.length > 0) {\n        return (\n          <div>\n            <p className=\"generic-add-analysis\">\n              &nbsp;\n              {this.addButton()}\n            </p>\n            <GenericContainerGroup\n              ae={analysesContainer}\n              readOnly={readOnly}\n              generic={genericEl}\n              fnChange={this.handleChange}\n              fnUndo={this.handleUndo}\n              fnRemove={this.handleRemove}\n              handleSubmit={handleSubmit}\n            />\n          </div>\n        );\n      }\n      return (\n        <div>\n          <p className=\"noAnalyses-warning generic-add-analysis\">\n            There are currently no Analyses.\n            {this.addButton()}\n          </p>\n        </div>\n      );\n    }\n    return (\n      <div>\n        <p className=\"noAnalyses-warning\">\n          There are currently no Analyses.\n        </p>\n      </div>\n    );\n  }\n}\n\nGenericElDetailsContainers.propTypes = {\n  readOnly: PropTypes.bool.isRequired,\n  parent: PropTypes.object,\n  genericEl: PropTypes.object.isRequired,\n  handleElChanged: PropTypes.func.isRequired,\n  handleSubmit: PropTypes.func.isRequired,\n  noAct: PropTypes.bool,\n  linkedAis: PropTypes.array\n};\nGenericElDetailsContainers.defaultProps = { noAct: false, linkedAis: [] };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Select from 'react-select';\nimport { findIndex } from 'lodash';\nimport CollectionStore from 'src/stores/alt/stores/CollectionStore';\nexport default class CollectionSelect extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      unsharedRoots: CollectionStore.getState().lockedRoots || [],\n      value: props.value,\n      options: []\n    };\n    this.onColChange = this.onColChange.bind(this);\n    this.onColSelectChange = this.onColSelectChange.bind(this);\n    this.ColOptions = this.ColOptions.bind(this);\n  }\n\n  componentDidMount() {\n    CollectionStore.listen(this.onColChange);\n    this.ColOptions();\n  }\n\n  onColChange(state) {\n    if (state.unsharedRoots != this.state.unsharedRoots) {\n      this.setState({\n        unsharedRoots: state.unsharedRoots\n      });\n    }\n  }\n\n  onColSelectChange(e, reset = false) {\n    const val = reset === false ? (e && e.value) : null;\n    this.setState({\n      value: val\n    });\n    this.props.onChange(val);\n  }\n\n  makeTree(tree, collections, depth) {\n    collections.forEach((collection) => {\n      if (collection.label == 'All') {\n        return;\n      }\n      tree.push({ id: collection.id, label: collection.label, depth, first: collection.first });\n      if (collection.children && collection.children.length > 0) {\n        this.makeTree(tree, collection.children, depth + 1);\n      }\n    });\n  }\n\n  ColOptions() {\n    const { unsharedRoots } = this.state;\n\n    const cAllTree = [];\n    this.makeTree(cAllTree, unsharedRoots || [], 0);\n\n    if (cAllTree.length === 0) {\n      this.setState({\n        options: []\n      });\n    } else {\n      const newOptions = cAllTree.map((leaf) => {\n        const indent = \"\\u00A0\".repeat(leaf.depth * 3 + 1);\n        const className = leaf.first ? \"separator\" : \"\";\n        return {\n          value: leaf.id,\n          label: indent + leaf.label,\n          className\n        };\n      }) || [];\n      this.setState({\n        options: newOptions\n      });\n    }\n  }\n\n  render() {\n    const { options, value } = this.state;\n    if (value != null && options != null && options.length > 0\n      && findIndex(options, ['value', value]) < 0) {\n      this.onColSelectChange(null, true);\n    }\n    return (\n      <Select\n        id=\"modal-collection-id-select\"\n        options={options}\n        value={value}\n        className=\"status-select\"\n        onChange={this.onColSelectChange}\n      />\n    );\n  }\n}\n\nCollectionSelect.propTypes = {\n  value: PropTypes.number,\n  onChange: PropTypes.func.isRequired,\n};\n\nCollectionSelect.defaultProps = {\n  value: 0\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport uuid from 'uuid';\n\nimport ClipboardActions from 'src/stores/alt/actions/ClipboardActions';\nimport CollectionSelect from 'src/components/common/CollectionSelect';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\n\nconst Notification = props =>\n  (\n    NotificationActions.add({\n      title: props.title,\n      message: props.msg,\n      level: props.lvl,\n      position: 'tc',\n      dismissible: 'button',\n      uid: uuid.v4()\n    })\n  );\n\n\nexport default class CopyElementModal extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showModal: false,\n      selectedCol: props.defCol\n    };\n    this.handleModalClose = this.handleModalClose.bind(this);\n    this.handleModalShow = this.handleModalShow.bind(this);\n    this.onColSelectChange = this.onColSelectChange.bind(this);\n    this.copyElement = this.copyElement.bind(this);\n  }\n\n  componentDidMount() {\n  }\n\n  onColSelectChange(e) {\n    this.setState({ selectedCol: e });\n  }\n\n  handleModalShow(e) {\n    this.setState({ showModal: true });\n  }\n\n  handleModalClose(e) {\n    this.setState({ showModal: false });\n  }\n\n  copyElement() {\n    const { selectedCol } = this.state;\n    const { element } = this.props;\n    if (selectedCol == null) {\n      Notification({ title: 'Collection can not be empty', lvl: 'error', msg: 'Collection can not be empty' });\n      return false;\n    }\n\n    if (element.type === 'sample') {\n      ClipboardActions.fetchElementAndBuildCopy(element, selectedCol, 'copy_sample');\n    } else if (element.type === 'reaction') {\n      ElementActions.copyReaction(element, selectedCol);\n    } else if (element.type === 'research_plan') {\n      ElementActions.copyResearchPlan(element, selectedCol);\n    } else {\n      ElementActions.copyElement(element, selectedCol);\n    }\n\n    this.setState({ showModal: false });\n    return true;\n  }\n\n  render() {\n    const { element } = this.props;\n    const { showModal, selectedCol } = this.state;\n    const canCopy = element.can_copy ? '' : 'none';\n\n    return (\n      <span>\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"CopyElement\">Copy</Tooltip>}>\n          <Button id=\"copy-element-btn\" style={{ marginLeft: '2px', display: `${canCopy}` }} bsSize=\"xsmall\" className=\"button-right\" bsStyle=\"success\" onClick={this.handleModalShow}>\n            <i className=\"fa fa-clone\" />\n          </Button>\n        </OverlayTrigger>\n        <Modal show={showModal} onHide={this.handleModalClose}>\n          <Modal.Header closeButton>\n            <Modal.Title>Copy</Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <span className=\"select-collection\">\n              <b>Copy to Collection</b>\n              <span className=\"select-component\">\n                <CollectionSelect\n                  value={selectedCol}\n                  onChange={this.onColSelectChange}\n                />\n              </span>\n            </span>\n          </Modal.Body>\n          <Modal.Footer>\n            <Button bsStyle=\"primary\" onClick={this.handleModalClose} className=\"pull-left\">Close</Button>\n            <Button id=\"submit-copy-element-btn\" bsStyle=\"success\" onClick={this.copyElement} className=\"pull-left\">Copy</Button>\n          </Modal.Footer>\n        </Modal>\n      </span>\n    );\n  }\n}\n\nCopyElementModal.propTypes = {\n  // eslint-disable-next-line react/forbid-prop-types\n  element: PropTypes.object.isRequired,\n  defCol: PropTypes.number\n};\n\n\nCopyElementModal.defaultProps = {\n  defCol: null\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Dropzone from 'react-dropzone';\nimport {\n  FormGroup,\n  Button,\n  Row,\n  Col,\n  Tooltip,\n  ControlLabel,\n  ListGroup,\n  ListGroupItem,\n  OverlayTrigger,\n} from 'react-bootstrap';\nimport { last, findKey, values } from 'lodash';\nimport EditorFetcher from 'src/fetchers/EditorFetcher';\nimport ImageModal from 'src/components/common/ImageModal';\nimport SpinnerPencilIcon from 'src/components/common/SpinnerPencilIcon';\nimport { previewContainerImage } from 'src/utilities/imageHelper';\nimport Utils from 'src/utilities/Functions';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nconst editorTooltip = (exts) => (\n  <Tooltip id=\"editor_tooltip\">\n    Available extensions:\n    {' '}\n    {exts}\n  </Tooltip>\n);\nconst downloadTooltip = (\n  <Tooltip id=\"download_tooltip\">Download attachment</Tooltip>\n);\nconst defaultImgStyle = { position: 'absolute', width: 60, height: 60 };\n\nexport default class GenericAttachments extends Component {\n  constructor(props) {\n    super(props);\n    this.state = { attachmentEditor: false, extension: null };\n    this.editorInitial = this.editorInitial.bind(this);\n  }\n\n  componentDidMount() {\n    this.editorInitial();\n  }\n\n  handleEdit(att) {\n    const { onEdit } = this.props;\n    const attachment = att;\n    const fileType = last(attachment.filename.split('.'));\n    const docType = this.documentType(attachment.filename);\n    EditorFetcher.startEditing({ attachment_id: attachment.id }).then(\n      (result) => {\n        if (result.token) {\n          // eslint-disable-next-line max-len\n          const url = `/editor?id=${attachment.id}&docType=${docType}&fileType=${fileType}&title=${attachment.filename}&key=${result.token}&only_office_token=${result.only_office_token}`;\n          window.open(url, '_blank');\n          attachment.aasm_state = 'oo_editing';\n          attachment.updated_at = new Date();\n          onEdit(attachment);\n        } else {\n          NotificationActions.add({\n            message: 'Unauthorized to edit this file.',\n            level: 'error',\n            position: 'tc',\n          });\n        }\n      }\n    );\n  }\n\n  documentType(filename) {\n    const { extension } = this.state;\n    const ext = last(filename.split('.'));\n    const docType = findKey(extension, (o) => o.includes(ext));\n    if (typeof docType === 'undefined' || !docType) {\n      return null;\n    }\n    return docType;\n  }\n\n  editorInitial() {\n    EditorFetcher.initial().then((result) => {\n      this.setState({\n        attachmentEditor: result.installed,\n        extension: result.ext,\n      });\n    });\n  }\n\n  renderRemoveAttachmentButton(attachment) {\n    const { onDelete, readOnly } = this.props;\n    return (\n      <Button\n        bsSize=\"xsmall\"\n        bsStyle=\"danger\"\n        className=\"button-right\"\n        onClick={() => onDelete(attachment, true)}\n        disabled={readOnly}\n      >\n        <i className=\"fa fa-trash-o\" aria-hidden=\"true\" />\n      </Button>\n    );\n  }\n\n  renderListGroupItem(attachment) {\n    const { attachmentEditor, extension } = this.state;\n    const { onDelete } = this.props;\n    const updateTime = new Date(attachment.updated_at);\n    updateTime.setTime(updateTime.getTime() + 15 * 60 * 1000);\n    const fetchId = attachment.id;\n    const previewImg = typeof fetchId !== 'number'\n      ? attachment.preview\n      : previewContainerImage({\n        preview_img: { preview: attachment?.thumbnail || 'not available' },\n      });\n    let imgStyle = { ...defaultImgStyle, cursor: 'pointer' };\n    let hasPop = true;\n    let fetchNeeded = true;\n    if (\n      previewImg.includes('/images/wild_card/not_available.svg')\n      || typeof fetchId !== 'number'\n    ) {\n      imgStyle = defaultImgStyle;\n      hasPop = false;\n      fetchNeeded = false;\n    }\n    const isEditing = attachment.aasm_state === 'oo_editing'\n      && new Date().getTime() < updateTime;\n    const docType = this.documentType(attachment.filename);\n    const editDisable = !attachmentEditor || isEditing || attachment.is_new || docType === null;\n    const styleEditor = !attachmentEditor || docType === null ? 'none' : '';\n    if (attachment.is_deleted) {\n      return (\n        <div>\n          <Row>\n            <Col md={1} />\n            <Col md={9}>\n              <strike>{attachment.filename}</strike>\n            </Col>\n            <Col md={2}>\n              <Button\n                bsSize=\"xsmall\"\n                bsStyle=\"danger\"\n                className=\"button-right\"\n                onClick={() => onDelete(attachment, false)}\n              >\n                <i className=\"fa fa-undo\" aria-hidden=\"true\" />\n              </Button>\n            </Col>\n          </Row>\n        </div>\n      );\n    }\n    return (\n      <div>\n        <Row>\n          <Col md={1}>\n            <div\n              className=\"analysis-header order\"\n              style={{ width: '60px', height: '60px' }}\n            >\n              <div\n                className=\"preview\"\n                style={{ width: '60px', height: '60px' }}\n              >\n                <ImageModal\n                  imageStyle={imgStyle}\n                  hasPop={hasPop}\n                  previewObject={{ src: previewImg }}\n                  popObject={{\n                    title: attachment.filename,\n                    src: previewImg,\n                    fetchNeeded,\n                    fetchId,\n                  }}\n                />\n              </div>\n            </div>\n          </Col>\n          <Col md={9}>{attachment.filename}</Col>\n          <Col md={2}>\n            {this.renderRemoveAttachmentButton(attachment)}\n            <OverlayTrigger placement=\"top\" overlay={downloadTooltip}>\n              <Button\n                bsSize=\"xsmall\"\n                className=\"button-right\"\n                bsStyle=\"primary\"\n                onClick={() => Utils.downloadFile({\n                  contents: `/api/v1/attachments/${attachment.id}`,\n                  name: attachment.filename,\n                })}\n              >\n                <i className=\"fa fa-download\" aria-hidden=\"true\" />\n              </Button>\n            </OverlayTrigger>\n            <OverlayTrigger\n              placement=\"left\"\n              overlay={editorTooltip(values(extension).join(','))}\n            >\n              <Button\n                style={{ display: styleEditor }}\n                bsSize=\"xsmall\"\n                className=\"button-right\"\n                bsStyle=\"success\"\n                disabled={editDisable}\n                onClick={() => this.handleEdit(attachment)}\n              >\n                <SpinnerPencilIcon\n                  spinningLock={!attachmentEditor || isEditing}\n                />\n              </Button>\n            </OverlayTrigger>\n          </Col>\n        </Row>\n      </div>\n    );\n  }\n\n  renderAttachments() {\n    const { attachments } = this.props;\n    if (attachments && attachments.length > 0) {\n      return (\n        <ListGroup>\n          {attachments.map((attachment) => (\n            <ListGroupItem key={attachment.id}>\n              {this.renderListGroupItem(attachment)}\n            </ListGroupItem>\n          ))}\n        </ListGroup>\n      );\n    }\n    return (\n      <div>\n        There are currently no attachments.\n        <br />\n      </div>\n    );\n  }\n\n  renderDropzone() {\n    const { onDrop, readOnly } = this.props;\n    return (\n      <div\n        className={`research-plan-dropzone-${\n          readOnly ? 'disable' : 'enable'\n        }`}\n      >\n        <Dropzone onDrop={(files) => onDrop(files)} className=\"zone\">\n          Drop Files, or Click to Select.\n        </Dropzone>\n      </div>\n    );\n  }\n\n  render() {\n    return (\n      <Row>\n        <Col md={12}>\n          <FormGroup>\n            <ControlLabel>Files</ControlLabel>\n            {this.renderAttachments()}\n            {this.renderDropzone()}\n          </FormGroup>\n        </Col>\n      </Row>\n    );\n  }\n}\n\nGenericAttachments.propTypes = {\n  attachments: PropTypes.arrayOf(PropTypes.object),\n  onDrop: PropTypes.func.isRequired,\n  onDelete: PropTypes.func.isRequired,\n  onEdit: PropTypes.func.isRequired,\n  readOnly: PropTypes.bool.isRequired,\n};\n\nGenericAttachments.defaultProps = { attachments: [] };\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport uuid from 'uuid';\n\nimport { PreviewModal } from 'chem-generic-ui';\nimport { camelize, pascalize } from 'humps';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport GenericElsFetcher from 'src/fetchers/GenericElsFetcher';\nimport { notification } from 'src/apps/generic/Utils';\n\nconst RevisionViewerBtn = props => {\n  if (props.generic.is_new) return null;\n  const [showModal, setShowModal] = useState(false);\n\n  const handleRetrieve = (revision, cb) => {\n    setShowModal(false);\n    return props.fnRetrieve(revision, cb);\n  };\n\n  const handleDelete = (params, cb) => {\n    const klass = pascalize(props.generic.properties.klass);\n    GenericElsFetcher.deleteRevisions({\n      id: params.id,\n      element_id: props.generic.id,\n      klass,\n    }).then(response => {\n      if (response.error) {\n        notification({\n          title: 'Delete Revision',\n          lvl: 'error',\n          msg: response.error,\n        });\n      } else {\n        cb();\n      }\n    });\n  };\n\n  return (\n    <>\n      <OverlayTrigger\n        delayShow={1000}\n        placement=\"top\"\n        overlay={<Tooltip id={uuid.v4()}>click to view the revisions</Tooltip>}\n      >\n        <Button\n          onClick={() => setShowModal(!showModal)}\n          bsSize=\"small\"\n          bsStyle=\"primary\"\n        >\n          <i className=\"fa fa-book\" aria-hidden=\"true\" /> Revision\n        </Button>\n      </OverlayTrigger>\n      <PreviewModal\n        fnRetrieve={handleRetrieve}\n        fnDelete={handleDelete}\n        showModal={showModal || false}\n        fnClose={() => setShowModal(false)}\n        fetcher={GenericElsFetcher}\n        element={props.generic}\n        fetcherFn={camelize(\n          `fetch_${props.generic.properties.klass}_revisions`\n        )}\n      />\n    </>\n  );\n};\n\nRevisionViewerBtn.propTypes = {\n  generic: PropTypes.object.isRequired,\n  fnRetrieve: PropTypes.func,\n};\nRevisionViewerBtn.defaultProps = { fnRetrieve: () => {} };\nexport default RevisionViewerBtn;\n","/* eslint-disable no-restricted-globals */\n/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  GenInterface, GenButtonReload, GenButtonExport, GenFlowViewerBtn\n} from 'chem-generic-ui';\nimport { Panel, ButtonToolbar } from 'react-bootstrap';\nimport { renderFlowModal } from 'src/apps/generic/Utils';\nimport RevisionViewerBtn from 'src/components/generic/RevisionViewerBtn';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\n\nclass GenericSGDetails extends Component {\n  constructor(props) {\n    super(props);\n    this.handleReload = this.handleReload.bind(this);\n    this.handleExport = this.handleExport.bind(this);\n    this.handleRetrieveRevision = this.handleRetrieveRevision.bind(this);\n  }\n\n  handleReload(segment) {\n    const { onChange } = this.props;\n    onChange(segment);\n  }\n\n  handleExport() {\n    const { segment } = this.props;\n    ElementActions.exportElement(segment, 'Segment', 'docx');\n  }\n\n  handleRetrieveRevision(revision, cb) {\n    const { segment, onChange } = this.props;\n    segment.properties = revision;\n    segment.changed = true;\n    cb();\n    onChange(segment);\n  }\n\n  elementalPropertiesItem(segment) {\n    const { onChange, fnNavi, isSearch } = this.props;\n    const layersLayout = (\n      <GenInterface\n        generic={segment}\n        fnChange={onChange}\n        extLayers={[]}\n        genId={0}\n        isPreview={false}\n        isSearch={isSearch}\n        isActiveWF={false}\n        fnNavi={fnNavi}\n      />\n    );\n    return <div style={{ margin: '5px' }}>{layersLayout}</div>;\n  }\n\n  elementalToolbar() {\n    const { segment, klass } = this.props;\n    return (\n      <ButtonToolbar style={{ margin: '5px 0px' }}>\n        <GenButtonExport\n          generic={segment}\n          fnExport={this.handleExport}\n        />\n        <GenFlowViewerBtn generic={segment} fnClick={renderFlowModal} />\n        <RevisionViewerBtn\n          fnRetrieve={this.handleRetrieveRevision}\n          generic={segment}\n        />\n        <GenButtonReload\n          klass={klass}\n          generic={segment}\n          fnReload={this.handleReload}\n        />\n      </ButtonToolbar>\n    );\n  }\n\n  render() {\n    const { uiCtrl, segment } = this.props;\n    if (!uiCtrl || Object.keys(segment).length === 0) return null;\n    return (\n      <div>\n        {this.elementalToolbar()}\n        <Panel>\n          <Panel.Body\n            style={{ position: 'relative', minHeight: 260, overflowY: 'unset' }}\n          >\n            {this.elementalPropertiesItem(segment)}\n          </Panel.Body>\n        </Panel>\n      </div>\n    );\n  }\n}\n\nGenericSGDetails.propTypes = {\n  uiCtrl: PropTypes.bool.isRequired,\n  segment: PropTypes.object,\n  klass: PropTypes.object,\n  onChange: PropTypes.func.isRequired,\n  fnNavi: PropTypes.func,\n  isSearch: PropTypes.bool,\n};\nGenericSGDetails.defaultProps = {\n  segment: {},\n  klass: {},\n  fnNavi: () => {},\n  isSearch: false,\n};\n\nexport default GenericSGDetails;\n","/* eslint-disable no-restricted-globals */\nimport React from 'react';\nimport { findIndex, cloneDeep } from 'lodash';\nimport Aviator from 'aviator';\nimport { OverlayTrigger, Tooltip, Tab } from 'react-bootstrap';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport GenericSGDetails from 'src/components/generic/GenericSGDetails';\nimport Segment from 'src/models/Segment';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\n\nconst onNaviClick = (type, id) => {\n  const { currentCollection, isSync } = UIStore.getState();\n  const collectionUrl = !isNaN(id)\n    ? `${currentCollection.id}/${type}/${id}`\n    : `${currentCollection.id}/${type}`;\n  Aviator.navigate(\n    isSync ? `/scollection/${collectionUrl}` : `/collection/${collectionUrl}`,\n    { silent: true },\n  );\n  if (type === 'reaction') {\n    ElementActions.fetchReactionById(id);\n  } else if (type === 'sample') {\n    ElementActions.fetchSampleById(id);\n  } else {\n    ElementActions.fetchGenericElById(id);\n  }\n};\n\nconst addSegmentTabs = (element, onChange, contentMap) => {\n  const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n  const uiCtrl = MatrixCheck(currentUser.matrix, 'segment');\n  if (!uiCtrl) return;\n  let segmentKlasses = (UserStore.getState() && UserStore.getState().segmentKlasses) || [];\n  segmentKlasses = segmentKlasses.filter(\n    (s) => s.element_klass && s.element_klass.name === element.type\n  );\n  segmentKlasses.forEach((klass) => {\n    const ttl = <Tooltip id=\"tooltip\">{klass.desc}</Tooltip>;\n    const idx = findIndex(\n      element.segments,\n      (o) => o.segment_klass_id === klass.id\n    );\n    if (idx < 0 && !klass.is_active) return;\n    let segment;\n    if (idx > -1) {\n      segment = element.segments[idx];\n    } else {\n      segment = Segment.buildEmpty(cloneDeep(klass));\n    }\n    const title = (\n      <OverlayTrigger placement=\"bottom\" delayShow={1000} overlay={ttl}>\n        <div>{klass.label}</div>\n      </OverlayTrigger>\n    );\n    contentMap[klass.label] = (\n      <Tab\n        eventKey={klass.label}\n        key={`${element.type}_${element.id}_${klass.id}`}\n        title={title}\n      >\n        <GenericSGDetails\n          uiCtrl\n          segment={segment}\n          klass={klass}\n          onChange={onChange}\n          fnNavi={onNaviClick}\n        />\n      </Tab>\n    );\n  });\n};\n\nconst SegmentTabs = (element, onChange) => {\n  const result = {};\n  const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n  const uiCtrl = MatrixCheck(currentUser.matrix, 'segment');\n  if (!uiCtrl) return {};\n  let segmentKlasses = (UserStore.getState() && UserStore.getState().segmentKlasses) || [];\n  segmentKlasses = segmentKlasses.filter(\n    (s) => s.element_klass && s.element_klass.name === element.type\n  );\n  segmentKlasses.forEach((klass) => {\n    const ttl = <Tooltip id=\"tooltip\">{klass.desc}</Tooltip>;\n    const idx = findIndex(\n      element.segments,\n      (o) => o.segment_klass_id === klass.id\n    );\n    let segment = {};\n    if (idx > -1) {\n      segment = element.segments[idx];\n    } else {\n      segment = Segment.buildEmpty(cloneDeep(klass));\n    }\n    const title = (\n      <OverlayTrigger placement=\"bottom\" delayShow={1000} overlay={ttl}>\n        <div>{klass.label}</div>\n      </OverlayTrigger>\n    );\n\n    const tabKey = klass.label;\n    result[tabKey] = () => (\n      <Tab eventKey={tabKey} key={tabKey} title={title}>\n        <GenericSGDetails\n          uiCtrl={uiCtrl}\n          segment={segment}\n          klass={klass}\n          onChange={onChange}\n          fnNavi={onNaviClick}\n        />\n      </Tab>\n    );\n  });\n  return result;\n};\n\nexport { SegmentTabs, addSegmentTabs };\n","import 'whatwg-fetch';\n// eslint-disable-next-line no-unused-vars\nimport _ from 'lodash';\n\nfunction isEmpty(value) {\n  return (value === null || value === undefined);\n}\n\nfunction getAsUriParameters(data) {\n  let url = '';\n  Object.keys(data).forEach((key) => {\n    if (!isEmpty(data[key])) {\n      url += `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}&`;\n    }\n  });\n  return url.substring(0, url.length - 1);\n}\n\nexport default class CalendarEntryFetcher {\n  static getEntries(params) {\n    return fetch(`/api/v1/calendar_entries?${getAsUriParameters(params)}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => response.json()).then((json) => json.entries);\n  }\n\n  static getEventableUsers(params) {\n    return fetch(`/api/v1/calendar_entries/eventable_users?${getAsUriParameters(params)}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => response.json()).then((json) => json.users);\n  }\n\n  static async deleteById(id) {\n    return fetch(`/api/v1/calendar_entries/${id}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => response.json());\n  }\n\n  static async create(params) {\n    return fetch('/api/v1/calendar_entries', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => response.json());\n  }\n\n  static async update(params) {\n    return fetch(`/api/v1/calendar_entries/${params.id}`, {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => response.json());\n  }\n}\n","/* eslint-disable class-methods-use-this */\nimport alt from 'src/stores/alt/alt';\nimport CalendarEntryFetcher from 'src/fetchers/CalendarEntryFetcher';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport { elementShowOrNew } from 'src/utilities/routesUtils';\n\nexport const GET_ENTRIES_LOADING = 'getEntriesLoading';\nexport const UPDATE_ENTRY_LOADING = 'updateEntryLoading';\nexport const DELETE_ENTRY_LOADING = 'deleteEntryLoading';\n\nfunction transformEntryForApi(entry) {\n  return {\n    id: entry.id,\n    title: entry.title,\n    description: entry.description,\n    kind: entry.kind,\n    start_time: entry.start.toISOString(),\n    end_time: entry.end.toISOString(),\n    created_by: entry.created_by,\n    eventable_type: entry.eventableType,\n    eventable_id: entry.eventableId,\n    notify_user_ids: entry.notifyUsers?.map((e) => e.value),\n  };\n}\n\nfunction transformEntryFromApi(entry) {\n  return {\n    id: entry.id,\n    title: entry.title,\n    description: entry.description,\n    kind: entry.kind,\n    start: new Date(entry.start_time),\n    end: new Date(entry.end_time),\n    created_by: entry.created_by,\n    eventableType: entry.eventable_type,\n    eventableId: entry.eventable_id,\n    user_email: entry.user_email,\n    user_name_abbreviation: entry.user_name_abbreviation,\n    element_klass_icon: entry.element_klass_icon,\n    element_klass_name: entry.element_klass_name,\n    element_name: entry.element_name,\n    accessible: entry.accessible,\n    element_short_label: entry.element_short_label,\n    notified_users: entry.notified_users,\n  };\n}\n\nclass CalendarActions {\n  startLoading(val) {\n    return val;\n  }\n\n  showCalendar(params) {\n    this.setViewParams(params);\n    return null;\n  }\n\n  hideCalendar() {\n    return null;\n  }\n\n  setViewParams(obj) {\n    this.getEntries({\n      start: obj.start,\n      end: obj.end,\n      eventableType: obj.eventableType,\n      eventableId: obj.eventableId,\n      with_shared_collections: obj.showSharedCollectionEntries\n    });\n    return obj;\n  }\n\n  getEventableUsers(collectionId) {\n    return (dispatch) => {\n      CalendarEntryFetcher.getEventableUsers(collectionId).then((users) => {\n        dispatch(users);\n      }).catch((err) => {\n        dispatch(err);\n      });\n    };\n  }\n\n  clearEventableUsers() {\n    return (dispatch) => { dispatch(null); };\n  }\n\n  getEntries(params) {\n    this.startLoading(GET_ENTRIES_LOADING);\n    const requestParams = {};\n    requestParams.start_time = params.start.toISOString();\n    requestParams.end_time = params.end.toISOString();\n    requestParams.created_by = UserStore.getState().currentUser?.id;\n    requestParams.eventable_type = params.eventableType;\n    requestParams.eventable_id = params.eventableId;\n    requestParams.with_shared_collections = params.with_shared_collections;\n\n    return (dispatch) => {\n      CalendarEntryFetcher.getEntries(requestParams).then((apiEntries) => {\n        const entries = [];\n        for (let i = 0; i < apiEntries.length; i += 1) {\n          entries.push(transformEntryFromApi(apiEntries[i]));\n        }\n\n        dispatch(entries);\n      }).catch((err) => {\n        dispatch(err);\n      });\n    };\n  }\n\n  createEntry(entry) {\n    this.startLoading(UPDATE_ENTRY_LOADING);\n    return (dispatch) => {\n      CalendarEntryFetcher.create(transformEntryForApi(entry)).then((response) => {\n        dispatch(transformEntryFromApi(response));\n      }).catch((err) => {\n        dispatch(err);\n      });\n    };\n  }\n\n  updateEntry(entry) {\n    this.startLoading(UPDATE_ENTRY_LOADING);\n    return (dispatch) => {\n      CalendarEntryFetcher.update(transformEntryForApi(entry)).then((response) => {\n        dispatch(transformEntryFromApi(response));\n      }).catch((err) => {\n        dispatch(err);\n      });\n    };\n  }\n\n  deleteEntry(id) {\n    this.startLoading(DELETE_ENTRY_LOADING);\n    return (dispatch) => {\n      CalendarEntryFetcher.deleteById(id).then((response) => {\n        dispatch(transformEntryFromApi(response));\n      }).catch((err) => {\n        dispatch(err);\n      });\n    };\n  }\n\n  navigateToElement(eventableType, eventableId) {\n    const type = eventableType.toLowerCase();\n\n    const e = { type, params: {} };\n    e.params[`${type}ID`] = eventableId;\n\n    if (type === 'element') {\n      e.klassType = 'GenericEl';\n    }\n\n    elementShowOrNew(e);\n  }\n}\n\nexport default alt.createActions(CalendarActions);\n","import alt from 'src/stores/alt/alt';\nimport CalendarActions, {\n  GET_ENTRIES_LOADING,\n  UPDATE_ENTRY_LOADING,\n  DELETE_ENTRY_LOADING,\n} from 'src/stores/alt/actions/CalendarActions';\n\nexport const CalendarTypes = {\n  default: [\n    'reservation', 'duration', 'handover', 'reminder', 'report', 'meeting', 'maintenance', 'availability'\n  ],\n  Reaction: ['reminder', 'report'],\n  Sample: ['handover', 'reminder', 'report'],\n  ResearchPlan: ['handover', 'reminder', 'report'],\n  Screen: ['reminder', 'report'],\n  // Element all types like default\n};\n\nclass CalendarStore {\n  constructor() {\n    this.state = {\n      error: null,\n      [GET_ENTRIES_LOADING]: false,\n      [UPDATE_ENTRY_LOADING]: false,\n      [DELETE_ENTRY_LOADING]: false,\n      show: false,\n      showSharedCollectionEntries: false,\n      entries: [],\n      collectionUsers: []\n    };\n\n    this.bindListeners({\n      getEntries: CalendarActions.getEntries,\n      getEventableUsers: CalendarActions.getEventableUsers,\n      clearEventableUsers: CalendarActions.clearEventableUsers,\n      handleShow: CalendarActions.showCalendar,\n      handleHide: CalendarActions.hideCalendar,\n      updateEntry: [CalendarActions.createEntry, CalendarActions.updateEntry],\n      deleteEntry: CalendarActions.deleteEntry,\n      handleLoading: CalendarActions.startLoading,\n      setViewParams: CalendarActions.setViewParams\n    });\n  }\n\n  getEntries(event) {\n    if (typeof event === 'string') {\n      this.setState({\n        [GET_ENTRIES_LOADING]: false,\n        entries: [],\n        error: event\n      });\n    } else {\n      this.setState({\n        [GET_ENTRIES_LOADING]: false,\n        entries: event,\n        error: ''\n      });\n    }\n  }\n\n  getEventableUsers(users) {\n    this.setState({\n      collectionUsers: users,\n    });\n  }\n\n  clearEventableUsers() {\n    this.setState({\n      collectionUsers: [],\n    });\n  }\n\n  setViewParams(obj) {\n    this.setState(obj);\n  }\n\n  handleLoading(key) {\n    this.setState({ [key]: true });\n  }\n\n  handleShow() {\n    this.setState({ show: true });\n  }\n\n  handleHide() {\n    this.setState({ show: false });\n  }\n\n  deleteEntry(event) {\n    if (typeof event === 'string') {\n      this.setState({\n        [DELETE_ENTRY_LOADING]: false,\n        error: event\n      });\n    } else {\n      const { entries } = this.state;\n      for (let i = 0; i < entries.length; i += 1) {\n        if (entries[i].id === event.id) {\n          entries.splice(i, 1);\n          break;\n        }\n      }\n      this.setState({\n        [DELETE_ENTRY_LOADING]: false,\n        entries,\n        error: ''\n      });\n    }\n  }\n\n  updateEntry(event) {\n    if (typeof event === 'string') {\n      this.setState({\n        [UPDATE_ENTRY_LOADING]: false,\n        error: event\n      });\n    } else {\n      const { entries } = this.state;\n      let isUpdate = false;\n      for (let i = 0; i < entries.length; i += 1) {\n        if (entries[i].id === event.id) {\n          entries[i] = event;\n          isUpdate = true;\n          break;\n        }\n      }\n      if (!isUpdate) {\n        entries.push(event);\n      }\n\n      this.setState({\n        [UPDATE_ENTRY_LOADING]: false,\n        entries,\n        error: ''\n      });\n    }\n  }\n}\n\nexport default alt.createStore(CalendarStore, 'CalendarStore');\n","import React, { Component } from 'react';\nimport {\n  Button,\n  ButtonGroup,\n  Nav,\n  NavItem,\n} from 'react-bootstrap';\nimport CalendarActions from 'src/stores/alt/actions/CalendarActions';\nimport CalendarStore from 'src/stores/alt/stores/CalendarStore';\nimport PropTypes from 'prop-types';\n\nfunction getDefaultDateTimeRange() {\n  const date = new Date();\n  const weekStart = new Date().setDate(date.getDate() - (date.getDay() || 7));\n  const weekEnd = new Date().setDate(date.getDate() - date.getDay() + 7);\n  return { start: new Date(weekStart), end: new Date(weekEnd) };\n}\n\nexport default class OpenCalendarButton extends Component {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n  }\n\n  onClick() {\n    const { start, end, showSharedCollectionEntries } = CalendarStore.getState();\n    const params = {};\n    if (!start || !end) {\n      const range = getDefaultDateTimeRange();\n      params.start = range.start;\n      params.end = range.end;\n    } else {\n      params.start = start;\n      params.end = end;\n    }\n    const { eventableType, eventableId } = this.props;\n    params.eventableType = eventableType;\n    params.eventableId = eventableId;\n    params.showSharedCollectionEntries = showSharedCollectionEntries;\n\n    CalendarActions.showCalendar(params);\n  }\n\n  render() {\n    const { isPanelHeader } = this.props;\n    if (isPanelHeader) {\n      return (\n        <Button\n          bsSize=\"xsmall\"\n          className=\"button-right\"\n          onClick={this.onClick}\n        >\n          <i className=\"fa fa-calendar\" />\n        </Button>\n      );\n    }\n\n    return (\n      <Nav navbar pullRight>\n        <NavItem eventKey={0} className=\"navItemCalendar\">\n          <ButtonGroup className=\"navCalendarButton\">\n            <Button\n              variant=\"primary\"\n              onClick={this.onClick}\n              style={{ width: '60px' }}\n            >\n              <i className=\"fa fa-calendar indicator\" />\n            </Button>\n          </ButtonGroup>\n        </NavItem>\n      </Nav>\n    );\n  }\n}\n\nOpenCalendarButton.defaultProps = {\n  eventableType: undefined,\n  eventableId: undefined,\n  isPanelHeader: undefined,\n};\n\nOpenCalendarButton.propTypes = {\n  eventableType: PropTypes.string,\n  eventableId: PropTypes.number,\n  isPanelHeader: PropTypes.bool\n};\n","/* eslint-disable no-param-reassign */\n/* eslint-disable react/prop-types */\n/* eslint-disable react/require-default-props */\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { Button, Overlay, Popover } from 'react-bootstrap';\nimport Immutable from 'immutable';\nimport _, { isEmpty } from 'lodash';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport TabLayoutContainer from 'src/apps/mydb/elements/tabLayout/TabLayoutContainer';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\nimport { filterTabLayout, getArrayFromLayout } from 'src/utilities/CollectionTabsHelper';\n\nconst getNodeText = (node) => {\n  if (['string', 'number'].includes(typeof node)) return node;\n  if (node instanceof Array) return node.map(getNodeText).join('');\n  if (typeof node === 'object' && node) {\n    if (node.props.children) {\n      return getNodeText(node.props.children);\n    } else if (node.props.alt) {\n      return getNodeText(node.props.alt);\n    }\n    return '';\n  }\n  return '';\n};\n\nexport default class ElementDetailSortTab extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      visible: Immutable.List(),\n      hidden: Immutable.List(),\n      showTabLayoutContainer: false\n    };\n\n    this.type = props.type;\n\n    this.onChangeUser = this.onChangeUser.bind(this);\n    this.onCloseTabLayoutContainer = this.onCloseTabLayoutContainer.bind(this);\n    this.toggleTabLayoutContainer = this.toggleTabLayoutContainer.bind(this);\n\n    UserActions.fetchCurrentUser();\n  }\n\n  // to force popups to stay anchored to button\n  // as shouldUpdatePosition prop for Overlay does not work for reactions\n  resize = () => this.forceUpdate()\n\n  componentDidMount() {\n    UserStore.listen(this.onChangeUser);\n    window.addEventListener('resize', this.resize);\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChangeUser);\n    window.removeEventListener('resize', this.resize);\n  }\n\n  onChangeUser(state) {\n    let { addInventoryTab, availableTabs } = this.props;\n    const currentCollection = UIStore.getState().currentCollection;\n    const collectionTabs = currentCollection?.tabs_segment;\n    let layout;\n    if (!collectionTabs || _.isEmpty(collectionTabs[`${this.type}`])) {\n      layout = state.profile && state.profile.data && state.profile.data[`layout_detail_${this.type}`];\n    } else {\n      layout = collectionTabs[`${this.type}`];\n    }\n    const { visible, hidden } = getArrayFromLayout(layout, this.type, addInventoryTab, availableTabs);\n\n    this.setState(\n      { visible, hidden },\n      () => this.props.onTabPositionChanged(visible)\n    );\n  }\n\n  onCloseTabLayoutContainer() {\n    this.toggleTabLayoutContainer();\n    this.updateLayout();\n  }\n\n  updateLayout() {\n    const layout = filterTabLayout(this.tabLayoutContainerElement.state);\n    const currentCollection = UIStore.getState().currentCollection;\n    let tabSegment = currentCollection?.tabs_segment;\n    _.set(tabSegment, `${this.type}`, layout);\n    tabSegment = { ...tabSegment, [`${this.type}`]: layout };\n    if (currentCollection && !currentCollection.is_sync_to_me) {\n      CollectionActions.updateTabsSegment({ segment: tabSegment, cId: currentCollection.id });\n    }\n\n    const userProfile = UserStore.getState().profile;\n    const layoutName = `data.layout_detail_${this.type}`;\n    _.set(userProfile, layoutName, layout);\n\n    UserActions.updateUserProfile(userProfile);\n  }\n\n  toggleTabLayoutContainer() {\n    this.setState({ showTabLayoutContainer: !this.state.showTabLayoutContainer });\n  }\n\n  render() {\n    const currentCollection = UIStore.getState().currentCollection;\n    const tabs = currentCollection?.tabs_segment;\n    const buttonInfo = isEmpty(tabs) ? 'info' : 'default';\n    const tabLayoutContainerElement = (\n      <TabLayoutContainer\n        visible={this.state.visible}\n        hidden={this.state.hidden}\n        tabTitles={this.props.tabTitles}\n        isElementDetails\n        ref={(tabLayoutContainerElement) => this.tabLayoutContainerElement = tabLayoutContainerElement}\n      />\n    );\n    const { visible, hidden } = this.state;\n    const wd = 200 + ((visible && visible.size * 75) || 0) + ((hidden && hidden.size * 75) || 0);\n    const popoverSettings = (\n      <Popover\n        className=\"collection-overlay\"\n        id=\"popover-layout\"\n        style={{ maxWidth: 'none', width: `${wd}px`, position: 'absolute' }}\n      >\n        <div>\n          <h3 className=\"popover-title\">Tab Layout</h3>\n          <div className=\"popover-content\">\n            {tabLayoutContainerElement}\n          </div>\n        </div>\n      </Popover>\n    );\n    // Using a ref object for the Popover placement\n    let div_ref = null;\n    return (\n      <div ref={thisDiv => div_ref = thisDiv }>\n        <Button\n          bsStyle={buttonInfo}\n          bsSize=\"xsmall\"\n          className=\"button-right\"\n          ref={button => { this.tabLayoutButton = button; }}\n          onClick={this.toggleTabLayoutContainer}\n          title=\"Tabs layout for all collections can also be managed in Collection Tabs page\"\n        >\n          <i className=\"fa fa-sliders\" aria-hidden=\"true\" />\n        </Button>\n        <Overlay\n          style={{ overflowY: 'scroll'}}\n          container={div_ref}\n          onHide={this.onCloseTabLayoutContainer}\n          placement=\"bottom\"\n          rootClose\n          show={this.state.showTabLayoutContainer}\n          target={() => ReactDOM.findDOMNode(this.tabLayoutButton)}\n          shouldUpdatePosition // works alongside resize event listener\n        >\n          {popoverSettings}\n        </Overlay>\n      </div>\n    );\n  }\n}\n\nElementDetailSortTab.propTypes = {\n  onTabPositionChanged: PropTypes.func,\n  availableTabs: PropTypes.arrayOf(PropTypes.string),\n  tabTitles: PropTypes.object,\n  addInventoryTab: PropTypes.bool,\n};\n","/* eslint-disable no-restricted-globals */\n/* eslint-disable camelcase */\n/* eslint-disable react/forbid-prop-types */\n/* eslint-disable no-restricted-globals */\n/* eslint-disable camelcase */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Panel,\n  Button,\n  ButtonToolbar,\n  ListGroupItem,\n  Tabs,\n  Tab,\n  ListGroup,\n  OverlayTrigger,\n  Tooltip,\n} from 'react-bootstrap';\nimport { findIndex, merge } from 'lodash';\nimport Aviator from 'aviator';\nimport Immutable from 'immutable';\nimport {\n  GenInterface, GenButtonReload, GenButtonExport, GenButtonDrawflow, GenFlowViewerBtn\n} from 'chem-generic-ui';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport ConfirmClose from 'src/components/common/ConfirmClose';\nimport GenericElDetailsContainers from 'src/components/generic/GenericElDetailsContainers';\nimport GenericEl from 'src/models/GenericEl';\nimport Attachment from 'src/models/Attachment';\nimport CopyElementModal from 'src/components/common/CopyElementModal';\nimport { notification, renderFlowModal } from 'src/apps/generic/Utils';\nimport GenericAttachments from 'src/components/generic/GenericAttachments';\nimport { SegmentTabs } from 'src/components/generic/SegmentDetails';\nimport RevisionViewerBtn from 'src/components/generic/RevisionViewerBtn';\nimport OpenCalendarButton from 'src/components/calendar/OpenCalendarButton';\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport ElementDetailSortTab from 'src/apps/mydb/elements/details/ElementDetailSortTab';\nimport { EditUserLabels, ShowUserLabels } from 'src/components/UserLabels';\n\nconst onNaviClick = (type, id) => {\n  const { currentCollection, isSync } = UIStore.getState();\n  const collectionUrl = !isNaN(id)\n    ? `${currentCollection.id}/${type}/${id}`\n    : `${currentCollection.id}/${type}`;\n  Aviator.navigate(\n    isSync ? `/scollection/${collectionUrl}` : `/collection/${collectionUrl}`,\n    { silent: true },\n  );\n  if (type === 'reaction') {\n    ElementActions.fetchReactionById(id);\n  } else if (type === 'sample') {\n    ElementActions.fetchSampleById(id);\n  } else {\n    ElementActions.fetchGenericElById(id);\n  }\n};\n\nexport default class GenericElDetails extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      genericEl: props.genericEl,\n      activeTab: 0,\n      // List of all visible segment tabs.\n      visible: Immutable.List()\n    };\n    this.onChangeUI = this.onChangeUI.bind(this);\n    this.onChangeElement = this.onChangeElement.bind(this);\n    this.onTabPositionChanged = this.onTabPositionChanged.bind(this);\n    this.handleReload = this.handleReload.bind(this);\n    this.handleAttachmentDrop = this.handleAttachmentDrop.bind(this);\n    this.handleAttachmentDelete = this.handleAttachmentDelete.bind(this);\n    this.handleAttachmentEdit = this.handleAttachmentEdit.bind(this);\n    this.handleSegmentsChange = this.handleSegmentsChange.bind(this);\n    this.handleRetrieveRevision = this.handleRetrieveRevision.bind(this);\n    this.handleGenericElChanged = this.handleGenericElChanged.bind(this);\n    this.handleElChanged = this.handleElChanged.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleExport = this.handleExport.bind(this);\n  }\n\n  componentDidMount() {\n    UIStore.listen(this.onChangeUI);\n    ElementStore.listen(this.onChangeElement);\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onChangeUI);\n    ElementStore.unlisten(this.onChangeElement);\n  }\n\n  /**\n   * Changes the visible segment tabs\n   * @param visible {Array} List of all visible segment tabs\n   */\n  onTabPositionChanged(visible) {\n    this.setState({ visible });\n  }\n\n  onChangeElement(state) {\n    const { genericEl } = this.state;\n    if (state.currentElement) {\n      if (\n        state.currentElement !== genericEl\n        && state.currentElement.klassType === 'GenericEl'\n        && state.currentElement.type != null\n      ) {\n        this.setState({ genericEl: state.currentElement });\n      }\n    }\n  }\n\n  onChangeUI(state) {\n    const { activeTab, genericEl } = this.state;\n    if (state[genericEl.type]) {\n      if (state[genericEl.type].activeTab !== activeTab) {\n        this.setState({\n          activeTab: state[genericEl.type].activeTab,\n        });\n      }\n    }\n  }\n\n  handleElChanged(el) {\n    const genericEl = el;\n    genericEl.changed = true;\n    this.setState({ genericEl });\n  }\n\n  handleGenericElChanged(el) {\n    const genericEl = el;\n    genericEl.changed = true;\n    this.setState({ genericEl }, () => {\n      // ElementActions.opGenericAnalysis(el);\n      renderFlowModal(genericEl, false);\n    });\n  }\n\n  handleSelect(eventKey, type) {\n    UIActions.selectTab({ tabKey: eventKey, type });\n    UIActions.showGenericWorkflowModal.defer(false);\n    this.setState({ activeTab: eventKey });\n  }\n\n  handleRetrieveRevision(revision, cb) {\n    const { genericEl } = this.state;\n    genericEl.properties = revision;\n    genericEl.changed = true;\n    this.setState({ genericEl }, cb);\n  }\n\n  handleReload(genericEl) {\n    this.setState({ genericEl }, () => ElementActions.setCurrentElement(genericEl));\n  }\n\n  handleSubmit(closeView = false) {\n    const { genericEl } = this.state;\n\n    const el = new GenericEl(genericEl);\n    if (!el.isValidated()) {\n      notification({\n        title: 'Save failed!',\n        lvl: 'error',\n        msg: 'Please fill out all required fields!',\n        uid: 'save_mof_notification',\n      });\n      return false;\n    }\n    LoadingActions.start();\n    genericEl.name = genericEl.name.trim();\n    // filter is_deleted analysis\n    const { container } = genericEl;\n\n    let ais = (container && container.children && container.children[0].children) || [];\n    ais = ais.filter((x) => !x.is_deleted).map((x) => x.id); // get ai is not deleted\n    (Object.keys(genericEl.properties.layers) || {}).forEach((key) => {\n      if (genericEl.properties.layers[key].ai) {\n        genericEl.properties.layers[key].ai = genericEl.properties.layers[\n          key\n        ].ai.filter((x) => ais.includes(x));\n      } else {\n        genericEl.properties.layers[key].ai = [];\n      }\n      genericEl.properties.layers[key].fields = (\n        genericEl.properties.layers[key].fields || []\n      ).map((f) => {\n        const field = f;\n        if (\n          field.type === 'text'\n          && typeof field.value !== 'undefined'\n          && field.value != null\n        ) {\n          field.value = field.value.trim();\n        }\n        return field;\n      });\n    });\n    if (genericEl && genericEl.isNew) {\n      ElementActions.createGenericEl(genericEl);\n    } else {\n      ElementActions.updateGenericEl(genericEl, closeView);\n    }\n    if (genericEl.is_new || closeView) {\n      DetailActions.close(genericEl, true);\n    }\n    return true;\n  }\n\n  handleExport() {\n    const { genericEl } = this.state;\n    ElementActions.exportElement(genericEl, 'Element', 'docx');\n  }\n\n  handleAttachmentDrop(files) {\n    const { genericEl } = this.state;\n    files.map((file) => genericEl.attachments.push(Attachment.fromFile(file)));\n    // this.handleGenericElChanged(genericEl);\n    this.handleElChanged(genericEl);\n  }\n\n  handleAttachmentDelete(attachment, isDelete = true) {\n    const { genericEl } = this.state;\n    const index = genericEl.attachments.indexOf(attachment);\n    genericEl.attachments[index].is_deleted = isDelete;\n    // this.handleGenericElChanged(genericEl);\n    this.handleElChanged(genericEl);\n  }\n\n  handleAttachmentEdit(attachment) {\n    const { genericEl } = this.state;\n    genericEl.attachments.map((currentAttachment) => {\n      if (currentAttachment.id === attachment.id) return attachment;\n    });\n    // this.handleGenericElChanged(genericEl);\n    this.handleElChanged(genericEl);\n    this.forceUpdate();\n  }\n\n  handleSegmentsChange(se, cb) {\n    const { genericEl } = this.state;\n    const { segments } = genericEl;\n    const idx = findIndex(\n      segments,\n      (o) => o.segment_klass_id === se.segment_klass_id\n    );\n    if (idx >= 0) {\n      segments.splice(idx, 1, se);\n    } else {\n      segments.push(se);\n    }\n    genericEl.segments = segments;\n    genericEl.changed = true;\n    if (cb) this.setState({ genericEl }, cb());\n    else this.setState({ genericEl });\n  }\n\n  elementalToolbar(genericEl) {\n    return (\n      <ButtonToolbar style={{ margin: '5px 0px' }}>\n        <GenButtonExport\n          generic={genericEl}\n          fnExport={this.handleExport}\n        />\n        <GenFlowViewerBtn generic={genericEl} fnClick={renderFlowModal} />\n        <RevisionViewerBtn\n          fnRetrieve={this.handleRetrieveRevision}\n          generic={genericEl}\n        />\n        <GenButtonReload\n          klass={genericEl.element_klass}\n          generic={genericEl}\n          fnReload={this.handleReload}\n        />\n        <GenButtonDrawflow\n          generic={genericEl}\n          genericType=\"Element\"\n          fnSave={this.handleReload}\n        />\n      </ButtonToolbar>\n    );\n  }\n\n  elementalPropertiesItem(genericEl) {\n    const options = [];\n    options.push({\n      generic: genericEl,\n      type: 'text',\n      isEditable: true,\n      isRequire: false,\n      field: 'name',\n    });\n    const lys = Object.keys(genericEl.properties.layers);\n    const aiComs = {};\n    lys.forEach((x) => {\n      const ly = genericEl.properties.layers[x];\n      const ai = ly.ai || [];\n      if (ai.length < 1) {\n        aiComs[ly.key] = null;\n      } else {\n        aiComs[ly.key] = (\n          <GenericElDetailsContainers\n            genericEl={genericEl}\n            parent={this}\n            readOnly={false}\n            handleElChanged={this.handleElChanged}\n            noAct\n            linkedAis={ai}\n            handleSubmit={this.handleSubmit}\n          />\n        );\n      }\n    });\n    const layersLayout = (\n      <GenInterface\n        generic={genericEl}\n        fnChange={this.handleGenericElChanged}\n        extLayers={options}\n        genId={genericEl.id || 0}\n        isPreview={false}\n        isActiveWF\n        fnNavi={onNaviClick}\n        aiComp={aiComs}\n      />\n    );\n    return (\n      <div>\n        <div>{this.elementalToolbar(genericEl)}</div>\n        {layersLayout}\n        <EditUserLabels\n          element={genericEl}\n          fnCb={this.handleGenericElChanged}\n        />\n      </div>\n    );\n  }\n\n  propertiesTab(ind) {\n    const { genericEl = {} } = this.state;\n    return (\n      <Tab eventKey={ind} title=\"Properties\" key={`Props_${genericEl.id}`}>\n        {this.elementalPropertiesItem(genericEl)}\n      </Tab>\n    );\n  }\n\n  containersTab(ind) {\n    const { genericEl } = this.state;\n    return (\n      <Tab eventKey={ind} title=\"Analyses\" key={`Container_${genericEl.id}`}>\n        <ListGroupItem style={{ paddingBottom: 20 }}>\n          <GenericElDetailsContainers\n            // key={genericEl.id}\n            genericEl={genericEl}\n            parent={this}\n            readOnly={false}\n            handleElChanged={this.handleElChanged}\n            handleSubmit={this.handleSubmit}\n          />\n        </ListGroupItem>\n      </Tab>\n    );\n  }\n\n  attachmentsTab(ind) {\n    const { genericEl } = this.state;\n    return (\n      <Tab\n        eventKey={ind}\n        title=\"Attachments\"\n        key={`Attachment_${genericEl.id}`}\n      >\n        <ListGroupItem style={{ paddingBottom: 20 }}>\n          <GenericAttachments\n            attachments={genericEl.attachments}\n            onDrop={this.handleAttachmentDrop}\n            onDelete={this.handleAttachmentDelete}\n            onEdit={this.handleAttachmentEdit}\n            readOnly={false}\n          />\n        </ListGroupItem>\n      </Tab>\n    );\n  }\n\n  header(genericEl) {\n    const { toggleFullScreen } = this.props;\n    const iconClass = (genericEl.element_klass && genericEl.element_klass.icon_name) || '';\n    const { currentCollection } = UIStore.getState();\n    const defCol = currentCollection\n      && currentCollection.is_shared === false\n      && currentCollection.is_locked === false\n      && currentCollection.label !== 'All'\n      ? currentCollection.id : null;\n    const copyBtn = genericEl.can_copy && !genericEl.isNew ? (\n      <CopyElementModal element={genericEl} defCol={defCol} />\n    ) : null;\n\n    const saveBtnDisplay = genericEl.changed && genericEl.can_update ? '' : 'none';\n    const datetp = `Created at: ${genericEl.created_at} \\n Updated at: ${genericEl.updated_at}`;\n    return (\n      <div>\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"genericElDatesx\">{datetp}</Tooltip>}\n        >\n          <span>\n            <i className={iconClass} />\n            &nbsp;\n            <span>{genericEl.short_label}</span>\n            &nbsp;\n          </span>\n        </OverlayTrigger>\n        {genericEl.isNew ? null : <ElementCollectionLabels element={genericEl} />}\n        <ShowUserLabels element={genericEl} />\n        <ConfirmClose el={genericEl} />\n        {copyBtn}\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"tip_fullscreen_btn\">FullScreen</Tooltip>}\n        >\n          <Button\n            bsStyle=\"info\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => toggleFullScreen()}\n          >\n            <i className=\"fa fa-expand\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"saveScreen\">Save</Tooltip>}\n        >\n          <Button\n            bsStyle=\"warning\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.handleSubmit()}\n            style={{ display: saveBtnDisplay }}\n          >\n            <i className=\"fa fa-floppy-o\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        {genericEl.isNew\n          ? null\n          : <OpenCalendarButton isPanelHeader eventableId={genericEl.id} eventableType=\"Labimotion::Element\" />}\n      </div>\n    );\n  }\n\n  render() {\n    const { genericEl, visible } = this.state;\n    const submitLabel = genericEl && genericEl.isNew ? 'Create' : 'Save';\n    // eslint-disable-next-line max-len\n    const saveBtnDisplay = (genericEl?.isNew || (genericEl?.can_update && genericEl?.changed)) ? { display: '' } : { display: 'none' };\n\n    /**\n     *  tabContents is a object containing all (visible) segment tabs\n     */\n    let tabContents = {\n      properties: this.propertiesTab.bind(this),\n      analyses: this.containersTab.bind(this),\n      attachments: this.attachmentsTab.bind(this)\n    };\n\n    const segTabs = SegmentTabs(genericEl, this.handleSegmentsChange);\n    tabContents = merge(tabContents, segTabs);\n\n    const tabContentList = [];\n    const tabKeyContentList = [];\n\n    visible.forEach((value) => {\n      const tabContent = tabContents[value];\n      if (tabContent) {\n        tabKeyContentList.push(value);\n        tabContentList.push(tabContent(value));\n      }\n    });\n\n    const tabTitlesMap = {};\n\n    // Select 'activeTab' and ensure that it is visible\n    let activeTab = this.state.activeTab;\n    if (!tabKeyContentList.includes(activeTab) && tabKeyContentList.length > 0) {\n      activeTab = tabKeyContentList[0];\n    }\n    return (\n      <Panel\n        className=\"panel-detail\"\n        bsStyle={genericEl.isPendingToSave ? 'info' : 'primary'}\n      >\n        <Panel.Heading>{this.header(genericEl)}</Panel.Heading>\n        <Panel.Body>\n          <ListGroup>\n            <ElementDetailSortTab\n              type={genericEl.type}\n              availableTabs={Object.keys(tabContents)}\n              tabTitles={tabTitlesMap}\n              onTabPositionChanged={this.onTabPositionChanged}\n              addInventoryTab={false}\n            />\n            <Tabs\n              activeKey={activeTab}\n              onSelect={(key) => this.handleSelect(key, genericEl.type)}\n              id=\"GenericElementDetailsXTab\"\n            >\n              {tabContentList}\n            </Tabs>\n          </ListGroup>\n          <hr />\n          <ButtonToolbar>\n            <Button\n              bsStyle=\"primary\"\n              onClick={() => DetailActions.close(genericEl, true)}\n            >\n              Close\n            </Button>\n            <Button\n              bsStyle=\"warning\"\n              onClick={() => this.handleSubmit()}\n              style={saveBtnDisplay}\n            >\n              {submitLabel}\n            </Button>\n          </ButtonToolbar>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nGenericElDetails.propTypes = {\n  genericEl: PropTypes.object,\n  toggleFullScreen: PropTypes.func.isRequired,\n};\n\nGenericElDetails.defaultProps = {\n  genericEl: {},\n};\n","import React from 'react';\nimport { ScaleUtils, AbstractSeries } from 'react-vis';\n\nfunction cropDimension(loc, startLoc, minLoc, maxLoc) {\n  if (loc < startLoc) {\n    return {\n      start: Math.max(loc, minLoc),\n      stop: startLoc\n    };\n  }\n\n  return {\n    stop: Math.min(loc, maxLoc),\n    start: startLoc\n  };\n}\n\nexport default class Highlight extends AbstractSeries {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      drawing: false,\n      drawArea: {\n        top: 0, right: 0, bottom: 0, left: 0\n      },\n      x_start: 0,\n      y_start: 0,\n      xMode: false,\n      yMode: false,\n      xyMode: false\n    };\n\n    this.stopDrawing = this.stopDrawing.bind(this);\n    this.onParentMouseDown = this.onParentMouseDown.bind(this);\n    this.getMousePosition = this.getMousePosition.bind(this);\n  }\n\n  componentDidMount() {\n    document.addEventListener('mouseup', this.stopDrawing);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('mouseup', this.stopDrawing);\n  }\n\n  getDrawArea(loc) {\n    const { innerWidth, innerHeight } = this.props;\n    const {\n      drawArea, xStart, yStart, xMode, yMode, xyMode\n    } = this.state;\n    const { x, y } = loc;\n    let out = drawArea;\n\n    if (xMode || xyMode) {\n      const { start, stop } = cropDimension(x, xStart, 0, innerWidth);\n      out = {\n        ...out,\n        left: start,\n        right: stop\n      };\n    }\n    if (yMode || xyMode) {\n      const { start, stop } = cropDimension(y, yStart, 0, innerHeight);\n      out = {\n        ...out,\n        top: innerHeight - start,\n        bottom: innerHeight - stop\n      };\n    }\n    return out;\n  }\n\n  onParentMouseDown(e) {\n    const { innerHeight, innerWidth, onBrushStart } = this.props;\n    const { x, y } = this.getMousePosition(e);\n    const yRect = innerHeight - y;\n\n    if (x < 0 && y >= 0) {\n      this.setState({\n        yMode: true,\n        drawing: true,\n        drawArea: {\n          top: yRect,\n          right: innerWidth,\n          bottom: yRect,\n          left: 0\n        },\n        yStart: y\n      });\n    } else if (x >= 0 && y < 0) {\n      this.setState({\n        xMode: true,\n        drawing: true,\n        drawArea: {\n          top: innerHeight,\n          right: x,\n          bottom: 0,\n          left: x\n        },\n        xStart: x\n      });\n    } else if (x >= 0 && y >= 0) {\n      this.setState({\n        xyMode: true,\n        drawing: true,\n        drawArea: {\n          top: yRect,\n          right: x,\n          bottom: yRect,\n          left: x\n        },\n        xStart: x,\n        yStart: y\n      });\n    }\n\n    if (onBrushStart) {\n      onBrushStart(e);\n    }\n  }\n\n  // onParentTouchStart(e) {\n  //   e.preventDefault();\n  //   this.onParentMouseDown(e);\n  // }\n\n  stopDrawing() {\n    this.setState({\n      xMode: false,\n      yMode: false,\n      xyMode: false\n    });\n\n    if (!this.state.drawing) {\n      return;\n    }\n\n    const { onBrushEnd } = this.props;\n    const { drawArea } = this.state;\n    const xScale = ScaleUtils.getAttributeScale(this.props, 'x');\n    const yScale = ScaleUtils.getAttributeScale(this.props, 'y');\n\n    // Clear the draw area\n    this.setState({\n      drawing: false,\n      drawArea: {\n        top: 0, right: 0, bottom: 0, left: 0\n      },\n      xStart: 0,\n      yStart: 0\n    });\n\n    if (Math.abs(drawArea.right - drawArea.left) < 5) {\n      onBrushEnd(null);\n      return;\n    }\n\n    const domainArea = {\n      bottom: yScale.invert(drawArea.top),\n      right: xScale.invert(drawArea.right),\n      top: yScale.invert(drawArea.bottom),\n      left: xScale.invert(drawArea.left)\n    };\n\n    if (onBrushEnd) {\n      onBrushEnd(domainArea);\n    }\n  }\n\n  getMousePosition(e) {\n    const { marginLeft, marginTop, innerHeight } = this.props;\n\n    const locX = e.nativeEvent.offsetX - marginLeft;\n    const locY = (innerHeight + marginTop) - e.nativeEvent.offsetY;\n\n    return { x: locX, y: locY };\n  }\n\n  onParentMouseMove(e) {\n    const { drawing } = this.state;\n\n    if (drawing) {\n      const pos = this.getMousePosition(e);\n      const newDrawArea = this.getDrawArea(pos);\n      this.setState({ drawArea: newDrawArea });\n    }\n  }\n\n  render() {\n    const {\n      marginLeft, marginTop, innerWidth, innerHeight, color, opacity\n    } = this.props;\n\n    const {\n      drawArea: {\n        left, right, top, bottom\n      }\n    } = this.state;\n\n    return (\n      <g\n        transform={`translate(${marginLeft}, ${marginTop})`}\n        className=\"highlight-container\"\n      >\n        <rect\n          opacity=\"0\"\n          x={0}\n          y={0}\n          width={innerWidth}\n          height={innerHeight}\n        />\n        <rect\n          pointerEvents=\"none\"\n          opacity={opacity}\n          fill={color}\n          x={left}\n          y={bottom}\n          width={right - left}\n          height={top - bottom}\n        />\n      </g>\n    );\n  }\n}\n\nconst defaultProps = {\n  allow: 'x',\n  color: 'rgb(77, 182, 172)',\n  opacity: 0.3\n};\n\nHighlight.defaultProps = {\n  ...AbstractSeries,\n  ...defaultProps\n};\n\nHighlight.displayName = 'ComputedPropsGraphHighlight';\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction CustomAxisLabel({\n  marginTop, marginLeft, innerWidth, innerHeight, title, xAxis\n}) {\n  const yLabelOffset = {\n    y: marginTop + (innerHeight / 2) + (title.length * 2),\n    x: 10\n  };\n\n  const xLabelOffset = {\n    x: (marginLeft + (innerWidth / 2)) - (title.length * 4),\n    y: (innerHeight * 1.1) + 10\n  };\n\n  const transform = xAxis\n    ? `translate(${xLabelOffset.x}, ${xLabelOffset.y})`\n    : `translate(${yLabelOffset.x}, ${yLabelOffset.y}) rotate(-90)`;\n\n  return (\n    <g transform={transform}>\n      <text className=\"unselectable axis-labels\" style={{ fill: '#6b6b76' }}>\n        {title}\n      </text>\n    </g>\n  );\n}\n\nCustomAxisLabel.propTypes = {\n  title: PropTypes.string.isRequired,\n  xAxis: PropTypes.bool.isRequired,\n};\n\nCustomAxisLabel.defaultProps = {\n  xAxis: false\n}\n\nCustomAxisLabel.displayName = 'CustomAxisLabel';\nCustomAxisLabel.requiresSVG = true;\n\nexport default CustomAxisLabel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  XYPlot, HorizontalGridLines, VerticalGridLines,\n  XAxis, YAxis, Hint, DiscreteColorLegend, MarkSeries,\n} from 'react-vis';\nimport SvgFileZoomPan from 'react-svg-file-zoom-pan';\n\nimport Highlight from 'src/components/computedProps/Highlight';\nimport CustomAxisLabel from 'src/components/computedProps/CustomAxisLabel';\n\nconst previewStyle = {\n  background: 'white',\n  width: '200px'\n};\n\nexport default class ComputedPropsGraph extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      hintValue: null,\n      svgPath: null,\n      lastDrawLocation: null,\n    };\n\n    this.setHint = this.setHint.bind(this);\n    this.removeHint = this.removeHint.bind(this);\n  }\n\n  setHint(value) {\n    const { svgPath, ...hintValue } = value;\n    this.setState({ hintValue, svgPath });\n  }\n\n  removeHint() {\n    this.setState({ hintValue: null, svgPath: null });\n  }\n\n  render() {\n    const {\n      data, show, xAxis, yAxis, referencePoints\n    } = this.props;\n\n    if (!show || data.length === 0) return <span />;\n\n    const refData = referencePoints.filter(ref => ref.x && ref.y);\n\n    const { hintValue, svgPath, lastDrawLocation } = this.state;\n\n    const xAxisLabel = xAxis.label || 'LUMO';\n    const yAxisLabel = yAxis.label || 'ESP';\n\n    let xDomain = xAxis.range;\n    let yDomain = yAxis.range;\n    if (lastDrawLocation) {\n      xDomain = [lastDrawLocation.left, lastDrawLocation.right];\n      yDomain = [lastDrawLocation.bottom, lastDrawLocation.top];\n    }\n\n    const dataInfo = {\n      color: '#79c7e3',\n      title: 'Data'\n    };\n    const refInfo = {\n      color: '#1a3177',\n      title: 'Reference'\n    };\n\n    return (\n      <div>\n        <div style={{ float: 'left' }}>\n          <XYPlot\n            height={450}\n            width={450}\n            xDomain={xDomain}\n            yDomain={yDomain}\n            margin={{\n              left: 55, right: 10, top: 10, bottom: 55\n            }}\n          >\n            <VerticalGridLines />\n            <HorizontalGridLines />\n            <XAxis />\n            <YAxis />\n            <Highlight\n              onBrushEnd={area => this.setState({ lastDrawLocation: area })}\n            />\n            <MarkSeries\n              data={data}\n              onValueMouseOver={this.setHint}\n              onValueMouseOut={this.removeHint}\n              color={dataInfo.color}\n            />\n            <MarkSeries\n              data={refData}\n              onValueMouseOver={this.setHint}\n              onValueMouseOut={this.removeHint}\n              color={refInfo.color}\n            />\n            {hintValue && (\n              <Hint value={hintValue}>\n                <div className=\"rv-hint__content\" style={previewStyle}>\n                  <div>\n                    <SvgFileZoomPan\n                      svgPath={svgPath}\n                      duration={300}\n                      resize\n                    />\n                  </div>\n                  <div className=\"rv-hint__content\">\n                    {Object.keys(hintValue).map(key => (\n                      <div key={`rv-hint${key}`}>\n                        <span className=\"rv-hint__title\">\n                          {key}\n                        </span>\n                        {': '}\n                        <span className=\"rv-hint__value\">\n                          {hintValue[key]}\n                        </span>\n                      </div>\n                    ))}\n                  </div>\n                </div>\n              </Hint>\n            )}\n            <CustomAxisLabel title={`${xAxisLabel} (${xAxis.unit})`} xAxis />\n            <CustomAxisLabel title={`${yAxisLabel} (${yAxis.unit})`} />\n          </XYPlot>\n        </div>\n        <div style={{ float: 'right' }}>\n          <DiscreteColorLegend\n            width={105}\n            items={[dataInfo, refInfo]}\n          />\n        </div>\n      </div>\n    );\n  }\n}\n\nComputedPropsGraph.propTypes = {\n  data: PropTypes.arrayOf(PropTypes.object).isRequired,\n  show: PropTypes.bool.isRequired,\n  xAxis: PropTypes.object.isRequired,\n  yAxis: PropTypes.object.isRequired,\n  referencePoints: PropTypes.arrayOf(PropTypes.object).isRequired,\n  // referenceDesc: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { AgGridReact } from 'ag-grid-react';\n\nimport { Button } from 'react-bootstrap';\n\nfunction TableEditBtn({ dataLength, onEditBtnClick, node }) {\n  const isAdd = node.rowIndex === dataLength;\n  const btnIcon = isAdd ? 'fa-plus' : 'fa-minus';\n\n  return (\n    <Button\n      active\n      onClick={() => onEditBtnClick(node.rowIndex)}\n      bsSize=\"xsmall\"\n    >\n      <i className={`fa ${btnIcon}`} />\n    </Button>\n  );\n}\n\nTableEditBtn.propTypes = {\n  dataLength: PropTypes.number.isRequired,\n  onEditBtnClick: PropTypes.func.isRequired,\n  node: PropTypes.object.isRequired,\n};\n\nexport default class GraphReferenceTable extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.onRefsChanged = this.onRefsChanged.bind(this);\n    this.onGridReady = this.onGridReady.bind(this);\n    this.onEditBtnClick = this.onEditBtnClick.bind(this);\n    this.autoSizeAll = this.autoSizeAll.bind(this);\n  }\n\n  componentDidUpdate() {\n    if (this.gridApi) this.autoSizeAll();\n  }\n\n  onGridReady(params) {\n    this.gridApi = params.api;\n  }\n\n  onRefsChanged(params) {\n    const { data, updateData } = this.props;\n    const refs = [...data];\n    refs[params.rowIndex] = params.data;\n\n    updateData(refs);\n  }\n\n  onEditBtnClick(rIdx) {\n    const { data, updateData } = this.props;\n    const isAdd = rIdx === (data.length - 1);\n    const refs = [...data];\n\n    if (isAdd) {\n      refs.push({ x: '', y: '', type: 'reference' });\n    } else {\n      refs.splice(rIdx, 1);\n    }\n\n    updateData(refs);\n  }\n\n  autoSizeAll() {\n    if (!this.gridApi) return;\n    if (this.gridApi.isDestroyed()) return;\n    const allColumnIds = [];\n    this.gridApi.getAllGridColumns().forEach((column) => {\n      allColumnIds.push(column.colId);\n    });\n\n    this.gridApi.autoSizeColumns(allColumnIds);\n  }\n\n  render() {\n    const { xLabel, yLabel, data } = this.props;\n    const columnDefs = [\n      {\n        headerName: xLabel,\n        field: 'x',\n        editable: true,\n        cellEditor: 'agTextCellEditor',\n      },\n      {\n        headerName: yLabel,\n        field: 'y',\n        editable: true,\n        cellEditor: 'agTextCellEditor',\n      },\n      {\n        headerName: '',\n        field: 'type',\n        editable: false,\n        cellRenderer: TableEditBtn,\n        cellRendererParams: {\n          dataLength: data.length - 1,\n          onEditBtnClick: this.onEditBtnClick\n        },\n        headerComponentParams: { headerName: '' }\n      },\n    ];\n\n    return (\n      <div className=\"ag-theme-material\">\n        <AgGridReact\n          columnDefs={columnDefs}\n          rowData={data}\n          domLayout=\"autoHeight\"\n          onGridReady={this.onGridReady}\n          onCellValueChanged={this.onRefsChanged}\n        />\n      </div>\n    );\n  }\n}\n\nGraphReferenceTable.propTypes = {\n  data: PropTypes.arrayOf(PropTypes.object).isRequired,\n  updateData: PropTypes.func.isRequired,\n  xLabel: PropTypes.string.isRequired,\n  yLabel: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport _ from 'lodash';\n\nimport Select from 'react-select';\nimport {\n  Grid, Row, Col, Button, ControlLabel, Form, FormGroup, FormControl\n} from 'react-bootstrap';\n\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UserActions from 'src/stores/alt/actions/UserActions';\n\nimport ComputedPropsGraph from 'src/components/computedProps/ComputedPropsGraph';\nimport GraphReferenceTable from 'src/components/computedProps/GraphReferenceTable';\n\nconst etlReferences = [\n  { x: -1.8, y: 50, type: 'reference' },\n  { x: -1.8, y: 90, type: 'reference' },\n  { x: -2.2, y: 50, type: 'reference' },\n  { x: -2.0, y: 10, type: 'reference' },\n  { x: -1.6, y: 10, type: 'reference' },\n  { x: -1.4, y: 50, type: 'reference' }\n];\n\nconst defaultTemplate = {\n  name: 'Default',\n  xAxisType: 'lumo',\n  yAxisType: 'mean_abs_potential',\n  referenceDesc: 'Compounds are interesting as material for the ' +\n    'Electron Transport Layer (ETL)',\n  referencePoints: etlReferences,\n};\n\nconst graphSettings = {\n  mean_abs_potential: { label: 'ESP', unit: 'mV', range: [0, 400] },\n  lumo: { label: 'LUMO', unit: 'eV', range: [-7, 2] },\n  homo: { label: 'HOMO', unit: 'eV', range: [-12, 0] },\n  ip: { label: 'IP', unit: 'eV', range: [2, 10] },\n  ea: { label: 'EA', unit: 'eV', range: [-2, 6] },\n  dipol_debye: { label: 'Dipol', unit: 'debye', range: [0, 14] },\n};\n\nexport default class ComputedPropsGraphContainer extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      curTemplateIdx: 0,\n      graphTemplates: [],\n    };\n\n    this.onUserChange = this.onUserChange.bind(this);\n    this.onTemplateChange = this.onTemplateChange.bind(this);\n    this.onXAxisChange = this.onXAxisChange.bind(this);\n    this.onYAxisChange = this.onYAxisChange.bind(this);\n\n    this.updateReferences = this.updateReferences.bind(this);\n    this.saveTemplate = this.saveTemplate.bind(this);\n    this.deleteTemplate = this.deleteTemplate.bind(this);\n    this.onDescChange = this.onDescChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onUserChange);\n  }\n\n  UNSAFE_componentWillReceiveProps() {\n    this.onUserChange();\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onUserChange);\n  }\n\n  onUserChange() {\n    const userState = UserStore.getState();\n    const profileData = _.get(userState, 'profile.data', {});\n    const graphTemplates = _.get(\n      profileData,\n      'computed_props.graph_templates',\n      [defaultTemplate]\n    );\n\n    const curTemplateIdx = _.get(profileData, 'computed_props.cur_template_idx', 0);\n    this.setState({ graphTemplates, curTemplateIdx });\n  }\n\n  onXAxisChange(xAxis) {\n    const { curTemplateIdx, graphTemplates } = this.state;\n    const newGraphTemplates = graphTemplates.map((templ, idx) => {\n      if (idx === curTemplateIdx) {\n        const newTempl = _.cloneDeep(templ);\n        newTempl.xAxisType = xAxis.value;\n        return newTempl;\n      }\n      return templ;\n    });\n\n    this.setState({ graphTemplates: newGraphTemplates });\n  }\n\n  onYAxisChange(yAxis) {\n    const { curTemplateIdx, graphTemplates } = this.state;\n    const newGraphTemplates = graphTemplates.map((templ, idx) => {\n      if (idx === curTemplateIdx) {\n        const newTempl = _.cloneDeep(templ);\n        newTempl.yAxisType = yAxis.value;\n        return newTempl;\n      }\n      return templ;\n    });\n\n    this.setState({ graphTemplates: newGraphTemplates });\n  }\n\n  onDescChange(e) {\n    const { curTemplateIdx, graphTemplates } = this.state;\n    const desc = e.target.value;\n    const newGraphTemplates = graphTemplates.map((templ, idx) => {\n      if (idx === curTemplateIdx) {\n        const newTempl = _.cloneDeep(templ);\n        newTempl.referenceDesc = desc;\n        return newTempl;\n      }\n      return templ;\n    });\n\n    this.setState({ graphTemplates: newGraphTemplates });\n  }\n\n  onTemplateChange(template) {\n    const { graphTemplates } = this.state;\n    const tIdx = graphTemplates.findIndex(t => t.name === template.label);\n    if (tIdx > -1) {\n      this.setState({ curTemplateIdx: tIdx });\n    } else {\n      const newTempl = {\n        name: template.label,\n        xAxisType: 'lumo',\n        yAxisType: 'mean_abs_potential',\n        referenceDesc: '',\n        referencePoints: [],\n      };\n\n      graphTemplates.push(newTempl);\n      this.setState({\n        graphTemplates,\n        curTemplateIdx: graphTemplates.length - 1,\n      });\n    }\n  }\n\n  updateReferences(refs) {\n    const { curTemplateIdx, graphTemplates } = this.state;\n    const newGraphTemplates = graphTemplates.map((templ, idx) => {\n      if (idx === curTemplateIdx) {\n        const newTempl = _.cloneDeep(templ);\n        newTempl.referencePoints = refs;\n        return newTempl;\n      }\n      return templ;\n    });\n\n    this.setState({ graphTemplates: newGraphTemplates });\n  }\n\n  saveTemplate() {\n    const userProfile = UserStore.getState().profile;\n    const { graphTemplates, curTemplateIdx } = this.state;\n    _.set(userProfile, 'data.computed_props.graph_templates', graphTemplates);\n    _.set(userProfile, 'data.computed_props.cur_template_idx', curTemplateIdx);\n    UserActions.updateUserProfile(userProfile);\n  }\n\n  deleteTemplate() {\n    const userProfile = UserStore.getState().profile;\n    const { graphTemplates } = this.state;\n    const { curTemplateIdx } = this.state;\n    const newGraphTemplates = _.cloneDeep(graphTemplates);\n    newGraphTemplates.splice(curTemplateIdx, 1);\n    const newTemplateIdx = curTemplateIdx > 1 ? (curTemplateIdx - 1) : 0;\n    _.set(userProfile, 'data.computed_props.graph_templates', newGraphTemplates);\n    _.set(userProfile, 'data.computed_props.cur_template_idx', newTemplateIdx);\n    UserActions.updateUserProfile(userProfile);\n  }\n\n  render() {\n    const { show, graphData, style } = this.props;\n    if (!show || graphData.length === 0) return <span />;\n\n    const { curTemplateIdx, graphTemplates } = this.state;\n    const template = graphTemplates.size === 0 ?\n      defaultTemplate :\n      graphTemplates[curTemplateIdx];\n\n    const xAxisType = template.xAxisType || 'lumo';\n    const yAxisType = template.yAxisType || 'mean_abs_potential';\n    const xAxis = graphSettings[xAxisType] || graphSettings.lumo;\n    const yAxis = graphSettings[yAxisType] || graphSettings.mean_abs_potential;\n\n    const { referenceDesc } = template;\n    const referencePoints = template.referencePoints || etlReferences;\n    if (referencePoints.length === 0) {\n      referencePoints.push({ x: '', y: '', type: 'reference' });\n    }\n\n    const data = graphData.filter(dat => dat.props).map(dat => ({\n      name: dat.name,\n      svgPath: dat.svgPath,\n      x: _.get(dat, `props.${xAxisType}`, dat.props.lumo),\n      y: _.get(dat, `props.${yAxisType}`, dat.props.mean_abs_potential),\n    }));\n\n    const axisSelectOptions = Object.keys(graphSettings).map(k => (\n      { label: graphSettings[k].label, value: k }\n    ));\n    const templateOptions = graphTemplates.map((templ, idx) => (\n      { label: templ.name, value: idx }\n    ));\n\n    return (\n      <Grid fluid style={style}>\n        <Row className=\"show-grid\">\n          <Col xs={18} md={12}>\n            <ComputedPropsGraph\n              xAxis={xAxis}\n              yAxis={yAxis}\n              show={show}\n              data={data}\n              style={style}\n              referencePoints={referencePoints}\n              referenceDesc={referenceDesc}\n            />\n          </Col>\n        </Row>\n        <Row>\n          <Col xs={9} md={6}>\n            <GraphReferenceTable\n              xLabel={xAxis.label}\n              yLabel={yAxis.label}\n              data={referencePoints}\n              updateData={this.updateReferences}\n            />\n          </Col>\n          <Col xs={9} md={6}>\n            <Form horizontal>\n              <FormGroup controlId=\"formInlineTemplate\">\n                <Col componentClass={ControlLabel} sm={4}>\n                  Template\n                </Col>\n                <Col sm={8}>\n                  <Select.Creatable\n                    onChange={this.onTemplateChange}\n                    value={curTemplateIdx}\n                    options={templateOptions}\n                    clearable={false}\n                    promptTextCreator={label => `Create new ${label} template`}\n                  />\n                </Col>\n              </FormGroup>\n              <FormGroup controlId=\"formInlineXAxis\">\n                <Col componentClass={ControlLabel} sm={4}>\n                  X Axis\n                </Col>\n                <Col sm={8}>\n                  <Select\n                    onChange={this.onXAxisChange}\n                    value={xAxisType}\n                    clearable={false}\n                    options={axisSelectOptions}\n                  />\n                </Col>\n              </FormGroup>\n              <FormGroup controlId=\"formInlineYAxis\">\n                <Col componentClass={ControlLabel} sm={4}>\n                  Y Axis\n                </Col>\n                <Col sm={8}>\n                  <Select\n                    onChange={this.onYAxisChange}\n                    value={yAxisType}\n                    clearable={false}\n                    options={axisSelectOptions}\n                  />\n                </Col>\n              </FormGroup>\n              <FormGroup controlId=\"formInlineRefDesc\">\n                <Col componentClass={ControlLabel} sm={4}>\n                  References Description\n                </Col>\n                <Col sm={8}>\n                  <FormControl\n                    componentClass=\"textarea\"\n                    type=\"description\"\n                    placeholder=\"Description\"\n                    value={referenceDesc}\n                    style={{ height: '193px' }}\n                    onChange={e => this.onDescChange(e)}\n                  />\n                </Col>\n              </FormGroup>\n              <FormGroup style={{ marginBottom: 0 }}>\n                <Col sm={12}>\n                  <Button bsStyle=\"info\" onClick={this.saveTemplate}>\n                    Save Template\n                  </Button>\n                  {' '}\n                  <Button bsStyle=\"danger\" onClick={this.deleteTemplate}>\n                    Delete Template\n                  </Button>\n                </Col>\n              </FormGroup>\n            </Form>\n          </Col>\n        </Row>\n      </Grid>\n    );\n  }\n}\n\nComputedPropsGraphContainer.propTypes = {\n  graphData: PropTypes.arrayOf(PropTypes.object).isRequired,\n  show: PropTypes.bool.isRequired,\n  style: PropTypes.object,\n};\n\nComputedPropsGraphContainer.defaultProps = {\n  style: {}\n}\n","/* eslint-disable no-param-reassign */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Panel, Button, Accordion } from 'react-bootstrap';\n\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport ReportStore from 'src/stores/alt/stores/ReportStore';\n\nimport ComputedPropsGraphContainer from 'src/components/computedProps/ComputedPropsGraphContainer';\n\nexport default class GraphContainer extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      selectedObjTags: { sampleIds: [], reactionIds: [] },\n      defaultObjTags: { sampleIds: [], reactionIds: [] },\n      selectedComputedProps: []\n    };\n\n    this.onChangeUI = this.onChangeUI.bind(this);\n    this.onChangeRp = this.onChangeRp.bind(this);\n\n    this.onClose = this.onClose.bind(this);\n  }\n\n  componentDidMount() {\n    ReportStore.listen(this.onChangeRp);\n    UIStore.listen(this.onChangeUI);\n    this.onChangeUI(UIStore.getState());\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onChangeUI);\n    ReportStore.unlisten(this.onChangeRp);\n  }\n\n  onClose() {\n    DetailActions.close(this.props.graph, true);\n  }\n\n  onChangeUI(state) {\n    const { selectedObjTags, defaultObjTags } = this.state;\n    ReportActions.updateCheckedTags.defer({\n      uiState: state,\n      reportState: { selectedObjTags, defaultObjTags }\n    });\n  }\n\n  onChangeRp(state) {\n    const { selectedObjTags, defaultObjTags } = state;\n    const selectedComputedProps = [];\n    state.selectedObjs.filter(s => s.molecule_computed_props).forEach((s) => {\n      const cprops = s.molecule_computed_props.sort((a, b) => (\n        a.updated_at - b.updated_at\n      ));\n      const cprop = {\n        name: s.short_label,\n        svgPath: `/images/samples/${s.sample_svg_file}`,\n        props: cprops[cprops.length - 1]\n      };\n      selectedComputedProps.push(cprop);\n    });\n\n    this.setState({\n      selectedComputedProps,\n      selectedObjTags,\n      defaultObjTags\n    });\n  }\n\n  render() {\n    const { selectedComputedProps } = this.state;\n    const header = (\n      <div>\n        {'Graph'}\n        <div className=\"button-right\">\n          <Button\n            key=\"closeBtn\"\n            onClick={this.onClose}\n            bsStyle=\"danger\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n          >\n            <i className=\"fa fa-times\" />\n          </Button>\n        </div>\n      </div>\n    );\n\n    return (\n      <Panel\n        bsStyle=\"primary\"\n      >\n        <Panel.Heading>\n          {header}\n        </Panel.Heading>\n        <Panel.Body>\n          <Accordion>\n            <ComputedPropsGraphContainer\n              show\n              style={{ overflowY: 'auto', maxHeight: 'calc(100vh - 303px)' }}\n              graphData={selectedComputedProps}\n            />\n          </Accordion>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nGraphContainer.propTypes = {\n  graph: PropTypes.object.isRequired\n};\n","import 'whatwg-fetch';\nimport Immutable from 'immutable';\nimport Literature from 'src/models/Literature';\n\nexport default class LiteraturesFetcher {\n  static fetchElementReferences(element, is_all = false) {\n    if (!element || element.isNew) {\n      return Promise.resolve(Immutable.List());\n    }\n    const { type, id } = element;\n    return fetch(`/api/v1/literatures?element_type=${type}&element_id=${id}&is_all=${is_all}`, {\n      credentials: 'same-origin'\n    }).then((response) => response.json())\n      .then((json) => json.literatures)\n      .then((lits) => lits.reduce((acc, l) => acc.set(l.literal_id, l), new Immutable.Map()))\n      .then((literatures) => literatures.map((literature) => new Literature(literature)))\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static postElementReference(params) {\n    const { element, literature } = params;\n    const { type, id } = element;\n    if (!element || element.isNew) {\n      return Promise.resolve(Immutable.List());\n    }\n    return fetch('/api/v1/literatures', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ element_type: type, element_id: id, ref: literature })\n    }).then((response) => response.json())\n      .then((json) => { if (json.error) { throw json; } return json.literatures; })\n      .then((lits) => lits.reduce((acc, l) => acc.set(l.literal_id, l), new Immutable.Map()))\n      .then((literatures) => literatures.map((lits) => new Literature(lits)))\n      .catch((errorMessage) => { console.log(errorMessage); throw errorMessage; });\n  }\n\n  static deleteElementReference(params) {\n    const { element, literature } = params;\n    const { type, id } = element;\n    const refId = literature.literal_id;\n\n    const urlParams = new URLSearchParams({\n      id: refId,\n      element_type: type,\n      element_id: id\n    });\n\n    const requestParams = {\n      credentials: 'same-origin',\n      method: 'delete',\n      headers: {\n        Accept: 'application/json',\n      },\n    };\n\n    return fetch(`/api/v1/literatures?${urlParams}`, requestParams)\n      .then((response) => (response.status === 200 ? {} : response.json()))\n      .then((json) => { if (json.error) { throw json; } })\n      .catch((errorMessage) => { throw errorMessage; });\n  }\n\n  static updateReferenceType(params) {\n    return fetch('/api/v1/literatures', {\n      credentials: 'same-origin',\n      method: 'put',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => response.json())\n      .then((json) => { if (json.error) { throw json; } return json.literatures; })\n      .then((literatures) => literatures.map((lits) => new Literature(lits)))\n      .then((lits) => lits.reduce((acc, l) => acc.set(l.literal_id, l), new Immutable.Map()))\n      .catch((errorMessage) => { console.log(errorMessage); throw errorMessage; });\n  }\n\n  static fetchDOIMetadata(doi) {\n    return fetch(`/api/v1/literatures/doi/metadata?doi=${encodeURIComponent(doi)}`, {\n      credentials: 'same-origin',\n    }).then((response) => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchReferencesByCollection(params) {\n    return fetch(`/api/v1/literatures/collection?id=${params.id}&is_sync_to_me=${params.is_sync_to_me || false}`, {\n      credentials: 'same-origin',\n    }).then((response) => response.json())\n      .then((json) => {\n        const {\n          collectionRefs,\n          sampleRefs,\n          reactionRefs,\n          researchPlanRefs,\n        } = json;\n        return {\n          collectionRefs: Immutable.List(collectionRefs.map((lit) => new Literature(lit))),\n          sampleRefs: Immutable.List(sampleRefs.map((lit) => new Literature(lit))),\n          reactionRefs: Immutable.List(reactionRefs.map((lit) => new Literature(lit))),\n          researchPlanRefs: Immutable.List(researchPlanRefs.map((lit) => new Literature(lit))),\n        };\n      })\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static postReferencesByUIState(params, method = 'post') {\n    return fetch('/api/v1/literatures/ui_state', {\n      credentials: 'same-origin',\n      method,\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => response.json())\n      .then((json) => json.selectedRefs.map((lit) => new Literature(lit)))\n      .then((lits) => lits.reduce((acc, l) => acc.set(l.literal_id, l), new Immutable.Map()))\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","import React, { Component } from 'react';\nimport Clipboard from 'clipboard';\nimport PropTypes from 'prop-types';\nimport {\n  Table,\n  PanelGroup,\n  Button,\n  Panel,\n  ListGroup,\n  ListGroupItem,\n  Row,\n  Col,\n  OverlayTrigger,\n  Tooltip\n} from 'react-bootstrap';\nimport Immutable from 'immutable';\nimport { uniqBy } from 'lodash';\nimport {\n  Citation,\n  CitationUserRow,\n  doiValid,\n  sanitizeDoi,\n  AddButton,\n  LiteratureInput,\n  sortByElement,\n  LiteralType,\n  literatureContent\n} from 'src/apps/mydb/elements/details/literature/LiteratureCommon';\nimport Literature from 'src/models/Literature';\nimport LiteratureMap from 'src/models/LiteratureMap';\nimport LiteraturesFetcher from 'src/fetchers/LiteraturesFetcher';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport PanelHeader from 'src/components/common/PanelHeader';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nconst Cite = require('citation-js');\n\nconst CloseBtn = ({ onClose }) => (\n  <Button\n    key=\"closeBtn\"\n    onClick={onClose}\n    bsStyle=\"danger\"\n    bsSize=\"xsmall\"\n    className=\"button-right\"\n  >\n    <i className=\"fa fa-times\" />\n  </Button>\n);\n\nCloseBtn.propTypes = {\n  onClose: PropTypes.func.isRequired,\n};\n\nconst clipboardTooltip = () => (\n  <Tooltip id=\"assign_button\">copy to clipboard</Tooltip>\n);\n\nconst ElementLink = ({ literature }) => {\n  const {\n    external_label,\n    short_label,\n    name,\n    element_type,\n    element_id,\n  } = literature;\n  const type = element_type && element_type.toLowerCase();\n  return (\n    <Button\n      title={`${external_label ? external_label.concat(' - ') : ''}${name}`}\n      onClick={() => {\n        const { uri, namedParams } = Aviator.getCurrentRequest();\n        const uriArray = uri.split(/\\//);\n        if (type && element_id) {\n          Aviator.navigate(`/${uriArray[1]}/${uriArray[2]}/${type}/${element_id}`);\n        }\n      }}\n    >\n      <i className={element_type ? 'icon-'.concat(type) : ''} />\n      &nbsp; {short_label}\n    </Button>\n  );\n};\nElementLink.propTypes = {\n  literature: PropTypes.instanceOf(Literature).isRequired,\n};\n\nconst ElementTypeLink = ({ literature, type }) => {\n  const {\n    count\n  } = literature;\n  return (\n    <Button title={`cited in ${count} ${type}${count && count > 1 ? 's' : ''}`}>\n      <i className={`icon-${type}`} />\n      &nbsp; {count}\n    </Button>\n  );\n};\nElementTypeLink.propTypes = {\n  literature: PropTypes.instanceOf(Literature).isRequired,\n  type: PropTypes.string\n};\nElementTypeLink.defaultProps = {\n  type: 'sample'\n};\n\nconst CitationTable = ({ rows, sortedIds, userId, removeCitation }) => (\n  <Table>\n    <tbody>\n      {sortedIds.map((id, k, ids) => {\n        const citation = rows.get(id);\n        const prevCit = (k > 0) ? rows.get(ids[k - 1]) : null;\n        const sameRef = prevCit && prevCit.id === citation.id;\n        const sameElement = prevCit && prevCit.element_id === citation.element_id && prevCit.element_type === citation.element_type;\n        return sameRef && sameElement ? (\n          <tr key={`header-${id}-${citation.id}`} className={`collapse cit_${citation.id}-${citation.element_type}_${citation.element_id}`}>\n            <td />\n            <td className=\"padding-right\">\n              <CitationUserRow literature={citation} userId={userId} />\n            </td>\n            <td>\n              <Button\n                bsSize=\"small\"\n                bsStyle=\"danger\"\n                onClick={() => removeCitation(citation)}\n              >\n                <i className=\"fa fa-trash-o\" />\n              </Button>\n            </td>\n          </tr>\n        ) : (\n          <tr key={id} className={``}>\n            <td>{sameElement ? null : <ElementLink literature={citation} />}</td>\n            <td className=\"padding-right\">\n              <Citation literature={citation} />\n            </td>\n            <td>\n            </td>\n          </tr>\n        );\n      })}\n    </tbody>\n  </Table>\n);\n\nexport default class LiteratureDetails extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      ...this.props.literatureMap,\n      literature: Literature.buildEmpty(),\n      sorting: 'element',\n      sortedIds: [],\n      selectedRefs: new Immutable.Map()\n    };\n    this.onClose = this.onClose.bind(this);\n    this.handleUIStoreChange = this.handleUIStoreChange.bind(this);\n    this.clipboard = new Clipboard('.clipboardBtn');\n    this.handleInputChange = this.handleInputChange.bind(this);\n    this.handleLiteratureAdd = this.handleLiteratureAdd.bind(this);\n    this.handleLiteratureRemove = this.handleLiteratureRemove.bind(this);\n    this.fetchDOIMetadata = this.fetchDOIMetadata.bind(this);\n  }\n\n  componentDidMount() {\n    const { currentCollection, sample, reaction } = UIStore.getState();\n    LiteraturesFetcher.fetchReferencesByCollection(currentCollection).then((literatures) => {\n      this.setState(prevState => ({\n        ...prevState,\n        ...literatures,\n        currentCollection,\n        sample: { ...sample },\n        reaction: { ...reaction },\n\n      }));\n    });\n    UIStore.listen(this.handleUIStoreChange);\n  }\n\n  componentWillUnmount() {\n    this.clipboard.destroy();\n    UIStore.unlisten(this.handleUIStoreChange);\n  }\n\n  onClose() {\n    DetailActions.close(this.props.literatureMap, true);\n  }\n\n  handleUIStoreChange(state) {\n    const cCol = this.state.currentCollection;\n    const { currentCollection, sorting } = state;\n\n    if (cCol && currentCollection &&\n      (cCol.id !== currentCollection.id || cCol.is_sync_to_me !== currentCollection.is_sync_to_me)\n    ) {\n      LiteraturesFetcher.fetchReferencesByCollection(currentCollection).then((literatures) => {\n\n        this.setState(prevState => ({\n          ...prevState,\n          ...literatures,\n          currentCollection,\n          sample: {},\n          reaction: {},\n        }));\n      });\n      return null;\n    }\n    const { sample, reaction } = state;\n    const prevSample = this.state.sample;\n    const prevReaction = this.state.reaction;\n\n    if (prevSample.checkedIds !== sample.checkedIds\n      || prevSample.unCheckedIds !== sample.unCheckedIds\n      || prevSample.checkedAll !== sample.checkedAll\n      || prevReaction.checkedIds !== reaction.checkedIds\n      || prevReaction.unCheckedIds !== reaction.unCheckedIds\n      || prevReaction.checkedAll !== reaction.checkedAll\n    ) {\n      const params = {\n        sample,\n        reaction,\n        id: currentCollection.id,\n        is_sync_to_me: currentCollection.is_sync_to_me\n\n      };\n      LiteraturesFetcher.postReferencesByUIState(params).then((selectedRefs) => {\n        const sortedIds = sortByElement(selectedRefs);\n        this.setState(prevState => ({\n          ...prevState,\n          selectedRefs,\n          currentCollection,\n          sample: { ...sample },\n          reaction: { ...reaction },\n          sortedIds\n        }));\n      });\n    }\n    return null;\n  }\n\n  handleLiteratureRemove(literature) {\n    const { element_type, element_id } = literature;\n    LiteraturesFetcher.deleteElementReference({ element: { type: element_type.toLowerCase(), id: element_id }, literature })\n      .then(() => {\n        this.setState(prevState => ({\n          ...prevState,\n          literatures: prevState.selectedRefs.delete(literature.literal_id),\n          sortedIds: sortByElement(prevState.selectedRefs.delete(literature.literal_id))\n        }));\n      });\n  }\n\n  handleInputChange(type, event) {\n    const { literature } = this.state;\n    const { value } = event.target;\n    switch (type) {\n      case 'url':\n        literature.url = value;\n        break;\n      case 'title':\n        literature.title = value;\n        break;\n      case 'doi':\n        literature.doi = value;\n        break;\n      case 'litype':\n        literature.litype = value;\n        break;\n      default:\n        break;\n    }\n    this.setState(prevState => ({ ...prevState, literature }));\n  }\n\n  handleLiteratureAdd(literature) {\n    const { doi } = literature;\n\n    const { currentCollection, sample, reaction } = UIStore.getState();\n    const params = {\n      sample,\n      reaction,\n      id: currentCollection.id,\n      is_sync_to_me: currentCollection.is_sync_to_me,\n      ref: { ...literature, doi: sanitizeDoi(doi || '') }\n    };\n    LiteraturesFetcher.postReferencesByUIState(params).then((selectedRefs) => {\n      this.setState(prevState => ({\n        ...prevState,\n        selectedRefs,\n        currentCollection,\n        sample: { ...sample },\n        reaction: { ...reaction },\n        sortedIds: sortByElement(selectedRefs),\n      }));\n    });\n  }\n\n  fetchDOIMetadata() {\n    const { doi } = this.state.literature;\n    NotificationActions.removeByUid('literature');\n    Cite.async(sanitizeDoi(doi)).then((json) => {\n      if (json.data && json.data.length > 0) {\n        const citation = new Cite(json.data[0]);\n        const { title, year } = json.data[0];\n        this.setState(prevState => ({\n          ...prevState,\n          literature: {\n            ...prevState.literature,\n            title,\n            year,\n            refs: {\n              citation,\n              bibtex: citation.format('bibtex')\n            }\n          }\n        }));\n        this.handleLiteratureAdd(this.state.literature);\n      }\n    }).catch(() => {\n      const notification = {\n        title: 'Add References for selected Elements',\n        message: `unable to fetch metadata for this doi: ${doi}`,\n        level: 'error',\n        dismissible: 'button',\n        autoDismiss: 5,\n        position: 'tr',\n        uid: 'literature'\n      };\n      NotificationActions.add(notification);\n    });\n  }\n\n  render() {\n    const {\n      sampleRefs,\n      reactionRefs,\n      selectedRefs,\n      sortedIds,\n      currentCollection,\n      literature\n    } = this.state;\n    const { currentUser } = UserStore.getState();\n    const label = currentCollection ? currentCollection.label : null;\n    let contentSamples = '';\n    sampleRefs.forEach((citation) => {\n      contentSamples = `${contentSamples}\\n${literatureContent(citation, true)}`;\n    });\n    let contentReactions = '';\n    reactionRefs.forEach((citation) => {\n      contentReactions = `${contentReactions}\\n${literatureContent(citation, true)}`;\n    });\n    const elements = [];\n    let contentElements = '';\n\n    selectedRefs.forEach((citation) => {\n      elements.push(literatureContent(citation, true));\n    });\n\n    uniqBy(elements).forEach((element) => {\n      contentElements = `${contentElements}\\n${element}`;\n    });\n\n    return (\n      <Panel\n        bsStyle=\"info\"\n        className=\"format-analysis-panel\"\n      >\n        <Panel.Heading>\n          <PanelHeader\n            title={`Literature Management for collection '${label}'`}\n            btns={[<CloseBtn key=\"close tab\" onClose={this.onClose} />]}\n          />\n        </Panel.Heading>\n        <Panel.Body>\n          <PanelGroup accordion defaultActiveKey=\"1\">\n            <Panel\n              eventKey=\"2\"\n              collapsible=\"true\"\n            >\n              <Panel.Heading>\n                <Row>\n                  <Col md={11} style={{ paddingRight: 0 }}>\n                    <Panel.Title toggle>\n                      References for Samples\n                    </Panel.Title>\n                  </Col>\n                  <Col md={1}>\n                    <Panel.Title>\n                      <OverlayTrigger placement=\"bottom\" overlay={clipboardTooltip()}>\n                        <Button bsSize=\"xsmall\" active className=\"button-right clipboardBtn\" data-clipboard-text={contentSamples} >\n                          <i className=\"fa fa-clipboard\" />\n                        </Button>\n                      </OverlayTrigger>\n                    </Panel.Title>\n                  </Col>\n                </Row>\n              </Panel.Heading>\n              <Panel.Body collapsible=\"true\">\n                <Table>\n                  <thead><tr><th width=\"10%\" /><th width=\"80%\" /><th width=\"10%\" /></tr></thead>\n                  <tbody>\n                    {sampleRefs.map(lit => (\n                      <tr key={`sampleRef-${lit.id}`}>\n                        <td><ElementTypeLink literature={lit} type=\"sample\" /></td>\n                        <td className=\"padding-right\">\n                          <Citation literature={lit} />\n                        </td>\n                        <td />\n                      </tr>\n                    ))}\n                  </tbody>\n                </Table>\n              </Panel.Body>\n            </Panel>\n            <Panel\n              eventKey=\"3\"\n              collapsible=\"true\"\n            >\n              <Panel.Heading>\n                <Row>\n                  <Col md={11} style={{ paddingRight: 0 }}>\n                    <Panel.Title toggle>\n                      References for Reactions\n                    </Panel.Title>\n                  </Col>\n                  <Col md={1}>\n                    <Panel.Title>\n                      <OverlayTrigger placement=\"bottom\" overlay={clipboardTooltip()}>\n                        <Button bsSize=\"xsmall\" active className=\"button-right clipboardBtn\" data-clipboard-text={contentReactions} >\n                          <i className=\"fa fa-clipboard\" />\n                        </Button>\n                      </OverlayTrigger>\n                    </Panel.Title>\n                  </Col>\n                </Row>\n              </Panel.Heading>\n              <Panel.Body collapsible=\"true\">\n                <Table>\n                  <thead><tr><th width=\"10%\" /><th width=\"80%\" /><th width=\"10%\" /></tr></thead>\n                  <tbody>\n                    {reactionRefs.map(lit => (\n                      <tr key={`reactionRef-${lit.id}`}>\n                        <td><ElementTypeLink literature={lit} type=\"reaction\" /></td>\n                        <td className=\"padding-right\">\n                          <Citation literature={lit} />\n                        </td>\n                        <td />\n                      </tr>\n                    ))}\n                  </tbody>\n                </Table>\n              </Panel.Body>\n            </Panel>\n            <Panel\n              eventKey=\"4\"\n              collapsible=\"true\"\n            >\n              <Panel.Heading>\n                <Row>\n                  <Col md={11} style={{ paddingRight: 0 }}>\n                    <Panel.Title toggle>\n                      References for selected Elements\n                    </Panel.Title>\n                  </Col>\n                  <Col md={1}>\n                    <Panel.Title>\n                      <OverlayTrigger placement=\"bottom\" overlay={clipboardTooltip()}>\n                        <Button bsSize=\"xsmall\" active className=\"button-right clipboardBtn\" data-clipboard-text={contentElements} >\n                          <i className=\"fa fa-clipboard\" />\n                        </Button>\n                      </OverlayTrigger>\n                    </Panel.Title>\n                  </Col>\n                </Row>\n              </Panel.Heading>\n              <Panel.Body collapsible=\"true\">\n                <ListGroup>\n                  <ListGroupItem>\n                    <Row>\n                      <Col md={8} style={{ paddingRight: 0 }}>\n                        <LiteratureInput handleInputChange={this.handleInputChange} literature={literature} field=\"doi\" placeholder=\"DOI: 10.... or  http://dx.doi.org/10... or 10. ...\" />\n                      </Col>\n                      <Col md={3} style={{ paddingRight: 0 }}>\n                        <LiteralType handleInputChange={this.handleInputChange} disabled={false} val={literature.litype} />\n                      </Col>\n                      <Col md={1} style={{ paddingRight: 0 }}>\n                        <Button\n                          bsStyle=\"success\"\n                          bsSize=\"small\"\n                          style={{ marginTop: 2 }}\n                          onClick={this.fetchDOIMetadata}\n                          title=\"fetch metadata for this doi and add citation to selection\"\n                          disabled={!doiValid(literature.doi)}\n                        >\n                          <i className=\"fa fa-plus\" />\n                        </Button>\n                      </Col>\n                      <Col md={12} style={{ paddingRight: 0 }}>\n                        <Citation literature={literature} />\n                      </Col>\n                      <Col md={7} style={{ paddingRight: 0 }}>\n                        <LiteratureInput handleInputChange={this.handleInputChange} literature={literature} field=\"title\" placeholder=\"Title...\" />\n                      </Col>\n                      <Col md={4} style={{ paddingRight: 0 }}>\n                        <LiteratureInput handleInputChange={this.handleInputChange} literature={literature} field=\"url\" placeholder=\"URL...\" />\n                      </Col>\n                      <Col md={1}>\n                        <AddButton onLiteratureAdd={this.handleLiteratureAdd} literature={literature} title=\"add citation to selection\" />\n                      </Col>\n                    </Row>\n                  </ListGroupItem>\n                </ListGroup>\n                <CitationTable rows={selectedRefs} sortedIds={sortedIds} removeCitation={this.handleLiteratureRemove} userId={currentUser.id} />\n              </Panel.Body>\n            </Panel>\n          </PanelGroup>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nLiteratureDetails.propTypes = {\n  literatureMap: PropTypes.instanceOf(LiteratureMap).isRequired\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, OverlayTrigger, Tooltip} from 'react-bootstrap';\nimport PanelHeader from 'src/components/common/PanelHeader';\n\nconst MetadataHeader = ({ title, saveBtnDisplay, onSave, onClose }) => {\n  const onSaveAndClose = () => {\n    onSave()\n    onClose()\n  }\n  const btns = [\n     <OverlayTrigger placement=\"bottom\" key=\"closeMetadata\"\n        overlay={<Tooltip id=\"closeMetadata\">Close Metadata</Tooltip>}>\n      <Button\n        bsStyle=\"danger\"\n        bsSize=\"xsmall\"\n        className=\"button-right\"\n        onClick={onClose}>\n        <i className=\"fa fa-times\" />\n      </Button>\n    </OverlayTrigger>\n  ]\n  if (saveBtnDisplay) {\n    btns.push(\n      <OverlayTrigger placement=\"bottom\" key=\"saveCloseMetadata\"\n          overlay={<Tooltip id=\"saveCloseMetadata\">Save and Close Metadata</Tooltip>}>\n        <Button bsStyle=\"warning\" bsSize=\"xsmall\" className=\"button-right\"\n          onClick={onSaveAndClose}>\n          <i className=\"fa fa-floppy-o\" />\n          <i className=\"fa fa-times\"  />\n        </Button>\n      </OverlayTrigger>,\n      <OverlayTrigger placement=\"bottom\" key=\"saveMetadata\"\n          overlay={<Tooltip id=\"saveMetadata\">Save Metadata</Tooltip>}>\n        <Button bsStyle=\"warning\" bsSize=\"xsmall\" className=\"button-right\"\n          onClick={onSave}>\n          <i className=\"fa fa-floppy-o \"></i>\n        </Button>\n      </OverlayTrigger>\n    )\n  }\n\n  return <PanelHeader title={title} btns={btns} />\n}\n\nMetadataHeader.propTypes = {\n  title: PropTypes.string,\n  onSave: PropTypes.func.isRequired,\n  saveBtnDisplay: PropTypes.bool.isRequired,\n  onClose: PropTypes.func.isRequired\n}\n\nexport default MetadataHeader\n","export const subjectAreas = [\n  {label: 'Agriculture', value: 'AGRICULTURE'},\n  {label: 'Architecture', value: 'ARCHITECTURE'},\n  {label: 'Arts and Media', value: 'ARTS_AND_MEDIA'},\n  {label: 'Astrophysics and Astronomy', value: 'ASTROPHYSICS_AND_ASTRONOMY'},\n  {label: 'Biochemistry', value: 'BIOCHEMISTRY'},\n  {label: 'Biology', value: 'BIOLOGY'},\n  {label: 'Behavioural Sciences', value: 'BEHAVIOURAL_SCIENCES'},\n  {label: 'Chemistry', value: 'CHEMISTRY'},\n  {label: 'Computer Science', value: 'COMPUTER_SCIENCE'},\n  {label: 'Economics', value: 'ECONOMICS'},\n  {label: 'Engineering', value: 'ENGINEERING'},\n  {label: 'Environmental Science and Ecology', value: 'ENVIRONMENTAL_SCIENCE_AND_ECOLOGY'},\n  {label: 'Ethnology', value: 'ETHNOLOGY'},\n  {label: 'Geological Science', value: 'GEOLOGICAL_SCIENCE'},\n  {label: 'Geography', value: 'GEOGRAPHY'},\n  {label: 'History', value: 'HISTORY'},\n  {label: 'Horticulture', value: 'HORTICULTURE'},\n  {label: 'Information Technology', value: 'INFORMATION_TECHNOLOGY'},\n  {label: 'Life Science', value: 'LIFE_SCIENCE'},\n  {label: 'Linguistics', value: 'LINGUISTICS'},\n  {label: 'Materials Science', value: 'MATERIALS_SCIENCE'},\n  {label: 'Mathematics', value: 'MATHEMATICS'},\n  {label: 'Medicine', value: 'MEDICINE'},\n  {label: 'Philosophy', value: 'PHILOSOPHY'},\n  {label: 'Physics', value: 'PHYSICS'},\n  {label: 'Psychology', value: 'PSYCHOLOGY'},\n  {label: 'Social Sciences', value: 'SOCIAL_SCIENCES'},\n  {label: 'Software Technology', value: 'SOFTWARE_TECHNOLOGY'},\n  {label: 'Sports', value: 'SPORTS'},\n  {label: 'Theology', value: 'THEOLOGY'},\n  {label: 'Veterinary Medicine', value: 'VETERINARY_MEDICINE'},\n  {label: 'Other', value: 'OTHER'}\n]\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Button, ControlLabel, FormControl, FormGroup, Row, Col } from 'react-bootstrap'\nimport Select from 'react-select3'\n\nimport { subjectAreas } from 'src/components/staticDropdownOptions/radar/subjectAreas'\n\nconst MetadataGeneral = ({ metadata, onAdd, onChange, onRemove }) => (\n  <div>\n    <h4>General</h4>\n    {metadata.datasetUrl && <FormGroup>\n      <ControlLabel>\n        RADAR Dataset URL\n      </ControlLabel>\n      <p>\n        <a href={metadata.datasetUrl} target=\"_blank\">{metadata.datasetUrl}</a>\n      </p>\n    </FormGroup>}\n    {metadata.fileUrl && <FormGroup>\n      <ControlLabel>\n        RADAR File URL\n      </ControlLabel>\n      <p>\n        <a href={metadata.fileUrl} target=\"_blank\">{metadata.fileUrl}</a>\n      </p>\n    </FormGroup>}\n    <FormGroup>\n      <ControlLabel>\n        Title\n      </ControlLabel>\n      <FormControl\n        type=\"text\"\n        value={metadata.title}\n        onChange={event => onChange(event.target.value, 'title')}\n      />\n    </FormGroup>\n    <FormGroup>\n      <ControlLabel>\n        Description\n      </ControlLabel>\n      <FormControl\n        componentClass=\"textarea\"\n        rows={8}\n        value={metadata.description}\n        onChange={event => onChange(event.target.value, 'description')}\n      />\n    </FormGroup>\n    <h4>Subject areas</h4>\n    {\n      metadata.subjectAreas && metadata.subjectAreas.map((subjectArea, index) => {\n        const value = subjectAreas.find(el => el.value == subjectArea.controlledSubjectAreaName)\n        return (\n          <Row key={index}>\n            <Col sm={11}>\n              <FormGroup>\n                <Select\n                  name=\"subject\"\n                  options={subjectAreas}\n                  onChange={option => onChange(option.value, 'subjectAreas', index, 'controlledSubjectAreaName')}\n                  value={value}\n                  menuPortalTarget={document.body}\n                  styles={{ menuPortal: base => ({ ...base, zIndex: 9999 }) }}\n                />\n              </FormGroup>\n            </Col>\n            <Col sm={1}>\n              <Button bsStyle=\"danger\" onClick={() => onRemove('subjectAreas', index)}>\n                <i className=\"fa fa-trash-o\" />\n              </Button>\n            </Col>\n          </Row>\n        )\n      })\n    }\n    <Button bsStyle=\"success\" bsSize=\"small\" onClick={event => onAdd('subjectAreas')}>\n      Add new subject area\n    </Button>\n    <h4>Keywords</h4>\n    {\n      metadata.keywords && metadata.keywords.map((keyword, index) => (\n        <Row key={index}>\n          <Col sm={11}>\n            <FormGroup>\n              <FormControl\n                type=\"text\"\n                value={keyword}\n                onChange={event => onChange(event.target.value, 'keywords', index)}\n              />\n            </FormGroup>\n          </Col>\n          <Col sm={1}>\n            <Button bsStyle=\"danger\" onClick={() => onRemove('keywords', index)}>\n              <i className=\"fa fa-trash-o\" />\n            </Button>\n          </Col>\n        </Row>\n      ))\n    }\n    <Button bsStyle=\"success\" bsSize=\"small\" onClick={event => onAdd('keywords')}>\n      Add new keyword\n    </Button>\n  </div>\n);\n\nMetadataGeneral.propTypes = {\n  metadata: PropTypes.object.isRequired,\n  onAdd: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataGeneral;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Col, ControlLabel, FormControl, FormGroup, Row } from 'react-bootstrap';\n\nconst MetadataCreator = ({ creator, index, onAdd, onChange, onRemove }) => (\n  <div>\n    <Row>\n      <Col sm={4}>\n        <FormGroup>\n          <ControlLabel>\n            Given name\n          </ControlLabel>\n          <FormControl\n            type=\"text\"\n            value={creator.givenName}\n            onChange={event => onChange(event.target.value, 'creators', index, 'givenName')}\n          />\n        </FormGroup>\n      </Col>\n      <Col sm={4}>\n        <FormGroup>\n          <ControlLabel>\n            Family name\n          </ControlLabel>\n          <FormControl\n            type=\"text\"\n            value={creator.familyName}\n            onChange={event => onChange(event.target.value, 'creators', index, 'familyName')}\n          />\n        </FormGroup>\n      </Col>\n      <Col sm={4}>\n        <FormGroup>\n          <ControlLabel>\n            ORCID iD\n          </ControlLabel>\n          <FormControl\n            type=\"text\"\n            value={creator.orcid}\n            onChange={event => onChange(event.target.value, 'creators', index, 'orcid')}\n          />\n        </FormGroup>\n      </Col>\n    </Row>\n    <Row>\n      <Col sm={12}>\n        <FormGroup>\n          <ControlLabel>\n            Affiliations\n          </ControlLabel>\n          {\n            creator.affiliations && creator.affiliations.map((affliation, affiliationIndex) => (\n              <Row key={affiliationIndex} className=\"align-items-center metadata-affiliation\">\n                <Col xs={8}>\n                  <FormControl\n                    type=\"text\"\n                    value={affliation.affiliation}\n                    onChange={event => onChange(event.target.value, 'creators', index, 'affiliations', affiliationIndex, 'affiliation')}\n                  />\n                </Col>\n                <Col xs={4}>\n                  <Button bsStyle=\"danger\" onClick={() => onRemove('creators', index, 'affiliations', affiliationIndex)}>\n                    <i className=\"fa fa-trash-o\" />\n                  </Button>\n                  {\n                    (affiliationIndex === creator.affiliations.length - 1) &&\n                    <Button\n                      className=\"metadata-add-affiliation\" bsStyle=\"success\"\n                      onClick={() => onAdd('creators', index, 'affiliations')}>\n                      <i className=\"fa fa-plus\" />\n                    </Button>\n                  }\n                </Col>\n              </Row>\n            ))\n          }\n        </FormGroup>\n      </Col>\n      <Col sm={12}>\n        <Button bsStyle=\"danger\" bsSize=\"small\" onClick={() => onRemove('creators', index)}>\n          Remove creator\n        </Button>\n      </Col>\n    </Row>\n    <hr />\n  </div>\n);\n\nMetadataCreator.propTypes = {\n  creator: PropTypes.object.isRequired,\n  index: PropTypes.number.isRequired,\n  onAdd: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataCreator;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\n\nimport MetadataCreator from 'src/components/metadata/MetadataCreator';\n\nconst MetadataCreators = ({ metadata, onAdd, onChange, onRemove }) => (\n  <div>\n    <h4>Creators</h4>\n    <p>\n      The main researchers involved in producing the data, or the authors of the publication.\n    </p>\n    {\n      metadata.creators && metadata.creators.map((creator, index) => (\n        <MetadataCreator\n          creator={creator} index={index} key={index}\n          onAdd={onAdd} onChange={onChange} onRemove={onRemove}\n        />\n      ))\n    }\n    <Button bsStyle=\"success\" bsSize=\"small\" onClick={() => onAdd('creators')}>\n      Add new creator\n    </Button>\n  </div>\n)\n\nMetadataCreators.propTypes = {\n  metadata: PropTypes.object.isRequired,\n  onAdd: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataCreators;\n","export const contributorTypes = [\n  {label: 'ContactPerson', value: 'CONTACT_PERSON'},\n  {label: 'DataCollector', value: 'DATA_COLLECTOR'},\n  {label: 'DataCurator', value: 'DATA_CURATOR'},\n  {label: 'DataManager', value: 'DATA_MANAGER'},\n  {label: 'Distributor', value: 'DISTRIBUTOR'},\n  {label: 'Editor', value: 'EDITOR'},\n  {label: 'HostingInstitution', value: 'HOSTING_INSTITUTION'},\n  {label: 'Producer', value: 'PRODUCER'},\n  {label: 'ProjectLeader', value: 'PROJECT_LEADER'},\n  {label: 'ProjectManager', value: 'PROJECT_MANAGER'},\n  {label: 'ProjectMember', value: 'PROJECT_MEMBER'},\n  {label: 'RegistrationAgency', value: 'REGISTRATION_AGENCY'},\n  {label: 'RegistrationAuthority', value: 'REGISTRATION_AUTHORITY'},\n  {label: 'RelatedPerson', value: 'RELATED_PERSON'},\n  {label: 'Researcher', value: 'RESEARCHER'},\n  {label: 'ResearchGroup', value: 'RESEARCH_GROUP'},\n  {label: 'Sponsor', value: 'SPONSOR'},\n  {label: 'WorkPackageLeader', value: 'WORK_PACKAGE_LEADER'},\n  {label: 'Other', value: 'OTHER'}\n]\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Col, ControlLabel, FormControl, FormGroup, Row } from 'react-bootstrap';\nimport Select from 'react-select3';\n\nimport { contributorTypes } from 'src/components/staticDropdownOptions/radar/contributorTypes'\n\nconst MetadataContributor = ({ contributor, index, onAdd, onChange, onRemove }) => {\n  const contributorType = contributorTypes.find(el => el.value == contributor.contributorType)\n\n  return (\n    <div>\n      <Row>\n        <Col sm={4}>\n          <FormGroup>\n            <ControlLabel>\n              Given name\n            </ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={contributor.givenName}\n              onChange={event => onChange(event.target.value, 'contributors', index, 'givenName')}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={4}>\n          <FormGroup>\n            <ControlLabel>\n              Family name\n            </ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={contributor.familyName}\n              onChange={event => onChange(event.target.value, 'contributors', index, 'familyName')}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={4}>\n          <FormGroup>\n            <ControlLabel>\n              ORCID iD\n            </ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={contributor.orcid}\n              onChange={event => onChange(event.target.value, 'contributors', index, 'orcid')}\n            />\n          </FormGroup>\n        </Col>\n      </Row>\n      <Row>\n        <Col sm={8}>\n          <FormGroup>\n            <ControlLabel>\n              Contributor type\n            </ControlLabel>\n            <Select\n              name=\"contributorType\"\n              options={contributorTypes}\n              onChange={option => onChange(option.value, 'contributors', index, 'contributorType')}\n              value={contributorType}\n              menuPortalTarget={document.body}\n              styles={{ menuPortal: base => ({ ...base, zIndex: 9999 }) }}\n            />\n          </FormGroup>\n        </Col>\n      </Row>\n      <Row>\n        <Col sm={12}>\n          <FormGroup>\n            <ControlLabel>\n              Affiliations\n            </ControlLabel>\n            {\n              contributor.affiliations && contributor.affiliations.map((affliation, affiliationIndex) => (\n                <Row key={affiliationIndex} className=\"align-items-center metadata-affiliation\">\n                  <Col xs={8}>\n                    <FormControl\n                      type=\"text\"\n                      value={affliation.affiliation}\n                      onChange={event => onChange(event.target.value, 'contributors', index, 'affiliations', affiliationIndex, 'affiliation')}\n                    />\n                  </Col>\n                  <Col xs={4}>\n                    <Button\n                      className=\"metadata-remove-affiliation\" bsStyle=\"danger\"\n                      onClick={() => onRemove('contributors', index, 'affiliations', affiliationIndex)}>\n                      <i className=\"fa fa-trash-o\" />\n                    </Button>\n                    {\n                      (affiliationIndex === contributor.affiliations.length - 1) &&\n                      <Button\n                        className=\"metadata-add-affiliation\" bsStyle=\"success\"\n                        onClick={() => onAdd('contributors', index, 'affiliations')}>\n                        <i className=\"fa fa-plus\" />\n                      </Button>\n                    }\n                  </Col>\n                </Row>\n              ))\n            }\n          </FormGroup>\n        </Col>\n        <Col sm={12}>\n          <Button bsStyle=\"danger\" bsSize=\"small\" onClick={() => onRemove('contributors', index)}>\n            Remove contributor\n          </Button>\n        </Col>\n      </Row>\n      <hr />\n    </div>\n  )\n}\n\nMetadataContributor.propTypes = {\n  contributor: PropTypes.object.isRequired,\n  index: PropTypes.number.isRequired,\n  onAdd: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataContributor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\n\nimport MetadataContributor from 'src/components/metadata/MetadataContributor';\n\nconst MetadataContributors = ({ metadata, onAdd, onChange, onRemove }) => (\n  <div>\n    <h4>Contributors</h4>\n    <p>\n      The persons or institutions responsible for collecting, managing, distributing, or otherwise contributing to the\n      development of the resource.\n    </p>\n    {\n      metadata.contributors && metadata.contributors.map((creator, index) => (\n        <MetadataContributor\n          contributor={creator} index={index} key={index}\n          onAdd={onAdd} onChange={onChange} onRemove={onRemove}\n        />\n      ))\n    }\n    <Button bsStyle=\"success\" bsSize=\"small\" onClick={() => onAdd('contributors')}>\n      Add new contributor\n    </Button>\n  </div>\n)\n\nMetadataContributors.propTypes = {\n  metadata: PropTypes.object.isRequired,\n  onAdd: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataContributors;\n","export const alternateIdentifierTypes = [\n  {label: 'ARK', value: 'ARK'},\n  {label: 'arXiv', value: 'AR_XIV'},\n  {label: 'bibcode', value: 'BIBCODE'},\n  {label: 'DOI', value: 'DOI'},\n  {label: 'EAN13', value: 'EAN_13'},\n  {label: 'EISSN', value: 'EISSN'},\n  {label: 'Handle', value: 'HANDLE'},\n  {label: 'IGSN', value: 'IGSN'},\n  {label: 'ISBN', value: 'ISBN'},\n  {label: 'ISSN', value: 'ISSN'},\n  {label: 'ISTC', value: 'ISTC'},\n  {label: 'LISSN', value: 'LISSN'},\n  {label: 'LSID', value: 'LSID'},\n  {label: 'PMID', value: 'PMID'},\n  {label: 'PURL', value: 'PURL'},\n  {label: 'UPC', value: 'UPC'},\n  {label: 'URL', value: 'URL'},\n  {label: 'URN', value: 'URN'},\n  // {label: 'w3id', value: ''}\n]\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Col, ControlLabel, FormControl, FormGroup, Row } from 'react-bootstrap';\nimport Select from 'react-select3';\n\nimport { alternateIdentifierTypes } from 'src/components/staticDropdownOptions/radar/alternateIdentifierTypes'\n\nconst MetadataAlternateIdentifier = ({ alternateIdentifier, index, onChange, onRemove }) => {\n  const alternateIdentifierType = alternateIdentifierTypes.find(el => el.value == alternateIdentifier.alternateIdentifierType)\n\n  return (\n    <div>\n      <Row>\n        <Col sm={8}>\n          <FormGroup>\n            <ControlLabel>\n              Identifier\n            </ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={alternateIdentifier.value}\n              onChange={event => onChange(event.target.value, 'alternateIdentifiers', index, 'value')}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={3}>\n          <FormGroup>\n            <ControlLabel>\n              Identifier type\n            </ControlLabel>\n            <Select\n              name=\"alternateIdentifierType\"\n              options={alternateIdentifierTypes}\n              onChange={option => onChange(option.value, 'alternateIdentifiers', index, 'alternateIdentifierType')}\n              value={alternateIdentifierType}\n              menuPortalTarget={document.body}\n              styles={{ menuPortal: base => ({ ...base, zIndex: 9999 }) }}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={1}>\n          <ControlLabel>\n            &nbsp;\n          </ControlLabel>\n          <Button bsStyle=\"danger\" onClick={() => onRemove('alternateIdentifiers', index)}>\n            <i className=\"fa fa-trash-o\" />\n          </Button>\n        </Col>\n      </Row>\n    </div>\n  )\n}\n\nMetadataAlternateIdentifier.propTypes = {\n  alternateIdentifier: PropTypes.object.isRequired,\n  index: PropTypes.number.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataAlternateIdentifier;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\n\nimport MetadataAlternateIdentifier from 'src/components/metadata/MetadataAlternateIdentifier'\n\nconst MetadataAlternateIdentifiers = ({ metadata, onAdd, onChange, onRemove }) => {\n  return (\n    <div>\n      <h4>Alternate identifiers</h4>\n      <p>\n        An identifier other than the DOI applied to the collection. The alternate identifier\n        should be an additional identifier for the same instance of the resource (i.e., same location, same file).\n        For other places where the same content can be found, please use a related identifier.\n      </p>\n      {\n        metadata.alternateIdentifiers && metadata.alternateIdentifiers.map((alternateIdentifier, index) => (\n          <MetadataAlternateIdentifier\n            alternateIdentifier={alternateIdentifier} index={index} key={index}\n            onChange={onChange} onRemove={onRemove}\n          />\n        ))\n      }\n      <Button bsStyle=\"success\" bsSize=\"small\" onClick={event => onAdd('alternateIdentifiers')}>\n        Add new alternate identifier\n      </Button>\n    </div>\n  )\n}\n\nMetadataAlternateIdentifiers.propTypes = {\n  metadata: PropTypes.object.isRequired,\n  onAdd: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataAlternateIdentifiers;\n","export const relatedIdentifierTypes = [\n  {label: 'ARK', value: 'ARK'},\n  {label: 'arXiv', value: 'AR_XIV'},\n  {label: 'bibcode', value: 'BIBCODE'},\n  {label: 'DOI', value: 'DOI'},\n  {label: 'EAN13', value: 'EAN_13'},\n  {label: 'EISSN', value: 'EISSN'},\n  {label: 'Handle', value: 'HANDLE'},\n  {label: 'IGSN', value: 'IGSN'},\n  {label: 'ISBN', value: 'ISBN'},\n  {label: 'ISSN', value: 'ISSN'},\n  {label: 'ISTC', value: 'ISTC'},\n  {label: 'LISSN', value: 'LISSN'},\n  {label: 'LSID', value: 'LSID'},\n  {label: 'PMID', value: 'PMID'},\n  {label: 'PURL', value: 'PURL'},\n  {label: 'UPC', value: 'UPC'},\n  {label: 'URL', value: 'URL'},\n  {label: 'URN', value: 'URN'},\n  // {label: 'w3id', value: ''}\n]\n","export const relationTypes = [\n  {label: 'IsCitedBy', value: 'IS_CITED_BY'},\n  {label: 'Cites', value: 'CITES'},\n  {label: 'IsSupplementTo', value: 'IS_SUPPLEMENT_TO'},\n  {label: 'IsSupplementedBy', value: 'IS_SUPPLEMENTED_BY'},\n  {label: 'IsContinuedBy', value: 'IS_CONTINUED_BY'},\n  {label: 'Continues', value: 'CONTINUES'},\n  // {label: 'IsDescribedBy', value: ''},\n  // {label: 'Describes', value: ''},\n  {label: 'HasMetadata', value: 'HAS_METADATA'},\n  {label: 'IsMetadataFor', value: 'IS_METADATA_FOR'},\n  // {label: 'HasVersion', value: ''},\n  // {label: 'IsVersionOf', value: ''},\n  {label: 'IsNewVersionOf', value: 'IS_NEW_VERSION_OF'},\n  {label: 'IsPreviousVersionOf', value: 'IS_PREVIOUS_VERSION_OF'},\n  {label: 'IsPartOf', value: 'IS_PART_OF'},\n  {label: 'HasPart', value: 'HAS_PART'},\n  // {label: 'IsPublishedIn', value: ''},\n  {label: 'IsReferencedBy', value: 'IS_REFERENCED_BY'},\n  {label: 'References', value: 'REFERENCES'},\n  {label: 'IsDocumentedBy', value: 'IS_DOCUMENTED_BY'},\n  {label: 'Documents', value: 'DOCUMENTS'},\n  {label: 'IsCompiledBy', value: 'IS_COMPILED_BY'},\n  {label: 'Compiles', value: 'COMPILES'},\n  {label: 'IsVariantFormOf', value: 'IS_VARIANT_FORM_OF'},\n  {label: 'IsOriginalFormOf', value: 'IS_ORIGINAL_FORM_OF'},\n  {label: 'IsIdenticalTo', value: 'IS_IDENTICAL_TO'},\n  {label: 'IsReviewedBy', value: 'IS_REVIEWED_BY'},\n  {label: 'Reviews', value: 'REVIEWS'},\n  {label: 'IsDerivedFrom', value: 'IS_DERIVED_FROM'},\n  {label: 'IsSourceOf', value: 'IS_SOURCE_OF'},\n  // {label: 'IsRequiredBy', value: ''},\n  // {label: 'Requires', value: ''},\n  // {label: 'IsObsoletedBy', value: ''},\n  // {label: 'Obsoletes', value: ''}\n]\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Col, ControlLabel, FormControl, FormGroup, Row } from 'react-bootstrap';\nimport Select from 'react-select3';\n\nimport { relatedIdentifierTypes } from 'src/components/staticDropdownOptions/radar/relatedIdentifierTypes'\nimport { relationTypes } from 'src/components/staticDropdownOptions/radar/relationTypes'\n\nconst MetadataRelatedIdentifier = ({ relatedIdentifier, index, onChange, onRemove }) => {\n  const relatedIdentifierType = relatedIdentifierTypes.find(el => el.value == relatedIdentifier.relatedIdentifierType)\n  const relationType = relationTypes.find(el => el.value == relatedIdentifier.relationType)\n\n  return (\n    <div>\n      <Row>\n        <Col sm={5}>\n          <FormGroup>\n            <ControlLabel>\n              Identifier\n            </ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={relatedIdentifier.value}\n              onChange={event => onChange(event.target.value, 'relatedIdentifiers', index, 'value')}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={3}>\n          <FormGroup>\n            <ControlLabel>\n              Identifier type\n            </ControlLabel>\n            <Select\n              name=\"relatedIdentifierType\"\n              options={relatedIdentifierTypes}\n              onChange={option => onChange(option.value, 'relatedIdentifiers', index, 'relatedIdentifierType')}\n              value={relatedIdentifierType}\n              menuPortalTarget={document.body}\n              styles={{ menuPortal: base => ({ ...base, zIndex: 9999 }) }}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={3}>\n          <FormGroup>\n            <ControlLabel>\n              Relation type\n            </ControlLabel>\n            <Select\n              name=\"relationType\"\n              options={relationTypes}\n              onChange={option => onChange(option.value, 'relatedIdentifiers', index, 'relationType')}\n              value={relationType}\n              menuPortalTarget={document.body}\n              styles={{ menuPortal: base => ({ ...base, zIndex: 9999 }) }}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={1}>\n          <ControlLabel>\n            &nbsp;\n          </ControlLabel>\n          <Button bsStyle=\"danger\" onClick={() => onRemove('relatedIdentifiers', index)}>\n            <i className=\"fa fa-trash-o\" />\n          </Button>\n        </Col>\n      </Row>\n    </div>\n  )\n};\n\nMetadataRelatedIdentifier.propTypes = {\n  relatedIdentifier: PropTypes.object.isRequired,\n  index: PropTypes.number.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataRelatedIdentifier;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\n\nimport MetadataRelatedIdentifier from 'src/components/metadata/MetadataRelatedIdentifier'\n\nconst MetadataRelatedIdentifiers = ({ metadata, onAdd, onChange, onRemove }) => {\n  return (\n    <div>\n      <h4>Releated identifiers</h4>\n      <p>\n        Identifiers of related resources. These must be globally unique identifiers (e.g. DOI, URL).\n      </p>\n      {\n        metadata.relatedIdentifiers && metadata.relatedIdentifiers.map((relatedIdentifier, index) => (\n          <MetadataRelatedIdentifier\n            relatedIdentifier={relatedIdentifier} index={index} key={index}\n            onChange={onChange} onRemove={onRemove}\n          />\n        ))\n      }\n      <Button bsStyle=\"success\" bsSize=\"small\" onClick={event => onAdd('relatedIdentifiers')}>\n        Add new related identifier\n      </Button>\n    </div>\n  )\n}\n\nMetadataRelatedIdentifiers.propTypes = {\n  metadata: PropTypes.object.isRequired,\n  onAdd: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataRelatedIdentifiers;\n","export const controlledRightsList = [\n  {label: 'CC BY 4.0 Attribution', value: 'CC_BY_4_0_ATTRIBUTION'},\n  {label: 'CC BY-ND 4.0 Attribution-NoDerivs', value: 'CC_BY_ND_4_0_ATTRIBUTION_NO_DERIVS'},\n  {label: 'CC BY-SA 4.0 Attribution-ShareAlike', value: 'CC_BY_SA_4_0_ATTRIBUTION_SHARE_ALIKE'},\n  {label: 'CC BY-NC 4.0 Attribution-NonCommercial', value: 'CC_BY_NC_4_0_ATTRIBUTION_NON_COMMERCIAL'},\n  {label: 'CC BY-NC-SA 4.0 Attribution-NonCommercial-ShareAlike', value: 'CC_BY_NC_SA_4_0_ATTRIBUTION_NON_COMMERCIAL_SHARE_ALIKE'},\n  {label: 'CC BY-NC-ND 4.0 Attribution-NonCommercial-NoDerivs', value: 'CC_BY_NC_ND_4_0_ATTRIBUTION_NON_COMMERCIAL_NO_DERIVS'},\n  {label: 'CC0 1.0 Universal Public Domain Dedication', value: 'CC_0_1_0_UNIVERSAL_PUBLIC_DOMAIN_DEDICATION'},\n  {label: 'All rights reserved', value: 'ALL_RIGHTS_RESERVED'},\n  {label: 'Other', value: 'OTHER'}\n]\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Col, ControlLabel, FormControl, FormGroup, Row } from 'react-bootstrap';\nimport Select from 'react-select3';\n\nimport { controlledRightsList } from 'src/components/staticDropdownOptions/radar/controlledRightsList'\n\nconst MetadataRights = ({ rights, index, onChange, onRemove }) => {\n  const controlledRights = controlledRightsList.find(el => el.value == rights.controlledRights)\n\n  return (\n    <div>\n      <Row>\n        <Col sm={12}>\n          <FormGroup>\n            <ControlLabel>\n              Controlled rights\n            </ControlLabel>\n            <Select\n              name=\"relationType\"\n              options={controlledRightsList}\n              onChange={option => onChange(option.value, 'rights', index, 'controlledRights')}\n              value={controlledRights}\n              menuPortalTarget={document.body}\n              styles={{ menuPortal: base => ({ ...base, zIndex: 9999 }) }}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={12}>\n          <FormGroup>\n            <ControlLabel>\n              Additional rights\n            </ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={rights.additionalRights}\n              onChange={event => onChange(event.target.value, 'rights', index, 'additionalRights')}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={12}>\n          <Button bsStyle=\"danger\" bsSize=\"small\" onClick={() => onRemove('rights', index)}>\n            Remove rights\n          </Button>\n        </Col>\n      </Row>\n      <hr />\n    </div>\n  )\n};\n\nMetadataRights.propTypes = {\n  rights: PropTypes.object.isRequired,\n  index: PropTypes.number.isRequired,\n  onChange: PropTypes.func.isRequired\n};\n\nexport default MetadataRights;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Col, ControlLabel, FormControl, FormGroup, Row } from 'react-bootstrap';\n\nconst MetadataRightsHolder = ({ rightsHolder, index, onChange, onRemove }) => (\n  <div>\n    <Row>\n      <Col sm={11}>\n        <FormGroup>\n          <FormControl\n            type=\"text\"\n            value={rightsHolder}\n            onChange={event => onChange(event.target.value, 'rightsHolders', index)}\n          />\n        </FormGroup>\n      </Col>\n      <Col sm={1}>\n        <Button bsStyle=\"danger\" onClick={() => onRemove('rightsHolders', index)}>\n          <i className=\"fa fa-trash-o\" />\n        </Button>\n      </Col>\n    </Row>\n  </div>\n);\n\nMetadataRightsHolder.propTypes = {\n  rightsHolder: PropTypes.string.isRequired,\n  index: PropTypes.number.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataRightsHolder;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, FormGroup, FormControl } from 'react-bootstrap';\n\nimport MetadataRights from './MetadataRights'\nimport MetadataRightsHolder from './MetadataRightsHolder'\n\nconst MetadataRightsList = ({ metadata, onAdd, onChange, onRemove }) => {\n  return (\n    <div>\n      <h4>Rights holder</h4>\n      <p>\n        Name of the holder of the rights of re-use of the research data. Should be in the format \"Family name, given name\".\n      </p>\n      {\n        metadata.rightsHolders && metadata.rightsHolders.map((rightsHolder, index) => (\n          <MetadataRightsHolder\n            rightsHolder={rightsHolder} index={index} key={index}\n            onChange={onChange} onRemove={onRemove}\n          />\n        ))\n      }\n      <Button bsStyle=\"success\" bsSize=\"small\" onClick={event => onAdd('rightsHolders')}>\n        Add new rights holder\n      </Button>\n      <h4>Rights</h4>\n      <p>\n        Rights information for this resource. The property may be repeated to record complex rights characteristics.\n      </p>\n      {\n        metadata.rights && metadata.rights.map((rights, index) => (\n          <MetadataRights\n            rights={rights} index={index} key={index}\n            onChange={onChange} onRemove={onRemove}\n          />\n        ))\n      }\n      <Button bsStyle=\"success\" bsSize=\"small\" onClick={event => onAdd('rights')}>\n        Add new rights\n      </Button>\n    </div>\n  )\n}\n\nMetadataRightsList.propTypes = {\n  metadata: PropTypes.object.isRequired,\n  onAdd: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataRightsList;\n","export const funderIdentifierTypes = [\n  {label: 'ISNI', value: 'ISNI'},\n  {label: 'GRID', value: 'GRID'},\n  {label: 'CrossRef Funder', value: 'CROSS_REF_FUNDER'},\n  {label: 'Other', value: 'OTHER'}\n]\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Col, ControlLabel, FormControl, FormGroup, Row } from 'react-bootstrap';\nimport Select from 'react-select3';\n\nimport { funderIdentifierTypes } from 'src/components/staticDropdownOptions/radar/funderIdentifierTypes'\n\nconst MetadataFundingReference = ({ fundingReference, index, onChange, onRemove }) => {\n  const funderIdentifierType = funderIdentifierTypes.find(el => el.value == fundingReference.funderIdentifierType)\n\n  return (\n    <div>\n      <Row>\n        <Col sm={12}>\n          <FormGroup>\n            <ControlLabel>\n              Funder name\n            </ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={fundingReference.funderName}\n              onChange={event => onChange(event.target.value, 'fundingReferences', index, 'funderName')}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={8}>\n          <FormGroup>\n            <ControlLabel>\n              Funder identifier\n            </ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={fundingReference.funderIdentifier}\n              onChange={event => onChange(event.target.value, 'fundingReferences', index, 'funderIdentifier')}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={4}>\n          <FormGroup>\n            <ControlLabel>\n              Funder identifier type\n            </ControlLabel>\n            <Select\n              name=\"relationType\"\n              options={funderIdentifierTypes}\n              onChange={option => onChange(option.value, 'fundingReferences', index, 'funderIdentifierType')}\n              value={funderIdentifierType}\n              menuPortalTarget={document.body}\n              styles={{ menuPortal: base => ({ ...base, zIndex: 9999 }) }}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={12}>\n          <FormGroup>\n            <ControlLabel>\n              Award title\n            </ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={fundingReference.awardTitle}\n              onChange={event => onChange(event.target.value, 'fundingReferences', index, 'awardTitle')}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={6}>\n          <FormGroup>\n            <ControlLabel>\n              Award number\n            </ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={fundingReference.awardNumber}\n              onChange={event => onChange(event.target.value, 'fundingReferences', index, 'awardNumber')}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={6}>\n          <FormGroup>\n            <ControlLabel>\n              Award URI\n            </ControlLabel>\n            <FormControl\n              type=\"text\"\n              value={fundingReference.awardURI}\n              onChange={event => onChange(event.target.value, 'fundingReferences', index, 'awardURI')}\n            />\n          </FormGroup>\n        </Col>\n        <Col sm={12}>\n          <Button bsStyle=\"danger\" bsSize=\"small\" onClick={() => onRemove('fundingReferences', index)}>\n            Remove funding reference\n          </Button>\n        </Col>\n      </Row>\n      <hr />\n    </div>\n  )\n}\n\nMetadataFundingReference.propTypes = {\n  fundingReference: PropTypes.object.isRequired,\n  index: PropTypes.number.isRequired,\n  onChange: PropTypes.func.isRequired\n};\n\nexport default MetadataFundingReference;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\n\nimport MetadataFundingReference from 'src/components/metadata/MetadataFundingReference'\n\nconst MetadataFundingReferences = ({ metadata, onAdd, onChange, onRemove }) => {\n  return (\n    <div>\n      <h4>Funding references</h4>\n      <p>\n        Indication of received third-party funds/grants and the respective sponsor or the funding organisation.\n      </p>\n      {\n        metadata.fundingReferences && metadata.fundingReferences.map((fundingReference, index) => (\n          <MetadataFundingReference\n            fundingReference={fundingReference} index={index} key={index}\n            onChange={onChange} onRemove={onRemove}\n          />\n        ))\n      }\n      <Button bsStyle=\"success\" bsSize=\"small\" onClick={event => onAdd('fundingReferences')}>\n        Add new funding reference\n      </Button>\n    </div>\n  )\n}\n\nMetadataFundingReferences.propTypes = {\n  metadata: PropTypes.object.isRequired,\n  onAdd: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n};\n\nexport default MetadataFundingReferences;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Panel, Tabs, Tab } from 'react-bootstrap';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport Metadata from 'src/models/Metadata';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nimport MetadataHeader from 'src/components/metadata/MetadataHeader'\nimport MetadataGeneral from 'src/components/metadata/MetadataGeneral'\nimport MetadataCreators from 'src/components/metadata/MetadataCreators'\nimport MetadataContributors from 'src/components/metadata/MetadataContributors'\nimport MetadataAlternateIdentifiers from 'src/components/metadata/MetadataAlternateIdentifiers'\nimport MetadataRelatedIdentifiers from 'src/components/metadata/MetadataRelatedIdentifiers'\nimport MetadataRightsList from 'src/components/metadata/MetadataRightsList'\nimport MetadataFundingReferences from 'src/components/metadata/MetadataFundingReferences'\n\nexport default class MetadataContainer extends Component {\n  constructor(props) {\n    super(props);\n    const { metadata } = props;\n    this.state = {\n      activeTab: 'general',\n      metadata: metadata\n    };\n\n    this.handleAdd = this.handleAdd.bind(this)\n    this.handleChange = this.handleChange.bind(this)\n    this.handleRemove = this.handleRemove.bind(this)\n    this.handleSave = this.handleSave.bind(this)\n    this.handleClose = this.handleClose.bind(this)\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const { metadata } = nextProps;\n    this.setState({ metadata });\n  }\n\n  handleAdd(field, index, subfield) {\n    const { metadata } = this.state\n    metadata.add(field, index, subfield)\n    this.setState({ metadata })\n  }\n\n  handleChange(value, field, index, subfield, subindex, subsubfield) {\n    const { metadata } = this.state\n    metadata.change(value, field, index, subfield, subindex, subsubfield)\n    this.setState({ metadata })\n  }\n\n  handleRemove(field, index, subfield, subindex) {\n    const { metadata } = this.state\n    metadata.remove(field, index, subfield, subindex)\n    this.setState({ metadata })\n  }\n\n  handleSelect(eventKey) {\n    UIActions.selectTab({ tabKey: eventKey, type: 'screen' });\n    this.setState({\n      activeTab: eventKey\n    });\n  }\n\n  handleSave() {\n    const { metadata } = this.state\n    LoadingActions.start();\n    ElementActions.storeMetadata(metadata)\n    metadata.updateChecksum();\n    this.setState({ metadata })\n  }\n\n  handleClose() {\n    const { metadata } = this.state\n    DetailActions.close(metadata, true)\n  }\n\n  render() {\n    const { metadata } = this.state;\n    const { currentCollection } = UIStore.getState()\n    const title = currentCollection && `DataCite/RADAR Metadata for collection \"${currentCollection.label}\"`\n    const saveBtnDisplay = metadata.isEdited ? true : false;\n\n    return (\n      <Panel bsStyle=\"default\" className=\"eln-panel-detail\">\n        <Panel.Heading>\n          <MetadataHeader title={title} saveBtnDisplay={saveBtnDisplay} onSave={this.handleSave} onClose={this.handleClose} />\n        </Panel.Heading>\n        <Panel.Body>\n          <Tabs activeKey={this.state.activeTab} onSelect={key => this.handleSelect(key)}\n                className=\"metadata-tabs\" id=\"metadata-tabs\">\n            <Tab eventKey=\"general\" title=\"General\" key=\"general\">\n              <MetadataGeneral\n                metadata={metadata.metadata}\n                onAdd={this.handleAdd}\n                onChange={this.handleChange}\n                onRemove={this.handleRemove}\n              />\n            </Tab>\n            <Tab eventKey=\"creators\" title=\"Creators\" key=\"creators\">\n              <MetadataCreators\n                metadata={metadata.metadata}\n                onAdd={this.handleAdd}\n                onChange={this.handleChange}\n                onRemove={this.handleRemove}\n              />\n            </Tab>\n            <Tab eventKey=\"contributors\" title=\"Contributors\" key=\"contributors\">\n              <MetadataContributors\n                metadata={metadata.metadata}\n                onAdd={this.handleAdd}\n                onChange={this.handleChange}\n                onRemove={this.handleRemove}\n              />\n            </Tab>\n            <Tab eventKey=\"identifiers\" title=\"Identifiers\" key=\"identifiers\">\n              <MetadataRelatedIdentifiers\n                metadata={metadata.metadata}\n                onAdd={this.handleAdd}\n                onChange={this.handleChange}\n                onRemove={this.handleRemove}\n              />\n              <hr />\n              <MetadataAlternateIdentifiers\n                metadata={metadata.metadata}\n                onAdd={this.handleAdd}\n                onChange={this.handleChange}\n                onRemove={this.handleRemove}\n              />\n            </Tab>\n            <Tab eventKey=\"rights\" title=\"Rights\" key=\"rights\">\n              <MetadataRightsList\n                metadata={metadata.metadata}\n                onAdd={this.handleAdd}\n                onChange={this.handleChange}\n                onRemove={this.handleRemove}\n              />\n            </Tab>\n            <Tab eventKey=\"funding\" title=\"Funding\" key=\"funding\">\n              <MetadataFundingReferences\n                metadata={metadata.metadata}\n                onAdd={this.handleAdd}\n                onChange={this.handleChange}\n                onRemove={this.handleRemove}\n              />\n            </Tab>\n          </Tabs>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nMetadataContainer.propTypes = {\n  metadata: PropTypes.instanceOf(Metadata).isRequired\n};\n","import { difference, uniq } from 'lodash';\n\nimport alt from 'src/stores/alt/alt';\nimport PredictionActions from 'src/stores/alt/actions/PredictionActions';\n\nclass PredictionStore {\n  constructor() {\n    this.activeKey = 0;\n    this.template = 'predictProducts';\n    this.inputEls = [];\n    this.defaultEls = [];\n    this.outputEls = [];\n\n    this.bindListeners({\n      handleInfer: PredictionActions.infer,\n      handleUpdateActiveKey: PredictionActions.updateActiveKey,\n      handleUpdateTemplate: PredictionActions.updateTemplate,\n      handleUpdateUI: PredictionActions.updateUI,\n      handleRemove: PredictionActions.remove,\n      handleReset: PredictionActions.reset,\n    });\n  }\n\n  handleInfer(results) {\n    if (results.error) {\n      this.setState({ outputEls: [] });\n    }\n\n    const outputEls = results.products || results.reactants || [];\n    this.setState({ outputEls });\n  }\n\n  handleUpdateActiveKey(activeKey) {\n    this.setState({ activeKey });\n  }\n\n  handleUpdateTemplate(template) {\n    this.setState({\n      activeKey: 0,\n      template,\n      inputEls: [],\n      defaultEls: [],\n      outputEls: [],\n    });\n  }\n\n  handleUpdateUI(result) {\n    if (!result) return null;\n    const { samples } = result;\n    if (!samples) return null;\n    const defaultSmis = this.defaultEls.map(x => x.molecule.cano_smiles);\n    const rspSmis = samples.map(x => x.molecule.cano_smiles);\n    let uniqLoadSmis = difference(rspSmis, defaultSmis);\n    uniqLoadSmis = uniq(uniqLoadSmis);\n\n    let inputEls = samples.filter((x, idx) => ( // avoid 2 samples with the same smiles\n      rspSmis.indexOf(x.molecule.cano_smiles) === idx\n    ));\n    const maxNumEls = this.template === 'predictProducts' ? 10 : 1;\n    inputEls = inputEls.map(x => ( // avoid including defaultSmis\n      uniqLoadSmis.indexOf(x.molecule.cano_smiles) >= 0 ? x : null\n    )).filter(r => r != null).filter((val, idx) => idx < maxNumEls);\n\n    this.setState({ inputEls });\n    return null;\n  }\n\n  handleRemove(el) {\n    const inputEls = this.inputEls.filter(x => x.id !== el.id);\n    this.setState({ inputEls });\n  }\n\n  handleReset() {\n    this.setState({\n      activeKey: 0,\n      template: 'predictProducts',\n      inputEls: [],\n      defaultEls: [],\n      outputEls: [],\n    });\n  }\n}\n\nexport default alt.createStore(PredictionStore, 'PredictionStore');\n","import React from 'react';\nimport SVG from 'react-inlinesvg';\nimport { Panel } from 'react-bootstrap';\n\nconst styles = {\n  svgContainer: {\n    height: 200,\n    overflowX: 'scroll',\n    overflowY: 'auto',\n    whiteSpace: 'nowrap',\n  },\n  svgBox: {\n    display: 'inline-block',\n    height: 100,\n    margin: 5,\n    width: 200,\n  },\n  svgTxt: {\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    width: 180,\n  },\n  emptyBox: {\n    marginTop: 60,\n  },\n};\n\nconst contentBlock = (els) => {\n  if (!els || els.length === 0) {\n    return (\n      <div style={styles.emptyBox}>\n        <h3> Please select samples. </h3>\n      </div>\n    );\n  }\n\n  return (\n    els.map(el => (\n      <div key={el.svgPath} style={styles.svgBox}>\n        <SVG src={el.svgPath} />\n        <p style={styles.svgTxt}>{ el.molecule_iupac_name }</p>\n        <p style={styles.svgTxt}>{ el.molecule_cano_smiles }</p>\n      </div>\n    ))\n  );\n};\n\nconst ContentInputs = (template, els) => {\n  const titleFromTemplate = (tpl) => ({\n    'predictProducts': 'Input: Starting Materials (accept max 10 molecules)',\n    'predictReactants': 'Input: Product (accept max 1 molecule)',\n  })[tpl]\n  const titleStr = titleFromTemplate(template) || 'TBD';\n\n  return (\n    <Panel bsStyle=\"default\" defaultExpanded>\n      <Panel.Heading>\n        <Panel.Title toggle>\n          { titleStr }\n        </Panel.Title>\n      </Panel.Heading>\n      <Panel.Collapse>\n        <Panel.Body>\n          <div className=\"svg\" style={styles.svgContainer}>\n            { contentBlock(els) }\n          </div>\n        </Panel.Body>\n      </Panel.Collapse>\n    </Panel>\n  );\n};\n\nexport default ContentInputs;\n","import React from 'react';\nimport SvgFileZoomPan from 'react-svg-file-zoom-pan';\nimport { Panel } from 'react-bootstrap';\n\nconst styles = {\n  container: {\n  },\n};\n\nconst stripBStyle = idx => (idx % 2 === 0 ? 'primary' : 'info');\n\nconst contentBlock = els => (\n  els.map((el, idx) => (\n    <div key={`${idx}-${el.id}`}>\n      <Panel bsStyle={stripBStyle(idx)}>\n        <Panel.Heading>\n          <Panel.Title>\n            Rank { el.rank }: { el.smiles.join('.') }\n          </Panel.Title>\n        </Panel.Heading>\n        <SvgFileZoomPan\n          svg={el.svg}\n          duration={300}\n          resize\n        />\n      </Panel>\n    </div>\n  ))\n);\n\nconst ContentOutputs = (template, outputEls) => {\n  const titleFromTemplate = (tpl) => ({\n    'predictProducts': 'Output: Products',\n    'predictReactants': 'Output: Starting Materials',\n  })[tpl]\n  const titleStr = titleFromTemplate(template) || 'TBD';\n\n  return (\n    <Panel bsStyle=\"default\" defaultExpanded>\n      <Panel.Heading>\n        <Panel.Title toggle>\n          { titleStr }\n        </Panel.Title>\n      </Panel.Heading>\n      <Panel.Collapse>\n        <Panel.Body>\n          <div style={styles.container}>\n            { contentBlock(outputEls) }\n          </div>\n        </Panel.Body>\n      </Panel.Collapse>\n    </Panel>\n  );\n};\n\nexport default ContentOutputs;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Select from 'react-select';\nimport { Row, Col } from 'react-bootstrap';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport PredictionActions from 'src/stores/alt/actions/PredictionActions';\nimport ContentInputs from 'src/apps/mydb/elements/details/predictions/ContentInputs';\nimport ContentOutputs from 'src/apps/mydb/elements/details/predictions/ContentOutputs';\n\nconst styles = {\n  selectContainer: {\n    height: 50,\n  },\n};\n\nconst templateOpts = () => (\n  [\n    { label: 'Predict Products', value: 'predictProducts' },\n    { label: 'Predict Starting Materials', value: 'predictReactants' },\n  ]\n);\n\nconst onTemplateChange = (e) => {\n  PredictionActions.updateTemplate(e.value);\n  UIActions.uncheckWholeSelection.defer();\n};\n\nconst ContentTemplate = template => (\n  <Row style={styles.selectContainer}>\n    <Col md={6} sm={12}>\n      <Select\n        options={templateOpts()}\n        value={template}\n        clearable={false}\n        onChange={onTemplateChange}\n      />\n    </Col>\n    <Col md={6} sm={12} />\n  </Row>\n);\n\nconst Content = ({ template, els, outputEls }) => (\n  <div className=\"report-orders panel-workspace\">\n    <br />\n    {ContentTemplate(template)}\n    {ContentInputs(template, els)}\n    <br />\n    {ContentOutputs(template, outputEls)}\n  </div>\n);\n\nContent.propTypes = {\n  template: PropTypes.string.isRequired,\n  els: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types\n  outputEls: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types\n};\n\nexport default Content;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport PredictionActions from 'src/stores/alt/actions/PredictionActions';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nconst clickToClose = (el) => {\n  DetailActions.close(el);\n};\n\nconst CloseBtn = ({ el }) => {\n  const onClickToClose = () => clickToClose(el);\n\n  return (\n    <Button\n      bsStyle=\"danger\"\n      bsSize=\"xsmall\"\n      className=\"button-right\"\n      onClick={onClickToClose}\n    >\n      <i className=\"fa fa-times\" />\n    </Button>\n  );\n};\n\nconst clickToReset = () => {\n  PredictionActions.reset();\n  UIActions.uncheckWholeSelection.defer();\n};\n\nconst ResetBtn = () => (\n  <Button\n    bsStyle=\"info\"\n    bsSize=\"xsmall\"\n    className=\"button-right\"\n    onClick={clickToReset}\n  >\n    <span><i className=\"fa fa-eraser\" /> Reset</span>\n  </Button>\n);\n\nconst PredictBtn = ({ inputEls, template }) => {\n  const onClick = () => {\n    LoadingActions.start.defer();\n    PredictionActions.infer.defer(inputEls, template);\n  };\n  const disableBtn = inputEls.length === 0;\n\n  return (\n    <Button\n      bsStyle=\"primary\"\n      bsSize=\"xsmall\"\n      className=\"button-right\"\n      disabled={disableBtn}\n      onClick={onClick}\n    >\n      <span><i className=\"fa fa-file-text-o\" /> Predict</span>\n    </Button>\n  );\n};\n\nPredictBtn.propTypes = {\n  inputEls: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types\n};\n\nexport { CloseBtn, ResetBtn, PredictBtn };\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Panel, Tabs, Tab } from 'react-bootstrap';\nimport PredictionActions from 'src/stores/alt/actions/PredictionActions';\nimport PredictionStore from 'src/stores/alt/stores/PredictionStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\n\nimport Content from 'src/apps/mydb/elements/details/predictions/Content';\nimport PanelHeader from 'src/components/common/PanelHeader';\nimport { CloseBtn, ResetBtn, PredictBtn } from 'src/apps/mydb/elements/details/predictions/PredictionComponent';\n\nclass PredictionContainer extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      ...PredictionStore.getState(),\n    };\n    this.onChange = this.onChange.bind(this);\n    this.onChangeUI = this.onChangeUI.bind(this);\n    this.panelHeader = this.panelHeader.bind(this);\n  }\n\n  componentDidMount() {\n    PredictionStore.listen(this.onChange);\n    UIStore.listen(this.onChangeUI);\n    const uiState = UIStore.getState();\n    this.onChangeUI(uiState);\n  }\n\n  componentWillUnmount() {\n    PredictionStore.unlisten(this.onChange);\n    UIStore.unlisten(this.onChangeUI);\n  }\n\n  onChange(state) {\n    this.setState({ ...state });\n  }\n\n  onChangeUI(uiState) {\n    const combState = { uiState, predictionState: this.state };\n    PredictionActions.updateUI.defer(combState);\n  }\n\n  panelHeader() {\n    const { prediction } = this.props;\n    const { inputEls, template } = this.state;\n    const btns = [\n      <CloseBtn key=\"closeBtn\" el={prediction} />,\n      <PredictBtn\n        key=\"predictBtn\"\n        inputEls={inputEls}\n        template={template}\n      />,\n      <ResetBtn key=\"resetBtn\" />,\n    ];\n    return <PanelHeader title=\"Synthesis Prediction\" btns={btns} />;\n  }\n\n  selectTab(key) { // eslint-disable-line class-methods-use-this\n    PredictionActions.updateActiveKey(key);\n  }\n\n  render() {\n    const {\n      activeKey, template, inputEls, defaultEls, outputEls,\n    } = this.state;\n\n    const els = (defaultEls && inputEls) ? [...defaultEls, ...inputEls] : [];\n\n    return (\n      <Panel\n        bsStyle=\"default\"\n      >\n        <Panel.Heading>{this.panelHeader()}</Panel.Heading>\n        <Tabs\n          activeKey={activeKey}\n          onSelect={this.selectTab}\n          id=\"prediction-tabs\"\n        >\n          <Tab eventKey={0} title=\"Content\">\n            <Content\n              template={template}\n              els={els}\n              outputEls={outputEls}\n            />\n          </Tab>\n        </Tabs>\n      </Panel>\n    );\n  }\n}\n\nPredictionContainer.propTypes = {\n  prediction: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types\n};\n\nexport default PredictionContainer;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\n\nconst SubmissionCheck = (props) => {\n  const { validates } = props;\n  if (!validates) return null;\n\n  let failure = validates.filter(v => !v.value);\n  if (!failure || failure.length < 1) return null;\n\n  const [show, setShow] = useState(true);\n\n  if (!show) {\n    return (\n      <Button className=\"btn-unified\" bsSize=\"small\" style={{ width: '100%' }} onClick={() => setShow(true)}>Show Submission Data Check Result</Button>\n    );\n  }\n\n  const style = { true: { color: 'green' }, false: { color: 'red' }, default: { color: 'black' } };\n  failure = failure.filter(v => !v.value).map(v =>\n    (<div key={`_submission_validate_${v.name}`} style={style[v.value]}><i className={`fa fa-${v.value ? 'check' : 'times'}-circle-o`} aria-hidden=\"true\" />&nbsp;{v.message}</div>));\n  const result = (\n    <div\n      className=\"news-box\"\n      style={{\n        width: '100%', fontSize: 'unset', margin: 'unset', borderRadius: '5px'\n      }}\n    >\n      <h4>Submission Data Check Result</h4>\n      {failure}\n    </div>\n  );\n\n  return result;\n};\n\nSubmissionCheck.propTypes = {\n  validates: PropTypes.arrayOf(PropTypes.shape({\n    name: PropTypes.string,\n    value: PropTypes.bool,\n    message: PropTypes.string,\n  })).isRequired,\n};\n\nexport default SubmissionCheck;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport SVG from 'react-inlinesvg';\nimport {\n  Panel,\n  PanelGroup,\n  Button,\n  Modal,\n  Table,\n  OverlayTrigger, FormGroup,\n  Checkbox, Tooltip, ListGroup, ListGroupItem, Row, Col,\n  Form,\n  Grid,\n  ControlLabel\n} from 'react-bootstrap';\nimport { head, filter, findIndex, flatten, sortedUniq } from 'lodash';\nimport Select from 'react-select';\nimport Immutable from 'immutable';\nimport uuid from 'uuid';\nimport { validateYield } from 'src/components/chemrepo/PublishCommon';\nimport Reaction from 'src/models/Reaction';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport ReactionsFetcher from 'src/fetchers/ReactionsFetcher';\nimport RepositoryActions from 'src/stores/alt/repo/actions/RepositoryActions';\nimport {\n  ReactionInfo,\n  ReactionSchemeOnlyInfo,\n  PublishAnalysesTag,\n  EmbargoCom,\n  isNmrPass,\n  isDatasetPass,\n  PublishTypeAs,\n  OrcidIcon,\n} from 'src/repoHome/RepoCommon';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport { groupByCitation, Citation } from 'src/apps/mydb/elements/details/literature/LiteratureCommon';\nimport LiteraturesFetcher from 'src/fetchers/LiteraturesFetcher';\nimport CollaboratorFetcher from 'src/repo/fetchers/CollaboratorFetcher';\nimport EmbargoFetcher from 'src/repo/fetchers/EmbargoFetcher';\nimport { CitationTypeMap, CitationTypeEOL } from 'src/components/CitationType';\nimport SubmissionCheck from 'src/components/chemrepo/SubmissionCheck';\nimport { doStValidation } from 'src/components/chemrepo/publication-utils';\n\nconst AnalysisIdstoPublish = element => (\n  element.analysisArray().filter(a => a.extended_metadata.publish && (a.extended_metadata.publish === true || a.extended_metadata.publish === 'true')).map(x => x.id)\n);\n\nfunction AnalysisHeaderSample({ sampleSvgFile }) {\n  const svgPath = `/images/samples/${sampleSvgFile}`;\n  return (\n    <div className=\"svg-container\">\n      <Row>\n        <Col sm={8} md={8} lg={8}>\n          <SVG key={svgPath} src={svgPath} className=\"sample-details\" />\n        </Col>\n        <Col sm={4} md={4} lg={4}>\n          <h5>\n            <i className=\"icon-sample\" style={{ fontSize: '1.5em' }} />{' '}\n            <b>Product</b>\n          </h5>\n        </Col>\n      </Row>\n    </div>\n  );\n}\n\nAnalysisHeaderSample.propTypes = { sampleSvgFile: PropTypes.string.isRequired };\n\nconst skimAnalysis = (sample) => {\n  const analyses = sample.analysisArray();\n  const publishedAnalyses = analyses.filter(a =>\n    (a.extended_metadata &&\n      (a.extended_metadata.publish && (a.extended_metadata.publish === true || a.extended_metadata.publish === 'true'))));\n  return publishedAnalyses.filter(a =>\n    (a.extended_metadata &&\n      (((a.extended_metadata.kind || '') !== '') && // fail if analysis-type is empty\n        ((a.extended_metadata.status || '') === 'Confirmed') && // fail if status is not set to Confirmed\n        (isNmrPass(a, sample)) && // fail if NMR check fail\n        (isDatasetPass(a))))); // fail if Dataset check fail\n};\n\nconst publishOptions = { f: 'full', s: 'scheme-only' };\n\nexport default class PublishReactionModal extends Component {\n  constructor(props) {\n    super(props);\n    const { currentUser } = UserStore.getState();\n    const { reaction } = props;\n    this.state = {\n      reaction,\n      selectedUsers: [],\n      selectedReviewers: [],\n      showSelectionReviewer: false,\n      collaborations: [],\n      showPreview: false,\n      showScheme: false,\n      currentUser,\n      showRinchi: false,\n      showProp: false,\n      showTlc: false,\n      selectedRefs: [],\n      literatures: new Immutable.Map(),\n      sortedIds: [],\n      selectedEmbargo: '-1',\n      selectedLicense: 'CC BY',\n      cc0Consent: { consent1: false, consent2: false },\n      bundles: [],\n      noSolvent: false,\n      noAmountYield: false,\n      noEmbargo: false,\n      schemeDesc: true,\n      publishType: { options: Object.values(publishOptions), selected: publishOptions.f },\n    };\n\n    props.reaction.convertDurationDisplay();\n\n    this.onUserChange = this.onUserChange.bind(this);\n    this.handlePublishReaction = this.handlePublishReaction.bind(this);\n    this.handleReserveDois = this.handleReserveDois.bind(this);\n    this.handleSelectUser = this.handleSelectUser.bind(this);\n    this.handleSelectReviewer = this.handleSelectReviewer.bind(this);\n    this.loadUserByName = this.loadUserByName.bind(this);\n    this.handleAnalysesChecked = this.handleAnalysesChecked.bind(this);\n    this.toggleScheme = this.toggleScheme.bind(this);\n    this.toggleRinchi = this.toggleRinchi.bind(this);\n    this.toggleProp = this.toggleProp.bind(this);\n    this.toggleTlc = this.toggleTlc.bind(this);\n    this.loadReferences = this.loadReferences.bind(this);\n    this.loadBundles = this.loadBundles.bind(this);\n    this.selectReferences = this.selectReferences.bind(this);\n    this.handleRefCheck = this.handleRefCheck.bind(this);\n    this.handleEmbargoChange = this.handleEmbargoChange.bind(this);\n    this.handleLicenseChange = this.handleLicenseChange.bind(this);\n    this.handleNoSolventCheck = this.handleNoSolventCheck.bind(this);\n    this.handleNoAmountYieldCheck = this.handleNoAmountYieldCheck.bind(this);\n    this.handleCC0ConsentChange = this.handleCC0ConsentChange.bind(this);\n    this.handlePublishTypeChange = this.handlePublishTypeChange.bind(this);\n    this.handleYieldChange = this.handleYieldChange.bind(this);\n    this.handlePropertiesChange = this.handlePropertiesChange.bind(this);\n    this.handleUnitChange = this.handleUnitChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onUserChange);\n    this.loadBundles();\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if (!nextProps.reaction) { return; }\n    nextProps.reaction.convertDurationDisplay();\n\n    this.loadReferences();\n    this.loadMyCollaborations();\n    this.setState({\n      reaction: nextProps.reaction,\n    });\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onUserChange);\n  }\n\n  onUserChange(state) {\n    this.setState(previousState => ({ ...previousState, users: state.users }));\n  }\n\n  handleSelectUser(val) {\n    if (val) { this.setState({ selectedUsers: val }); }\n  }\n\n  handleInputChange(type, event) {\n    const { reaction } = this.state;\n    switch (type) {\n      case 'temperature':\n        reaction.temperature.userText = event.target.value;\n        break;\n      case 'temperatureUnit':\n        reaction.temperature = reaction.convertTemperature(event);\n        break;\n      case 'duration':\n        reaction.durationDisplay = { nextValue: event.target.value };\n        break;\n      case 'durationUnit':\n        reaction.durationDisplay = { nextUnit: true };\n        break;\n      default:\n        break;\n    }\n    this.setState({ reaction });\n  }\n\n  handleYieldChange(p, event) {\n    const { value } = event.target;\n    if (!isNaN(value)) {\n      const { reaction } = this.state;\n      const { products } = reaction;\n      const product = products.find(e => e.id === p.id);\n      if (typeof product !== 'undefined') {\n        product.equivalent = (value / 100);\n        products.splice(products.findIndex(e => e.id === p.id), 1, product);\n        reaction.products = products;\n        this.setState({ reaction });\n      }\n    }\n  }\n\n  handlePropertiesChange(type, event) {\n    if (type === 'temperature') {\n      this.handleInputChange(type, event);\n    }\n    if (type === 'duration') {\n      const { value } = event.target;\n      if (!isNaN(value)) {\n        this.handleInputChange(type, event);\n      }\n    }\n    if (type === 'schemeDesc') {\n      this.setState({ schemeDesc: !this.state.schemeDesc });\n    }\n  }\n\n  handleUnitChange(type, event) {\n    let index;\n    let unit;\n    switch (type) {\n      case 'temperatureUnit':\n        index = Reaction.temperature_unit.indexOf(event);\n        unit = Reaction.temperature_unit[(index + 1) % 3];\n        this.handleInputChange('temperatureUnit', unit);\n        break;\n      case 'durationUnit':\n        this.handleInputChange('durationUnit', event);\n        break;\n      default:\n        break;\n    }\n  }\n\n  toggleScheme() {\n    const { showScheme } = this.state;\n    this.setState({ showScheme: !showScheme });\n  }\n\n  toggleRinchi() {\n    const { showRinchi } = this.state;\n    this.setState({ showRinchi: !showRinchi });\n  }\n\n  toggleProp() {\n    const { showProp } = this.state;\n    this.setState({ showProp: !showProp });\n  }\n\n  toggleTlc() {\n    const { showTlc } = this.state;\n    this.setState({ showTlc: !showTlc });\n  }\n\n  handleRefCheck(id) {\n    let { selectedRefs } = this.state;\n\n    if (selectedRefs.includes(id)) {\n      selectedRefs = selectedRefs.filter(item => item !== id);\n    } else {\n      selectedRefs.push(id);\n    }\n    this.setState({ selectedRefs });\n  }\n\n  handleNoSolventCheck() {\n    this.setState({ noSolvent: !this.state.noSolvent });\n  }\n\n  handleNoEmbargoCheck() {\n    this.setState({ noEmbargo: !this.state.noEmbargo });\n  }\n\n  handleNoAmountYieldCheck() {\n    this.setState({ noAmountYield: !this.state.noAmountYield });\n  }\n\n  loadBundles() {\n    EmbargoFetcher.fetchEmbargoCollections(true).then((result) => {\n      const cols = result.repository || [];\n      this.setState({ bundles: cols });\n    });\n  }\n\n  loadReferences() {\n    let { selectedRefs } = this.state;\n    LiteraturesFetcher.fetchElementReferences(this.state.reaction, true).then((literatures) => {\n      const sortedIds = groupByCitation(literatures);\n      selectedRefs = selectedRefs.filter(item => sortedIds.includes(item));\n      this.setState({ selectedRefs, literatures, sortedIds });\n    });\n  }\n\n  loadMyCollaborations() {\n    CollaboratorFetcher.fetchMyCollaborations()\n      .then((result) => { this.setState({ collaborations: result.authors }); });\n  }\n\n  contributor() {\n    const { currentUser } = this.state;\n    const orcid = currentUser.orcid == null ? '' : <OrcidIcon orcid={currentUser.orcid} />;\n    const aff = currentUser && currentUser.current_affiliations && Object.keys(currentUser.current_affiliations).map(k => (\n      <div key={uuid.v4()}>  -{currentUser.current_affiliations[k]}</div>\n    ));\n    return (<div><h5><b>Contributor:</b></h5>{orcid}{currentUser.name} <br /> {aff} </div>);\n  }\n\n  handleSelectReviewer(val) {\n    if (val) { this.setState({ selectedReviewers: val }); }\n  }\n\n  loadUserByName(input) {\n    if (!input) {\n      return Promise.resolve({ options: [] });\n    }\n\n    return UsersFetcher.fetchUsersByName(input)\n      .then((res) => {\n        const usersEntries = res.users.filter(u => u.id !== this.state.currentUser.id)\n          .map(u => ({\n            value: u.id,\n            name: u.name,\n            label: `${u.name} (${u.abb})`\n          }));\n        return { options: usersEntries };\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  handleAnalysesChecked(analysis, elementType) {\n    const { reaction } = this.state;\n\n    reaction.changed = true;\n    if (elementType === 'Reaction') {\n      const elements = head(filter(reaction.container.children, o => o.container_type === 'analyses')).children;\n      // Find the index of the element and then replace\n      const index = findIndex(elements, { id: analysis.id });\n      if (index !== -1) {\n        elements.splice(index, 1, analysis);\n        this.setState(prevState => ({ ...prevState, reaction }));\n      }\n    }\n    if (elementType === 'Product') {\n      const analysesReactionProducts = reaction.products;\n      analysesReactionProducts.forEach((product) => {\n        const elements = head(filter(product.container.children, o => o.container_type === 'analyses')).children;\n        // Find the index of the element and then replace\n        const index = findIndex(elements, { id: analysis.id });\n        if (index !== -1) {\n          elements.splice(index, 1, analysis);\n          this.setState(prevState => ({ ...prevState, reaction }));\n        }\n      });\n    }\n    this.props.onHandleAnalysesCheck(this.state.reaction);\n  }\n\n  validateAnalyses() {\n    let pas = this.state.reaction.products.reduce(\n      (acc, s) => acc.concat(AnalysisIdstoPublish(s)),\n      AnalysisIdstoPublish(this.state.reaction)\n    );\n    if (pas.length === 0) {\n      return false;\n    }\n\n    pas = AnalysisIdstoPublish(this.state.reaction);\n    if (pas.length > 0) {\n      return true;\n    }\n\n    const { reaction } = this.state;\n    const { products } = reaction;\n    for (let i = 0; i < products.length; i += 1) {\n      const pa = skimAnalysis(products[i]);\n      if (pa.length > 0) { return true; }\n    }\n\n    return false;\n  }\n\n  handlePublishReaction() {\n    const {\n      selectedLicense, cc0Consent, publishType, selectedUsers\n    } = this.state;\n    const authorCount = selectedUsers && selectedUsers.length;\n\n    if (selectedLicense === 'CC0' && (!cc0Consent.consent1 || !cc0Consent.consent2)) {\n      alert('Please check the license section before sending your data.');\n      return true;\n    }\n\n    if (authorCount > 0 && !this.refBehalfAsAuthor.checked) {\n      alert(`Please confirm you are contributing on behalf of the author${authorCount > 0 ? 's' : ''}.'`);\n      return true;\n    }\n\n    const isFullyPublish = publishType.selected === publishOptions.f;\n\n    if (authorCount < 1 && !this.refMeAsAuthor.checked && isFullyPublish) {\n      alert(\"Please add an author or check 'add me as author'.\");\n      return true;\n    }\n\n    const { reaction } = this.state;\n    if (isFullyPublish) {\n      const { samples } = reaction;\n      for (let i = 0; i < samples.length; i += 1) {\n        reaction.samples[i].container.children.find(c => (c && c.container_type === 'analyses')).children = skimAnalysis(samples[i]);\n      }\n    }\n\n    LoadingActions.start();\n    RepositoryActions.publishReaction({\n      isFullyPublish,\n      reaction: this.state.reaction,\n      coauthors: this.state.selectedUsers.map(u => u.value),\n      reviewers: this.state.selectedReviewers.map(u => u.value),\n      refs: this.state.selectedRefs,\n      embargo: this.state.selectedEmbargo,\n      license: this.state.selectedLicense,\n      schemeDesc: this.state.schemeDesc,\n      addMe: this.refMeAsAuthor.checked\n    }, true);\n    this.props.onHide(false);\n  }\n\n  handleReserveDois() {\n    LoadingActions.start();\n    RepositoryActions.publishReactionReserveDois({\n      reaction: this.state.reaction,\n      coauthors: this.state.selectedUsers.map(u => u.value)\n    });\n    ReactionsFetcher.fetchById(this.state.reaction.id)\n      .then((reaction) => {\n        this.props.onPublishRefreshClose(reaction, true);\n        LoadingActions.stop();\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n        LoadingActions.stop();\n      });\n    return true;\n  }\n\n  selectUsers() {\n    const { selectedUsers, collaborations } = this.state;\n    const options = collaborations.map(c => (\n      { label: c.name, value: c.id }\n    ));\n    const authorCount = selectedUsers && selectedUsers.length;\n    const authorInfo = selectedUsers && selectedUsers.map((a) => {\n      const us = collaborations.filter(c => c.id === a.value);\n      const u = us && us.length > 0 ? us[0] : {};\n      const orcid = u.orcid == null ? '' : <OrcidIcon orcid={u.orcid} />;\n      const aff = u && u.current_affiliations && u.current_affiliations.map(af => (\n        <div>  -{af.department}, {af.organization}, {af.country}</div>\n      ));\n      return (<div key={uuid.v4()}>{orcid}{a.label}<br/>{aff}<br/></div>);\n    });\n\n    return (\n      <div >\n        <Checkbox inputRef={(ref) => { this.refMeAsAuthor = ref; }}>add me as author</Checkbox>\n        <Checkbox inputRef={(ref) => { this.refBehalfAsAuthor = ref; }}>\n          I am contributing on behalf of the author{authorCount > 0 ? 's' : '' }\n        </Checkbox>\n        <h5><b>Authors:</b></h5>\n        <Select\n          multi\n          searchable\n          placeholder=\"Select authors from my collaboration\"\n          backspaceRemoves\n          value={selectedUsers}\n          valueKey=\"value\"\n          labelKey=\"label\"\n          matchProp=\"name\"\n          options={options}\n          onChange={this.handleSelectUser}\n        />\n        <div>\n          {authorInfo}\n        </div>\n      </div>\n    );\n  }\n\n  addReviewers() {\n    const { selectedReviewers, collaborations } = this.state;\n    const options = collaborations.map(c => (\n      { label: c.name, value: c.id }\n    ));\n\n    const reviewerInfo = selectedReviewers && selectedReviewers.map((a) => {\n      const us = collaborations.filter(c => c.id === a.value);\n      const u = us && us.length > 0 ? us[0] : {};\n      const orcid = u.orcid == null ? '' : <OrcidIcon orcid={u.orcid} />;\n      const aff = u && u.current_affiliations && u.current_affiliations.map(af => (\n        <div>  -{af.department}, {af.organization}, {af.country}</div>\n      ));\n      return (<div>{orcid}{a.label}<br/>{aff}<br/></div>)\n    });\n\n\n    return (\n      <div >\n        <h5><b>Additional Reviewers:</b></h5>\n        <Select\n          multi\n          searchable\n          placeholder=\"Select reviewers from my collaboration\"\n          backspaceRemoves\n          value={selectedReviewers}\n          valueKey=\"value\"\n          labelKey=\"label\"\n          matchProp=\"name\"\n          options={options}\n          onChange={this.handleSelectReviewer}\n        />\n        <div>\n          {reviewerInfo}\n        </div>\n      </div>\n    );\n  }\n\n  toggleDiv(key) {\n    if (key) {\n      this.setState((previousState) => {\n        const newState = previousState;\n        newState[key] = !previousState[key];\n        return { ...newState };\n      }, this.forceUpdate());\n    }\n  }\n\n  citationTable(rows, sortedIds, selectedRefs) {\n    const sids = sortedUniq(sortedIds);\n    return (\n      <Table>\n        <thead>\n          <tr>\n            <th width=\"60%\" />\n            <th width=\"40%\" />\n          </tr>\n        </thead>\n        <tbody>\n          {sids.map((id) => {\n            const citation = rows.get(id);\n            let { litype } = citation;\n            if (typeof litype === 'undefined' || CitationTypeEOL.includes(litype)) {\n              litype = 'uncategorized';\n            }\n            const chkDisabled = litype === 'uncategorized';\n            const chkDesc = chkDisabled ? 'citation type is uncategorized, cannot publish this reference' : 'publish this reference';\n            return (\n              <tr key={id}>\n                <td className=\"padding-right\" style={{ display: 'inline-flex' }}>\n                  <i className={`icon-${citation.element_type.toLowerCase()}`} style={{ fontSize: '1.5em' }} />&nbsp;&nbsp;\n                  <Citation literature={citation} />\n                </td>\n                <td>\n                  <OverlayTrigger\n                    placement=\"left\"\n                    overlay={<Tooltip id=\"checkAnalysis\">{chkDesc}</Tooltip>}\n                  >\n                    <span>\n                      <Checkbox\n                        disabled={chkDisabled}\n                        checked={selectedRefs.includes(id)}\n                        onChange={() => { this.handleRefCheck(id); }}\n                      >\n                        <span>Add to publication</span><br />\n                        <span>({CitationTypeMap[litype].def})</span>\n                      </Checkbox>\n                    </span>\n                  </OverlayTrigger>\n                </td>\n              </tr>\n            );\n          })}\n        </tbody>\n      </Table>\n    );\n  }\n\n  selectReferences() {\n    const { selectedRefs, literatures, sortedIds } = this.state;\n    return (\n      <div>\n        <ListGroup fill=\"true\">\n          <ListGroupItem>\n            {this.citationTable(literatures, sortedIds, selectedRefs)}\n          </ListGroupItem>\n        </ListGroup>\n      </div>\n    );\n  }\n\n  handleEmbargoChange(selectedValue) {\n    if (selectedValue) {\n      this.setState({ selectedEmbargo: selectedValue });\n    }\n  }\n\n  handleLicenseChange(selectedValue) {\n    if (selectedValue) {\n      this.setState({\n        selectedLicense: selectedValue,\n        cc0Consent: { consent1: false, consent2: false }\n      });\n    }\n  }\n\n  handleCC0ConsentChange(selectedValue, selectedType) {\n    const { cc0Consent } = this.state;\n    if (selectedType === 'consent1') {\n      cc0Consent.consent1 = selectedValue;\n    }\n    if (selectedType === 'consent2') {\n      cc0Consent.consent2 = selectedValue;\n    }\n    this.setState({ cc0Consent });\n  }\n\n  handlePublishTypeChange(e) {\n    const { publishType } = this.state;\n    publishType.selected = e;\n    this.setState({ publishType });\n  }\n\n  validatePub(isFullyPublish = true) {\n    const { reaction, noEmbargo, selectedEmbargo } = this.state;\n    let validates = [];\n    if (isFullyPublish) {\n      validates.push({ name: 'embargo', value: selectedEmbargo !== '-1' || (selectedEmbargo === '-1' && noEmbargo), message: 'No embargo bundle' });\n      validates.push({ name: 'reaction type', value: !!(reaction.rxno && reaction.rxno.length > 0), message: reaction.rxno ? '' : 'Reaction type is missing' });\n      const hasSt = reaction.starting_materials?.length > 0;\n      validates.push({ name: 'start_material', value: !!hasSt, message: hasSt ? '' : 'Start material is missing' });\n      const hasSv =\n        this.state.noSolvent === true || (reaction.solvents && reaction.solvents.length > 0);\n      validates.push({ name: 'solvent', value: !!hasSv, message: hasSv ? '' : 'Solvent is missing' });\n      const hasProduct = reaction.products && reaction.products.length > 0;\n      validates.push({ name: 'product', value: !!hasProduct, message: hasProduct ? '' : 'Product is missing' });\n\n      const stValidation = doStValidation(reaction);\n      if (stValidation) {\n        (reaction.starting_materials || []).forEach((st) => {\n          if (!st.amount || !st.amount.value) {\n            validates.push({ name: 'starting_materials-amount', value: false, message: `[Starting material] ${st.molecule_iupac_name}: amount is 0` });\n          }\n        });\n      }\n      if (!this.state.noAmountYield) {\n        (reaction.products || []).forEach((prod) => {\n          if (!prod.amount || !prod.amount.value) {\n            validates.push({ name: 'product-amount', value: false, message: `[Product] ${prod.molecule_iupac_name}: amount is 0` });\n          }\n        });\n      }\n    }\n    validates = this.state.noAmountYield ? validates : validates.concat(validateYield(reaction));\n    return validates;\n  }\n\n  render() {\n    const { show } = this.props;\n    const {\n      reaction, selectedUsers, selectedReviewers, selectedRefs, publishType, bundles\n    } = this.state;\n\n    const isFullyPublish = publishType.selected === publishOptions.f;\n    const canPublish = isFullyPublish ? this.validateAnalyses() : true;\n    const validateInfo = this.validatePub(isFullyPublish);\n    const validateObjs = validateInfo && validateInfo.filter(v => v.value === false);\n    const validated = !!(validateObjs && validateObjs.length === 0);\n\n    let selectedAnalysesCount = (this.state.reaction.analyses || [])\n      .filter(a => (a.extended_metadata && (a.extended_metadata.publish && (a.extended_metadata.publish === true || a.extended_metadata.publish === 'true'))\n      && a.extended_metadata.kind)).length;\n\n    const productDOI = product => (\n      <tr key={`doi-product-row-${product.id}`}>\n        <td>\n          Product {product.name}\n        </td>\n        <td>\n          {product.tag.taggable_data.reserved_doi ? `DOI: ${product.tag.taggable_data.reserved_doi}` : ''}\n        </td>\n      </tr>\n    );\n\n    const productAnalysesDOI = analysis => (\n      <tr key={`doi-product-analysis-row-${analysis.id}`}>\n        <td>\n          {analysis.name} - {(analysis.extended_metadata.kind || '').split('|').pop().trim()}\n        </td>\n        <td>\n          {analysis.extended_metadata.reserved_doi ? `DOI: ${analysis.extended_metadata.reserved_doi}` : ''}\n        </td>\n      </tr>\n    );\n\n    if (show) {\n      const analysesView = [];\n      const analysesReaction = head(filter(reaction?.container?.children, o => o.container_type === 'analyses')).children;\n\n      selectedAnalysesCount = (analysesReaction || []).filter(a =>\n        (a.extended_metadata && (a.extended_metadata.publish && (a.extended_metadata.publish === true || a.extended_metadata.publish === 'true')) && a.extended_metadata.kind)).length;\n\n      const analysesViewReaction = analysesReaction.map(analysis => (\n        <PublishAnalysesTag\n          reaction={reaction}\n          analysis={analysis}\n          key={`reaction_${analysis.id}`}\n          analysesType=\"Reaction\"\n          handleAnalysesChecked={this.handleAnalysesChecked}\n        />\n      ));\n      analysesView.push(analysesViewReaction);\n\n      const analysesReactionProductsDOIs = [];\n      const analysesReactionProducts = reaction.products;\n\n      analysesReactionProducts.forEach((product) => {\n        const arrP = [];\n        arrP.push(product);\n        const tmpProduct = arrP.map(p => (\n          <AnalysisHeaderSample\n            sampleSvgFile={p.sample_svg_file}\n            key={`reaction_analysis_${p.id}`}\n          />\n        ));\n        analysesView.push(tmpProduct);\n\n        const tmp = head(filter(product.container.children, o => o.container_type === 'analyses')).children;\n        const tmpTag = tmp.map(analysis => (\n          <PublishAnalysesTag\n            reaction={reaction}\n            analysis={analysis}\n            key={`reaction_product_${analysis.id}`}\n            analysesType=\"Product\"\n            handleAnalysesChecked={this.handleAnalysesChecked}\n            product={product}\n          />\n        ));\n        analysesView.push(tmpTag);\n        analysesReactionProductsDOIs.push(productDOI(product));\n        analysesReactionProductsDOIs.push(tmp.map(a => productAnalysesDOI(a)));\n        selectedAnalysesCount += (tmp || []).filter(a =>\n          (a.extended_metadata && (a.extended_metadata.publish && (a.extended_metadata.publish === true || a.extended_metadata.publish === 'true')) && a.extended_metadata.kind\n            && ((a.extended_metadata.status || '') === 'Confirmed')\n            && (isNmrPass(a, product))\n            && (isDatasetPass(a))\n          )).length;\n      });\n\n      const {\n        selectedEmbargo, selectedLicense, cc0Consent, noEmbargo\n      } = this.state;\n\n      const publishTypeAs = {\n        ...publishType,\n        onChange: this.handlePublishTypeChange\n      };\n\n\n      const opts = [];\n      bundles.forEach((col) => {\n        const tag = col.taggable_data || {};\n        opts.push({ value: col.element_id, name: tag.label, label: tag.label });\n      });\n\n      const awareEmbargo = selectedEmbargo === '-1' ? (\n        <Checkbox\n          onChange={() => { this.handleNoEmbargoCheck(); }}\n          checked={noEmbargo}\n          className={`display-${isFullyPublish}`}\n        >\n          <span>\n            I know that the data that is submitted without the selection of an embargo\n            bundle will be published immediately after a successful review.\n          </span>\n        </Checkbox>\n      ) : <div />;\n\n      return (\n        <div>\n          <Modal dialogClassName=\"structure-viewer-modal\" animation show={show} bsSize=\"large\" onHide={() => this.props.onHide(false)}>\n            <Modal.Header closeButton style={{ paddingBottom: '2px', paddingTop: '10px' }}>\n              <Grid style={{ width: '100%' }}>\n                <Col sm={6} lg={6}>\n                  <Form inline>\n                    <FormGroup controlId=\"frmCtrlPublishType\">\n                      <ControlLabel>\n                        Publish Reaction as\n                      </ControlLabel>{' '}\n                      <PublishTypeAs {...publishTypeAs} />\n                    </FormGroup>\n                  </Form>\n                </Col>\n                <Col sm={6} lg={6}>\n                  {' '}\n                </Col>\n              </Grid>\n            </Modal.Header>\n            <Modal.Body style={{\n              paddingBottom: 'unset', height: 'calc(100vh - 210px)', maxHeight: 'calc(100vh - 210px)', overflowY: 'auto'\n            }}\n            >\n              <EmbargoCom\n                opts={opts}\n                selectedValue={selectedEmbargo}\n                onEmbargoChange={this.handleEmbargoChange}\n                selectedLicense={selectedLicense}\n                onLicenseChange={this.handleLicenseChange}\n                onCC0ConsentChange={this.handleCC0ConsentChange}\n                cc0Deed={cc0Consent}\n              />\n              <div className={`display-${isFullyPublish}`}>\n                <ReactionInfo\n                  reaction={reaction}\n                  toggleScheme={this.toggleScheme}\n                  showScheme={this.state.showScheme}\n                  isPublic={false}\n                  toggleRinchi={this.toggleRinchi}\n                  showRinchi={this.state.showRinchi}\n                  toggleProp={this.toggleProp}\n                  showProp={this.state.showProp}\n                  toggleTlc={this.toggleTlc}\n                  showTlc={this.state.showTlc}\n                />\n              </div>\n              <div className={`display-${!isFullyPublish}`}>\n                <ReactionSchemeOnlyInfo\n                  reaction={reaction}\n                  isPublic={false}\n                  schemeDesc={this.state.schemeDesc}\n                  onYieldChange={this.handleYieldChange}\n                  onPropertiesChange={this.handlePropertiesChange}\n                  onUnitChange={this.handleUnitChange}\n                />\n              </div>\n              <div style={{ margin: '5px 0px' }}>\n                <SubmissionCheck validates={validateInfo} />\n              </div>\n              {awareEmbargo}\n              <Checkbox\n                onChange={() => { this.handleNoSolventCheck(); }}\n                checked={this.state.noSolvent}\n                className={`display-${isFullyPublish}`}\n              >\n                <span>This reaction has no solvents</span>\n              </Checkbox>\n              <Checkbox\n                onChange={() => { this.handleNoAmountYieldCheck(); }}\n                checked={this.state.noAmountYield}\n                className={`display-${isFullyPublish}`}\n              >\n                <span>Skip amount and yield validation (the product has no amount and yield)</span>\n              </Checkbox>\n              <PanelGroup accordion id={`panelgroup_${reaction.id}`} defaultActiveKey={0}>\n                <Panel\n                  eventKey=\"2\"\n                  className={`display-${isFullyPublish}`}\n                >\n                  <Panel.Heading style={{ paddingBottom: '1px', paddingTop: '1px' }}>\n                    <Panel.Title toggle><h4>Select Analyses ({selectedAnalysesCount})</h4>\n                    </Panel.Title>\n                  </Panel.Heading>\n                  <Panel.Body collapsible>\n                    <div>\n                      <Row>\n                        <Col md={12}>\n                          <h5>\n                            <b>Datasets: </b>\n                            <br />\n                          </h5>\n                        </Col>\n                      </Row>\n                      <Row>\n                        <Col md={12}>\n                          <PanelGroup\n                            accordion\n                            id={`panelgroup_ds_${reaction.id}`}\n                            defaultActiveKey={0}\n                          >\n                            {flatten(analysesView)}\n                          </PanelGroup>\n                        </Col>\n                      </Row>\n                    </div>\n                  </Panel.Body>\n                </Panel>\n                <Panel\n                  eventKey=\"3\"\n                >\n                  <Panel.Heading style={{ paddingBottom: '1px', paddingTop: '1px' }}>\n                    <Panel.Title toggle><h4> Select Authors ({selectedUsers.length})</h4>\n                    </Panel.Title>\n                  </Panel.Heading>\n                  <Panel.Body collapsible>\n                    {this.contributor()}\n                    {this.selectUsers()}\n                  </Panel.Body>\n                </Panel>\n                <Panel\n                  eventKey=\"5\"\n                  className={`display-${isFullyPublish}`}\n                >\n                  <Panel.Heading style={{ paddingBottom: '1px', paddingTop: '1px' }}>\n                    <Panel.Title toggle>\n                      <h4> Select References ({selectedRefs.length})</h4>\n                    </Panel.Title>\n                  </Panel.Heading>\n                  <Panel.Body collapsible>\n                    {this.selectReferences()}\n                  </Panel.Body>\n                </Panel>\n                <Panel eventKey=\"6\">\n                  <Panel.Heading>\n                    <Panel.Title toggle>\n                      <h4> Additional Reviewers ({selectedReviewers.length})</h4>\n                    </Panel.Title>\n                  </Panel.Heading>\n                  <Panel.Body collapsible>\n                    {this.addReviewers()}\n                  </Panel.Body>\n                </Panel>\n              </PanelGroup>\n            </Modal.Body>\n            <Modal.Footer style={{ padding: '6px' }}>\n              <Button onClick={() => this.props.onHide(false)}>Close</Button>\n              <Button bsStyle=\"primary\" disabled={!canPublish || !validated} onClick={this.handlePublishReaction}>\n                Publish Reaction\n              </Button>\n            </Modal.Footer>\n          </Modal>\n        </div>\n      );\n    }\n    return <div />;\n  }\n}\n\nPublishReactionModal.propTypes = {\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n  show: PropTypes.bool.isRequired,\n  onHide: PropTypes.func.isRequired,\n  onPublishRefreshClose: PropTypes.func.isRequired,\n  onHandleAnalysesCheck: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport { Label, Button, OverlayTrigger, Popover } from 'react-bootstrap';\n\nexport default class ElementResearchPlanLabels extends React.Component {\n  constructor(props) {\n\n    super(props);\n    this.state = {\n      research_plans: props.plans\n    };\n\n    this.handleOnClick = this.handleOnClick.bind(this);\n    this.preventOnClick = this.preventOnClick.bind(this);\n  }\n\n  handleOnClick(label, e) {\n    e.stopPropagation();\n\n    let url = \"/research_plan/\" + label.id;\n    Aviator.navigate(url);\n  }\n\n  preventOnClick(e) {\n    e.stopPropagation();\n  }\n\n  formatLabels(labels) {\n    return labels.map((label, index) => {\n      return (\n        <span className=\"collection-label\" key={index}>\n          <Button bsStyle=\"default\" bsSize=\"xs\" onClick={e => this.handleOnClick(label, e)}>\n            {label.name}\n          </Button>\n          &nbsp;\n        </span>\n      );\n    });\n  }\n\n  renderCollectionsLabels(research_plans) {\n    if (research_plans == undefined) return <span />;\n\n    return (\n      <div>\n        <h3 className=\"popover-title\">Research Plans</h3>\n        <div className=\"popover-content\">\n          {this.formatLabels(research_plans)}\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    const { research_plans } = this.state;\n\n    let placement = 'right';\n    let researchPlanOverlay = (\n      <Popover className=\"collection-overlay\" id=\"element-collections\">\n        {this.renderCollectionsLabels(research_plans)}\n      </Popover>\n    );\n\n    return (\n      <div style={{display: \"inline-block\"}} onClick={this.preventOnClick}>\n        <OverlayTrigger\n          trigger=\"click\"\n          rootClose\n          placement={placement}\n          overlay={researchPlanOverlay}\n        >\n          <span className=\"collection-label\" >\n            <Label>\n              <i className=\"fa fa-file-text-o\" />\n                {\" \" + research_plans.length}\n            </Label>\n          </span>\n        </OverlayTrigger>\n      </div>\n    );\n  }\n}\n","const metPrefSymbols = {\n  u: '\\u03BC', // micro\n  m: 'm', // milli\n  c: 'c', // centi\n  d: 'd', // deci\n  n: '', // none\n  k: 'k' // kilo\n};\n\nconst metPref = {\n  u: 0.000001,\n  m: 0.001,\n  c: 0.01,\n  d: 0.1,\n  n: 1.0,\n  k: 1000.0,\n};\n\nconst metPreConv = (value, fromMP, toMP) => (metPref[fromMP] / metPref[toMP]) * value;\n\nexport { metPreConv, metPrefSymbols };\n","import { AgGridReact } from 'ag-grid-react';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { cloneDeep } from 'lodash';\nimport {\n  convertUnit, materialTypes, volumeUnits, massUnits, amountUnits, getStandardUnit,\n  getCellDataType\n} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsUtils';\n\nfunction getMolFromGram(gram, material) {\n  if (material.aux.loading) {\n    return (material.aux.loading * gram) / 1e4;\n  }\n\n  if (material.aux.molarity) {\n    const liter = (gram * material.aux.purity)\n      / (material.aux.molarity * material.aux.molecularWeight);\n    return liter * material.aux.molarity;\n  }\n\n  return (gram * material.aux.purity) / material.aux.molecularWeight;\n}\n\nfunction getGramFromMol(mol, material) {\n  if (material.aux.loading) {\n    return (mol / material.aux.loading) * 1e4;\n  }\n  return (mol / (material.aux.purity ?? 1.0)) * material.aux.molecularWeight;\n}\n\nfunction getReferenceMaterial(variationsRow) {\n  const variationsRowCopy = cloneDeep(variationsRow);\n  const potentialReferenceMaterials = { ...variationsRowCopy.startingMaterials, ...variationsRowCopy.reactants };\n  return Object.values(potentialReferenceMaterials).find((material) => material.aux?.isReference || false);\n}\n\nfunction computeEquivalent(material, referenceMaterial) {\n  return getMolFromGram(material.mass.value, material)\n  / getMolFromGram(referenceMaterial.mass.value, referenceMaterial);\n}\n\nfunction computePercentYield(material, referenceMaterial, reactionHasPolymers) {\n  const stoichiometryCoefficient = (material.aux.coefficient ?? 1.0)\n    / (referenceMaterial.aux.coefficient ?? 1.0);\n  const equivalent = computeEquivalent(material, referenceMaterial)\n    / stoichiometryCoefficient;\n  return reactionHasPolymers ? (equivalent * 100)\n    : ((equivalent <= 1 ? equivalent : 1) * 100);\n}\n\nfunction getReactionMaterials(reaction) {\n  const reactionCopy = cloneDeep(reaction);\n  return Object.entries(materialTypes).reduce((materialsByType, [materialType, { reactionAttributeName }]) => {\n    materialsByType[materialType] = reactionCopy[reactionAttributeName].filter((material) => !material.isNew);\n    return materialsByType;\n  }, {});\n}\n\nfunction getReactionMaterialsIDs(reactionMaterials) {\n  return Object.values(reactionMaterials).flat().map((material) => material.id);\n}\n\nfunction updateYields(variationsRow, reactionHasPolymers) {\n  const updatedVariationsRow = cloneDeep(variationsRow);\n  const referenceMaterial = getReferenceMaterial(updatedVariationsRow);\n\n  Object.entries(updatedVariationsRow.products).forEach(([productName, productMaterial]) => {\n    updatedVariationsRow.products[productName].aux.yield = computePercentYield(\n      productMaterial,\n      referenceMaterial,\n      reactionHasPolymers\n    );\n  });\n\n  return updatedVariationsRow;\n}\n\nfunction updateEquivalents(variationsRow) {\n  const updatedVariationsRow = cloneDeep(variationsRow);\n  const referenceMaterial = getReferenceMaterial(updatedVariationsRow);\n\n  ['startingMaterials', 'reactants'].forEach((materialType) => {\n    Object.entries(updatedVariationsRow[materialType]).forEach(([materialName, material]) => {\n      if (material.aux.isReference) { return; }\n      updatedVariationsRow[materialType][materialName].aux.equivalent = computeEquivalent(material, referenceMaterial);\n    });\n  });\n  return updatedVariationsRow;\n}\n\nfunction getMaterialData(material) {\n  const materialCopy = cloneDeep(material);\n\n  const mass = { value: materialCopy.amount_g ?? null, unit: getStandardUnit('mass') };\n  const amount = { value: material.amount_mol ?? null, unit: getStandardUnit('amount') };\n  const volume = { value: materialCopy.amount_l ?? null, unit: getStandardUnit('volume') };\n\n  const aux = {\n    coefficient: materialCopy.coefficient ?? null,\n    isReference: materialCopy.reference ?? false,\n    loading: (Array.isArray(materialCopy.residues) && materialCopy.residues.length) ? materialCopy.residues[0].custom_info?.loading : null,\n    purity: materialCopy.purity ?? null,\n    molarity: materialCopy.molarity_value ?? null,\n    molecularWeight: materialCopy.molecule_molecular_weight ?? null,\n    sumFormula: materialCopy.molecule_formula ?? null,\n    yield: null,\n    equivalent: null\n  };\n\n  return {\n    volume, mass, amount, aux\n  };\n}\n\nfunction removeObsoleteMaterialsFromVariations(variations, currentMaterials) {\n  const updatedVariations = cloneDeep(variations);\n  updatedVariations.forEach((row) => {\n    Object.keys(materialTypes).forEach((materialType) => {\n      Object.keys(row[materialType]).forEach((materialName) => {\n        if (!currentMaterials[materialType].map((material) => material.id.toString()).includes(materialName)) {\n          delete row[materialType][materialName];\n        }\n      });\n    });\n  });\n  return updatedVariations;\n}\n\nfunction addMissingMaterialsToVariations(variations, currentMaterials) {\n  const updatedVariations = cloneDeep(variations);\n  updatedVariations.forEach((row) => {\n    Object.keys(materialTypes).forEach((materialType) => {\n      currentMaterials[materialType].forEach((material) => {\n        if (!(material.id in row[materialType])) {\n          row[materialType][material.id] = getMaterialData(material);\n        }\n      });\n    });\n  });\n  return updatedVariations;\n}\n\nfunction MaterialOverlay({\n  value: cellData, colDef\n}) {\n  const { aux = null } = cellData;\n  const { entry, displayUnit } = colDef.currentEntryWithDisplayUnit;\n\n  return (\n    <div\n      className=\"custom-tooltip\"\n      style={{\n        padding: '3px 8px',\n        color: '#fff',\n        backgroundColor: '#000',\n        borderRadius: '4px',\n      }}\n    >\n      {entry !== 'equivalent' && (\n        <p>\n          <span>\n            {Number(convertUnit(cellData[entry].value, cellData[entry].unit, displayUnit)).toPrecision(4)}\n            {' '}\n            [\n            {displayUnit}\n            ]\n          </span>\n        </p>\n      )}\n\n      {aux?.isReference ? (\n        <p>\n          <span>Reference</span>\n        </p>\n      ) : null}\n\n      {aux?.equivalent !== null && (\n        <p>\n          <span>\n            Equivalent:\n          </span>\n          {' '}\n          {Number(aux.equivalent).toPrecision(4)}\n        </p>\n      )}\n\n      {aux?.coefficient !== null && (\n        <p>\n          <span>\n            Coefficient:\n          </span>\n          {' '}\n          {Number(aux.coefficient).toPrecision(4)}\n        </p>\n      )}\n\n      {aux?.yield !== null && (\n        <p>\n          <span>\n            Yield:\n          </span>\n          {' '}\n          {Number(aux.yield).toPrecision(4)}\n          %\n        </p>\n      )}\n\n      {aux?.molecularWeight !== null && (\n      <p>\n        <span>\n          Molar mass:\n        </span>\n        {' '}\n        {Number(aux.molecularWeight).toPrecision(2)}\n        {' '}\n        g/mol\n      </p>\n      )}\n    </div>\n  );\n}\n\nMaterialOverlay.propTypes = {\n  value: PropTypes.instanceOf(AgGridReact.value).isRequired,\n  colDef: PropTypes.instanceOf(AgGridReact.colDef).isRequired,\n};\n\nfunction getMaterialColumnGroupChild(material, materialType, headerComponent) {\n  const materialCopy = cloneDeep(material);\n  let entries = {};\n  if (materialType === 'solvents') {\n    entries = { volume: volumeUnits };\n  }\n  if (materialType === 'products') {\n    entries = { mass: massUnits };\n  }\n  if (['startingMaterials', 'reactants'].includes(materialType)) {\n    entries = { mass: massUnits, amount: amountUnits };\n    if (!materialCopy.reference ?? false) {\n      entries.equivalent = [];\n    }\n  }\n  const names = [`ID: ${materialCopy.id.toString()}`];\n  ['external_label', 'name', 'short_label', 'molecule_formula', 'molecule_iupac_name'].forEach((name) => {\n    if (materialCopy[name]) {\n      names.push(materialCopy[name]);\n    }\n  });\n  const entry = materialType === 'solvents' ? 'volume' : 'mass';\n  return {\n    field: `${materialType}.${materialCopy.id}`, // Must be unique.\n    tooltipField: `${materialType}.${materialCopy.id}`,\n    tooltipComponent: MaterialOverlay,\n    currentEntryWithDisplayUnit: { entry, displayUnit: getStandardUnit(entry) },\n    cellDataType: getCellDataType(entry),\n    headerComponent,\n    headerComponentParams: {\n      names,\n      entries\n    },\n  };\n}\n\nfunction updateColumnDefinitionsMaterials(columnDefinitions, currentMaterials, headerComponent) {\n  const updatedColumnDefinitions = cloneDeep(columnDefinitions);\n\n  Object.entries(currentMaterials).forEach(([materialType, materials]) => {\n    const materialIDs = materials.map((material) => material.id.toString());\n    const materialColumnGroup = updatedColumnDefinitions.find((columnGroup) => columnGroup.groupId === materialType);\n\n    // Remove obsolete materials.\n    materialColumnGroup.children = materialColumnGroup.children.filter((child) => {\n      const childID = child.field.split('.').splice(1).join('.'); // Ensure that IDs that contain \".\" are handled correctly.\n      return materialIDs.includes(childID);\n    });\n    // Add missing materials.\n    materials.forEach((material) => {\n      if (!materialColumnGroup.children.some((child) => child.field === `${materialType}.${material.id}`)) {\n        materialColumnGroup.children.push(getMaterialColumnGroupChild(material, materialType, headerComponent));\n      }\n    });\n  });\n\n  return updatedColumnDefinitions;\n}\n\nfunction updateNonReferenceMaterialOnMassChange(variationsRow, material, materialType, reactionHasPolymers) {\n  const referenceMaterial = getReferenceMaterial(variationsRow);\n\n  // Adapt equivalent to updated mass.\n  const equivalent = (!material.aux.isReference && ['startingMaterials', 'reactants'].includes(materialType))\n    ? computeEquivalent(material, referenceMaterial) : material.aux.equivalent;\n\n  // Adapt yield to updated mass.\n  const percentYield = (materialType === 'products')\n    ? computePercentYield(material, referenceMaterial, reactionHasPolymers) : material.aux.yield;\n\n  const updatedAux = { ...material.aux, equivalent, yield: percentYield };\n\n  return {\n    ...material, aux: updatedAux\n  };\n}\n\nfunction updateVariationsRowOnReferenceMaterialChange(row, reactionHasPolymers) {\n  let updatedRow = cloneDeep(row);\n  updatedRow = updateEquivalents(updatedRow);\n  updatedRow = updateYields(updatedRow, reactionHasPolymers);\n\n  return updatedRow;\n}\n\nexport {\n  MaterialOverlay,\n  getMaterialColumnGroupChild,\n  getReactionMaterials,\n  getReactionMaterialsIDs,\n  getMaterialData,\n  updateColumnDefinitionsMaterials,\n  updateNonReferenceMaterialOnMassChange,\n  updateVariationsRowOnReferenceMaterialChange,\n  removeObsoleteMaterialsFromVariations,\n  addMissingMaterialsToVariations,\n  getReferenceMaterial,\n  getMolFromGram,\n  getGramFromMol,\n};\n","import { set, cloneDeep } from 'lodash';\nimport { convertTemperature, convertDuration } from 'src/models/Reaction';\nimport { metPreConv as convertAmount } from 'src/utilities/metricPrefix';\nimport {\n  updateVariationsRowOnReferenceMaterialChange, getMaterialData\n} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsMaterials';\n\nconst temperatureUnits = ['°C', 'K', '°F'];\nconst durationUnits = ['Second(s)', 'Minute(s)', 'Hour(s)', 'Day(s)', 'Week(s)'];\nconst massUnits = ['g', 'mg', 'μg'];\nconst volumeUnits = ['l', 'ml', 'μl'];\nconst amountUnits = ['mol', 'mmol'];\nconst materialTypes = {\n  startingMaterials: { label: 'Starting Materials', reactionAttributeName: 'starting_materials' },\n  reactants: { label: 'Reactants', reactionAttributeName: 'reactants' },\n  products: { label: 'Products', reactionAttributeName: 'products' },\n  solvents: { label: 'Solvents', reactionAttributeName: 'solvents' }\n};\n\nfunction getStandardUnit(entry) {\n  switch (entry) {\n    case 'volume':\n      return volumeUnits[0];\n    case 'mass':\n      return massUnits[0];\n    case 'amount':\n      return amountUnits[0];\n    case 'temperature':\n      return temperatureUnits[0];\n    case 'duration':\n      return durationUnits[0];\n    default:\n      return null;\n  }\n}\n\nfunction convertUnit(value, fromUnit, toUnit) {\n  if (temperatureUnits.includes(fromUnit) && temperatureUnits.includes(toUnit)) {\n    return convertTemperature(value, fromUnit, toUnit);\n  }\n  if (durationUnits.includes(fromUnit) && durationUnits.includes(toUnit)) {\n    return convertDuration(value, fromUnit, toUnit);\n  }\n  if (massUnits.includes(fromUnit) && massUnits.includes(toUnit)) {\n    const amountUnitPrefixes = { g: 'n', mg: 'm', μg: 'u' };\n    return convertAmount(value, amountUnitPrefixes[fromUnit], amountUnitPrefixes[toUnit]);\n  }\n  if (volumeUnits.includes(fromUnit) && volumeUnits.includes(toUnit)) {\n    const amountUnitPrefixes = { l: 'n', ml: 'm', μl: 'u' };\n    return convertAmount(value, amountUnitPrefixes[fromUnit], amountUnitPrefixes[toUnit]);\n  }\n  if (amountUnits.includes(fromUnit) && amountUnits.includes(toUnit)) {\n    const amountUnitPrefixes = { mol: 'n', mmol: 'm' };\n    return convertAmount(value, amountUnitPrefixes[fromUnit], amountUnitPrefixes[toUnit]);\n  }\n\n  return value;\n}\n\nfunction getCellDataType(entry) {\n  if (['temperature', 'duration'].includes(entry)) {\n    return 'property';\n  }\n  if (entry === 'equivalent') {\n    return 'equivalent';\n  }\n  if (['mass', 'volume', 'amount'].includes(entry)) {\n    return 'material';\n  }\n  return null;\n}\n\nfunction getVariationsRowName(reactionLabel, variationsRowId) {\n  return `${reactionLabel}-${variationsRowId}`;\n}\n\nfunction getSequentialId(variations) {\n  const ids = variations.map((row) => (row.id));\n  return (ids.length === 0) ? 1 : Math.max(...ids) + 1;\n}\n\nfunction createVariationsRow(reaction, variations) {\n  const reactionCopy = cloneDeep(reaction);\n  const { dispValue: durationValue = null, dispUnit: durationUnit = 'None' } = reactionCopy.durationDisplay ?? {};\n  const { userText: temperatureValue = null, valueUnit: temperatureUnit = 'None' } = reactionCopy.temperature ?? {};\n  let row = {\n    id: getSequentialId(variations),\n    properties: {\n      temperature: {\n        value: convertUnit(temperatureValue, temperatureUnit, getStandardUnit('temperature')),\n        unit: getStandardUnit('temperature')\n      },\n      duration: {\n        value: convertUnit(durationValue, durationUnit, getStandardUnit('duration')),\n        unit: getStandardUnit('duration'),\n      },\n    },\n    analyses: [],\n    notes: '',\n  };\n  Object.entries(materialTypes).forEach(([materialType, { reactionAttributeName }]) => {\n    row[materialType] = reactionCopy[reactionAttributeName].reduce((a, v) => (\n      { ...a, [v.id]: getMaterialData(v) }), {});\n  });\n\n  return updateVariationsRowOnReferenceMaterialChange(row, reactionCopy.has_polymers);\n}\n\nfunction copyVariationsRow(row, variations) {\n  const copiedRow = cloneDeep(row);\n  copiedRow.id = getSequentialId(variations);\n  copiedRow.analyses = [];\n  copiedRow.notes = '';\n\n  return copiedRow;\n}\n\nfunction updateVariationsRow(row, field, value, reactionHasPolymers) {\n  /*\n  Some attributes of a material need to be updated in response to changes in other attributes:\n\n  attribute  | needs to be updated in response to\n  -----------|----------------------------------\n  equivalent | own mass changes^, own amount changes^, reference material's mass changes~, reference material's amount changes~\n  mass       | own amount changes^, own equivalent changes^\n  amount     | own mass changes^, own equivalent changes^\n  yield      | own mass changes^, own amount changes^x, reference material's mass changes~, reference material's amount changes~\n\n  ^: handled in corresponding cell parsers (changes within single material)\n  ~: handled here (row-wide changes across materials)\n  x: not permitted according to business logic\n  */\n  let updatedRow = cloneDeep(row);\n  set(updatedRow, field, value);\n  if (value.aux?.isReference) {\n    updatedRow = updateVariationsRowOnReferenceMaterialChange(updatedRow, reactionHasPolymers);\n  }\n\n  return updatedRow;\n}\n\nfunction updateColumnDefinitions(columnDefinitions, field, property, newValue) {\n  const updatedColumnDefinitions = cloneDeep(columnDefinitions);\n\n  updatedColumnDefinitions.forEach((columnDefinition) => {\n    if (columnDefinition.groupId) {\n      // Column group.\n      columnDefinition.children.forEach((child) => {\n        if (child.field === field) {\n          child[property] = newValue;\n        }\n      });\n    } else if (columnDefinition.field === field) {\n      // Single column.\n      columnDefinition[property] = newValue;\n    }\n  });\n\n  return updatedColumnDefinitions;\n}\n\nexport {\n  massUnits,\n  volumeUnits,\n  amountUnits,\n  temperatureUnits,\n  durationUnits,\n  convertUnit,\n  getStandardUnit,\n  materialTypes,\n  getVariationsRowName,\n  createVariationsRow,\n  copyVariationsRow,\n  updateVariationsRow,\n  updateColumnDefinitions,\n  getCellDataType\n};\n","import React, { useState } from 'react';\nimport { AgGridReact } from 'ag-grid-react';\nimport PropTypes from 'prop-types';\nimport {\n  Label, FormGroup, Checkbox, Button, Modal\n} from 'react-bootstrap';\nimport cloneDeep from 'lodash/cloneDeep';\nimport Reaction from 'src/models/Reaction';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport { getVariationsRowName } from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsUtils';\n\nfunction getReactionAnalyses(reaction) {\n  const reactionCopy = cloneDeep(reaction);\n  const analysesContainer = reactionCopy.container?.children?.find((child) => child.container_type === 'analyses');\n  const analyses = analysesContainer?.children?.filter((analysis) => !analysis.is_new);\n\n  return analyses ?? [];\n}\n\nfunction updateAnalyses(variations, allReactionAnalyses) {\n  const analysesIDs = allReactionAnalyses.filter((analysis) => !analysis.is_deleted).map((child) => child.id);\n  const updatedVariations = cloneDeep(variations);\n  updatedVariations.forEach((row) => {\n    row.analyses = row.analyses.filter((id) => analysesIDs.includes(id));\n  });\n\n  return updatedVariations;\n}\n\nfunction getAnalysesOverlay({ data: variationsRow, context }) {\n  const { analyses: analysesIDs } = variationsRow;\n  const { allReactionAnalyses } = context;\n\n  return allReactionAnalyses.filter((analysis) => analysesIDs.includes(analysis.id));\n}\n\nfunction AnalysisOverlay({ value: analyses }) {\n  if (analyses.length === 0) {\n    return ''; // Don't return null, it breaks AG's logic to determine if component is rendered.\n  }\n  return (\n    <div\n      className=\"custom-tooltip\"\n      style={{\n        padding: '3px 8px',\n        color: '#fff',\n        backgroundColor: '#000',\n        borderRadius: '4px',\n      }}\n    >\n      Linked analyses:\n      <ul style={{ paddingLeft: '15px' }}>\n        {analyses.map((analysis) => (\n          <li key={analysis.id}>{analysis.name}</li>\n        ))}\n      </ul>\n\n    </div>\n  );\n}\n\nAnalysisOverlay.propTypes = {\n  value: PropTypes.instanceOf(AgGridReact.value).isRequired,\n};\n\nfunction AnalysisVariationLink({ reaction, analysisID }) {\n  const { variations } = cloneDeep(reaction);\n  const linkedVariations = variations.filter((row) => row.analyses.includes(analysisID)) ?? [];\n\n  if (linkedVariations.length === 0) {\n    return null;\n  }\n  return (\n    <Label\n      bsStyle=\"info\"\n      onClick={() => UIActions.selectTab({ type: 'reaction', tabKey: 'variations' })}\n    >\n      {`Linked to ${linkedVariations.length} variation(s)`}\n      {' '}\n      <i className=\"fa fa-external-link\" />\n    </Label>\n  );\n}\n\nAnalysisVariationLink.propTypes = {\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n  analysisID: PropTypes.string.isRequired,\n};\n\nfunction AnalysesCellRenderer({ value: analysesIDs }) {\n  return (\n    <div>{`${analysesIDs.length} link(s)`}</div>\n  );\n}\n\nAnalysesCellRenderer.propTypes = {\n  value: PropTypes.instanceOf(AgGridReact.value).isRequired,\n};\n\nfunction AnalysesCellEditor({\n  data: variationsRow,\n  value: analysesIDs,\n  onValueChange,\n  stopEditing,\n  context\n}) {\n  const [selectedAnalysisIDs, setSelectedAnalysisIDs] = useState(analysesIDs);\n  const { reactionShortLabel, allReactionAnalyses } = context;\n\n  const onAnalysisSelectionReady = () => {\n    onValueChange(selectedAnalysisIDs);\n    stopEditing();\n  };\n\n  const onChange = (analysisID) => {\n    if (selectedAnalysisIDs.includes(analysisID)) {\n      setSelectedAnalysisIDs(selectedAnalysisIDs.filter((id) => id !== analysisID));\n    } else {\n      setSelectedAnalysisIDs([...selectedAnalysisIDs, analysisID]);\n    }\n  };\n\n  const navigateToAnalysis = (analysisID) => {\n    UIActions.selectActiveAnalysis({\n      type: 'reaction',\n      analysisIndex: allReactionAnalyses.findIndex((analysis) => analysis.id === analysisID)\n    });\n    UIActions.selectActiveAnalysisTab(4.1);\n    UIActions.selectTab({ type: 'reaction', tabKey: 'analyses' });\n    stopEditing();\n  };\n\n  const analysesSelection = (\n    <div style={{ maxHeight: '200px', overflowY: 'auto' }}>\n      <FormGroup>\n        {allReactionAnalyses.filter((analysis) => !analysis.is_deleted).map((analysis) => (\n          <div key={analysis.id} style={{ display: 'flex', alignItems: 'center' }}>\n            <Checkbox\n              onChange={() => onChange(analysis.id)}\n              checked={selectedAnalysisIDs.includes(analysis.id)}\n              style={{ marginRight: '10px' }}\n            >\n              {analysis.name}\n            </Checkbox>\n            <Button bsSize=\"xs\" onClick={() => navigateToAnalysis(analysis.id)}>\n              <i className=\"fa fa-external-link\" />\n            </Button>\n          </div>\n        ))}\n      </FormGroup>\n    </div>\n  );\n\n  const cellContent = (\n    <Modal show>\n      <Modal.Header>\n        {`Link analyses to ${getVariationsRowName(reactionShortLabel, variationsRow.id)}`}\n      </Modal.Header>\n      <Modal.Body>{analysesSelection}</Modal.Body>\n      <Modal.Footer>\n        <Button onClick={onAnalysisSelectionReady}>Save</Button>\n      </Modal.Footer>\n    </Modal>\n  );\n\n  return cellContent;\n}\n\nAnalysesCellEditor.propTypes = {\n  data: PropTypes.instanceOf(AgGridReact.data).isRequired,\n  value: PropTypes.instanceOf(AgGridReact.value).isRequired,\n  onValueChange: PropTypes.func.isRequired,\n  stopEditing: PropTypes.instanceOf(AgGridReact.value).isRequired,\n  context: PropTypes.instanceOf(AgGridReact.context).isRequired,\n};\n\nexport {\n  AnalysesCellRenderer,\n  AnalysesCellEditor,\n  AnalysisVariationLink,\n  AnalysisOverlay,\n  getAnalysesOverlay,\n  updateAnalyses,\n  getReactionAnalyses\n};\n","const fixDigit = (input, precision) => {\n  const output = input || 0.0;\n  return output.toFixed(precision);\n};\n\nconst precLimit = (precision) => {\n  if (precision > 20) {\n    return 20;\n  } else if (precision < 0) {\n    return 0;\n  }\n  return precision;\n};\n\nconst largerThanOne = (num, headLen, tailLen, precision) => {\n  if ((precision - headLen) < 0) {\n    return num.toFixed(0);\n  }\n  return num.toFixed(precLimit(precision - headLen));\n};\n\nconst smallerThanOne = (num, tailLen, precision) => {\n  if (num === 0.0) {\n    return num.toFixed(precLimit(precision - 1));\n  }\n  return num.toFixed(precLimit(precision + tailLen));\n};\n\nconst validDigit = (input, precision) => {\n  const num = input || 0.0;\n  const numStr = num.toFixed(10).toString().split('.');\n  const headLen = numStr[0].replace(/^[0]+/g, '').length;\n  const tailLen = numStr[1].replace(/[1-9]+\\d*/g, '').length;\n  if (num >= 1.0) {\n    return largerThanOne(num, headLen, tailLen, precision);\n  }\n  return smallerThanOne(num, tailLen, precision);\n};\n\nconst correctPrefix = (input, precision) => {\n  if (input === 0.0) { return false; }\n  if (input >= 1.0) { return `${validDigit(input, precision)} `; }\n  if (input >= 0.001) { return `${validDigit(input * 1000, precision)} m`; }\n  return `${validDigit(input * 1000000, precision)} \\u03BC`;\n};\n\nconst formatBytes = (bytes, decimals = 2) => {\n  if (bytes === 0 || bytes == null) return '0 Bytes';\n\n  const k = 1024;\n  const dm = decimals < 0 ? 0 : decimals;\n  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n  return `${parseFloat((bytes / (k ** i)).toFixed(dm))} ${sizes[i]}`;\n};\n\n/**\n * Parse a string into a number.\n *\n * All characters other than digits, commas, and periods are ignored,\n * with the exception of an optional leading dash to indicate a negative number.\n * The string may contain a decimal separator, which can be either a comma or a period.\n * All other periods or commas (such as thousands separators) are ignored.\n *\n * @param {string} numberString - The string to parse.\n * @returns {number|NaN} - The parsed number or NaN if parsing fails.\n */\nfunction parseNumericString(numberString) {\n  if (typeof numberString !== 'string') {\n    return NaN;\n  }\n  let sanitizedNumberString = numberString;\n\n  // Remove all characters that aren't digits, commas, or periods.\n  sanitizedNumberString = sanitizedNumberString.replace(/[^0-9,.]/g, '');\n  if (sanitizedNumberString === '') {\n    return NaN;\n  }\n\n  // Decimal separator can be comma or period. Convert to period.\n  sanitizedNumberString = sanitizedNumberString.replaceAll(',', '.');\n  // Keep only final (non-terminal) period under the assumption that it's meant as the decimal separator.\n  // Assume that preceding periods were meant as thousands separators.\n  const finalPeriodIndex = sanitizedNumberString.lastIndexOf('.');\n  if (finalPeriodIndex !== -1) {\n    sanitizedNumberString = `${sanitizedNumberString.slice(0, finalPeriodIndex).replaceAll('.', '')\n    }.${\n      sanitizedNumberString.slice(finalPeriodIndex + 1)}`;\n  }\n\n  if (numberString.startsWith('-')) {\n    sanitizedNumberString = `-${sanitizedNumberString}`;\n  }\n\n  return Number(sanitizedNumberString);\n}\n\nexport {\n  fixDigit,\n  validDigit,\n  correctPrefix,\n  formatBytes,\n  parseNumericString,\n};\n","/* eslint-disable react/display-name */\nimport React, { useState } from 'react';\nimport { AgGridReact } from 'ag-grid-react';\nimport {\n  Button, ButtonGroup, Badge, Modal, FormControl\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport {\n  getVariationsRowName,\n  convertUnit\n} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsUtils';\nimport {\n  updateNonReferenceMaterialOnMassChange,\n  getReferenceMaterial, getMolFromGram, getGramFromMol\n} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsMaterials';\nimport { parseNumericString } from 'src/utilities/MathUtils';\n\nfunction RowToolsCellRenderer({\n  data: variationsRow, context\n}) {\n  const { reactionShortLabel, copyRow, removeRow } = context;\n  return (\n    <div>\n      <Badge>{getVariationsRowName(reactionShortLabel, variationsRow.id)}</Badge>\n      {' '}\n      <ButtonGroup>\n        <Button bsSize=\"xsmall\" bsStyle=\"success\" onClick={() => copyRow(variationsRow)}>\n          <i className=\"fa fa-clone\" />\n        </Button>\n        <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => removeRow(variationsRow)}>\n          <i className=\"fa fa-trash-o\" />\n        </Button>\n      </ButtonGroup>\n    </div>\n  );\n}\n\nRowToolsCellRenderer.propTypes = {\n  data: PropTypes.instanceOf(AgGridReact.data).isRequired,\n  context: PropTypes.instanceOf(AgGridReact.context).isRequired,\n};\n\nfunction EquivalentFormatter({ value: cellData }) {\n  const { equivalent } = cellData.aux;\n\n  return `${Number(equivalent).toPrecision(4)}`;\n}\n\nfunction EquivalentParser({ data: variationsRow, oldValue: cellData, newValue }) {\n  let equivalent = parseNumericString(newValue);\n  if (equivalent < 0) {\n    equivalent = 0;\n  }\n  // Adapt mass to updated equivalent.\n  const referenceMaterial = getReferenceMaterial(variationsRow);\n  const referenceMol = getMolFromGram(referenceMaterial.mass.value, referenceMaterial);\n  const mass = getGramFromMol(referenceMol * equivalent, cellData);\n\n  // Adapt amount to updated equivalent.\n  const amount = getMolFromGram(mass, cellData);\n\n  return {\n    ...cellData,\n    mass: { ...cellData.mass, value: mass },\n    amount: { ...cellData.amount, value: amount },\n    aux: { ...cellData.aux, equivalent }\n  };\n}\n\nfunction PropertyFormatter({ value: cellData, colDef }) {\n  const { displayUnit } = colDef.currentEntryWithDisplayUnit;\n  const valueInDisplayUnit = convertUnit(Number(cellData.value), cellData.unit, displayUnit);\n\n  return `${Number(valueInDisplayUnit).toPrecision(4)}`;\n}\n\nfunction PropertyParser({\n  oldValue: cellData, newValue, colDef\n}) {\n  const { entry, displayUnit } = colDef.currentEntryWithDisplayUnit;\n  let value = parseNumericString(newValue);\n  if (entry !== 'temperature' && value < 0) {\n    value = 0;\n  }\n  value = convertUnit(value, displayUnit, cellData.unit);\n  const updatedCellData = { ...cellData, value };\n\n  return updatedCellData;\n}\n\nfunction MaterialFormatter({ value: cellData, colDef }) {\n  const { entry, displayUnit } = colDef.currentEntryWithDisplayUnit;\n  const valueInDisplayUnit = convertUnit(Number(cellData[entry].value), cellData[entry].unit, displayUnit);\n\n  return `${Number(valueInDisplayUnit).toPrecision(4)}`;\n}\n\nfunction MaterialParser({\n  data: variationsRow, oldValue: cellData, newValue, colDef, context\n}) {\n  const { field } = colDef;\n  const { entry, displayUnit } = colDef.currentEntryWithDisplayUnit;\n  const columnGroup = field.split('.')[0];\n  let value = convertUnit(parseNumericString(newValue), displayUnit, cellData[entry].unit);\n  if (value < 0) {\n    value = 0;\n  }\n  let updatedCellData = { ...cellData, [entry]: { ...cellData[entry], value } };\n\n  if (entry === 'mass') {\n    // Adapt amount to updated mass.\n    const amount = getMolFromGram(value, updatedCellData);\n    updatedCellData = { ...updatedCellData, amount: { ...updatedCellData.amount, value: amount } };\n  }\n  if (entry === 'amount') {\n    // Adapt mass to updated amount.\n    const mass = getGramFromMol(value, updatedCellData);\n    updatedCellData = { ...updatedCellData, mass: { ...updatedCellData.mass, value: mass } };\n  }\n  // See comment in ReactionVariationsUtils.updateVariationsRow() regarding reactive updates.\n  if (updatedCellData.aux.isReference) {\n    return updatedCellData;\n  }\n  return updateNonReferenceMaterialOnMassChange(\n    variationsRow,\n    updatedCellData,\n    columnGroup,\n    context.reactionHasPolymers\n  );\n}\n\nfunction NoteCellEditor({\n  data: variationsRow,\n  value,\n  onValueChange,\n  stopEditing,\n  context\n}) {\n  const [note, setNote] = useState(value);\n  const { reactionShortLabel } = context;\n\n  const onClose = () => {\n    stopEditing();\n  };\n\n  const onSave = () => {\n    onValueChange(note);\n    stopEditing();\n  };\n\n  const cellContent = (\n    <Modal show onHide={onClose}>\n      <Modal.Header closeButton>\n        {`Edit note for ${getVariationsRowName(reactionShortLabel, variationsRow.id)}`}\n      </Modal.Header>\n      <Modal.Body>\n        <FormControl\n          componentClass=\"textarea\"\n          placeholder=\"Start typing your note...\"\n          value={note}\n          onChange={(event) => setNote(event.target.value)}\n        />\n      </Modal.Body>\n      <Modal.Footer>\n        <Button onClick={onSave}>Save</Button>\n      </Modal.Footer>\n    </Modal>\n  );\n\n  return cellContent;\n}\n\nNoteCellEditor.propTypes = {\n  data: PropTypes.instanceOf(AgGridReact.data).isRequired,\n  value: PropTypes.instanceOf(AgGridReact.value).isRequired,\n  onValueChange: PropTypes.func.isRequired,\n  stopEditing: PropTypes.instanceOf(AgGridReact.value).isRequired,\n  context: PropTypes.instanceOf(AgGridReact.context).isRequired,\n};\n\nexport {\n  RowToolsCellRenderer,\n  EquivalentFormatter,\n  EquivalentParser,\n  PropertyFormatter,\n  PropertyParser,\n  MaterialFormatter,\n  MaterialParser,\n  NoteCellEditor\n};\n","/* eslint-disable react/display-name */\nimport { AgGridReact } from 'ag-grid-react';\nimport React, {\n  useRef, useState, useEffect, useMemo, useCallback\n} from 'react';\nimport {\n  Button, OverlayTrigger, Tooltip, Alert\n} from 'react-bootstrap';\nimport { isEqual } from 'lodash';\nimport PropTypes from 'prop-types';\nimport Reaction from 'src/models/Reaction';\nimport {\n  createVariationsRow, copyVariationsRow, updateVariationsRow, getCellDataType,\n  temperatureUnits, durationUnits, getStandardUnit, materialTypes, updateColumnDefinitions,\n} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsUtils';\nimport {\n  AnalysesCellRenderer, AnalysesCellEditor, getReactionAnalyses, updateAnalyses, getAnalysesOverlay, AnalysisOverlay\n} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsAnalyses';\nimport {\n  getMaterialColumnGroupChild, updateColumnDefinitionsMaterials,\n  getReactionMaterials, getReactionMaterialsIDs,\n  removeObsoleteMaterialsFromVariations, addMissingMaterialsToVariations\n} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsMaterials';\nimport {\n  PropertyFormatter, PropertyParser,\n  MaterialFormatter, MaterialParser,\n  EquivalentFormatter, EquivalentParser,\n  RowToolsCellRenderer, NoteCellEditor\n} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsCellComponents';\n\nfunction MenuHeader({\n  column, context, setSort, names, entries\n}) {\n  const { field } = column.colDef;\n  const { columnDefinitions, setColumnDefinitions } = context;\n  const [ascendingSort, setAscendingSort] = useState('inactive');\n  const [descendingSort, setDescendingSort] = useState('inactive');\n  const [noSort, setNoSort] = useState('inactive');\n  const [name, setName] = useState(names[0]);\n  const [entry, setEntry] = useState(Object.keys(entries)[0]);\n  const [units, setUnits] = useState(entries[entry]);\n  const [unit, setUnit] = useState(units[0]);\n\n  const onSortChanged = () => {\n    setAscendingSort(column.isSortAscending() ? 'sort_active' : 'inactive');\n    setDescendingSort(column.isSortDescending() ? 'sort_active' : 'inactive');\n    setNoSort(\n      !column.isSortAscending() && !column.isSortDescending()\n        ? 'sort_active'\n        : 'inactive'\n    );\n  };\n\n  useEffect(() => {\n    column.addEventListener('sortChanged', onSortChanged);\n    onSortChanged();\n  }, []);\n\n  const onSortRequested = (order, event) => {\n    setSort(order, event.shiftKey);\n  };\n\n  const onUnitChanged = () => {\n    const newUnit = units[(units.indexOf(unit) + 1) % units.length];\n    const newColumnDefinitions = updateColumnDefinitions(\n      columnDefinitions,\n      field,\n      'currentEntryWithDisplayUnit',\n      { entry, displayUnit: newUnit }\n    );\n\n    setUnit(newUnit);\n    setColumnDefinitions(newColumnDefinitions);\n  };\n\n  const unitSelection = (\n    <Button\n      className=\"unitSelection\"\n      bsStyle=\"success\"\n      bsSize=\"xsmall\"\n      style={{ display: entry === 'equivalent' ? 'none' : 'inline' }}\n      onClick={onUnitChanged}\n    >\n      {unit}\n    </Button>\n  );\n\n  const onEntryChanged = () => {\n    const entryKeys = Object.keys(entries);\n    const newEntry = entryKeys[(entryKeys.indexOf(entry) + 1) % entryKeys.length];\n    const newUnits = entries[newEntry];\n    const newUnit = newUnits[0];\n    let newColumnDefinitions = updateColumnDefinitions(\n      columnDefinitions,\n      field,\n      'cellDataType',\n      getCellDataType(newEntry)\n    );\n    newColumnDefinitions = updateColumnDefinitions(\n      newColumnDefinitions,\n      field,\n      'currentEntryWithDisplayUnit',\n      { entry: newEntry, displayUnit: newUnit }\n    );\n\n    setEntry(newEntry);\n    setUnits(newUnits);\n    setUnit(newUnit);\n    setColumnDefinitions(newColumnDefinitions);\n  };\n\n  const entrySelection = (\n    <Button\n      className=\"entrySelection\"\n      bsStyle=\"default\"\n      bsSize=\"xsmall\"\n      style={{ display: ['temperature', 'duration'].includes(entry) ? 'none' : 'inline' }}\n      disabled={Object.keys(entries).length === 1}\n      onClick={onEntryChanged}\n    >\n      {entry}\n    </Button>\n  );\n\n  const sortMenu = (\n    <div className=\"sortHeader\" style={{ display: 'flex', alignItems: 'center', opacity: 0.5 }}>\n      <div\n        onClick={(event) => onSortRequested('asc', event)}\n        onTouchEnd={(event) => onSortRequested('asc', event)}\n        className={`customSortDownLabel ${ascendingSort}`}\n      >\n        <i className=\"fa fa-chevron-up fa-fw\" />\n      </div>\n      <div\n        onClick={(event) => onSortRequested('desc', event)}\n        onTouchEnd={(event) => onSortRequested('desc', event)}\n        className={`customSortUpLabel ${descendingSort}`}\n      >\n        <i className=\"fa fa-chevron-down fa-fw\" />\n      </div>\n      <div\n        onClick={(event) => onSortRequested('', event)}\n        onTouchEnd={(event) => onSortRequested('', event)}\n        className={`customSortRemoveLabel ${noSort}`}\n      >\n        <i className=\"fa fa-times fa-fw\" />\n      </div>\n    </div>\n  );\n\n  return (\n    <div style={{ display: 'grid' }}>\n      <span\n        className=\"header-title\"\n        onClick={() => setName(names[(names.indexOf(name) + 1) % names.length])}\n      >\n        {name}\n      </span>\n      <div>\n        {entrySelection}\n        {' '}\n        {unitSelection}\n      </div>\n      {sortMenu}\n    </div>\n  );\n}\n\nMenuHeader.propTypes = {\n  column: PropTypes.instanceOf(AgGridReact.column).isRequired,\n  context: PropTypes.instanceOf(AgGridReact.context).isRequired,\n  setSort: PropTypes.func.isRequired,\n  names: PropTypes.arrayOf(PropTypes.string).isRequired,\n  entries: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)).isRequired,\n};\n\nexport default function ReactionVariations({ reaction, onReactionChange }) {\n  const gridRef = useRef(null);\n  const [reactionVariations, _setReactionVariations] = useState(reaction.variations);\n  const [allReactionAnalyses, setAllReactionAnalyses] = useState(getReactionAnalyses(reaction));\n  const [reactionMaterials, setReactionMaterials] = useState(getReactionMaterials(reaction));\n  const [columnDefinitions, setColumnDefinitions] = useState([\n    {\n      headerName: 'Tools',\n      field: null,\n      cellRenderer: RowToolsCellRenderer,\n      lockPosition: 'left',\n      editable: false,\n      sortable: false,\n      minWidth: 140,\n      cellDataType: 'object',\n      headerComponent: null,\n    },\n    {\n      headerName: 'Notes',\n      field: 'notes',\n      sortable: false,\n      cellDataType: 'text',\n      cellEditor: NoteCellEditor,\n      cellEditorPopup: true,\n    },\n    {\n      headerName: 'Analyses',\n      field: 'analyses',\n      tooltipValueGetter: getAnalysesOverlay,\n      tooltipComponent: AnalysisOverlay,\n      cellRenderer: AnalysesCellRenderer,\n      cellEditor: AnalysesCellEditor,\n      cellEditorPopup: true,\n      cellEditorPopupPosition: 'under',\n      cellDataType: 'object',\n      sortable: false,\n    },\n    {\n      headerName: 'Properties',\n      groupId: 'properties',\n      marryChildren: true,\n      children: [\n        {\n          field: 'properties.temperature',\n          cellDataType: getCellDataType('temperature'),\n          currentEntryWithDisplayUnit: {\n            entry: 'temperature',\n            displayUnit: getStandardUnit('temperature')\n          },\n          headerComponent: MenuHeader,\n          headerComponentParams: {\n            names: ['Temperature'],\n            entries: { temperature: temperatureUnits }\n          }\n        },\n        {\n          field: 'properties.duration',\n          cellDataType: getCellDataType('duration'),\n          currentEntryWithDisplayUnit: {\n            entry: 'duration',\n            displayUnit: getStandardUnit('duration')\n          },\n          headerComponent: MenuHeader,\n          headerComponentParams: {\n            names: ['Duration'],\n            entries: { duration: durationUnits }\n          }\n        },\n      ]\n    },\n  ].concat(\n    Object.entries(reactionMaterials).map(([materialType, materials]) => ({\n      headerName: materialTypes[materialType].label,\n      groupId: materialType,\n      marryChildren: true,\n      children: materials.map((material) => getMaterialColumnGroupChild(material, materialType, MenuHeader))\n    }))\n  ));\n\n  const dataTypeDefinitions = useMemo(() => ({\n    property: {\n      extendsDataType: 'object',\n      baseDataType: 'object',\n      valueFormatter: PropertyFormatter,\n      valueParser: PropertyParser,\n    },\n    material: {\n      extendsDataType: 'object',\n      baseDataType: 'object',\n      valueFormatter: MaterialFormatter,\n      valueParser: MaterialParser,\n    },\n    equivalent: {\n      extendsDataType: 'object',\n      baseDataType: 'object',\n      valueFormatter: EquivalentFormatter,\n      valueParser: EquivalentParser,\n    }\n  }), []);\n\n  const defaultColumnDefinitions = useMemo(() => ({\n    editable: true,\n    sortable: true,\n    resizable: false,\n    minWidth: 120,\n    maxWidth: 200,\n    wrapHeaderText: true,\n    autoHeaderHeight: true,\n  }), []);\n\n  const setReactionVariations = (updatedReactionVariations) => {\n    // Set updated state here and in parent component.\n    _setReactionVariations(updatedReactionVariations);\n    reaction.variations = updatedReactionVariations;\n    onReactionChange(reaction);\n  };\n\n  const updatedReactionMaterials = getReactionMaterials(reaction);\n  if (\n    !isEqual(\n      getReactionMaterialsIDs(reactionMaterials),\n      getReactionMaterialsIDs(updatedReactionMaterials)\n    )\n  ) {\n    /*\n    Keep set of materials up-to-date.\n    Materials could have been added or removed in the \"Scheme\" tab.\n    These changes need to be reflected in the variations.\n    */\n    const updatedColumnDefinitions = updateColumnDefinitionsMaterials(\n      columnDefinitions,\n      updatedReactionMaterials,\n      MenuHeader\n    );\n    let updatedReactionVariations = removeObsoleteMaterialsFromVariations(reactionVariations, updatedReactionMaterials);\n    updatedReactionVariations = addMissingMaterialsToVariations(updatedReactionVariations, updatedReactionMaterials);\n\n    setReactionVariations(updatedReactionVariations);\n    setColumnDefinitions(updatedColumnDefinitions);\n    setReactionMaterials(updatedReactionMaterials);\n  }\n\n  const updatedAllReactionAnalyses = getReactionAnalyses(reaction);\n  if (!isEqual(allReactionAnalyses, updatedAllReactionAnalyses)) {\n    /*\n    The \"Variations\" tab holds references to analyses in the \"Analyses\" tab.\n    Users can add, remove, or edit analyses in the \"Analyses\" tab.\n    Every analysis in the \"Analyses\" tab can be assigned to one or more rows in the \"Variations\" tab.\n    Each row in the variations table keeps references to its assigned analyses\n    by tracking the corresponding `analysesIDs`.\n    In the example below, variations row \"A\" keeps a reference to `analysesIDs` \"1\",\n    whereas variations row \"C\" keeps references to \"1\" and \"3\".\n    The set of all `analysesIDs` that are referenced by variations is called `referenceIDs`.\n\n    Figure 1\n    Analyses tab  Variations tab\n    .---.         .---------.\n    | 1 |<--------| A: 1    |\n    |---|     \\   |---------|\n    | 2 |      \\  | B:      |\n    |---|       \\ |---------|\n    | 3 |<-------\\| C: 1, 3 |\n    |---|         `---------`\n    | 4 |\n    `---`\n\n    The table below shows how to keep the state consistent across the \"Analyses\" tab and \"Variations\" tab.\n    \"X\" denotes absence of ID.\n\n    Table 1\n    .-------------- ---------------- -------------------------------------------------.\n    | Analyses tab  | Variations tab | action                                         |\n    | (analysesIDs) | (referenceIDs) |                                                |\n    |-------------- |--------------- |----------------------------------------------- |\n    | ID            | ID             | None                                           |\n    |-------------- |--------------- |----------------------------------------------- |\n    | X             | ID             | Container with ID removed in \"Analyses\" tab.   |\n    |               |                | Remove ID from `referenceIDs`.                 |\n    |-------------- |--------------- |----------------------------------------------- |\n    | ID            | X              | Row that's tracking ID removed in \"Variations\" |\n    |               |                | tab. No action required since \"Analyses\" tab   |\n    |               |                | only displays associations to existing rows.   |\n    `-------------- ---------------- -------------------------------------------------`\n    */\n    const updatedReactionVariations = updateAnalyses(reactionVariations, updatedAllReactionAnalyses);\n    setReactionVariations(updatedReactionVariations);\n    setAllReactionAnalyses(updatedAllReactionAnalyses);\n  }\n\n  const addRow = useCallback(() => {\n    setReactionVariations(\n      [...reactionVariations, createVariationsRow(reaction, reactionVariations)]\n    );\n  }, [reaction, reactionVariations]);\n\n  const copyRow = useCallback((data) => {\n    const copiedRow = copyVariationsRow(data, reactionVariations);\n    setReactionVariations(\n      [...reactionVariations, copiedRow]\n    );\n  }, [reactionVariations]);\n\n  const removeRow = useCallback((data) => {\n    setReactionVariations(reactionVariations.filter((row) => row.id !== data.id));\n  }, [reactionVariations]);\n\n  const updateRow = useCallback(({ data: oldRow, colDef, newValue }) => {\n    const { field } = colDef;\n    const updatedRow = updateVariationsRow(oldRow, field, newValue, reaction.hasPolymers());\n    setReactionVariations(\n      reactionVariations.map((row) => (row.id === oldRow.id ? updatedRow : row))\n    );\n  }, [reactionVariations, reaction]);\n\n  if (reaction.isNew) {\n    return (\n      <Alert bsStyle=\"info\">\n        Save the reaction to enable the variations tab.\n      </Alert>\n    );\n  }\n\n  const fitColumnToContent = (event) => {\n    const { column } = event;\n    gridRef.current.api.autoSizeColumns([column], false);\n  };\n\n  return (\n    <div>\n      <OverlayTrigger\n        placement=\"bottom\"\n        overlay={(\n          <Tooltip>\n            Add row with current data from &quot;Scheme&quot; tab.\n            <br />\n            Changes in &quot;Scheme&quot; tab are not applied to\n            {' '}\n            <i>existing</i>\n            {' '}\n            rows.\n          </Tooltip>\n  )}\n      >\n        {/* Wrapping button in span necessary in order for OverlayTrigger to work */}\n        <span>\n          <Button bsSize=\"xsmall\" bsStyle=\"success\" onClick={addRow}>\n            <i className=\"fa fa-plus\" />\n          </Button>\n        </span>\n      </OverlayTrigger>\n      <div style={{ height: '50vh' }} className=\"ag-theme-alpine\">\n        <AgGridReact\n          ref={gridRef}\n          rowData={reactionVariations}\n          rowDragEntireRow\n          rowDragManaged\n          columnDefs={columnDefinitions}\n          suppressPropertyNamesCheck\n          defaultColDef={defaultColumnDefinitions}\n          dataTypeDefinitions={dataTypeDefinitions}\n          tooltipShowDelay={0}\n          domLayout=\"autoHeight\"\n          popupParent={document.getElementById('reaction-detail-tab') || null}\n          context={{\n            copyRow,\n            removeRow,\n            columnDefinitions,\n            setColumnDefinitions,\n            reactionHasPolymers: reaction.hasPolymers(),\n            reactionShortLabel: reaction.short_label,\n            allReactionAnalyses\n          }}\n          /*\n          IMPORTANT: In conjunction with `onCellEditRequest`,\n          `readOnlyEdit` ensures that all edits of `reaction.variations` go through `updateRow`,\n          rather than the grid mutating `reaction.variations` directly on user edits.\n          I.e., we take explicit control of state manipulation.\n          */\n          readOnlyEdit\n          onCellEditRequest={updateRow}\n          onFirstDataRendered={() => gridRef.current.api.autoSizeAllColumns()}\n          onCellValueChanged={(event) => fitColumnToContent(event)}\n          onColumnHeaderClicked={(event) => fitColumnToContent(event)}\n        />\n      </div>\n    </div>\n  );\n}\n\nReactionVariations.propTypes = {\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n  onReactionChange: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport {\n  Panel, ButtonGroup, Button, OverlayTrigger, Tooltip, Popover\n} from 'react-bootstrap';\nimport { uniq } from 'lodash';\nimport { Citation, literatureContent } from 'src/apps/mydb/elements/details/literature/LiteratureCommon';\nimport { CitationType, CitationTypeMap, CitationTypeEOL } from 'src/apps/mydb/elements/details/literature/CitationType';\n\nconst changeTypeBtn = (litype, updId, fn, typeMap, readOnly = false) => {\n  const cands = Object.keys(typeMap).filter((e) => (e !== litype) && e !== 'uncategorized');\n  const popover = (\n    <Popover id=\"popover-positioned-scrolling-left\" title=\"Move to\">\n      {\n        cands.map((e) => (\n          <Button\n            disabled={readOnly}\n            key={`btn_lit_${updId}`}\n            bsSize=\"xsmall\"\n            onClick={() => fn(updId, e)}\n          >\n            {typeMap[e].short}\n          </Button>\n        ))\n      }\n    </Popover>\n  );\n\n  return (\n    <OverlayTrigger animation placement=\"top\" rootClose trigger=\"click\" overlay={popover}>\n      <Button disabled={readOnly} bsSize=\"sm\"><i className=\"fa fa-pencil\" aria-hidden=\"true\" /></Button>\n    </OverlayTrigger>\n  );\n};\n\nconst buildRow = (title, fnDelete, sortedIds, rows, fnUpdate, typeMap, readOnly = false) => {\n  const unis = uniq(sortedIds);\n  let cnt = 0;\n  let result = unis.map((id) => {\n    const citation = rows.get(id);\n    let { litype } = citation;\n    if (typeof litype === 'undefined' || CitationTypeEOL.includes(litype)) {\n      litype = 'uncategorized';\n    }\n    if (litype !== title) {\n      return null;\n    }\n\n    const content = literatureContent(citation, true);\n    cnt += 1;\n    return (\n      <div key={`row-${id}-${citation.id}`} style={{ display: 'flex', flexWrap: 'wrap', paddingBottom: '5px' }}>\n        <div style={{ flexBasis: '86%', display: 'flex' }}>\n          <OverlayTrigger\n            placement=\"top\"\n            overlay={(\n              <Tooltip id={`add-tip-${id}-${citation.id}`}>\n                added by\n                {citation.user_name}\n              </Tooltip>\n)}\n          >\n            <span style={{ color: '#337ab7' }}>\n              {cnt}\n              .&nbsp;\n            </span>\n          </OverlayTrigger>\n          <Citation literature={citation} />\n        </div>\n        <div style={{ marginLeft: 'auto' }}>\n          <ButtonGroup bsSize=\"small\">\n            <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"assign_button\">copy to clipboard</Tooltip>}>\n              <Button\n                active\n                className=\"clipboardBtn\"\n                data-clipboard-text={content}\n              >\n                <i className=\"fa fa-clipboard\" aria-hidden=\"true\" />\n              </Button>\n            </OverlayTrigger>\n            {changeTypeBtn(litype, id, fnUpdate, typeMap, readOnly)}\n            <Button\n              bsStyle=\"danger\"\n              onClick={() => fnDelete(citation)}\n              disabled={readOnly}\n            >\n              <i className=\"fa fa-trash-o\" aria-hidden=\"true\" />\n            </Button>\n          </ButtonGroup>\n        </div>\n      </div>\n    );\n  });\n  result = result.filter((r) => r);\n  return result;\n};\n\nfunction CitationPanel(props) {\n  const {\n    title, fnDelete, sortedIds, rows, fnUpdate, citationMap, typeMap, readOnly\n  } = props;\n\n  let result = buildRow(title, fnDelete, sortedIds, rows, fnUpdate, typeMap, readOnly);\n\n  if (title === 'uncategorized' && result.length === 0) return null;\n\n  result = (result.length > 0) ? result : <span>(No Data)</span>;\n  return (\n    <Panel id={`_citation_panel_${title}`} defaultExpanded className=\"panel-cite\">\n      <Panel.Heading>\n        <Panel.Title toggle>\n          &bull;&nbsp;\n          {citationMap.def}\n        </Panel.Title>\n      </Panel.Heading>\n      <Panel.Collapse>\n        <Panel.Body>\n          {result}\n        </Panel.Body>\n      </Panel.Collapse>\n    </Panel>\n  );\n}\n\nexport default CitationPanel;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  ListGroup, ListGroupItem, Button, Row, Col, Tooltip\n} from 'react-bootstrap';\nimport uuid from 'uuid';\nimport Immutable from 'immutable';\nimport {\n  Citation, doiValid, sanitizeDoi, groupByCitation, AddButton, LiteratureInput, LiteralType\n} from 'src/apps/mydb/elements/details/literature/LiteratureCommon';\nimport Sample from 'src/models/Sample';\nimport Reaction from 'src/models/Reaction';\nimport ResearchPlan from 'src/models/ResearchPlan';\nimport CellLine from 'src/models/cellLine/CellLine';\nimport Literature from 'src/models/Literature';\nimport LiteraturesFetcher from 'src/fetchers/LiteraturesFetcher';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport CitationPanel from 'src/apps/mydb/elements/details/literature/CitationPanel';\nimport { createCitationTypeMap } from 'src/apps/mydb/elements/details/literature/CitationTools';\n\n// import CitationTable from 'src/apps/mydb/elements/details/reactions/analysesTab/CitationTable';\n\nconst Cite = require('citation-js');\nrequire('@citation-js/plugin-isbn');\n\nconst notification = (message) => ({\n  title: 'Add Literature',\n  message,\n  level: 'error',\n  dismissible: 'button',\n  autoDismiss: 5,\n  position: 'tr',\n  uid: uuid.v4()\n});\n\nconst warningNotification = (message) => ({\n  title: '',\n  message,\n  level: 'warning',\n  dismissible: 'button',\n  autoDismiss: 5,\n  position: 'tr',\n  uid: uuid.v4()\n});\n\nconst clipboardTooltip = () => (\n  <Tooltip id=\"assign_button\">copy to clipboard</Tooltip>\n);\n\nconst sameConseqLiteratureId = (citations, sortedIds, i) => {\n  if (i === 0) { return false; }\n  const a = citations.get(sortedIds[i])\n  const b = citations.get(sortedIds[i-1])\n  return (a.id === b.id)\n};\n\nconst checkElementStatus = (element) => {\n  const type = element.type.split('_').map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');\n  if (element.isNew) {\n    NotificationActions.add(notification(`Create ${type} first.`));\n    return false;\n  }\n  const isPub = !!(element.publication && element.publication.state === 'completed');\n  if (isPub) {\n    NotificationActions.add(notification('Already published. This data can not be changed.'));\n    return false;\n  }\n  return true;\n};\n\nexport default class DetailsTabLiteratures extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      literature: this.createEmptyLiterature(this.props.element.type),\n      literatures: new Immutable.Map(),\n      sortedIds: [],\n    };\n    this.handleInputChange = this.handleInputChange.bind(this);\n    this.handleTypeUpdate = this.handleTypeUpdate.bind(this);\n    this.handleLiteratureAdd = this.handleLiteratureAdd.bind(this);\n    this.handleLiteratureRemove = this.handleLiteratureRemove.bind(this);\n    this.fetchDOIMetadata = this.fetchDOIMetadata.bind(this);\n    this.fetchISBNMetadata = this.fetchISBNMetadata.bind(this);\n    this.fetchMetadata = this.fetchMetadata.bind(this);\n  }\n\n  componentDidMount() {\n    const { literatures, element } = this.props;\n    if (literatures && literatures.size > 0) {\n      const sortedIds = groupByCitation(literatures);\n      this.setState((prevState) => ({\n        ...prevState,\n        literatures,\n        sortedIds,\n        sorting: 'literature_id'\n      }));\n    } else {\n      LiteraturesFetcher.fetchElementReferences(element).then((fetchedLiterature) => {\n        const sortedIds = groupByCitation(fetchedLiterature);\n        this.setState((prevState) => ({\n          ...prevState,\n          literatures: fetchedLiterature,\n          sortedIds,\n          sorting: 'literature_id'\n        }));\n      });\n    }\n  }\n\n  createEmptyLiterature(elementType) {\n    const literature = Literature.buildEmpty();\n    literature.litype = Object.keys(createCitationTypeMap(elementType))[0];\n    return literature;\n  }\n\n  handleInputChange(type, event) {\n    const { literature } = this.state;\n    const { value } = event.target;\n    literature[type] = value;\n    this.setState((prevState) => ({ ...prevState, literature }));\n  }\n\n  handleTypeUpdate(updId, rType) {\n    const { element } = this.props;\n    if (!checkElementStatus(element)) { return; }\n    LoadingActions.start();\n    const params = {\n      element_id: element.id, element_type: element.type, id: updId, litype: rType\n    };\n    LiteraturesFetcher.updateReferenceType(params)\n      .then((literatures) => {\n        this.setState(\n          {\n            literatures,\n            sortedIds: groupByCitation(literatures),\n            sorting: 'literature_id'\n          },\n          LoadingActions.stop()\n        );\n      });\n  }\n\n  handleLiteratureRemove(literature) {\n    const { element } = this.props;\n    if (!checkElementStatus(element)) { return; }\n    if (Number.isNaN(element.id) && element.type === 'reaction') {\n      this.setState((prevState) => ({\n        ...prevState,\n        literatures: prevState.literatures.delete(literature.literal_id),\n        sortedIds: groupByCitation(prevState.literatures.delete(literature.literal_id))\n      }));\n      if (element.type === 'reaction') {\n        element.literatures = element.literatures && element.literatures.delete(literature.literal_id);\n        this.setState({\n          reaction: element\n        });\n      }\n    } else {\n      LiteraturesFetcher.deleteElementReference({ element, literature })\n        .then(() => {\n          this.setState((prevState) => ({\n            ...prevState,\n            literatures: prevState.literatures.delete(literature.literal_id),\n            sortedIds: groupByCitation(prevState.literatures.delete(literature.literal_id))\n          }));\n        })\n        .then(() => { NotificationActions.add(warningNotification('Literature entry successfully removed')); })\n        .catch((errorMessage) => {\n          NotificationActions.add(notification(errorMessage.error));\n        });\n    }\n  }\n\n  handleLiteratureAdd(literature) {\n    const { element } = this.props;\n    if (!checkElementStatus(element)) { return; }\n    const {\n      doi, url, title, isbn\n    } = literature;\n    if (element.isNew === true && element.type === 'reaction'\n      && element.literatures && element.literatures.size > 0) {\n      const newlit = {\n        ...literature,\n        doi: sanitizeDoi(doi),\n        url: url.trim().replace(/ +/g, ' '),\n        title: title.trim().replace(/ +/g, ' '),\n        isbn: isbn.trim()\n      };\n      const objliterature = new Literature(newlit);\n      element.literatures = element.literatures.set(objliterature.id, objliterature);\n      this.setState((prevState) => ({\n        ...prevState,\n        literature: Literature.buildEmpty(),\n        literatures: prevState.literatures.set(objliterature.id, objliterature),\n        sortedIds: groupByCitation(prevState.literatures.set(objliterature.id, objliterature))\n      }));\n    } else {\n      LiteraturesFetcher.postElementReference({\n        element,\n        literature: {\n          ...literature,\n          doi: sanitizeDoi(doi),\n          url: url.trim().replace(/ +/g, ' '),\n          title: title.trim().replace(/ +/g, ' '),\n          isbn: isbn.trim()\n        },\n      }).then((literatures) => {\n        this.setState(() => ({\n          literature: this.createEmptyLiterature(this.props.element.type),\n          literatures,\n          sortedIds: groupByCitation(literatures),\n          sorting: 'literature_id'\n        }));\n      }).catch((errorMessage) => {\n        NotificationActions.add(notification(errorMessage.error));\n        this.setState({ literature: this.createEmptyLiterature(this.props.element.type) });\n      });\n    }\n  }\n\n  fetchMetadata() {\n    const { element } = this.props;\n    const { literature } = this.state;\n    if (!checkElementStatus(element)) { return; }\n\n    if (doiValid(literature.doi_isbn)) {\n      this.fetchDOIMetadata(literature.doi_isbn);\n    } else {\n      this.fetchISBNMetadata(literature.doi_isbn);\n    }\n  }\n\n  fetchDOIMetadata(doi) {\n    NotificationActions.removeByUid('literature');\n    LoadingActions.start();\n    Cite.async(sanitizeDoi(doi)).then((json) => {\n      if (json.data && json.data.length > 0) {\n        const data = json.data[0];\n        const citation = new Cite(data);\n        // this.setState((prevState) => ({\n        //   ...prevState,\n        //   literature: new Literature({\n        //     ...prevState.literature,\n        //     doi,\n        //     title: data.title || '',\n        //     year: (data && data.issued && data.issued['date-parts'][0]) || '',\n        //     refs: { citation, bibtex: citation.format('bibtex'), bibliography: json.format('bibliography') }\n        //   })\n        // }));\n        const { literature } = this.state;\n        const newLiterature = new Literature({\n          ...literature,\n          doi,\n          title: data.title || '',\n          year: (data && data.issued && data.issued['date-parts'][0]) || '',\n          refs: { citation, bibtex: citation.format('bibtex'), bibliography: json.format('bibliography') }\n        });\n        this.handleLiteratureAdd(newLiterature);\n      }\n    }).catch((errorMessage) => {\n      NotificationActions.add(notification(`unable to fetch metadata for this doi: ${doi}, error: ${errorMessage}`));\n    }).finally(() => {\n      LoadingActions.stop();\n    });\n  }\n\n  fetchISBNMetadata(isbn) {\n    NotificationActions.removeByUid('literature');\n    LoadingActions.start();\n    Cite.async(isbn).then((json) => {\n      if (json.data && json.data.length > 0) {\n        const data = json.data[0];\n        this.setState((prevState) => ({\n          ...prevState,\n          literature: {\n            ...prevState.literature,\n            isbn,\n            title: data.title || '',\n            year: (data && data.issued && data.issued['date-parts'][0]) || '',\n            url: (data && data.URL) || '',\n            refs: { citation: json, bibtex: json.format('bibtex'), bibliography: json.format('bibliography') }\n          }\n        }));\n        const { literature } = this.state;\n        this.handleLiteratureAdd(literature);\n      }\n    }).catch((errorMessage) => {\n      NotificationActions.add(notification(`unable to fetch metadata for this ISBN: ${isbn}, error: ${errorMessage}`));\n    }).finally(() => {\n      LoadingActions.stop();\n    });\n  }\n\n  render() {\n    const { literature, literatures, sortedIds } = this.state;\n    const { currentUser } = UserStore.getState();\n    const isInvalidDoi = !(doiValid(literature.doi_isbn || ''));\n    const isInvalidIsbn = !(/^[0-9]([0-9]|-(?!-))+$/.test(literature.doi_isbn || ''));\n    const { readOnly } = this.props;\n    const citationTypeMap = createCitationTypeMap(this.props.element.type);\n    return (\n      <ListGroup fill=\"true\">\n        <ListGroupItem style={{ border: 'unset' }}>\n          <Row>\n            <Col md={8} style={{ paddingRight: 0 }}>\n              <LiteratureInput\n                handleInputChange={this.handleInputChange}\n                literature={literature}\n                field=\"doi_isbn\"\n                readOnly={readOnly}\n                placeholder=\"DOI: 10.... or  http://dx.doi.org/10... or 10. ... or ISBN: 978 ...\"\n              />\n            </Col>\n            <Col md={3} style={{ paddingRight: 0 }}>\n              <LiteralType\n                handleInputChange={this.handleInputChange}\n                disabled={readOnly}\n                val={literature.litype}\n                citationMap={citationTypeMap}\n              />\n            </Col>\n            <Col md={1} style={{ paddingRight: 0 }}>\n              <Button\n                bsStyle=\"success\"\n                bsSize=\"small\"\n                style={{ marginTop: 2 }}\n                onClick={this.fetchMetadata}\n                title=\"fetch metadata for this doi or ISBN(open services) and add citation to selection\"\n                disabled={(isInvalidDoi && isInvalidIsbn) || readOnly}\n              >\n                <i className=\"fa fa-plus\" aria-hidden=\"true\" />\n              </Button>\n            </Col>\n            <Col md={12} style={{ paddingRight: 0 }}>\n              <Citation literature={literature} />\n            </Col>\n            <Col md={7} style={{ paddingRight: 0 }}>\n              <LiteratureInput\n                handleInputChange={this.handleInputChange}\n                literature={literature}\n                field=\"title\"\n                readOnly={readOnly}\n                placeholder=\"Title...\"\n              />\n            </Col>\n            <Col md={4} style={{ paddingRight: 0 }}>\n              <LiteratureInput\n                handleInputChange={this.handleInputChange}\n                literature={literature}\n                field=\"url\"\n                readOnly={readOnly}\n                placeholder=\"URL...\"\n              />\n            </Col>\n            <Col md={1}>\n              <AddButton\n                readOnly={readOnly}\n                onLiteratureAdd={this.handleLiteratureAdd}\n                literature={literature}\n              />\n            </Col>\n          </Row>\n        </ListGroupItem>\n        <ListGroupItem style={{ border: 'unset' }}>\n          {\n            Object.keys(citationTypeMap)\n              .map((e) => (\n                <CitationPanel\n                  key={`_citation_panel_${e}`}\n                  title={e}\n                  fnDelete={this.handleLiteratureRemove}\n                  sortedIds={sortedIds}\n                  rows={literatures}\n                  readOnly={readOnly}\n                  uid={currentUser && currentUser.id}\n                  fnUpdate={this.handleTypeUpdate}\n                  citationMap={citationTypeMap[e]}\n                  typeMap={citationTypeMap}\n                />\n              ))\n          }\n        </ListGroupItem>\n      </ListGroup>\n    );\n  }\n}\n\nDetailsTabLiteratures.propTypes = {\n  element: PropTypes.oneOfType([\n    PropTypes.instanceOf(ResearchPlan),\n    PropTypes.instanceOf(Reaction),\n    PropTypes.instanceOf(CellLine),\n    PropTypes.instanceOf(Sample)\n  ]).isRequired,\n  literatures: PropTypes.array,\n  readOnly: PropTypes.bool\n};\n\nDetailsTabLiteratures.defaultProps = {\n  readOnly: false,\n  literatures: []\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Tooltip, Button, OverlayTrigger, SplitButton, ButtonGroup, MenuItem\n} from 'react-bootstrap';\n\nexport default function SpectraEditorButton({\n  element, spcInfos, hasJcamp, hasChemSpectra,\n  toggleSpectraModal, confirmRegenerate, confirmRegenerateEdited,\n  hasEditedJcamp, toggleNMRDisplayerModal, hasNMRium\n}) {\n  return (\n    <span>\n      <OverlayTrigger\n        placement=\"bottom\"\n        delayShow={500}\n        overlay={(\n          <Tooltip id=\"spectra\">\n            Spectra Editor\n            {spcInfos.length > 0 ? '' : ': Reprocess'}\n          </Tooltip>\n)}\n      >\n        {spcInfos.length > 0 ? (\n          <ButtonGroup className=\"button-right\">\n            <SplitButton\n              id=\"spectra-editor-split-button\"\n              pullRight\n              bsStyle=\"info\"\n              bsSize=\"xsmall\"\n              title={<i className=\"fa fa-area-chart\" />}\n              onToggle={(_, event) => { if (event) { event.stopPropagation(); } }}\n              onClick={toggleSpectraModal}\n              disabled={!(spcInfos.length > 0) || !hasChemSpectra}\n            >\n              <MenuItem\n                id=\"regenerate-spectra\"\n                key=\"regenerate-spectra\"\n                onSelect={(_, event) => {\n                  event.stopPropagation();\n                  confirmRegenerate(event);\n                }}\n                disabled={!hasJcamp || !element.can_update}\n              >\n                <i className=\"fa fa-refresh\" />\n                {' '}\n                Reprocess\n              </MenuItem>\n              {\n            hasEditedJcamp\n              ? (\n                <MenuItem\n                  id=\"regenerate-edited-spectra\"\n                  key=\"regenerate-edited-spectra\"\n                  onSelect={(_, event) => {\n                    event.stopPropagation();\n                    confirmRegenerateEdited(event);\n                  }}\n                >\n                  <i className=\"fa fa-refresh\" />\n                  {' '}\n                  Regenerate .edit.jdx files\n                </MenuItem>\n              ) : <span />\n          }\n            </SplitButton>\n          </ButtonGroup>\n        ) : (\n          <Button\n            bsStyle=\"warning\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={confirmRegenerate}\n            disabled={!hasJcamp || !element.can_update || !hasChemSpectra}\n          >\n            <i className=\"fa fa-area-chart\" />\n            <i className=\"fa fa-refresh \" />\n          </Button>\n        )}\n      </OverlayTrigger>\n\n      {\n          hasNMRium ? (\n            <OverlayTrigger\n              placement=\"top\"\n              delayShow={500}\n              overlay={<Tooltip id=\"spectra_nmrium_wrapper\">Process with NMRium</Tooltip>}\n            >\n              <ButtonGroup className=\"button-right\">\n                <Button\n                  id=\"spectra-editor-split-button\"\n                  pullRight\n                  bsStyle=\"info\"\n                  bsSize=\"xsmall\"\n                  onToggle={(_, event) => { if (event) { event.stopPropagation(); } }}\n                  onClick={toggleNMRDisplayerModal}\n                  disabled={!hasJcamp && !(spcInfos.length > 0)}\n                >\n                  <i className=\"fa fa-bar-chart\" />\n                </Button>\n              </ButtonGroup>\n            </OverlayTrigger>\n          ) : null\n      }\n    </span>\n  );\n}\n\nSpectraEditorButton.propTypes = {\n  element: PropTypes.object,\n  hasJcamp: PropTypes.bool,\n  spcInfos: PropTypes.array,\n  hasChemSpectra: PropTypes.bool,\n  toggleSpectraModal: PropTypes.func.isRequired,\n  confirmRegenerate: PropTypes.func.isRequired,\n  confirmRegenerateEdited: PropTypes.func.isRequired,\n  hasEditedJcamp: PropTypes.bool,\n  toggleNMRDisplayerModal: PropTypes.func.isRequired,\n  hasNMRium: PropTypes.bool,\n};\n\nSpectraEditorButton.defaultProps = {\n  hasJcamp: false,\n  spcInfos: [],\n  element: {},\n  hasChemSpectra: false,\n  hasEditedJcamp: false,\n  hasNMRium: false,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  PanelGroup,\n  Panel,\n  Button,\n} from 'react-bootstrap';\nimport Container from 'src/models/Container';\nimport ContainerComponent from 'src/components/container/ContainerComponent';\nimport PrintCodeButton from 'src/components/common/PrintCodeButton';\nimport QuillViewer from 'src/components/QuillViewer';\nimport ImageModal from 'src/components/common/ImageModal';\nimport { hNmrCount, cNmrCount, instrumentText } from 'src/utilities/ElementUtils';\nimport { contentToText } from 'src/utilities/quillFormat';\nimport { chmoConversions } from 'src/components/OlsComponent';\nimport { previewContainerImage } from 'src/utilities/imageHelper';\nimport { JcampIds, BuildSpcInfos, BuildSpcInfosForNMRDisplayer, isNMRKind } from 'src/utilities/SpectraHelper';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport SpectraActions from 'src/stores/alt/actions/SpectraActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ViewSpectra from 'src/apps/mydb/elements/details/ViewSpectra';\nimport NMRiumDisplayer from 'src/components/nmriumWrapper/NMRiumDisplayer';\nimport TextTemplateActions from 'src/stores/alt/actions/TextTemplateActions';\nimport SpectraEditorButton from 'src/components/common/SpectraEditorButton';\nimport { AnalysisVariationLink } from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsAnalyses';\n\nconst nmrMsg = (reaction, container) => {\n  const ols = container.extended_metadata?.kind?.split('|')[0].trim();\n  if (ols !== chmoConversions.nmr_1h?.termId && ols !== chmoConversions?.nmr_13c?.termId) {\n    return '';\n  }\n  const nmrStr = container.extended_metadata && contentToText(container.extended_metadata.content);\n\n  if ((container.extended_metadata.kind || '').split('|')[0].trim() === chmoConversions.nmr_1h.termId) {\n    const msg = hNmrCount(nmrStr);\n    return (<div style={{ display: 'inline', color: 'black' }}>&nbsp;(<sup>1</sup>H: {msg})</div>);\n  } else if ((container.extended_metadata.kind || '').split('|')[0].trim() === chmoConversions.nmr_13c.termId) {\n    const msg = cNmrCount(nmrStr);\n    return (<div style={{ display: 'inline', color: 'black' }}>&nbsp;(<sup>13</sup>C: {msg})</div>);\n  }\n};\n\nexport default class ReactionDetailsContainers extends Component {\n  constructor(props) {\n    super();\n    const { reaction } = props;\n    this.state = {\n      reaction,\n      activeContainer: UIStore.getState().reaction.activeAnalysis\n    };\n    this.containerRefs = {};\n\n    this.handleChange = this.handleChange.bind(this);\n    this.handleAdd = this.handleAdd.bind(this);\n    this.handleRemove = this.handleRemove.bind(this);\n    this.handleUndo = this.handleUndo.bind(this);\n    this.handleOnClickRemove = this.handleOnClickRemove.bind(this);\n    this.handleAccordionOpen = this.handleAccordionOpen.bind(this);\n    this.handleSpChange = this.handleSpChange.bind(this);\n    this.onUIStoreChange = this.onUIStoreChange.bind(this);\n  }\n\n  componentDidMount() {\n    const { activeContainer } = this.state;\n    UIStore.listen(this.onUIStoreChange);\n    TextTemplateActions.fetchTextTemplates('reaction');\n    if (this.containerRefs[activeContainer]) {\n      this.containerRefs[activeContainer].scrollIntoView({ behavior: 'instant', block: 'start' });\n    }\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onUIStoreChange);\n  }\n\n  onUIStoreChange(state) {\n    const { activeContainer } = this.state;\n    if (state.reaction.activeContainer !== activeContainer) {\n      this.setState({\n        activeContainer: state.reaction.activeContainer\n      });\n    }\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    this.setState({\n      reaction: nextProps.reaction,\n    });\n  }\n\n  handleChange(container) {\n    const { reaction } = this.state;\n\n    this.props.parent.handleReactionChange(reaction);\n  }\n\n  handleSpChange(reaction, cb) {\n    this.props.parent.handleReactionChange(reaction);\n    cb();\n  }\n\n  handleUndo(container) {\n    const { reaction } = this.state;\n    container.is_deleted = false;\n    this.props.parent.handleReactionChange(reaction, { schemaChanged: false });\n  }\n\n  handleAdd() {\n    const { reaction } = this.state;\n    const container = Container.buildEmpty();\n    container.container_type = 'analysis';\n    container.extended_metadata.content = { ops: [{ insert: '' }] };\n\n    if (reaction.container.children.length === 0) {\n      const analyses = Container.buildEmpty();\n      analyses.container_type = 'analyses';\n      reaction.container.children.push(analyses);\n    }\n\n    reaction.container.children.filter(element => (\n      ~element.container_type.indexOf('analyses')\n    ))[0].children.push(container);\n\n    const newKey = reaction.container.children.filter(element => (\n      ~element.container_type.indexOf('analyses')\n    ))[0].children.length - 1;\n\n    this.handleAccordionOpen(newKey);\n    this.props.parent.handleReactionChange(reaction, { schemaChanged: false });\n  }\n\n  handleOnClickRemove(container) {\n    if (confirm('Delete the container?')) {\n      this.handleRemove(container);\n    }\n  }\n\n  headerBtnGroup(container, reaction, readOnly) {\n    const jcampIds = JcampIds(container);\n    const hasJcamp = jcampIds.orig.length > 0;\n    const confirmRegenerate = (e) => {\n      e.stopPropagation();\n      if (confirm('Regenerate spectra?')) {\n        LoadingActions.start();\n        SpectraActions.Regenerate(jcampIds, this.handleChange);\n      }\n    };\n\n    const spcInfos = BuildSpcInfos(reaction, container);\n    const { hasChemSpectra, hasNmriumWrapper } = UIStore.getState();\n    const toggleSpectraModal = (e) => {\n      e.stopPropagation();\n      SpectraActions.ToggleModal();\n      SpectraActions.LoadSpectra.defer(spcInfos);\n    };\n\n    //process open NMRium\n    const toggleNMRDisplayerModal = (e) => {\n      const spcInfosForNMRDisplayer = BuildSpcInfosForNMRDisplayer(reaction, container);\n      e.stopPropagation();\n      SpectraActions.ToggleModalNMRDisplayer();\n      SpectraActions.LoadSpectraForNMRDisplayer.defer(spcInfosForNMRDisplayer); // going to fetch files base on spcInfos\n    }\n\n    const { chmos } = UserStore.getState();\n    const hasNMRium = isNMRKind(container, chmos) && hasNmriumWrapper;\n\n    return (\n      <div className=\"upper-btn\">\n        <Button\n          bsSize=\"xsmall\"\n          bsStyle=\"danger\"\n          className=\"button-right\"\n          disabled={readOnly}\n          onClick={() => this.handleOnClickRemove(container)}\n        >\n          <i className=\"fa fa-trash\" />\n        </Button>\n        <PrintCodeButton element={reaction} analyses={[container]} ident={container.id} />\n        <SpectraEditorButton\n          element={reaction}\n          hasJcamp={hasJcamp}\n          spcInfos={spcInfos}\n          hasChemSpectra={hasChemSpectra}\n          toggleSpectraModal={toggleSpectraModal}\n          confirmRegenerate={confirmRegenerate}\n          toggleNMRDisplayerModal={toggleNMRDisplayerModal}\n          hasNMRium={hasNMRium}\n        />\n        <AnalysisVariationLink\n          reaction={reaction}\n          analysisID={container.id}\n        />\n      </div>\n    );\n  };\n\n\n  handleRemove(container) {\n    const { reaction } = this.state;\n\n    container.is_deleted = true;\n    this.props.parent.handleReactionChange(reaction, { schemaChanged: false });\n  }\n\n  handleAccordionOpen(key) {\n    this.setState({ activeContainer: key });\n  }\n\n  addButton() {\n    const { readOnly } = this.props;\n    if (!readOnly) {\n      return (\n        <Button\n          className=\"button-right\"\n          bsSize=\"xsmall\"\n          bsStyle=\"success\"\n          onClick={this.handleAdd}\n        >\n          Add analysis\n        </Button>\n      );\n    }\n\n    return (<span />);\n  }\n\n  render() {\n    const { reaction, activeContainer } = this.state;\n    const { readOnly } = this.props;\n\n    const containerHeader = (container) => {\n      let kind = container.extended_metadata.kind || '';\n      kind = (kind.split('|')[1] || kind).trim();\n      const insText = instrumentText(container);\n      const previewImg = previewContainerImage(container);\n      const status = container.extended_metadata.status || '';\n      const content = container.extended_metadata.content || { ops: [{ insert: '' }] };\n      const contentOneLine = {\n        ops: content.ops.map((x) => {\n          const c = Object.assign({}, x);\n          if (c.insert) c.insert = c.insert.replace(/\\n/g, ' ');\n          return c;\n        }),\n      };\n      let hasPop = true;\n      let fetchNeeded = false;\n      let fetchId = 0;\n      if (previewImg.startsWith('data:image')) {\n        fetchNeeded = true;\n        fetchId = container.preview_img.id;\n      } else {\n        hasPop = false;\n      }\n\n      return (\n        <div className=\"analysis-header order\" style={{ width: '100%' }}>\n          <div className=\"preview\">\n            <ImageModal\n              hasPop={hasPop}\n              previewObject={{\n                src: previewImg\n              }}\n              popObject={{\n                title: container.name,\n                src: previewImg,\n                fetchNeeded,\n                fetchId\n              }}\n            />\n          </div>\n          <div className=\"abstract\">\n            {\n              this.headerBtnGroup(container, reaction, readOnly)\n            }\n            <div className=\"lower-text\">\n              <div className=\"main-title\">{container.name}</div>\n              <div className=\"sub-title\">Type: {kind}</div>\n              <div className=\"sub-title\">Status: {status} {nmrMsg(reaction, container)} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {insText}</div>\n              <div className=\"desc sub-title\">\n                <span style={{ float: 'left', marginRight: '5px' }}>\n                  Content:\n                </span>\n                <QuillViewer value={contentOneLine} />\n              </div>\n\n            </div>\n          </div>\n        </div>\n      )\n    };\n\n    const containerHeaderDeleted = (container) => {\n      const kind = container.extended_metadata.kind && container.extended_metadata.kind !== '';\n      const titleKind = kind ? (` - Type: ${(container.extended_metadata.kind.split('|')[1] || container.extended_metadata.kind).trim()}`) : '';\n\n      const status = container.extended_metadata.status && container.extended_metadata.status != '';\n      const titleStatus = status ? (' - Status: ' + container.extended_metadata.status) : '';\n\n      return (\n        <div style={{ width: '100%' }}>\n          <strike>\n            {container.name}\n            {titleKind}\n            {titleStatus}\n          </strike>\n          <Button className=\"pull-right\" bsSize=\"xsmall\" bsStyle=\"danger\"\n            onClick={() => this.handleUndo(container)}>\n            <i className=\"fa fa-undo\"></i>\n          </Button>\n        </div>\n      )\n    };\n\n    if (reaction.container != null && reaction.container.children) {\n      const analyses_container = reaction.container.children.filter(element => (\n        ~element.container_type.indexOf('analyses')\n      ));\n\n      if (analyses_container.length === 1 && analyses_container[0].children.length > 0) {\n        return (\n          <div>\n            <div style={{ marginBottom: '10px' }}>\n              &nbsp;{this.addButton()}\n            </div>\n            <PanelGroup id=\"reaction-analyses-panel\" defaultActiveKey={0} activeKey={activeContainer} onSelect={this.handleAccordionOpen} accordion>\n              {analyses_container[0].children.map((container, key) => {\n                if (container.is_deleted) {\n                  return (\n                    <Panel\n                      eventKey={key}\n                      key={`reaction_container_deleted_${container.id}`}\n                    >\n                      <Panel.Heading>{containerHeaderDeleted(container)}</Panel.Heading>\n                    </Panel>\n                  );\n                }\n\n                return (\n                  <div\n                    ref={(element) => { this.containerRefs[key] = element; }}\n                    key={`reaction_container_${container.id}`}\n                  >\n                    <Panel eventKey={key}>\n                      <Panel.Heading>\n                        <Panel.Title toggle>\n                          {containerHeader(container)}\n                        </Panel.Title>\n                      </Panel.Heading>\n                      <Panel.Body collapsible=\"true\">\n                        <ContainerComponent\n                          disabled={readOnly}\n                          readOnly={readOnly}\n                          templateType=\"reaction\"\n                          container={container}\n                          onChange={this.handleChange.bind(this, container)}\n                        />\n                        <ViewSpectra\n                          sample={reaction}\n                          handleSampleChanged={this.handleSpChange}\n                          handleSubmit={this.props.handleSubmit}\n                        />\n                        <NMRiumDisplayer\n                          sample={reaction}\n                          handleSampleChanged={this.handleSpChange}\n                          handleSubmit={this.props.handleSubmit}\n                        />\n                      </Panel.Body>\n                    </Panel>\n                  </div>\n                );\n              })}\n            </PanelGroup>\n          </div>\n        );\n      }\n\n      return (\n        <div\n          style={{ marginBottom: '10px' }}\n          className=\"noAnalyses-warning\"\n        >\n          There are currently no Analyses.\n          {this.addButton()}\n        </div>\n      );\n    }\n\n    return (\n      <div className=\"noAnalyses-warning\">\n        There are currently no Analyses.\n      </div>\n    );\n  }\n}\n\nReactionDetailsContainers.propTypes = {\n  readOnly: PropTypes.bool,\n  parent: PropTypes.object,\n  handleSubmit: PropTypes.func\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Checkbox, OverlayTrigger, Tooltip, ButtonGroup, SplitButton, MenuItem } from 'react-bootstrap';\nimport QuillViewer from 'src/components/QuillViewer';\nimport PrintCodeButton from 'src/components/common/PrintCodeButton';\nimport { stopBubble } from 'src/utilities/DomHelper';\nimport ImageModal from 'src/components/common/ImageModal';\nimport SpectraActions from 'src/stores/alt/actions/SpectraActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport { BuildSpcInfos, JcampIds, BuildSpcInfosForNMRDisplayer, isNMRKind } from 'src/utilities/SpectraHelper';\nimport { hNmrCheckMsg, cNmrCheckMsg, msCheckMsg, instrumentText } from 'src/utilities/ElementUtils';\nimport { contentToText } from 'src/utilities/quillFormat';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport { chmoConversions } from 'src/components/OlsComponent';\nimport { previewContainerImage } from 'src/utilities/imageHelper';\nimport MolViewerListBtn from 'src/components/viewer/MolViewerListBtn';\nimport MolViewerSet from 'src/components/viewer/MolViewerSet';\nimport { isNmrPass, isDatasetPass } from 'src/repoHome/RepoCommon';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport SpectraEditorButton from 'src/components/common/SpectraEditorButton';\n\nconst qCheckPass = () => (\n  <div style={{ display: 'inline', color: 'green' }}>\n    &nbsp;\n    <i className=\"fa fa-check\" />\n  </div>\n);\n\nconst qCheckFail = (msg, kind, atomNum = '') => (\n  <div style={{ display: 'inline', color: 'red' }}>\n    &nbsp;\n    (<sup>{atomNum}</sup>{kind} {msg})\n  </div>\n);\n\nconst qCheckMsg = (sample, container) => {\n  if (sample.can_publish === false && sample.can_update === false) { return ''; }\n  if (sample.molecule && container.extended_metadata &&\n    ((typeof container.extended_metadata.kind === 'undefined' || container.extended_metadata.kind == null ||\n      container.extended_metadata.kind.split('|').length < 2) ||\n      (container.extended_metadata.kind.split('|')[0].trim() !== chmoConversions.nmr_1h.termId\n        && container.extended_metadata.kind.split('|')[0].trim() !== chmoConversions.nmr_13c.termId\n        && !container.extended_metadata.kind.split('|')[1].includes('mass spectrometry'))\n    )) {\n    return '';\n  }\n  const str = container.extended_metadata && contentToText(container.extended_metadata.content);\n\n  if (container.extended_metadata.kind.split('|')[0].trim() === chmoConversions.nmr_1h.termId) {\n    const msg = hNmrCheckMsg(sample.molecule_formula, str);\n    return msg === '' ? qCheckPass() : qCheckFail(msg, 'H', '1');\n  } else if (container.extended_metadata.kind.split('|')[0].trim() === chmoConversions.nmr_13c.termId) {\n    const msg = cNmrCheckMsg(sample.molecule_formula, str);\n    return msg === '' ? qCheckPass() : qCheckFail(msg, 'C', '13');\n  } else if (container.extended_metadata.kind.split('|')[1].includes('mass spectrometry')) {\n    const msg = msCheckMsg(sample.molecule.exact_molecular_weight, str);\n    return msg === '' ? qCheckPass() : qCheckFail(msg, 'MS', '');\n  }\n  return '';\n};\n\nconst SpectraEditorBtn = ({\n  sample, spcInfos, hasJcamp, hasChemSpectra,\n  toggleSpectraModal, confirmRegenerate, confirmRegenerateEdited, hasEditedJcamp,\n  toggleNMRDisplayerModal, hasNMRium, isReviewer\n}) => (\n  <span>\n    <OverlayTrigger\n    placement=\"bottom\"\n    delayShow={500}\n    overlay={<Tooltip id=\"spectra\">Spectra Editor {spcInfos.length > 0 ? '' : ': Reprocess'}</Tooltip>}\n  >{spcInfos.length > 0 ? (\n    <ButtonGroup className=\"button-right\">\n      <SplitButton\n        id=\"spectra-editor-split-button\"\n        pullRight\n        bsStyle=\"info\"\n        bsSize=\"xsmall\"\n        title={<i className=\"fa fa-area-chart\" />}\n        onToggle={(open, event) => { if (event) { event.stopPropagation(); } }}\n        onClick={toggleSpectraModal}\n        disabled={!(spcInfos.length > 0) || !hasChemSpectra}\n      >\n        <MenuItem\n          id=\"regenerate-spectra\"\n          key=\"regenerate-spectra\"\n          onSelect={(eventKey, event) => {\n            event.stopPropagation();\n            confirmRegenerate(event);\n          }}\n          disabled={!hasJcamp || !sample.can_update}\n        >\n          <i className=\"fa fa-refresh\" /> Reprocess\n        </MenuItem>\n        {\n          hasEditedJcamp && isReviewer ?\n            (<MenuItem\n              id=\"regenerate-edited-spectra\"\n              key=\"regenerate-edited-spectra\"\n              onSelect={(eventKey, event) => {\n                event.stopPropagation();\n                confirmRegenerateEdited(event);\n              }}\n            >\n              <i className=\"fa fa-refresh\" /> Regenerate .edit.jdx files\n            </MenuItem>) : <span></span>\n        }\n      </SplitButton>\n    </ButtonGroup>\n  ) : (\n    <Button\n      bsStyle=\"warning\"\n      bsSize=\"xsmall\"\n      className=\"button-right\"\n      onClick={confirmRegenerate}\n      disabled={!hasJcamp || !sample.can_update || !hasChemSpectra}\n    >\n      <i className=\"fa fa-area-chart\" /><i className=\"fa fa-refresh \" />\n    </Button>\n  )}\n  </OverlayTrigger>\n\n  {\n        hasNMRium ? (\n            <OverlayTrigger\n            placement=\"top\"\n            delayShow={500}\n            overlay={<Tooltip id=\"spectra_nmrium_wrapper\">Process with NMRium</Tooltip>}\n            >\n                <ButtonGroup className=\"button-right\">\n                    <Button\n                    id=\"spectra-editor-split-button\"\n                    pullRight\n                    bsStyle=\"info\"\n                    bsSize=\"xsmall\"\n                    onToggle={(open, event) => { if (event) { event.stopPropagation(); } }}\n                    onClick={toggleNMRDisplayerModal}\n                    disabled={!hasJcamp || !sample.can_update}\n                    >\n                    <i className=\"fa fa-bar-chart\"/>\n                    </Button>\n                </ButtonGroup>\n            </OverlayTrigger>\n        ) : null\n    }\n  </span>\n);\n\nSpectraEditorBtn.propTypes = {\n  sample: PropTypes.object,\n  hasJcamp: PropTypes.bool,\n  spcInfos: PropTypes.array,\n  hasChemSpectra: PropTypes.bool,\n  toggleSpectraModal: PropTypes.func.isRequired,\n  confirmRegenerate: PropTypes.func.isRequired,\n  confirmRegenerateEdited: PropTypes.func.isRequired,\n  hasEditedJcamp: PropTypes.bool,\n  toggleNMRDisplayerModal: PropTypes.func.isRequired,\n  hasNMRium: PropTypes.bool,\n};\n\nSpectraEditorBtn.defaultProps = {\n  hasJcamp: false,\n  spcInfos: [],\n  sample: {},\n  hasChemSpectra: false,\n  hasEditedJcamp: false,\n  hasNMRium: false,\n};\n\nconst editModeBtn = (toggleMode, isDisabled) => (\n  <Button\n    bsSize=\"xsmall\"\n    bsStyle=\"primary\"\n    onClick={toggleMode}\n    disabled={isDisabled}\n  >\n    <span>\n      <i className=\"fa fa-edit\" />&nbsp;\n      Edit mode\n    </span>\n  </Button>\n);\n\nconst orderModeBtn = (toggleMode, isDisabled) => (\n  <Button\n    bsSize=\"xsmall\"\n    bsStyle=\"success\"\n    onClick={toggleMode}\n    disabled={isDisabled}\n  >\n    <span>\n      <i className=\"fa fa-reorder\" />&nbsp;\n      Order mode\n    </span>\n  </Button>\n);\n\nconst AnalysisModeBtn = (mode, toggleMode, isDisabled) => {\n  switch (mode) {\n    case 'order':\n      return orderModeBtn(toggleMode, isDisabled);\n    default:\n      return editModeBtn(toggleMode, isDisabled);\n  }\n};\n\nconst undoBtn = (container, mode, handleUndo) => {\n  const clickUndo = () => handleUndo(container);\n\n  if (mode === 'edit') {\n    return (\n      <Button\n        className=\"pull-right\"\n        bsSize=\"xsmall\"\n        bsStyle=\"danger\"\n        onClick={clickUndo}\n      >\n        <i className=\"fa fa-undo\" />\n      </Button>\n    );\n  }\n  return null;\n};\n\nconst HeaderDeleted = ({ container, handleUndo, mode }) => {\n  const mKind = container.extended_metadata.kind;\n  const mStatus = container.extended_metadata.status;\n  const kind = (mKind && mKind !== '') ? ` - Type: ${(mKind.split('|')[1] || mKind).trim()}` : '';\n  const status = (mStatus && mStatus !== '') ? ` - Status: ${mStatus}` : '';\n\n  return (\n    <div className=\"analysis-header-delete\">\n      <strike>\n        {container.name}\n        {kind}\n        {status}\n      </strike>\n      <div className=\"button-right undo-middle\">\n        {undoBtn(container, mode, handleUndo)}\n      </div>\n    </div>\n  );\n};\n\nconst headerBtnGroup = (\n  container, sample, mode, handleRemove, handleSubmit,\n  toggleAddToReport, isDisabled, readOnly,\n  publish, isReviewer\n) => {\n  if (mode !== 'edit') {\n    return null;\n  }\n\n  const inReport = container.extended_metadata.report;\n  const confirmDelete = (e) => {\n    e.stopPropagation();\n    if (confirm('Delete the analysis?')) {\n      handleRemove(container);\n    }\n  };\n  const onToggleAddToReport = (e) => {\n    e.stopPropagation();\n    toggleAddToReport(container);\n  };\n\n  // spcInfos = [ { value, label, title, idSp, idAe, idx, ... }, ...]\n  const spcInfos = BuildSpcInfos(sample, container);\n\n  const xm = container && container.extended_metadata;\n  const typeMissing = !xm.kind || ((xm.kind || '').split('|').length < 2);\n  const statusMissing = (xm.status || '') !== 'Confirmed';\n  const nmrMissing = !isNmrPass(container, sample);\n  const datasetMissing = !isDatasetPass(container);\n  const btnTip = () => {\n    const tip = [];\n    if (typeMissing || statusMissing || nmrMissing || datasetMissing) {\n      if (typeMissing) tip.push('Type is invalid.');\n      if (statusMissing) tip.push('Status must be Confirmed.');\n      if (nmrMissing) tip.push('Content is invalid, NMR Check fails.');\n      if (datasetMissing) {\n        tip.push('Dataset is incomplete. Please check that: ');\n        tip.push('1. for NMR, Mass, or IR analyses, at least one dataset has been attached with an image and a jcamp files.');\n        tip.push('2. the instrument field is not empty.');\n      }\n      return tip.join('\\r\\n');\n    }\n    return 'publish this analysis';\n  };\n\n  const addToLabelBtn = publish ? (\n   (xm.public_analysis ? null :\n     <OverlayTrigger\n       placement=\"left\"\n       overlay={<Tooltip id=\"checkAnalysis\" className=\"publish_tooltip\">{btnTip()}</Tooltip>}\n     >\n       <div>\n      <Checkbox\n        onClick={onToggleAddToReport}\n        // TODO: use null and true because the Boolean value is coerced into string: check why\n            defaultChecked={(xm && (xm.publish && (xm.publish === true || xm.publish === 'true')) && !xm.public_analysis && xm.kind && !statusMissing && !nmrMissing && !datasetMissing) ? true : false}\n        disabled={!!xm.public_analysis || typeMissing || statusMissing || nmrMissing || datasetMissing}\n      >\n        {\n              (!!xm.public_analysis || typeMissing || statusMissing || nmrMissing || datasetMissing) ?\n                <span style={{ color: 'red' }}>Add to publication</span>\n                :\n                <span>Add to publication</span>\n        }\n      </Checkbox>\n      </div>\n    </OverlayTrigger>\n  )) : (\n    <Checkbox\n      onClick={onToggleAddToReport}\n      defaultChecked={inReport}\n      disabled={!sample.can_update}\n    >\n      <span>Add to Report</span>\n    </Checkbox>\n  );\n\n  const toggleSpectraModal = (e) => {\n    e.stopPropagation();\n    SpectraActions.ToggleModal();\n    SpectraActions.LoadSpectra.defer(spcInfos); // going to fetch files base on spcInfos\n  };\n\n  //process open NMRium\n  const toggleNMRDisplayerModal = (e) => {\n    const spcInfosForNMRDisplayer = BuildSpcInfosForNMRDisplayer(sample, container);\n    e.stopPropagation();\n    SpectraActions.ToggleModalNMRDisplayer();\n    SpectraActions.LoadSpectraForNMRDisplayer.defer(spcInfosForNMRDisplayer); // going to fetch files base on spcInfos\n  }\n\n  const jcampIds = JcampIds(container);\n  const hasJcamp = jcampIds.orig.length > 0;\n  const confirmRegenerate = (e) => {\n    e.stopPropagation();\n    if (confirm('Regenerate spectra?')) {\n      LoadingActions.start();\n      SpectraActions.Regenerate(jcampIds, handleSubmit);\n    }\n  };\n\n  const hasEditedJcamp = jcampIds.edited.length > 0;\n  const confirmRegenerateEdited = (e) => {\n    e.stopPropagation();\n    if (confirm('Regenerate edited spectra?\\nWARNING: This process will override the simulated signals')) {\n      LoadingActions.start();\n      SpectraActions.RegenerateEdited(jcampIds, sample.molfile, () => {\n        LoadingActions.stop();\n      });\n    }\n  }\n\n  const { hasChemSpectra, hasNmriumWrapper } = UIStore.getState();\n  const { chmos } = UserStore.getState();\n  const hasNMRium = isNMRKind(container, chmos) && hasNmriumWrapper;\n  const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n  const enableMoleculeViewer = MatrixCheck(currentUser.matrix, MolViewerSet.PK);\n\n  return (\n    <div className=\"upper-btn\">\n      <Button\n        bsSize=\"xsmall\"\n        bsStyle=\"danger\"\n        className=\"button-right\"\n        disabled={readOnly || isDisabled}\n        onClick={confirmDelete}\n      >\n        <i className=\"fa fa-trash\" />\n      </Button>\n      <PrintCodeButton\n        element={sample}\n        analyses={[container]}\n        ident={container.id}\n      />\n      <SpectraEditorButton\n        element={sample}\n        hasJcamp={hasJcamp}\n        spcInfos={spcInfos}\n        hasChemSpectra={hasChemSpectra}\n        hasEditedJcamp={hasEditedJcamp}\n        toggleSpectraModal={toggleSpectraModal}\n        confirmRegenerate={confirmRegenerate}\n        confirmRegenerateEdited={confirmRegenerateEdited}\n        toggleNMRDisplayerModal={toggleNMRDisplayerModal}\n        hasNMRium={hasNMRium}\n        isReviewer={isReviewer}\n      />\n      <span className=\"button-right\">\n        <MolViewerListBtn el={sample} container={container} isPublic={false} disabled={!enableMoleculeViewer} />\n      </span>\n      <span\n        className=\"button-right add-to-report\"\n        onClick={stopBubble}\n      >\n        {addToLabelBtn}\n      </span>\n    </div>\n  );\n};\n\nconst HeaderNormal = ({\n  sample, container, mode, readOnly, isDisabled, serial,\n  handleRemove, handleSubmit, handleAccordionOpen, toggleAddToReport,\n  publish,isReviewer\n}) => {\n  const clickToOpen = () => handleAccordionOpen(serial);\n\n  let kind = container.extended_metadata.kind || '';\n  kind = (kind.split('|')[1] || kind).trim();\n  let insText = '';\n  if (typeof publish === 'undefined' || publish === null || publish === false) {\n    insText = instrumentText(container);\n  }\n  const status = container.extended_metadata.status || '';\n  const previewImg = previewContainerImage(container);\n  const content = container.extended_metadata.content || { ops: [{ insert: '' }] };\n  const contentOneLine = {\n    ops: content.ops.map((x) => {\n      const c = Object.assign({}, x);\n      if (c.insert && typeof c.insert === 'string') c.insert = c.insert.replace(/\\n/g, ' ');\n      return c;\n    }),\n  };\n  let hasPop = true;\n  let fetchNeeded = false;\n  let fetchId = 0;\n  if (previewImg.startsWith('data:image')) {\n    fetchNeeded = true;\n    fetchId = container.preview_img.id;\n  } else {\n    hasPop = false;\n  }\n  const nmrMissing = !isNmrPass(container, sample);\n\n  let statusChk = (status !== 'Confirmed' || nmrMissing);\n  if (sample.can_publish === false && sample.can_update === false) {\n    statusChk = false;\n  }\n\n  return (\n    <div\n      className={`analysis-header ${mode === 'edit' ? '' : 'order'}`}\n      onClick={clickToOpen}\n    >\n      <div className=\"preview\">\n        <ImageModal\n          hasPop={hasPop}\n          previewObject={{\n            src: previewImg\n          }}\n          popObject={{\n            title: container.name,\n            src: previewImg,\n            fetchNeeded,\n            fetchId\n          }}\n        />\n      </div>\n      <div className=\"abstract\">\n        {\n          headerBtnGroup(\n            container, sample, mode, handleRemove, handleSubmit,\n            toggleAddToReport, isDisabled, readOnly,\n            publish, isReviewer\n          )\n        }\n        <div className=\"lower-text\">\n          <div className=\"main-title\">\n            {container.name}\n          </div>\n          <div className=\"sub-title\" style={kind === '' ? { color: 'red' } : null}>\n            Type: {kind}\n          </div>\n          <div className=\"sub-title\">\n            <span style={statusChk ? { color: 'red' } : null}>Status:</span> {status} {qCheckMsg(sample, container)} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {insText}\n          </div>\n          <div className=\"desc sub-title\">\n            <span style={{ float: 'left', marginRight: '5px' }}>\n              Content:\n            </span>\n            <QuillViewer value={contentOneLine} />\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport { HeaderDeleted, HeaderNormal, AnalysisModeBtn };\n","import React from 'react';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport { compose } from 'redux';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport { HeaderDeleted, HeaderNormal } from 'src/apps/mydb/elements/details/samples/analysesTab/SampleDetailsContainersAux';\n\nconst orderSource = {\n  beginDrag(props) {\n    const { container, sample } = props;\n    return { cId: container.id, sId: sample.id };\n  },\n};\n\nconst orderTarget = {\n  drop(targetProps, monitor) {\n    const { container, sample, handleMove } = targetProps;\n    const tgTag = { cId: container.id, sId: sample.id };\n    const scTag = monitor.getItem();\n    if (tgTag.sId === scTag.sId && tgTag.cId !== scTag.cId) {\n      handleMove(scTag, tgTag);\n    }\n  },\n};\n\nconst orderDragCollect = (connect, monitor) => ({\n  connectDragSource: connect.dragSource(),\n  isDragging: monitor.isDragging(),\n});\n\nconst orderDropCollect = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop(),\n});\n\nconst ContainerRow = ({\n  sample, container, mode, readOnly, isDisabled, handleRemove,\n  handleSubmit, handleAccordionOpen, toggleAddToReport, handleUndo,\n  connectDragSource, connectDropTarget, isDragging, isOver, canDrop, publish\n}) => {\n  const style = {};\n  if (canDrop) {\n    style.borderStyle = 'dashed';\n    style.borderWidth = 2;\n  }\n  if (isOver) {\n    style.borderColor = '#337ab7';\n  }\n  if (isDragging) {\n    style.opacity = 0.2;\n  }\n\n  const oPanelCN = container.is_deleted ? \"order-panel-delete\" : \"order-panel\";\n\n  return compose(connectDragSource, connectDropTarget)(\n    <div className={oPanelCN} style={style}>\n      <div className=\"dnd-btn\">\n        <span className=\"text-info fa fa-arrows\" />\n      </div>\n      {\n        container.is_deleted\n          ? <HeaderDeleted\n            container={container}\n            handleUndo={handleUndo}\n            mode={mode}\n          />\n          : <HeaderNormal\n            sample={sample}\n            container={container}\n            mode={mode}\n            handleUndo={handleUndo}\n            readOnly={readOnly}\n            isDisabled={isDisabled}\n            handleRemove={handleRemove}\n            handleSubmit={handleSubmit}\n            handleAccordionOpen={handleAccordionOpen}\n            toggleAddToReport={toggleAddToReport}\n            publish={publish}\n          />\n      }\n    </div>,\n  );\n};\n\nexport default compose(\n  DragSource(DragDropItemTypes.CONTAINER, orderSource, orderDragCollect),\n  DropTarget(DragDropItemTypes.CONTAINER, orderTarget, orderDropCollect),\n)(ContainerRow);\n","/* eslint-disable react/prop-types */\nimport React, { useState, useEffect } from 'react';\nimport {\n  PanelGroup, Panel, Button, FormGroup, FormControl, OverlayTrigger, Tooltip\n} from 'react-bootstrap';\nimport ContainerComponent from 'src/components/container/ContainerComponent';\nimport ContainerRow from 'src/apps/mydb/elements/details/samples/analysesTab/SampleDetailsContainersDnd';\nimport {\n  HeaderDeleted,\n  HeaderNormal,\n  AnalysisModeBtn,\n} from 'src/apps/mydb/elements/details/samples/analysesTab/SampleDetailsContainersAux';\n\nfunction RndNotAvailable() {\n  return (\n    <div>\n      <p className=\"noAnalyses-warning\">Not available.</p>\n    </div>\n  );\n}\n\nfunction RndNoAnalyses({ addButton }) {\n  return (\n    <div>\n      <p>{addButton()}</p>\n      <p className=\"noAnalyses-warning\">There are currently no Analyses.</p>\n    </div>\n  );\n}\n\nfunction renderCommentButton(handleCommentButtonClick, disableMode = true) {\n  return (\n    <OverlayTrigger\n      placement=\"top\"\n      overlay={(\n        <Tooltip id=\"analysisCommentBox\">\n          general remarks that relate to all analytical data\n        </Tooltip>\n      )}\n    >\n      <Button\n        bsSize=\"xsmall\"\n        bsStyle=\"primary\"\n        style={{ float: 'right', marginRight: '10px' }}\n        onClick={handleCommentButtonClick}\n        disabled={disableMode}\n      >\n        Add comment\n      </Button>\n    </OverlayTrigger>\n  );\n}\n\nfunction renderCommentBox(sample, handleCommentTextChange) {\n  const { container } = sample;\n  return (\n    <FormGroup>\n      <FormControl\n        componentClass=\"textarea\"\n        style={{ marginTop: '10px', marginBottom: '10px' }}\n        rows={2}\n        value={container.description}\n        onChange={handleCommentTextChange}\n      />\n    </FormGroup>\n  );\n}\n\nfunction RndOrder({\n  sample,\n  mode,\n  readOnly,\n  isDisabled,\n  handleRemove,\n  handleSubmit,\n  handleMove,\n  handleUndo,\n  handleAccordionOpen,\n  toggleAddToReport,\n  toggleMode,\n  orderContainers,\n  addButton,\n  publish,\n}) {\n  return (\n    <div>\n      <p style={{\n        position: 'sticky',\n        top: '0px',\n        zIndex: 1000,\n        backgroundColor: 'white',\n\n      }}\n      >\n        {AnalysisModeBtn(mode, toggleMode, isDisabled)}\n        {addButton()}\n        {renderCommentButton()}\n      </p>\n      <div style={{\n        position: 'relative',\n        height: '600px',\n        overflowY: 'scroll'\n      }}\n      >\n        {orderContainers.map((container, i) => {\n          const id = container.id || `fake_${i}`;\n          return (\n            <ContainerRow\n              sample={sample}\n              mode={mode}\n              container={container}\n              readOnly={readOnly}\n              isDisabled={isDisabled}\n              key={`${id}CRowOrder`}\n              addButton={addButton}\n              handleMove={handleMove}\n              handleRemove={handleRemove}\n              handleSubmit={handleSubmit}\n              handleAccordionOpen={handleAccordionOpen}\n              handleUndo={handleUndo}\n              toggleAddToReport={toggleAddToReport}\n              publish={publish}\n            />\n          );\n        })}\n      </div>\n    </div>\n  );\n}\n\nconst panelOnSelect = () => { };\n\nfunction RndEdit({\n  sample,\n  mode,\n  handleRemove,\n  handleSubmit,\n  handleAccordionOpen,\n  toggleAddToReport,\n  toggleMode,\n  activeAnalysis,\n  orderContainers,\n  readOnly,\n  isDisabled,\n  addButton,\n  handleChange,\n  handleUndo,\n  publish,\n  isReviewer,\n  handleCommentTextChange,\n}) {\n  const headerDeletedFunc = (container) => (\n    <HeaderDeleted container={container} handleUndo={handleUndo} mode={mode} />\n  );\n\n  const [commentBoxVisible, setCommentBoxVisible] = useState(false);\n\n  useEffect(() => {\n    if (sample.container.description && sample.container.description.trim() !== '') {\n      setCommentBoxVisible(true);\n    } else {\n      setCommentBoxVisible(false);\n    }\n  }, [sample.container.description]);\n\n  const handleCommentButtonClick = () => {\n    setCommentBoxVisible(!commentBoxVisible);\n  };\n\n  const headerNormalFunc = (container, serial) => (\n    <HeaderNormal\n      sample={sample}\n      container={container}\n      mode={mode}\n      serial={serial}\n      handleUndo={handleUndo}\n      readOnly={readOnly}\n      isDisabled={isDisabled}\n      handleRemove={handleRemove}\n      handleSubmit={handleSubmit}\n      handleAccordionOpen={handleAccordionOpen}\n      toggleAddToReport={toggleAddToReport}\n      publish={publish}\n      isReviewer={isReviewer || false}\n    />\n  );\n\n  return (\n    <div>\n      { publish ? null :\n        <p style={{\n          position: 'sticky',\n          top: '0px',\n          zIndex: 1000,\n          backgroundColor: 'white',\n      }}\n      >\n        {AnalysisModeBtn(mode, toggleMode, isDisabled)}\n        {addButton()}\n        {renderCommentButton(handleCommentButtonClick, false)}\n        {commentBoxVisible ? renderCommentBox(sample, handleCommentTextChange) : null}\n      </p>\n      }\n      <PanelGroup\n        id=\"editable-analysis-list\"\n        defaultActiveKey={0}\n        activeKey={activeAnalysis}\n        onSelect={panelOnSelect}\n        accordion\n        style={{\n          position: 'relative',\n          height: '600px',\n          overflowY: 'scroll'\n        }}\n      >\n        {orderContainers.map((container, i) => {\n          const id = container.id || `fake_${i}`;\n          if (container.is_deleted) {\n            return (\n              <Panel eventKey={id} key={`${id}CRowEdit`}>\n                <Panel.Heading>{headerDeletedFunc(container)}</Panel.Heading>\n              </Panel>\n            );\n          }\n\n          return (\n            <Panel eventKey={id} key={`${id}CRowEdit`}>\n              <Panel.Heading>{headerNormalFunc(container, id)}</Panel.Heading>\n              <Panel.Body collapsible>\n                <ContainerComponent\n                  templateType=\"sample\"\n                  readOnly={readOnly}\n                  container={container}\n                  disabled={isDisabled}\n                  onChange={handleChange}\n                />\n              </Panel.Body>\n            </Panel>\n          );\n        })}\n      </PanelGroup>\n    </div>\n  );\n}\n\nexport {\n  RndNotAvailable, RndNoAnalyses, RndOrder, RndEdit\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\n\nimport Container from 'src/models/Container';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport { reOrderArr } from 'src/utilities/DndControl';\nimport ViewSpectra from 'src/apps/mydb/elements/details/ViewSpectra';\n\nimport NMRiumDisplayer from 'src/components/nmriumWrapper/NMRiumDisplayer';\nimport {\n  RndNotAvailable, RndNoAnalyses,\n  RndOrder, RndEdit\n} from 'src/apps/mydb/elements/details/samples/analysesTab/SampleDetailsContainersCom';\n\nimport TextTemplateActions from 'src/stores/alt/actions/TextTemplateActions';\n\nexport default class SampleDetailsContainers extends Component {\n  constructor(props) {\n    super();\n    this.state = {\n      activeAnalysis: UIStore.getState().sample.activeAnalysis,\n      mode: 'edit',\n    };\n    this.onUIStoreChange = this.onUIStoreChange.bind(this);\n    this.addButton = this.addButton.bind(this);\n    this.handleChange = this.handleChange.bind(this);\n    this.handleCommentTextChange = this.handleCommentTextChange.bind(this);\n    this.handleUndo = this.handleUndo.bind(this);\n    this.handleRemove = this.handleRemove.bind(this);\n    this.handleAccordionOpen = this.handleAccordionOpen.bind(this);\n    this.handleAdd = this.handleAdd.bind(this);\n    this.handleMove = this.handleMove.bind(this);\n    this.toggleAddToReport = this.toggleAddToReport.bind(this);\n    this.toggleMode = this.toggleMode.bind(this);\n    this.isEqCId = this.isEqCId.bind(this);\n    this.indexedContainers = this.indexedContainers.bind(this);\n    this.buildEmptyAnalyContainer = this.buildEmptyAnalyContainer.bind(this);\n    this.sortedContainers = this.sortedContainers.bind(this);\n  }\n\n  componentDidMount() {\n    UIStore.listen(this.onUIStoreChange);\n    TextTemplateActions.fetchTextTemplates('sample');\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onUIStoreChange);\n  }\n\n  onUIStoreChange(state) {\n    if (state.sample.activeAnalysis !== this.state.activeAnalysis) {\n      this.setState({ activeAnalysis: state.sample.activeAnalysis });\n    }\n  }\n\n  handleChange(container) {\n    const { sample } = this.props;\n    // const analyses = sample.container.children.find(child => (\n    //   child.container_type === 'analyses'\n    // ));\n    // analyses.children.map((child, ind) => {\n    //   if (child.container_type === 'analysis' && child.id === container.id) {\n    //     analyses.children[ind] = container;\n    //   }\n    //   return null;\n    // });\n\n    this.props.handleSampleChanged(sample);\n  }\n\n  handleCommentTextChange(e) {\n    const { sample } = this.props;\n\n    sample.container.description = e.target.value;\n\n    this.handleChange(sample.container);\n  }\n\n  handleAdd() {\n    const { sample } = this.props;\n    const newContainer = this.buildEmptyAnalyContainer();\n\n    const sortedConts = this.sortedContainers(sample);\n    const newSortConts = [...sortedConts, newContainer];\n    const newIndexedConts = this.indexedContainers(newSortConts);\n\n    sample.analysesContainers()[0].children = newIndexedConts;\n    this.props.setState(prevState => ({ ...prevState, sample }),\n      this.handleAccordionOpen(newContainer.id),\n    );\n  }\n\n  handleMove(source, target) {\n    const { sample } = this.props;\n\n    const sortedConts = this.sortedContainers(sample);\n    const newSortConts = reOrderArr(source, target, this.isEqCId, sortedConts);\n    const newIndexedConts = this.indexedContainers(newSortConts);\n\n    sample.analysesContainers()[0].children = newIndexedConts;\n    this.props.setState(prevState => ({ ...prevState, sample }));\n  }\n\n  sortedContainers(sample) {\n    const containers = sample.analysesContainers()[0].children;\n    return ArrayUtils.sortArrByIndex(containers);\n  }\n\n  buildEmptyAnalyContainer() {\n    const newContainer = Container.buildEmpty();\n    newContainer.container_type = \"analysis\";\n    newContainer.extended_metadata.content = { ops: [{ insert: '\\n' }] };\n    return newContainer;\n  }\n\n  isEqCId(container, tagEl) {\n    return container.id === tagEl.cId;\n  }\n\n  indexedContainers(containers) {\n    return containers.map((c, i) => {\n      const container = c;\n      container.extended_metadata.index = i;\n      return container;\n    });\n  }\n\n  handleRemove(container) {\n    const { sample } = this.props;\n    container.is_deleted = true;\n\n    this.props.setState(prevState => ({ ...prevState, sample }));\n  }\n\n  handleUndo(container) {\n    const { sample } = this.props;\n    container.is_deleted = false;\n\n    this.props.setState(prevState => ({ ...prevState, sample }));\n  }\n\n  handleAccordionOpen(newKey) {\n    this.setState((prevState) => {\n      const prevKey = prevState.activeAnalysis;\n      return {\n        ...prevState,\n        mode: 'edit',\n        activeAnalysis: prevKey === newKey ? 0 : newKey,\n      };\n    });\n  }\n\n  addButton() {\n    const { readOnly, sample } = this.props;\n    if (readOnly) {\n      return null;\n    }\n    return (\n      <Button\n        className=\"button-right\"\n        bsSize=\"xsmall\"\n        bsStyle=\"success\"\n        onClick={this.handleAdd}\n        disabled={!sample.can_update}\n      >\n        <i className=\"fa fa-plus\" />&nbsp;\n        Add analysis\n      </Button>\n    );\n  }\n\n  toggleAddToReport(container) {\n    if (this.props.publish) {\n      // TODO: use null and true because the Boolean value is coerced into string: check why\n      // container.extended_metadata.publish = container.extended_metadata.publish ? null : true;\n      if (container.extended_metadata.publish && (container.extended_metadata.publish === true || container.extended_metadata.publish === 'true')) {\n        container.extended_metadata.publish = false;\n      } else {\n        container.extended_metadata.publish = true;\n      }\n    } else {\n      container.extended_metadata.report = !container.extended_metadata.report;\n    }\n    this.handleChange(container);\n  }\n\n  toggleMode() {\n    const { mode } = this.state;\n    if (mode === 'edit') {\n      this.setState({ mode: 'order' });\n    } else {\n      this.setState({ mode: 'edit' });\n    }\n  }\n\n  render() {\n    const { activeAnalysis, mode } = this.state;\n    const {\n      readOnly, sample, handleSubmit, handleSampleChanged,\n    } = this.props;\n    const isDisabled = !sample.can_update;\n\n    if (sample.container == null) return <RndNotAvailable />;\n\n    const analyContainer = sample.analysesContainers();\n\n    if (analyContainer.length === 1 && analyContainer[0].children.length > 0) {\n      const orderContainers = ArrayUtils.sortArrByIndex(analyContainer[0].children);\n      let content = null;\n\n      if (mode === 'order') {\n        content = (\n          <RndOrder\n            sample={sample}\n            mode={mode}\n            orderContainers={orderContainers}\n            readOnly={readOnly}\n            isDisabled={isDisabled}\n            addButton={this.addButton}\n            handleRemove={this.handleRemove}\n            handleSubmit={handleSubmit}\n            handleMove={this.handleMove}\n            handleAccordionOpen={this.handleAccordionOpen}\n            handleUndo={this.handleUndo}\n            toggleAddToReport={this.toggleAddToReport}\n            toggleMode={this.toggleMode}\n            publish={this.props.publish}\n          />\n        );\n      } else {\n        content = (\n          <RndEdit\n            sample={sample}\n            mode={mode}\n            orderContainers={orderContainers}\n            activeAnalysis={activeAnalysis}\n            handleChange={this.handleChange}\n            handleCommentTextChange={this.handleCommentTextChange}\n            handleUndo={this.handleUndo}\n            handleRemove={this.handleRemove}\n            handleSubmit={handleSubmit}\n            handleAccordionOpen={this.handleAccordionOpen}\n            toggleAddToReport={this.toggleAddToReport}\n            readOnly={readOnly}\n            isDisabled={isDisabled}\n            addButton={this.addButton}\n            toggleMode={this.toggleMode}\n            publish={this.props.publish}\n            isReviewer={this.props.isReviewer || false}\n          />\n        );\n      }\n\n      return (\n        <div>\n          {content}\n          <ViewSpectra\n            sample={sample}\n            handleSampleChanged={handleSampleChanged}\n            handleSubmit={handleSubmit}\n          />\n          <NMRiumDisplayer\n            sample={sample}\n            handleSampleChanged={handleSampleChanged}\n            handleSubmit={handleSubmit}\n          />\n        </div>\n      );\n    }\n    return (\n      <RndNoAnalyses\n        addButton={this.addButton}\n      />\n    );\n  }\n}\n\nSampleDetailsContainers.propTypes = {\n  readOnly: PropTypes.bool,\n  sample: PropTypes.object.isRequired,\n  handleSampleChanged: PropTypes.func.isRequired,\n  handleSubmit: PropTypes.func.isRequired,\n  isReviewer: PropTypes.bool,\n};\n\nSampleDetailsContainers.defaultProps = {\n  readOnly: false,\n  isReviewer: false\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FormControl, ControlLabel, InputGroup, Button } from 'react-bootstrap';\nimport { metPreConv, metPrefSymbols } from 'src/utilities/metricPrefix';\n\nexport default class NumeralInputWithUnitsCompo extends Component {\n  constructor(props) {\n    super(props);\n\n    const { value, block, metricPrefix, precision } = props;\n    this.state = {\n      value,\n      block,\n      metricPrefix: metricPrefix || 'n',\n      currentPrecision: precision,\n      valueString: 0,\n      showString: false,\n    };\n  }\n\n  componentDidMount() {\n    this.forceUpdate();\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const { value, block } = nextProps;\n    this.setState({ value, block });\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    const hasChanged = nextProps.value !== this.props.value\n      || nextProps.block !== this.props.block\n      || nextProps.metricPrefix !== this.props.metricPrefix\n      || nextProps.bsStyle !== this.props.bsStyle\n      || nextProps.disabled !== this.props.disabled\n      || nextState.value !== this.state.value\n      || nextState.block !== this.state.block\n      || nextState.metricPrefix !== this.state.metricPrefix\n      || nextState.currentPrecision !== this.state.currentPrecision\n      || nextState.valueString !== this.state.valueString\n      || nextState.showString !== this.state.showString\n      || nextProps.label !== this.props.label\n      || nextProps.unit !== this.props.unit;\n    return hasChanged;\n  }\n\n  _handleValueChange(value) {\n    this.setState({ value }, () => this._onChangeCallback());\n  }\n\n  _handleInputValueChange(event) {\n    const inputField = event.target;\n    inputField.focus();\n    const { value, selectionStart } = inputField;\n    let { valueString } = this.state;\n    let newValue = value;\n    const { metricPrefix } = this.state;\n    const lastChar = value[selectionStart - 1] || '';\n\n    if (lastChar !== '' && !lastChar.match(/-|\\d|\\.|(,)/)) return false;\n    // if (value[0] !== '0') { newValue = '0'.concat(newValue); }\n\n    const md = lastChar.match(/-|\\d/);\n    const mc = lastChar.match(/\\.|(,)/);\n\n    if (mc && mc[1]) {\n      newValue = `${value.slice(0, selectionStart - 1)}.${value.slice(selectionStart)}`;\n      // } else if (value === '00') { // else if (value === '0.' || value === '00') {\n      //   newValue = '0.0';\n    }\n\n    newValue = newValue.replace('--', '');\n    newValue = newValue.replace('..', '.');\n    const matchMinus = newValue.match(/\\d+(-+)\\d*/);\n    if (matchMinus && matchMinus[1]) newValue = newValue.replace(matchMinus[1], '');\n\n    if (md || mc) { valueString = newValue; }\n\n    this.setState(\n      {\n        value: metPreConv(newValue, metricPrefix, 'n'),\n        showString: true,\n        valueString,\n      },\n      () => { this._onChangeCallback(); inputField.selectionStart = selectionStart; }\n    );\n    return null;\n  }\n\n  _handleInputValueFocus() {\n    const { value, metricPrefix } = this.state;\n    this.setState({\n      currentPrecision: undefined,\n      showString: true,\n      valueString: metPreConv(value, 'n', metricPrefix) || 0,\n    });\n  }\n\n  _handleInputValueBlur() {\n    this.setState({\n      currentPrecision: this.props.precision,\n      showString: false,\n    }, () => this._onChangeCallback());\n  }\n\n  _onChangeCallback() {\n    if (this.props.onChange) {\n      this.props.onChange({ ...this.state, unit: this.props.unit });\n    }\n  }\n\n  togglePrefix(currentUnit) {\n    const units = ['TON/h', 'TON/m', 'TON/s', '°C', '°F', 'K', 'h', 'm', 's'];\n    const excludedUnits = ['ppm', 'TON', '%'];\n    const { onMetricsChange, unit } = this.props;\n    if (units.includes(currentUnit)) {\n      // eslint-disable-next-line no-unused-expressions\n      onMetricsChange && onMetricsChange(\n        { ...this.state, metricUnit: unit }\n      );\n    } else if (excludedUnits.includes(currentUnit)) {\n      return null;\n    } else {\n      const { metricPrefixes } = this.props;\n      let ind = metricPrefixes.indexOf(this.state.metricPrefix);\n      if (ind < metricPrefixes.length - 1) {\n        ind += 1;\n      } else {\n        ind = 0;\n      }\n      this.setState({\n        metricPrefix: metricPrefixes[ind]\n      });\n\n      onMetricsChange && onMetricsChange({ ...this.state, metricUnit: unit, metricPrefix: metricPrefixes[ind] });\n    }\n  }\n\n  render() {\n    const {\n      bsSize, bsStyle, disabled, label, unit, name\n    } = this.props;\n    const {\n      showString, value, metricPrefix,\n      currentPrecision, valueString, block,\n    } = this.state;\n    const mp = metPrefSymbols[metricPrefix];\n    const nanOrInfinity = isNaN(value) || !isFinite(value);\n    const val = () => {\n      if (!showString && nanOrInfinity) {\n        return 'n.d.';\n      } else if (!showString) {\n        return metPreConv(value, 'n', metricPrefix).toPrecision(currentPrecision);\n      }\n      return valueString;\n    };\n    const inputDisabled = disabled ? true : block;\n    const alwaysAllowDisplayUnit = ['TON', 'TON/h', 'TON/m', 'TON/s', 'g', 'mg', 'μg', 'mol', 'mmol', 'l', 'ml', 'μl'];\n    const unitDisplayMode = alwaysAllowDisplayUnit.includes(unit) ? false : inputDisabled;\n    // BsStyle-s for Input and buttonAfter have differences\n    const bsStyleBtnAfter = bsStyle === 'error' ? 'danger' : bsStyle;\n    const labelWrap = label ? <ControlLabel>{label}</ControlLabel> : null;\n    if (unit !== 'n') {\n      const prefixSwitch = (\n        <InputGroup.Button>\n          <Button\n            disabled={unitDisplayMode}\n            active\n            onClick={() => { this.togglePrefix(unit); }}\n            bsStyle={bsStyleBtnAfter}\n            bsSize={bsSize}\n          >\n            {mp + unit}\n          </Button>\n        </InputGroup.Button>\n      );\n\n      return (\n        <div className={`numeric-input-unit_${this.props.unit}`}>\n          {labelWrap}\n          <InputGroup>\n            <FormControl\n              type=\"text\"\n              bsClass=\"bs-form--compact form-control\"\n              disabled={inputDisabled}\n              bsSize={bsSize}\n              bsStyle={bsStyle}\n              value={val() || ''}\n              onChange={(event) => this._handleInputValueChange(event)}\n              onFocus={(event) => this._handleInputValueFocus(event)}\n              onBlur={(event) => this._handleInputValueBlur(event)}\n              name={name}\n            />\n            {prefixSwitch}\n          </InputGroup>\n        </div>\n      );\n    }\n    return (\n      <div className=\"numeric-input-unit\">\n        {labelWrap}\n        <div>\n          <FormControl\n            type=\"text\"\n            bsClass=\"bs-form--compact form-control\"\n            disabled={inputDisabled}\n            bsSize={bsSize}\n            bsStyle={bsStyle}\n            value={val() || ''}\n            onChange={(event) => this._handleInputValueChange(event)}\n            onFocus={(event) => this._handleInputValueFocus(event)}\n            onBlur={(event) => this._handleInputValueBlur(event)}\n            name={name}\n          />\n        </div>\n      </div>\n    );\n  }\n}\n\nNumeralInputWithUnitsCompo.propTypes = {\n  onChange: PropTypes.func,\n  onMetricsChange: PropTypes.func,\n  unit: PropTypes.string,\n  units: PropTypes.array,\n  metricPrefix: PropTypes.string,\n  metricPrefixes: PropTypes.array,\n  precision: PropTypes.number,\n  disabled: PropTypes.bool,\n  label: PropTypes.node,\n  bsSize: PropTypes.string,\n  bsStyle: PropTypes.string,\n  name: PropTypes.string\n};\n\nNumeralInputWithUnitsCompo.defaultProps = {\n  unit: 'n',\n  value: 0,\n  units: [],\n  disabled: false,\n  block: false,\n  bsSize: 'small',\n  bsStyle: 'default',\n  name: ''\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Radio,\n  FormControl,\n  Button,\n  InputGroup,\n  OverlayTrigger,\n  Tooltip,\n  Checkbox,\n} from 'react-bootstrap';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport { compose } from 'redux';\nimport { debounce } from 'lodash';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport NumeralInputWithUnitsCompo from 'src/apps/mydb/elements/details/NumeralInputWithUnitsCompo';\nimport SampleName from 'src/components/common/SampleName';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport { UrlSilentNavigation, SampleCode } from 'src/utilities/ElementUtils';\nimport { correctPrefix, validDigit } from 'src/utilities/MathUtils';\nimport Reaction from 'src/models/Reaction';\nimport Sample from 'src/models/Sample';\nimport { permitCls, permitOn } from 'src/components/common/uis';\nimport GasPhaseReactionStore from 'src/stores/alt/stores/GasPhaseReactionStore';\nimport { calculateFeedstockMoles } from 'src/utilities/UnitsConversion';\n\nconst matSource = {\n  beginDrag(props) {\n    return props;\n  },\n};\n\nconst matTarget = {\n  drop(tagProps, monitor) {\n    const { dropSample, dropMaterial } = tagProps;\n    const srcItem = monitor.getItem();\n    const srcType = monitor.getItemType();\n\n    if (srcType === DragDropItemTypes.SAMPLE) {\n      dropSample(\n        srcItem.element,\n        tagProps.material,\n        tagProps.materialGroup,\n      );\n    } else if (srcType === DragDropItemTypes.MOLECULE) {\n      dropSample(\n        srcItem.element,\n        tagProps.material,\n        tagProps.materialGroup,\n        null,\n        true,\n      );\n    } else if (srcType === DragDropItemTypes.MATERIAL) {\n      dropMaterial(\n        srcItem.material,\n        srcItem.materialGroup,\n        tagProps.material,\n        tagProps.materialGroup,\n      );\n    }\n  },\n  canDrop(tagProps, monitor) {\n    const srcType = monitor.getItemType();\n    const isCorrectType = srcType === DragDropItemTypes.MATERIAL\n      || srcType === DragDropItemTypes.SAMPLE\n      || srcType === DragDropItemTypes.MOLECULE;\n    return isCorrectType;\n  },\n};\n\nconst matSrcCollect = (connect, monitor) => ({\n  connectDragSource: connect.dragSource(),\n  isDragging: monitor.isDragging(),\n});\n\nconst matTagCollect = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop(),\n});\n\nconst notApplicableInput = () => (\n  <td>\n    <FormControl\n      bsClass=\"bs-form--compact form-control\"\n      bsSize=\"small\"\n      style={{ textAlign: 'center' }}\n      type=\"text\"\n      value=\"n/a\"\n      disabled\n    />\n  </td>\n);\n\nconst iupacNameTooltip = material => (\n  <Tooltip id=\"iupac_name_tooltip\" className=\"left_tooltip\">\n    <table>\n      <tbody>\n        <tr><td>IUPAC&#58;&nbsp;</td><td style={{ wordBreak: 'break-all' }}>{material.molecule.iupac_name || ''}</td></tr>\n        <tr><td>Name&#58;&nbsp;</td><td style={{ wordBreak: 'break-all' }}>{material.name || ''}</td></tr>\n        <tr><td>Ext.Label&#58;&nbsp;</td><td style={{ wordBreak: 'break-all' }}>{material.external_label || ''}</td></tr>\n      </tbody>\n    </table>\n  </Tooltip>);\n\nconst refreshSvgTooltip = <Tooltip id=\"refresh_svg_tooltip\">Refresh reaction diagram</Tooltip>;\n\nconst AddtoDescToolTip = <Tooltip id=\"tp-spl-code\" className=\"left_tooltip\">Add to description or additional information for publication and purification details</Tooltip>;\n\nconst solvConcentration = (material, solventVolume) => {\n  const concn = ((material.amount_l / solventVolume) * 100).toFixed(1);\n  if (isNaN(concn) || !isFinite(concn)) { return 'n.d.'; }\n  return `${concn}%`;\n};\n\nclass Material extends Component {\n  constructor(props) {\n    super(props);\n\n    this.createParagraph = this.createParagraph.bind(this);\n    this.handleAmountUnitChange = this.handleAmountUnitChange.bind(this);\n    this.handleMetricsChange = this.handleMetricsChange.bind(this);\n    this.gasFieldsUnitsChanged = this.gasFieldsUnitsChanged.bind(this);\n    this.handleCoefficientChange = this.handleCoefficientChange.bind(this);\n    this.debounceHandleAmountUnitChange = debounce(this.handleAmountUnitChange, 500);\n    this.yieldOrConversionRate = this.yieldOrConversionRate.bind(this);\n  }\n\n  handleMaterialClick(sample) {\n    const { reaction } = this.props;\n    UrlSilentNavigation(sample);\n    sample.updateChecksum();\n    ElementActions.showReactionMaterial({ sample, reaction });\n  }\n\n  materialVolume(material) {\n    if (material.contains_residues) { return notApplicableInput(); }\n    const { density, molarity_value, molarity_unit, has_density, has_molarity } = material;\n    const tooltip = has_density || has_molarity ?\n      (\n        <Tooltip id=\"density_info\">\n          {has_density ? `density = ${density}` : `molarity = ${molarity_value} ${molarity_unit}`}\n        </Tooltip>\n      )\n      : <Tooltip id=\"density_info\">no density or molarity defined</Tooltip>;\n\n    const metricPrefixes = ['m', 'n', 'u'];\n    const metric = (material.metrics && material.metrics.length > 2 && metricPrefixes.indexOf(material.metrics[1]) > -1) ? material.metrics[1] : 'm';\n\n    return (\n      <td>\n        <OverlayTrigger placement=\"top\" overlay={tooltip}>\n          <div>\n            <NumeralInputWithUnitsCompo\n              key={material.id}\n              value={material.amount_l}\n              unit=\"l\"\n              metricPrefix={metric}\n              metricPrefixes={metricPrefixes}\n              precision={3}\n              disabled={!permitOn(this.props.reaction)\n                || ((this.props.materialGroup !== 'products')\n                && !material.reference && this.props.lockEquivColumn)\n                || material.gas_type === 'gas'}\n              onChange={e => this.handleAmountUnitChange(e, material.amount_l)}\n              onMetricsChange={this.handleMetricsChange}\n              bsStyle={material.amount_unit === 'l' ? 'success' : 'default'}\n            />\n          </div>\n        </OverlayTrigger>\n      </td>\n    );\n  }\n\n\n  materialLoading(material, showLoadingColumn) {\n    if (!showLoadingColumn) {\n      return false;\n    } else if (!material.contains_residues) {\n      return notApplicableInput();\n    }\n\n    return (\n      <td>\n        <NumeralInputWithUnitsCompo\n          key={material.id}\n          value={material.loading}\n          unit=\"mmol/g\"\n          metricPrefix=\"n\"\n          metricPrefixes={['n']}\n          bsStyle={material.error_loading ? 'error' : 'success'}\n          precision={3}\n          disabled={!permitOn(this.props.reaction) || (this.props.materialGroup === 'products' || (!material.reference && this.props.lockEquivColumn))}\n          onChange={loading => this.handleLoadingChange(loading)}\n        />\n      </td>\n    );\n  }\n\n  materialRef(material) {\n    return (\n      this.props.materialGroup === 'products'\n        ? <td />\n        : <td>\n          <Radio\n            disabled={!permitOn(this.props.reaction)}\n            name=\"reference\"\n            checked={material.reference}\n            onChange={e => this.handleReferenceChange(e)}\n            bsSize=\"xsmall\"\n            style={{ margin: 0 }}\n          />\n        </td>\n    );\n  }\n\n  materialShowLabel(material, style = { padding: '5px 4px', width: '16px' }) {\n    return (\n      <Button\n        active\n        style={style}\n        onClick={e => this.handleShowLabelChange(e)}\n        bsStyle={material.show_label ? 'success' : 'primary'}\n        bsSize=\"small\"\n        title={material.show_label ? 'Switch to structure' : 'Switch to label'}\n      >{material.show_label ? 'l' : 's'}\n      </Button>\n    );\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  recalculateYieldForGasProduct(material, reaction) {\n    const vesselVolume = GasPhaseReactionStore.getState().reactionVesselSizeValue;\n    const refMaterial = reaction.findFeedstockMaterial();\n    if (!refMaterial) {\n      return null;\n    }\n    const purity = refMaterial?.purity || 1;\n    const feedstockMolValue = calculateFeedstockMoles(vesselVolume, purity);\n    const result = material.amount_mol / feedstockMolValue;\n    if (!result) return 'n.a.';\n    return result > 1 ? '100%' : `${(result * 100).toFixed(0)}%`;\n  }\n\n  calculateYield(material, reaction) {\n    const refMaterial = reaction.getReferenceMaterial();\n    let calculateYield = material.equivalent;\n    if (material.gas_type === 'gas') {\n      calculateYield = this.recalculateYieldForGasProduct(material, reaction);\n    } else if (reaction.hasPolymers()) {\n      calculateYield = `${((material.equivalent || 0) * 100).toFixed(0)}%`;\n    } else if (refMaterial && (refMaterial.decoupled || material.decoupled)) {\n      calculateYield = 'n.a.';\n    } else if (material.purity < 1 && material.equivalent > 1) {\n      calculateYield = `${((material.purity / 100 * (material.amount_g * 1000)) * 100).toFixed(1)}%`;\n    } else {\n      calculateYield = `${((material.equivalent <= 1 ? material.equivalent || 0 : 1) * 100).toFixed(0)}%`;\n    }\n    return calculateYield;\n  }\n\n  conversionRateField(material) {\n    const { reaction } = this.props;\n    const condition = material.conversion_rate / 100 > 1;\n    const allowedConversionRateValue = material.conversion_rate && condition\n      ? 100 : material.conversion_rate;\n    return (\n      <div>\n        <NumeralInputWithUnitsCompo\n          precision={4}\n          value={allowedConversionRateValue || 'n.d.'}\n          unit=\"%\"\n          disabled={!permitOn(reaction)}\n          onChange={(e) => this.handleConversionRateChange(e)}\n          size=\"sm\"\n        />\n      </div>\n    );\n  }\n\n  yieldOrConversionRate(material) {\n    const { reaction, displayYieldField } = this.props;\n    if (displayYieldField === true || displayYieldField === null) {\n      return (\n        <div>\n          <FormControl\n            name=\"yield\"\n            type=\"text\"\n            bsClass=\"bs-form--compact form-control\"\n            bsSize=\"small\"\n            value={this.calculateYield(material, reaction) || 'n.d.'}\n            disabled\n          />\n        </div>\n      );\n    }\n    return this.conversionRateField(material);\n  }\n\n  equivalentOrYield(material) {\n    const { materialGroup } = this.props;\n    if (materialGroup === 'products') {\n      return this.yieldOrConversionRate(material);\n    }\n    return (\n      <NumeralInputWithUnitsCompo\n        size=\"sm\"\n        precision={4}\n        value={material.equivalent}\n        disabled={!permitOn(this.props.reaction) || ((((material.reference || false) && material.equivalent) !== false) || this.props.lockEquivColumn)}\n        onChange={e => this.handleEquivalentChange(e)}\n      />\n    );\n  }\n\n  gaseousInputFields(field, material) {\n    const gasPhaseData = material.gas_phase_data || {};\n    const { value, unit, isTimeField } = this.getFieldData(field, gasPhaseData);\n\n    const style = { maxWidth: '5px', paddingRight: '3px' };\n    const colSpan = isTimeField ? '2' : '1';\n    const readOnly = this.isFieldReadOnly(field);\n\n    const updateValue = this.getFormattedValue(value);\n\n    return (\n      <td colSpan={colSpan} style={style}>\n        <NumeralInputWithUnitsCompo\n          precision={4}\n          bsStyle=\"success\"\n          value={updateValue}\n          disabled={readOnly}\n          onMetricsChange={(e) => this.gasFieldsUnitsChanged(e, field)}\n          onChange={(e) => this.handleGasFieldsChange(field, e, value)}\n          unit={unit}\n        />\n      </td>\n    );\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  getFieldData(field, gasPhaseData) {\n    switch (field) {\n      case 'turnover_number':\n        return { value: gasPhaseData.turnover_number, unit: 'TON', isTimeField: false };\n      case 'part_per_million':\n        return { value: gasPhaseData.part_per_million, unit: 'ppm', isTimeField: false };\n      case 'time':\n        return { value: gasPhaseData.time?.value, unit: gasPhaseData.time?.unit, isTimeField: true };\n      default:\n        return { value: gasPhaseData[field]?.value, unit: gasPhaseData[field]?.unit, isTimeField: false };\n    }\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  isFieldReadOnly(field) {\n    return field === 'turnover_frequency' || field === 'turnover_number';\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  getFormattedValue(value) {\n    if (!value && value !== 0) {\n      return 'n.d';\n    }\n    return value || 0;\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  pseudoField() {\n    return (\n      <td>\n        <span style={{ opacity: 0 }} />\n      </td>\n    );\n  }\n\n  gaseousProductRow(material) {\n    const { materialGroup } = this.props;\n    if (materialGroup === 'products') {\n      return (\n        <tr style={{ width: '100%' }}>\n          {this.pseudoField()}\n          {this.pseudoField()}\n          {this.pseudoField()}\n          {this.pseudoField()}\n          {this.gaseousInputFields('time', material)}\n          {this.gaseousInputFields('temperature', material)}\n          {this.gaseousInputFields('part_per_million', material)}\n          {this.gaseousInputFields('turnover_number', material)}\n          {this.gaseousInputFields('turnover_frequency', material)}\n        </tr>\n      );\n    }\n    return null;\n  }\n\n  handleExternalLabelChange(event) {\n    const value = event.target.value;\n    if (this.props.onChange) {\n      const e = {\n        type: 'externalLabelChanged',\n        materialGroup: this.props.materialGroup,\n        sampleID: this.materialId(),\n        externalLabel: value\n      };\n      this.props.onChange(e);\n    }\n  }\n\n  handleExternalLabelCompleted() {\n    if (this.props.onChange) {\n      const event = {\n        type: 'externalLabelCompleted'\n      };\n      this.props.onChange(event);\n    }\n  }\n\n  handleReferenceChange(e) {\n    const value = e.target.value;\n    if (this.props.onChange) {\n      const event = {\n        type: 'referenceChanged',\n        materialGroup: this.props.materialGroup,\n        sampleID: this.materialId(),\n        value\n      };\n      this.props.onChange(event);\n    }\n  }\n\n  handleShowLabelChange(e) {\n    const value = e.target.checked;\n    if (this.props.onChange) {\n      const event = {\n        type: 'showLabelChanged',\n        materialGroup: this.props.materialGroup,\n        sampleID: this.materialId(),\n        value\n      };\n      this.props.onChange(event);\n    }\n  }\n\n  handleAmountChange(e) {\n    if (this.props.onChange && e) {\n      const event = {\n        amount: e,\n        type: 'amountChanged',\n        materialGroup: this.props.materialGroup,\n        sampleID: this.materialId(),\n      };\n      this.props.onChange(event);\n    }\n  }\n\n  handleAmountTypeChange(e) {\n    if (this.props.onChange && e) {\n      const event = {\n        amountType: e,\n        type: 'amountTypeChanged',\n        materialGroup: this.props.materialGroup,\n        sampleID: this.materialId(),\n      };\n      this.props.onChange(event);\n    }\n  }\n\n  handleCoefficientChange(e) {\n    const { onChange, materialGroup } = this.props;\n    const coefficient = e.value;\n    if (onChange) {\n      const event = {\n        coefficient,\n        type: 'coefficientChanged',\n        materialGroup,\n        sampleID: this.materialId()\n      };\n      onChange(event);\n    }\n  }\n\n  handleAmountUnitChange(e, value) {\n    if (e.value === value) return;\n    if (this.props.onChange && e) {\n      const event = {\n        amount: e,\n        type: 'amountUnitChanged',\n        materialGroup: this.props.materialGroup,\n        sampleID: this.materialId(),\n\n      };\n      this.props.onChange(event);\n    }\n  }\n\n  handleMetricsChange(e) {\n    const { materialGroup, onChange } = this.props;\n    if (onChange && e) {\n      const event = {\n        metricUnit: e.metricUnit,\n        metricPrefix: e.metricPrefix,\n        type: 'MetricsChanged',\n        materialGroup,\n        sampleID: this.materialId(),\n\n      };\n      onChange(event);\n    }\n  }\n\n  gasFieldsUnitsChanged(e, field) {\n    const { materialGroup, onChange } = this.props;\n    if (onChange && e) {\n      const event = {\n        unit: e.metricUnit,\n        value: e.value === '' ? 0 : e.value,\n        field,\n        type: 'gasFieldsUnitsChanged',\n        materialGroup,\n        sampleID: this.materialId(),\n\n      };\n      onChange(event);\n    }\n  }\n\n  handleLoadingChange(newLoading) {\n    this.props.material.residues[0].custom_info.loading = newLoading.value;\n\n    // just recalculate value in mg using the new loading value\n    if (this.props.onChange) {\n      const event = {\n        type: 'amountChanged',\n        materialGroup: this.props.materialGroup,\n        sampleID: this.materialId(),\n        amount: this.props.material.amount\n      };\n      this.props.onChange(event);\n    }\n  }\n\n  handleEquivalentChange(e) {\n    const equivalent = e.value;\n    if (this.props.onChange && e) {\n      const event = {\n        type: 'equivalentChanged',\n        materialGroup: this.props.materialGroup,\n        sampleID: this.materialId(),\n        equivalent\n      };\n      this.props.onChange(event);\n    }\n  }\n\n  handleGasFieldsChange(field, e, currentValue) {\n    const { materialGroup, onChange } = this.props;\n    if (onChange && e.value !== undefined && e.unit !== undefined && e.value !== currentValue) {\n      const event = {\n        type: 'gasFieldsChanged',\n        materialGroup,\n        sampleID: this.materialId(),\n        value: e.value,\n        unit: e.unit,\n        field,\n      };\n      onChange(event);\n    }\n  }\n\n  handleConversionRateChange(e) {\n    const { onChange, materialGroup } = this.props;\n    const conversionRate = e.value;\n    if (onChange && e) {\n      const event = {\n        type: 'conversionRateChanged',\n        materialGroup,\n        sampleID: this.materialId(),\n        conversionRate\n      };\n      onChange(event);\n    }\n  }\n\n  createParagraph(m) {\n    const { materialGroup } = this.props;\n    let molName = m.molecule_name_hash?.label;\n    if (!molName) { molName = m.molecule.iupac_name; }\n    if (!molName) { molName = m.molecule.sum_formular; }\n\n    const gUnit = correctPrefix(m.amount_g, 3);\n    const lUnit = correctPrefix(m.amount_l, 3);\n    const molUnit = correctPrefix(m.amount_mol, 3); // ELN issue#829\n\n    const grm = gUnit ? `${gUnit}g, ` : '';\n    const vol = lUnit ? `${lUnit}L, ` : '';\n    const solVol = vol.substr(0, vol.length - 2);\n    const mol = molUnit ? `${molUnit}mol, ` : '';\n    const mlt = m.molarity_value === 0.0 ?\n      '' : `${validDigit(m.molarity_value, 3)}${m.molarity_unit}, `;\n    const eqv = `${validDigit(m.equivalent, 3)}`;\n    const yld = `${Math.round(m.equivalent * 100)}%`;\n\n    if (m.gas_type === 'gas') {\n      const ton = `TON: ${validDigit(m.gas_phase_data.turnover_number, 3)}, `;\n      const tofUnit = (m.gas_phase_data.turnover_frequency.unit).split('TON')[1];\n      const tofValue = m.gas_phase_data.turnover_frequency.value;\n      const tof = `TOF: ${validDigit(tofValue, 3)}${tofUnit}, `;\n      return `${molName} (${mol}${ton}${tof}${yld})`;\n    }\n\n    switch (materialGroup) {\n      case 'purification_solvents':\n      case 'solvents': {\n        return `${molName} (${solVol})`;\n      }\n      case 'products': {\n        return `${molName} (${grm}${vol}${mol}${mlt}${yld} yield)`;\n      }\n      default: {\n        return `${molName} (${grm}${vol}${mol}${mlt}${eqv} equiv)`;\n      }\n    }\n  }\n\n  handleAddToDesc(material) {\n    if (this.props.onChange) {\n      const event = {\n        type: 'addToDesc',\n        paragraph: this.createParagraph(material),\n      };\n      this.props.onChange(event);\n    }\n  }\n\n  handleDrySolventChange(event) {\n    const value = event.target.checked;\n    if (this.props.onChange) {\n      const e = {\n        type: 'drysolventChanged',\n        materialGroup: this.props.materialGroup,\n        sampleID: this.materialId(),\n        dry_solvent: value\n      };\n      this.props.onChange(e);\n    }\n  }\n\n  materialId() {\n    return this.material().id;\n  }\n\n  material() {\n    return this.props.material;\n  }\n\n  amountField(material, metricPrefixes, reaction, massBsStyle, metric) {\n    const { lockEquivColumn, materialGroup } = this.props;\n    return (\n      <OverlayTrigger\n        delay=\"100\"\n        placement=\"top\"\n        overlay={\n          <Tooltip id=\"molecular-weight-info\">{this.generateMolecularWeightTooltipText(material, reaction)}</Tooltip>\n        }\n      >\n        <div>\n          <NumeralInputWithUnitsCompo\n            key={material.id}\n            value={material.amount_g}\n            unit=\"g\"\n            metricPrefix={metric}\n            metricPrefixes={metricPrefixes}\n            precision={4}\n            disabled={\n              !permitOn(reaction)\n              || (materialGroup !== 'products' && !material.reference && lockEquivColumn)\n              || material.gas_type === 'feedstock' || material.gas_type === 'gas'\n            }\n            onChange={(e) => this.debounceHandleAmountUnitChange(e, material.amount_g)}\n            onMetricsChange={this.handleMetricsChange}\n            bsStyle={material.error_mass ? 'error' : massBsStyle}\n            name=\"molecular-weight\"\n          />\n        </div>\n      </OverlayTrigger>\n    );\n  }\n\n  generalMaterial(props, style) {\n    const { material, deleteMaterial, connectDragSource, connectDropTarget,\n      showLoadingColumn, reaction } = props;\n    const isTarget = material.amountType === 'target';\n    const massBsStyle = material.amount_unit === 'g' ? 'success' : 'default';\n    const mol = material.amount_mol;\n    //const concn = mol / reaction.solventVolume;\n    const mw = material.decoupled ?\n      (material.molecular_mass) : (material.molecule && material.molecule.molecular_weight);\n\n    const metricPrefixes = ['m', 'n', 'u'];\n    const metric = (material.metrics && material.metrics.length > 2 && metricPrefixes.indexOf(material.metrics[0]) > -1) ? material.metrics[0] : 'm';\n    const metricPrefixesMol = ['m', 'n'];\n    const metricMol = (material.metrics && material.metrics.length > 2 && metricPrefixes.indexOf(material.metrics[2]) > -1) ? material.metrics[2] : 'm';\n    const metricPrefixesMolConc = ['m', 'n'];\n    const metricMolConc = (material.metrics && material.metrics.length > 3 && metricPrefixes.indexOf(material.metrics[3]) > -1) ? material.metrics[3] : 'm';\n\n    const inputsStyle = {\n      paddingRight: 2,\n      paddingLeft: 2,\n    };\n\n    return (\n      <tbody>\n        <tr className=\"general-material\">\n          {compose(connectDragSource, connectDropTarget)(\n            <td className={`drag-source ${permitCls(reaction)}`} style={style}>\n              <span className=\"text-info fa fa-arrows\" />\n            </td>,\n            { dropEffect: 'copy' }\n          )}\n\n          <td style={{ width: '22%', maxWidth: '50px' }}>\n            {this.materialNameWithIupac(material)}\n          </td>\n\n          {this.materialRef(material)}\n\n          <td style={{ inputsStyle }}>\n            {this.materialShowLabel(material)}\n          </td>\n\n          <td style={{ minWidth: '30px', inputsStyle }}>\n            {this.switchTargetReal(isTarget)}\n          </td>\n\n          <td style={{ minWidth: '35px' }}>\n            <OverlayTrigger\n              placement=\"top\"\n              overlay={<Tooltip id=\"reaction-coefficient-info\"> Reaction Coefficient </Tooltip>}>\n              <div>\n                <NumeralInputWithUnitsCompo\n                  key={material.id}\n                  value={material.coefficient ?? 1}\n                  onChange={this.handleCoefficientChange}\n                  name=\"coefficient\"\n                />\n              </div>\n            </OverlayTrigger>\n          </td>\n          <td>\n            {this.amountField(material, metricPrefixes, reaction, massBsStyle, metric)}\n          </td>\n          {this.materialVolume(material)}\n          <td>\n            <NumeralInputWithUnitsCompo\n              key={material.id}\n              value={material.amount_mol}\n              unit=\"mol\"\n              metricPrefix={metricMol}\n              metricPrefixes={metricPrefixes}\n              precision={4}\n              disabled={!permitOn(reaction) || (this.props.materialGroup === 'products' || (!material.reference && this.props.lockEquivColumn))}\n              onChange={e => this.handleAmountUnitChange(e, material.amount_mol)}\n              onMetricsChange={this.handleMetricsChange}\n              bsStyle={material.amount_unit === 'mol' ? 'success' : 'default'}\n            />\n          </td>\n\n          {this.materialLoading(material, showLoadingColumn)}\n\n          <td style={{ maxWidth: '4%' }}>\n            <NumeralInputWithUnitsCompo\n              key={material.id}\n              value={material.concn}\n              unit=\"mol/l\"\n              metricPrefix={metricMolConc}\n              metricPrefixes={metricPrefixesMolConc}\n              precision={4}\n              disabled\n              onChange={(e) => this.handleAmountUnitChange(e, material.concn)}\n              onMetricsChange={this.handleMetricsChange}\n            />\n          </td>\n\n          <td style={{ minWidth: '35px' }}>\n            {this.equivalentOrYield(material)}\n          </td>\n          <td>\n            <Button\n              disabled={!permitOn(reaction)}\n              bsStyle=\"danger\"\n              bsSize=\"small\"\n              onClick={() => deleteMaterial(material)}\n            >\n              <i className=\"fa fa-trash-o\" />\n            </Button>\n          </td>\n        </tr>\n        {material.gas_type === 'gas'\n        && reaction.gaseous ? this.gaseousProductRow(material) : null}\n      </tbody>\n    );\n  }\n\n  generateMolecularWeightTooltipText(sample, reaction) {\n    const isProduct = reaction.products.includes(sample);\n    const molecularWeight = sample.decoupled ?\n      (sample.molecular_mass) : (sample.molecule && sample.molecule.molecular_weight);\n    let theoreticalMassPart = \"\";\n    if (isProduct && sample.maxAmount) {\n      theoreticalMassPart = `, max theoretical mass: ${Math.round(sample.maxAmount * 10000) / 10} mg`;\n    }\n    return `molar mass: ${molecularWeight} g/mol` + theoreticalMassPart;\n  }\n\n  toggleTarget(isTarget) {\n    if (this.props.materialGroup !== 'products') {\n      this.handleAmountTypeChange(!isTarget ? 'target' : 'real');\n    }\n  }\n\n  solventMaterial(props, style) {\n    const { material, deleteMaterial, connectDragSource,\n      connectDropTarget, reaction } = props;\n    const isTarget = material.amountType === 'target';\n    const mw = material.molecule && material.molecule.molecular_weight;\n    const drySolvTooltip = <Tooltip>Dry Solvent</Tooltip>;\n    return (\n      <tr className=\"solvent-material\">\n        {compose(connectDragSource, connectDropTarget)(\n          <td className={`drag-source ${permitCls(reaction)}`} style={style}>\n            <span className=\"text-info fa fa-arrows\" />\n          </td>,\n          { dropEffect: 'copy' }\n        )}\n\n        <td style={{ width: '25%', maxWidth: '50px' }}>\n          {this.materialNameWithIupac(material)}\n        </td>\n        <td>\n          <OverlayTrigger placement=\"top\" overlay={drySolvTooltip}>\n            <Checkbox\n              checked={material.dry_solvent}\n              onChange={(event) => this.handleDrySolventChange(event)}\n            />\n          </OverlayTrigger>\n        </td>\n        <td>\n          {this.switchTargetReal(isTarget)}\n        </td>\n\n        <td>\n          <InputGroup>\n            <OverlayTrigger\n              placement=\"top\"\n              overlay={<Tooltip id=\"molecular-weight-info\">{material.amount_g} g - {mw} g/mol</Tooltip>}\n            >\n              <div>\n                <FormControl\n                  disabled={!permitOn(reaction)}\n                  type=\"text\"\n                  bsClass=\"bs-form--compact form-control\"\n                  bsSize=\"small\"\n                  value={material.external_label}\n                  placeholder={material.molecule.iupac_name}\n                  onChange={event => this.handleExternalLabelChange(event)}\n                />\n              </div>\n            </OverlayTrigger>\n            <InputGroup.Button>\n              <OverlayTrigger placement=\"bottom\" overlay={refreshSvgTooltip}>\n                <Button\n                  disabled={!permitOn(reaction)}\n                  active\n                  onClick={e => this.handleExternalLabelCompleted(e)}\n                  bsSize=\"small\"\n                ><i className=\"fa fa-refresh\" /></Button>\n              </OverlayTrigger>\n            </InputGroup.Button>\n          </InputGroup>\n        </td>\n\n        {this.materialVolume(material)}\n\n        <td>\n          <FormControl\n            type=\"text\"\n            bsClass=\"bs-form--compact form-control\"\n            bsSize=\"small\"\n            value={solvConcentration(material, props.reaction.purificationSolventVolume)}\n            disabled\n          />\n        </td>\n\n        <td>\n          <Button\n            disabled={!permitOn(reaction)}\n            bsStyle=\"danger\"\n            bsSize=\"small\"\n            onClick={() => deleteMaterial(material)}\n          ><i className=\"fa fa-trash-o\" /></Button>\n        </td>\n      </tr>\n    );\n  }\n\n  switchTargetReal(isTarget, style = { padding: '5px 4px', width: '16px' }) {\n    return (\n      <Button\n        disabled={!permitOn(this.props.reaction)}\n        active\n        style={style}\n        onClick={() => this.toggleTarget(isTarget)}\n        disabled={this.props.reaction.is_published == true}\n        bsStyle={isTarget ? 'success' : 'primary'}\n        bsSize=\"small\"\n      >{isTarget ? 't' : 'r'}</Button>\n    );\n  }\n\n  handleGasTypeChange(gasType, value) {\n    const { materialGroup, onChange } = this.props;\n    if (onChange) {\n      const event = {\n        type: gasType,\n        materialGroup,\n        sampleID: this.materialId(),\n        value,\n      };\n      onChange(event);\n    }\n  }\n\n  gasType(material) {\n    let gasTypeValue = material.gas_type || 'off';\n    let tooltipText = 'This material is currently marked as non gaseous type';\n    if (material.gas_type === 'off') {\n      gasTypeValue = 'off';\n    } else if (material.gas_type === 'gas') {\n      gasTypeValue = 'gas';\n      tooltipText = 'Gas';\n    } else if (material.gas_type === 'feedstock') {\n      gasTypeValue = 'FES';\n      tooltipText = 'Feedstock reference';\n    } else if (material.gas_type === 'catalyst') {\n      gasTypeValue = 'CAT';\n      tooltipText = 'Catalyst reference';\n    }\n    const gasTypes = ['feedstock', 'catalyst', 'gas'];\n    const gasTypeStatus = gasTypes.includes(material?.gas_type);\n    const feedstockStatus = gasTypeStatus ? '#009a4d' : 'grey';\n    const tooltip = <Tooltip id=\"feedstockGas\">{tooltipText}</Tooltip>;\n    return (\n      <div style={{ paddingRight: '3px' }}>\n        <OverlayTrigger placement=\"bottom\" overlay={tooltip}>\n          <Button\n            bsStyle=\"primary\"\n            bsSize=\"xsmall\"\n            onClick={() => this.handleGasTypeChange('gasType', gasTypeValue)}\n            disabled={false}\n            style={{ backgroundColor: feedstockStatus, width: '35px' }}\n          >\n            {gasTypeValue}\n          </Button>\n        </OverlayTrigger>\n      </div>\n    );\n  }\n\n  materialNameWithIupac(material) {\n    const { index, materialGroup, reaction } = this.props;\n    // Skip shortLabel for reactants and solvents/purification_solvents\n    const skipIupacName = (\n      materialGroup === 'reactants' ||\n      materialGroup === 'solvents' ||\n      materialGroup === 'purification_solvents'\n    );\n    let materialName = '';\n    let moleculeIupacName = '';\n    const iupacStyle = {\n      display: 'block',\n      whiteSpace: 'nowrap',\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      maxWidth: '100%'\n    };\n\n    const idCheck = /^\\d+$/;\n\n    if (skipIupacName) {\n      let materialDisplayName = material.molecule_iupac_name || material.name;\n      if (materialGroup === 'solvents' || materialGroup === 'purification_solvents') {\n        materialDisplayName = material.external_label || materialDisplayName;\n      }\n      if (materialDisplayName === null || materialDisplayName === '') {\n        materialDisplayName = (\n          <span>\n            <SampleName sample={material} />\n          </span>\n        );\n      }\n\n      if (idCheck.test(material.id)) {\n        materialName = (\n          <a\n            role=\"link\"\n            tabIndex={0}\n            onClick={() => this.handleMaterialClick(material)}\n            style={{ cursor: 'pointer' }}\n          ><span>{materialDisplayName}</span></a>\n        );\n      } else {\n        materialName = <span>{materialDisplayName}</span>;\n      }\n    } else {\n      moleculeIupacName = material.molecule_iupac_name;\n      const materialDisplayName = material.title() === ''\n        ? <SampleName sample={material} />\n        : material.title();\n      materialName = (\n        <a\n          role=\"link\"\n          tabIndex={0}\n          onClick={() => this.handleMaterialClick(material)}\n          style={{ cursor: 'pointer' }}\n        ><span>{materialDisplayName}</span></a>\n      );\n\n      if (material.isNew) { materialName = materialDisplayName; }\n    }\n    let br = <br />;\n    if (moleculeIupacName === '') {\n      iupacStyle.display = 'none';\n      br = '';\n    }\n    const serialCode = SampleCode(index, materialGroup);\n\n    const addToDesc = (e) => {\n      e.stopPropagation();\n      this.handleAddToDesc(material);\n    };\n\n    return (\n      <div style={{ display: 'inline-block', maxWidth: '100%' }}>\n        <div className=\"inline-inside\">\n          {reaction.gaseous && materialGroup !== 'solvents'\n            ? this.gasType(material) : null}\n          <OverlayTrigger placement=\"top\" overlay={AddtoDescToolTip}>\n            <Button bsStyle=\"primary\" bsSize=\"xsmall\" onClick={addToDesc} disabled={!permitOn(reaction)}>\n              {serialCode}\n            </Button>\n          </OverlayTrigger>\n          &nbsp;\n          <OverlayTrigger placement=\"bottom\" overlay={iupacNameTooltip(material)}>\n            <div className={'reaction-material-link'}>\n              {materialName}\n            </div>\n          </OverlayTrigger>\n        </div>\n        <span style={iupacStyle}>\n          {moleculeIupacName}\n        </span>\n      </div>\n    );\n  }\n\n  render() {\n    const {\n      material, isDragging, canDrop, isOver, materialGroup\n    } = this.props;\n    const style = { padding: '0' };\n    if (isDragging) { style.opacity = 0.3; }\n    if (canDrop) {\n      style.borderStyle = 'dashed';\n      style.borderWidth = 2;\n    }\n    if (isOver) {\n      style.borderColor = '#337ab7';\n      style.opacity = 0.6;\n      style.backgroundColor = '#337ab7';\n    }\n\n    if (this.props.materialGroup === 'products') {\n      material.amountType = 'real'; // always take real amount for product\n    }\n    const sp = materialGroup === 'solvents' || materialGroup === 'purification_solvents';\n    const component = sp ?\n      this.solventMaterial(this.props, style) :\n      this.generalMaterial(this.props, style);\n\n    return component;\n  }\n}\n\nexport default compose(\n  DragSource(\n    DragDropItemTypes.MATERIAL,\n    matSource,\n    matSrcCollect,\n  ),\n  DropTarget(\n    [DragDropItemTypes.SAMPLE, DragDropItemTypes.MOLECULE, DragDropItemTypes.MATERIAL],\n    matTarget,\n    matTagCollect,\n  ),\n)(Material);\n\nMaterial.propTypes = {\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n  material: PropTypes.instanceOf(Sample).isRequired,\n  materialGroup: PropTypes.string.isRequired,\n  deleteMaterial: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  showLoadingColumn: PropTypes.bool.isRequired,\n  index: PropTypes.number,\n  isDragging: PropTypes.bool,\n  canDrop: PropTypes.bool,\n  isOver: PropTypes.bool,\n  lockEquivColumn: PropTypes.bool.isRequired,\n  displayYieldField: PropTypes.bool,\n};\n","import React, { Component } from 'react';\n// import PropTypes from 'prop-types';\nimport { FormControl } from 'react-bootstrap';\n\nimport NumeralInputWithUnitsCompo from 'src/apps/mydb/elements/details/NumeralInputWithUnitsCompo';\n\nconst source = {\n  beginDrag(props) {\n    return props;\n  }\n};\n\nconst collect = (connect, monitor) => ({\n  connectDragSource: connect.dragSource(),\n  isDragging: monitor.isDragging()\n});\n\nexport default class MaterialCalculations extends Component {\n\n  notApplicableInput(inputsStyle) {\n    return (\n      <td style={inputsStyle}>\n        <FormControl type=\"text\"\n          value=\"N / A\"\n          disabled={true}\n        />\n      </td>\n    )\n  }\n\n  materialVolume(material, inputsStyle) {\n\n    const metricPrefixes = ['m', 'n', 'u'];\n    const metric = (material.metrics && material.metrics.length > 2 && metricPrefixes.indexOf(material.metrics[1]) > -1) ? material.metrics[1] : 'm';\n\n    if (material.contains_residues)\n      return this.notApplicableInput(inputsStyle);\n    else\n      return (\n        <td style={inputsStyle}>\n          <NumeralInputWithUnitsCompo\n            key={material.id}\n            value={material.amount_ml || ''}\n            unit='l'\n            metricPrefix={metric}\n            metricPrefixes={metricPrefixes}\n            precision={5}\n            disabled\n            readOnly\n          />\n        </td>\n      )\n  }\n\n  render() {\n    const { material, deleteMaterial, isDragging, connectDragSource } = this.props;\n\n    const metricPrefixes = ['m', 'n', 'u'];\n    const metric = (material.metrics && material.metrics.length > 2 && metricPrefixes.indexOf(material.metrics[0]) > -1) ? material.metrics[0] : 'm';\n\n    const metricPrefixesMol = ['m', 'n'];\n    const metricMol = (material.metrics && material.metrics.length > 2 && metricPrefixes.indexOf(material.metrics[2]) > -1) ? material.metrics[2] : 'm';\n\n    const inputsStyle = {\n      paddingTop: 15,\n      paddingRight: 2,\n      paddingLeft: 2,\n    };\n\n    return <tr>\n      <td style={inputsStyle}></td>\n      <td style={inputsStyle}></td>\n      <td style={inputsStyle}></td>\n      <td style={inputsStyle}></td>\n      <td style={inputsStyle}></td>\n      <td style={inputsStyle}><label>Adjusted: </label></td>\n      <td style={inputsStyle}>\n        <NumeralInputWithUnitsCompo\n          key={material.id}\n          value={material.adjusted_amount_g}\n          unit='g'\n          metricPrefix={metric}\n          metricPrefixes={metricPrefixes}\n          precision={5}\n          disabled\n          readOnly\n        />\n      </td>\n\n      {this.materialVolume(material, inputsStyle)}\n\n      <td style={inputsStyle}>\n        <NumeralInputWithUnitsCompo\n          key={'adjusted_amount_mol' + material.id.toString()}\n          value={material.adjusted_amount_mol}\n          unit='mol'\n          metricPrefix={metricMol}\n          metricPrefixes={metricPrefixesMol}\n          precision={4}\n          disabled\n          readOnly\n        />\n      </td>\n\n      <td style={inputsStyle}>\n        <NumeralInputWithUnitsCompo\n          key={'adjusted_loading' + material.id.toString()}\n          value={material.adjusted_loading}\n          unit='mmol/g'\n          metricPrefix='n'\n          metricPrefixes={['n']}\n          precision={3}\n          disabled\n          readOnly\n        />\n      </td>\n\n      <td style={inputsStyle}>\n        <FormControl\n          type=\"text\"\n          value={`${((material.adjusted_equivalent || 0) * 100).toFixed(1)} %`}\n          disabled\n        />\n      </td>\n      <td></td>\n    </tr>\n  }\n}\n","export const ionic_liquids = {\n  \"1-(2-Hydroxyethyl)-3-methylimidazolium Chloride\": \"C[N+]1=CN(CCO)C=C1.[Cl-]\",\n  \"1-(2-Hydroxyethyl)-3-methylimidazolium Tetrafluoroborate\": \"C[N+]1=CN(CCO)C=C1.F[B-](F)(F)F\",\n  \"1,2-Dimethyl-3-propylimidazolium Iodide\": \"CCC[N+]1=C(C)N(C)C=C1.[I-]\",\n  \"1,3-Dimethylimidazolium Chloride\": \"C[N+]1=CN(C)C=C1.[Cl-]\",\n  \"1,3-Dimethylimidazolium Dimethyl Phosphate\": \"C[N+]1=CN(C)C=C1.O=P(OC)([O-])OC\",\n  \"1,3-Dimethylimidazolium Iodide\": \"C[N+]1=CN(C)C=C1.[I-]\",\n  \"1,3-Dimethylimidazolium Methyl Sulfate\": \"C[N+]1=CN(C)C=C1.O=S(OC)([O-])=O\",\n  \"1-Allyl-3-methylimidazolium Chloride\": \"C[N+]1=CN(CC=C)C=C1.[Cl-]\",\n  \"1-Butyl-1-methylpiperidinium Bis(trifluoromethanesulfonyl)imide\": \"C[N+]1(CCCC)CCCCC1.O=S([N-]S(=O)(C(F)(F)F)=O)(C(F)(F)F)=O\",\n  \"1-Butyl-1-methylpiperidinium Bromide\": \"C[N+]1(CCCC)CCCCC1.[Br-]\",\n  \"1-Butyl-1-methylpyrrolidinium Bis(trifluoromethanesulfonyl)imide\": \"C[N+]1(CCCC)CCCC1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O\",\n  \"1-Butyl-1-methylpyrrolidinium Bromide\": \"C[N+]1(CCCC)CCCC1.[Br-]\",\n  \"1-Butyl-1-methylpyrrolidinium Chloride\": \"C[N+]1(CCCC)CCCC1.[Cl-]\",\n  \"1-Butyl-1-methylpyrrolidinium Dicyanamide\": \"C[N+]1(CCCC)CCCC1.N#C[N-]C#N\",\n  \"1-Butyl-1-methylpyrrolidinium Trifluoromethanesulfonate\": \"C[N+]1(CCCC)CCCC1.O=S(C(F)(F)F)([O-])=O\",\n  \"1-Butyl-2,3-dimethylimidazolium Bis(trifluoromethanesulfonyl)imide\": \"O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC1=[N+](C)C=CN1CCCC\",\n  \"1-Butyl-2,3-dimethylimidazolium Chloride\": \"C[N+]1=C(C)N(CCCC)C=C1.[Cl-]\",\n  \"1-Butyl-2,3-dimethylimidazolium Hexafluorophosphate\": \"C[N+]1=C(C)N(CCCC)C=C1.F[P-](F)(F)(F)(F)F\",\n  \"1-Butyl-2,3-dimethylimidazolium Tetrafluoroborate\": \"C[N+]1=C(C)N(CCCC)C=C1.F[B-](F)(F)F\",\n  \"1-Butyl-2,3-dimethylimidazolium Trifluoromethanesulfonate\": \"C[N+]1=C(C)N(CCCC)C=C1.O=S(C(F)(F)F)([O-])=O\",\n  \"1-Butyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide\": \"C[N+]1=CN(CCCC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O\",\n  \"1-Butyl-3-methylimidazolium Bromide\": \"C[N+]1=CN(CCCC)C=C1.[Br-]\",\n  \"1-Butyl-3-methylimidazolium Chloride\": \"C[N+]1=CN(CCCC)C=C1.[Cl-]\",\n  \"1-Butyl-3-methylimidazolium Dicyanamide\": \"C[N+]1=CN(CCCC)C=C1.N#C[N-]C#N\",\n  \"1-Butyl-3-methylimidazolium Hexafluorophosphate\": \"C[N+]1=CN(CCCC)C=C1.F[P-](F)(F)(F)(F)F\",\n  \"1-Butyl-3-methylimidazolium Iodide\": \"C[N+]1=CN(CCCC)C=C1.[I-]\",\n  \"1-Butyl-3-methylimidazolium Methanesulfonate\": \"C[N+]1=CN(CCCC)C=C1.CS(=O)([O-])=O\",\n  \"1-Butyl-3-methylimidazolium Methyl Sulfate\": \"C[N+]1=CN(CCCC)C=C1.O=S(OC)([O-])=O\",\n  \"1-Butyl-3-methylimidazolium Tetrachloroferrate\": \"C[N+]1=CN(CCCC)C=C1.Cl[Fe-](Cl)(Cl)Cl\",\n  \"1-Butyl-3-methylimidazolium Tetrafluoroborate\": \"C[N+]1=CN(CCCC)C=C1.F[B-](F)(F)F\",\n  \"1-Butyl-3-methylimidazolium Thiocyanate\": \"C[N+]1=CN(CCCC)C=C1.[S-]C#N\",\n  \"1-Butyl-3-methylimidazolium Tribromide\": \"C[N+]1=CN(CCCC)C=C1.[Br-].[Br-].[Br-]\",\n  \"1-Butyl-3-methylimidazolium Tricyanomethanide\": \"C[N+]1=CN(CCCC)C=C1.N#C[C-](C#N)C#N\",\n  \"1-Butyl-3-methylimidazolium Trifluoro(trifluoromethyl)borate\": \"C[N+]1=CN(CCCC)C=C1.FC([B-](F)(F)F)(F)F\",\n  \"1-Butyl-3-methylimidazolium Trifluoroacetate\": \"C[N+]1=CN(CCCC)C=C1.O=C([O-])C(F)(F)F\",\n  \"1-Butyl-3-methylimidazolium Trifluoromethanesulfonate\": \"C[N+]1=CN(CCCC)C=C1.O=S(C(F)(F)F)([O-])=O\",\n  \"1-Butyl-3-methylpyridinium Bromide\": \"CC1=C[N+](CCCC)=CC=C1.[Br-]\",\n  \"1-Butyl-3-methylpyridinium Chloride\": \"CC1=C[N+](CCCC)=CC=C1.[Cl-]\",\n  \"1-Butyl-4-methylpyridinium Bromide\": \"CC1=CC=[N+](CCCC)C=C1.[Br-]\",\n  \"1-Butyl-4-methylpyridinium Chloride\": \"CC1=CC=[N+](CCCC)C=C1.[Cl-]\",\n  \"1-Butyl-4-methylpyridinium Hexafluorophosphate\": \"CC1=CC=[N+](CCCC)C=C1.F[P-](F)(F)(F)(F)F\",\n  \"1-Butylpyridinium Bis(trifluoromethanesulfonyl)imide\": \"O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CCCC[N+]1=CC=CC=C1\",\n  \"1-Butylpyridinium Bromide\": \"CCCC[N+]1=CC=CC=C1.[Br-]\",\n  \"1-Butylpyridinium Chloride\": \"CCCC[N+]1=CC=CC=C1.[Cl-]\",\n  \"1-Butylpyridinium Hexafluorophosphate\": \"CCCC[N+]1=CC=CC=C1.F[P-](F)(F)(F)(F)F\",\n  \"1-Butylpyridinium Tetrafluoroborate\": \"CCCC[N+]1=CC=CC=C1.F[B-](F)(F)F\",\n  \"1-Decyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide\": \"C[N+]1=CN(CCCCCCCCCC)C=C1.O=S(C(F)(F)F)([N-]S(C(F)(F)F)(=O)=O)=O\",\n  \"1-Decyl-3-methylimidazolium Bromide\": \"C[N+]1=CN(CCCCCCCCCC)C=C1.[Br-]\",\n  \"1-Decyl-3-methylimidazolium Chloride\": \"C[N+]1=CN(CCCCCCCCCC)C=C1.[Cl-]\",\n  \"1-Ethyl-1-methylpyrrolidinium Bromide\": \"C[N+]1(CC)CCCC1.[Br-]\",\n  \"1-Ethyl-1-methylpyrrolidinium Tetrafluoroborate\": \"C[N+]1(CC)CCCC1.F[B-](F)(F)F\",\n  \"1-Ethyl-2,3-dimethylimidazolium Bis(trifluoromethanesulfonyl)imide\": \"O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC1=[N+](C)C=CN1CC\",\n  \"1-Ethyl-2-methylpyridinium Bromide\": \"CC1=CC=CC=[N+]1CC.[Br-]\",\n  \"1-Ethyl-3-(hydroxymethyl)pyridinium Ethyl Sulfate\": \"OCC1=C[N+](CC)=CC=C1.O=S(OCC)([O-])=O\",\n  \"1-Ethyl-3-methylimidazolium Acetate\": \"C[N+]1=CN(CC)C=C1.CC([O-])=O\",\n  \"1-Ethyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide\": \"C[N+]1=CN(CC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O\",\n  \"1-Ethyl-3-methylimidazolium Bromide\": \"C[N+]1=CN(CC)C=C1.[Br-]\",\n  \"1-Ethyl-3-methylimidazolium Chloride\": \"C[N+]1=CN(CC)C=C1.[Cl-]\",\n  \"1-Ethyl-3-methylimidazolium Dicyanamide\": \"CCN1C=[N+](C)C=C1.N#C[N-]C#N\",\n  \"1-Ethyl-3-methylimidazolium Diethyl Phosphate\": \"C[N+]1=CN(CC)C=C1.O=P(OCC)([O-])OCC\",\n  \"1-Ethyl-3-methylimidazolium Ethyl Sulfate\": \"C[N+]1=CN(CC)C=C1.O=S(OCC)([O-])=O\",\n  \"1-Ethyl-3-methylimidazolium Hexafluorophosphate\": \"C[N+]1=CN(CC)C=C1.F[P-](F)(F)(F)(F)F\",\n  \"1-Ethyl-3-methylimidazolium Hydrogen Sulfate\": \"C[N+]1=CN(CC)C=C1.O=S(O)([O-])=O\",\n  \"1-Ethyl-3-methylimidazolium Iodide\": \"C[N+]1=CN(CC)C=C1.[I-]\",\n  \"1-Ethyl-3-methylimidazolium Methanesulfonate\": \"C[N+]1=CN(CC)C=C1.CS(=O)([O-])=O\",\n  \"1-Ethyl-3-methylimidazolium Methyl Sulfate\": \"C[N+]1=CN(CC)C=C1.O=S(OC)([O-])=O\",\n  \"1-Ethyl-3-methylimidazolium Nitrate\": \"C[N+]1=CN(CC)C=C1.[O-][N+]([O-])=O\",\n  \"1-Ethyl-3-methylimidazolium Tetrachloroferrate\": \"C[N+]1=CN(CC)C=C1.Cl[Fe-](Cl)(Cl)Cl\",\n  \"1-Ethyl-3-methylimidazolium Tetrafluoroborate\": \"C[N+]1=CN(CC)C=C1.F[B-](F)(F)F\",\n  \"1-Ethyl-3-methylimidazolium Thiocyanate\": \"C[N+]1=CN(CC)C=C1.[S-]C#N\",\n  \"1-Ethyl-3-methylimidazolium Tricyanomethanide\": \"C[N+]1=CN(CC)C=C1.N#C[C-](C#N)C#N\",\n  \"1-Ethyl-3-methylimidazolium Trifluoro(trifluoromethyl)borate\": \"C[N+]1=CN(CC)C=C1.FC([B-](F)(F)F)(F)F\",\n  \"1-Ethyl-3-methylimidazolium Trifluoroacetate\": \"C[N+]1=CN(CC)C=C1.O=C([O-])C(F)(F)F\",\n  \"1-Ethyl-3-methylimidazolium Trifluoromethanesulfonate\": \"C[N+]1=CN(CC)C=C1.O=S(C(F)(F)F)([O-])=O\",\n  \"1-Ethyl-3-methylimidazolium p-Toluenesulfonate\": \"C[N+]1=CN(CC)C=C1.CC2=CC=C(S(=O)([O-])=O)C=C2\",\n  \"1-Ethyl-3-methylpyridinium Bis(trifluoromethanesulfonyl)imide\": \"CC1=CC=C[N+](CC)=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O\",\n  \"1-Ethyl-3-methylpyridinium Ethyl Sulfate\": \"CC1=C[N+](CC)=CC=C1.O=S(OCC)([O-])=O\",\n  \"1-Ethyl-4-methylpyridinium Bromide\": \"CC1=CC=[N+](CC)C=C1.[Br-]\",\n  \"1-Ethylpyridinium Bromide\": \"CC[N+]1=CC=CC=C1.[Br-]\",\n  \"1-Ethylpyridinium Chloride\": \"CC[N+]1=CC=CC=C1.[Cl-]\",\n  \"1-Hexyl-2,3-dimethylimidazolium Iodide\": \"C[N+]1=C(C)N(CCCCCC)C=C1.[I-]\",\n  \"1-Hexyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide\": \"C[N+]1=CN(CCCCCC)C=C1.O=S([N-]S(=O)(C(F)(F)F)=O)(C(F)(F)F)=O\",\n  \"1-Hexyl-3-methylimidazolium Bromide\": \"C[N+]1=CN(CCCCCC)C=C1.[Br-]\",\n  \"1-Hexyl-3-methylimidazolium Chloride\": \"C[N+]1=CN(CCCCCC)C=C1.[Cl-]\",\n  \"1-Hexyl-3-methylimidazolium Hexafluorophosphate\": \"C[N+]1=CN(CCCCCC)C=C1.F[P-](F)(F)(F)(F)F\",\n  \"1-Hexyl-3-methylimidazolium Iodide\": \"C[N+]1=CN(CCCCCC)C=C1.[I-]\",\n  \"1-Hexyl-3-methylimidazolium Tetrafluoroborate\": \"C[N+]1=CN(CCCCCC)C=C1.F[B-](F)(F)F\",\n  \"1-Hexyl-3-methylimidazolium Trifluoromethanesulfonate\": \"C[N+]1=CN(CCCCCC)C=C1.O=S(C(F)(F)F)([O-])=O\",\n  \"1-Hexylpyridinium Hexafluorophosphate\": \"CCCCCC[N+]1=CC=CC=C1.F[P-](F)(F)(F)(F)F\",\n  \"1-Methyl-1-propylpiperidinium Bis(fluorosulfonyl)imide\": \"O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+]1(CCC)CCCCC1\",\n  \"1-Methyl-1-propylpiperidinium Bromide\": \"CCC[N+]1(C)CCCCC1.[Br-]\",\n  \"1-Methyl-1-propylpyrrolidinium Bis(trifluoromethanesulfonyl)imide\": \"O=S(NS(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+]1(CCC)CCCC1\",\n  \"1-Methyl-3-n-octylimidazolium Bromide\": \"CCCCCCCC[N+]1=CN(C)C=C1.[Br-]\",\n  \"1-Methyl-3-n-octylimidazolium Chloride\": \"CCCCCCCC[N+]1=CN(C)C=C1.[Cl-]\",\n  \"1-Methyl-3-n-octylimidazolium Hexafluorophosphate\": \"CCCCCCCC[N+]1=CN(C)C=C1.F[P-](F)(F)(F)(F)F\",\n  \"1-Methyl-3-n-octylimidazolium Tetrafluoroborate\": \"CCCCCCCC[N+]1=CN(C)C=C1.F[B-](F)(F)F\",\n  \"1-Methyl-3-n-octylimidazolium Trifluoromethanesulfonate\": \"CCCCCCCC[N+]1=CN(C)C=C1.O=S(C(F)(F)F)([O-])=O\",\n  \"1-Methyl-3-pentylimidazolium Bromide\": \"CCCCC[N+]1=CN(C)C=C1.[Br-]\",\n  \"1-Methyl-3-pentylimidazolium Tetrafluoroborate\": \"CCCCC[N+]1=CN(C)C=C1.F[B-](F)(F)F\",\n  \"1-Methyl-3-propylimidazolium Bromide\": \"CCC[N+]1=CN(C)C=C1.[Br-]\",\n  \"1-Methyl-3-propylimidazolium Chloride\": \"CCC[N+]1=CN(C)C=C1.[Cl-]\",\n  \"1-Methyl-3-propylimidazolium Iodide\": \"CCC[N+]1=CN(C)C=C1.[I-]\",\n  \"1-Methyl-3-propylimidazolium Tetrafluoroborate\": \"CCC[N+]1=CN(C)C=C1.F[B-](F)(F)F\",\n  \"1-Propylpyridinium Chloride\": \"CCC[N+]1=CC=CC=C1.[Cl-]\",\n  \"2,3-Dimethyl-1-propylimidazolium Bis(trifluoromethanesulfonyl)imide\": \"CN1C(C)=[N+](CCC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O\",\n  \"4-Ethyl-4-methylmorpholinium Bromide\": \"C[N+]1(CC)CCOCC1.[Br-]\",\n  \"Amyltriethylammonium Bis(trifluoromethanesulfonyl)imide\": \"CCC[N+](CCC)(CCC)CCC.FC(F)(F)S([N-]S(C(F)(F)F)(=O)=O)(=O)=O\",\n  \"Cyclohexyltrimethylammonium Bis(trifluoromethanesulfonyl)imide\": \"C[N+](C)(C)C1CCCCC1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O\",\n  \"Diethyl(2-methoxyethyl)methylammonium Bis(fluorosulfonyl)imide\": \"FC(F)(F)S(=O)([N-]S(=O)(C(F)(F)F)=O)=O.C[N+](CC)(CC)CCOC\",\n  \"Methyltri-n-octylammonium Bis(trifluoromethanesulfonyl)imide\": \"O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC\",\n  \"Tetraamylammonium Bromide\": \"CCCCC[N+](CCCCC)(CCCCC)CCCCC.[Br-]\",\n  \"Tetraamylammonium Chloride\": \"CCCCC[N+](CCCCC)(CCCCC)CCCCC.[Cl-]\",\n  \"Tetraamylammonium Iodide\": \"CCCCC[N+](CCCCC)(CCCCC)CCCCC.[I-]\",\n  \"Tetrabutylammonium Acetate\": \"CCCC[N+](CCCC)(CCCC)CCCC.CC([O-])=O\",\n  \"Tetrabutylammonium Bromide\": \"CCCC[N+](CCCC)(CCCC)CCCC.[Br-]\",\n  \"Tetrabutylammonium Chloride\": \"CCCC[N+](CCCC)(CCCC)CCCC.[Cl-]\",\n  \"Tetrabutylammonium Hexafluorophosphate\": \"CCCC[N+](CCCC)(CCCC)CCCC.F[P-](F)(F)(F)(F)F\",\n  \"Tetrabutylammonium Iodide\": \"CCCC[N+](CCCC)(CCCC)CCCC.[I-]\",\n  \"Tetrabutylammonium Tetrafluoroborate\": \"CCCC[N+](CCCC)(CCCC)CCCC.F[B-](F)(F)F\",\n  \"Tetrabutylammonium Trifluoromethanesulfonate\": \"CCCC[N+](CCCC)(CCCC)CCCC.O=S(C(F)(F)F)([O-])=O\",\n  \"Tetrabutylphosphonium Bromide\": \"CCCC[P+](CCCC)(CCCC)CCCC.[Br-]\",\n  \"Tetrabutylphosphonium Hexafluorophosphate\": \"CCCC[P+](CCCC)(CCCC)CCCC.F[P-](F)(F)(F)(F)F\",\n  \"Tetrabutylphosphonium Tetrafluoroborate\": \"CCCC[P+](CCCC)(CCCC)CCCC.F[B-](F)(F)F\",\n  \"Tetraheptylammonium Bromide\": \"CCCCCCC[N+](CCCCCCC)(CCCCCCC)CCCCCCC.[Br-]\",\n  \"Tetraheptylammonium Iodide\": \"CCCCCCC[N+](CCCCCCC)(CCCCCCC)CCCCCCC.[I-]\",\n  \"Tetrahexylammonium Bromide\": \"CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[Br-]\",\n  \"Tetrahexylammonium Iodide\": \"CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[I-]\",\n  \"Tetra-n-octylammonium Bromide\": \"CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Br-]\",\n  \"Tetra-n-octylammonium Iodide\": \"CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[I-]\",\n  \"Tetra-n-octylphosphonium Bromide\": \"CCCCCCCC[P+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Br-]\",\n  \"Tetrapropylammonium Chloride\": \"CCC[N+](CCC)(CCC)CCC.[Cl-]\",\n  \"Tributyl(2-methoxyethyl)phosphonium Bis(trifluoromethanesulfonyl)imide\": \"CCCC[P+](CCCC)(CCCC)CCOC.FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F\",\n  \"Tributyl(ethyl)phosphonium Diethyl Phosphate\": \"CC[P+](CCCC)(CCCC)CCCC.O=P(OCC)([O-])OCC\",\n  \"Tributyl(methyl)ammonium Dicyanamide\": \"[H]C(C([H])([H])C([H])([H])C([H])([H])[H])([H])[N+](C([H])([H])C([H])([H])C([H])([H])C([H])([H])[H])(C([H])([H])[H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])[H].[N-]=C=NC#N\",\n  \"Tributylhexadecylphosphonium Bromide\": \"CCCCCCCCCCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]\",\n  \"Tributylmethylammonium Bis(trifluoromethanesulfonyl)imide\": \"FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F.C[N+](CCCC)(CCCC)CCCC\",\n  \"Tributylmethylphosphonium Bis(trifluoromethanesulfonyl)imide\": \"C[P+](CCCC)(CCCC)CCCC.FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F\",\n  \"Tributylmethylphosphonium Iodide\": \"C[P+](CCCC)(CCCC)CCCC.[I-]\",\n  \"Tributyl-n-octylphosphonium Bromide\": \"CCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]\",\n  \"Tributylsulfonium Iodide\": \"CCCC[S+](CCCC)CCCC.[I-]\",\n  \"Triethylsulfonium Bis(trifluoromethanesulfonyl)imide\": \"O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC[S+](CC)CC\",\n  \"Trihexyl(tetradecyl)phosphonium Chloride\": \"CCCCCCCCCCCCCC[P+](CCCCCC)(CCCCCC)CCCCCC.[Cl-]\",\n  \"Trihexyl(tetradecyl)phosphonium Dicyanamide\": \"CCCCCC[P+](CCCCCC)(CCCCCC)CCCCCCCCCCCCCC.N#C[N-]C#N\",\n  \"Trimethylpropylammonium Bis(trifluoromethanesulfonyl)imide\": \"CCC[N+](C)(C)C.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O\",\n  \"Trimethylsulfonium Iodide\": \"C[S+](C)C.[I-]\"\n};\n","export const reagents_kombi = {\n  ferrocene: '[CH-]1C=CC=C1.[CH-]1C=CC=C1.[Fe+2]',\n  \"1,1'-Bis(diphenylphosphino)ferrocene\": 'c1ccc(cc1)P(c1ccccc1)C1=CC=C[CH-]1.c1ccc(cc1)P(c1ccccc1)C1=CC=C[CH-]1.[Fe+2]',\n  dppf: 'c1ccc(cc1)P(c1ccccc1)C1=CC=C[CH-]1.c1ccc(cc1)P(c1ccccc1)C1=CC=C[CH-]1.[Fe+2]',\n  \"[1,1'-Bis(diphenylphosphino)ferrocene]palladium(II) dichloride\": 'c1ccc(cc1)P(c1ccccc1)C1=CC=C[CH-]1.c1ccc(cc1)P(c1ccccc1)C1=CC=C[CH-]1.Cl[Pd]Cl.[Fe+2]',\n  'Pd(dppf)Cl2': 'c1ccc(cc1)P(c1ccccc1)C1=CC=C[CH-]1.c1ccc(cc1)P(c1ccccc1)C1=CC=C[CH-]1.Cl[Pd]Cl.[Fe+2]',\n  '[1,1′-Bis(diphenylphosphino)ferrocene]dichloropalladium(II) complex with dichloromethane': 'c1ccc(cc1)P(c1ccccc1)C1=CC=C[CH-]1.c1ccc(cc1)P(c1ccccc1)C1=CC=C[CH-]1.ClCCl.Cl[Pd]Cl.[Fe+2]',\n  '(-)-10,2-Camphorsultam': 'CC1(C)C2(C3)CCC1CC2NS3(=O)=O',\n  '(-)-10-Camphorsulfonic Acid': 'O=C(CC(C(C)1C)CC2)C21CS(=O)(O)=O',\n  \"(-)-2,2'-Methylenebis[(3aS,8aR)-3a,8a-dihydro-8H-indeno[1,2-d]oxazole]\": '[H][C@@]12N=C(CC3=N[C@]4([H])[C@](CC5=C4C=CC=C5)([H])O3)O[C@]1([H])CC6=C2C=CC=C6',\n  '(-)-4,5-Bis[hydroxy(diphenyl)methyl]-2,2-dimethyl-1,3-dioxolane': 'CC1(C)OC(C(C2=CC=CC=C2)(O)C3=CC=CC=C3)C(C(C4=CC=CC=C4)(O)C5=CC=CC=C5)O1',\n  '(-)-B-Chlorodiisopinocampheylborane': 'CC1(C)C2CC(B(Cl)C3CC4CC(C3C)C4(C)C)C(C)C1C2',\n  '(-)-Benzotetramisole': 'C12=N[C@@H](C3=CC=CC=C3)CN1C4=CC=CC=C4S2',\n  '(-)-Isopinocampheylborane TMEDA Complex': 'B[C@H]1[C@H](C)C2C(C(C1)C2)(C)C.B[C@H]3[C@H](C)C4C(C(C3)C4)(C)C.CN(C)CCN(C)C',\n  '(-)-Sparteine': '[H][C@]12CCCCN1C[C@H]3[C@]4([H])CCCCN4C[C@@H]2C3',\n  '(+)-(5aR,10bS)-5a,10b-Dihydro-2-(2,4,6-trimethylphenyl)-4H,6H-indeno[2,1-b][1,2,4]triazolo[4,3-d][1,4]oxazinium Chloride Monohydrate': 'CC1=C(N2N=C3[N+]([C@]4([H])[C@](CC5=C4C=CC=C5)([H])OC3)=C2)C(C)=CC(C)=C1.[H]O[H].[Cl-]',\n  '(+)-10,2-Camphorsultam': 'CC1(C)C2(C3)CCC1CC2NS3(=O)=O',\n  '(+)-10-Camphorsulfonic Acid': 'O=C(CC(C(C)1C)CC2)C21CS(=O)(O)=O',\n  \"(+)-2,2'-Methylenebis[(3aR,8aS)-3a,8a-dihydro-8H-indeno[1,2-d]oxazole]\": '[H][C@]12N=C(CC3=N[C@@]4([H])[C@@](CC5=C4C=CC=C5)([H])O3)O[C@@]1([H])CC6=C2C=CC=C6',\n  '(+)-4,5-Bis[hydroxy(diphenyl)methyl]-2,2-dimethyl-1,3-dioxolane': 'CC1(C)OC(C(C2=CC=CC=C2)(O)C3=CC=CC=C3)C(C(C4=CC=CC=C4)(O)C5=CC=CC=C5)O1',\n  '(+)-4,5-Bis[hydroxy(diphenyl)methyl]-2-methyl-2-phenyl-1,3-dioxolane': 'CC1(C2=CC=CC=C2)OC(C(C3=CC=CC=C3)(O)C4=CC=CC=C4)C(C(C5=CC=CC=C5)(O)C6=CC=CC=C6)O1',\n  '(+)-B-Chlorodiisopinocampheylborane': 'CN(C)CCN(C)C.CC1(C)C2CC(BC3CC4CC(C3C)C4(C)C)C(C)C1C2',\n  '(+)-Sparteine': '[H][C@]12CCCCN1C[C@H]3[C@]4([H])CCCCN4C[C@@H]2C3',\n  \"(±)-1,1'-Binaphthyl-2,2'-diyl Hydrogenphosphate\": 'O=P1(OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)O',\n  '(±)-10-Camphorsulfonic Acid': 'O=C(CC(C(C)1C)CC2)C21CS(=O)(O)=O',\n  '(1,10-Phenanthroline)(trifluoromethyl)(triphenylphosphine)copper(I)': '[Cu]C(F)(F)F.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.C45=CC=C6C=CC=NC6=C4N=CC=C5',\n  '(1,5-Cyclooctadiene)(methoxy)iridium(I)': '[Ir]OC.C1=C\\\\CC/C=C\\\\CC/1',\n  '(1,5-Cyclooctadiene)(pyridine)(tricyclohexylphosphine)iridium(I) Hexafluorophosphate': 'F[P-](F)(F)(F)(F)F.P(C1CCCCC1)(C2CCCCC2)C3CCCCC3.[Ir+].C4=C\\\\CC/C=C\\\\CC/4.C5=NC=CC=C5',\n  \"(11bS)-2,6-Bis[bis[3,5-bis(trifluoromethyl)phenyl]hydroxymethyl]-3,5-dihydrospiro[4H-dinaphth[2,1-c:1',2'-e]azepine-4,4'-morpholinium] Bromide\": 'OC(C1=C2C(C3=C4C=CC=CC4=CC(C(C5=CC(C(F)(F)F)=CC(C(F)(F)F)=C5)(C6=CC(C(F)(F)F)=CC(C(F)(F)F)=C6)O)=C3C(Br)[N]7(CCOCC7)C2)=C8C=CC=CC8=C1)(C9=CC(C(F)(F)F)=CC(C(F)(F)F)=C9)C%10=CC(C(F)(F)F)=CC(C(F)(F)F)=C%10',\n  '(11R,12R)-9,10-Dihydro-9,10-ethanoanthracene-11,12-diamine': 'N[C@H]1[C@H](N)C2C3=C(C=CC=C3)C1C4=CC=CC=C24',\n  '(11S,12S)-9,10-Dihydro-9,10-ethanoanthracene-11,12-diamine': 'N[C@@H]1[C@@H](N)C2C3=C(C=CC=C3)C1C4=CC=CC=C24',\n  '(1-Bromovinyl)trimethylsilane': 'C[Si](C)(C(Br)=C)C',\n  '(1E)-1-tert-Butoxy-1-(trimethylsilyloxy)propene': 'C/C=C(OC(C)(C)C)/O[Si](C)(C)C',\n  '(1R,2R)-(-)-1,2-Cyclohexanediamine': 'N[C@H]1[C@H](N)CCCC1',\n  \"(1R,2R)-(-)-N,N'-Dimethylcyclohexane-1,2-diamine\": 'CN[C@H]1[C@H](NC)CCCC1',\n  '(1R,2R)-(+)-1,2-Diphenylethylenediamine': 'N[C@H](C1=CC=CC=C1)[C@@H](C2=CC=CC=C2)N',\n  '(1R,2R)-1,2-Bis(2,4,6-trimethylphenyl)ethylenediamine': 'N[C@H](C1=C(C)C=C(C)C=C1C)[C@@H](C2=C(C)C=C(C)C=C2C)N',\n  '(1R,2R)-1,2-Bis(2-hydroxyphenyl)ethylenediamine': 'N[C@H](C1=CC=CC=C1O)[C@@H](C2=CC=CC=C2O)N',\n  \"(1R,2R)-N,N'-Bis(2-acetyl-3-oxo-2-butenylidene)-1,2-dimesitylethylenediaminato Cobalt(II)\": 'CC1=C(C(C)=CC(C)=C1)[C@@H](/N=C/C=C(C(C)=O)\\\\C[O-])[C@@H](C2=C(C)C=C(C)C=C2C)/N=C/C=C(C(C)=O)\\\\C[O-].[Co+2]',\n  \"(1R,2R)-N,N'-Bis[3-oxo-2-(2,4,6-trimethylbenzoyl)butylidene]-1,2-diphenylethylenediaminato Cobalt(II)\": '[O-]/C(C)=C(C(C1=C(C)C=C(C)C=C1C)=O)\\\\C=N\\\\[C@@H]([C@@H](C2=CC=CC=C2)/N=C/C(C(C3=C(C)C=C(C)C=C3C)=O)=C(C)\\\\[O-])C4=CC=CC=C4.[Co+2]',\n  \"(1R,2R)-N,N'-Dihydroxy-N,N'-bis(diphenylacetyl)cyclohexane-1,2-diamine\": 'O=C(N(O)[C@H]1[C@H](N(O)C(C(C2=CC=CC=C2)C3=CC=CC=C3)=O)CCCC1)C(C4=CC=CC=C4)C5=CC=CC=C5',\n  '(1R,2R,4R,5R)-2,5-Bis(3,5-di-tert-butyl-2-hydroxybenzylideneamino)bicyclo[2.2.1]heptane': 'OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=N/[C@H]2[C@@]3([H])C[C@@H](/N=C/C4=CC(C(C)(C)C)=CC(C(C)(C)C)=C4O)[C@@](C3)([H])C2',\n  '(1R,2S)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenyl-1-propanol': 'C[C@H](N(CC1=CC=CC=C1)S(=O)(C(C(C)=CC(C)=C2)=C2C)=O)[C@@H](C3=CC=CC=C3)O',\n  '(1R,2S)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Propionate': 'CCC(O[C@H](C1=CC=CC=C1)[C@@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O',\n  '(1R,3R)-5-(Bromomethylene)-1,3-bis(tert-butyldimethylsilyloxy)cyclohexane': 'C[Si](O[C@H](C1)C[C@H](O[Si](C)(C(C)(C)C)C)CC1=CBr)(C(C)(C)C)C',\n  '(1R,3S,5R,7R,8aS)-7-Ethylhexahydro-1-(6-hydroxy-4-quinolinyl)-3,7-methano-1H-pyrrolo[2,1-c][1,4]oxazine': 'OC1=CC=C2N=CC=C([C@H]3O[C@](C4)([H])C[N@@]5[C@@]3([H])C[C@@]4(CC)C5)C2=C1',\n  '(1R,4R,5R)-4,7,7-Trimethyl-6-thiabicyclo[3.2.1]octane': 'CC1(C)S[C@@]2([H])[C@H](C)CC[C@]1([H])C2',\n  \"(1S)-3-(1,10-Phenanthrolin-2-yl)-2'-phenyl-[1,1'-binaphthalen]-2-ol\": 'OC1=C(C2=NC3=C4N=CC=CC4=CC=C3C=C2)C=C5C=CC=CC5=C1C6=C7C=CC=CC7=CC=C6C8=CC=CC=C8',\n  '(1S,2R)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenyl-1-propanol': 'C[C@@H](N(CC1=CC=CC=C1)S(=O)(C(C(C)=CC(C)=C2)=C2C)=O)[C@H](C3=CC=CC=C3)O',\n  '(1S,2R)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Propionate': 'CCC(O[C@@H](C1=CC=CC=C1)[C@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O',\n  '(1S,2S)-(-)-1,2-Diphenylethylenediamine': 'N[C@@H](C1=CC=CC=C1)[C@H](C2=CC=CC=C2)N',\n  '(1S,2S)-(+)-1,2-Cyclohexanediamine': 'N[C@@H]1[C@@H](N)CCCC1',\n  \"(1S,2S)-(+)-N,N'-Dimethylcyclohexane-1,2-diamine\": 'CN[C@@H]1[C@@H](NC)CCCC1',\n  '(1S,2S)-1,2-Bis(2,4,6-trimethylphenyl)ethylenediamine': 'N[C@@H](C1=C(C)C=C(C)C=C1C)[C@H](C2=C(C)C=C(C)C=C2C)N',\n  '(1S,2S)-1,2-Bis(2-hydroxyphenyl)ethylenediamine': 'N[C@@H](C1=CC=CC=C1O)[C@H](C2=CC=CC=C2O)N',\n  \"(1S,2S)-N,N'-Bis(2-acetyl-3-oxo-2-butenylidene)-1,2-dimesitylethylenediaminato Cobalt(II)\": 'CC1=C(C(C)=CC(C)=C1)[C@H](/N=C/C=C(C(C)=O)\\\\C[O-])[C@H](C2=C(C)C=C(C)C=C2C)/N=C/C=C(C(C)=O)\\\\C[O-].[Co+2]',\n  \"(1S,2S)-N,N'-Bis[(R)-2-hydroxy-2'-phenyl-1,1'-binaphthyl-3-ylmethylene]-1,2-diphenylethylenediaminato Manganese(III) Acetate\": 'CC([O-])=O.OC1=C(C([Mn+]2)=N[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N=C2C5=C(O)C(C6=C7C=CC=CC7=CC=C6C8=CC=CC=C8)=C9C=CC=CC9=C5)C=C%10C=CC=CC%10=C1C%11=C%12C=CC=CC%12=CC=C%11C%13=CC=CC=C%13',\n  \"(1S,2S)-N,N'-Bis[3-oxo-2-(2,4,6-trimethylbenzoyl)butylidene]-1,2-diphenylethylenediaminato Cobalt(II)\": '[O-]/C(C)=C(C(C1=C(C)C=C(C)C=C1C)=O)\\\\C=N\\\\[C@H]([C@H](C2=CC=CC=C2)/N=C/C(C(C3=C(C)C=C(C)C=C3C)=O)=C(C)\\\\[O-])C4=CC=CC=C4.[Co+2]',\n  \"(1S,2S)-N,N'-Dihydroxy-N,N'-bis(diphenylacetyl)cyclohexane-1,2-diamine\": 'O=C(N(O)[C@@H]1[C@@H](N(O)C(C(C2=CC=CC=C2)C3=CC=CC=C3)=O)CCCC1)C(C4=CC=CC=C4)C5=CC=CC=C5',\n  '(1S,2S,4S,5S)-2,5-Bis(3,5-di-tert-butyl-2-hydroxybenzylideneamino)bicyclo[2.2.1]heptane': 'OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=N/[C@@H]2[C@]3([H])C[C@H](/N=C/C4=CC(C(C)(C)C)=CC(C(C)(C)C)=C4O)[C@](C3)([H])C2',\n  '(1S,4S,5S)-4,7,7-Trimethyl-6-thiabicyclo[3.2.1]octane': 'CC1(C)S[C@]2([H])[C@@H](C)CC[C@@]1([H])C2',\n  '(2,5-Dimethylphenyl)magnesium Bromide': 'Br[Mg]C1=CC(C)=CC=C1C',\n  '(2-Bromo-4,5-dimethoxyphenoxy)trimethylsilane': 'C[Si](C)(OC1=CC(OC)=C(OC)C=C1Br)C',\n  '(2-Bromoallyl)trimethylsilane': 'C[Si](C)(CC(Br)=C)C',\n  '(2-Bromophenyl)(2,4,6-trimethylphenyl)iodonium triflate': 'CC1=C([I+]C2=CC=CC=C2Br)C(C)=CC(C)=C1.O=S([O-])(C(F)(F)F)=O',\n  '(2-Bromophenyl)diphenylphosphine': 'BrC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3',\n  '(2-Bromophenylethynyl)trimethylsilane': 'C[Si](C)(C#CC1=CC=CC=C1Br)C',\n  '(2R,3R)-(-)-1,4-Bis(diphenylphosphino)-2,3-O-isopropylidene-2,3-butanediol': 'CC1(O[C@H]([C@@H](O1)CP(C2=CC=CC=C2)C3=CC=CC=C3)CP(C4=CC=CC=C4)C5=CC=CC=C5)C',\n  '(2R,3R)-(-)-2,3-Bis(diphenylphosphino)bicyclo[2.2.1]hept-5-ene': 'C1(C2)[C@@H](P(C3=CC=CC=C3)C4=CC=CC=C4)[C@H](P(C5=CC=CC=C5)C6=CC=CC=C6)C2C=C1',\n  '(2R,5R)-2,5-Diphenylpyrrolidine': '[C@@H]1(C2=CC=CC=C2)N[C@@H](C3=CC=CC=C3)CC1',\n  '(2R,8aS)-(+)-(Camphorylsulfonyl)oxaziridine': 'O=S(N1OC1)(CC23C(CC(C(C)3C)CC2)=O)=O',\n  '(2S)-N-[(1S)-1-(Hydroxydiphenylmethyl)-3-methylbutyl]-2-pyrrolidinecarboxamide': 'O=C([C@H]1NCCC1)N[C@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CC(C)C',\n  '(2S,3aS,7aS)-Octahydro-1H-indole-2-carboxylic Acid': 'O=C([C@H]1N[C@@]2([H])CCCC[C@@]2([H])C1)O',\n  '(2S,3R)-3,4-Dihydro-3-isopropyl-2-phenyl-2H-pyrimido[2,1-b]benzothiazole': 'CC([C@H]1[C@@H](C2=CC=CC=C2)N=C3SC4=CC=CC=C4N3C1)C',\n  '(2S,3S)-(-)-Bis(diphenylphosphino)butane': 'C[C@H](P(C1=CC=CC=C1)C2=CC=CC=C2)[C@@H](P(C3=CC=CC=C3)C4=CC=CC=C4)C',\n  '(2S,3S)-(+)-1,4-Bis(diphenylphosphino)-2,3-O-isopropylidene-2,3-butanediol': 'CC1(O[C@@H]([C@H](O1)CP(C2=CC=CC=C2)C3=CC=CC=C3)CP(C4=CC=CC=C4)C5=CC=CC=C5)C',\n  '(2S,3S)-(+)-2,3-Bis(diphenylphosphino)bicyclo[2.2.1]hept-5-ene': 'C1(C2)[C@H](P(C3=CC=CC=C3)C4=CC=CC=C4)[C@@H](P(C5=CC=CC=C5)C6=CC=CC=C6)C2C=C1',\n  '(2S,5S)-(-)-2-tert-Butyl-3-methyl-5-benzyl-4-imidazolidinone': 'O=C1N(C)[C@@H](C(C)(C)C)N[C@H]1CC2=CC=CC=C2',\n  '(2S,5S)-2,5-Diphenylpyrrolidine': '[C@H]1(C2=CC=CC=C2)N[C@H](C3=CC=CC=C3)CC1',\n  '(2S,8aR)-(-)-(Camphorylsulfonyl)oxaziridine': 'O=S(N1OC1)(CC23C(CC(C(C)3C)CC2)=O)=O',\n  '(3,5-Dibromophenyl)triphenylsilane': 'BrC1=CC(Br)=CC([Si](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=C1',\n  '(3-Bromopropoxy)(tert-butyl)dimethylsilane': 'C[Si](C(C)(C)C)(OCCCBr)C',\n  '(3-Bromopropyl)trimethoxysilane': 'CO[Si](OC)(CCCBr)OC',\n  '(3-Chloropropyl)tris(trimethylsilyloxy)silane': 'C[Si](O[Si](O[Si](C)(C)C)(CCCCl)O[Si](C)(C)C)(C)C',\n  '(3-Mercaptopropyl)triethoxysilane': 'CCO[Si](OCC)(CCCS)OCC',\n  '(3-Mercaptopropyl)trimethoxysilane': 'CO[Si](OC)(CCCS)OC',\n  '(3-Phenyl-1H-inden-1-ylidene)bis(tricyclohexylphosphine)ruthenium(II) Dichloride': '[Ru+2]=C1C=C(C2=CC=CC=C2)C3=C1C=CC=C3.P(C4CCCCC4)(C5CCCCC5)C6CCCCC6.P(C7CCCCC7)(C8CCCCC8)C9CCCCC9.[Cl-].[Cl-]',\n  '(4-(Isopropoxycarbonyl)phenyl)boronic acid': 'B(C1=CC=C(C=C1)C(=O)OC(C)C)(O)O',\n  '(4-Dimethylaminophenyl)di-tert-butylphosphine': 'CC(P(C1=CC=C(N(C)C)C=C1)C(C)(C)C)(C)C',\n  '(4-Nitrophenyl)(2,4,6-trimethylphenyl)iodonium triflate': 'CC1=C([I+]C2=CC=C([N+]([O-])=O)C=C2)C(C)=CC(C)=C1.O=S([O-])(C(F)(F)F)=O',\n  '(4-Nitrophenyl)phenyliodonium triflate': 'O=[N+](C1=CC=C([I+]C2=CC=CC=C2)C=C1)[O-].O=S([O-])(C(F)(F)F)=O',\n  '(4R)-(+)-4-Isopropyl-5,5-diphenyl-2-oxazolidinone': 'O=C1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@@H](C(C)C)N1',\n  '(4R,5R)-1,3-Dimethyl-4,5-diphenyl-2-[(S)-1-benzyl-2-hydroxyethylimino]imidazolidine': 'OC[C@H](CC1=CC=CC=C1)N=C2N(C)[C@H](C3=CC=CC=C3)[C@@H](C4=CC=CC=C4)N2C',\n  '(4S)-(-)-4-Isopropyl-5,5-diphenyl-2-oxazolidinone': 'O=C1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@H](C(C)C)N1',\n  \"(4S,4'S)-2,2'-(Pentane-3,3'-diyl)bis(4-benzyl-4,5-dihydrooxazole)\": 'CCC(C1=N[C@H](CO1)CC2=CC=CC=C2)(C3=N[C@H](CO3)CC4=CC=CC=C4)CC',\n  '(4S,5S)-1,3-Dimethyl-4,5-diphenyl-2-[(R)-1-benzyl-2-hydroxyethylimino]imidazolidine': 'OC[C@@H](CC1=CC=CC=C1)N=C2N(C)[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N2C',\n  '(6-Chloro-1H-benzotriazol-1-yloxy)tripyrrolidinophosphonium Hexafluorophosphate': 'ClC1=CC=C2N=NN(O[P+](N3CCCC3)(N4CCCC4)N5CCCC5)C2=C1.F[P-](F)(F)(F)(F)F',\n  '(7-Azabenzotriazol-1-yloxy)tris(dimethylamino)phosphonium Hexafluorophosphate': 'CN([P+](N(C)C)(ON1N=NC2=CC=CN=C21)N(C)C)C.F[P-](F)(F)(F)(F)F',\n  '(Bromodifluoromethyl)trimethylsilane': 'C[Si](C)(C(F)(Br)F)C',\n  '(Bromomethyl)trimethylsilane': 'C[Si](C)(CBr)C',\n  '(Chloromethyl)isopropoxydimethylsilane': 'C[Si](OC(C)C)(CCl)C',\n  '(Chloromethyl)trimethylsilane': 'C[Si](C)(CCl)C',\n  '(Diacetoxyiodo)benzene': 'O=C(OI(C1=CC=CC=C1)OC(C)=O)C',\n  '(Diethylamino)sulfur Trifluoride': 'CCN(S(F)(F)F)CC',\n  '(Difluoromethyl)trimethylsilane': 'C[Si](C)(C(F)F)C',\n  '(E)-Trimethyl(3,3,3-trifluoro-1-propenyl)silane': 'FC(F)(F)/C=C/[Si](C)(C)C',\n  '(Hexamethylbenzene)ruthenium(II) Dichloride': 'CC1=C(C)C(C)=C(C)C(C)=C1C.[Ru+2].[Cl-].[Cl-]',\n  '(Indenyl)titanium(IV) Trichloride': '[Ti+3]C1C=CC2=C1C=CC=C2.[Cl-].[Cl-].[Cl-]',\n  '(Iodomethyl)trimethylsilane': 'C[Si](C)(CI)C',\n  \"(m-Terphenyl-5'-yl)trimethylsilane\": 'C[Si](C)(C1=CC(C2=CC=CC=C2)=CC(C3=CC=CC=C3)=C1)C',\n  '(Pentafluorophenyl)diphenylphosphine': 'FC1=C(F)C(F)=C(F)C(F)=C1P(C2=CC=CC=C2)C3=CC=CC=C3',\n  '(Pentamethylcyclopentadienyl)rhodium(III) Dichloride': '[Rh+2]C1=C(C)C(C)=C(C)C1(C)C.[Cl-].[Cl-]',\n  '(Pentamethylcyclopentadienyl)titanium(IV) Trichloride': '[Ti+3]C1=C(C)C(C)=C(C)C1(C)C.[Cl-].[Cl-].[Cl-]',\n  '(Perfluorohexyl)phenyliodonium Trifluoromethanesulfonate': 'FC([I+]C1=CC=CC=C1)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F.O=S(C(F)(F)F)([O-])=O',\n  '(Perfluoro-n-octyl)phenyliodonium Trifluoromethanesulfonate': 'FC([I+]C1=CC=CC=C1)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F.O=S(C(F)(F)F)([O-])=O',\n  '(Perfluoropropyl)phenyliodonium Trifluoromethanesulfonate': 'FC([I+]C1=CC=CC=C1)(F)C(F)(F)C(F)(F)F.O=S(C(F)(F)F)([O-])=O',\n  '(Phenylthio)trimethylsilane': 'C[Si](C)(SC1=CC=CC=C1)C',\n  '(Phenylthiomethyl)trimethylsilane': 'C[Si](C)(CSC1=CC=CC=C1)C',\n  '(Piperidinium-1-ylmethyl)trifluoroborate': 'F[B-2](F)(C[NH+]1CCCCC1)F',\n  '(R)-(-)-1-(2-Pyrrolidinylmethyl)pyrrolidine': 'N1(C[C@@H]2NCCC2)CCCC1',\n  '(R)-(-)-2-[Hydroxy(diphenyl)methyl]-1-methylpyrrolidine': 'CN1[C@@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CCC1',\n  '(R)-(-)-4-Benzyl-3-propionyl-2-oxazolidinone': 'O=C1OC[C@@H](CC2=CC=CC=C2)N1C(CC)=O',\n  '(R)-(-)-4-Isopropyl-3-propionyl-2-oxazolidinone': 'O=C1OC[C@@H](C(C)C)N1C(CC)=O',\n  '(R)-(-)-4-Phenyl-2-oxazolidinone': 'O=C1OC[C@@H](C2=CC=CC=C2)N1',\n  '(R)-(-)-p-Toluenesulfinamide': 'CC1=CC=C([S@](N)=O)C=C1',\n  \"(R)-(+)-2,2'-bis(diphenylphosphino)-1,1'-binaphthyl\": 'C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8',\n  \"(R)-(+)-2-Diphenylphosphino-2'-methoxy-1,1'-binaphthyl\": 'COC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3P(C5=CC=CC=C5)C6=CC=CC=C6',\n  '(R)-(+)-Indoline-2-carboxylic Acid': 'O=C([C@@H]1NC2=C(C=CC=C2)C1)O',\n  '(R)-(+)-N,N-Dimethyl-1-ferrocenylethylamine': 'C[C@H]([C]1[CH][CH][CH][CH]1)N(C)C.[Fe].[CH]2[CH][CH][CH][CH]2',\n  '(R)-(+)-tert-Butylsulfinamide': 'CC(C)([S@](N)=O)C',\n  '(R)-(+)-α,α-Diphenyl-2-pyrrolidinemethanol': 'OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@@H]3NCCC3',\n  '(R)-(+)-α,α-Diphenyl-2-pyrrolidinemethanol Trimethylsilyl Ether': 'C[Si](OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@@H]3NCCC3)(C)C',\n  '(R)-2-(Methoxymethyl)pyrrolidine': 'COC[C@@H]1NCCC1',\n  \"(R)-3,3'-Bis[[[(1R,2R)-2-(isoindolin-2-yl)-1,2-diphenylethyl]imino]methyl]-1,1'-bi-2-naphthol\": 'OC1=C(/C=N/[C@H](C2=CC=CC=C2)[C@H](N3CC4=C(C=CC=C4)C3)C5=CC=CC=C5)C=C6C=CC=CC6=C1C7=C8C=CC=CC8=CC(/C=N/[C@H](C9=CC=CC=C9)[C@H](N%10CC%11=C(C=CC=C%11)C%10)C%12=CC=CC=C%12)=C7O',\n  '(R)-4-Benzyl-2-oxazolidinone': 'O=C1OC[C@@H](CC2=CC=CC=C2)N1',\n  '(R)-4-Isopropyl-2-oxazolidinone': 'O=C1OC[C@@H](C(C)C)N1',\n  '(R)-4-Phenylthiazolidine-2-thione': 'S=C1SC[C@@H](C2=CC=CC=C2)N1',\n  '(R)-5,5-Diphenyl-2-methyl-3,4-propano-1,3,2-oxazaborolidine': 'CB1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@]4([H])N1CCC4',\n  '(R)-N-(2-Benzoylphenyl)-1-benzylpyrrolidine-2-carboxamide': 'O=C([C@@H]1N(CC2=CC=CC=C2)CCC1)NC3=CC=CC=C3C(C4=CC=CC=C4)=O',\n  '(R,R)-(-)-2,3-Bis(tert-butylmethylphosphino)quinoxaline': 'C[P@@](C1=NC2=CC=CC=C2N=C1[P@@](C(C)(C)C)C)C(C)(C)C',\n  '(R,R)-(-)-2,3-Dimethoxy-1,4-bis(dimethylamino)butane': 'CN(C[C@@H](OC)[C@H](OC)CN(C)C)C',\n  \"(R,R)-(-)-N,N'-Bis(3,5-di-tert-butylsalicylidene)-1,2-cyclohexanediamine\": 'OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=N/[C@H]2[C@H](/N=C/C3=CC(C(C)(C)C)=CC(C(C)(C)C)=C3O)CCCC2',\n  \"(R,R)-(-)-N,N'-Bis(3,5-di-tert-butylsalicylidene)-1,2-cyclohexanediaminomanganese(III) Chloride\": 'OC1=C(C(C)(C)C)C=C(C(C)(C)C)C=C1/C=[N]([Mn+]/[N]2=C\\\\C3=CC(C(C)(C)C)=CC(C(C)(C)C)=C3O)\\\\[C@@]4([H])[C@@]2([H])CCCC4.[Cl-]',\n  \"(R,R)-(+)-2,2'-Isopropylidenebis(4-tert-butyl-2-oxazoline)\": 'CC(C1=N[C@H](C(C)(C)C)CO1)(C2=N[C@H](C(C)(C)C)CO2)C',\n  '(R,R)-1,2-Bis[(2-methoxyphenyl)phenylphosphino]ethane': 'COC1=CC=CC=C1[P@](CC[P@@](C2=CC=CC=C2OC)C3=CC=CC=C3)C4=CC=CC=C4',\n  \"(R,R)-2,2'-Isopropylidenebis(4-phenyl-2-oxazoline)\": 'CC(C1=N[C@H](C2=CC=CC=C2)CO1)(C3=N[C@H](C4=CC=CC=C4)CO3)C',\n  '(R,R)-2,6-Bis(4-isopropyl-2-oxazolin-2-yl)pyridine': 'CC([C@H]1N=C(C2=CC=CC(C3=N[C@H](C(C)C)CO3)=N2)OC1)C',\n  '(R,R)-2,6-Bis(4-phenyl-2-oxazolin-2-yl)pyridine': 'C1(C2=N[C@H](C3=CC=CC=C3)CO2)=NC(C4=N[C@H](C5=CC=CC=C5)CO4)=CC=C1',\n  '(R,R)-2-Iodo-1,3-bis[1-(mesitylcarbamoyl)ethoxy]benzene': 'C[C@H](C(NC1=C(C)C=C(C)C=C1C)=O)OC2=C(I)C(O[C@@H](C(NC3=C(C)C=C(C)C=C3C)=O)C)=CC=C2',\n  '(R,R)-N-(2-Amino-1,2-diphenylethyl)-p-toluenesulfonamide': 'CC1=CC=C(S(=O)(N[C@H](C2=CC=CC=C2)[C@H](N)C3=CC=CC=C3)=O)C=C1',\n  \"(R,R,R)-(3,5-Dioxa-4-phosphacyclohepta[2,1-a:3,4-a']dinaphthalen-4-yl)bis(1-phenylethyl)amine\": 'C[C@@H](N(P1OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)[C@@H](C6=CC=CC=C6)C)C7=CC=CC=C7',\n  \"(S)-(-)-1,1'-Binaphthyl-2,2'-diamine\": 'NC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3N',\n  '(S)-(-)-1-Methyl-2-(1-piperidinomethyl)pyrrolidine': 'CN1[C@H](CN2CCCCC2)CCC1',\n  '(S)-(-)-2-(Diphenylmethyl)pyrrolidine': '[C@H]1(C(C2=CC=CC=C2)C3=CC=CC=C3)NCCC1',\n  \"(S)-(-)-2-Amino-2'-hydroxy-1,1'-binaphthyl\": 'OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3N',\n  '(S)-(-)-2-Aminomethyl-1-ethylpyrrolidine': 'CCN1[C@H](CN)CCC1',\n  '(S)-(-)-3-(tert-Butoxycarbonyl)-4-formyl-2,2-dimethyl-1,3-oxazolidine': 'CC1(C)OC[C@@H](C=O)N1C(OC(C)(C)C)=O',\n  \"(S)-(-)-3,3'-Dibromo-5,5',6,6',7,7',8,8'-octahydro-1,1'-bi-2-naphthol\": 'OC1=C(Br)C=C2CCCCC2=C1C3=C4CCCCC4=CC(Br)=C3O',\n  '(S)-(-)-3-tert-Butoxycarbonyl-4-methoxycarbonyl-2,2-dimethyl-1,3-oxazolidine': 'CC1(C)OC[C@@H](C(OC)=O)N1C(OC(C)(C)C)=O',\n  \"(S)-(-)-5,5',6,6',7,7',8,8'-Octahydro-1,1'-bi-2-naphthol\": 'OC1=CC=C2CCCCC2=C1C3=C4CCCCC4=CC=C3O',\n  '(S)-(-)-BINAP': 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=C(C(C=CC=C4)=C4C=C3)C(C(C=CC=C5)=C5C=C6)=C6P(C7=CC=CC=C7)C8=CC=CC=C8',\n  '(S)-(-)-Indoline-2-carboxylic Acid': 'O=C([C@H]1NC2=C(C=CC=C2)C1)O',\n  '(S)-(-)-tert-Butylsulfinamide': 'CC(C)([S@@](N)=O)C',\n  '(S)-(-)-α,α-Diphenyl-2-pyrrolidinemethanol': 'OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@@H]3CCCN3',\n  '(S)-(-)-α,α-Diphenyl-2-pyrrolidinemethanol Trimethylsilyl Ether': 'C[Si](OC(C1=CC=CC=C1)(C2=CC=CC=C2)[C@H]3NCCC3)(C)C',\n  '(S)-(+)-(3,5-Dioxa-4-phosphacyclohepta[2,1-a': 'CN(P1OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)C',\n  \"3,4-a']dinaphthalen-4-yl)dimethylamine\": 'CN(P1OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)C',\n  '(S)-(+)-1-(2-Pyrrolidinylmethyl)pyrrolidine': 'N1(C[C@H]2NCCC2)CCCC1',\n  \"(S)-(+)-1,1'-Binaphthyl-2,2'-diyl Bis(trifluoromethanesulfonate)\": 'O=S(C(F)(F)F)(OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3OS(C(F)(F)F)(=O)=O)=O',\n  \"(S)-(+)-1,1'-Binaphthyl-2,2'-diyl Hydrogen Phosphate\": 'O=P1(OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)O',\n  '(S)-(+)-2-(Anilinomethyl)pyrrolidine': '[C@H]1(CNC2=CC=CC=C2)NCCC1',\n  '(S)-(+)-2-[Hydroxy(diphenyl)methyl]-1-methylpyrrolidine': 'CN1[C@H](C(C2=CC=CC=C2)(O)C3=CC=CC=C3)CCC1',\n  '(S)-(+)-4-Benzyl-3-propionyl-2-oxazolidinone': 'O=C1OC[C@H](CC2=CC=CC=C2)N1C(CC)=O',\n  '(S)-(+)-4-Isopropyl-3-propionyl-2-oxazolidinone': 'O=C1OC[C@H](C(C)C)N1C(CC)=O',\n  '(S)-(+)-4-Phenyl-2-oxazolidinone': 'O=C1OC[C@H](C2=CC=CC=C2)N1',\n  \"(S)-(+)-6,6'-Dibromo-1,1'-bi-2-naphthol\": 'OC1=CC=C2C=C(Br)C=CC2=C1C3=C4C=CC(Br)=CC4=CC=C3O',\n  '(S)-(+)-p-Toluenesulfinamide': 'CC1=CC=C([S@@](N)=O)C=C1',\n  \"(S)-[4-(Pyridin-4-yl)-4,5-dihydro-3H-dinaphtho[2,1-c:1',2'-e]azepine-2,6-diyl]bis[bis[4-(tert-butyl)phenyl]methanol]\": 'OC(C1=C2CN(C3=CC=NC=C3)CC4=C(C(C5=CC=C(C(C)(C)C)C=C5)(C6=CC=C(C(C)(C)C)C=C6)O)C=C7C=CC=CC7=C4C2=C8C=CC=CC8=C1)(C9=CC=C(C(C)(C)C)C=C9)C%10=CC=C(C(C)(C)C)C=C%10',\n  '(S)-2-(Aminomethyl)pyrrolidine': 'NC[C@H]1NCCC1',\n  '(S)-2-(Methoxymethyl)pyrrolidine': 'COC[C@H]1NCCC1',\n  \"(S)-2,2'-Dimethoxy-1,1'-binaphthyl\": 'COC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3OC',\n  '(S)-2,4-Diphenyl-4,5-dihydrooxazole': 'C1(C2=CC=CC=C2)=N[C@@H](C3=CC=CC=C3)CO1',\n  '(S)-2-[(1-Methyl-2-pyrrolidinyl)methyl]isoindoline Dihydrochloride': 'CN1[C@H](CN2CC3=C(C=CC=C3)C2)CCC1.[H]Cl.[H]Cl',\n  \"(S)-3,3'-Dibromo-1,1'-bi-2-naphthol\": 'OC1=C(Br)C=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC(Br)=C3O',\n  \"(S)-3,3'-Dibromo-2,2'-dimethoxy-1,1'-binaphthyl\": 'COC1=C(Br)C=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC(Br)=C3OC',\n  \"(S)-3-[1-(4-Methoxybenzenesulfonyl)-(4S,5S)-4,5-diphenyl-4,5-dihydro-1H-imidazol-2-yl]-1,1'-binaphthalene-2,2'-diyl Hydrogen Phosphate\": 'O=P1(OC2=C(C3=N[C@@H](C4=CC=CC=C4)[C@H](C5=CC=CC=C5)N3S(=O)(C6=CC=C(OC)C=C6)=O)C=C7C=CC=CC7=C2C8=C9C=CC=CC9=CC=C8O1)O',\n  '(S)-4-(4-Aminobenzyl)-2-oxazolidinone': 'O=C1OC[C@H](CC2=CC=C(N)C=C2)N1',\n  '(S)-4-Benzyl-2-oxazolidinone': 'O=C1OC[C@H](CC2=CC=CC=C2)N1',\n  '(S)-4-Isopropyl-2-oxazolidinone': 'O=C1OC[C@H](C(C)C)N1',\n  '(S)-4-Isopropyl-3-(1-naphthylmethyl)-2,5,5-triphenyl-1,3,2-oxazaborolidine': 'CC([C@@H]1N(CC2=C3C=CC=CC3=CC=C2)B(C4=CC=CC=C4)OC1(C5=CC=CC=C5)C6=CC=CC=C6)C',\n  '(S)-4-Isopropylthiazolidine-2-thione': 'S=C1SC[C@H](C(C)C)N1',\n  '(S)-4-Phenylthiazolidine-2-thione': 'S=C1SC[C@H](C2=CC=CC=C2)N1',\n  '(S)-4-tert-Butyl-2-(2-pyridyl)oxazoline': 'CC([C@@H]1N=C(C2=NC=CC=C2)OC1)(C)C',\n  '(S)-5-(Pyrrolidin-2-yl)-1H-tetrazole': 'C1([C@H]2NCCC2)=NN=NN1',\n  '(S)-5,5-Diphenyl-2-methyl-3,4-propano-1,3,2-oxazaborolidine': 'CB1OC(C2=CC=CC=C2)(C3=CC=CC=C3)[C@@]4([H])N1CCC4',\n  '(S)-Benzyl-2-[4-(trifluoromethyl)phenyl]-6,7-dihydro-5H-pyrrolo[2,1-c][1,2,4]triazolium Tetrafluoroborate': 'FC(C1=CC=C([N+]2=C(CC3=CC=CC=C3)N4C(CCC4)=N2)C=C1)(F)F.F[B-](F)(F)F',\n  \"(S,S)-(-)-2,2'-Isopropylidenebis(4-tert-butyl-2-oxazoline)\": 'CC(C1=N[C@@H](C(C)(C)C)CO1)(C2=N[C@@H](C(C)(C)C)CO2)C',\n  '(S,S)-(+)-2,3-Bis(tert-butylmethylphosphino)quinoxaline': 'C[P@](C1=NC2=CC=CC=C2N=C1[P@](C(C)(C)C)C)C(C)(C)C',\n  '(S,S)-(+)-2,3-Dimethoxy-1,4-bis(dimethylamino)butane': 'CN(C[C@H](OC)[C@@H](OC)CN(C)C)C',\n  '(S,S)-1,2-Bis[(2-methoxyphenyl)phenylphosphino]ethane': 'COC1=CC=CC=C1[P@@](CC[P@](C2=CC=CC=C2OC)C3=CC=CC=C3)C4=CC=CC=C4',\n  '(S,S)-1,2-Bis[(tert-butyl)methylphosphino]ethane Bis(borane)': 'C[P@@](CC[P@@](C(C)(C)C)C)C(C)(C)C.B.B',\n  \"(S,S)-2,2'-Isopropylidenebis(4-phenyl-2-oxazoline)\": 'CC(C1=N[C@@H](C2=CC=CC=C2)CO1)(C3=N[C@@H](C4=CC=CC=C4)CO3)C',\n  '(S,S)-2,6-Bis(4-isopropyl-2-oxazolin-2-yl)pyridine': 'CC([C@@H]1N=C(C2=CC=CC(C3=N[C@@H](C(C)C)CO3)=N2)OC1)C',\n  '(S,S)-2,6-Bis(4-phenyl-2-oxazolin-2-yl)pyridine': 'C1(C2=N[C@@H](C3=CC=CC=C3)CO2)=NC(C4=N[C@@H](C5=CC=CC=C5)CO4)=CC=C1',\n  '(S,S)-4,6-Bis(4-isopropyl-2-oxazolin-2-yl)-m-xylene': 'CC1=C(C2=N[C@@H](C(C)C)CO2)C=C(C3=N[C@@H](C(C)C)CO3)C(C)=C1',\n  '(S,S)-N-(2-Amino-1,2-diphenylethyl)-p-toluenesulfonamide': 'CC1=CC=C(S(=O)(N[C@@H](C2=CC=CC=C2)[C@@H](N)C3=CC=CC=C3)=O)C=C1',\n  \"(S,S,S)-(3,5-Dioxa-4-phosphacyclohepta[2,1-a:3,4-a']dinaphthalen-4-yl)bis(1-phenylethyl)amine\": 'C[C@H](N(P1OC2=CC=C3C=CC=CC3=C2C4=C5C=CC=CC5=CC=C4O1)[C@H](C6=CC=CC=C6)C)C7=CC=CC=C7',\n  '(tert-Butyldimethylsilyl)acetylene': 'C#C[Si](C)(C(C)(C)C)C',\n  '(tert-Butyldimethylsilyloxy)malononitrile': 'N#CC(O[Si](C)(C(C)(C)C)C)C#N',\n  '(Trifluoroacetyl)benzotriazole': 'O=C(C1=C2N=NNC2=CC=C1)C(F)(F)F',\n  '(Trifluoromethyl)trimethylsilane': 'C[Si](C)(C(F)(F)F)C',\n  '(Trifluoromethyl)tris(triphenylphosphine)copper(I)': '[Cu]C(F)(F)F.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9',\n  '(Triphenylphosphine)gold(I) Chloride': 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.[Au+].[Cl-]',\n  '[(4-Bromobenzyl)oxy](tert-butyl)dimethylsilane': 'C[Si](C(C)(C)C)(OCC1=CC=C(Br)C=C1)C',\n  '[(4-Methoxyphenyl)ethynyl]trimethylsilane': 'C[Si](C)(C#CC1=CC=C(OC)C=C1)C',\n  \"[(R)-2,2'-Bis(diphenylphosphino)-1,1'-binaphthyl]ruthenium(II) Dichloride\": 'C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8.[Ru+2].[Cl-].[Cl-]',\n  \"[(S)-2,2'-Bis(diphenylphosphino)-1,1'-binaphthyl]ruthenium(II) Dichloride\": 'C1(C2=C3C=CC=CC3=CC=C2P(C4=CC=CC=C4)C5=CC=CC=C5)=C6C=CC=CC6=CC=C1P(C7=CC=CC=C7)C8=CC=CC=C8.[Ru+2].[Cl-].[Cl-]',\n  '[1,1′-Bis(diphenylphosphino)ferrocene]dichloropalladium(II)': 'C1=CC=C(C=C1)P(C2=CC=CC=C2)[C]3[CH][CH][CH][CH]3.C1=CC=C(C=C1)P(C2=CC=CC=C2)[C]3[CH][CH][CH][CH]3.Cl[Pd]Cl.[Fe]',\n  'PdCl2(dppf)': 'C1=CC=C(C=C1)P(C2=CC=CC=C2)[C]3[CH][CH][CH][CH]3.C1=CC=C(C=C1)P(C2=CC=CC=C2)[C]3[CH][CH][CH][CH]3.Cl[Pd]Cl.[Fe]',\n  '[1,2-Bis(diphenylphosphino)ethane]nickel(II) Dichloride': 'P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.[Ni+2].[Cl-].[Cl-]',\n  '[1,2-Bis(diphenylphosphino)ethane]palladium(II) Dichloride': 'P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.[Pd+2].[Cl-].[Cl-]',\n  '[1,3-Bis(2,6-diisopropylphenyl)imidazol-2-ylidene]triphenylphosphine Nickel(II) Dichloride': 'CC(C1=C(N(C=CN2C3=C(C(C)C)C=CC=C3C(C)C)C2=P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)C(C(C)C)=CC=C1)C.[Ni+2].[Cl-].[Cl-]',\n  '[1,3-Bis(diphenylphosphino)propane]nickel(II) Dichloride': 'P(CCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.[Ni+2].[Cl-].[Cl-]',\n  '[3-(6-Aminohexylamino)propyl]trimethoxysilane': 'CO[Si](OC)(CCCNCCCCCCN)OC',\n  '[3-(Diethylamino)propyl]trimethoxysilane': 'CO[Si](OC)(CCCN(CC)CC)OC',\n  '[3-(N,N-Dimethylamino)propyl]trimethoxysilane': 'CO[Si](OC)(CCCN(C)C)OC',\n  '[3-(Trimethoxysilyl)propyl]succinic Anhydride': 'O=C(O1)C(CCC[Si](OC)(OC)OC)CC1=O',\n  '[Bis(trifluoroacetoxy)iodo]benzene': 'O=C(OI(C1=CC=CC=C1)OC(C(F)(F)F)=O)C(F)(F)F',\n  '[Bis(trifluoroacetoxy)iodo]pentafluorobenzene': 'FC1=C(I(OC(C(F)(F)F)=O)OC(C(F)(F)F)=O)C(F)=C(F)C(F)=C1F',\n  '[Di-tert-butyl(chloro)phosphine]palladium(II) Dichloride': 'ClP(C(C)(C)C)C(C)(C)C.[Pd+2].[Cl-].[Cl-]',\n  '[Hydroxy(tosyloxy)iodo]benzene': 'O=S(OI(C1=CC=CC=C1)O)(C2=CC=C(C)C=C2)=O',\n  '1-(2,4,6-Triisopropylbenzenesulfonyl)-1,2,4-triazole': 'O=S(N1N=CN=C1)(C2=C(C(C)C)C=C(C(C)C)C=C2C(C)C)=O',\n  '1-(2,4,6-Triisopropylbenzenesulfonyl)imidazole': 'O=S(N1C=CN=C1)(C2=C(C(C)C)C=C(C(C)C)C=C2C(C)C)=O',\n  '1-(2-Hydroxyethyl)-3-methylimidazolium Chloride': 'C[N+]1=CN(CCO)C=C1.[Cl-]',\n  '1-(2-Hydroxyethyl)-3-methylimidazolium Tetrafluoroborate': 'C[N+]1=CN(CCO)C=C1.F[B-](F)(F)F',\n  '1-(2-Mesitylene)-1,3-butanedione': 'CC(CC(C1=C(C)C=C(C)C=C1C)=O)=O',\n  '1-(2-Mesitylenesulfonyl)imidazole': 'O=S(N1C=CN=C1)(C(C(C)=CC(C)=C2)=C2C)=O',\n  '1-(3-Dimethylaminopropyl)-3-ethylcarbodiimide': 'CCN=C=NCCCN(C)C',\n  EDC: 'CCN=C=NCCCN(C)C',\n  '1-(3-Dimethylaminopropyl)-3-ethylcarbodiimide Hydrochloride': 'CCN=C=NCCCN(C)C.[H]Cl',\n  'EDC HCl': 'CCN=C=NCCCN(C)C.[H]Cl',\n  '1-(4-Bromophenyl)-1,3-butanedione': 'CC(CC(C1=CC=C(Br)C=C1)=O)=O',\n  '1-(4-Chlorophenyl)-4,4,4-trifluoro-1,3-butanedione': 'O=C(C1=CC=C(Cl)C=C1)CC(C(F)(F)F)=O',\n  '1-(4-Fluorophenyl)-1,3-butanedione': 'CC(CC(C1=CC=C(F)C=C1)=O)=O',\n  '1-(4-tert-Butylphenyl)-3-(4-methoxyphenyl)-1,3-propanedione': 'O=C(C1=CC=C(C(C)(C)C)C=C1)CC(C2=CC=C(OC)C=C2)=O',\n  '1-(Chloro-1-pyrrolidinylmethylene)pyrrolidinium Hexafluorophosphate': 'ClC(N1CCCC1)=[N+]2CCCC2.F[P-](F)(F)(F)(F)F',\n  '1-(Chloro-1-pyrrolidinylmethylene)pyrrolidinium Tetrafluoroborate': 'ClC(N1CCCC1)=[N+]2CCCC2.F[B-](F)(F)F',\n  '1-(Cyanomethyl)piperidinium Tetrafluoroborate': 'N#CC[NH+]1CCCCC1.F[B-](F)(F)F',\n  '1-(Heptafluorobutyryl)imidazole': 'O=C(N1C=CN=C1)C(F)(F)C(F)(F)C(F)(F)F',\n  '1-(p-Toluenesulfonyl)imidazole': 'O=S(N1C=CN=C1)(C2=CC=C(C)C=C2)=O',\n  '1-(Trifluoroacetyl)-4-(dimethylamino)pyridinium Trifluoroacetate': 'CN(C1=CC=[N+](C(C(F)(F)F)=O)C=C1)C.O=C([O-])C(F)(F)F',\n  '1-(Trifluoroacetyl)imidazole': 'O=C(N1C=CN=C1)C(F)(F)F',\n  '1-(Trifluoroacetyl)piperidine': 'O=C(N1CCCCC1)C(F)(F)F',\n  '1-(Trifluoromethanesulfonyl)-1H-benzotriazole': 'O=S(N1N=NC2=CC=CC=C21)(C(F)(F)F)=O',\n  '1-(Trifluoromethanesulfonyl)imidazole': 'O=S(N1C=CN=C1)(C(F)(F)F)=O',\n  '1-(Triisopropylsilyl)-1-propyne': 'CC#C[Si](C(C)C)(C(C)C)C(C)C',\n  '1-(Trimethoxysilyl)naphthalene': 'CO[Si](C1=C2C=CC=CC2=CC=C1)(OC)OC',\n  '1-(Trimethylsilyl)-1-pentyne': 'CCCC#C[Si](C)(C)C',\n  '1-(Trimethylsilyl)-1-propyne': 'CC#C[Si](C)(C)C',\n  \"1,1'-(2,6-Pyridinediyl)bis(3-methylimidazolium) Dibromide\": 'C[N+]1=CN(C2=NC(N3C=C[N+](C)=C3)=CC=C2)C=C1.[Br-].[Br-]',\n  '1,1,1,3,3,3-Hexafluoroisopropyl Trifluoromethanesulfonate': 'O=S(C(F)(F)F)(OC(C(F)(F)F)C(F)(F)F)=O',\n  '1,1,1,3,3-Pentamethyldisiloxane': 'C[SiH](C)O[Si](C)(C)C',\n  '1,1,1,3,5,5,5-Heptamethyl-3-[(trimethylsilyl)oxy]trisiloxane': 'C[Si](O[Si](O[Si](C)(C)C)(C)O[Si](C)(C)C)(C)C',\n  '1,1,1,3,5,5,5-Heptamethyltrisiloxane': 'C[Si](C)(C)O[SiH](C)O[Si](C)(C)C',\n  '1,1,1,3,5,7,7,7-Octamethyltetrasiloxane': 'C[Si](C)(C)O[SiH](C)O[SiH](C)O[Si](C)(C)C',\n  '1,1,1,5,5,5-Hexamethyl-3-[(trimethylsilyl)oxy]-3-vinyltrisiloxane': 'C=C[Si](O[Si](C)(C)C)(O[Si](C)(C)C)O[Si](C)(C)C',\n  '1,1,1,5,5,5-Hexamethyl-3-phenyl-3-(trimethylsilyloxy)trisiloxane': 'C[Si](O[Si](O[Si](C)(C)C)(C1=CC=CC=C1)O[Si](C)(C)C)(C)C',\n  '1,1,2,2-Tetrachloro-1,2-dimethyldisilane': 'C[Si](Cl)(Cl)[Si](Cl)(Cl)C',\n  '1,1,2,2-Tetraphenyldisilane': '[SiH](C1=CC=CC=C1)(C2=CC=CC=C2)[SiH](C3=CC=CC=C3)C4=CC=CC=C4',\n  '1,1,2,3,4,5-Hexaphenylsilole': 'C1(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C(C5=CC=CC=C5)[Si]1(C6=CC=CC=C6)C7=CC=CC=C7',\n  '1,1,3,3,5,5,7,7,9,9,11,11,13,13-Tetradecamethylheptasiloxane': 'C[SiH](C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[SiH](C)C',\n  '1,1,3,3,5,5,7,7,9,9,11,11-Dodecamethylhexasiloxane': 'C[SiH](C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[SiH](C)C',\n  '1,1,3,3,5,5-Hexaethoxy-1,3,5-trisilacyclohexane': 'CCO[Si]1(OCC)C[Si](OCC)(OCC)C[Si](OCC)(OCC)C1',\n  '1,1,3,3,5,5-Hexamethyltrisiloxane': 'C[SiH](C)O[Si](C)(C)O[SiH](C)C',\n  '1,1,3,3-Tetramethyl-1,3-diphenyldisiloxane': 'C[Si](C1=CC=CC=C1)(C)O[Si](C)(C)C2=CC=CC=C2',\n  '1,1,3,3-Tetramethyldisiloxane': 'C[SiH](C)O[SiH](C)C',\n  '1,1,3,3-Tetramethylguanidine': 'N=C(N(C)C)N(C)C',\n  '1,1,4,7,10,10-Hexamethyltriethylenetetramine': 'CN(CCN(C)C)CCN(C)CCN(C)C',\n  '1,1,5,5-Tetrafluoro-2,4-pentanedione': 'O=C(CC(C(F)F)=O)C(F)F',\n  '1,10-Phenanthroline Monohydrate': '[H]O[H].C12=CC=C3C=CC=NC3=C1N=CC=C2',\n  '1,10-Phenanthroline-5,6-dione': 'O=C1C2=C(N=CC=C2)C3=C(C=CC=N3)C1=O',\n  \"1,1'-Bi-2-naphthol\": 'OC1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3O',\n  \"1,1'-Carbonyldi(1,2,4-triazole)\": 'O=C(N1N=CN=C1)N2N=CN=C2',\n  \"1,1'-Carbonyldiimidazole\": 'O=C(N1C=CN=C1)N2C=CN=C2',\n  \"1,1'-Difluoro-2,2'-bipyridinium Bis(tetrafluoroborate)\": 'F[N+]1=CC=CC=C1C2=CC=CC=[N+]2F.F[B-](F)(F)F.F[B-](F)(F)F',\n  '1,1-Dimethyl-1,3-dihydrobenzo[c][1,2]oxasilole': 'C[Si]1(C)OCC2=CC=CC=C12',\n  '1,1-Dimethylpropylmagnesium chloride': 'Cl[Mg]C(C)(C)CC',\n  \"1,1'-Oxalyldiimidazole\": 'O=C(N1C=CN=C1)C(N2C=CN=C2)=O',\n  '1,2,3,4,5-Pentamethylcyclopentadiene': 'CC1C(C)=C(C)C(C)=C1C',\n  '1,2,3,4,5-Pentaphenyl-1,3-cyclopentadiene': 'C1(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C(C5=CC=CC=C5)C1C6=CC=CC=C6',\n  '1,2,3,4-Tetrahydroquinoline': 'C12=C(NCCC2)C=CC=C1',\n  '1,2,3,4-Tetraphenyl-1,3-cyclopentadiene': 'C1(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C(C5=CC=CC=C5)C1',\n  '1,2,4-Triazole': 'N1N=CN=C1',\n  '1,2-Benzenedisulfonic Imide': 'O=S(C1=CC=CC=C1S2(=O)=O)(N2)=O',\n  '1,2-Bis(3-indenyl)ethane': 'C1(CCC2=CCC3=C2C=CC=C3)=CCC4=C1C=CC=C4',\n  \"1,2-Bis(4'-methyl-2,2'-bipyridin-4-yl)ethane\": 'CC1=CC(C2=NC=CC(CCC3=CC(C4=NC=CC(C)=C4)=NC=C3)=C2)=NC=C1',\n  '1,2-Bis(dimethylphosphino)ethane': 'CP(CCP(C)C)C',\n  '1,2-Bis(diphenylphosphino)benzene': 'C1(P(C2=CC=CC=C2)C3=CC=CC=C3)=CC=CC=C1P(C4=CC=CC=C4)C5=CC=CC=C5',\n  '1,2-Bis(diphenylphosphino)ethane': 'P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4',\n  '1,2-Bis(phenylsulfinyl)ethane Palladium(II) Diacetate': 'O=S(CCS(C1=CC=CC=C1)=O)C2=CC=CC=C2.CC([O-])=O.CC([O-])=O.[Pd+2]',\n  '1,2-Bis(tert-butylthio)ethane Borane': 'CC(SCCSC(C)(C)C)(C)C.B',\n  '1,2-Bis(trichlorosilyl)ethane': 'Cl[Si](CC[Si](Cl)(Cl)Cl)(Cl)Cl',\n  '1,2-Bis(triethoxysilyl)ethane': 'CCO[Si](CC[Si](OCC)(OCC)OCC)(OCC)OCC',\n  '1,2-Bis(trimethylsilyl)benzene': 'C[Si](C1=CC=CC=C1[Si](C)(C)C)(C)C',\n  '1,2-Bis[bis(pentafluorophenyl)phosphino]ethane': 'FC1=C(F)C(F)=C(F)C(F)=C1P(CCP(C2=C(F)C(F)=C(F)C(F)=C2F)C3=C(F)C(F)=C(F)C(F)=C3F)C4=C(F)C(F)=C(F)C(F)=C4F',\n  '1,2-Dibromo-1,1,2,2-tetrachloroethane': 'ClC(Cl)(Br)C(Cl)(Br)Cl',\n  '1,2-Dibromo-1,1,2,2-tetrafluoroethane': 'FC(F)(Br)C(F)(Br)F',\n  '1,2-Dichlorotetramethyldisilane': 'Cl[Si](C)(C)[Si](C)(C)Cl',\n  '1,2-Dimethyl-3-propylimidazolium Iodide': 'CCC[N+]1=C(C)N(C)C=C1.[I-]',\n  '1,2-Phenylenediamine': 'NC1=CC=CC=C1N',\n  '1,2-xylene': 'CC1=CC=CC=C1C',\n  '1,3,5,7-Cyclooctatetraene': 'C1=C\\\\C=C/C=C\\\\C=C/1',\n  '1,3,5-Cycloheptatriene': 'C1=CC=CC=CC1',\n  '1,3,5-Trimethylbenzene': 'CC1=CC(C)=CC(C)=C1',\n  '1,3,5-Tris(3,3,3-trifluoropropyl)-1,3,5-trimethylcyclotrisiloxane': 'C[Si]1(CCC(F)(F)F)O[Si](C)(CCC(F)(F)F)O[Si](C)(CCC(F)(F)F)O1',\n  '1,3-Bis(2,4,6-trimethylphenyl)imidazolinium Chloride': 'CC1=C([N+]2=CN(C3=C(C)C=C(C)C=C3C)CC2)C(C)=CC(C)=C1.[Cl-]',\n  '1,3-Bis(2,6-diisopropylphenyl)-1,3,2-diazaphospholidine 2-Oxide': 'CC(C1=C(N2P(N(C3=C(C(C)C)C=CC=C3C(C)C)CC2)=O)C(C(C)C)=CC=C1)C',\n  '1,3-Bis(2,6-diisopropylphenyl)imidazol-2-ylidene': 'CC(C1=C(N2[C]N(C3=C(C(C)C)C=CC=C3C(C)C)C=C2)C(C(C)C)=CC=C1)C',\n  '1,3-Bis(2,6-diisopropylphenyl)imidazolidin-2-ylidene': 'CC(C1=C(N2[C]N(C3=C(C(C)C)C=CC=C3C(C)C)CC2)C(C(C)C)=CC=C1)C',\n  '1,3-Bis(2,6-diisopropylphenyl)imidazolinium Chloride': 'CC(C1=C([N+]2=CN(C3=C(C(C)C)C=CC=C3C(C)C)CC2)C(C(C)C)=CC=C1)C.[Cl-]',\n  '1,3-Bis(2,6-diisopropylphenyl)imidazolium Chloride': 'CC(C1=C([N+]2=CN(C3=C(C(C)C)C=CC=C3C(C)C)C=C2)C(C(C)C)=CC=C1)C.[Cl-]',\n  '1,3-Bis(4-hydroxybutyl)tetramethyldisiloxane': 'OCCCC[Si](C)(C)O[Si](C)(C)CCCCO',\n  '1,3-Bis(4-methoxyphenyl)-1,3-propanedione': 'O=C(C1=CC=C(OC)C=C1)CC(C2=CC=C(OC)C=C2)=O',\n  '1,3-Bis(chloromethyl)tetramethyldisiloxane': 'ClC[Si](C)(C)O[Si](C)(C)CCl',\n  '1,3-Bis(diphenylphosphino)propane': 'P(CCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4',\n  '1,3-Bis[(di-tert-butylphosphino)oxy]benzene': 'CC(P(OC1=CC(OP(C(C)(C)C)C(C)(C)C)=CC=C1)C(C)(C)C)(C)C',\n  '1,3-Bis[(trimethylsilyl)ethynyl]benzene': 'C[Si](C#CC1=CC(C#C[Si](C)(C)C)=CC=C1)(C)C',\n  '1,3-Di(1-adamantyl)imidazolinium Tetrafluoroborate': 'F[B-](F)(F)F.[N+]1(C23CC4CC(C3)CC(C4)C2)=CN(C56CC7CC(C6)CC(C7)C5)CC1',\n  '1,3-Di(1-adamantyl)imidazolium Tetrafluoroborate': 'F[B-](F)(F)F.[N+]1(C23CC4CC(C3)CC(C4)C2)=CN(C56CC7CC(C6)CC(C7)C5)C=C1',\n  '1,3-Di(2-pyridyl)-1,3-propanedione': 'O=C(C1=NC=CC=C1)CC(C2=NC=CC=C2)=O',\n  '1,3-Dibromo-5,5-dimethylhydantoin': 'O=C(N1Br)N(Br)C(C)(C)C1=O',\n  '1,3-Dicyclohexylimidazolium Tetrafluoroborate': 'F[B-](F)(F)F.[N+]1(C2CCCCC2)=CN(C3CCCCC3)C=C1',\n  '1,3-Diiodo-5,5-dimethylhydantoin': 'O=C(N1I)N(I)C(C)(C)C1=O',\n  '1,3-Diisopropylimidazolinium Tetrafluoroborate': 'CC([N+]1=CN(C(C)C)CC1)C.F[B-](F)(F)F',\n  '1,3-Diisopropylimidazolium Tetrafluoroborate': 'CC([N+]1=CN(C(C)C)C=C1)C.F[B-](F)(F)F',\n  '1,3-Dimesitylimidazol-2-ylidene': 'CC1=CC(C)=CC(C)=C1N2[C]N(C3=C(C)C=C(C)C=C3C)C=C2',\n  '1,3-Dimesitylimidazolium Chloride': 'CC1=CC(C)=CC(C)=C1[N+]2=CN(C3=C(C)C=C(C)C=C3C)C=C2.[Cl-]',\n  '1,3-Dimethoxy-1,1,3,3-tetraphenyldisiloxane': 'CO[Si](C1=CC=CC=C1)(C2=CC=CC=C2)O[Si](C3=CC=CC=C3)(OC)C4=CC=CC=C4',\n  '1,3-Dimethylimidazolium Chloride': 'C[N+]1=CN(C)C=C1.[Cl-]',\n  '1,3-Dimethylimidazolium Dimethyl Phosphate': 'C[N+]1=CN(C)C=C1.O=P(OC)([O-])OC',\n  '1,3-Dimethylimidazolium Iodide': 'C[N+]1=CN(C)C=C1.[I-]',\n  '1,3-Dimethylimidazolium Methyl Sulfate': 'C[N+]1=CN(C)C=C1.O=S(OC)([O-])=O',\n  '1,3-Diphenyl-1,3-propanedione': 'O=C(C1=CC=CC=C1)CC(C2=CC=CC=C2)=O',\n  '1,3-Di-tert-butylimidazol-2-ylidene': 'CC(N1[C]N(C(C)(C)C)C=C1)(C)C',\n  '1,3-Di-tert-butylimidazolium Tetrafluoroborate': 'CC([N+]1=CN(C(C)(C)C)C=C1)(C)C.F[B-](F)(F)F',\n  '1,3-Divinyltetramethyldisiloxane': 'C=C[Si](C)(C)O[Si](C)(C)C=C',\n  '1,3-xylene': 'CC1=CC=CC(C)=C1',\n  '1,4,7,10,13,16-Hexaazacyclooctadecane': 'N1CCNCCNCCNCCNCCNCC1',\n  '1,4,7,10,13,16-Hexaazacyclooctadecane Hexahydrochloride': '[H]Cl.[H]Cl.[H]Cl.[H]Cl.[H]Cl.[H]Cl.N1CCNCCNCCNCCNCCNCC1',\n  '1,4,7,10-Tetraazacyclododecane': 'N1CCNCCNCCNCC1',\n  '1,4,7,10-Tetraazacyclododecane Tetrahydrochloride': '[H]Cl.[H]Cl.[H]Cl.[H]Cl.N1CCNCCNCCNCC1',\n  '1,4,7,10-Tetraazacyclododecane-1,4,7,10-tetraacetic Acid': 'O=C(O)CN1CCN(CC(O)=O)CCN(CC(O)=O)CCN(CC(O)=O)CC1',\n  '1,4,7,10-Tetrabenzyl-1,4,7,10-tetraazacyclododecane': 'N1(CC2=CC=CC=C2)CCN(CC3=CC=CC=C3)CCN(CC4=CC=CC=C4)CCN(CC5=CC=CC=C5)CC1',\n  '1,4,7-Triazacyclononane': 'N1CCNCCNCC1',\n  '1,4,7-Trimethyl-1,4,7-triazacyclononane (stabilized with NaHCO3)': 'CN1CCN(C)CCN(C)CC1',\n  '1,4,8,11-Tetramethyl-1,4,8,11-tetraazacyclotetradecane': 'CN1CCN(C)CCCN(C)CCN(C)CCC1',\n  '1,4-Bis(dimethylsilyl)benzene': 'C[SiH](C1=CC=C([SiH](C)C)C=C1)C',\n  '1,4-Bis(diphenylphosphino)butane': 'P(CCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4',\n  '1,4-Bis(trimethylsilyl)-1,3-butadiyne': 'C[Si](C#CC#C[Si](C)(C)C)(C)C',\n  '1,4-Cyclohexadiene': 'C1=CCC=CC1',\n  '1,4-Cyclohexadiene (stabilized with BHT)': 'C1=CCC=CC1',\n  \"1,4-Di[[2,2':6',2''-terpyridin]-4'-yl]benzene\": 'C1(C2=CC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=C2)=CC=C(C5=CC(C6=NC=CC=C6)=NC(C7=NC=CC=C7)=C5)C=C1',\n  '1,4-Diazabicyclo[2.2.2]octane': 'N1(CC2)CCN2CC1',\n  '1,4-Dimethyl-1,2,4-triazolium Iodide': 'CN1C=N[N+](C)=C1.[I-]',\n  '1,4-dioxane': 'C1COCCO1',\n  '1,4-xylene': 'CC1=CC=C(C)C=C1',\n  '1,5,7-Triazabicyclo[4.4.0]dec-5-ene': 'N12CCCN=C1NCCC2',\n  '1,5,9-Triazacyclododecane': 'N1CCCNCCCNCCC1',\n  '1,5-Bis(diphenylphosphino)pentane': 'P(CCCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4',\n  '1,5-Cyclooctadiene': 'C1=C\\\\CC/C=C\\\\CC/1',\n  \"1,5-Cyclooctadiene [stabilized with Octadecyl 3-(3',5'-Di-tert-butyl-4'-hydroxyphenyl)propionate]\": 'C1=C\\\\CC/C=C\\\\CC/1',\n  '1,5-Diazabicyclo[4.3.0]-5-nonene': 'N12CCCN=C1CCC2',\n  '1,5-Diazabicyclo[4.3.0]non-5-ene': 'N12CCCN=C1CCC2',\n  '1,5-Dichloro-1,1,3,3,5,5-hexamethyltrisiloxane': 'C[Si](C)(Cl)O[Si](C)(C)O[Si](C)(Cl)C',\n  '1,5-Dimethyl-2,4-bis[2-(trimethylsilyl)ethynyl]benzene': 'C[Si](C#CC1=C(C)C=C(C)C(C#C[Si](C)(C)C)=C1)(C)C',\n  '1,5-Hexadiene': 'C=CCCC=C',\n  '1,6-Bis(diphenylphosphino)hexane': 'P(CCCCCCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4',\n  '1,7-Dichloro-1,1,3,3,5,5,7,7-octamethyltetrasiloxane': 'C[Si](C)(Cl)O[Si](C)(C)O[Si](C)(C)O[Si](C)(Cl)C',\n  '1,8-Bis(dimethylamino)naphthalene': 'CN(C1=CC=CC2=CC=CC(N(C)C)=C12)C',\n  '1,8-Bis(diphenylphosphino)naphthalene': 'C1(P(C2=CC=CC=C2)C3=CC=CC=C3)=C4C(P(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC4=CC=C1',\n  '1,8-Diazabicyclo[5.4.0]-7-undecene': 'N12CCCCCC1=NCCC2',\n  '1,8-Diazabicyclo[5.4.0]-7-undecene Hydrogen Tribromide': 'N12CCCCCC1=NCCC2.[H+].[Br-].[Br-].[Br-]',\n  '1,8-Diazabicyclo[5.4.0]undec-7-ene': 'N12CCCCCC1=NCCC2',\n  '1-[2-(Di-tert-butylphosphino)phenyl]-3,5-diphenyl-1H-pyrazole': 'CC(P(C1=CC=CC=C1N2N=C(C3=CC=CC=C3)C=C2C4=CC=CC=C4)C(C)(C)C)(C)C',\n  '1-[3-(Trimethoxysilyl)propyl]urea': 'O=C(N)NCCC[Si](OC)(OC)OC',\n  '1-[Bis(trifluoromethanesulfonyl)methyl]-2,3,4,5,6-pentafluorobenzene': 'FC1=C(C(S(=O)(C(F)(F)F)=O)S(=O)(C(F)(F)F)=O)C(F)=C(F)C(F)=C1F',\n  '10-Methyl-9-phenylacridinium Perchlorate': 'C[N+]1=C2C=CC=CC2=C(C3=CC=CC=C3)C4=C1C=CC=C4.O=Cl(=O)([O-])=O',\n  '10-Methylacridinium Perchlorate': 'C[N+]1=C2C=CC=CC2=CC3=C1C=CC=C3.O=Cl(=O)([O-])=O',\n  '1-Acetoxy-5-bromo-1,2-benziodoxol-3(1H)-one': 'O=C1OI(OC(C)=O)C2=CC=C(Br)C=C12',\n  '1-Allyl-3-methylimidazolium Chloride': 'C[N+]1=CN(CC=C)C=C1.[Cl-]',\n  '1-Bromo-3-(trimethylsilyl)benzene': 'C[Si](C1=CC(Br)=CC=C1)(C)C',\n  '1-Bromo-4-(trimethylsilyl)benzene': 'C[Si](C1=CC=C(Br)C=C1)(C)C',\n  '1-Butyl-1-methylpiperidinium Bis(trifluoromethanesulfonyl)imide': 'C[N+]1(CCCC)CCCCC1.O=S([N-]S(=O)(C(F)(F)F)=O)(C(F)(F)F)=O',\n  '1-Butyl-1-methylpiperidinium Bromide': 'C[N+]1(CCCC)CCCCC1.[Br-]',\n  '1-Butyl-1-methylpyrrolidinium Bis(trifluoromethanesulfonyl)imide': 'C[N+]1(CCCC)CCCC1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O',\n  '1-Butyl-1-methylpyrrolidinium Bromide': 'C[N+]1(CCCC)CCCC1.[Br-]',\n  '1-Butyl-1-methylpyrrolidinium Chloride': 'C[N+]1(CCCC)CCCC1.[Cl-]',\n  '1-Butyl-1-methylpyrrolidinium Dicyanamide': 'C[N+]1(CCCC)CCCC1.N#C[N-]C#N',\n  '1-Butyl-1-methylpyrrolidinium Trifluoromethanesulfonate': 'C[N+]1(CCCC)CCCC1.O=S(C(F)(F)F)([O-])=O',\n  '1-Butyl-2,3-dimethylimidazolium Bis(trifluoromethanesulfonyl)imide': 'O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC1=[N+](C)C=CN1CCCC',\n  '1-Butyl-2,3-dimethylimidazolium Chloride': 'C[N+]1=C(C)N(CCCC)C=C1.[Cl-]',\n  '1-Butyl-2,3-dimethylimidazolium Hexafluorophosphate': 'C[N+]1=C(C)N(CCCC)C=C1.F[P-](F)(F)(F)(F)F',\n  '1-Butyl-2,3-dimethylimidazolium Tetrafluoroborate': 'C[N+]1=C(C)N(CCCC)C=C1.F[B-](F)(F)F',\n  '1-Butyl-2,3-dimethylimidazolium Trifluoromethanesulfonate': 'C[N+]1=C(C)N(CCCC)C=C1.O=S(C(F)(F)F)([O-])=O',\n  '1-Butyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide': 'C[N+]1=CN(CCCC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O',\n  '1-Butyl-3-methylimidazolium Bromide': 'C[N+]1=CN(CCCC)C=C1.[Br-]',\n  '1-Butyl-3-methylimidazolium Chloride': 'C[N+]1=CN(CCCC)C=C1.[Cl-]',\n  '1-Butyl-3-methylimidazolium Dicyanamide': 'C[N+]1=CN(CCCC)C=C1.N#C[N-]C#N',\n  '1-Butyl-3-methylimidazolium Hexafluorophosphate': 'C[N+]1=CN(CCCC)C=C1.F[P-](F)(F)(F)(F)F',\n  '1-Butyl-3-methylimidazolium Iodide': 'C[N+]1=CN(CCCC)C=C1.[I-]',\n  '1-Butyl-3-methylimidazolium Methanesulfonate': 'C[N+]1=CN(CCCC)C=C1.CS(=O)([O-])=O',\n  '1-Butyl-3-methylimidazolium Methyl Sulfate': 'C[N+]1=CN(CCCC)C=C1.O=S(OC)([O-])=O',\n  '1-Butyl-3-methylimidazolium Tetrachloroferrate': 'C[N+]1=CN(CCCC)C=C1.Cl[Fe-](Cl)(Cl)Cl',\n  '1-Butyl-3-methylimidazolium Tetrafluoroborate': 'C[N+]1=CN(CCCC)C=C1.F[B-](F)(F)F',\n  '1-Butyl-3-methylimidazolium Thiocyanate': 'C[N+]1=CN(CCCC)C=C1.[S-]C#N',\n  '1-Butyl-3-methylimidazolium Tribromide': 'C[N+]1=CN(CCCC)C=C1.[Br-].[Br-].[Br-]',\n  '1-Butyl-3-methylimidazolium Tricyanomethanide': 'C[N+]1=CN(CCCC)C=C1.N#C[C-](C#N)C#N',\n  '1-Butyl-3-methylimidazolium Trifluoro(trifluoromethyl)borate': 'C[N+]1=CN(CCCC)C=C1.FC([B-](F)(F)F)(F)F',\n  '1-Butyl-3-methylimidazolium Trifluoroacetate': 'C[N+]1=CN(CCCC)C=C1.O=C([O-])C(F)(F)F',\n  '1-Butyl-3-methylimidazolium Trifluoromethanesulfonate': 'C[N+]1=CN(CCCC)C=C1.O=S(C(F)(F)F)([O-])=O',\n  '1-Butyl-3-methylpyridinium Bromide': 'CC1=C[N+](CCCC)=CC=C1.[Br-]',\n  '1-Butyl-3-methylpyridinium Chloride': 'CC1=C[N+](CCCC)=CC=C1.[Cl-]',\n  '1-Butyl-4-methylpyridinium Bromide': 'CC1=CC=[N+](CCCC)C=C1.[Br-]',\n  '1-Butyl-4-methylpyridinium Chloride': 'CC1=CC=[N+](CCCC)C=C1.[Cl-]',\n  '1-Butyl-4-methylpyridinium Hexafluorophosphate': 'CC1=CC=[N+](CCCC)C=C1.F[P-](F)(F)(F)(F)F',\n  '1-Butylpyridinium Bis(trifluoromethanesulfonyl)imide': 'O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CCCC[N+]1=CC=CC=C1',\n  '1-Butylpyridinium Bromide': 'CCCC[N+]1=CC=CC=C1.[Br-]',\n  '1-Butylpyridinium Chloride': 'CCCC[N+]1=CC=CC=C1.[Cl-]',\n  '1-Butylpyridinium Hexafluorophosphate': 'CCCC[N+]1=CC=CC=C1.F[P-](F)(F)(F)(F)F',\n  '1-Butylpyridinium Tetrafluoroborate': 'CCCC[N+]1=CC=CC=C1.F[B-](F)(F)F',\n  '1-Chloro-2-iodoethane': 'ICCCl',\n  '1-Cyclohexyl-3-(2-morpholinoethyl)carbodiimide Metho-p-toluenesulfonate': 'C[N+]1(CCN=C=NC2CCCCC2)CCOCC1.O=S(C3=CC=C(C)C=C3)([O-])=O',\n  '1-Cyclopentenylboronic Acid': 'OB(C1=CCCC1)O',\n  '1-Decyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide': 'C[N+]1=CN(CCCCCCCCCC)C=C1.O=S(C(F)(F)F)([N-]S(C(F)(F)F)(=O)=O)=O',\n  '1-Decyl-3-methylimidazolium Bromide': 'C[N+]1=CN(CCCCCCCCCC)C=C1.[Br-]',\n  '1-Decyl-3-methylimidazolium Chloride': 'C[N+]1=CN(CCCCCCCCCC)C=C1.[Cl-]',\n  '1-Ethoxycarbonyl-2-ethoxy-1,2-dihydroquinoline': 'CCOC1N(C(OCC)=O)C2=C(C=CC=C2)C=C1',\n  '1-Ethyl-1-methylpyrrolidinium Bromide': 'C[N+]1(CC)CCCC1.[Br-]',\n  '1-Ethyl-1-methylpyrrolidinium Tetrafluoroborate': 'C[N+]1(CC)CCCC1.F[B-](F)(F)F',\n  '1-Ethyl-2,3-dimethylimidazolium Bis(trifluoromethanesulfonyl)imide': 'O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC1=[N+](C)C=CN1CC',\n  '1-Ethyl-2-methylpyridinium Bromide': 'CC1=CC=CC=[N+]1CC.[Br-]',\n  '1-Ethyl-3-(hydroxymethyl)pyridinium Ethyl Sulfate': 'OCC1=C[N+](CC)=CC=C1.O=S(OCC)([O-])=O',\n  '1-Ethyl-3-methylimidazolium Acetate': 'C[N+]1=CN(CC)C=C1.CC([O-])=O',\n  '1-Ethyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide': 'C[N+]1=CN(CC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O',\n  '1-Ethyl-3-methylimidazolium Bromide': 'C[N+]1=CN(CC)C=C1.[Br-]',\n  '1-Ethyl-3-methylimidazolium Chloride': 'C[N+]1=CN(CC)C=C1.[Cl-]',\n  '1-Ethyl-3-methylimidazolium Dicyanamide': 'CCN1C=[N+](C)C=C1.N#C[N-]C#N',\n  '1-Ethyl-3-methylimidazolium Diethyl Phosphate': 'C[N+]1=CN(CC)C=C1.O=P(OCC)([O-])OCC',\n  '1-Ethyl-3-methylimidazolium Ethyl Sulfate': 'C[N+]1=CN(CC)C=C1.O=S(OCC)([O-])=O',\n  '1-Ethyl-3-methylimidazolium Hexafluorophosphate': 'C[N+]1=CN(CC)C=C1.F[P-](F)(F)(F)(F)F',\n  '1-Ethyl-3-methylimidazolium Hydrogen Sulfate': 'C[N+]1=CN(CC)C=C1.O=S(O)([O-])=O',\n  '1-Ethyl-3-methylimidazolium Iodide': 'C[N+]1=CN(CC)C=C1.[I-]',\n  '1-Ethyl-3-methylimidazolium Methanesulfonate': 'C[N+]1=CN(CC)C=C1.CS(=O)([O-])=O',\n  '1-Ethyl-3-methylimidazolium Methyl Sulfate': 'C[N+]1=CN(CC)C=C1.O=S(OC)([O-])=O',\n  '1-Ethyl-3-methylimidazolium Nitrate': 'C[N+]1=CN(CC)C=C1.[O-][N+]([O-])=O',\n  '1-Ethyl-3-methylimidazolium Tetrachloroferrate': 'C[N+]1=CN(CC)C=C1.Cl[Fe-](Cl)(Cl)Cl',\n  '1-Ethyl-3-methylimidazolium Tetrafluoroborate': 'C[N+]1=CN(CC)C=C1.F[B-](F)(F)F',\n  '1-Ethyl-3-methylimidazolium Thiocyanate': 'C[N+]1=CN(CC)C=C1.[S-]C#N',\n  '1-Ethyl-3-methylimidazolium Tricyanomethanide': 'C[N+]1=CN(CC)C=C1.N#C[C-](C#N)C#N',\n  '1-Ethyl-3-methylimidazolium Trifluoro(trifluoromethyl)borate': 'C[N+]1=CN(CC)C=C1.FC([B-](F)(F)F)(F)F',\n  '1-Ethyl-3-methylimidazolium Trifluoroacetate': 'C[N+]1=CN(CC)C=C1.O=C([O-])C(F)(F)F',\n  '1-Ethyl-3-methylimidazolium Trifluoromethanesulfonate': 'C[N+]1=CN(CC)C=C1.O=S(C(F)(F)F)([O-])=O',\n  '1-Ethyl-3-methylimidazolium p-Toluenesulfonate': 'C[N+]1=CN(CC)C=C1.CC2=CC=C(S(=O)([O-])=O)C=C2',\n  '1-Ethyl-3-methylpyridinium Bis(trifluoromethanesulfonyl)imide': 'CC1=CC=C[N+](CC)=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O',\n  '1-Ethyl-3-methylpyridinium Ethyl Sulfate': 'CC1=C[N+](CC)=CC=C1.O=S(OCC)([O-])=O',\n  '1-Ethyl-4-methylpyridinium Bromide': 'CC1=CC=[N+](CC)C=C1.[Br-]',\n  '1-Ethylpyridinium Bromide': 'CC[N+]1=CC=CC=C1.[Br-]',\n  '1-Ethylpyridinium Chloride': 'CC[N+]1=CC=CC=C1.[Cl-]',\n  '1-Fluoro-2,4,6-trimethylpyridinium Tetrafluoroborate': 'CC1=[N+](F)C(C)=CC(C)=C1.F[B-](F)(F)F',\n  '1-Fluoro-2,4,6-trimethylpyridinium Trifluoromethanesulfonate': 'CC1=[N+](F)C(C)=CC(C)=C1.O=S(C(F)(F)F)([O-])=O',\n  '1-Fluoro-2,6-dichloropyridinium Tetrafluoroborate': 'ClC1=[N+](F)C(Cl)=CC=C1.F[B-](F)(F)F',\n  '1-Fluoro-3,3-dimethyl-1,2-benziodoxole': 'CC1(C)OI(F)C2=CC=CC=C12',\n  '1-Fluoropyridinium Tetrafluoroborate': 'F[N+]1=CC=CC=C1.F[B-](F)(F)F',\n  '1-Fluoropyridinium Trifluoromethanesulfonate': 'F[N+]1=CC=CC=C1.O=S(C(F)(F)F)([O-])=O',\n  '1H-Benzotriazol-1-yloxytripyrrolidinophosphonium Hexafluorophosphate': 'F[P-](F)(F)(F)(F)F.N1([P+](N2CCCC2)(ON3N=NC4=CC=CC=C43)N5CCCC5)CCCC1',\n  '1H-Benzotriazol-1-yloxytris(dimethylamino)phosphonium Hexafluorophosphate': 'CN([P+](N(C)C)(ON1N=NC2=CC=CC=C21)N(C)C)C.F[P-](F)(F)(F)(F)F',\n  '1H-Cyclopenta[l]phenanthrene': 'C12=CC=CC=C1C(CC=C3)=C3C4=C2C=CC=C4',\n  '1-Hexyl-2,3-dimethylimidazolium Iodide': 'C[N+]1=C(C)N(CCCCCC)C=C1.[I-]',\n  '1-Hexyl-3-methylimidazolium Bis(trifluoromethanesulfonyl)imide': 'C[N+]1=CN(CCCCCC)C=C1.O=S([N-]S(=O)(C(F)(F)F)=O)(C(F)(F)F)=O',\n  '1-Hexyl-3-methylimidazolium Bromide': 'C[N+]1=CN(CCCCCC)C=C1.[Br-]',\n  '1-Hexyl-3-methylimidazolium Chloride': 'C[N+]1=CN(CCCCCC)C=C1.[Cl-]',\n  '1-Hexyl-3-methylimidazolium Hexafluorophosphate': 'C[N+]1=CN(CCCCCC)C=C1.F[P-](F)(F)(F)(F)F',\n  '1-Hexyl-3-methylimidazolium Iodide': 'C[N+]1=CN(CCCCCC)C=C1.[I-]',\n  '1-Hexyl-3-methylimidazolium Tetrafluoroborate': 'C[N+]1=CN(CCCCCC)C=C1.F[B-](F)(F)F',\n  '1-Hexyl-3-methylimidazolium Trifluoromethanesulfonate': 'C[N+]1=CN(CCCCCC)C=C1.O=S(C(F)(F)F)([O-])=O',\n  '1-Hexylpyridinium Hexafluorophosphate': 'CCCCCC[N+]1=CC=CC=C1.F[P-](F)(F)(F)(F)F',\n  '1-Hydroxy-6-(trifluoromethyl)benzotriazole': 'FC(C1=CC=C2N=NN(O)C2=C1)(F)F',\n  '1-Methoxy-3-(trimethylsilyloxy)-1,3-butadiene': 'C=C(O[Si](C)(C)C)/C=C/OC',\n  '1-Methyl-1-[4-(diphenylphosphino)benzyl]pyrrolidinium Bromide': 'C[N+]1(CC2=CC=C(P(C3=CC=CC=C3)C4=CC=CC=C4)C=C2)CCCC1.[Br-]',\n  '1-Methyl-1-propylpiperidinium Bis(fluorosulfonyl)imide': 'O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+]1(CCC)CCCCC1',\n  '1-Methyl-1-propylpiperidinium Bromide': 'CCC[N+]1(C)CCCCC1.[Br-]',\n  '1-Methyl-1-propylpyrrolidinium Bis(trifluoromethanesulfonyl)imide': 'O=S(NS(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+]1(CCC)CCCC1',\n  '1-Methyl-2-pyrrolidinone': 'O=C1CCCN1C',\n  '1-Methyl-3-n-octylimidazolium Bromide': 'CCCCCCCC[N+]1=CN(C)C=C1.[Br-]',\n  '1-Methyl-3-n-octylimidazolium Chloride': 'CCCCCCCC[N+]1=CN(C)C=C1.[Cl-]',\n  '1-Methyl-3-n-octylimidazolium Hexafluorophosphate': 'CCCCCCCC[N+]1=CN(C)C=C1.F[P-](F)(F)(F)(F)F',\n  '1-Methyl-3-n-octylimidazolium Tetrafluoroborate': 'CCCCCCCC[N+]1=CN(C)C=C1.F[B-](F)(F)F',\n  '1-Methyl-3-n-octylimidazolium Trifluoromethanesulfonate': 'CCCCCCCC[N+]1=CN(C)C=C1.O=S(C(F)(F)F)([O-])=O',\n  '1-Methyl-3-pentylimidazolium Bromide': 'CCCCC[N+]1=CN(C)C=C1.[Br-]',\n  '1-Methyl-3-pentylimidazolium Tetrafluoroborate': 'CCCCC[N+]1=CN(C)C=C1.F[B-](F)(F)F',\n  '1-Methyl-3-propylimidazolium Bromide': 'CCC[N+]1=CN(C)C=C1.[Br-]',\n  '1-Methyl-3-propylimidazolium Chloride': 'CCC[N+]1=CN(C)C=C1.[Cl-]',\n  '1-Methyl-3-propylimidazolium Iodide': 'CCC[N+]1=CN(C)C=C1.[I-]',\n  '1-Methyl-3-propylimidazolium Tetrafluoroborate': 'CCC[N+]1=CN(C)C=C1.F[B-](F)(F)F',\n  '1-Phenyl-1,3-butanedione': 'CC(CC(C1=CC=CC=C1)=O)=O',\n  '1-Phenyl-2-(trimethylsilyl)acetylene': 'C[Si](C#CC1=CC=CC=C1)(C)C',\n  '1-Propylpyridinium Chloride': 'CCC[N+]1=CC=CC=C1.[Cl-]',\n  '1-Trifluoromethyl-1,2-benziodoxol-3(1H)-one': 'O=C1OI(C(F)(F)F)C2=CC=CC=C12',\n  '1-Trifluoromethyl-3,3-dimethyl-1,2-benziodoxole': 'CC1(C)OI(C(F)(F)F)C2=CC=CC=C12',\n  '2-(1H-1,2,4-Triazol-3-yl)pyridine': 'C1(C2=NNC=N2)=NC=CC=C1',\n  '2-(2-Bromophenyl)-2,3-dihydro-1H-naphtho[1,8-de][1,3,2]diazaborine': 'BrC(C=CC=C1)=C1B(N2)NC3=CC=CC4=C3C2=CC=C4',\n  '2-(2-Chloro-6-fluorophenyl)ethylamine hydrochloride': 'NCCC1=C(F)C=CC=C1Cl.[H]Cl',\n  '2-(2-Hydroxyphenyl)benzothiazole': 'OC1=CC=CC=C1C2=NC3=CC=CC=C3S2',\n  '2-(2-Hydroxyphenyl)benzoxazole': 'OC1=CC=CC=C1C2=NC3=CC=CC=C3O2',\n  '2-(2-Pyridyl)benzoxazole': 'C1(C2=NC=CC=C2)=NC3=CC=CC=C3O1',\n  '2-(2-Pyridyl)indole': 'C(N1)(C2=NC=CC=C2)=CC3=C1C=CC=C3',\n  '2-(3,4-Epoxycyclohexyl)ethyltrimethoxysilane': 'CO[Si](OC)(CCC1CC(O2)C2CC1)OC',\n  '2-(3-Bromophenyl)-2,3-dihydro-1H-naphtho[1,8-de][1,3,2]diazaborine': 'BrC1=CC=CC(B(N2)NC3=CC=CC4=C3C2=CC=C4)=C1',\n  '2-(4-Bromophenyl)-2,3-dihydro-1H-naphtho[1,8-de][1,3,2]diazaborine': 'BrC1=CC=C(C=C1)B(N2)NC3=CC=CC4=CC=CC2=C43',\n  '2-(4-Thiazolyl)benzimidazole': 'C1(C2=CSC=N2)=NC3=CC=CC=C3N1',\n  '2-(5-Norbornene-2,3-dicarboximido)-1,1,3,3-tetramethyluronium Tetrafluoroborate': 'CN(C)C(N(C)C)=[O+]N(C1=O)C(C2C1C3C=CC2C3)=O.F[B-](F)(F)F',\n  \"2-(Dicyclohexylphosphino)-2'-(dimethylamino)biphenyl\": 'CN(C1=CC=CC=C1C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C',\n  '2-(Dicyclohexylphosphino)biphenyl': 'C1(C2=CC=CC=C2)=CC=CC=C1P(C3CCCCC3)C4CCCCC4',\n  '2-(Dimethylvinylsilyl)pyridine': 'C=C[Si](C1=NC=CC=C1)(C)C',\n  '2-(Diphenylphosphino)benzaldehyde': 'O=CC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3',\n  '2-(Diphenylphosphino)benzoic Acid': 'O=C(O)C1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3',\n  '2-(Diphenylphosphino)benzonitrile': 'N#CC1=CC=CC=C1P(C2=CC=CC=C2)C3=CC=CC=C3',\n  '2-(Diphenylphosphino)biphenyl': 'C1(C2=CC=CC=C2)=CC=CC=C1P(C3=CC=CC=C3)C4=CC=CC=C4',\n  '2-(Di-tert-butylphosphino)biphenyl': 'CC(P(C1=CC=CC=C1C2=CC=CC=C2)C(C)(C)C)(C)C',\n  '2-(Trimethylsilylethynyl)thiophene': 'C[Si](C#CC1=CC=CS1)(C)C',\n  \"2,2'-(Methylimino)bis(N,N-di-n-octylacetamide)\": 'CN(CC(N(CCCCCCCC)CCCCCCCC)=O)CC(N(CCCCCCCC)CCCCCCCC)=O',\n  '2,2,2-Trifluoro-1,1-ethanediol': 'OC(O)C(F)(F)F',\n  '2,2,2-Trifluoroethyl Methanesulfonate': 'CS(=O)(OCC(F)(F)F)=O',\n  '2,2,2-Trifluoroethyl Trifluoromethanesulfonate': 'O=S(C(F)(F)F)(OCC(F)(F)F)=O',\n  '2,2,2-Trifluoroethyl p-Toluenesulfonate': 'CC1=CC=C(S(=O)(OCC(F)(F)F)=O)C=C1',\n  '2,2,2-Trifluoro-N,N-dimethylacetamide': 'O=C(N(C)C)C(F)(F)F',\n  '2,2,3,3,3-Pentafluoropropyl p-Toluenesulfonate': 'CC1=CC=C(S(=O)(OCC(F)(F)C(F)(F)F)=O)C=C1',\n  '2,2,6,6-Tetramethylpiperidine': 'CC1(C)CCCC(C)(C)N1',\n  '2,2,6,6-Tetramethylpiperidine 1-Oxyl': 'CC1(C)CCCC(C)(C)N1[O]',\n  '2,2,6,6-Tetramethylpiperidine 1-Oxyl Free Radical': 'CC1(C)CCCC(C)(C)N1[O]',\n  \"2,2':6',2''-Terpyridine\": 'C1(C2=NC(C3=NC=CC=C3)=CC=C2)=NC=CC=C1',\n  \"2,2':6',2''-Terpyridine-4'-carboxylic Acid\": 'O=C(C1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1)O',\n  '2,2′-Bipyridinium chlorochromate': '[O-][Cr](=O)(Cl)=O.[O-][Cr](=O)(Cl)=O.C1(C2=CC=CC=[NH+]2)=CC=CC=[NH+]1',\n  \"2,2'-Bi(1,8-naphthyridine)\": 'C1(C2=NC3=NC=CC=C3C=C2)=NC4=NC=CC=C4C=C1',\n  \"2,2'-Bi-4-lepidine\": 'CC1=CC(C2=NC3=CC=CC=C3C(C)=C2)=NC4=C1C=CC=C4',\n  \"2,2'-Bicinchoninic Acid Dipotassium Salt Hydrate\": 'O=C([O-])C1=CC(C2=NC3=CC=CC=C3C(C([O-])=O)=C2)=NC4=CC=CC=C14.[H]O[H].[K+].[K+]',\n  \"2,2'-Biimidazole\": 'C1(C2=NC=CN2)=NC=CN1',\n  \"2,2'-Bipyrazine\": 'C1(C2=NC=CN=C2)=NC=CN=C1',\n  \"2,2'-Bipyridine-3,3'-dicarboxylic Acid\": 'O=C(C1=CC=CN=C1C2=NC=CC=C2C(O)=O)O',\n  \"2,2'-Bipyridine-3,3'-diol\": 'OC1=CC=CN=C1C2=NC=CC=C2O',\n  \"2,2'-Bipyridine-4,4'-dicarboxylic Acid\": 'O=C(C1=CC(C2=NC=CC(C(O)=O)=C2)=NC=C1)O',\n  \"2,2'-Bipyridine-5,5'-dicarboxylic Acid\": 'O=C(C1=CN=C(C2=NC=C(C(O)=O)C=C2)C=C1)O',\n  \"2,2'-Bipyridine-6,6'-dicarboxylic Acid\": 'O=C(C1=CC=CC(C2=NC(C(O)=O)=CC=C2)=N1)O',\n  \"2,2'-Bipyridine-6,6'-diol\": 'OC1=CC=CC(C2=NC(O)=CC=C2)=N1',\n  \"2,2'-Bipyridine-6-carbonitrile\": 'N#CC1=CC=CC(C2=NC=CC=C2)=N1',\n  \"2,2'-Bipyridyl\": 'C1(C2=NC=CC=C2)=NC=CC=C1',\n  \"2,2'-Bipyridyl 1,1'-Dioxide\": '[O-][N+]1=CC=CC=C1C2=CC=CC=[N+]2[O-]',\n  \"2,2'-Bipyrimidyl\": 'C1(C2=NC=CC=N2)=NC=CC=N1',\n  \"2,2'-Biquinoline\": 'C1(C2=NC3=CC=CC=C3C=C2)=NC4=CC=CC=C4C=C1',\n  \"2,2'-Bis(diphenylphosphino)biphenyl\": 'C1(C2=CC=CC=C2P(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1P(C5=CC=CC=C5)C6=CC=CC=C6',\n  \"2,2'-Carbonylbis(3,5-dioxo-4-methyl-1,2,4-oxadiazolidine)\": 'O=C(N(C(N1C)=O)OC1=O)N(C(N2C)=O)OC2=O',\n  \"2,2'-Diamino-4,4'-bithiazole\": 'NC1=NC(C2=CSC(N)=N2)=CS1',\n  '2,2-Difluoro-2-(fluorosulfonyl)acetic Acid': 'O=C(O)C(F)(F)S(=O)(F)=O',\n  '2,2-Difluoroethyl Trifluoromethanesulfonate': 'O=S(C(F)(F)F)(OCC(F)F)=O',\n  '2,2-Difluoroethylamine': 'NCC(F)F',\n  '2,2-Dimethyl-6,6,7,7,8,8,8-heptafluoro-3,5-octanedione': 'CC(C)(C)C(CC(C(F)(F)C(F)(F)C(F)(F)F)=O)=O',\n  '2,2-Dimethylpropylmagnesium chloride': 'Cl[Mg]CC(C)(C)C',\n  \"2,2'-Dipyridyl Disulfide\": 'C1(SSC2=NC=CC=C2)=NC=CC=C1',\n  \"2,2'-Methylenebisbenzothiazole\": 'C1(CC2=NC3=CC=CC=C3S2)=NC4=CC=CC=C4S1',\n  '2,3,7,8,12,13,17,18-Octaethylporphyrin': 'CCC1=C(CC)C2=NC1=CC3=C(CC)C(CC)=C(N3)C=C4C(CC)=C(CC)C(C=C5C(CC)=C(CC)C(N5)=C2)=N4',\n  '2,3,7,8,12,13,17,18-Octafluoro-5,10,15,20-tetrakis(pentafluorophenyl)porphyrin': 'FC1=C(F)C(F)=C(F)C(F)=C1C2=C3C(F)=C(F)C(C(C4=C(F)C(F)=C(F)C(F)=C4F)=C(N5)C(F)=C(F)C5=C(C6=C(F)C(F)=C(F)C(F)=C6F)C7=NC(C(F)=C7F)=C(C8=C(F)C(F)=C(F)C(F)=C8F)C9=C(F)C(F)=C2N9)=N3',\n  '2,3-Dimethyl-1-propylimidazolium Bis(trifluoromethanesulfonyl)imide': 'CN1C(C)=[N+](CCC)C=C1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O',\n  '2,3-Lutidine': 'CC1=NC=CC=C1C',\n  '2,4,4,6-Tetrabromo-2,5-cyclohexadienone': 'BrC1=CC(Br)(Br)C=C(Br)C1=O',\n  '2,4,5-Trichlorophenol': 'OC1=CC(Cl)=C(Cl)C=C1Cl',\n  '2,4,6,8-Tetramethyl-2,4,6,8-tetravinylcyclotetrasiloxane': 'C=CO1(C)[SiH2]O(C=C)(C)[SiH2]O(C=C)(C)[SiH2]O(C=C)(C)[SiH2]1',\n  '2,4,6,8-Tetramethylcyclotetrasiloxane': 'CO1[SiH2]O(C)[SiH2]O(C)[SiH2]O(C)[SiH2]1',\n  '2,4,6-Tri(2-pyridyl)-1,3,5-triazine': 'C1(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=N1',\n  '2,4,6-Tri(4-pyridyl)-1,3,5-triazine': 'C1(C2=CC=NC=C2)=NC(C3=CC=NC=C3)=NC(C4=CC=NC=C4)=N1',\n  '2,4,6-Trichlorobenzoyl Chloride': 'O=C(Cl)C1=C(Cl)C=C(Cl)C=C1Cl',\n  '2,4,6-Triisopropylbenzenesulfonyl Chloride': 'O=S(C1=C(C(C)C)C=C(C(C)C)C=C1C(C)C)(Cl)=O',\n  '2,4,6-Trimethylpyridinium p-Toluenesulfonate': 'CC1=[NH+]C(C)=CC(C)=C1.CC2=CC=C(S(=O)([O-])=O)C=C2',\n  '2,4,6-Tris(3,4,5-trifluorophenyl)boroxin': 'FC1=C(F)C(F)=CC(B2OB(C3=CC(F)=C(F)C(F)=C3)OB(C4=CC(F)=C(F)C(F)=C4)O2)=C1',\n  '2,4-Dibromo-6-[(E)-[[(1R,2R)-2-(isoindolin-2-yl)-1,2-diphenylethyl]imino]methyl]phenol': 'OC1=C(/C=N/[C@H](C2=CC=CC=C2)[C@H](N3CC4=C(C=CC=C4)C3)C5=CC=CC=C5)C=C(Br)C=C1Br',\n  '2,4-Dibromo-6-[[[[(4S,5S)-4,5-dihydro-4,5-diphenyl-1-tosyl-1H-imidazol-2-yl]methyl][(S)-1-phenylethyl]amino]methyl]phenol': 'OC1=C(CN(CC2=N[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N2S(=O)(C5=CC=C(C)C=C5)=O)[C@H](C6=CC=CC=C6)C)C=C(Br)C=C1Br',\n  '2,4-Lutidine': 'CC1=NC=CC(C)=C1',\n  '2,4-Mesitylenedisulfonyl Dichloride': 'CC1=C(S(=O)(Cl)=O)C(C)=CC(C)=C1S(=O)(Cl)=O',\n  '2,5-Bis(4-bromophenyl)-1,1-dimethyl-3,4-diphenylsilole': 'C[Si]1(C)C(C2=CC=C(Br)C=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C1C5=CC=C(Br)C=C5',\n  '2,5-Bis[(trimethylsilyl)ethynyl]thiophene': 'C[Si](C#CC1=CC=C(C#C[Si](C)(C)C)S1)(C)C',\n  '2,5-Dibromo-1,1,3,4-tetraphenylsilole': 'BrC1=C(C2=CC=CC=C2)C(C3=CC=CC=C3)=C(Br)[Si]1(C4=CC=CC=C4)C5=CC=CC=C5',\n  '2,5-Dibromo-1,1-dimethyl-3,4-diphenylsilole': 'C[Si]1(C)C(Br)=C(C2=CC=CC=C2)C(C3=CC=CC=C3)=C1Br',\n  '2,5-Diphenylpyridine': 'C1(C2=CC=CC=C2)=NC=C(C3=CC=CC=C3)C=C1',\n  '2,5-Lutidine': 'CC1=NC=C(C)C=C1',\n  '2,5-Norbornadiene': 'C12C=CC(C2)C=C1',\n  '2,6-Bis(2-benzimidazolyl)pyridine': 'C1(C2=NC3=CC=CC=C3N2)=NC(C4=NC5=CC=CC=C5N4)=CC=C1',\n  '2,6-Bis(2-pyridyl)-4(1H)-pyridone': 'O=C1C=C(C2=NC=CC=C2)NC(C3=NC=CC=C3)=C1',\n  '2,6-Bis[(2,2,6,6-tetramethyl-1-piperidinyl)methyl]phenylboronic Acid': 'OB(C1=C(CN2C(C)(C)CCCC2(C)C)C=CC=C1CN3C(C)(C)CCCC3(C)C)O',\n  '2,6-Bis[(2R,4S,5S)-1-benzyl-4,5-diphenylimidazolidin-2-yl]pyridine': 'C1([C@@H]2N[C@@H](C3=CC=CC=C3)[C@H](C4=CC=CC=C4)N2CC5=CC=CC=C5)=NC([C@@H]6N[C@@H](C7=CC=CC=C7)[C@H](C8=CC=CC=C8)N6CC9=CC=CC=C9)=CC=C1',\n  '2,6-Bis[(2S,4S)-4-methyl-5,5-diphenyloxazolidin-2-yl]pyridine': 'C[C@@H]1N[C@H](C2=CC=CC([C@@H]3OC(C4=CC=CC=C4)(C5=CC=CC=C5)[C@H](C)N3)=N2)OC1(C6=CC=CC=C6)C7=CC=CC=C7',\n  '2,6-Bis[(2S,5S)-4,4-diphenyl-1-aza-3-oxabicyclo[3.3.0]octan-2-yl]pyridine': '[H][C@]12C(C3=CC=CC=C3)(C4=CC=CC=C4)O[C@@H](C5=CC=CC([C@H]6N7CCC[C@@]7([H])C(C8=CC=CC=C8)(C9=CC=CC=C9)O6)=N5)N1CCC2',\n  '2,6-Di(1-pyrazolyl)pyridine': 'C1(N2N=CC=C2)=NC(N3N=CC=C3)=CC=C1',\n  '2,6-Di(2H-1,2,3-triazol-4-yl)pyridine': 'C1(C2=NNN=C2)=NC(C3=NNN=C3)=CC=C1',\n  '2,6-Dimethyl-3,5-heptanedione': 'CC(C)C(CC(C(C)C)=O)=O',\n  '2,6-Lutidine': 'CC1=NC(C)=CC=C1',\n  '2,8,9-Triisobutyl-2,5,8,9-tetraaza-1-phosphabicyclo[3.3.3]undecane': 'CC(C)CN1CCN2CCN(CC(C)C)P1N(CC(C)C)CC2',\n  '2,8,9-Triisopropyl-2,5,8,9-tetraaza-1-phosphabicyclo[3,3,3]undecane': 'CC(N1CCN2CCN(C(C)C)P1N(C(C)C)CC2)C',\n  '2,8-Difluoro-5-(trifluoromethyl)-5H-dibenzo[b,d]thiophen-5-ium Trifluoromethanesulfonate': 'FC([S+]1C2=CC=C(F)C=C2C3=CC(F)=CC=C31)(F)F.O=S(C(F)(F)F)([O-])=O',\n  '2,9-Dibutyl-1,10-phenanthroline': 'CCCCC1=NC2=C3N=C(CCCC)C=CC3=CC=C2C=C1',\n  '2,9-Dichloro-1,10-phenanthroline': 'ClC1=NC2=C3N=C(Cl)C=CC3=CC=C2C=C1',\n  '2,9-Diphenyl-1,10-phenanthroline': 'C1(C2=CC=CC=C2)=NC3=C4N=C(C5=CC=CC=C5)C=CC4=CC=C3C=C1',\n  '2-[(2,2,6,6-Tetramethyl-1-piperidyl)methyl]phenylboronic Acid': 'OB(C1=CC=CC=C1CN2C(C)(C)CCCC2(C)C)O',\n  '2-[N,N-Bis(trifluoromethanesulfonyl)amino]-5-chloropyridine': 'ClC1=CN=C(N(S(=O)(C(F)(F)F)=O)S(=O)(C(F)(F)F)=O)C=C1',\n  '2-Acetylcyclohexanone': 'O=C1C(C(C)=O)CCCC1',\n  '2-Acetylcyclopentanone': 'O=C1C(C(C)=O)CCC1',\n  '2-Bromo-1,10-phenanthroline': 'BrC1=NC2=C3N=CC=CC3=CC=C2C=C1',\n  '2-Bromo-1-ethylpyridinium Tetrafluoroborate': 'CC[N+]1=CC=CC=C1Br.F[B-](F)(F)F',\n  '2-Bromo-2-cyano-N,N-dimethylacetamide': 'O=C(N(C)C)C(Br)C#N',\n  '2-Chloro-1,10-phenanthroline': 'ClC1=NC2=C3N=CC=CC3=CC=C2C=C1',\n  '2-Chloro-1,3,2-dioxaphospholane': 'ClP1OCCO1',\n  '2-Chloro-1,3-bis(2,6-diisopropylphenyl)-1H-imidazolium Chloride': 'CC(C1=C([N+]2=C(Cl)N(C3=C(C(C)C)C=CC=C3C(C)C)C=C2)C(C(C)C)=CC=C1)C.[Cl-]',\n  '2-Chloro-1,3-dimethylimidazolinium Chloride': 'C[N+]1=C(Cl)N(C)CC1.[Cl-]',\n  '2-Chloro-1,3-dimethylimidazolinium Hexafluorophosphate': 'C[N+]1=C(Cl)N(C)CC1.F[P-](F)(F)(F)(F)F',\n  '2-Chloro-1,3-dimethylimidazolinium Tetrafluoroborate': 'C[N+]1=C(Cl)N(C)CC1.F[B-](F)(F)F',\n  '2-Chloro-1-methylpyridinium Iodide': 'C[N+]1=CC=CC=C1Cl.[I-]',\n  '2-Chloro-1-methylpyridinium p-Toluenesulfonate': 'C[N+]1=CC=CC=C1Cl.CC2=CC=C(S(=O)([O-])=O)C=C2',\n  '2-Chloro-4H-1,3,2-benzodioxaphosphorin-4-one': 'O=C1OP(Cl)OC2=CC=CC=C12',\n  '2-Cyanoethyltriethoxysilane': 'CCO[Si](OCC)(CCC#N)OCC',\n  \"2-Dicyclohexylphosphino-2',4',6'-triisopropylbiphenyl\": 'CC(C1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(C(C)C)=CC(C(C)C)=C1)C',\n  \"2-Dicyclohexylphosphino-2',6'-diisopropoxybiphenyl\": 'CC(OC1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(OC(C)C)=CC=C1)C',\n  \"2-Dicyclohexylphosphino-2',6'-dimethoxybiphenyl\": 'COC1=C(C2=CC=CC=C2P(C3CCCCC3)C4CCCCC4)C(OC)=CC=C1',\n  \"2-Di-tert-butylphosphino-2',4',6'-triisopropylbiphenyl\": 'CC(C1=C(C2=CC=CC=C2P(C(C)(C)C)C(C)(C)C)C(C(C)C)=CC(C(C)C)=C1)C',\n  '2-Fluoro-1-methylpyridinium p-Toluenesulfonate': 'C[N+]1=CC=CC=C1F.CC2=CC=C(S(=O)([O-])=O)C=C2',\n  '2-Furoyltrifluoroacetone': 'O=C(CC(C1=CC=CO1)=O)C(F)(F)F',\n  '2-Hydroxy-2-azaadamantane': 'ON1C2CC3CC(C2)CC1C3',\n  '2-Hydroxybenzaldehyde Phenylhydrazone': 'OC1=CC=CC=C1/C=N/NC2=CC=CC=C2',\n  '2-Hydroxybenzoic Acid': 'O=C(O)C1=CC=CC=C1O',\n  '2-Hydroxypyridine N-Oxide': 'OC1=CC=CC=[N+]1[O-]',\n  '2-Iodosobenzoic Acid': 'O=C(O)C1=CC=CC=C1I=O',\n  '2-Iodoxybenzoic acid': 'O=C(O)C1=CC=CC=C1I(=O)=O',\n  '2-methoxy ethanol': 'OCCOC',\n  '2-Methyl-1,10-phenanthroline': 'CC1=NC2=C3N=CC=CC3=CC=C2C=C1',\n  '2-Methyl-6-nitrobenzoic Anhydride': 'O=C(OC(C1=C([N+]([O-])=O)C=CC=C1C)=O)C2=C([N+]([O-])=O)C=CC=C2C',\n  '2-Methylbenzo[e]indene': 'N/A',\n  '2-Methylcyclopenta[l]phenanthrene': 'CC1=CC2=C3CC=CC=C3C4=C(C2=C1)C=CC=C4',\n  '2-Nitrophenylarsonic Acid': 'O=[As](C1=CC=CC=C1[N+]([O-])=O)(O)O',\n  '2-Norbornene': 'C12C=CC(C2)CC1',\n  '2-Phenylethylboronic Acid': 'OB(CCC1=CC=CC=C1)O',\n  '2-Salicylideneaminophenol': 'OC1=CC=CC=C1/N=C/C2=CC=CC=C2O',\n  '2-tert-Butyl-1,1,3,3-tetramethylguanidine': 'CN(C)C(N(C)C)=NC(C)(C)C',\n  '2-Trimethylsilyloxy-1,3-butadiene': 'C=C(O[Si](C)(C)C)C=C',\n  '2-Trimethylsilylthiophene': 'C[Si](C1=CC=CS1)(C)C',\n  '3-(2-Aminoethylamino)propyltrimethoxysilane': 'CO[Si](OC)(CCCNCCN)OC',\n  '3-(Diethoxyphosphoryloxy)-1,2,3-benzotriazin-4(3H)-one': 'O=C1N(OP(OCC)(OCC)=O)N=NC2=CC=CC=C12',\n  '3-(Dimethylsilyloxy)-1,1,5,5-tetramethyl-3-phenyltrisiloxane': 'C[SiH](C)O[Si](C1=CC=CC=C1)(O[SiH](C)C)O[SiH](C)C',\n  '3-(Diphenylphosphino)-1-propylamine': 'NCCCP(C1=CC=CC=C1)C2=CC=CC=C2',\n  '3-(Triallylsilyl)propyl Acrylate': 'C=CC(OCCC[Si](CC=C)(CC=C)CC=C)=O',\n  '3-(Triallylsilyl)propyl Methacrylate': 'CC(C(OCCC[Si](CC=C)(CC=C)CC=C)=O)=C',\n  '3-(Triethoxysilyl)propyl Isocyanate': 'CCO[Si](CCCN=C=O)(OCC)OCC',\n  '3-(Trimethoxysilyl)propyl Acrylate': 'C=CC(OCCC[Si](OC)(OC)OC)=O',\n  '3-(Trimethoxysilyl)propyl Methacrylate': 'CC(C(OCCC[Si](OC)(OC)OC)=O)=C',\n  '3-(Trimethylsilylethynyl)thiophene': 'C[Si](C#CC1=CSC=C1)(C)C',\n  \"3,3'-Iminobis(N,N-dimethylpropylamine)\": 'CN(C)CCCNCCCN(C)C',\n  \"3,3'-Methylenebis(1-tert-butyl-3-imidazolium Bromide)\": 'CC(N1C=C[N+](C[N+]2=CN(C(C)(C)C)C=C2)=C1)(C)C.[Br-].[Br-]',\n  \"3,3'-Methylenebis[1-(2,6-diisopropylphenyl)-3-imidazolium Bromide]\": 'CC(C1=C(N2C=C[N+](C[N+]3=CN(C4=C(C(C)C)C=CC=C4C(C)C)C=C3)=C2)C(C(C)C)=CC=C1)C.[Br-].[Br-]',\n  '3,4,7,8-Tetramethyl-1,10-phenanthroline': 'CC1=C(C)C2=CC=C3C(C)=C(C)C=NC3=C2N=C1',\n  '3,4-Diacetyl-2,5-hexanedione': 'CC(C(C(C)=O)C(C(C)=O)C(C)=O)=O',\n  '3,4-Dihydro-2H-pyrido[1,2-a]pyrimidin-2-one': 'O=C1N=C(C=CC=C2)N2CC1',\n  '3,4-Dihydro-3-hydroxy-4-oxo-1,2,3-benzotriazine': 'O=C1N(O)N=NC2=CC=CC=C12',\n  '3,4-Lutidine': 'CC1=C(C)C=CN=C1',\n  '3,5,6,8-Tetrabromo-1,10-phenanthroline': 'BrC1=CC2=C(Br)C(Br)=C3C=C(Br)C=NC3=C2N=C1',\n  '3,5-Bis(trifluoromethyl)phenylboronic Acid': 'OB(C1=CC(C(F)(F)F)=CC(C(F)(F)F)=C1)O',\n  '3,5-Di(2-pyridyl)pyrazole': 'C1(C2=NC=CC=C2)=NNC(C3=NC=CC=C3)=C1',\n  '3,5-Heptanedione': 'CCC(CC(CC)=O)=O',\n  '3,5-Lutidine': 'CC1=CC(C)=CN=C1',\n  '3,6-Di(2-pyridyl)-1,2,4,5-tetrazine': 'C1(C2=NC=CC=C2)=NN=C(C3=NC=CC=C3)N=N1',\n  '3,8-Dibromo-1,10-phenanthroline': 'BrC1=CC2=CC=C3C=C(Br)C=NC3=C2N=C1',\n  '3-[(Dimethylsilyl)oxy]-1,1,3,5,5-pentamethyltrisiloxane': 'C[SiH](C)O[Si](C)(O[SiH](C)C)O[SiH](C)C',\n  '3-[[Dimethyl(vinyl)silyl]oxy]-1,1,5,5-tetramethyl-3-phenyl-1,5-divinyltrisiloxane': 'C=C[Si](C)(C)O[Si](C1=CC=CC=C1)(O[Si](C)(C)C=C)O[Si](C)(C)C=C',\n  '3-[[tert-Butyl(dimethyl)silyl]oxy]-1-propanol': 'OCCCO[Si](C)(C(C)(C)C)C',\n  '3-Aminopropyltriethoxysilane': 'CCO[Si](OCC)(CCCN)OCC',\n  '3-Aminopropyltrimethoxysilane': 'CO[Si](OC)(CCCN)OC',\n  '3-Bromo-1-(trimethylsilyl)-1-propyne': 'C[Si](C#CCBr)(C)C',\n  '3-Bromo-1,10-phenanthroline': 'BrC1=CC2=CC=C3C=CC=NC3=C2N=C1',\n  '3-Chloroacetylacetone': 'CC(C(Cl)C(C)=O)=O',\n  '3-Chloroperoxybenzoic acid': 'C1=CC(=CC(=C1)Cl)C(=O)OO',\n  '3-Chloropropyltriethoxysilane': 'CCO[Si](OCC)(CCCCl)OCC',\n  '3-Ethyl-2,4-pentanedione': 'CC(C(CC)C(C)=O)=O',\n  '3-Glycidyloxypropyltrimethoxysilane': 'CO[Si](OC)(CCCOCC1CO1)OC',\n  '3-Mercaptopropyl(dimethoxy)methylsilane': 'C[Si](OC)(CCCS)OC',\n  '3-Methyl-1-phenyl-2-phospholene 1-Oxide': 'CC(CC1)=CP1(C2=CC=CC=C2)=O',\n  '3-Methyl-2,4-pentanedione': 'CC(C(C)C(C)=O)=O',\n  '3-Nitro-1,2,4-triazole': 'O=[N+](C1=NNC=N1)[O-]',\n  '3-Phenyl-2,4-pentanedione': 'CC(C(C1=CC=CC=C1)C(C)=O)=O',\n  '3-Pyridinecarboxylic Anhydride': 'O=C(OC(C1=CC=CN=C1)=O)C2=CC=CN=C2',\n  '3-Quinolineboronic acid': 'OB(C1=CC2=CC=CC=C2N=C1)O',\n  '3-Tolylboronic acid': 'CC1=CC=CC(B(O)O)=C1',\n  '3-Trimethoxysilylpropyl Chloride': 'CO[Si](CCCCl)(OC)OC',\n  '3-Trimethylsilyl-2-propyn-1-ol': 'OCC#C[Si](C)(C)C',\n  \"4-([2,2':6',2''-Terpyridin]-4'-yl)benzoic Acid\": 'O=C(O)C1=CC=C(C2=CC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=C2)C=C1',\n  '4-(4,6-Dimethoxy-1,3,5-triazin-2-yl)-4-methylmorpholinium Chloride': 'C[N+]1(C2=NC(OC)=NC(OC)=N2)CCOCC1.[Cl-]',\n  \"4'-(4-Bromophenyl)-2,2':6',2''-terpyridine\": 'BrC1=CC=C(C2=CC(C3=NC=CC=C3)=NC(C4=NC=CC=C4)=C2)C=C1',\n  '4-(4-Dimethylaminophenylazo)phenylarsonic Acid Hydrochloride': 'O=[As](C1=CC=C(/N=N/C2=CC=C(N(C)C)C=C2)C=C1)(O)O.[H]Cl',\n  \"4'-(4-Pyridyl)-2,2':6',2''-terpyridine\": 'C1(C2=NC(C3=NC=CC=C3)=CC(C4=CC=NC=C4)=C2)=NC=CC=C1',\n  \"4-(Bromomethyl)-4'-methyl-2,2'-bipyridyl\": 'CC1=CC(C2=NC=CC(CBr)=C2)=NC=C1',\n  \"4-(Chloromethyl)-4'-methyl-2,2'-bipyridyl\": 'CC1=CC(C2=NC=CC(CCl)=C2)=NC=C1',\n  '4-(Dimethylamino)phenyldiphenylphosphine': 'CN(C1=CC=C(P(C2=CC=CC=C2)C3=CC=CC=C3)C=C1)C',\n  '4-(Dimethylamino)pyridine': 'CN(C1=CC=NC=C1)C',\n  '4-(Diphenylphosphino)benzoic Acid': 'O=C(O)C1=CC=C(P(C2=CC=CC=C2)C3=CC=CC=C3)C=C1',\n  '4-(N,N-Dimethylamino)phenylboronic acid': 'CN(C)C1=CC=C(B(O)O)C=C1',\n  '4-(Trimethylsilyl)-3-butyn-2-one': 'CC(C#C[Si](C)(C)C)=O',\n  '4-(Trimethylsilyl)diphenylacetylene': 'C[Si](C1=CC=C(C#CC2=CC=CC=C2)C=C1)(C)C',\n  '4,4,4-Trifluoro-1-(2-naphthyl)-1,3-butanedione': 'O=C(C1=CC=C2C=CC=CC2=C1)CC(C(F)(F)F)=O',\n  '4,4,4-Trifluoro-1-(2-thienyl)-1,3-butanedione': 'O=C(C1=CC=CS1)CC(C(F)(F)F)=O',\n  '4,4,4-Trifluoro-1-(4-methoxyphenyl)-1,3-butanedione': 'O=C(C1=CC=C(OC)C=C1)CC(C(F)(F)F)=O',\n  '4,4,4-Trifluoro-1-(p-tolyl)-1,3-butanedione': 'O=C(C1=CC=C(C)C=C1)CC(C(F)(F)F)=O',\n  '4,4,4-Trifluoro-1-phenyl-1,3-butanedione': 'O=C(C1=CC=CC=C1)CC(C(F)(F)F)=O',\n  '4,4,5,5-Tetramethyl-1,3,2-dioxaphospholane 2-Oxide': 'CC1(C)C(C)(C)OP(O1)=O',\n  \"4,4'-Bis(5-hexyl-2-thienyl)-2,2'-bipyridyl\": 'CCCCCCC1=CC=C(C2=CC(C3=NC=CC(C4=CC=C(CCCCCC)S4)=C3)=NC=C2)S1',\n  \"4,4'-Bis(chloromethyl)-2,2'-bipyridyl\": 'ClCC1=CC(C2=NC=CC(CCl)=C2)=NC=C1',\n  \"4,4'-Bis(hydroxymethyl)-2,2'-bipyridine\": 'OCC1=CC(C2=NC=CC(CO)=C2)=NC=C1',\n  \"4,4'-Diamino-2,2'-bipyridyl\": 'NC1=CC(C2=NC=CC(N)=C2)=NC=C1',\n  \"4,4'-Dibromo-2,2'-bipyridyl\": 'BrC1=CC(C2=NC=CC(Br)=C2)=NC=C1',\n  \"4,4'-Dimethoxy-2,2'-bipyridyl\": 'COC1=CC(C2=NC=CC(OC)=C2)=NC=C1',\n  \"4,4'-Dimethyl-2,2'-bipyridyl\": 'CC1=CC(C2=NC=CC(C)=C2)=NC=C1',\n  \"4,4'-Dimethyl-2,2'-bipyridyl 1-Oxide\": 'CC1=CC(C2=CC(C)=CC=[N+]2[O-])=NC=C1',\n  \"4,4'-Dinonyl-2,2'-bipyridyl\": 'CCCCCCCCCC1=CC(C2=NC=CC(CCCCCCCCC)=C2)=NC=C1',\n  \"4,4'-Di-tert-butyl-2,2'-bipyridyl\": 'CC(C1=CC(C2=NC=CC(C(C)(C)C)=C2)=NC=C1)(C)C',\n  '4,5-Bis(diphenylphosphino)-9,9-dimethylxanthene': 'CC1(C)C2=C(OC3=C1C=CC=C3P(C4=CC=CC=C4)C5=CC=CC=C5)C(P(C6=CC=CC=C6)C7=CC=CC=C7)=CC=C2',\n  '4,5-Diazafluoren-9-one': 'O=C1C2=CC=CN=C2C3=C1C=CC=N3',\n  '4,5-Diazafluorene-9-one O-(p-Toluenesulfonyl)oxime': 'O=S(ON=C1C2=CC=CN=C2C3=C1C=CC=N3)(C4=CC=C(C)C=C4)=O',\n  '4,6-Bis(diphenylphosphino)phenoxazine': 'C(C=CC=C1N2)(P(C3=CC=CC=C3)C4=CC=CC=C4)=C1OC5=C2C=CC=C5P(C6=CC=CC=C6)C7=CC=CC=C7',\n  '4,6-Diphenylthieno[3,4-d]-1,3-dioxol-2-one 5,5-Dioxide': 'O=C(OC1=C2C3=CC=CC=C3)OC1=C(C4=CC=CC=C4)S2(=O)=O',\n  '4,7-Dibromo-1,10-phenanthroline Hydrate': 'BrC1=CC=NC2=C3N=CC=C(Br)C3=CC=C12.[H]O[H]',\n  '4,7-Dichloro-1,10-phenanthroline Hydrate': 'ClC1=CC=NC2=C3N=CC=C(Cl)C3=CC=C12.[H]O[H]',\n  '4,7-Dihydroxy-1,10-phenanthroline': 'OC1=CC=NC2=C3N=CC=C(O)C3=CC=C12',\n  '4,7-Dimethyl-1,10-phenanthroline': 'CC1=CC=NC2=C3N=CC=C(C)C3=CC=C12',\n  \"4'-[(tert-Butyldimethylsilyloxy)methyl]-2,2,2-trifluoroacetophenone\": 'O=C(C1=CC=C(CO[Si](C)(C(C)(C)C)C)C=C1)C(F)(F)F',\n  '4-[2,2,2-Trifluoro-1-[(trimethylsilyl)oxy]ethyl]morpholine': 'C[Si](OC(N1CCOCC1)C(F)(F)F)(C)C',\n  '4-[2-[2-(4-Iodophenoxy)ethoxy]carbonyl]benzoyloxy-2,2,6,6-tetramethylpiperidin-1-oxyl': '[O]N1C(C)(C)CC(OC(C2=CC=CC=C2C(OCCOC3=CC=C(I)C=C3)=O)=O)CC1(C)C',\n  '4-Acetamido-2,2,6,6-tetramethyl-1-oxopiperidinium Tetrafluoroborate': 'O=[N+]1C(C)(C)CC(NC(C)=O)CC1(C)C.F[B-](F)(F)F',\n  '4-Acetamido-2,2,6,6-tetramethylpiperidine 1-Oxyl': 'CC1(C)CC(NC(C)=O)CC(C)(C)N1[O]',\n  \"4'-Bromo-2,2':6',2''-terpyridine\": 'BrC1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1',\n  '4-Bromotetraphenylsilane': 'BrC1=CC=C([Si](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)C=C1',\n  \"4'-Chloro-2,2':6',2''-terpyridine\": 'ClC1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1',\n  '4-Chlorophenyl Phosphorodichloridate': 'O=P(Cl)(Cl)OC1=CC=C(Cl)C=C1',\n  '4-Dimethylamino-1-neopentylpyridinium Chloride': 'CC(C)(C)C[N+]1=CC=C(N(C)C)C=C1.[Cl-]',\n  '4-Dimethylaminopyridine': 'CN(C1=CC=NC=C1)C',\n  '4-Dimethylaminopyridinium Bromide Perbromide': 'CN(C)C1=CC=[NH+]C=C1.Br[Br-]Br',\n  '4-Ethyl-4-methylmorpholinium Bromide': 'C[N+]1(CC)CCOCC1.[Br-]',\n  '4-Fluoro-N-salicylideneaniline': 'OC1=CC=CC=C1/C=N/C2=CC=C(F)C=C2',\n  '4-Fluorophenylmagnesium Bromide': 'Br[Mg]C1=CC=C(F)C=C1',\n  '4-Hydroxy-2,2,6,6-tetramethylpiperidine 1-Oxyl Benzoate': 'CC1(C)CC(OC(C2=CC=CC=C2)=O)CC(C)(C)N1[O]',\n  '4-Hydroxy-3-nitrophenylarsonic Acid': 'O=[As](C1=CC=C(O)C([N+]([O-])=O)=C1)(O)O',\n  \"4-Hydroxymethyl-4'-methyl-2,2'-bipyridyl\": 'CC1=CC(C2=NC=CC(CO)=C2)=NC=C1',\n  '4-Hydroxyphenylarsonic Acid': 'O=[As](C1=CC=C(O)C=C1)(O)O',\n  '4-Methoxy-2,2,6,6-tetramethylpiperidine 1-Oxyl': 'CC1(C)CC(OC)CC(C)(C)N1[O]',\n  '4-Methoxycarbonylphenylboronic acid': 'B(C1=CC=C(C=C1)C(=O)OC)(O)O',\n  '4-Methylmorpholine N-Oxide': 'C[N+]1([O-])CCOCC1',\n  '4-Nitrophenol': 'OC1=CC=C([N+]([O-])=O)C=C1',\n  '4-Nitrophenyl Trifluoromethanesulfonate': 'O=S(C(F)(F)F)(OC1=CC=C([N+]([O-])=O)C=C1)=O',\n  '4-Pyrrolidinopyridine': 'C1(N2CCCC2)=CC=NC=C1',\n  '4-tert-Butyl-2,6-dimethylphenylsulfur Trifluoride': 'CC1=C(S(F)(F)F)C(C)=CC(C(C)(C)C)=C1',\n  '4-Trifluoromethylbenzoic Anhydride': 'O=C(OC(C1=CC=C(C(F)(F)F)C=C1)=O)C2=CC=C(C(F)(F)F)C=C2',\n  '4-Trimethylsilyl-3-butyn-2-ol': 'CC(O)C#C[Si](C)(C)C',\n  '5-(Trimethylsilyl)-1,2,3,4,5-pentamethyl-1,3-cyclopentadiene': 'CC1([Si](C)(C)C)C(C)=C(C)C(C)=C1C',\n  '5,10,15,20-Tetra(4-pyridyl)porphyrin': 'C1(C2=CC=NC=C2)=C3C=CC(C(C4=CC=NC=C4)=C5C=CC(N5)=C(C6=CC=NC=C6)C(C=C7)=NC7=C(C8=CC=NC=C8)C9=CC=C1N9)=N3',\n  '5,10,15,20-Tetrakis(2,4,6-trimethylphenyl)porphyrin': 'CC1=C(C2=C3C=CC(C(C4=C(C)C=C(C)C=C4C)=C(N5)C=CC5=C(C6=C(C)C=C(C)C=C6C)C7=NC(C=C7)=C(C8=C(C)C=C(C)C=C8C)C9=CC=C2N9)=N3)C(C)=CC(C)=C1',\n  '5,10,15,20-Tetrakis(2,6-dichlorophenyl)porphyrin': 'ClC1=C(C2=C3C=CC(C(C4=C(Cl)C=CC=C4Cl)=C(N5)C=CC5=C(C6=C(Cl)C=CC=C6Cl)C7=NC(C=C7)=C(C8=C(Cl)C=CC=C8Cl)C9=CC=C2N9)=N3)C(Cl)=CC=C1',\n  '5,10,15,20-Tetrakis(3,5-dihydroxyphenyl)porphyrin': 'OC1=CC(O)=CC(C2=C3C=CC(C(C4=CC(O)=CC(O)=C4)=C(N5)C=CC5=C(C6=CC(O)=CC(O)=C6)C7=NC(C=C7)=C(C8=CC(O)=CC(O)=C8)C9=CC=C2N9)=N3)=C1',\n  '5,10,15,20-Tetrakis(3,5-dimethoxyphenyl)porphyrin': 'COC1=CC(OC)=CC(C2=C3C=CC(C(C4=CC(OC)=CC(OC)=C4)=C(N5)C=CC5=C(C6=CC(OC)=CC(OC)=C6)C7=NC(C=C7)=C(C8=CC(OC)=CC(OC)=C8)C9=CC=C2N9)=N3)=C1',\n  '5,10,15,20-Tetrakis(4-carboxymethyloxyphenyl)porphyrin': 'O=C(COC1=CC=C(C2=C3C=CC(C(C4=CC=C(OCC(O)=O)C=C4)=C(N5)C=CC5=C(C6=CC=C(OCC(O)=O)C=C6)C7=NC(C=C7)=C(C8=CC=C(OCC(O)=O)C=C8)C9=CC=C2N9)=N3)C=C1)O',\n  '5,10,15,20-Tetrakis(4-hydroxyphenyl)porphyrin': 'OC1=CC=C(C2=C3C=CC(C(C4=CC=C(O)C=C4)=C(N5)C=CC5=C(C6=CC=C(O)C=C6)C7=NC(C=C7)=C(C8=CC=C(O)C=C8)C9=CC=C2N9)=N3)C=C1',\n  '5,10,15,20-Tetrakis(4-methoxyphenyl)porphyrin': 'COC1=CC=C(C2=C3C=CC(C(C4=CC=C(OC)C=C4)=C(N5)C=CC5=C(C6=CC=C(OC)C=C6)C7=NC(C=C7)=C(C8=CC=C(OC)C=C8)C9=CC=C2N9)=N3)C=C1',\n  '5,10,15,20-Tetrakis(pentafluorophenyl)porphyrin': 'FC1=C(F)C(F)=C(F)C(F)=C1C2=C3C=CC(C(C4=C(F)C(F)=C(F)C(F)=C4F)=C(N5)C=CC5=C(C6=C(F)C(F)=C(F)C(F)=C6F)C7=NC(C=C7)=C(C8=C(F)C(F)=C(F)C(F)=C8F)C9=CC=C2N9)=N3',\n  '5,10,15,20-Tetrakis(p-tolyl)porphyrin': 'CC1=CC=C(C2=C3C=CC(C(C4=CC=C(C)C=C4)=C(N5)C=CC5=C(C6=CC=C(C)C=C6)C7=NC(C=C7)=C(C8=CC=C(C)C=C8)C9=CC=C2N9)=N3)C=C1',\n  \"5,5'-Bis(trifluoromethyl)-2,2'-bipyridyl\": 'FC(C1=CN=C(C2=NC=C(C(F)(F)F)C=C2)C=C1)(F)F',\n  \"5,5''-Bis(trimethylstannyl)-2,2':5',2''-terthiophene\": 'C[Sn](C1=CC=C(C2=CC=C(C3=CC=C([Sn](C)(C)C)S3)S2)S1)(C)C',\n  \"5,5'-Dibromo-2,2'-bipyridyl\": 'BrC1=CN=C(C2=NC=C(Br)C=C2)C=C1',\n  \"5,5-Dibromomeldrum's Acid\": 'O=C(OC(C)(C)O1)C(Br)(Br)C1=O',\n  \"5,5'-Dimethyl-2,2'-bipyridyl\": 'CC1=CN=C(C2=NC=C(C)C=C2)C=C1',\n  '5,6-Dimethyl-1,10-phenanthroline': 'CC1=C2C=CC=NC2=C3N=CC=CC3=C1C',\n  '5-Bromo-1,10-phenanthroline': 'BrC1=C2C=CC=NC2=C3N=CC=CC3=C1',\n  '5-Chloro-1,10-phenanthroline': 'ClC1=C2C=CC=NC2=C3N=CC=CC3=C1',\n  '5-Methyl-1,10-phenanthroline Hydrate': 'CC1=C2C=CC=NC2=C3N=CC=CC3=C1.[H]O[H]',\n  '5-Nitro-1,10-phenanthroline': 'O=[N+](C1=C2C=CC=NC2=C3N=CC=CC3=C1)[O-]',\n  '5-Sulfosalicylic Acid Dihydrate': 'OC1=CC=C(S(=O)(O)=O)C=C1C(O)=O.[H]O[H].[H]O[H]',\n  \"6,10-Dibenzyl-N,N'-dimethyl-N,N,N',N'-tetrakis(4-methylbenzyl)-1,4-dioxaspiro[4.5]decane-(2R,3R)-diylbis(methylammonium) Bis(tetrafluoroborate)\": 'C[N+](CC1=CC=C(C)C=C1)(CC2=CC=C(C)C=C2)(C)[C@@H]3OC4(C(CC5=CC=CC=C5)CCCC4(CC6=CC=CC=C6)[N+](CC7=CC=C(C)C=C7)(CC8=CC=C(C)C=C8)(C)C)OC3.F[B-](F)(F)F.F[B-](F)(F)F',\n  \"6,10-Dibenzyl-N,N'-dimethyl-N,N,N',N'-tetrakis(4-methylbenzyl)-1,4-dioxaspiro[4.5]decane-(2S,3S)-diylbis(methylammonium) Tetrafluoroborate\": 'C[N+](CC1=CC=C(C)C=C1)(CC2=CC=C(C)C=C2)(C)[C@H]3OC4(C(CC5=CC=CC=C5)CCCC4(CC6=CC=CC=C6)[N+](CC7=CC=C(C)C=C7)(CC8=CC=C(C)C=C8)(C)C)OC3.F[B-](F)(F)F.F[B-](F)(F)F',\n  \"6,6'-Bis(chloromethyl)-2,2'-bipyridyl\": 'ClCC1=CC=CC(C2=NC(CCl)=CC=C2)=N1',\n  \"6,6'-Diamino-2,2'-bipyridyl\": 'NC1=CC=CC(C2=NC(N)=CC=C2)=N1',\n  \"6,6'-Dibromo-2,2'-bipyridyl\": 'BrC1=CC=CC(C2=NC(Br)=CC=C2)=N1',\n  \"6,6'-Dicyano-2,2'-bipyridyl\": 'N#CC1=CC=CC(C2=NC(C#N)=CC=C2)=N1',\n  \"6,6'-Dimethyl-2,2'-bipyridyl\": 'CC1=CC=CC(C2=NC(C)=CC=C2)=N1',\n  '6,7-Dihydro-2-(2,4,6-trimethylphenyl)-5H-pyrrolo[2,1-c]-1,2,4-triazolium Perchlorate': 'CC1=C([N+]2=CN3C(CCC3)=N2)C(C)=CC(C)=C1.O=Cl(=O)([O-])=O',\n  '6,7-Dihydro-2-pentafluorophenyl-5H-pyrrolo[2,1-c][1,2,4]triazolium Tetrafluoroborate': 'FC1=C(F)C(F)=C(F)C(F)=C1[N+]2=CN3C(CCC3)=N2.F[B-](F)(F)F',\n  '6,8-Bis(benzylthio)octanoic Acid': 'O=C(O)CCCCC(SCC1=CC=CC=C1)CCSCC2=CC=CC=C2',\n  \"6-Bromo-2,2'-bipyridyl\": 'BrC1=CC=CC(C2=NC=CC=C2)=N1',\n  \"6-Bromo-4,4'-dimethyl-2,2'-bipyridyl\": 'CC1=CC(C2=NC(Br)=CC(C)=C2)=NC=C1',\n  '6-Methyl-2,4-heptanedione': 'CC(CC(CC(C)C)=O)=O',\n  '7-Methyl-1,5,7-triazabicyclo[4.4.0]dec-5-ene': 'CN1C2=NCCCN2CCC1',\n  '8-Ethylquinoline N-oxide': 'CCC1=CC=CC2=CC=C[N+]([O-])=C12',\n  '8-Quinolineboronic acid': 'OB(C1=C(N=CC=C2)C2=CC=C1)O',\n  '9-(2,5-Dimethylphenyl)-10-methylacridinium Perchlorate': 'C[N+]1=C2C=CC=CC2=C(C3=CC(C)=CC=C3C)C4=C1C=CC=C4.O=Cl(=O)([O-])=O',\n  '9-(2,6-Dimethylphenyl)-10-methylacridinium Perchlorate': 'C[N+]1=C2C=CC=CC2=C(C3=C(C)C=CC=C3C)C4=C1C=CC=C4.O=Cl(=O)([O-])=O',\n  '9-(2-Biphenylyl)-10-methylacridinium Perchlorate': 'C[N+]1=C2C=CC=CC2=C(C3=CC=CC=C3C4=CC=CC=C4)C5=C1C=CC=C5.O=Cl(=O)([O-])=O',\n  '9-Azajulolidine': 'N1(CCC2)CCCC3=CN=CC2=C31',\n  '9H,9H-Triacontafluoro-8,10-heptadecanedione': 'O=C(CC(C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F)=O)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F',\n  '9-Mesityl-10-methylacridinium Perchlorate': 'C[N+]1=C2C=CC=CC2=C(C3=C(C)C=C(C)C=C3C)C4=C1C=CC=C4.O=Cl(=O)([O-])=O',\n  '9-Mesityl-2,7,10-trimethylacridinium Perchlorate': 'C[N+]1=C2C=CC(C)=CC2=C(C3=C(C)C=C(C)C=C3C)C4=C1C=CC(C)=C4.O=Cl(=O)([O-])=O',\n  '9-Methyl-3,4-dihydro-2H-pyrido[1,2-a]pyrimidin-2-one': 'O=C1N=C(C(C)=CC=C2)N2CC1',\n  Acenaphthylene: 'C12=CC=CC3=C1C(C=C2)=CC=C3',\n  'acetic acid': 'CC(O)=O',\n  'Acetic Acid (1R,2S)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Ester': 'CC(O[C@H](C1=CC=CC=C1)[C@@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O',\n  'Acetic Acid (1S,2R)-2-[N-Benzyl-N-(mesitylenesulfonyl)amino]-1-phenylpropyl Ester': 'CC(O[C@@H](C1=CC=CC=C1)[C@H](N(CC2=CC=CC=C2)S(=O)(C(C(C)=CC(C)=C3)=C3C)=O)C)=O',\n  acetone: 'CC(C)=O',\n  acetonitrile: 'CC#N',\n  Acetylacetone: 'CC(CC(C)=O)=O',\n  AlkylFluor: 'FC(N(C=C1)C2=C(C(C)C)C=CC=C2C(C)C)=[N+]1C(C(C(C)C)=CC=C3)=C3C(C)C.F[B-](F)(F)F',\n  'Allyl(chloromethyl)dimethylsilane': 'C[Si](CCl)(CC=C)C',\n  'Allyl(tert-butyl)dimethylsilane': 'C[Si](C(C)(C)C)(CC=C)C',\n  Allylchlorodimethylsilane: 'C[Si](Cl)(CC=C)C',\n  'Allylmagnesium Bromide': 'Br[Mg]CC=C',\n  'Allylmagnesium Chloride': 'Cl[Mg]CC=C',\n  Allyloxytrimethylsilane: 'C[Si](C)(OCC=C)C',\n  'Allylpalladium(II) Chloride': '[Pd+]CC=C.[Cl-]',\n  Allyltriethoxysilane: 'CCO[Si](OCC)(CC=C)OCC',\n  Allyltriethylsilane: 'CC[Si](CC)(CC=C)CC',\n  Allyltriisopropylsilane: 'CC([Si](C(C)C)(CC=C)C(C)C)C',\n  Allyltrimethoxysilane: 'CO[Si](OC)(CC=C)OC',\n  Allyltrimethylsilane: 'C[Si](C)(CC=C)C',\n  Allyltriphenyltin: 'C=CC[Sn](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  'Allyltris(trimethylsilyloxy)silane': 'C[Si](O[Si](O[Si](C)(C)C)(CC=C)O[Si](C)(C)C)(C)C',\n  'aluminium bromide': '[Al+3].[Br-].[Br-].[Br-]',\n  'Aluminium chloride': 'Cl[Al](Cl)Cl',\n  'Aluminium hydroxide': '[OH-].[Al+3].[OH-].[OH-]',\n  'aluminium iodide': '[Al+3].[I-].[I-].[I-]',\n  'Aluminum Bromide Anhydrous': '[Al+3].[Br-].[Br-].[Br-]',\n  'Aluminum Glycinate': 'NCC([O-])=O.NCC([O-])=O.NCC([O-])=O.[Al+3]',\n  'Aluminum Isopropoxide': 'CC([O-])C.CC([O-])C.CC([O-])C.[Al+3]',\n  'Aluminum(III) Bromide': '[Al+3].[Br-].[Br-].[Br-]',\n  'Aluminum(III) Chloride': '[Al+3].[Cl-].[Cl-].[Cl-]',\n  'Aminomethanesulfonic Acid': 'O=S(CN)(O)=O',\n  Ammonia: 'N',\n  'ammonium actetate': 'CC([O-])=O.[NH4+]',\n  'ammonium bromide': '[NH4+].[Br-]',\n  'ammonium carbamate': 'NC([O-])=O.[NH4+]',\n  'Ammonium Cerium(IV) Nitrate': '[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[O-][N+]([O-])=O.[NH4+].[Ce+4]',\n  'ammonium chloride': '[NH4+].[Cl-]',\n  'Ammonium dichromate': 'O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.[NH4+].[NH4+]',\n  'ammonium fluoride': '[NH4+].[F-]',\n  'ammonium formate': 'O=C[O-].[NH4+]',\n  'ammonium hydrogensulfate': '[O-]S(=O)(O)=O.[NH4+]',\n  'Ammonium hydroxide': '[NH4+].[OH-]',\n  'Ammonium phosphomolybdate hydrate': 'O=[Mo](OP(O)(O)=O)([O-])=O.[H]O[H].[NH4+]',\n  'Ammonium sulfate': 'O=S([O-])([O-])=O.[NH4+].[NH4+]',\n  'ammonium tetrafluoroborate': 'F[B-](F)(F)F.[NH4+]',\n  ammoniumthiosulfate: 'O=S([O-])([O-])=S.[NH4+].[NH4+]',\n  'Amyltriethylammonium Bis(trifluoromethanesulfonyl)imide': 'CCC[N+](CCC)(CCC)CCC.FC(F)(F)S([N-]S(C(F)(F)F)(=O)=O)(=O)=O',\n  'B(CH3)3': 'CB(C)C',\n  'B(OH)3': 'OB(O)O',\n  'Barium hydroxide': '[Ba+2].[OH-].[OH-]',\n  'Barium hydroxide octahydrate': '[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Ba+2].[OH-].[OH-]',\n  'Barium tert-butoxide': 'CC(C)([O-])C.CC(C)([O-])C.[Ba+2]',\n  Bathophenanthroline: 'C1(C2=CC=CC=C2)=CC=NC3=C4N=CC=C(C5=CC=CC=C5)C4=CC=C13',\n  'Bathophenanthrolinedisulfonic Acid Disodium Salt Hydrate': 'O=S(C1=NC2=C3N=CC=C(C4=CC=CC=C4)C3=CC=C2C(C5=CC=CC=C5)=C1S(=O)([O-])=O)([O-])=O.[H]O[H].[Na+].[Na+]',\n  benzene: 'C1=CC=CC=C1',\n  'Benzeneruthenium(II) Chloride': '[Ru+2].C1=CC=CC=C1.[Cl-].[Cl-]',\n  'Benzenesulfonic Acid Anhydrous': 'O=S(C1=CC=CC=C1)(O)=O',\n  'Benzenesulfonic Acid Monohydrate': 'O=S(C1=CC=CC=C1)(O)=O.[H]O[H]',\n  'Benzoic Acid': 'O=C(O)C1=CC=CC=C1',\n  'Benzoyl peroxide': 'O=C(OOC(C1=CC=CC=C1)=O)C2=CC=CC=C2',\n  'Benzoyl(phenyliodonio)(trifluoromethanesulfonyl)methanide': 'O=S([C-](C(C1=CC=CC=C1)=O)[I+]C2=CC=CC=C2)(C(F)(F)F)=O',\n  'Benzylcetyldimethylammonium Chloride Hydrate': 'C[N+](CCCCCCCCCCCCCCCC)(CC1=CC=CC=C1)C.[H]O[H].[Cl-]',\n  'Benzyldimethyltetradecylammonium Chloride Hydrate': 'CCCCCCCCCCCCCC[N+](C)(CC1=CC=CC=C1)C.[H]O[H].[Cl-]',\n  'Benzyldodecyldimethylammonium Bromide': 'C[N+](CCCCCCCCCCCC)(CC1=CC=CC=C1)C.[Br-]',\n  'Benzyldodecyldimethylammonium Chloride Dihydrate': 'C[N+](CCCCCCCCCCCC)(CC1=CC=CC=C1)C.[H]O[H].[H]O[H].[Cl-]',\n  'Benzylmagnesium Bromide': 'Br[Mg]CC1=CC=CC=C1',\n  'Benzylmagnesium Chloride': 'Cl[Mg]CC1=CC=CC=C1',\n  'Benzyltributylammonium Bromide': 'CCCC[N+](CCCC)(CC1=CC=CC=C1)CCCC.[Br-]',\n  'Benzyltributylammonium Chloride': 'CCCC[N+](CCCC)(CC1=CC=CC=C1)CCCC.[Cl-]',\n  'Benzyltriethylammonium Borohydride': 'CC[N+](CC)(CC1=CC=CC=C1)CC.[BH4-]',\n  'Benzyltriethylammonium Bromide': 'CC[N+](CC)(CC1=CC=CC=C1)CC.[Br-]',\n  'Benzyltriethylammonium Chloride': 'CC[N+](CC)(CC1=CC=CC=C1)CC.[Cl-]',\n  'Benzyltriethylammonium Iodide': 'CC[N+](CC)(CC1=CC=CC=C1)CC.[I-]',\n  'Benzyltrimethylammonium Bromide': 'C[N+](C)(CC1=CC=CC=C1)C.[Br-]',\n  'Benzyltrimethylammonium Chloride': 'C[N+](C)(CC1=CC=CC=C1)C.[Cl-]',\n  'Benzyltrimethylammonium Dichloroiodate': 'C[N+](C)(CC1=CC=CC=C1)C.Cl[I-]Cl',\n  'Benzyltrimethylammonium Hydroxide': 'C[N+](C)(CC1=CC=CC=C1)C.[OH-]',\n  'Benzyltrimethylammonium Tetrachloroiodate': 'C[N+](C)(CC1=CC=CC=C1)C.Cl[I-](Cl)(Cl)Cl',\n  'Benzyltrimethylammonium Tribromide': 'C[N+](C)(CC1=CC=CC=C1)C.[Br-].[Br-].[Br-]',\n  Benzyltrimethylsilane: 'C[Si](C)(CC1=CC=CC=C1)C',\n  BERYLLIUM: '[Be]',\n  'BERYLLIUM HYDROXIDE': '[Be+2].[OH-].[OH-]',\n  BF3: 'FB(F)F',\n  'Bicinchoninic Acid Disodium Salt Hydrate': 'O=C([O-])C1=C(C2=C(C([O-])=O)C3=CC=CC=C3N=C2)C=NC4=CC=CC=C14.[H]O[H].[Na+].[Na+]',\n  'Bis(1,3-propanediamine) Copper(II) Dichloride': 'NCCCN.NCCCN.[Cu+2].[Cl-].[Cl-]',\n  'Bis(1,5-cyclooctadiene)nickel(0)': '[Ni].C1=C\\\\CC/C=C\\\\CC/1.C2=C\\\\CC/C=C\\\\CC/2',\n  'Bis(1,5-cyclooctadiene)rhodium(I) Tetrafluoroborate': 'F[B-](F)(F)F.[Rh+].C1=C\\\\CC/C=C\\\\CC/1.C2=C\\\\CC/C=C\\\\CC/2',\n  'Bis(2,4,6-trimethylpyridine)bromonium Hexafluorophosphate': 'CC1=CC(C)=C([BrH+])C(C)=N1.CC2=CC(C)=CC(C)=N2.F[P-](F)(F)(F)(F)F',\n  'Bis(2,4,6-trimethylpyridine)iodonium Hexafluorophosphate': 'CC1=CC(C)=C([IH+])C(C)=N1.CC2=CC(C)=CC(C)=N2.F[P-](F)(F)(F)(F)F',\n  'Bis(2,4-pentanedionato)bis(2-propanolato)titanium(IV)': 'CC(/C=C(C)\\\\[O-])=O.CC(/C=C(C)\\\\[O-])=O.[O-]C(C)C.[O-]C(C)C.[Ti+4]',\n  'Bis(2,4-pentanedionato)cobalt(II)': 'C/C([O-])=C/C(C)=O.C/C([O-])=C/C(C)=O.[Co+2].O',\n  'Bis(2,4-pentanedionato)cobalt(II) Dihydrate': 'C/C([O-])=C/C(C)=O.C/C([O-])=C/C(C)=O.[Co+2].O.O',\n  'Bis(2,4-pentanedionato)manganese(II) Dihydrate': 'CC(/C=C([O-])/C)=O.CC(/C=C([O-])/C)=O.[Mn+2].O.O',\n  'Bis(2,4-pentanedionato)molybdenum(VI) Dioxide': 'CC(/C=C([O-])/C)=O.C/C([O-])=C/C(C)=O.[Mo+6].[O-2].[O-2]',\n  'Bis(2,4-pentanedionato)nickel(II) Hydrate': 'O=C(/C=C([O-])/C)C.O=C(/C=C([O-])/C)C.[Ni+2].O',\n  'Bis(2,4-pentanedionato)vanadium(IV) Oxide': 'CC(/C=C([O-])/C)=O.[O-]/C(C)=C\\\\C(C)=O.[V+4].[O-2]',\n  'Bis(2-hydroxyethyl)dimethylammonium Chloride': 'C[N+](CCO)(CCO)C.[Cl-]',\n  'Bis(4-bromophenyl)iodonium triflate': 'BrC1=CC=C([I+]C2=CC=C(Br)C=C2)C=C1.O=S([O-])(C(F)(F)F)=O',\n  'Bis(4-fluorophenyl)iodonium triflate': 'FC1=CC=C([I+]C2=CC=C(F)C=C2)C=C1.O=S([O-])(C(F)(F)F)=O',\n  'Bis(4-methoxyphenyl) Selenoxide': 'O=[Se](C1=CC=C(OC)C=C1)C2=CC=C(OC)C=C2',\n  'Bis(4-methylphenyl)iodonium triflate': 'CC1=CC=C([I+]C2=CC=C(C)C=C2)C=C1.O=S([O-])(C(F)(F)F)=O',\n  'Bis(4-nitrophenyl) Carbonate': 'O=C(OC1=CC=C([N+]([O-])=O)C=C1)OC2=CC=C([N+]([O-])=O)C=C2',\n  'Bis(acetato)aqua[(S,S)-4,6-bis(4-isopropyl-2-oxazolin-2-yl)-m-xylene]rhodium': 'CC1=CC(C)=C(C2=N[C@H](CO2)C(C)C)C=C1C3=N[C@@H](C(C)C)CO3.CC([O-])=O.[O-]C(C)=O.[Rh+2].O',\n  'Bis(acetonitrile)palladium(II) Dichloride': 'CC#N.CC#N.[Pd+2].[Cl-].[Cl-]',\n  'Bis(benzonitrile)palladium(II) Dichloride': 'N#CC1=CC=CC=C1.N#CC2=CC=CC=C2.[Pd+2].[Cl-].[Cl-]',\n  'Bis(chloromethyl)dimethylsilane': 'C[Si](CCl)(CCl)C',\n  'Bis(dibenzylideneacetone)palladium(0)': 'O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2.O=C(/C=C/C3=CC=CC=C3)/C=C/C4=CC=CC=C4.[Pd]',\n  'Pd(dba)2': 'O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2.O=C(/C=C/C3=CC=CC=C3)/C=C/C4=CC=CC=C4.[Pd]',\n  'Bis(diphenylphosphino)methane': 'P(CP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4',\n  'Bis(hexafluoroacetylacetonato)nickel(II) Hydrate': 'O=C(/C=C(C(F)(F)F)\\\\[O-])C(F)(F)F.[O-]/C(C(F)(F)F)=C\\\\C(C(F)(F)F)=O.[Ni+2]',\n  'Bis(pentafluorophenyl) Carbonate': 'O=C(OC1=C(F)C(F)=C(F)C(F)=C1F)OC2=C(F)C(F)=C(F)C(F)=C2F',\n  'Bis(pentafluorophenyl)dimethylsilane': 'C[Si](C1=C(F)C(F)=C(F)C(F)=C1F)(C2=C(F)C(F)=C(F)C(F)=C2F)C',\n  'Bis(pentafluorophenyl)phenylphosphine': 'FC1=C(F)C(F)=C(F)C(F)=C1P(C2=C(F)C(F)=C(F)C(F)=C2F)C3=CC=CC=C3',\n  'Bis(pinacolato)diboron': 'B1(OC(C(O1)(C)C)(C)C)B2OC(C(O2)(C)C)(C)C',\n  BPin: 'B1(OC(C(O1)(C)C)(C)C)B2OC(C(O2)(C)C)(C)C',\n  'Bis(pyridine)iodonium tetrafluoroborate': '[IH+]C1=NC=CC=C1.F[B-](F)(F)F.C2=NC=CC=C2',\n  'Bis(tert-butylcarbonyloxy)iodobenzene': 'IC1=CC=CC(OC(C(C)(C)C)=O)=C1OC(C(C)(C)C)=O',\n  'Bis(tetrabutylammonium) Dichromate': 'CCCC[N+](CCCC)(CCCC)CCCC.CCCC[N+](CCCC)(CCCC)CCCC.O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O',\n  'Bis(trichlorosilyl)acetylene': 'Cl[Si](C#C[Si](Cl)(Cl)Cl)(Cl)Cl',\n  'Bis(tricyclohexylphosphine)nickel(II) Dichloride': 'P(C1CCCCC1)(C2CCCCC2)C3CCCCC3.P(C4CCCCC4)(C5CCCCC5)C6CCCCC6.[Ni+2].[Cl-].[Cl-]',\n  'Bis(tricyclohexylphosphine)palladium(II) Dichloride': 'P(C1CCCCC1)(C2CCCCC2)C3CCCCC3.P(C4CCCCC4)(C5CCCCC5)C6CCCCC6.[Pd+2].[Cl-].[Cl-]',\n  'Bis(trifluoro-2,4-pentanedionato)cobalt(II) Hydrate': 'C/C([O-])=C/C(C(F)(F)F)=O.C/C([O-])=C/C(C(F)(F)F)=O.[Co+2]',\n  'Bis(trifluoromethanesulfonyl)imide': 'O=S(C(F)(F)F)(NS(=O)(C(F)(F)F)=O)=O',\n  'Bis(trimethylsilyl) Sulfide': 'C[Si](S[Si](C)(C)C)(C)C',\n  'Bis(trimethylsilyl)acetylene': 'C[Si](C#C[Si](C)(C)C)(C)C',\n  'Bis(trimethylsilyl)bromomethane': 'BrC([Si](C)(C)C)[Si](C)(C)C',\n  'Bis(trimethylsilyl)methane': 'C[Si](C[Si](C)(C)C)(C)C',\n  'Bis(trimethylsilyl)methylamine': 'CN([Si](C)(C)C)[Si](C)(C)C',\n  'Bis(tri-o-tolylphosphine)palladium(II) Dichloride': 'CC1=CC=CC=C1P(C2=CC=CC=C2C)C3=CC=CC=C3C.CC4=CC=CC=C4P(C5=CC=CC=C5C)C6=CC=CC=C6C.[Pd+2].[Cl-].[Cl-]',\n  'Bis(triphenylphosphine)nickel(II) Dichloride': 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.[Ni+2].[Cl-].[Cl-]',\n  'Bis(triphenylphosphine)palladium(II) Diacetate': 'CC([O-])=O.CC([O-])=O.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.[Pd+2]',\n  'Bis(triphenylphosphine)palladium(II) Dichloride': 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.[Pd+2].[Cl-].[Cl-]',\n  'Bis(triphenylsilyl) chromate': 'O=[Cr](O[Si](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3)(O[Si](C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)=O',\n  'Bis(tri-tert-butylphosphine)palladium(0)': 'CC(P(C(C)(C)C)C(C)(C)C)(C)C.CC(P(C(C)(C)C)C(C)(C)C)(C)C.[Pd]',\n  'Bis[1,2-bis(diphenylphosphino)ethane]palladium(0)': 'P(CCP(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.P(CCP(C5=CC=CC=C5)C6=CC=CC=C6)(C7=CC=CC=C7)C8=CC=CC=C8.[Pd]',\n  'Bis[2-(diphenylphosphino)phenyl] Ether': 'C1(OC2=CC=CC=C2P(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1P(C5=CC=CC=C5)C6=CC=CC=C6',\n  'Bis[2-(trimethylsilyloxy)ethyl] Ether': 'C[Si](OCCOCCO[Si](C)(C)C)(C)C',\n  'Bis[2-carboxyethylgermanium(IV)] Sesquioxide': 'O=[Ge](CCC(O)=O)O[Ge](CCC(O)=O)=O',\n  'Bis[3-(trimethoxysilyl)propyl]amine': 'CO[Si](CCCNCCC[Si](OC)(OC)OC)(OC)OC',\n  'Bis[di-tert-butyl(4-dimethylaminophenyl)phosphine]palladium(0)': 'CN(C1=CC=C(P(C(C)(C)C)C(C)(C)C)C=C1)C.CN(C2=CC=C(P(C(C)(C)C)C(C)(C)C)C=C2)C.[Pd]',\n  'Bis[tris(2,4-pentanedionato)titanium(IV)] Hexachlorotitanate(IV)': 'Cl[Ti-2](Cl)(Cl)(Cl)(Cl)Cl.C/C([O-])=C\\\\C(C)=O.C/C([O-])=C\\\\C(C)=O.C/C([O-])=C\\\\C(C)=O.C/C([O-])=C\\\\C(C)=O.C/C([O-])=C\\\\C(C)=O.C/C([O-])=C\\\\C(C)=O.[Ti+4].[Ti+4]',\n  'BISMUTH HYDROXIDE': '[Bi+3].[OH-].[OH-].[OH-]',\n  'Bismuth Tripotassium Dicitrate': 'OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.[Bi+5].[K+].[K+].[K+]',\n  Bistrifluoroacetamide: 'O=C(C(F)(F)F)NC(C(F)(F)F)=O',\n  'Borane - 2-Methylpyridine Complex': 'CC1=NC=CC=C1.B',\n  'Borane - 5-Ethyl-2-methylpyridine Complex': 'CC1=NC=C(CC)C=C1.B',\n  'Borane - Ammonia Complex': 'B.N',\n  'Borane - Diisopropylamine Complex': 'CC(C)NC(C)C.B',\n  'Borane - Morpholine Complex': 'O1CCNCC1.B',\n  'Borane - Pyridine Complex': 'C1=CN=CC=C1.B',\n  'Borane - Tetrahydrofuran Complex': 'B.C1COCC1',\n  'Borane - tert-Butylamine Complex': 'NC(C)(C)C.B',\n  'Boron Trichloride': 'ClB(Cl)Cl',\n  'Boron Trifluoride': 'FB(F)F',\n  'Boron Trifluoride - Methanol Reagent': 'FB(F)F.CO',\n  'Boron Trifluoride - Propanol Reagent': 'FB(F)F.CCCO',\n  Bromine: 'BrBr',\n  'Bromine - 1,4-Dioxane Complex': 'BrBr.O1CCOCC1',\n  'Bromo[(2,6-pyridinediyl)bis(3-methyl-1-imidazolyl-2-ylidene)]nickel Bromide': 'CN(C=CN12)C1=[Ni-3](Br)=C3N(C)C=CN3C4=CC=CC2=N4.[Br-]',\n  'Bromo[[1,3-bis[(4S,5S)-1-benzoyl-4,5-diphenyl-2-imidazolin-2-yl]benzene]palladium(II)]': 'O=C(N1[C@@H](C2=CC=CC=C2)[C@H](C3=CC=CC=C3)N=C1C4=CC(C5=N[C@@H](C6=CC=CC=C6)[C@H](C7=CC=CC=C7)N5C(C8=CC=CC=C8)=O)=CC=C4)C9=CC=CC=C9.[Pd+]Br',\n  'Bromoacetic Acid': 'O=C(O)CBr',\n  'Bromocholine Bromide': 'BrCC[N+](C)(C)C.[Br-]',\n  'Bromodicarbonyl[bis[2-(diisopropylphosphino)ethyl]amine]manganese(I)': '[C]=O.[C]=O.CC(P(CCNCCP(C(C)C)C(C)C)C(C)C)C.[Mn]Br',\n  'Bromodimethylsulfonium Bromide': 'C[S+](Br)C.[Br-]',\n  Bromotrichloromethane: 'ClC(Cl)(Br)Cl',\n  Bromotrimethylsilane: 'Br[Si](C)(C)C',\n  'Bromotripyrrolidinophosphonium Hexafluorophosphate': 'Br[P+](N1CCCC1)(N2CCCC2)N3CCCC3.F[P-](F)(F)(F)(F)F',\n  'Bromotris(dimethylamino)phosphonium Hexafluorophosphate': 'CN([P+](N(C)C)(Br)N(C)C)C.F[P-](F)(F)(F)(F)F',\n  'Butylboronic Acid': 'CCCCB(O)O',\n  Butyllithium: 'CCCC[Li]',\n  'Butylmagnesium Bromide': 'Br[Mg]CCCC',\n  'Butylmagnesium Chloride': 'Cl[Mg]CCCC',\n  'Butyltin Trichloride': 'CCCC[Sn](Cl)(Cl)Cl',\n  'Cacodylic Acid': 'O=[As](C)(C)O',\n  'CADMIUM HYDROXIDE': '[Cd+2].[OH-].[OH-]',\n  'CALCIUM BROMIDE HYDRATE': '[H]O[H].[Ca+2].[Br-].[Br-]',\n  'calcium carbonate': '[O-]C([O-])=O.[Ca+2]',\n  'calcium chloride': '[Ca+2].[Cl-].[Cl-]',\n  'calcium hydride': '[Ca+2].[H-].[H-]',\n  'Calcium peroxide': '[O-][O-].[Ca+2]',\n  'calcium sulfate': 'O=S([O-])([O-])=O.[Ca+2]',\n  'Calcium L-Threonate': 'O[C@H]([C@H](CO)O)C([O-])=O.O[C@H]([C@H](CO)O)C([O-])=O.[Ca+2]',\n  'Carbamylcholine Chloride': 'C[N+](C)(C)CCOC(N)=O.[Cl-]',\n  'Carbon Tetrabromide': 'BrC(Br)(Br)Br',\n  'carbon tetrachloride': 'ClC(Cl)(Cl)Cl',\n  'Carbon Tetraiodide': 'IC(I)(I)I',\n  'carbon tribromide': 'BrC(Br)([H])Br',\n  'Carbonyl(dihydrido)tris(triphenylphosphine)ruthenium(II)': '[C]=O.[H][Ru][H].P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9',\n  'Carbonylchlorobis(triphenylphosphine)iridium(I)': '[C]=O.[Ir]Cl.P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6',\n  'Carbonylhydridotris(triphenylphosphine)iridium(I)': '[C]=O.[Ir][H].P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9',\n  Cerium: '[Ce]',\n  'Cerium tetrahydroxide': '[Ce+4].[OH-].[OH-].[OH-].[OH-]',\n  'cerium trihydroxide': '[Ce+3].[OH-].[OH-].[OH-]',\n  'Cerium(III) Acetate Hydrate': 'CC([O-])=O.CC([O-])=O.CC([O-])=O.[H]O[H].[Ce+3]',\n  'CERIUM(III) CHLORIDE HEPTAHYDRATE': '[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Ce+3].[Cl-].[Cl-].[Cl-]',\n  'Cerium(III) Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Ce+3]',\n  'Cesium Acetate': 'CC([O-])=O.[Cs+]',\n  'cesium bromide': '[Cs+].[Br-]',\n  'Cesium Carbonate': '[O-]C([O-])=O.[Cs+].[Cs+]',\n  'Cesium Fluoride': '[Cs+].[F-]',\n  'Cesium hydroxide': '[Cs+].[OH-]',\n  'Cesium Pivalate': 'CC(C)(C)C([O-])=O.[Cs+]',\n  'cesium sulfate': 'O=S([O-])([O-])=O.[Cs+].[Cs+]',\n  'Chloramine B Hydrate': 'O=S([N-]Cl)(C1=CC=CC=C1)=O.O.[Na+]',\n  'Chloramine T Trihydrate': 'CC1=CC=C(S(=O)([N-]Cl)=O)C=C1.[H]O[H].[H]O[H].[H]O[H].[Na+]',\n  Chloranil: 'O=C(C(Cl)=C1Cl)C(Cl)=C(Cl)C1=O',\n  'Chloro(1,5-cyclooctadiene)iridium(I)': '[Ir]Cl.C1=C\\\\CC/C=C\\\\CC/1',\n  'Chloro(1,5-cyclooctadiene)rhodium(I)': '[Rh]Cl.C1=C\\\\CC/C=C\\\\CC/1',\n  'Chloro(1,5-hexadiene)rhodium(I)': 'C=CCCC=C.[Rh]Cl',\n  'Chloro(2-dicyclohexylphosphino-2′,4′,6′-triisopropyl-1,1′-biphenyl)[2-(2′-amino-1,1′-biphenyl)]palladium(II)': 'Cl[Pd]1(C2=CC=CC=C2C3=CC=CC=C3N1)P(C4CCCCC4)(C5=CC=CC=C5C6=C(C(C)C)C=C(C(C)C)C=C6C(C)C)C7CCCCC7',\n  'Chloro(3-chloropropyl)dimethylsilane': 'C[Si](CCCCl)(Cl)C',\n  'Chloro(hexyl)dimethylsilane': 'C[Si](CCCCCC)(Cl)C',\n  'Chloro(methyl)(phenyl)(vinyl)silane': 'C=C[Si](C)(Cl)C1=CC=CC=C1',\n  'Chloro(pentamethylcyclopentadienyl)ruthenium(II)': 'CC1=C([Ru]Cl)C(C)(C)C(C)=C1C',\n  'Chloro[(tri-tert-butylphosphine)-2-(2-aminobiphenyl)]palladium(II)': 'NC1([Pd+2])=CC=CC=C1C2=CC=CC=C2.CC(P(C(C)(C)C)(Cl)C(C)(C)C)(C)C',\n  'Chloro[[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene](acetanilide)palladium(II)]': 'CC(NC1=CC=CC=C1)=O.CC(C2=C(N(C=CN3C4=C(C(C)C)C=CC=C4C(C)C)C3=[Pd-]Cl)C(C(C)C)=CC=C2)C',\n  'Chloro[[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene](N,N-dimethyl-3,5-dimethoxybenzylamine)palladium(II)]': 'COC1=CC(OC)=CC(CN(C)C)=C1.CC(C2=C(N(C=CN3C4=C(C(C)C)C=CC=C4C(C)C)C3=[Pd-]Cl)C(C(C)C)=CC=C2)C',\n  'Chloro[[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene](N,N-dimethylbenzylamine)palladium(II)]': 'CN(C)CC1=CC=CC=C1.CC(C2=C(N(C=CN3C4=C(C(C)C)C=CC=C4C(C)C)C3=[Pd-]Cl)C(C(C)C)=CC=C2)C',\n  'Chloro[1,3-bis(2,6-diisopropylphenyl)imidazol-2-ylidene]copper(I)': 'CC(C1=C(N(C=CN2C3=C(C(C)C)C=CC=C3C(C)C)C2=[Cu-2]Cl)C(C(C)C)=CC=C1)C',\n  'Chloroacetic Acid': 'O=C(O)CCl',\n  'Chlorobis(cyclooctene)iridium(I)': '[Ir]Cl.C1=C\\\\CCCCCC/1.C2=C\\\\CCCCCC/2',\n  'Chlorobis(cyclooctene)rhodium(I)': '[Rh]Cl.C1=C\\\\CCCCCC/1.C2=C\\\\CCCCCC/2',\n  'Chlorobis(ethylene)iridium(I)': 'Cl[Ir-4]12(CC2)CC1',\n  'Chlorobis(ethylene)rhodium(I)': 'Cl[Rh-4]12(CC2)CC1',\n  'Chlorobis[dicyclohexyl(phenyl)phosphino](o-tolyl)nickel(II)': 'CC1=CC=CC=C1[Ni-2](P(C2CCCCC2)(C3CCCCC3)C4=CC=CC=C4)(Cl)P(C5CCCCC5)(C6CCCCC6)C7=CC=CC=C7',\n  'Chlorocholine Chloride': 'ClCC[N+](C)(C)C.[Cl-]',\n  Chlorodicyclohexylphosphine: 'ClP(C1CCCCC1)C2CCCCC2',\n  'Chlorodifluoroacetic Acid': 'O=C(O)C(F)(Cl)F',\n  Chlorodiisopropylphosphine: 'CC(P(Cl)C(C)C)C',\n  Chlorodimethylvinylsilane: 'C=C[Si](C)(Cl)C',\n  Chlorodiphenylphosphine: 'ClP(C1=CC=CC=C1)C2=CC=CC=C2',\n  Chloroform: 'ClC(Cl)Cl',\n  Chloromethyldimethylphenylsilane: 'C[Si](C)(CCl)C1=CC=CC=C1',\n  \"Chloro-N,N,N',N'-tetramethylformamidinium Hexafluorophosphate\": 'C[N+](C)=C(Cl)N(C)C.F[P-](F)(F)(F)(F)F',\n  \"Chloronitrosyl[N,N'-bis(3,5-di-tert-butylsalicylidene)-1,1,2,2-tetramethylethylenediaminato]ruthenium(IV)\": '[O-]C1=C(/C=N/C(C)(C)C(C)(C)/N=C/C2=C([O-])C(C(C)(C)C)=CC(C(C)(C)C)=C2)C=C(C(C)(C)C)C=C1C(C)(C)C.[N-]=O.[Ru+4].[Cl-]',\n  Chloropentamethyldisilane: 'C[Si](C)(C)[Si](C)(Cl)C',\n  Chlorotriethoxysilane: 'CCO[Si](OCC)(Cl)OCC',\n  'Chlorotripyrrolidinophosphonium Hexafluorophosphate': 'Cl[P+](N1CCCC1)(N2CCCC2)N3CCCC3.F[P-](F)(F)(F)(F)F',\n  Choline: 'OCC[N+](C)(C)C',\n  'Choline Chloride': 'OCC[N+](C)(C)C.[Cl-]',\n  'Choline hydroxide': 'OCC[N+](C)(C)C.[OH-]',\n  Chromium: '[Cr]',\n  'CHROMIUM (III) HYDROXIDE N-HYDRATE': '[OH-].[Cr+3].[OH-].[OH-]',\n  'Chromium(VI) oxide': '[Cr+6].[O-2].[O-2].[O-2]',\n  Cinchonidine: 'O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34',\n  'Cinchonidine Dihydrochloride': 'O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34.[H]Cl.[H]Cl',\n  'Cinchonidine Sulfate Dihydrate': 'O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34.O=S(O)(O)=O.[H]O[H].[H]O[H]',\n  Cinchonine: 'O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34',\n  'Cinchonine Hydrochloride Hydrate': 'O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=CC=C34.[H]Cl.[H]O[H]',\n  'Citric Acid': 'OC(C(O)=O)(CC(O)=O)CC(O)=O',\n  Cobalt: '[Co]',\n  'Cobalt hydroxide': '[Co+2].[OH-].[OH-]',\n  'cobalt trihydroxide': '[Co+3].[OH-].[OH-].[OH-]',\n  Copper: '[Cu]',\n  'copper (I) bromide': '[Cu+].[Br-]',\n  'copper (I) chloride': '[Cu+].[Cl-]',\n  'copper (II) bromide': '[Cu+2].[Br-].[Br-]',\n  'copper (II) chloride': '[Cu+2].[Cl-].[Cl-]',\n  'copper (II) iodide': '[Cu+2].[I-].[I-]',\n  'copper fluoride': '[Cu+2].[F-].[F-]',\n  'Copper sulfate': 'O=S([O-])([O-])=O.[Cu+2]',\n  'Copper(I) 2-Thiophenecarboxylate': 'O=C(C1=CC=CS1)[O-].[Cu+]',\n  'Copper(I) Acetate': 'CC([O-])=O.[Cu+]',\n  'Copper(I) Cyanide': '[C-]#N.[Cu+]',\n  'Copper(I) Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.[Cu+]',\n  'Copper(I) Trifluoromethanethiolate': '[S-]C(F)(F)F.[Cu+]',\n  'copper(I)bromide DMS-complex': 'CSC.[Cu+].[Br-]',\n  'Copper(I)iodide': '[Cu+].[I-]',\n  'Copper(II) Acetate Monohydrate': 'CC([O-])=O.CC([O-])=O.[H]O[H].[Cu+2]',\n  'Copper(II) Tetrafluoroborate': 'F[B-](F)(F)F.F[B-](F)(F)F.[Cu+2]',\n  'Copper(II) Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Cu+2]',\n  'Croconic Acid': 'OC1=C(C(C(C1=O)=O)=O)O',\n  'Cumene Hydroperoxide': 'CC(C1=CC=C(OO)C=C1)C',\n  'Cupric hydroxide': '[Cu+2].[OH-].[OH-]',\n  Cyanomethylenetributylphosphorane: 'CCCCP(CCCC)(CCCC)=CC#N',\n  'Cyanuric Chloride': 'ClC1=NC(Cl)=NC(Cl)=N1',\n  cyclohexane: 'C1CCCCC1',\n  'Cyclohexyl(dimethoxy)methylsilane': 'C[Si](OC)(C1CCCCC1)OC',\n  'Cyclohexylboronic Acid': 'OB(C1CCCCC1)O',\n  Cyclohexyldiphenylphosphine: 'P(C1=CC=CC=C1)(C2CCCCC2)C3=CC=CC=C3',\n  'Cyclohexylmagnesium Bromide': 'Br[Mg]C1CCCCC1',\n  'Cyclohexyltrimethylammonium Bis(trifluoromethanesulfonyl)imide': 'C[N+](C)(C)C1CCCCC1.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O',\n  Cyclooctene: 'C1=C\\\\CCCCCC/1',\n  'Cyclopentadienyl Thallium': '[Tl]C1=CC=CC1',\n  'Cyclopentadienylbis(triphenylphosphine)ruthenium(II) Chloride': '[Ru+]C1=CC=CC1.P(C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4.P(C5=CC=CC=C5)(C6=CC=CC=C6)C7=CC=CC=C7.[Cl-]',\n  'Cyclopentadienyliron Dicarbonyl Dimer': '[C]=O.[C]=O.[Fe]C1=CC=CC1',\n  'Cyclopentadienyltitanium(IV) Trichloride': '[Ti+3]C1=CC=CC1.[Cl-].[Cl-].[Cl-]',\n  cyclopentane: 'C1CCCC1',\n  'Cyclopentylboronic Acid': 'OB(C1CCCC1)O',\n  'Cyclopentylmagnesium Bromide': 'Br[Mg]C1CCCC1',\n  Cyclopentylmethylether: 'COC1CCCC1',\n  'Cyclopropylmagnesium Bromide': 'Br[Mg]C1CC1',\n  'D-(-)-Leucinol': 'N[C@H](CC(C)C)CO',\n  'D-(+)-Threonine': 'N[C@H]([C@@H](O)C)C(O)=O',\n  'D-Alanine': 'N[C@H](C)C(O)=O',\n  Decamethylcyclopentasiloxane: 'C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1',\n  Decamethyltetrasiloxane: 'C[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)C',\n  Decyltriethoxysilane: 'CCO[Si](OCC)(CCCCCCCCCC)OCC',\n  Decyltrimethoxysilane: 'CO[Si](OC)(CCCCCCCCCC)OC',\n  'Decyltrimethylammonium Bromide': 'C[N+](C)(CCCCCCCCCC)C.[Br-]',\n  'Decyltrimethylammonium Chloride': 'C[N+](C)(CCCCCCCCCC)C.[Cl-]',\n  'Dehydroacetic Acid': 'CC(C(C(C=C(O1)C)=O)C1=O)=O',\n  'Dess-Martin periodinane (DMP)': 'O=C(O1)C2=CC=CC=C2I1(OC(C)=O)(OC(C)=O)OC(C)=O',\n  'Di(N-succinimidyl) Carbonate': 'O=C(ON1C(CCC1=O)=O)ON2C(CCC2=O)=O',\n  'Di-1-adamantylphosphine': 'C12CC3(PC45CC6CC(C5)CC(C6)C4)CC(C2)CC(C3)C1',\n  'Di-2-pyridyl Carbonate': 'O=C(OC1=NC=CC=C1)OC2=NC=CC=C2',\n  Diacetoxydimethylsilane: 'C[Si](OC(C)=O)(OC(C)=O)C',\n  'Diallyldimethylammonium Chloride': 'C[N+](CC=C)(CC=C)C.[Cl-]',\n  Diallyldimethylsilane: 'C[Si](CC=C)(CC=C)C',\n  'Dibenzo[a,e]cyclooctene': 'C12=CC=CC=C1/C=C\\\\C3=CC=CC=C3/C=C\\\\2',\n  'Dibenzyl L-Tartrate': 'O[C@H]([C@H](C(OCC1=CC=CC=C1)=O)O)C(OCC2=CC=CC=C2)=O',\n  'Dibromoisocyanuric Acid': 'O=C(N(Br)C(N1)=O)N(Br)C1=O',\n  'Dibutyltin Bis(trifluoromethanesulfonate)': 'CCCC[Sn+2]CCCC.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O',\n  'Dibutyltin Diacetate': 'CCCC[Sn+2]CCCC.CC([O-])=O.CC([O-])=O',\n  'Dibutyltin Dichloride': 'CCCC[Sn](Cl)(Cl)CCCC',\n  'Dibutyltin Dilaurate': 'CCCC[Sn+2]CCCC.CCCCCCCCCCCC([O-])=O.CCCCCCCCCCCC([O-])=O',\n  'Dibutyltin Oxide': 'CCCC[Sn](CCCC)=O',\n  'Dichloramine B': 'O=S(N(Cl)Cl)(C1=CC=CC=C1)=O',\n  'Dichloramine T': 'CC1=CC=C(S(=O)([N-]Cl)=O)C=C1.[Na+]',\n  'Dichloro(1,10-phenanthroline)copper(II)': 'Cl[Cu]Cl.C12=CC=C3C=CC=NC3=C1N=CC=C2',\n  'Dichloro(diethylamino)phosphine': 'CCN(P(Cl)Cl)CC',\n  'Dichloro(methyl)(3,3,3-trifluoropropyl)silane': 'FC(F)(F)CC[Si](Cl)(Cl)C',\n  'Dichloro(methyl)-n-octylsilane': 'CCCCCCCC[Si](Cl)(Cl)C',\n  \"Dichloro(N,N,N',N'-tetramethylethylenediamine)zinc(II)\": 'CN(C)CCN(C)C.Cl[Zn]Cl',\n  'Dichloro(p-cymene)ruthenium(II)': 'CC1=CC=C(C(C)C)C=C1.Cl[Ru]Cl',\n  'Dichloro[9,9-dimethyl-4,5-bis(diphenylphosphino)xanthene]palladium(II)': 'CC1(C)C2=C(OC3=C1C=CC=C3P(C4=CC=CC=C4)C5=CC=CC=C5)C(P(C6=CC=CC=C6)C7=CC=CC=C7)=CC=C2.Cl[Pd]Cl',\n  'Dichloroacetic Acid': 'O=C(O)C(Cl)Cl',\n  Dichlorocyclohexylmethylsilane: 'C[Si](Cl)(Cl)C1CCCCC1',\n  Dichlorodecylmethylsilane: 'C[Si](Cl)(Cl)CCCCCCCCCC',\n  Dichlorododecylmethylsilane: 'C[Si](Cl)(Cl)CCCCCCCCCCCC',\n  Dichlorohexylmethylsilane: 'C[Si](Cl)(Cl)CCCCCC',\n  // dichloromethane: 'ClCCl',\n  Dichloromethylvinylsilane: 'C=C[Si](Cl)(Cl)C',\n  Dichlorophenylphosphine: 'ClP(Cl)C1=CC=CC=C1',\n  'Dichlorotitanium Diisopropoxide': 'Cl[Ti+2]Cl.CC([O-])C.CC([O-])C',\n  'Dicobalt Octacarbonyl': '[CH-]=O.[CH-]=O.[C-]#[O+].[C-]#[O+].[C-]#[O+].[C-]#[O+].[C-]#[O+].[C-]#[O+].[Co].[Co+2]',\n  'Dicumyl peroxide': 'CC(OOC(C)(C1=CC=CC=C1)C)(C2=CC=CC=C2)C',\n  'Dicyclohexyl(2,4,6-triisopropylphenyl)phosphine': 'CC(C1=C(P(C2CCCCC2)C3CCCCC3)C(C(C)C)=CC(C(C)C)=C1)C',\n  'Dicyclohexyl(trifluoromethanesulfonyloxy)borane': 'O=S(OB(C1CCCCC1)C2CCCCC2)(C(F)(F)F)=O',\n  'Dicyclohexylamine Borane': 'C1(NC2CCCCC2)CCCCC1.B',\n  Dicyclohexylphenylphosphine: 'P(C1CCCCC1)(C2CCCCC2)C3=CC=CC=C3',\n  Dicyclopentadiene: 'C12C=CCC1C3C=CC2C3',\n  'Dicyclopentyl(dimethoxy)silane': 'CO[Si](C1CCCC1)(C2CCCC2)OC',\n  'Didecyldimethylammonium Bromide': 'C[N+](CCCCCCCCCC)(CCCCCCCCCC)C.[Br-]',\n  'Didodecyldimethylammonium Chloride': 'C[N+](CCCCCCCCCCCC)(CCCCCCCCCCCC)C.[Cl-]',\n  'Diethoxy(methyl)phenylsilane': 'C[Si](OCC)(OCC)C1=CC=CC=C1',\n  Diethoxydimethylsilane: 'C[Si](OCC)(OCC)C',\n  Diethoxydiphenylsilane: 'CCO[Si](C1=CC=CC=C1)(OCC)C2=CC=CC=C2',\n  Diethoxymethylsilane: 'C[SiH](OCC)OCC',\n  Diethoxymethylvinylsilane: 'C=C[Si](OCC)(OCC)C',\n  'Diethyl (Bromodifluoromethyl)phosphonate': 'FC(Br)(P(OCC)(OCC)=O)F',\n  'Diethyl 1,4-Dihydro-2,6-dimethyl-3,5-pyridinedicarboxylate': 'O=C(C1=C(C)NC(C)=C(C(OCC)=O)C1)OCC',\n  \"Diethyl 2,2':6',2''-Terpyridine-4'-phosphonate\": 'O=P(C1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1)(OCC)OCC',\n  'Diethyl Cyanophosphonate': 'N#CP(OCC)(OCC)=O',\n  'diethyl ether': 'CCOCC',\n  Et2O: 'CCOCC',\n  'Diethyl D-(-)-Tartrate': 'O[C@@H]([C@@H](C(OCC)=O)O)C(OCC)=O',\n  'Diethyl L-(+)-Tartrate': 'O[C@H]([C@H](C(OCC)=O)O)C(OCC)=O',\n  'Diethyl(2-methoxyethyl)methylammonium Bis(fluorosulfonyl)imide': 'FC(F)(F)S(=O)([N-]S(=O)(C(F)(F)F)=O)=O.C[N+](CC)(CC)CCOC',\n  'Diethyl(isopropyl)silanol': 'O[Si](CC)(CC)C(C)C',\n  Diethylamine: 'CCNCC',\n  NEt2: 'CCNCC',\n  'Diethyldimethylammonium hydroxide': 'C[N+](CC)(CC)C.[OH-]',\n  Diethylenetriamine: 'NCCNCCN',\n  Diethylphenylphosphine: 'CCP(CC)C1=CC=CC=C1',\n  'Difluoroacetic Acid': 'O=C(O)C(F)F',\n  'Difluoroacetic Anhydride': 'O=C(OC(C(F)F)=O)C(F)F',\n  'Difluoromethyl 2-Pyridyl Sulfone': 'O=S(C1=NC=CC=C1)(C(F)F)=O',\n  'Difluoromethyl Phenyl Sulfide': 'FC(SC1=CC=CC=C1)F',\n  'Difluoromethyl Phenyl Sulfone': 'O=S(C1=CC=CC=C1)(C(F)F)=O',\n  'Dihydrogen hexahydroxyplatinate': 'O[Pt-2](O)(O)(O)(O)O.[H+].[H+]',\n  Diisobutyldimethoxysilane: 'CO[Si](CC(C)C)(CC(C)C)OC',\n  'Diisopropyl D-(-)-Tartrate': 'O[C@@H]([C@@H](C(OC(C)C)=O)O)C(OC(C)C)=O',\n  'Diisopropyl L-(+)-Tartrate': 'O[C@H]([C@H](C(OC(C)C)=O)O)C(OC(C)C)=O',\n  Diisopropylamine: 'CC(NC(C)C)C',\n  DIPA: 'CC(NC(C)C)C',\n  'Dilauryldimethylammonium Bromide': 'C[N+](CCCCCCCCCCCC)(CCCCCCCCCCCC)C.[Br-]',\n  'Dilithium Tetrachlorocopper(II)': 'Cl[Cu-](Cl)(Cl)Cl.Cl[Cu-](Cl)(Cl)Cl.[Li+].[Li+]',\n  'Dimesitylammonium Pentafluorobenzenesulfonate': 'CC1=CC(C)=CC(C)=C1[NH2+]C2=C(C)C=C(C)C=C2C.O=S(C3=C(F)C(F)=C(F)C(F)=C3F)([O-])=O',\n  Dimesitylfluoroborane: 'CC1=CC(C)=CC(C)=C1B(F)C2=C(C)C=C(C)C=C2C',\n  'Dimethoxy(methyl)(3,3,3-trifluoropropyl)silane': 'FC(F)(F)CC[Si](OC)(OC)C',\n  'Dimethoxy(methyl)silane': 'C[SiH](OC)OC',\n  Dimethoxydimethylsilane: 'C[Si](OC)(OC)C',\n  Dimethoxydiphenylsilane: 'CO[Si](C1=CC=CC=C1)(OC)C2=CC=CC=C2',\n  'Dimethoxydi-p-tolylsilane': 'CC1=CC=C([Si](OC)(OC)C2=CC=C(C)C=C2)C=C1',\n  Dimethoxymethylvinylsilane: 'C=C[Si](OC)(OC)C',\n  \"Dimethyl 2,2'-Bipyridine-4,4'-dicarboxylate\": 'O=C(C1=CC(C2=NC=CC(C(OC)=O)=C2)=NC=C1)OC',\n  \"Dimethyl 2,2'-Bipyridine-6,6'-dicarboxylate\": 'O=C(C1=CC=CC(C2=NC(C(OC)=O)=CC=C2)=N1)OC',\n  'Dimethyl Sulfide Borane': 'CSC.B',\n  'Dimethyl D-(-)-Tartrate': 'O[C@@H]([C@@H](C(OC)=O)O)C(OC)=O',\n  'Dimethyl L-(+)-Tartrate': 'O[C@H]([C@H](C(OC)=O)O)C(OC)=O',\n  Dimethylamin: 'CNC',\n  NMe2: 'CNC',\n  'Dimethylamine Borane': 'CNC.B',\n  'Dimethylbis(phenylethynyl)silane': 'C[Si](C#CC1=CC=CC=C1)(C)C#CC2=CC=CC=C2',\n  'Dimethyldimyristylammonium Bromide': 'CCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCC.[Br-]',\n  'Dimethyldioctadecylammonium Bromide': 'CCCCCCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCCCCCC.[Br-]',\n  'Dimethyldioctadecylammonium Iodide': 'CCCCCCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCCCCCC.[I-]',\n  'Dimethyldioctylammonium Bromide': 'CCCCCCCC[N+](C)(C)CCCCCCCC.[Br-]',\n  'Dimethyldipalmitylammonium Bromide': 'CCCCCCCCCCCCCCCC[N+](C)(C)CCCCCCCCCCCCCCCC.[Br-]',\n  Dimethyldiphenylsilane: 'C[Si](C1=CC=CC=C1)(C)C2=CC=CC=C2',\n  Dimethyldivinylsilane: 'C=C[Si](C)(C)C=C',\n  Dimethylformamide: 'CN(C)C=O',\n  DMF: 'CN(C)C=O',\n  'Dimethylphenylphosphine Borane': 'CP(C)C1=CC=CC=C1.B',\n  Dimethylphenylsilane: 'C[SiH](C)C1=CC=CC=C1',\n  'Dimethylthiophosphinoyl Chloride': 'ClP(C)(C)=S',\n  'Dimethyltin Dichloride': 'C[Sn](Cl)(Cl)C',\n  'Dimethyltin Oxide': 'C[Sn](C)=O',\n  Dimethyltitanocene: 'C[Ti]C.c1cccc1.c2cccc2',\n  'Di-n-octyltin Oxide': 'CCCCCCCC[Sn](CCCCCCCC)=O',\n  'Diphenyl-2-pyridylphosphine': 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=NC=CC=C3',\n  'Diphenylammonium Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.C1([NH2+]C2=CC=CC=C2)=CC=CC=C1',\n  'Diphenylbis(phenylethynyl)silane': 'C1(C#C[Si](C2=CC=CC=C2)(C3=CC=CC=C3)C#CC4=CC=CC=C4)=CC=CC=C1',\n  Diphenyldichlorogermane: 'Cl[Ge](C1=CC=CC=C1)(C2=CC=CC=C2)Cl',\n  'Diphenyliodonium chloride': 'C1([I+]C2=CC=CC=C2)=CC=CC=C1.[Cl-]',\n  'Diphenylphosphine Oxide': 'O=P(C1=CC=CC=C1)C2=CC=CC=C2',\n  'Diphenylphosphinic Chloride': 'O=P(C1=CC=CC=C1)(C2=CC=CC=C2)Cl',\n  'Diphenylphosphoryl Azide': 'O=P(C1=CC=CC=C1)(N=[N+]=[N-])C2=CC=CC=C2',\n  Diphenylpropylphosphine: 'CCCP(C1=CC=CC=C1)C2=CC=CC=C2',\n  Diphenylsilane: 'C1([SiH2]C2=CC=CC=C2)=CC=CC=C1',\n  Diphenylsilanediol: 'O[Si](C1=CC=CC=C1)(C2=CC=CC=C2)O',\n  'Diphosphoryl Chloride': 'O=P(OP(O)(O)=O)(Cl)O',\n  Dipivaloylmethane: 'CC(C)(C)C(CC(C(C)(C)C)=O)=O',\n  \"Dipotassium (R)-1,1'-Binaphthyl-2,2'-disulfonate\": 'O=S(C1=CC=C2C=CC=CC2=C1C3=C4C=CC=CC4=CC=C3S(=O)([O-])=O)([O-])=O.[K+].[K+]',\n  \"Dipyrido[3,2-a:2',3'-c]phenazine\": 'C12=CC=CN=C1C3=NC=CC=C3C4=NC5=CC=CC=C5N=C42',\n  'Di-sec-butylmagnesium - Lithium Chloride': 'CCC([Mg]C(C)CC)C.[Li+].[Cl-]',\n  'Di-tert-butyl 1,4-Dihydro-2,6-dimethyl-3,5-pyridinedicarboxylate': 'O=C(C1=C(C)NC(C)=C(C(OC(C)(C)C)=O)C1)OC(C)(C)C',\n  'Di-tert-butyl Peroxide': 'CC(OOC(C)(C)C)(C)C',\n  DTBP: 'CC(OOC(C)(C)C)(C)C',\n  'Di-tert-butyl L-(+)-Tartrate': 'O[C@H]([C@H](C(OC(C)(C)C)=O)O)C(OC(C)(C)C)=O',\n  'Di-tert-butylchlorophosphine': 'ClP(C(C)(C)C)C(C)(C)C',\n  'Di-tert-butylmethylphosphonium Tetraphenylborate': 'C[PH+](C(C)(C)C)C(C)(C)C.C1([B-](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1',\n  'Di-tert-butylphenylphosphine': 'CC(P(C(C)(C)C)C1=CC=CC=C1)(C)C',\n  'Di-tert-Butylsilane': 'CC([SiH2]C(C)(C)C)(C)C',\n  'DL-Dithiothreitol': 'SC[C@H]([C@@H](CO)O)S',\n  'DL-Lactic Acid': 'OC(C)C(O)=O',\n  'DL-Malic Acid': 'OC(CC(O)=O)C(O)=O',\n  'DL-α-Lipoic Acid': 'O=C(CCCCC1SSCC1)O',\n  'D-Methionine': 'N[C@H](CCSC)C(O)=O',\n  DMSO: 'CS(C)=O',\n  Dodecamethylcyclohexasiloxane: 'C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1',\n  Dodecamethylpentasiloxane: 'C[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)C',\n  Dodecyltriethoxysilane: 'CCO[Si](OCC)(CCCCCCCCCCCC)OCC',\n  Dodecyltrimethoxysilane: 'CO[Si](OC)(CCCCCCCCCCCC)OC',\n  'Dodecyltrimethylammonium Bromide': 'C[N+](C)(CCCCCCCCCCCC)C.[Br-]',\n  'Dodecyltrimethylammonium Chloride': 'C[N+](C)(CCCCCCCCCCCC)C.[Cl-]',\n  'D-Phenylalanine': 'N[C@H](CC1=CC=CC=C1)C(O)=O',\n  'D-Pipecolic Acid': 'O=C(O)C1CCCCN1',\n  'D-Proline': 'O=C(O)[C@@H]1NCCC1',\n  'D-Tryptophan': 'N[C@H](CC1=CNC2=C1C=CC=C2)C(O)=O',\n  ethanol: 'OCC',\n  EtOH: 'OCC',\n  Ethoxydiphenylphosphine: 'CCOP(C1=CC=CC=C1)C2=CC=CC=C2',\n  Ethoxytriethylsilane: 'CC[Si](CC)(OCC)CC',\n  \"Ethyl (11bR)-4-Amino-2,6-bis(3,5-di-tert-butylphenyl)-4,5-dihydro-3H-cyclohepta[1,2-a:7,6-a']dinaphthalene-4-carboxylate\": 'O=C(C1(N)CC2=C(C3=CC(C(C)(C)C)=CC(C(C)(C)C)=C3)C=C4C=CC=CC4=C2C5=C6C=CC=CC6=CC(C7=CC(C(C)(C)C)=CC(C(C)(C)C)=C7)=C5C1)OCC',\n  'Ethyl 1-Hydroxy-1H-1,2,3-triazole-4-carboxylate': 'O=C(C1=CN(O)N=N1)OCC',\n  'ethyl acetate': 'CC(OCC)=O',\n  'Ethyl Chloroglyoxylate': 'O=C(Cl)C(OCC)=O',\n  'Ethyl chlorooxoacetate': 'O=C(OCC)C(Cl)=O',\n  'Ethyl Cyano(hydroxyimino)acetate': 'O=C(OCC)/C(C#N)=N/O',\n  Ethylamine: 'NCC',\n  'Ethylamine Hydrochloride': 'NCC.[H]Cl',\n  'Ethylboronic Acid': 'CCB(O)O',\n  Ethyldiphenylphosphine: 'CCP(C1=CC=CC=C1)C2=CC=CC=C2',\n  'Ethylene diamine': 'NCCN',\n  'Ethylenediaminetetraacetic Acid': 'O=C(CN(CCN(CC(O)=O)CC(O)=O)CC(O)=O)O',\n  'Ethylenedithiobis(trimethylsilane)': 'C[Si](C)(C)SCCS[Si](C)(C)C',\n  Ethyllithium: '[Li]CC',\n  'Ethylmagnesium Bromide': 'Br[Mg]CC',\n  'Ethylmagnesium Chloride': 'Cl[Mg]CC',\n  'Ethyltrimethylammonium Iodide': 'C[N+](C)(CC)C.[I-]',\n  Europium: '[Eu]',\n  \"Fluoro-N,N,N',N'-tetramethylformamidinium Hexafluorophosphate\": 'C[N+](C)=C(F)N(C)C.F[P-](F)(F)(F)(F)F',\n  'Folic Acid Hydrate': 'O=C(O)C(NC(C1=CC=C(NCC2=NC3=C(N=C2)N=C(N)NC3=O)C=C1)=O)CCC(O)=O.[H]O[H]',\n  'Formic acid': 'O=CO',\n  'Fumaric Acid': 'O=C(O)/C=C/C(O)=O',\n  'Gallic Acid Hydrate': 'OC1=CC(C(O)=O)=CC(O)=C1O.[H]O[H]',\n  'Glycolic Acid': 'OCC(O)=O',\n  Gold: '[Au]',\n  'Gold hydroxide': '[Au+3].[OH-].[OH-].[OH-]',\n  Hafnium: '[Hf]',\n  'Hafnium(IV) Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Hf+4]',\n  'Heptafluorobutyric Anhydride': 'O=C(OC(C(F)(F)C(F)(F)C(F)(F)F)=O)C(F)(F)C(F)(F)C(F)(F)F',\n  'Heptafluorobutyryl Chloride': 'O=C(Cl)C(F)(F)C(F)(F)C(F)(F)F',\n  'Heptylmagnesium Bromide': 'Br[Mg]CCCCCCC',\n  Hexachlorodisilane: 'Cl[Si](Cl)(Cl)[Si](Cl)(Cl)Cl',\n  Hexadecamethylcyclooctasiloxane: 'C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1',\n  Hexadecyltrimethoxysilane: 'CO[Si](OC)(CCCCCCCCCCCCCCCC)OC',\n  'Hexadecyltrimethylammonium Bromide': 'C[N+](C)(CCCCCCCCCCCCCCCC)C.[Br-]',\n  'Hexadecyltrimethylammonium Chloride': 'C[N+](C)(CCCCCCCCCCCCCCCC)C.[Cl-]',\n  'Hexadecyltrimethylammonium hydroxide': 'C[N+](C)(CCCCCCCCCCCCCCCC)C.[OH-]',\n  'Hexadecyltrimethylammonium Hydroxide': 'C[N+](C)(CCCCCCCCCCCCCCCC)C.[OH-]',\n  Hexafluoroacetylacetone: 'O=C(C(F)(F)C(CF)=O)C(F)(F)F',\n  'Hexamethonium hydroxide': 'C[N+](CCCCCC[N+](C)(C)C)(C)C.[OH-].[OH-]',\n  Hexamethylbenzene: 'CC1=C(C)C(C)=C(C)C(C)=C1C',\n  Hexamethylcyclotrisiloxane: 'C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O1',\n  Hexamethyldisilane: 'C[Si](C)(C)[Si](C)(C)C',\n  Hexamethyldisiloxane: 'C[Si](C)(C)O[Si](C)(C)C',\n  Hexamethylditin: 'C[Sn](C)(C)[Sn](C)(C)C',\n  Hexamethylenetetramine: 'N12CN3CN(C2)CN(C3)C1',\n  Hexaphenylcyclotrisiloxane: 'C1([Si]2(C3=CC=CC=C3)O[Si](C4=CC=CC=C4)(C5=CC=CC=C5)O[Si](C6=CC=CC=C6)(C7=CC=CC=C7)O2)=CC=CC=C1',\n  Hexaphenyldisilane: 'C1([Si](C2=CC=CC=C2)(C3=CC=CC=C3)[Si](C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC=C1',\n  Hexaphenyldisiloxane: 'C1([Si](C2=CC=CC=C2)(C3=CC=CC=C3)O[Si](C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC=C1',\n  'Hexylboronic Acid': 'CCCCCCB(O)O',\n  Hexyllithium: '[Li]CCCCCC',\n  'Hexylmagnesium Bromide': 'Br[Mg]CCCCCC',\n  Hexyltriethoxysilane: 'CCO[Si](OCC)(CCCCCC)OCC',\n  Hexyltrimethoxysilane: 'CO[Si](OC)(CCCCCC)OC',\n  'Hexyltrimethylammonium Bromide': 'C[N+](C)(CCCCCC)C.[Br-]',\n  'Hydriodic Acid': '[H]I',\n  HI: '[H]I',\n  'Hydrochloric Acid': '[H]Cl',\n  HCl: '[H]Cl',\n  'Hydrogen Bromide': '[H]Br',\n  'Hydrogen Chloride': '[H]Cl',\n  'Hydrogen peroxide': '[H]OO[H]',\n  H2O2: '[H]OO[H]',\n  'Hydroquinidine Hydrochloride': 'O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)CC)C3=CC=NC4=CC=C(OC)C=C34.[H]Cl',\n  'Hydroxylamine-O-sulfonic Acid': 'NOS(O)(=O)=O',\n  'I0801 (S)-4-Isopropyl-3-(1-naphthylmethyl)-2,5,5-triphenyl-1,3,2-oxazaborolidine (ca. 6% in Toluene, ca. 0.1mol/L)': 'CC([C@@H]1N(CC2=C3C=CC=CC3=CC=C2)B(C4=CC=CC=C4)OC1(C5=CC=CC=C5)C6=CC=CC=C6)C',\n  'IF5-Pyridine-HF': '[H]F.FI(F)(F)(F)F.C1=CN=CC=C1',\n  Imidazole: 'C1=NC=CN1',\n  'Imidazolium dichromate': 'O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.C1=[NH+]C=CN1.C2=[NH+]C=CN2',\n  Indan: 'C12=C(CCC2)C=CC=C1',\n  Indene: 'C12=C(CC=C2)C=CC=C1',\n  'INDIUM HYDROXIDE': '[In+3].[OH-].[OH-].[OH-]',\n  Indoline: 'C12=C(NCC2)C=CC=C1',\n  Iodine: 'II',\n  'Iodobenzene Diacetate': 'IC1=CC=CC=C1.CC(O)=O.CC(O)=O',\n  'Iodomesitylene Diacetate': 'CC1=C(I)C(C)=CC(C)=C1.CC(O)=O.CC(O)=O',\n  Iodosodilactone: 'O=C1OI2C3=C1C=CC=C3C(O2)=O',\n  Iridium: '[Ir]',\n  'Iridium(III) Chloride Hydrate': '[H]O[H].[Ir+3].[Cl-].[Cl-].[Cl-]',\n  Iron: '[Fe]',\n  Fe: '[Fe]',\n  'Iron hydroxide': '[Fe+3].[OH-].[OH-].[OH-]',\n  FeOH: '[Fe+3].[OH-].[OH-].[OH-]',\n  'Iron(II) Acetate': 'CC([O-])=O.CC([O-])=O.[Fe+2]',\n  'Iron(III) Chloride': '[Fe+3].[Cl-].[Cl-].[Cl-]',\n  FeCl3: '[Fe+3].[Cl-].[Cl-].[Cl-]',\n  \"Ishikawa's Reagent\": 'FC(N(CC)CC)(C(C(F)(F)F)F)F',\n  'Isobutylboronic Acid': 'CC(C)CB(O)O',\n  Isobutyllithium: '[Li]CC(C)C',\n  'Isobutylmagnesium Bromide': 'Br[Mg]CC(C)C',\n  isopropanpol: 'CC(O)C',\n  iPr: 'CC(O)C',\n  'Isopropenyloxytris(trimethylsilyl)silane': 'C[Si]([Si]([Si](C)(C)C)(OC(C)=C)[Si](C)(C)C)(C)C',\n  'isopropyl alcohol': 'CC(O)C',\n  'Isopropylboronic Acid': 'CC(B(O)O)C',\n  Isopropyldiphenylphosphine: 'CC(P(C1=CC=CC=C1)C2=CC=CC=C2)C',\n  Isopropyllithium: '[Li]C(C)C',\n  'Isopropylmagnesium Bromide': 'Br[Mg]C(C)C',\n  'Isopropylmagnesium Chloride': 'Cl[Mg]C(C)C',\n  'Isopropylmagnesium Chloride - Lithium Chloride': 'Cl[Mg]C(C)C.[Li+].[Cl-]',\n  'Isopropylmagnesium chloride lithium chloride complex': '[Mg+]C(C)C.[Li+].[Cl-].[Cl-]',\n  'L-(-)-Threonine': 'N[C@@H]([C@H](O)C)C(O)=O',\n  'L-(+)-Leucinol': 'N[C@@H](CC(C)C)CO',\n  'L-(+)-Tartaric Acid': 'O[C@H]([C@H](C(O)=O)O)C(O)=O',\n  'L-Alanine': 'N[C@@H](C)C(O)=O',\n  Lanthanum: '[La]',\n  'LANTHANUM HYDROXIDE': '[La+3].[OH-].[OH-].[OH-]',\n  'Lanthanum(III) Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[La+3]',\n  'L-Ascorbic Acid': 'OC([C@H](O1)[C@H](CO)O)=C(O)C1=O',\n  'L-Azetidine-2-carboxylic Acid': 'O=C(C1NCC1)O',\n  'LEAD HYDROXIDE': '[Pb+2].[OH-].[OH-]',\n  'Lead Tetraacetate': 'CC([O-])=O.CC([O-])=O.CC([O-])=O.CC([O-])=O.[Pb+4]',\n  'Pb(OAc)4': 'CC([O-])=O.CC([O-])=O.CC([O-])=O.CC([O-])=O.[Pb+4]',\n  'Lead(II) Iodide': '[Pb+2].[I-].[I-]',\n  'Lithium (E)-4-oxopent-2-en-2-olate': 'C/C([O-])=C\\\\C(C)=O.[Li+]',\n  'Lithium 2,2,6,6-tetramethylpiperidide': 'CC1(C)CCCC(C)(C)[N-]1.[Li+]',\n  'Lithium Acetylide Ethylenediamine Complex': 'NCCN.[C-]#[C-].[Li+].[Li+]',\n  'Lithium Aluminum Hydride': '[Li+].[Al+3].[H-].[H-].[H-].[H-]',\n  'Lithium amide': '[Li+].[NH2-]',\n  'Lithium Bis(trimethylsilyl)amide': 'C[Si]([N-][Si](C)(C)C)(C)C.[Li+]',\n  'Lithium Borohydride': '[Li+].[BH4-]',\n  LiBH4: '[Li+].[BH4-]',\n  'lithium bromid': '[Li+].[Br-]',\n  LiBr: '[Li+].[Br-]',\n  'lithium chloride': '[Li+].[Cl-]',\n  LiCl: '[Li+].[Cl-]',\n  'Lithium dicyclohexylamide': 'C1([N-]C2CCCCC2)CCCCC1.[Li+]',\n  'Lithium diethylamide': 'CC[N-]CC.[Li+]',\n  'Lithium Diisopropylamide': 'CC([N-]C(C)C)C.[Li+]',\n  LDA: 'CC([N-]C(C)C)C.[Li+]',\n  'Lithium dimethylamide': 'C[N-]C.[Li+]',\n  'Lithium Diphenylphosphide (ca. 0.5mol/L in Tetrahydrofuran)': 'C1([P-]C2=CC=CC=C2)=CC=CC=C1.[Li+]',\n  'Lithium ethoxide': 'CC[O-].[Li+]',\n  'Lithium hydroxide': '[Li+].[OH-]',\n  LiOH: '[Li+].[OH-]',\n  'Lithium isopropoxide': 'CC([O-])C.[Li+]',\n  'Lithium methoxide': 'C[O-].[Li+]',\n  LiOMe: 'C[O-].[Li+]',\n  'Lithium peroxide': '[O-][O-].[Li+].[Li+]',\n  'lithium tetrafluoroborate': 'F[B-](F)(F)F.[Li+]',\n  LiBF4: 'F[B-](F)(F)F.[Li+]',\n  'Lithium Triethylborohydride': 'CC[BH-](CC)CC.[Li+]',\n  'Lithium triisobutyl(2,2,6,6 tetramethylpiperdino)aluminate': 'CC1(C)CCCC(C)(C)N1[Al-](CC(C)C)(CC(C)C)CC(C)C.[Li+]',\n  'Lithium trimethylsilanolate': '[O-][Si](C)(C)C.[Li+]',\n  'Lithium Tri-tert-butoxyaluminum Hydride': 'CC(O[Al](OC(C)(C)C)OC(C)(C)C)(C)C.[Li+].[H-]',\n  'Lithium tert-butoxide': 'CC(C)([O-])C.[Li+]',\n  'Lithium tert-Butoxide': 'CC(C)([O-])C.[Li+]',\n  'L-Lactic Acid': 'OC(C)C(O)=O',\n  'L-Methionine': 'N[C@@H](CCSC)C(O)=O',\n  'L-Phenylalanine': 'N[C@@H](CC1=CC=CC=C1)C(O)=O',\n  'L-Pipecolic Acid': 'O=C(O)C1CCCCN1',\n  'L-Prolinamide': 'O=C(N)[C@H]1NCCC1',\n  'L-Prolinanilide': 'O=C(NC1=CC=CC=C1)[C@H]2NCCC2',\n  'L-Proline': 'O=C(O)[C@H]1NCCC1',\n  'L-Thioproline': 'O=C(O)[C@H]1NCCC1=S',\n  'L-Tryptophan': 'N[C@@H](CC1=CNC2=C1C=CC=C2)C(O)=O',\n  'Magnesium bis(diisopropyl)amide': 'CC([N-]C(C)C)C.CC([N-]C(C)C)C.[Mg+2]',\n  'Magnesium bis(hexamethyldisilazide)': 'C[Si](C)(C)[N-][Si](C)(C)C.C[Si](C)(C)[N-][Si](C)(C)C.[Mg+2]',\n  'magnesium bromide': '[Mg+2].[Br-].[Br-]',\n  MgBr2: '[Mg+2].[Br-].[Br-]',\n  'magnesium carbonate': '[O-]C([O-])=O.[Mg+2]',\n  MgCO3: '[O-]C([O-])=O.[Mg+2]',\n  'magnesium chloride': '[Mg+2].[Cl-].[Cl-]',\n  MgCl2: '[Mg+2].[Cl-].[Cl-]',\n  'Magnesium di-tert-butoxide': 'CC(C)([O-])C.CC(C)([O-])C.[Mg+2]',\n  'Magnesium ethoxide': 'CC[O-].CC[O-].[Mg+2]',\n  'Mg(OEt)2': 'CC[O-].CC[O-].[Mg+2]',\n  'MAGNESIUM HYDROXIDE': '[Mg+2].[OH-].[OH-]',\n  'Mg(OH)2': '[Mg+2].[OH-].[OH-]',\n  'magnesium iodide': '[Mg+2].[I-].[I-]',\n  MgI2: '[Mg+2].[I-].[I-]',\n  'Magnesium methoxide': 'C[O-].C[O-].[Mg+2]',\n  'Mg(OMe)2': 'C[O-].C[O-].[Mg+2]',\n  'magnesium permanganate': 'O=[Mn](=O)([O-])=O.O=[Mn](=O)([O-])=O.[Mg+2]',\n  'Mg(MnO4)2': 'O=[Mn](=O)([O-])=O.O=[Mn](=O)([O-])=O.[Mg+2]',\n  'Magnesium permanganate hydrate': 'O=[Mn](=O)([O-])=O.O=[Mn](=O)([O-])=O.[H]O[H].[Mg+2]',\n  'Magnesium peroxide': '[O-][O-].[Mg+2]',\n  'magnesium sulfate': 'O=S([O-])([O-])=O.[Mg+2]',\n  MgSO4: 'O=S([O-])([O-])=O.[Mg+2]',\n  'Maleic Acid': 'O=C(O)/C=C\\\\C(O)=O',\n  'Malonic Acid': 'O=C(O)CC(O)=O',\n  Manganese: '[Mn]',\n  'manganese molybdate': 'O=[Mo]([O-])([O-])=O.[Mn+2]',\n  'manganese perchlorate': 'O=Cl(=O)([O-])=O.O=Cl(=O)([O-])=O.[Mn+2]',\n  'manganese sulfate': 'O=S([O-])([O-])=O.[Mn+2]',\n  MnSO4: 'O=S([O-])([O-])=O.[Mn+2]',\n  'Manganese(II) Bis(trifluoromethanesulfonyl)imide': 'FC(F)(S(=O)([N-]S(=O)(C(F)(F)F)=O)=O)F.FC(F)(S(=O)([N-]S(=O)(C(F)(F)F)=O)=O)F.[Mn+2]',\n  'Manganese(II) Chloride Tetrahydrate': '[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Mn+2].[Cl-].[Cl-]',\n  'meso-Tetraphenylchlorin': 'C1(C2=CC=CC=C2)=C(N3)CCC3=C(C4=CC=CC=C4)C5=NC(C=C5)=C(C6=CC=CC=C6)C(N7)=CC=C7C(C8=CC=CC=C8)=C9CCC1=N9',\n  Methallyltrimethylsilane: 'C[Si](C)(CC(C)=C)C',\n  'Methanesulfonic Acid': 'CS(=O)(O)=O',\n  methanol: 'CO',\n  MeOH: 'CO',\n  'Methoxydimethyl(phenyl)silane': 'C[Si](C)(OC)C1=CC=CC=C1',\n  Methoxydiphenylphosphine: 'COP(C1=CC=CC=C1)C2=CC=CC=C2',\n  'Methoxymethyl(diphenyl)phosphine Oxide': 'COCP(C1=CC=CC=C1)(C2=CC=CC=C2)=O',\n  Methoxymethyltrimethylsilane: 'C[Si](C)(COC)C',\n  Methoxytrimethylsilane: 'C[Si](C)(OC)C',\n  \"Methyl 2,2':6',2''-Terpyridine-4'-carboxylate\": 'O=C(C1=CC(C2=NC=CC=C2)=NC(C3=NC=CC=C3)=C1)OC',\n  'Methyl 3-(Trimethylsilyloxy)crotonate': 'C/C(O[Si](C)(C)C)=C/C(OC)=O',\n  'Methyl Chlorodifluoroacetate': 'O=C(OC)C(F)(Cl)F',\n  'Methyl Chloroglyoxylate': 'O=C(Cl)C(OC)=O',\n  'Methyl chlorooxoacetate': 'O=C(OC)C(Cl)=O',\n  'Methyl Difluoro(fluorosulfonyl)acetate': 'O=C(OC)C(F)(F)S(=O)(F)=O',\n  'Methyl(diphenyl)phosphine Oxide': 'CP(C1=CC=CC=C1)(C2=CC=CC=C2)=O',\n  Methylamine: 'NC',\n  'Methylboronic Acid': 'CB(O)O',\n  'Methyl-d3-magnesium iodide': '[2H]C([Mg]I)([2H])[2H]',\n  Methyldiphenylphosphine: 'CP(C1=CC=CC=C1)C2=CC=CC=C2',\n  Methyldiphenylsilane: 'C[SiH](C1=CC=CC=C1)C2=CC=CC=C2',\n  'Dichloromethane (DCM - Methylene chloride)': 'ClCCl',\n  'Methyllithium lithium bromide': '[Li]C.[Li+].[Br-]',\n  'Methylmagnesium Bromide': 'Br[Mg]C',\n  MeMgBr: 'Br[Mg]C',\n  'Methylmagnesium chloride': 'Cl[Mg]C',\n  MeMgCl: 'Cl[Mg]C',\n  'Methylmagnesium Iodide': 'I[Mg]C',\n  MeMgI: 'I[Mg]C',\n  'Methyltri-n-octylammonium Bis(trifluoromethanesulfonyl)imide': 'O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.C[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC',\n  'Methyltri-n-octylammonium Chloride': 'CCCCCCCC[N+](CCCCCCCC)(C)CCCCCCCC.[Cl-]',\n  'Methyltri-n-octylammonium Hydrogen Sulfate': 'CCCCCCCC[N+](CCCCCCCC)(C)CCCCCCCC.O=S(O)([O-])=O',\n  'Methyltriphenylarsonium Iodide': 'C[As+](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.[I-]',\n  Molybdenum: '[Mo]',\n  'Monobutyltin Oxide': 'CCCC[SnH]=O',\n  'Monosodium Bromoisocyanurate Hydrate': 'BrC([N-]C(N1)=O)=NC1=O.[Na+]',\n  Morpholine: 'C1CNCCO1',\n  'Morpholinosulfur Trifluoride': 'FS(F)(F)N1CCOCC1',\n  'm-Tolylmagnesium Bromide': 'Br[Mg]C1=CC=CC(C)=C1',\n  'N-(2-Pyridyl)bis(trifluoromethanesulfonimide)': 'O=S(N(C1=NC=CC=C1)S(=O)(C(F)(F)F)=O)(C(F)(F)F)=O',\n  'N-(2-Thiophenesulfonyl)-L-prolinamide': 'O=C(NS(=O)(C1=CC=CS1)=O)[C@H]2NCCC2',\n  'N-(9-Deoxy-epi-cinchonidin-9-yl)picolinamide': 'O=C(N[C@H]([C@H]1N2CCC(C1)C(C=C)C2)C3=CC=NC4=CC=CC=C34)C5=NC=CC=C5',\n  'N-(9-Deoxy-epi-cinchonin-9-yl)picolinamide': 'O=C(N[C@@H](C1N2CCC(C1)C(C=C)C2)C3=CC=NC4=CC=CC=C34)C5=NC=CC=C5',\n  'N-(Trifluoromethylthio)phthalimide': 'O=C(N1SC(F)(F)F)C2=CC=CC=C2C1=O',\n  \"N,N,N',N'-Tetraethylethylenediamine\": 'CCN(CC)CCN(CC)CC',\n  \"N,N,N',N'-Tetrakis(2-pyridylmethyl)ethylenediamine\": 'N(CC1=NC=CC=C1)(CC2=NC=CC=C2)CCN(CC3=NC=CC=C3)CC4=NC=CC=C4',\n  \"N,N,N',N'-Tetramethyl-1,3-diaminopropane\": 'CN(C)CCCN(C)C',\n  \"N,N,N',N'-Tetramethyl-1,4-diaminobutane\": 'CN(C)CCCCN(C)C',\n  \"N,N,N',N'-Tetramethyl-1,6-diaminohexane\": 'CN(C)CCCCCCN(C)C',\n  \"N,N,N',N'-Tetramethylethylenediamine\": 'CN(C)CCN(C)C',\n  \"N,N,N',N'-Tetramethyl-O-(N-succinimidyl)uronium Hexafluorophosphate\": 'O=C(N1[O+]=C(N(C)C)N(C)C)CCC1=O.F[P-](F)(F)(F)(F)F',\n  \"N,N,N',N'-Tetramethyl-O-(N-succinimidyl)uronium Tetrafluoroborate\": 'O=C(N1[O+]=C(N(C)C)N(C)C)CCC1=O.F[B-](F)(F)F',\n  \"N,N,N',N'-Tetramethyl-S-(1-oxido-2-pyridyl)thiouronium Hexafluorophosphate\": '[O-][N+]1=CC=CC=C1[S+]=C(N(C)C)N(C)C.F[P-](F)(F)(F)(F)F',\n  \"N,N,N',N'-Tetramethyl-S-(1-oxido-2-pyridyl)thiouronium Tetrafluoroborate\": '[O-][N+]1=CC=CC=C1[S+]=C(N(C)C)N(C)C.F[B-](F)(F)F',\n  \"N,N',N''-Trimethyldiethylenetriamine\": 'CN(CCNC)CCNC',\n  \"N,N'-Bis(2-aminobenzal)ethylenediamine\": 'NC1=CC=CC=C1/C=N/CC/N=C/C2=CC=CC=C2N',\n  \"N,N'-Bis(2-pyridylmethyl)-1,2-ethylenediamine Tetrahydrochloride Dihydrate\": '[H]Cl.[H]Cl.[H]Cl.[H]Cl.[H]O[H].[H]O[H].C1(CNCCNCC2=NC=CC=C2)=NC=CC=C1',\n  \"N,N'-Bis(3,5-di-tert-butylsalicylidene)-1,1,2,2-tetramethylethylenediamine\": 'CC(/N=C/C1=CC(C(C)(C)C)=CC(C(C)(C)C)=C1O)(C)C(C)(C)/N=C/C2=CC(C(C)(C)C)=CC(C(C)(C)C)=C2O',\n  \"N,N'-Bis(5-hydroxysalicylidene)ethylenediamine\": 'OC1=CC=C(O)C=C1/C=N/CC/N=C/C2=CC(O)=CC=C2O',\n  \"N,N'-Bis(salicylidene)-1,2-phenylenediamine\": 'OC1=CC=CC=C1/C=N/C2=CC=CC=C2/N=C/C3=CC=CC=C3O',\n  \"N,N'-Bis(salicylidene)-1,2-propanediamine\": 'CC(/N=C/C1=CC=CC=C1O)C/N=C/C2=CC=CC=C2O',\n  \"N,N'-Bis(salicylidene)-1,3-propanediamine\": 'OC1=CC=CC=C1/C=N/CCC/N=C/C2=CC=CC=C2O',\n  \"N,N'-Bis(salicylidene)ethylenediamine\": 'OC1=CC=CC=C1/C=N/CC/N=C/C2=CC=CC=C2O',\n  'N,N-Dichloro-p-toluenesulfonamide': 'CC1=CC=C(S(=O)(N(Cl)Cl)=O)C=C1',\n  \"N,N'-Dicyclohexyl-1,2-ethanediamine Hydrate\": '[H]O[H].C1(NCCNC2CCCCC2)CCCCC1',\n  \"N,N'-Dicyclohexylcarbodiimide\": 'C1(N=C=NC2CCCCC2)CCCCC1',\n  DCC: 'C1(N=C=NC2CCCCC2)CCCCC1',\n  'N,N-Diethylaniline Borane': 'CCN(CC)C1=CC=CC=C1.B',\n  \"N,N'-Diisopropylcarbodiimide\": 'CC(N=C=NC(C)C)C',\n  DIC: 'CC(N=C=NC(C)C)C',\n  'N,N-Diisopropylethylamine': 'CCN(C(C)C)C(C)C',\n  DIPEA: 'CCN(C(C)C)C(C)C',\n  'N,N-Diisopropylmethylamine': 'CN(C(C)C)C(C)C',\n  \"N,N'-Dimethylethylenediamine\": 'CNCCNC',\n  'N,N-Dimethyl-N-(methylsulfanylmethylene)ammonium Iodide': 'CSC=[N+](C)C.[I-]',\n  \"N,N'-Diphenylethylenediamine\": 'C1(NCCNC2=CC=CC=C2)=CC=CC=C1',\n  \"N,N'-Di-tert-butylcarbodiimide\": 'CC(N=C=NC(C)(C)C)(C)C',\n  \"N,N'-Di-tert-butylethylenediamine\": 'CC(NCCNC(C)(C)C)(C)C',\n  \"N-[(11bS)-4,5-Dihydro-3H-dinaphtho[2,1-c:1',2'-e]azepin-2-yl]trifluoromethanesulfonamide\": 'O=S(C(F)(F)F)(NC1=C2CNCC3=CC=C4C=CC=CC4=C3C2=C5C=CC=CC5=C1)=O',\n  'N-[(9S)-8α-Cinchonan-9-yl]quinoline-8-sulfonamide': 'O=S(C1=C2N=CC=CC2=CC=C1)(N[C@H]([C@@H]3C[C@H]4[C@H](C[N@@]3CC4)C=C)C5=CC=NC6=CC=CC=C56)=O',\n  'N-[2-(Trimethylsilyl)ethoxycarbonyloxy]succinimide': 'O=C(N1OC(OCC[Si](C)(C)C)=O)CCC1=O',\n  'N-Benzylcinchonidinium Chloride': 'O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=CC=C35.[Cl-]',\n  'N-Benzylcinchoninium Chloride': 'O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=CC=C35.[Cl-]',\n  'N-Benzylquinidinium Chloride': 'O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=C(OC)C=C35.[Cl-]',\n  'N-Benzylquininium Chloride': 'O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=[N+](CC4=CC=CC=C4)C5=CC=C(OC)C=C35.[Cl-]',\n  'N-Bromoacetamide': 'CC(NBr)=O',\n  'N-Bromophthalimide': 'O=C(N1Br)C2=CC=CC=C2C1=O',\n  'N-Bromosaccharin': 'O=C1N(Br)S(=O)(C2=C1C=CC=C2)=O',\n  'N-Bromosuccinimide': 'O=C(N1Br)CCC1=O',\n  NBS: 'O=C(N1Br)CCC1=O',\n  'n-Butanol': 'CCCCO',\n  'n-Butyllithium solution': '[Li]CCCC',\n  BuLi: '[Li]CCCC',\n  'N-Chlorobenzenesulfonamide sodium salt': 'O=S(C1=CC=CC=C1)([N-]Cl)=O.[Na+]',\n  'N-Chlorophthalimide': 'O=C(N1Cl)C2=CC=CC=C2C1=O',\n  'N-Chlorosaccharin': 'O=C1N(Cl)S(=O)(C2=C1C=CC=C2)=O',\n  'N-Chlorosuccinimide': 'O=C(N1Cl)CCC1=O',\n  NCS: 'O=C(N1Cl)CCC1=O',\n  Neodymium: '[Nd]',\n  'NEODYMIUM HYDRATE': '[H]O[H].[Nd]',\n  'Neodymium(III) Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Nd+3]',\n  'N-Ethyldiisopropylamine': 'CC(N(CC)C(C)C)C',\n  'N-Fluorobenzenesulfonimide': 'FN(S(=O)(C1=CC=CC=C1)=O)S(=O)(C2=CC=CC=C2)=O',\n  \"N-Fluoro-N'-(chloromethyl)triethylenediamine Bis(tetrafluoroborate)\": 'F[N+]1(CC2)CC[N+]2(CCl)CC1.F[B-](F)(F)F.F[B-](F)(F)F',\n  'n-hexane': 'CCCCCC',\n  'N-Hydroxy-5-norbornene-2,3-dicarboximide': 'O=C(C1C2C3C=CC1C3)N(O)C2=O',\n  'N-Hydroxyphthalimide': 'O=C(N1O)C2=CC=CC=C2C1=O',\n  'N-Hydroxysuccinimide': 'O=C(N1O)CCC1=O',\n  'N-Hydroxysulfosuccinimide Sodium': 'O=C(N1O)C(S(=O)([O-])=O)CC1=O.[Na+]',\n  'N-Hydroxytetrachlorophthalimide': 'O=C(N1O)C2=C(Cl)C(Cl)=C(Cl)C(Cl)=C2C1=O',\n  Nickel: '[Ni]',\n  'Nickel peroxide': '[O-][O-].[Ni+2]',\n  'Nickel(II) Benzenesulfonate Hexahydrate': 'O=S(C1=CC=CC=C1)([O-])=O.O=S(C2=CC=CC=C2)([O-])=O.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Ni+2]',\n  'NICKEL(II) HYDROXIDE': '[Ni+2].[OH-].[OH-]',\n  'Nickel(II) peroxide hydrate ': '[O-][O-].[H]O[H].[Ni+2]',\n  'Nickel(II) Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Ni+2]',\n  'Nickel(II) p-Toluenesulfonate Hexahydrate': 'CC1=CC=C(S(=O)([O-])=O)C=C1.CC2=CC=C(S(=O)([O-])=O)C=C2.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Ni+2]',\n  'Niobium hydroxide oxide': '[Nb+5].[Nb+5].[Nb+5].[OH-].[O-2].[OH-].[O-2].[OH-].[O-2].[OH-].[O-2].[OH-].[O-2]',\n  'N-Iodosaccharin': 'O=C1N(I)S(=O)(C2=C1C=CC=C2)=O',\n  'N-Iodosuccinimide': 'O=C(N1I)CCC1=O',\n  \"N'-Isopropylidene-2-nitrobenzenesulfonohydrazide\": 'O=S(C1=CC=CC=C1[N+]([O-])=O)(NN=C(C)C)=O',\n  'Nitric acid': 'O[N+]([O-])=O',\n  HNO3: 'O[N+]([O-])=O',\n  'Nitrilotriacetic Acid': 'O=C(O)CN(CC(O)=O)CC(O)=O',\n  nitromethane: 'C[N+]([O-])=O',\n  MeNO2: 'C[N+]([O-])=O',\n  'Nitrosyl tetrafluoroborate': 'F[B-](F)(F)(N=O)F',\n  'N-Methylbis(trifluoroacetamide)': 'O=C(C(F)(F)F)N(C)C(C(F)(F)F)=O',\n  'N-Methyl-N-(trifluoromethylthio)aniline': 'FC(F)(F)SN(C)C1=CC=CC=C1',\n  'n-octanol': 'CCCCCCCCO',\n  'n-Octyl p-Toluenesulfonate': 'CC1=CC=C(S(=O)(OCCCCCCCC)=O)C=C1',\n  'n-Octylboronic Acid': 'CCCCCCCCB(O)O',\n  'n-Octylmagnesium Bromide': 'Br[Mg]CCCCCCCC',\n  'n-Octyltrimethylammonium Bromide': 'C[N+](C)(CCCCCCCC)C.[Br-]',\n  'n-Octyltrimethylammonium Chloride': 'C[N+](C)(CCCCCCCC)C.[Cl-]',\n  'Norbornadiene Rhodium(I) Chloride': 'C12C=CC(C2)C=C1.[Rh+].[Cl-]',\n  'N-Phenylbis(trifluoromethanesulfonimide)': 'O=S(N(S(=O)(C(F)(F)F)=O)C1=CC=CC=C1)(C(F)(F)F)=O',\n  'n-propanol': 'CCCO',\n  'N-Salicylideneaniline': 'OC1=CC=CC=C1/C=N/C2=CC=CC=C2',\n  'N-tert-Butyl-5-methylisoxazolium Perchlorate': 'CC1=CC=[N+](C(C)(C)C)O1.O=Cl(=O)([O-])=O',\n  'N-tert-Butylbenzenesulfenamide': 'CC(NSC1=CC=CC=C1)(C)C',\n  'N-tert-Butylbenzenesulfinimidoyl Chloride': 'CC(/N=S(Cl)/C1=CC=CC=C1)(C)C',\n  'N-Trimethylsilylimidazole': 'C[Si](N1C=NC=C1)(C)C',\n  \"O-(3,4-Dihydro-4-oxo-1,2,3-benzotriazin-3-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate\": 'CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C2C1=O.F[B-](F)(F)F',\n  \"O-(6-Chlorobenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Hexafluorophosphate\": 'CN(C)C(N(C)C)=[O+]N1N=NC2=CC=C(Cl)C=C21.F[P-](F)(F)(F)(F)F',\n  \"O-(6-Chlorobenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate\": 'CN(C)C(N(C)C)=[O+]N1N=NC2=CC=C(Cl)C=C21.F[B-](F)(F)F',\n  \"O-(7-Azabenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Hexafluorophosphate\": 'CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CN=C21.F[P-](F)(F)(F)(F)F',\n  \"O-(7-Azabenzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate\": 'CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CN=C21.F[B-](F)(F)F',\n  \"O-(Benzotriazol-1-yl)-N,N,N',N'-bis(pentamethylene)uronium Hexafluorophosphate\": 'F[P-](F)(F)(F)(F)F.N1(OC(N2CCCCC2)=[N+]3CCCCC3)N=NC4=C1C=CC=C4',\n  \"O-(Benzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Hexafluorophosphate\": 'CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C21.F[P-](F)(F)(F)(F)F',\n  \"O-(Benzotriazol-1-yl)-N,N,N',N'-tetramethyluronium Tetrafluoroborate\": 'CN(C)C(N(C)C)=[O+]N1N=NC2=CC=CC=C21.F[B-](F)(F)F',\n  \"O,O'-Di-2-pyridyl Thiocarbonate\": 'S=C(OC1=NC=CC=C1)OC2=NC=CC=C2',\n  \"O-[(Ethoxycarbonyl)cyanomethylenamino]-N,N,N',N'-tetramethyluronium Hexafluorophosphate\": 'CN(C)C(N(C)C)=[O+]/N=C(C(OCC)=O)\\\\C#N.F[P-](F)(F)(F)(F)F',\n  \"O-[(Ethoxycarbonyl)cyanomethylenamino]-N,N,N',N'-tetramethyluronium Tetrafluoroborate\": 'CN(C)C(N(C)C)=[O+]/N=C(C(OCC)=O)\\\\C#N.F[B-](F)(F)F',\n  \"O-[2-Oxo-1(2H)-pyridyl]-N,N,N',N'-tetramethyluronium Tetrafluoroborate\": 'CN(C)C(N(C)C)=[O+]N1C=CC=CC1=O.F[B-](F)(F)F',\n  'o-Chloramine T': 'CC1=CC=CC=C1S([N-]Cl)(=O)=O.[Na+]',\n  Octadecamethylcyclononasiloxane: 'C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1',\n  Octadecyltriethoxysilane: 'CCO[Si](OCC)(CCCCCCCCCCCCCCCCCC)OCC',\n  Octadecyltrimethoxysilane: 'CO[Si](OC)(CCCCCCCCCCCCCCCCCC)OC',\n  'Octakis(dimethylsilyloxy)octasilsesquioxane': 'C[SiH](C)O[Si]1(O[Si]2(O[SiH](C)C)O[Si](O3)(O[SiH](C)C)O[Si](O4)(O[SiH](C)C)O[Si]5(O[SiH](C)C)O2)O[Si]3(O[SiH](C)C)O[Si]4(O[SiH](C)C)O[Si](O5)(O[SiH](C)C)O1',\n  Octamethylcyclotetrasiloxane: 'C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1',\n  Octamethyltrisiloxane: 'C[Si](C)(C)O[Si](C)(C)O[Si](C)(C)C',\n  Octaphenylcyclotetrasiloxane: 'C1([Si]2(C3=CC=CC=C3)O[Si](C4=CC=CC=C4)(C5=CC=CC=C5)O[Si](C6=CC=CC=C6)(C7=CC=CC=C7)O[Si](C8=CC=CC=C8)(C9=CC=CC=C9)O2)=CC=CC=C1',\n  Octaphenyloctasilsesquioxane: 'C1([Si]2(O3)O[Si](O[Si](O4)(C5=CC=CC=C5)O[Si](O6)(C7=CC=CC=C7)O8)(C9=CC=CC=C9)O[Si]8(C%10=CC=CC=C%10)O[Si]3(C%11=CC=CC=C%11)O[Si]6(C%12=CC=CC=C%12)O[Si]4(C%13=CC=CC=C%13)O2)=CC=CC=C1',\n  Osmium: '[Os]',\n  'Osmium Tetroxide': '[Os+8].[O-2].[O-2].[O-2].[O-2]',\n  OsO4: '[Os+8].[O-2].[O-2].[O-2].[O-2]',\n  'O-TBDPS-D-Thr-N-Boc-L-tert-Leu-Diphenylphosphine': 'O=C(OC(C)(C)C)N[C@@H](C(C)(C)C)C(N[C@H]([C@@H](O[Si](C1=CC=CC=C1)(C(C)(C)C)C2=CC=CC=C2)C)CP(C3=CC=CC=C3)C4=CC=CC=C4)=O',\n  'O-tert-Butyl-L-threonine': 'N[C@@H]([C@H](OC(C)(C)C)C)C(O)=O',\n  'o-Tolylmagnesium Bromide': 'Br[Mg]C1=CC=CC=C1C',\n  'Oxalyl bromide': 'O=C(Br)C(Br)=O',\n  'Oxalyl Chloride': 'O=C(Cl)C(Cl)=O',\n  Oxone: '[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)O.[O-]OS(=O)(=O)O.[O-]OS(=O)(=O)O.[K+].[K+].[K+].[K+].[K+]',\n  Oxygen: 'OO',\n  O2: 'OO',\n  Ozone: 'O=[O+][O-]',\n  O3: 'O=[O+][O-]',\n  'Palladium Carbon': '[Pd]',\n  'Pd-C': '[Pd]',\n  PdC: '[Pd]',\n  'Pd/C': '[Pd]',\n  'Palladium hydroxide': '[Pd+2].[OH-].[OH-]',\n  'Pd(OH)2': '[Pd+2].[OH-].[OH-]',\n  'Palladium(II) Acetate': 'CC([O-])=O.CC([O-])=O.[Pd+2]',\n  'Pd(OAc)2': 'CC([O-])=O.CC([O-])=O.[Pd+2]',\n  'Palladium(II) Chloride': '[Pd+2].[Cl-].[Cl-]',\n  PdCl2: '[Pd+2].[Cl-].[Cl-]',\n  'Palladium(II) Trifluoroacetate': 'O=C([O-])C(F)(F)F.O=C([O-])C(F)(F)F.[Pd+2]',\n  'Palmitic Acid': 'CCCCCCCCCCCCCCCC(O)=O',\n  'p-Cymene': 'CC1=CC=C(C(C)C)C=C1',\n  'Pentadecylmagnesium Bromide': 'Br[Mg]CCCCCCCCCCCCCCC',\n  'Pentafluoroanilinium Trifluoromethanesulfonate': 'F[N+](F)(F)C1=CC=CC(F)=C1F.O=S(C(F)(F)F)([O-])=O',\n  'Pentafluorobenzoyl Chloride': 'O=C(Cl)C1=C(F)C(F)=C(F)C(F)=C1F',\n  Pentafluorophenol: 'OC1=C(F)C(F)=C(F)C(F)=C1F',\n  'Pentafluorophenyl 4-Nitrobenzenesulfonate': 'O=S(C1=CC=C([N+]([O-])=O)C=C1)(OC2=C(F)C(F)=C(F)C(F)=C2F)=O',\n  'Pentafluorophenyl Trifluoroacetate': 'O=C(OC1=C(F)C(F)=C(F)C(F)=C1F)C(F)(F)F',\n  'Pentafluoropropionic Anhydride': 'O=C(OC(C(F)(F)C(F)(F)F)=O)C(F)(F)C(F)(F)F',\n  pentane: 'CCCCC',\n  'Pentylboronic Acid': 'CCCCCB(O)O',\n  'Pentylmagnesium Bromide': 'Br[Mg]CCCCC',\n  'Pentylmagnesium chloride': 'Cl[Mg]CCCCC',\n  Pentyltriethoxysilane: 'CCO[Si](OCC)(CCCCC)OCC',\n  'Periodic acid': 'O=I(=O)(O)=O',\n  HIO4: 'O=I(=O)(O)=O',\n  Perylene: 'C12=CC=CC(C3=CC=CC4=C3C5=CC=C4)=C1C5=CC=C2',\n  'PhenoFluor™ Mix': '[Cs]F.Cl[C+](N(C=C1)C2=C(C(C)C)C=CC=C2C(C)C)=[N]1C(C(C(C)C)=CC=C3)=C3C(C)C.[Cl-]',\n  'Phenol nitroprusside solution': 'O=N[Fe-2](C#N)(C#N)(C#N)(C#N)C#N.OC1=CC=CC=C1',\n  'Phenyl Trifluoromethyl Sulfone': 'O=S(C(F)(F)F)(C1=CC=CC=C1)=O',\n  'Phenyl Trifluoromethyl Sulfoxide': 'O=S(C1=CC=CC=C1)C(F)(F)F',\n  'Phenyl[3-(trifluoromethyl)phenyl]iodonium triflate': 'FC(C1=CC([I+]C2=CC=CC=C2)=CC=C1)(F)F.O=S([O-])(C(F)(F)F)=O',\n  'Phenylarsine Oxide': 'O=[As]C1=CC=CC=C1',\n  'Phenylarsonic Acid': 'O=[As](C1=CC=CC=C1)(O)O',\n  'Phenylgermanium Trichloride': 'Cl[Ge](Cl)(Cl)C1=CC=CC=C1',\n  'Phenylmagnesium Bromide': 'Br[Mg]C1=CC=CC=C1',\n  'Phenylmagnesium Chloride': 'Cl[Mg]C1=CC=CC=C1',\n  'Phenylmagnesium Iodide': 'I[Mg]C1=CC=CC=C1',\n  'Phenylphosphonic Dichloride': 'O=P(C1=CC=CC=C1)(Cl)Cl',\n  Phenylsilane: '[SiH3]C1=CC=CC=C1',\n  'Phenyltin Trichloride': 'Cl[Sn](Cl)(Cl)C1=CC=CC=C1',\n  'Phosphomolybdic acid': 'O=[Mo](OP(O)(O)=O)(O)=O',\n  'Phosphomolybdic Acid Ethanol Solution': 'O=[Mo](OP(O)(O)=O)(O)=O.CCO',\n  'Phosphomolybdic Acid Hydrate': 'O=[Mo](OP(O)(O)=O)(O)=O.[H]O[H]',\n  'Phosphorus(V) oxychloride': 'ClP(Cl)(Cl)=O',\n  'Phosphoryl chloride': 'O=P(Cl)(Cl)Cl',\n  'Phthalic Acid': 'O=C(O)C1=CC=CC=C1C(O)=O',\n  Phthalocyanine: 'C1(C2=N3)=C(C=CC=C1)C(N2)=NC4=NC(C5=C4C=CC=C5)=NC(N6)=C7C=CC=CC7=C6N=C8C9=C(C=CC=C9)C3=N8',\n  Piperidine: 'N1CCCCC1',\n  Platinum: '[Pt]',\n  'Platinum(IV) Oxide': '[Pt+4].[O-2].[O-2]',\n  'Potassium (2-Formylphenyl)trifluoroborate': 'F[B-](F)(C1=CC=CC=C1C=O)F.[K+]',\n  'Potassium (2-Methoxyphenyl)trifluoroborate': 'F[B-](F)(C1=CC=CC=C1OC)F.[K+]',\n  'Potassium (3-Cyanophenyl)trifluoroborate': 'F[B-](F)(C1=CC=CC(C#N)=C1)F.[K+]',\n  'Potassium (3-Methoxyphenyl)trifluoroborate': 'F[B-](F)(C1=CC=CC(OC)=C1)F.[K+]',\n  'Potassium (3-Nitrophenyl)trifluoroborate': 'F[B-](F)(C1=CC=CC([N+]([O-])=O)=C1)F.[K+]',\n  'Potassium (4-Cyanophenyl)trifluoroborate': 'F[B-](F)(C1=CC=C(C#N)C=C1)F.[K+]',\n  'Potassium (4-Methoxyphenyl)trifluoroborate': 'F[B-](F)(C1=CC=C(OC)C=C1)F.[K+]',\n  'Potassium (Acetoxymethyl)trifluoroborate': 'F[B-](F)(COC(C)=O)F.[K+]',\n  'Potassium (Bromomethyl)trifluoroborate': 'F[B-](F)(CBr)F.[K+]',\n  'Potassium (Iodomethyl)trifluoroborate': 'F[B-](F)(CI)F.[K+]',\n  'Potassium (Methoxymethyl)trifluoroborate': 'F[B-](F)(COC)F.[K+]',\n  'Potassium [[(tert-Butoxycarbonyl)amino]methyl]trifluoroborate': 'F[B-](F)(CNC(OC(C)(C)C)=O)F.[K+]',\n  'Potassium 2-iodo-5-methylbenzenesulfonate': 'O=S(C1=CC(C)=CC=C1I)([O-])=O.[K+]',\n  'Potassium 2-Thienyltrifluoroborate': 'F[B-](F)(C1=CC=CS1)F.[K+]',\n  'Potassium 3-Pyridyltrifluoroborate': 'F[B-](F)(C1=CC=CN=C1)F.[K+]',\n  'Potassium 4-Pyridyltrifluoroborate': 'F[B-](F)(C1=CC=NC=C1)F.[K+]',\n  'potassium acetate': 'CC([O-])=O.[K+]',\n  KOAc: 'CC([O-])=O.[K+]',\n  'Potassium Allyltrifluoroborate': 'F[B-](F)(CC=C)F.[K+]',\n  'Potassium Bis(1-pyrazolyl)borohydride': 'N1([BH2-]N2N=CC=C2)N=CC=C1.[K+]',\n  'Potassium Bis(trimethylsilyl)amide': 'C[Si]([N-][Si](C)(C)C)(C)C.[K+]',\n  'Potassium Borohydride': '[K+].[BH4-]',\n  KBH4: '[K+].[BH4-]',\n  'Potassium butanolate': 'CC([O-])(C)C.[K+]',\n  'potassium carbonate': '[O-]C([O-])=O.[K+].[K+]',\n  K2CO3: '[O-]C([O-])=O.[K+].[K+]',\n  'potassium chloride': '[K+].[Cl-]',\n  KCl: '[K+].[Cl-]',\n  'Potassium cyanide': '[C-]#N.[K+]',\n  KCN: '[C-]#N.[K+]',\n  'Potassium Cyclopropyltrifluoroborate': 'F[B-](F)(C1CC1)F.[K+]',\n  'Potassium dichromate': 'O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.[K+].[K+]',\n  'Potassium ethoxide': 'CC[O-].[K+]',\n  'potassium fluoride': '[K+].[F-]',\n  KF: '[K+].[F-]',\n  'Potassium Hexafluoroarsenate': 'F[As-](F)(F)(F)(F)F.[K+]',\n  'Potassium hydroxide': '[K+].[OH-]',\n  'Potassium hydroxide solution': '[K+].[OH-]',\n  KOH: '[K+].[OH-]',\n  'potassium iodide': '[K+].[I-]',\n  KI: '[K+].[I-]',\n  'Potassium methoxide': 'C[O-].[K+]',\n  KOMe: 'C[O-].[K+]',\n  'Potassium monopersulfate triple salt': 'OS(=O)(=O)[O-].OS(=O)(=O)O[O-].OS(=O)(=O)O[O-].[O-]S(=O)(=O)[O-].[K+].[K+].[K+].[K+].[K+]',\n  'Potassium nitrate': '[N+](=O)([O-])[O-].[K+]',\n  KNO3: '[N+](=O)([O-])[O-].[K+]',\n  'Potassium permanganate': 'O=[Mn](=O)(=O)([K])=O',\n  KMnO4: 'O=[Mn](=O)(=O)([K])=O',\n  'Potassium Perrhenate': 'O=[Re](=O)([O-])=O.[K+]',\n  'Potassium perruthenate': 'O=[Ru](=O)([O-])=O.[K+]',\n  'potassium persulfate': '[O-]S(=O)(OOS(=O)([O-])=O)=O.[K+].[K+]',\n  'Potassium Phenyltrifluoroborate': 'F[B-](F)(C1=CC=CC=C1)F.[K+]',\n  'Potassium Trifluoro(trifluoromethyl)borate': 'FC([B-](F)(F)F)(F)F.[K+]',\n  'Potassium Trifluoroacetate': 'O=C([O-])C(F)(F)F.[K+]',\n  'Potassium Trimethoxy(trifluoromethyl)borate': 'FC([B-](OC)(OC)OC)(F)F.[K+]',\n  'Potassium trimethylsilanolate': '[O-][Si](C)(C)C.[K+]',\n  'Potassium Tris(1-pyrazolyl)borohydride': '[BH-](N1N=CC=C1)(N2N=CC=C2)N3N=CC=C3.[K+]',\n  'Potassium Vinyltrifluoroborate': 'F[B-](F)(C=C)F.[K+]',\n  'Potassium o-Tolyltrifluoroborate': 'F[B-](F)(C1=CC=CC=C1C)F.[K+]',\n  'Potassium p-Tolyltrifluoroborate': 'F[B-](F)(C1=CC=C(C)C=C1)F.[K+]',\n  'Potassium tert-Butoxide': 'CC(C)([O-])C.[K+]',\n  'Potassium tert-Pentoxide': 'CCC(C)([O-])C.[K+]',\n  'Propionic Acid': 'CCC(O)=O',\n  'Propylboronic Acid': 'CCCB(O)O',\n  'Propylmagnesium Bromide': 'Br[Mg]CCC',\n  'Propylmagnesium chloride': 'Cl[Mg]CCC',\n  'p-Toluenesulfonic Acid Monohydrate': 'CC1=CC=C(S(=O)(O)=O)C=C1.[H]O[H]',\n  'p-Tolylmagnesium Bromide': 'Br[Mg]C1=CC=C(C)C=C1',\n  Pyridine: 'C1=CN=CC=C1',\n  'Pyridine - Sulfur Trioxide Complex': 'O=S(=O)=O.C1=CC=NC=C1',\n  'Pyridine Iodine Monochloride': 'IC1=NC=CC=C1Cl',\n  'Pyridine-2-sulfonyl Fluoride': 'O=S(C1=NC=CC=C1)(F)=O',\n  'Pyridinium 3-Nitrobenzenesulfonate': 'O=S(C1=CC=CC([N+]([O-])=O)=C1)([O-])=O.C2=CC=CC=[NH+]2',\n  'Pyridinium Bromide Perbromide': 'BrBr.C1=[NH+]C=CC=C1.[Br-]',\n  'Pyridinium chlorochromate': '[O-][Cr](=O)(Cl)=O.C1=CC=CC=[NH+]1',\n  'Pyridinium dichromate': 'O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.C1=CC=CC=[NH+]1.C2=CC=CC=[NH+]2',\n  'Pyridinium Fluorochromate': '[O-][Cr](=O)(F)=O.C1=CC=CC=[NH+]1',\n  'Pyridinium p-Toluenesulfonate': 'CC1=CC=C(S(=O)([O-])=O)C=C1.C2=CC=CC=[NH+]2',\n  'Pyrimidine-2-sulfonyl Fluoride': 'O=S(C1=NC=CC=N1)(F)=O',\n  Quincoridine: 'OC[C@H]1C[C@@H]2CC[N@]1C[C@@H]2C=C',\n  Quincorine: 'OC[C@@H]1C[C@@H]2CC[N@]1C[C@@H]2C=C',\n  Quinidine: 'O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34',\n  'Quinidine Sulfate Dihydrate': 'O[C@H]([C@@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34.O=S(O)(O)=O.[H]O[H].[H]O[H]',\n  Quinine: 'O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34',\n  'Quinine Hydrochloride Dihydrate': 'O[C@@H]([C@H]1C[C@H]2[C@H](C[N@@]1CC2)C=C)C3=CC=NC4=CC=C(OC)C=C34.[H]Cl.[H]O[H].[H]O[H]',\n  'Quinolinium Dichromate': 'O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.C12=CC=C[NH+]=C1C=CC=C2.C34=CC=C[NH+]=C3C=CC=C4',\n  Quinuclidine: 'N12CCC(CC2)CC1',\n  Rhenium: '[Re]',\n  Rhodium: '[Rh]',\n  'rhodium trihydroxide': '[Rh+3].[OH-].[OH-].[OH-]',\n  'Rhodium(II) Acetate': 'CC([O-])=O.CC([O-])=O.[Rh+2]',\n  'Rhodium(II) Octanoate': 'CCCCCCCC([O-])=O.CCCCCCCC([O-])=O.[Rh+2]',\n  'RHODIUM(III) OXIDE HYDRATE': '[H]O[H].[Rh+3].[Rh+3].[O-2].[O-2].[O-2]',\n  'Rubidium hydroxide': '[Rb+].[OH-]',\n  Ruthenium: '[Ru]',\n  'Ruthenium(III) Chloride': '[Ru+3].[Cl-].[Cl-].[Cl-]',\n  RuCl3: '[Ru+3].[Cl-].[Cl-].[Cl-]',\n  \"Salcomine [=N,N'-Bis(salicylidene)ethylenediiminocobalt(II)]\": '[O-]C(C=CC=C1)=C1/C=N/CC/N=C/C2=CC=CC=C2[O-].[Co+2]',\n  Samarium: '[Sm]',\n  'Samarium(II) Iodide': '[Sm+2].[I-].[I-]',\n  Scandium: '[Sc]',\n  'Scandium(III) Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Sc+3]',\n  'sec-Butyllithium': '[Li]C(C)CC',\n  'sec-Butylmagnesium Bromide': 'Br[Mg]C(C)CC',\n  'sec-Butylmagnesium chloride': 'Cl[Mg]C(C)CC',\n  'sec-Butylmagnesium Chloride - Lithium Chloride': 'Cl[Mg]C(C)CC.[Li+].[Cl-]',\n  'Selenium dioxide': 'O=[Se]=O',\n  SeO2: 'O=[Se]=O',\n  'S-Ethyl Trifluorothioacetate': 'O=C(SCC)C(F)(F)F',\n  Silver: '[Ag]',\n  'Silver Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.[Ag+]',\n  'Silver(I) Trifluoromethanethiolate': '[S-]C(F)(F)F.[Ag+]',\n  'Silver(II) picolinate': 'O=C([O-])C1=NC=CC=C1.O=C([O-])C2=NC=CC=C2.[Ag+2]',\n  'Silver(II) Pyridine-2-carboxylate': 'O=C(C1=NC=CC=C1)[O-].O=C(C2=NC=CC=C2)[O-].[Ag+2]',\n  'Sodium bicarbonate': 'C(=O)(O)[O-].[Na+]',\n  'Sodium (Trihydroxy)phenylborate': 'O[B-](O)(O)C1=CC=CC=C1.[Na+]',\n  'Sodium amide': '[Na+].[NH2-]',\n  NaNH2: '[Na+].[NH2-]',\n  'Sodium ascorbate': '[O-]C([C@H](O1)[C@H](CO)O)=C(O)C1=O.[Na+]',\n  'sodium azide': '[N-]=[N+]=[N-].[Na+]',\n  NaN3: '[N-]=[N+]=[N-].[Na+]',\n  'Sodium Bis(2-methoxyethoxy)aluminum Dihydride': 'COCCO[Al+]OCCOC.[Na+].[H-].[H-]',\n  'Sodium Bis(trimethylsilyl)amide': 'C[Si]([N-][Si](C)(C)C)(C)C.[Na+]',\n  'Sodium Borohydride': '[Na+].[BH4-]',\n  NaBH4: '[Na+].[BH4-]',\n  'sodium bromate': 'O=Br([O-])=O.[Na+]',\n  'sodium bromide': '[Na+].[Br-]',\n  NaBr: '[Na+].[Br-]',\n  'Sodium Bromodifluoroacetate': 'O=C([O-])C(F)(Br)F.[Na+]',\n  'sodium carbonate': '[O-]C([O-])=O.[Na+].[Na+]',\n  Na2CO3: '[O-]C([O-])=O.[Na+].[Na+]',\n  'Sodium carbonate decahydrate': '[O-]C([O-])=O.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Na+].[Na+]',\n  'sodium chloride': '[Na+].[Cl-]',\n  NaCl: '[Na+].[Cl-]',\n  'Sodium Chlorodifluoroacetate': 'O=C([O-])C(F)(Cl)F.[Na+]',\n  'Sodium Cyanoborohydride': '[BH3-]C#N.[Na+]',\n  'sodium cycanide': '[C-]#N.[Na+]',\n  NaCN: '[C-]#N.[Na+]',\n  'sodium D,L lactate': 'OC(C)C([O-])=O.[Na+]',\n  'Sodium Dichloroisocyanurate': 'ClN1C([N-]C(N(C1=O)Cl)=O)=O.[Na+]',\n  'Sodium dichloroisocyanurate dihydrate': 'O=C1N=C([O-])N(Cl)C(N1Cl)=O.O.O.[Na+]',\n  'Sodium dichromate dihydrate': 'O=[Cr]([O-])(O[Cr](=O)([O-])=O)=O.[H]O[H].[H]O[H].[Na+].[Na+]',\n  'Sodium Diphenylphosphinobenzene-3-sulfonate': 'O=S(C1=CC(P(C2=CC=CC=C2)C3=CC=CC=C3)=CC=C1)([O-])=O.[Na+]',\n  'Sodium Ethoxide': 'CC[O-].[Na+]',\n  NaOEt: 'CC[O-].[Na+]',\n  'sodium fluoride': '[Na+].[F-]',\n  NaF: '[Na+].[F-]',\n  'Sodium hydride': '[NaH]',\n  NaH: '[NaH]',\n  'sodium hydrogen difluoride': '[Na+].[H+].[F-].[F-]',\n  'Sodium hydrogen periodate': 'O=I(=O)([O-])=O.O=I(=O)([O-])=O.[Na+].[H+]',\n  'Sodium Hydroxide': '[Na+].[OH-]',\n  NaOH: '[Na+].[OH-]',\n  'Sodium Hypochlorite Pentahydrate': 'Cl[O-].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Na+]',\n  'Sodium iodide': '[Na+].[I-]',\n  NaI: '[Na+].[I-]',\n  'sodium L-tartrate': 'O[C@H]([C@H](C([O-])=O)O)C([O-])=O.[Na+].[Na+]',\n  'Sodium Methoxide': 'C[O-].[Na+]',\n  NaOMe: 'C[O-].[Na+]',\n  'Sodium nitrate': '[N+](=O)([O-])[O-].[Na+]',\n  NaNO3: '[N+](=O)([O-])[O-].[Na+]',\n  'Sodium percarbonate': 'O=C(O[O-])[O-].[Na+].[Na+]',\n  'sodium perchlorate': 'O=Cl(=O)([O-])=O.[Na+]',\n  'Sodium permanganate': 'O=[Mn](=O)([O-])=O.[Na+]',\n  NaMnO4: 'O=[Mn](=O)([O-])=O.[Na+]',\n  'Sodium peroxide': '[O-][O-].[Na+].[Na+]',\n  Na2O2: '[O-][O-].[Na+].[Na+]',\n  'sodium persulfate': '[O-]S(=O)(OOS(=O)([O-])=O)=O.[Na+].[Na+]',\n  'Sodium phosphomolybdate hydrate': 'O=[Mo](OP(O)(O)=O)([O-])=O.[H]O[H].[Na+]',\n  'sodium sulfite': 'O=S([O-])[O-].[Na+].[Na+]',\n  'Sodium Tellurite Pentahydrate': 'O=[Te]([O-])[O-].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Na+].[Na+]',\n  'sodium tetraborate': 'O[B-]12OBO[B-](OBO2)(O)O1.[Na+].[Na+]',\n  'Sodium Tetrachloropalladate(II)': 'Cl[Pd-2](Cl)(Cl)Cl.[Na+].[Na+]',\n  'Sodium Tetrafluoroborate': 'F[B-](F)(F)F.[Na+]',\n  'Sodium Triacetoxyborohydride': 'O=C(O[BH-](OC(C)=O)OC(C)=O)C.[Na+]',\n  'Sodium Trifluoroacetate': 'O=C([O-])C(F)(F)F.[Na+]',\n  'Sodium Trifluoromethanesulfinate': 'O=S(C(F)(F)F)[O-].[Na+]',\n  'Sodium trimethylsilanolate': '[O-][Si](C)(C)C.[Na+]',\n  'Sodium Tris(1,1,1,3,3,3-hexafluoroisopropoxy)borohydride': 'FC(F)(C(C(F)(F)F)O[BH-](OC(C(F)(F)F)C(F)(F)F)OC(C(F)(F)F)C(F)(F)F)F.[Na+]',\n  'Sodium tert-Butoxide': 'CC(C)([O-])C.[Na+]',\n  'Sodium tert-Pentoxide': 'CCC(C)([O-])C.[Na+]',\n  'Sorbic Acid': 'C/C=C/C=C/C(O)=O',\n  'Strontium hydroxide': '[Sr+2].[OH-].[OH-]',\n  'STRONTIUM HYDROXIDE OCTAHYDRATE': '[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Sr+2].[OH-].[OH-]',\n  'Strontium peroxide': '[O-][O-].[Sr+2]',\n  'Succinic Acid': 'O=C(O)CCC(O)=O',\n  'Sulfanilic Acid': 'O=S(O)(C1=CC=C(N)C=C1)=O',\n  sulfolane: 'O=S1(CCCC1)=O',\n  'Sulfur Trioxide': 'O=S(=O)=O',\n  SO3: 'O=S(=O)=O',\n  'Sulfur Trioxide - Triethylamine Complex': 'O=S(=O)=O.CCN(CC)CC',\n  'Sulfuric acid': 'O=S(O)(O)=O',\n  H2SO4: 'O=S(O)(O)=O',\n  'Sulfuryl chloride': 'O=S(Cl)(Cl)=O',\n  SO2Cl2: 'O=S(Cl)(Cl)=O',\n  'Tebbe reagent': 'C[Al-]1(C[Ti+2][Cl+]1)C.[cH-]1cccc1.[cH-]1cccc1',\n  'Telluric Acid': 'O=[Te](O)(O)=O',\n  'Tellurium(IV) Oxide': '[Te+4].[O-2].[O-2]',\n  Terbium: '[Tb]',\n  'tert-Butyl hydroperoxide': 'CC(C)(OO)C',\n  TBHP: 'CC(C)(OO)C',\n  'tert-Butyl Hydroperoxide': 'CC(C)(OO)C',\n  'tert-Butyldimethylsilane': 'C[SiH](C(C)(C)C)C',\n  'tert-Butyldimethylsilanol': 'O[Si](C)(C(C)(C)C)C',\n  'tert-Butyldiphenylsilane': 'CC([SiH](C1=CC=CC=C1)C2=CC=CC=C2)(C)C',\n  'tert-Butyllithium': '[Li]C(C)(C)C',\n  tBuLi: '[Li]C(C)(C)C',\n  'tert-Butylmagnesium Chloride': 'Cl[Mg]C(C)(C)C',\n  'tert-Butylmethoxyphenylsilyl Bromide': 'CO[Si](C(C)(C)C)(Br)C1=CC=CC=C1',\n  'Tetra(decyl)ammonium Bromide': 'CCCCCCCCCC[N+](CCCCCCCCCC)(CCCCCCCCCC)CCCCCCCCCC.[Br-]',\n  Tetraallyltin: 'C=CC[Sn](CC=C)(CC=C)CC=C',\n  'Tetraamylammonium Bromide': 'CCCCC[N+](CCCCC)(CCCCC)CCCCC.[Br-]',\n  'Tetraamylammonium Chloride': 'CCCCC[N+](CCCCC)(CCCCC)CCCCC.[Cl-]',\n  'Tetraamylammonium Iodide': 'CCCCC[N+](CCCCC)(CCCCC)CCCCC.[I-]',\n  Tetrabromofluorescein: 'O=C1OC2(C3=C(OC4=C2C=CC(O)=C4)C=C(O)C=C3)C5=C1C(Br)=C(Br)C(Br)=C5Br',\n  'Tetrabutyl Orthosilicate': 'CCCCO[Si](OCCCC)(OCCCC)OCCCC',\n  'Tetrabutyl Orthotitanate': 'CCCCO[Ti](OCCCC)(OCCCC)OCCCC',\n  'Tetrabutyl Orthotitanate Tetramer': '[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[O-]CCCC.[Ti+4].[Ti+4].[O-2].[O-2].[Ti+4].[O-2].[Ti+4]',\n  'Tetrabutylammonium (meta)periodate': 'CCCC[N+](CCCC)(CCCC)CCCC.O=I(=O)([O-])=O',\n  'Tetrabutylammonium Acetate': 'CCCC[N+](CCCC)(CCCC)CCCC.CC([O-])=O',\n  'Tetrabutylammonium Bifluoride': 'CCCC[N+](CCCC)(CCCC)CCCC.[H]F.[F-]',\n  'Tetrabutylammonium Borohydride': 'CCCC[N+](CCCC)(CCCC)CCCC.[BH4-]',\n  'Tetrabutylammonium Bromide': 'CCCC[N+](CCCC)(CCCC)CCCC.[Br-]',\n  'Tetrabutylammonium Chloride': 'CCCC[N+](CCCC)(CCCC)CCCC.[Cl-]',\n  'Tetrabutylammonium chlorochromate': 'CCCC[N+](CCCC)(CCCC)CCCC.[O-][Cr](=O)(Cl)=O',\n  'Tetrabutylammonium Difluorotriphenylstannate': 'CCCC[N+](CCCC)(CCCC)CCCC.F[Sn-](C1=CC=CC=C1)(C2=CC=CC=C2)(F)C3=CC=CC=C3',\n  'Tetrabutylammonium Dihydrogen Trifluoride': 'CCCC[N+](CCCC)(CCCC)CCCC.[H+].[H+].[F-].[F-].[F-]',\n  'Tetrabutylammonium ethoxide': 'CCCC[N+](CCCC)(CCCC)CCCC.CC[O-]',\n  'Tetrabutylammonium Fluoride': 'CCCC[N+](CCCC)(CCCC)CCCC.[F-]',\n  'Tetrabutylammonium Fluoride Hydrate': 'CCCC[N+](CCCC)(CCCC)CCCC.[H]O[H].[F-]',\n  'Tetrabutylammonium Hexafluorophosphate': 'CCCC[N+](CCCC)(CCCC)CCCC.F[P-](F)(F)(F)(F)F',\n  'Tetrabutylammonium Hydrogen Sulfate': 'CCCC[N+](CCCC)(CCCC)CCCC.O=S(O)([O-])=O',\n  'Tetrabutylammonium hydroxide': 'CCCC[N+](CCCC)(CCCC)CCCC.[OH-]',\n  'Tetrabutylammonium Iodide': 'CCCC[N+](CCCC)(CCCC)CCCC.[I-]',\n  'Tetrabutylammonium methoxide': 'CCCC[N+](CCCC)(CCCC)CCCC.C[O-]',\n  'Tetrabutylammonium Perchlorate': 'CCCC[N+](CCCC)(CCCC)CCCC.O=Cl(=O)([O-])=O',\n  'Tetrabutylammonium Perrhenate': 'CCCC[N+](CCCC)(CCCC)CCCC.O=[Re](=O)([O-])=O',\n  'Tetrabutylammonium Tetrafluoroborate': 'CCCC[N+](CCCC)(CCCC)CCCC.F[B-](F)(F)F',\n  'Tetrabutylammonium Tetraphenylborate': 'CCCC[N+](CCCC)(CCCC)CCCC.C1([B-](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1',\n  'Tetrabutylammonium Thiocyanate': 'CCCC[N+](CCCC)(CCCC)CCCC.[S-]C#N',\n  'Tetrabutylammonium Tribromide': 'CCCC[N+](CCCC)(CCCC)CCCC.[Br-].[Br-].[Br-]',\n  'Tetrabutylammonium Trifluoromethanesulfonate': 'CCCC[N+](CCCC)(CCCC)CCCC.O=S(C(F)(F)F)([O-])=O',\n  'Tetrabutylammonium Triiodide': 'CCCC[N+](CCCC)(CCCC)CCCC.[I-].[I-].[I-]',\n  Tetrabutylgermane: 'CCCC[Ge](CCCC)(CCCC)CCCC',\n  'Tetrabutylphosphonium Bromide': 'CCCC[P+](CCCC)(CCCC)CCCC.[Br-]',\n  'Tetrabutylphosphonium Chloride': 'CCCC[P+](CCCC)(CCCC)CCCC.[Cl-]',\n  'Tetrabutylphosphonium Hexafluorophosphate': 'CCCC[P+](CCCC)(CCCC)CCCC.F[P-](F)(F)(F)(F)F',\n  'Tetrabutylphosphonium Hydroxide': 'CCCC[P+](CCCC)(CCCC)CCCC.[OH-]',\n  'Tetrabutylphosphonium malonate': 'CCCC[P+](CCCC)(CCCC)CCCC.CCCC[P+](CCCC)(CCCC)CCCC.O=C([O-])CC([O-])=O',\n  'Tetrabutylphosphonium Tetrafluoroborate': 'CCCC[P+](CCCC)(CCCC)CCCC.F[B-](F)(F)F',\n  Tetrabutyltin: 'CCCC[Sn](CCCC)(CCCC)CCCC',\n  Tetracyanoethylene: 'N#CC(C#N)=C(C#N)C#N',\n  Tetradecamethylcycloheptasiloxane: 'C[Si]1(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O[Si](C)(C)O1',\n  'Tetradecyltrimethylammonium Bromide': 'C[N+](C)(CCCCCCCCCCCCCC)C.[Br-]',\n  'Tetraethyl 1,4,8,11-Tetraazacyclotetradecane-1,4,8,11-tetraacetate': 'O=C(OCC)CN1CCN(CC(OCC)=O)CCCN(CC(OCC)=O)CCN(CC(OCC)=O)CCC1',\n  'Tetraethyl Orthosilicate': 'CCO[Si](OCC)(OCC)OCC',\n  'Tetraethylammonium Borohydride': 'CC[N+](CC)(CC)CC.[BH4-]',\n  'Tetraethylammonium Bromide': 'CC[N+](CC)(CC)CC.[Br-]',\n  'Tetraethylammonium Chloride': 'CC[N+](CC)(CC)CC.[Cl-]',\n  'Tetraethylammonium Fluoride Tetrahydrofluoride': 'CC[N+](CC)(CC)CC.[H]F.[H]F.[H]F.[H]F.[F-]',\n  'Tetraethylammonium Fluoride Trihydrofluoride': 'CC[N+](CC)(CC)CC.[H]F.[H]F.[H]F.[F-]',\n  'Tetraethylammonium Hydroxide': 'CC[N+](CC)(CC)CC.[OH-]',\n  'Tetraethylammonium Iodide': 'CC[N+](CC)(CC)CC.[I-]',\n  'Tetraethylammonium Nitrate': 'CC[N+](CC)(CC)CC.[O-][N+]([O-])=O',\n  'Tetraethylammonium Tetrafluoroborate': 'CC[N+](CC)(CC)CC.F[B-](F)(F)F',\n  'Tetraethylammonium Trifluoromethanesulfonate': 'CC[N+](CC)(CC)CC.O=S(C(F)(F)F)([O-])=O',\n  'Tetraethylammonium p-Toluenesulfonate': 'CC[N+](CC)(CC)CC.CC1=CC=C(S(=O)([O-])=O)C=C1',\n  Tetraethylgermane: 'CC[Ge](CC)(CC)CC',\n  'Tetraethylphosphonium Bromide': 'CC[P+](CC)(CC)CC.[Br-]',\n  'Tetraethylphosphonium Hexafluorophosphate': 'CC[P+](CC)(CC)CC.F[P-](F)(F)(F)(F)F',\n  'Tetraethylphosphonium Tetrafluoroborate': 'CC[P+](CC)(CC)CC.F[B-](F)(F)F',\n  Tetraethylsilane: 'CC[Si](CC)(CC)CC',\n  'Tetrafluoroboronic acid diethylether complex': 'F[B-](F)(F)F.CCOCC.[H+]',\n  'Tetraheptylammonium Bromide': 'CCCCCCC[N+](CCCCCCC)(CCCCCCC)CCCCCCC.[Br-]',\n  'Tetraheptylammonium Iodide': 'CCCCCCC[N+](CCCCCCC)(CCCCCCC)CCCCCCC.[I-]',\n  'Tetrahexylammonium Bromide': 'CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[Br-]',\n  'Tetrahexylammonium Hydrogen Sulfate': 'CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.O=S(O)([O-])=O',\n  'Tetrahexylammonium Hydroxide': 'CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[OH-]',\n  'Tetrahexylammonium Iodide': 'CCCCCC[N+](CCCCCC)(CCCCCC)CCCCCC.[I-]',\n  Tetrahydroxydiboron: 'OB(O)B(O)O',\n  tetrahydroxytitanium: 'O[Ti](O)(O)O',\n  'Tetraisobutyl Orthotitanate': 'CC(C)CO[Ti](OCC(C)C)(OCC(C)C)OCC(C)C',\n  'Tetraisopropyl Orthosilicate': 'CC(O[Si](OC(C)C)(OC(C)C)OC(C)C)C',\n  'Tetraisopropyl Orthotitanate': 'CC(O[Ti](OC(C)C)(OC(C)C)OC(C)C)C',\n  'Tetrakis(2,4-pentanedionato)titanium(IV)': '[O-]/C(C)=C\\\\C(C)=O.[O-]/C(C)=C\\\\C(C)=O.[O-]CCC.[O-]CCC.[Ti+4]',\n  'Tetrakis(acetonitrile)copper(I) Hexafluorophosphate': 'CC#N.CC#N.CC#N.CC#N.F[P-](F)(F)(F)(F)F.[Cu+]',\n  'Tetrakis(acetonitrile)copper(I) Tetrafluoroborate': 'CC#N.CC#N.CC#N.CC#N.F[B-](F)(F)F.[Cu+]',\n  'Tetrakis(acetonitrile)palladium(II) Bis(trifluoromethanesulfonate)': 'CC#N.CC#N.CC#N.CC#N.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Pd+2]',\n  'Tetrakis(decyl)ammonium hydroxide': 'CCCCCCCCCC[N+](CCCCCCCCCC)(CCCCCCCCCC)CCCCCCCCCC.[OH-]',\n  'Tetrakis(dimethylamino)titanium(IV)': 'CN([Ti](N(C)C)(N(C)C)N(C)C)C',\n  'Tetrakis(dimethylsilyl)silane': 'C[SiH]([Si]([SiH](C)C)([SiH](C)C)[SiH](C)C)C',\n  'Tetrakis(dimethylsilyloxy)silane': 'C[SiH](O[Si](O[SiH](C)C)(O[SiH](C)C)O[SiH](C)C)C',\n  'Tetrakis(hydroxymethyl)phosphonium Chloride': 'OC[P+](CO)(CO)CO.[Cl-]',\n  'Tetrakis(hydroxymethyl)phosphonium Sulfate': 'OC[P+](CO)(CO)CO.OC[P+](CO)(CO)CO.O=S([O-])([O-])=O',\n  'Tetrakis(trimethylsilyl)silane': 'C[Si]([Si]([Si](C)(C)C)([Si](C)(C)C)[Si](C)(C)C)(C)C',\n  'Tetrakis(triphenylphosphine)palladium(0)': 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9.P(C%10=CC=CC=C%10)(C%11=CC=CC=C%11)C%12=CC=CC=C%12.[Pd]',\n  Tetrakis: 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9.P(C%10=CC=CC=C%10)(C%11=CC=CC=C%11)C%12=CC=CC=C%12.[Pd]',\n  'Pd(Ph3)4': 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9.P(C%10=CC=CC=C%10)(C%11=CC=CC=C%11)C%12=CC=CC=C%12.[Pd]',\n  'Tetrakis[dimethyl(vinyl)silyl] Orthosilicate': 'C=C[Si](O[Si](O[Si](C)(C)C=C)(O[Si](C)(C)C=C)O[Si](C)(C)C=C)(C)C',\n  'Tetramethylammonium Acetate': 'C[N+](C)(C)C.CC([O-])=O',\n  'Tetramethylammonium Borohydride': 'C[N+](C)(C)C.[BH4-]',\n  'Tetramethylammonium Bromide': 'C[N+](C)(C)C.[Br-]',\n  'Tetramethylammonium Chloride': 'C[N+](C)(C)C.[Cl-]',\n  'Tetramethylammonium Dichloroiodate': 'C[N+](C)(C)C.Cl[I-]Cl',\n  'Tetramethylammonium Fluoride Tetrahydrate': 'C[N+](C)(C)C.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[F-]',\n  'Tetramethylammonium Hexafluorophosphate': 'C[N+](C)(C)C.F[P-](F)(F)(F)(F)F',\n  'Tetramethylammonium Hydroxide': 'C[N+](C)(C)C.[OH-]',\n  'Tetramethylammonium Iodide': 'C[N+](C)(C)C.[I-]',\n  'Tetramethylammonium Sulfate': 'C[N+](C)(C)C.C[N+](C)(C)C.O=S([O-])([O-])=O',\n  'Tetramethylammonium Tetrafluoroborate': 'C[N+](C)(C)C.F[B-](F)(F)F',\n  'Tetramethylammonium Triacetoxyborohydride': 'C[N+](C)(C)C.O=C(O[BH-](OC(C)=O)OC(C)=O)C',\n  'Tetramethylethylenediamine (TMEDA)': 'CN(C)CCN(C)C',\n  Tetramethylgermane: 'C[Ge](C)(C)C',\n  Tetramethylsilane: 'C[Si](C)(C)C',\n  TMS: 'C[Si](C)(C)C',\n  'Tetra-n-octylammonium Bromide': 'CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Br-]',\n  'Tetra-n-octylammonium Iodide': 'CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[I-]',\n  'Tetra-n-octylphosphonium Bromide': 'CCCCCCCC[P+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Br-]',\n  'Tetraoctylammonium hydroxide': 'CCCCCCCC[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[OH-]',\n  'Tetrapentylammonium hydroxide': 'CCCCC[N+](CCCCC)(CCCCC)CCCCC.[OH-]',\n  'Tetraphenyl Lead': 'C1([Pb](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1',\n  'Tetraphenylarsonium Chloride Hydrochloride Hydrate': '[H]O[H].[H]Cl.C1([As+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1.[Cl-]',\n  Tetraphenylcyclopentadienone: 'O=C1C(C2=CC=CC=C2)=C(C3=CC=CC=C3)C(C4=CC=CC=C4)=C1C5=CC=CC=C5',\n  Tetraphenylgermane: 'C1([Ge](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1',\n  'Tetraphenylphosphonium Bromide': 'C1([P+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1.[Br-]',\n  'Tetraphenylphosphonium Chloride': 'C1([P+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1.[Cl-]',\n  Tetraphenylporphyrin: 'C1(C2=CC=CC=C2)=C3C=CC(C(C4=CC=CC=C4)=C5C=CC(N5)=C(C6=CC=CC=C6)C(C=C7)=NC7=C(C8=CC=CC=C8)C9=CC=C1N9)=N3',\n  Tetraphenylsilane: 'C1([Si](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1',\n  Tetraphenyltin: 'C1([Sn](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)=CC=CC=C1',\n  'Tetrapropyl Orthosilicate': 'CCCO[Si](OCCC)(OCCC)OCCC',\n  'Tetrapropylammonium Bromide': 'CCC[N+](CCC)(CCC)CCC.[Br-]',\n  'Tetrapropylammonium Chloride': 'CCC[N+](CCC)(CCC)CCC.[Cl-]',\n  'Tetrapropylammonium Hydroxide': 'CCC[N+](CCC)(CCC)CCC.[OH-]',\n  'Tetrapropylammonium Iodide': 'CCC[N+](CCC)(CCC)CCC.[I-]',\n  'Tetrapropylammonium Perruthenate': 'CCC[N+](CCC)(CCC)CCC.O=[Ru](=O)([O-])=O',\n  'Thallium(III) Trifluoroacetate': 'O=C([O-])C(F)(F)F.O=C([O-])C(F)(F)F.O=C([O-])C(F)(F)F.[Tl+3]',\n  THF: 'C1CCCO1',\n  'Thioacetic Acid': 'CC(O)=S',\n  'Thioglycolic Acid': 'SCC(O)=O',\n  'Thionyl Chloride': 'O=S(Cl)Cl',\n  'Thiophosphoryl Chloride': 'OP(O)(Cl)=S',\n  Thulium: '[Tm]',\n  'Thulium(III) Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Tm+3]',\n  'tin hydroxide': '[Sn+4].[OH-].[OH-].[OH-].[OH-]',\n  'Tin(II) 2-Ethylhexanoate': 'CCCCC(CC)C([O-])=O.CCCCC(CC)C([O-])=O.[Sn+2]',\n  'Tin(II) Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Sn+2]',\n  'Tin(IV) Chloride': '[Sn+4].[Cl-].[Cl-].[Cl-].[Cl-]',\n  Titanium: '[Ti]',\n  'titanium hydroxide': '[Ti+4].[OH-].[OH-].[OH-].[OH-]',\n  'Titanium(IV) Chloride': '[Ti+4].[Cl-].[Cl-].[Cl-].[Cl-]',\n  'TMS-Imidazole (=N-Trimethylsilylimidazole)': 'C[Si](N1C=NC=C1)(C)C',\n  toluene: 'CC1=CC=CC=C1',\n  'trans,trans-1,5-Bis(4-fluorophenyl)-1,4-pentadien-3-one': 'O=C(/C=C/C1=CC=C(F)C=C1)/C=C/C2=CC=C(F)C=C2',\n  'trans,trans-1,5-Bis(4-methoxyphenyl)-1,4-pentadien-3-one': 'O=C(/C=C/C1=CC=C(OC)C=C1)/C=C/C2=CC=C(OC)C=C2',\n  'trans,trans-1,5-Bis[4-(trifluoromethyl)phenyl]-1,4-pentadien-3-one': 'O=C(/C=C/C1=CC=C(C(F)(F)F)C=C1)/C=C/C2=CC=C(C(F)(F)F)C=C2',\n  'trans,trans-1,5-Diphenyl-1,4-pentadien-3-one': 'O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2',\n  'trans-1,2-Bis(diphenylphosphino)ethylene': 'P(/C=C/P(C1=CC=CC=C1)C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4',\n  'trans-2,6-Diisopropyl-N-(2-pyridylmethylene)aniline': 'CC(C1=C(C(C(C)C)=CC=C1)/N=C/C2=NC=CC=C2)C',\n  'trans-2-Butene-1,4-bis(triphenylphosphonium Chloride)': 'C1([P+](C/C=C/C[P+](C2=CC=CC=C2)(C3=CC=CC=C3)C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)=CC=CC=C1.[Cl-].[Cl-]',\n  'trans-4-(tert-Butyldiphenylsilyloxy)-L-proline': 'O=C(O)[C@H]1NC[C@H](O[Si](C2=CC=CC=C2)(C(C)(C)C)C3=CC=CC=C3)C1',\n  'trans-4-Fluoro-L-proline': 'O=C(O)[C@H]1NC[C@H](F)C1',\n  'Tri(2-furyl)phosphine': 'P(C1=CC=CO1)(C2=CC=CO2)C3=CC=CO3',\n  'Tri(2-thienyl)phosphine': 'P(C1=CC=CS1)(C2=CC=CS2)C3=CC=CS3',\n  'Tri(cyclohexa-2,5-dien-1-yl)silane': '[SiH](C1C=CCC=C1)(C2C=CCC=C2)C3C=CCC=C3',\n  'Tri(m-tolyl)phosphine': 'CC1=CC(P(C2=CC=CC(C)=C2)C3=CC=CC(C)=C3)=CC=C1',\n  'Tri(o-tolyl)phosphine': 'CC1=CC=CC=C1P(C2=CC=CC=C2C)C3=CC=CC=C3C',\n  'Tri(p-tolyl)phosphine': 'CC1=CC=C(P(C2=CC=C(C)C=C2)C3=CC=C(C)C=C3)C=C1',\n  Triacetoxyborohydride: 'O=C(O[BH-](OC(C)=O)OC(C)=O)C',\n  Triacetoxyethylsilane: 'CC[Si](OC(C)=O)(OC(C)=O)OC(C)=O',\n  'Triallyl(methyl)silane': 'C[Si](CC=C)(CC=C)CC=C',\n  'Triallyl(phenyl)silane': 'C=CC[Si](CC=C)(CC=C)C1=CC=CC=C1',\n  Tribenzylsilane: '[SiH](CC1=CC=CC=C1)(CC2=CC=CC=C2)CC3=CC=CC=C3',\n  'Tribromoacetic Acid': 'O=C(O)C(Br)(Br)Br',\n  'Tributyl borate': 'B(OCCCC)(OCCCC)OCCCC',\n  'Tributyl(2-methoxyethyl)phosphonium Bis(trifluoromethanesulfonyl)imide': 'CCCC[P+](CCCC)(CCCC)CCOC.FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F',\n  'Tributyl(cyanomethyl)phosphonium Chloride': 'N#CC[P+](CCCC)(CCCC)CCCC.[Cl-]',\n  'Tributyl(ethyl)phosphonium Diethyl Phosphate': 'CC[P+](CCCC)(CCCC)CCCC.O=P(OCC)([O-])OCC',\n  'Tributyl(methyl)ammonium Dicyanamide': '[H]C(C([H])([H])C([H])([H])C([H])([H])[H])([H])[N+](C([H])([H])C([H])([H])C([H])([H])C([H])([H])[H])(C([H])([H])[H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])[H].[N-]=C=NC#N',\n  Tributylamine: 'CCCCN(CCCC)CCCC',\n  Tributylchlorosilane: 'Cl[Si](CCCC)(CCCC)CCCC',\n  'Tributyldodecylphosphonium Bromide': 'CCCCCCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]',\n  'Tributylhexadecylphosphonium Bromide': 'CCCCCCCCCCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]',\n  'Tributylmethylammonium Bis(trifluoromethanesulfonyl)imide': 'FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F.C[N+](CCCC)(CCCC)CCCC',\n  'Tributylmethylammonium Chloride': 'C[N+](CCCC)(CCCC)CCCC.[Cl-]',\n  'Tributylmethylphosphonium Bis(trifluoromethanesulfonyl)imide': 'C[P+](CCCC)(CCCC)CCCC.FC(F)(S([N-]S(C(F)(F)F)(=O)=O)(=O)=O)F',\n  'Tributylmethylphosphonium Iodide': 'C[P+](CCCC)(CCCC)CCCC.[I-]',\n  'Tributyl-n-octylphosphonium Bromide': 'CCCCCCCC[P+](CCCC)(CCCC)CCCC.[Br-]',\n  'Tributylphosphine Oxide': 'CCCCP(CCCC)(CCCC)=O',\n  Tributylsilane: 'CCCC[SiH](CCCC)CCCC',\n  'Tributylsulfonium Iodide': 'CCCC[S+](CCCC)CCCC.[I-]',\n  'Tricarbonyl(cyclooctatetraene)iron': '[C]=O.[C]=O.[C]=O.[Fe].C1=C\\\\C=C/C=C\\\\C=C/1',\n  'Trichloro(3,3,3-trifluoropropyl)silane': 'FC(F)(F)CC[Si](Cl)(Cl)Cl',\n  'Trichloro-2-cyanoethylsilane': 'N#CCC[Si](Cl)(Cl)Cl',\n  'Trichloroacetic Acid': 'O=C(O)C(Cl)(Cl)Cl',\n  Trichlorocyclopentylsilane: 'Cl[Si](Cl)(Cl)C1CCCC1',\n  'Trichloroisocyanuric Acid': 'O=C(N(Cl)C(N1Cl)=O)N(Cl)C1=O',\n  'Trichloromethanesulfonyl Chloride': 'O=S(C(Cl)(Cl)Cl)(Cl)=O',\n  Tricyclohexylphosphine: 'P(C1CCCCC1)(C2CCCCC2)C3CCCCC3',\n  'Tricyclohexylphosphonium Tetrafluoroborate': 'F[B-](F)(F)F.[PH+](C1CCCCC1)(C2CCCCC2)C3CCCCC3',\n  'Triethoxy(3-glycidyloxypropyl)silane': 'CCO[Si](OCC)(OCC)CCCOCC1CO1',\n  'Triethoxy(pentafluorophenyl)silane': 'FC1=C(F)C(F)=C(F)C(F)=C1[Si](OCC)(OCC)OCC',\n  'Triethoxy(propyl)silane': 'CCC[Si](OCC)(OCC)OCC',\n  'Triethoxy[2-(7-oxabicyclo[4.1.0]heptan-3-yl)ethyl]silane': 'CCO[Si](OCC)(OCC)CCC1CC2OC2CC1',\n  'Triethoxy-1H,1H,2H,2H-tridecafluoro-n-octylsilane': 'F[SiH2]C(F)(F)CC(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(OCC)(OCC)OCC',\n  Triethoxyethylsilane: 'CC[Si](OCC)(OCC)OCC',\n  Triethoxyfluorosilane: 'F[Si](OCC)(OCC)OCC',\n  Triethoxymethylsilane: 'C[Si](OCC)(OCC)OCC',\n  'Triethoxy-n-octylsilane': 'CCCCCCCC[Si](OCC)(OCC)OCC',\n  Triethoxyphenylsilane: 'CCO[Si](OCC)(OCC)C1=CC=CC=C1',\n  Triethoxyvinylsilane: 'C=C[Si](OCC)(OCC)OCC',\n  'Triethyl 2-Fluoro-2-phosphonoacetate': 'O=C(OCC)C(F)P(OCC)(OCC)=O',\n  'Triethyl(trifluoromethyl)silane': 'FC([Si](CC)(CC)CC)(F)F',\n  Triethylamine: 'CCN(CC)CC',\n  'Triethylamine Borane': 'CCN(CC)CC.B',\n  'Triethylamine Trihydrofluoride': 'CCN(CC)CC.[H]F.[H]F.[H]F',\n  Triethylchlorogermane: 'Cl[Ge](CC)(CC)CC',\n  Triethylenetetramine: 'NCCNCCNCCN',\n  'Triethylmethylammonium Chloride': 'C[N+](CC)(CC)CC.[Cl-]',\n  'Triethylmethylammonium hydroxide': 'C[N+](CC)(CC)CC.[OH-]',\n  'Triethylphenylammonium Chloride': 'CC[N+](CC)(CC)C1=CC=CC=C1.[Cl-]',\n  Triethylsilane: 'CC[SiH](CC)CC',\n  TES: 'CC[SiH](CC)CC',\n  Triethylsilanol: 'O[Si](CC)(CC)CC',\n  Triethylsilylacetylene: 'C#C[Si](CC)(CC)CC',\n  'Triethylsulfonium Bis(trifluoromethanesulfonyl)imide': 'O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O.CC[S+](CC)CC',\n  Triethylvinylsilane: 'C=C[Si](CC)(CC)CC',\n  'Trifluoroacetic Acid': 'O=C(O)C(F)(F)F',\n  TFA: 'O=C(O)C(F)(F)F',\n  'Trifluoroacetic Anhydride': 'O=C(OC(C(F)(F)F)=O)C(F)(F)F',\n  TFAA: 'O=C(OC(C(F)(F)F)=O)C(F)(F)F',\n  'Trifluoroacetyl Triflate': 'O=S(OC(C(F)(F)F)=O)(C(F)(F)F)=O',\n  Trifluoroacetylacetone: 'O=C(CC(C)=O)C(F)(F)F',\n  'Trifluoroboronic acid diethyletherate': 'FB(F)F.CCOCC',\n  Trifluoromethanesulfonanilide: 'O=S(C(F)(F)F)(NC1=CC=CC=C1)=O',\n  'Trifluoromethanesulfonic Acid': 'O=S(C(F)(F)F)(O)=O',\n  'Trifluoromethanesulfonic Anhydride': 'O=S(C(F)(F)F)(OS(C(F)(F)F)(=O)=O)=O',\n  'Trifluoromethanesulfonyl Chloride': 'O=S(C(F)(F)F)(Cl)=O',\n  'Trihexyl(tetradecyl)phosphonium Chloride': 'CCCCCCCCCCCCCC[P+](CCCCCC)(CCCCCC)CCCCCC.[Cl-]',\n  'Trihexyl(tetradecyl)phosphonium Dicyanamide': 'CCCCCC[P+](CCCCCC)(CCCCCC)CCCCCCCCCCCCCC.N#C[N-]C#N',\n  Trihexylphosphine: 'CCCCCCP(CCCCCC)CCCCCC',\n  Trihexylsilane: 'CCCCCC[SiH](CCCCCC)CCCCCC',\n  'Triisopropyl[(trimethylsilyl)ethynyl]silane': 'C[Si](C#C[Si](C(C)C)(C(C)C)C(C)C)(C)C',\n  Triisopropylsilane: 'CC([SiH](C(C)C)C(C)C)C',\n  Triisopropylsilylacetylene: 'C#C[Si](C(C)C)(C(C)C)C(C)C',\n  'Trimagnesium Dicitrate Nonahydrate': 'OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.OC(C([O-])=O)(CC([O-])=O)CC([O-])=O.[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[Mg+2].[Mg+2].[Mg+2]',\n  'Trimethoxy(1H,1H,2H,2H-tridecafluoro-n-octyl)silane': 'FC(C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F)(F)CC[Si](OC)(OC)OC',\n  'Trimethoxy(2-phenylethyl)silane': 'CO[Si](OC)(OC)CCC1=CC=CC=C1',\n  'Trimethoxy(3,3,3-trifluoropropyl)silane': 'FC(F)(F)CC[Si](OC)(OC)OC',\n  'Trimethoxy(4-methoxyphenyl)silane': 'COC1=CC=C([Si](OC)(OC)OC)C=C1',\n  'Trimethoxy(methyl)silane': 'C[Si](OC)(OC)OC',\n  'Trimethoxy(phenylethyl)silane': 'CO[Si](OC)(OC)CCC1=CC=CC=C1',\n  'Trimethoxy(propyl)silane': 'CCC[Si](OC)(OC)OC',\n  'Trimethoxy[3-(methylamino)propyl]silane': 'CNCCC[Si](OC)(OC)OC',\n  'Trimethoxy[3-(phenylamino)propyl]silane': 'CO[Si](OC)(OC)CCCNC1=CC=CC=C1',\n  'Trimethoxy-n-octylsilane': 'CCCCCCCC[Si](OC)(OC)OC',\n  Trimethoxyphenylsilane: 'CO[Si](OC)(OC)C1=CC=CC=C1',\n  \"Trimethyl 2,2':6',2''-Terpyridine-4,4',4''-tricarboxylate\": 'O=C(C1=CC(C2=NC(C3=NC=CC(C(OC)=O)=C3)=CC(C(OC)=O)=C2)=NC=C1)OC',\n  'Trimethyl(2-pyridyl)tin': 'C[Sn](C)(C)C1=NC=CC=C1',\n  'Trimethyl(4-pyridyl)tin': 'C[Sn](C)(C)C1=CC=NC=C1',\n  'Trimethyl(heptafluoropropyl)silane': 'FC([Si](C)(C)C)(F)C(F)(F)C(F)(F)F',\n  'Trimethyl(nonafluorobutyl)silane': 'FC([Si](C)(C)C)(F)C(F)(F)C(F)(F)C(F)(F)F',\n  'Trimethyl(pentafluoroethyl)silane': 'FC([Si](C)(C)C)(F)C(F)(F)F',\n  'Trimethyl(pentafluorophenyl)silane': 'FC1=C(F)C(F)=C(F)C(F)=C1[Si](C)(C)C',\n  'Trimethyl(tridecafluorohexyl)silane': 'FC([Si](C)(C)C)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F',\n  'Trimethyl[2-[(trimethylsilyl)methyl]benzyl]ammonium Iodide': 'C[Si](CC1=CC=CC=C1C[N+](C)(C)C)(C)C.[I-]',\n  'Trimethyl[3-(trimethoxysilyl)propyl]ammonium Chloride': 'CO[Si](CCC[N+](C)(C)C)(OC)OC.[Cl-]',\n  'Trimethylamine Borane': 'CN(C)C.B',\n  'Trimethylamine N-Oxide': 'C[N+](C)([O-])C',\n  'Trimethylamine N-Oxide Dihydrate': 'C[N+](C)([O-])C.[H]O[H].[H]O[H]',\n  Trimethylchlorogermane: 'Cl[Ge](C)(C)C',\n  Trimethylethoxysilane: 'CCO[Si](C)(C)C',\n  'Trimethylnonylammonium Bromide': 'CCCCCCCCC[N+](C)(C)C.[Br-]',\n  'Trimethylphenylammonium Bromide': 'C[N+](C)(C)C1=CC=CC=C1.[Br-]',\n  'Trimethylphenylammonium Chloride': 'C[N+](C)(C)C1=CC=CC=C1.[Cl-]',\n  'Trimethylphenylammonium Hydroxide': 'C[N+](C)(C)C1=CC=CC=C1.[OH-]',\n  'Trimethylphenylammonium Tribromide': 'C[N+](C)(C)C1=CC=CC=C1.[Br-].[Br-].[Br-]',\n  Trimethylphenylsilane: 'C[Si](C)(C)C1=CC=CC=C1',\n  Trimethylphosphine: 'CP(C)C',\n  'Trimethylpropylammonium Bis(trifluoromethanesulfonyl)imide': 'CCC[N+](C)(C)C.O=S([N-]S(C(F)(F)F)(=O)=O)(C(F)(F)F)=O',\n  'Trimethylpropylammonium Bromide': 'CCC[N+](C)(C)C.[Br-]',\n  'Trimethylsilyl Chloride': 'C[Si](C)(Cl)C',\n  TMSCl: 'C[Si](C)(Cl)C',\n  'TMS-chloride': 'C[Si](C)(Cl)C',\n  'Trimethylsilyl Azide': 'C[Si](C)(N=[N+]=[N-])C',\n  'TMS-Azide': 'C[Si](C)(N=[N+]=[N-])C',\n  TMSA: 'C[Si](C)(N=[N+]=[N-])C',\n  TMSN3: 'C[Si](C)(N=[N+]=[N-])C',\n  'Trimethylsilyl Acetate': 'CC(O[Si](C)(C)C)=O',\n  'Trimethylsilyl Difluoro(fluorosulfonyl)acetate': 'O=C(O[Si](C)(C)C)C(F)(F)S(=O)(F)=O',\n  'Trimethylsilyl Propionate': 'CCC(O[Si](C)(C)C)=O',\n  'Trimethylsilyl Trifluoroacetate': 'O=C(O[Si](C)(C)C)C(F)(F)F',\n  Trimethylsilylacetylene: 'C#C[Si](C)(C)C',\n  Trimethylsilylcyclopentadiene: 'C[Si](C1=CC=CC1)(C)C',\n  'Trimethylsilylketene Ethyl Trimethylsilyl Acetal': 'C[Si](/C=C(OCC)/O[Si](C)(C)C)(C)C',\n  'Trimethylsilylmethylmagnesium Chloride': 'Cl[Mg]C[Si](C)(C)C',\n  'Trimethylstearylammonium Bromide': 'CCCCCCCCCCCCCCCCCC[N+](C)(C)C.[Br-]',\n  'Trimethylsulfonium Iodide': 'C[S+](C)C.[I-]',\n  'Trimethyltetradecylammonium Chloride': 'CCCCCCCCCCCCCC[N+](C)(C)C.[Cl-]',\n  'Trimethyltin Chloride': 'C[Sn](C)(Cl)C',\n  'Tri-n-octylphosphine': 'CCCCCCCCP(CCCCCCCC)CCCCCCCC',\n  'Tri-n-octylphosphine Oxide': 'CCCCCCCCP(CCCCCCCC)(CCCCCCCC)=O',\n  'Trioctylmethylammonium Chloride': 'C[N+](CCCCCCCC)(CCCCCCCC)CCCCCCCC.[Cl-]',\n  'Triphenyl Phosphite': 'P(OC1=CC=CC=C1)(OC2=CC=CC=C2)OC3=CC=CC=C3',\n  Triphenylantimony: '[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  'Triphenylantimony Diacetate': 'CC(O)=O.CC(O)=O.[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  'Triphenylantimony Dichloride': 'Cl[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)(Cl)C3=CC=CC=C3',\n  'Triphenylantimony Oxide': 'O=[Sb](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  Triphenylarsine: '[As](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  Triphenylchlorogermane: 'Cl[Ge](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  Triphenylphosphine: 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  'Triphenylphosphine Borane': 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.B',\n  'Triphenylphosphine Oxide': 'O=P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  'Triphenylphosphine Selenide': '[Se]=P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  Triphenylsilane: '[SiH](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  Triphenylsilanol: 'O[Si](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  Triphenylvinylsilane: 'C=C[Si](C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3',\n  Triphosgene: 'ClC(Cl)(OC(OC(Cl)(Cl)Cl)=O)Cl',\n  'Tris(1-pyrazolyl)methane': 'C(N1N=CC=C1)(N2N=CC=C2)N3N=CC=C3',\n  \"Tris(2,2'-bipyridyl)ruthenium(II) Chloride Hexahydrate\": '[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].[H]O[H].C1(C2=NC=CC=C2)=NC=CC=C1.C3(C4=NC=CC=C4)=NC=CC=C3.C5(C6=NC=CC=C6)=NC=CC=C5.[Ru+2].[Cl-].[Cl-]',\n  'Tris(2,4-di-tert-butylphenyl) Phosphite': 'CC(C1=CC=C(OP(OC2=CC=C(C(C)(C)C)C=C2C(C)(C)C)OC3=CC=C(C(C)(C)C)C=C3C(C)(C)C)C(C(C)(C)C)=C1)(C)C',\n  'Tris(2,4-pentanedionato)cobalt(III)': 'CC(/C=C(C)\\\\[O-])=O.[O-]/C(C)=C\\\\C(C)=O.[O-]/C(C)=C\\\\C(C)=O.[Co+3]',\n  'Tris(2,4-pentanedionato)iron(III)': '[O-]/C(C)=C\\\\C(C)=O.[O-]/C(C)=C\\\\C(C)=O.[O-]/C(C)=C\\\\C(C)=O.[Fe+3]',\n  'Tris(2,4-pentanedionato)manganese(III)': 'CC(/C=C(C)\\\\[O-])=O.[O-]/C(C)=C\\\\C(C)=O.[O-]/C(C)=C\\\\C(C)=O.[Mn+3]',\n  'Tris(2,6-dimethoxyphenyl)phosphine': 'COC1=C(P(C2=C(OC)C=CC=C2OC)C3=C(OC)C=CC=C3OC)C(OC)=CC=C1',\n  'Tris(2-aminoethyl)amine': 'NCCN(CCN)CCN',\n  'Tris(2-benzimidazolylmethyl)amine': 'N(CC1=NC2=CC=CC=C2N1)(CC3=NC4=CC=CC=C4N3)CC5=NC6=CC=CC=C6N5',\n  'Tris(2-carboxyethyl)phosphine Hydrochloride': 'O=C(CCP(CCC(O)=O)CCC(O)=O)O.[H]Cl',\n  'Tris(2-methoxyphenyl)phosphine': 'COC1=CC=CC=C1P(C2=CC=CC=C2OC)C3=CC=CC=C3OC',\n  'Tris(2-phenylpyridinato)iridium(III)': 'C1(C2=CC=CC=C2)=NC=CC=C1.C3(C4=CC=CC=C4)=NC=CC=C3.C5(C6=CC=CC=C6)=NC=CC=C5.[Ir]',\n  'Tris(2-pyridylmethyl)amine': 'N(CC1=NC=CC=C1)(CC2=NC=CC=C2)CC3=NC=CC=C3',\n  'Tris(3,5-dimethyl-1-pyrazolyl)methane': 'CC1=CC(C)=NN1C(N2N=C(C)C=C2C)N3N=C(C)C=C3C',\n  'Tris(3-hydroxypropyltriazolylmethyl)amine': 'OCCCC(N(C(CCCO)C1=CNN=N1)C(CCCO)C2=CNN=N2)C3=CNN=N3',\n  'Tris(4-fluorophenyl)phosphine': 'FC1=CC=C(P(C2=CC=C(F)C=C2)C3=CC=C(F)C=C3)C=C1',\n  'Tris(4-methoxyphenyl)phosphine': 'COC1=CC=C(P(C2=CC=C(OC)C=C2)C3=CC=C(OC)C=C3)C=C1',\n  'Tris(dibenzoylmethanato) Iron': '[O-]/C(C1=CC=CC=C1)=C\\\\C(C2=CC=CC=C2)=O.[O-]/C(C3=CC=CC=C3)=C\\\\C(C4=CC=CC=C4)=O.[O-]/C(C5=CC=CC=C5)=C\\\\C(C6=CC=CC=C6)=O.[Fe+3]',\n  'Tris(dibenzylideneacetone)dipalladium(0)': 'O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2.O=C(/C=C/C3=CC=CC=C3)/C=C/C4=CC=CC=C4.O=C(/C=C/C5=CC=CC=C5)/C=C/C6=CC=CC=C6.[Pd].[Pd]',\n  'Pd2(dba)3': 'O=C(/C=C/C1=CC=CC=C1)/C=C/C2=CC=CC=C2.O=C(/C=C/C3=CC=CC=C3)/C=C/C4=CC=CC=C4.O=C(/C=C/C5=CC=CC=C5)/C=C/C6=CC=CC=C6.[Pd].[Pd]',\n  'Tris(diethylamino)phosphine': 'CCN(P(N(CC)CC)N(CC)CC)CC',\n  'Tris(hydroxymethyl)aminomethane': 'NC(CO)(CO)CO',\n  'Tris(pentafluorophenyl)phosphine': 'FC1=C(F)C(F)=C(F)C(F)=C1P(C2=C(F)C(F)=C(F)C(F)=C2F)C3=C(F)C(F)=C(F)C(F)=C3F',\n  'Tris(trimethylsilyloxy)silane': 'C[Si](O[SiH](O[Si](C)(C)C)O[Si](C)(C)C)(C)C',\n  'Tris(triphenylphosphine)rhodium(I) Chloride': 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9.[Rh+].[Cl-]',\n  'Tris(triphenylphosphine)ruthenium(II) Dichloride': 'P(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3.P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6.P(C7=CC=CC=C7)(C8=CC=CC=C8)C9=CC=CC=C9.[Ru+2].[Cl-].[Cl-]',\n  'Tris[(1-benzyl-1H-1,2,3-triazol-4-yl)methyl]amine': 'N(CC1=CN(CC2=CC=CC=C2)N=N1)(CC3=CN(CC4=CC=CC=C4)N=N3)CC5=CN(CC6=CC=CC=C6)N=N5',\n  'Tris[2-(dimethylamino)ethyl]amine': 'CN(CCN(CCN(C)C)CCN(C)C)C',\n  'Tris[3,5-bis(trifluoromethyl)phenyl]phosphine': 'FC(C1=CC(C(F)(F)F)=CC(P(C2=CC(C(F)(F)F)=CC(C(F)(F)F)=C2)C3=CC(C(F)(F)F)=CC(C(F)(F)F)=C3)=C1)(F)F',\n  'Trisodium Paraperiodate': 'O=I([O-])([O-])(O)(O)[O-].[Na+].[Na+].[Na+]',\n  'Tri-tert-butyl 1,4,7,10-Tetraazacyclododecane-1,4,7,10-tetraacetate': 'O=C(OC(C)(C)C)CN1CCN(CC(OC(C)(C)C)=O)CCN(CC(OC(C)(C)C)=O)CCN(CC([O-])=O)CC1',\n  'Tri-tert-butyl 1,4,7,10-Tetraazacyclododecane-1,4,7-triacetate': 'O=C(OC(C)(C)C)CN1CCN(CC(OC(C)(C)C)=O)CCN(CC(OC(C)(C)C)=O)CCNCC1',\n  'Tri-tert-butylphosphonium Tetrafluoroborate': 'CC([PH+](C(C)(C)C)C(C)(C)C)(C)C.F[B-](F)(F)F',\n  Tungsten: '[W]',\n  'Urea hydrogen peroxide': 'NC(N)=O.OO',\n  Vanadium: '[V]',\n  'Vinylmagnesium Bromide': 'Br[Mg]C=C',\n  Vinyltrimethoxysilane: 'CO[Si](OC)(C=C)OC',\n  Vinyltrimethylsilane: 'C[Si](C)(C=C)C',\n  'Vinyltris(2-methoxyethoxy)silane': 'COCCO[Si](OCCOC)(C=C)OCCOC',\n  water: '[H]O[H]',\n  Ytterbium: '[Yb]',\n  'Ytterbium(III) Trifluoromethanesulfonate Hydrate': 'O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[H]O[H].[Yb+3]',\n  Yttrium: '[Y]',\n  'Zinc Bromide': '[Zn+2].[Br-].[Br-]',\n  'Zinc Chloride': '[Zn+2].[Cl-].[Cl-]',\n  'Zinc peroxide': '[O-][O-].[Zn+2]',\n  'Zinc(II) Bis(trifluoromethanesulfinate) Dihydrate': 'O=S(C(F)(F)F)[O-].O=S(C(F)(F)F)[O-].[H]O[H].[H]O[H].[Zn+2]',\n  'Zinc(II) Trifluoromethanesulfonate': 'O=S(C(F)(F)F)([O-])=O.O=S(C(F)(F)F)([O-])=O.[Zn+2]',\n  'zink hydroxide': '[Zn+2].[OH-].[OH-]',\n  'zink stannate': 'O=[Sn]([O-])[O-].[Zn+2]',\n  Zirconium: '[Zr]',\n  'Zirconium hydroxide': '[Zr+4].[OH-].[OH-].[OH-].[OH-]',\n  'α-Methyl-L-proline': 'O=C(O)[C@@]1(C)NCCC1',\n  'β-Isocupreidine': '[H][C@@](C1([H])[H])(C([H])([H])C2([H])[H])[C@@]3(C([H])([H])C([H])([H])[H])O[C@](C4=C(C([H])=C5O[H])C(C([H])=C5[H])=NC([H])=C4[H])([H])[C@]1([H])[N@@]2C3([H])[H]',\n  'Di-tert-butyl dicarbonate': 'O=C(OC(OC(C)(C)C)=O)OC(C)(C)C',\n  Boc2O: 'O=C(OC(OC(C)(C)C)=O)OC(C)(C)C',\n  'N-(9H-Fluoren-9-ylmethoxycarbonyloxy)succinimide': 'O=C(ON(C1=O)C(CC1)=O)OCC2C(C=CC=C3)=C3C4=C2C=CC=C4',\n  'Fmoc-Osu': 'O=C(ON(C1=O)C(CC1)=O)OCC2C(C=CC=C3)=C3C4=C2C=CC=C4',\n};\n","import React, { useState, useEffect } from 'react';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nexport default function ToggleButton({\n  isToggledInitial, onToggle, onChange, onLabel, offLabel,\n  onColor, offColor, tooltipOn, tooltipOff, fontSize, fontWeight\n}) {\n  const [isToggled, setIsToggled] = useState(isToggledInitial);\n\n  const handleChange = () => {\n    const newToggledState = !isToggled;\n    setIsToggled(newToggledState);\n    if (onToggle) onToggle(newToggledState);\n    if (onChange) onChange(newToggledState);\n  };\n\n  useEffect(() => {\n    setIsToggled(isToggledInitial);\n  }, [isToggledInitial]);\n\n  const buttonColor = isToggled ? onColor : offColor;\n  const toolTipMessage = isToggled ? tooltipOn : tooltipOff;\n\n  return (\n    <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"toggle-button-tooltip\">{toolTipMessage}</Tooltip>}>\n      <Button\n        className={`toggle-button ${isToggled ? 'on' : 'off'}`}\n        size=\"xs\"\n        onClick={handleChange}\n        style={{ backgroundColor: buttonColor, minWidth: '50px', border: 'none' }}\n      >\n        <span style={{ fontSize, fontWeight }}>\n          {isToggled ? onLabel : offLabel}\n        </span>\n      </Button>\n    </OverlayTrigger>\n  );\n}\n\nToggleButton.propTypes = {\n  isToggledInitial: PropTypes.bool.isRequired,\n  onToggle: PropTypes.func,\n  onChange: PropTypes.func,\n  onLabel: PropTypes.string,\n  offLabel: PropTypes.string,\n  onColor: PropTypes.string,\n  offColor: PropTypes.string,\n  tooltipOn: PropTypes.string,\n  tooltipOff: PropTypes.string,\n  fontWeight: PropTypes.string,\n  fontSize: PropTypes.string,\n};\n\nToggleButton.defaultProps = {\n  onToggle: null,\n  onChange: null,\n  onLabel: 'On',\n  offLabel: 'Off',\n  onColor: '#afcfee',\n  offColor: '#d3d3d3',\n  tooltipOn: 'Click to switch off',\n  tooltipOff: 'Click to switch on',\n  fontWeight: 'normal',\n  fontSize: '1em',\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Glyphicon, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport VirtualizedSelect from 'react-virtualized-select';\nimport Material from 'src/apps/mydb/elements/details/reactions/schemeTab/Material';\nimport MaterialCalculations from 'src/apps/mydb/elements/details/reactions/schemeTab/MaterialCalculations';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport MoleculesFetcher from 'src/fetchers/MoleculesFetcher';\nimport Molecule from 'src/models/Molecule';\nimport Reaction from 'src/models/Reaction';\nimport { defaultMultiSolventsSmilesOptions } from 'src/components/staticDropdownOptions/options';\nimport { ionic_liquids } from 'src/components/staticDropdownOptions/ionic_liquids';\nimport { reagents_kombi } from 'src/components/staticDropdownOptions/reagents_kombi';\nimport { permitOn } from 'src/components/common/uis';\nimport HelpInfo from 'src/components/common/HelpInfo';\nimport ToggleButton from 'src/components/common/ToggleButton';\n\nconst MaterialGroup = ({\n  materials, materialGroup, deleteMaterial, onChange,\n  showLoadingColumn, reaction, addDefaultSolvent, headIndex,\n  dropMaterial, dropSample, switchEquiv, lockEquivColumn, displayYieldField,\n  switchYield\n}) => {\n  const contents = [];\n  let index = headIndex;\n  if (materials && materials.length > 0) {\n    materials.forEach((material) => {\n      index += 1;\n      contents.push((\n        <Material\n          reaction={reaction}\n          onChange={onChange}\n          key={material.id}\n          material={material}\n          materialGroup={materialGroup}\n          showLoadingColumn={showLoadingColumn}\n          deleteMaterial={m => deleteMaterial(m, materialGroup)}\n          index={index}\n          dropMaterial={dropMaterial}\n          dropSample={dropSample}\n          lockEquivColumn={lockEquivColumn}\n          displayYieldField={displayYieldField}\n        />\n      ));\n\n      if (materialGroup === 'products' &&\n        material.adjusted_loading &&\n        material.error_mass) {\n        contents.push((\n          <MaterialCalculations\n            material={material}\n            materialGroup={materialGroup}\n            index={index}\n          />\n        ));\n      }\n    });\n  }\n\n  if (materialGroup === 'solvents' ||\n    materialGroup === 'purification_solvents') {\n    return (\n      <SolventsMaterialGroup\n        contents={contents}\n        materialGroup={materialGroup}\n        reaction={reaction}\n        addDefaultSolvent={addDefaultSolvent}\n      />\n    );\n  }\n\n  return (\n    <GeneralMaterialGroup\n      contents={contents}\n      materialGroup={materialGroup}\n      showLoadingColumn={showLoadingColumn}\n      reaction={reaction}\n      addDefaultSolvent={addDefaultSolvent}\n      switchEquiv={switchEquiv}\n      lockEquivColumn={lockEquivColumn}\n      displayYieldField={displayYieldField}\n      switchYield={switchYield}\n    />\n  );\n};\n\nconst switchEquivTooltip = () => (\n  <Tooltip id=\"assign_button\">Lock/unlock Equiv <br /> for target amounts</Tooltip>\n);\n\nconst SwitchEquivButton = (lockEquivColumn, switchEquiv) => {\n  return (\n    <OverlayTrigger placement=\"top\" overlay={switchEquivTooltip()} >\n      <Button\n        id=\"lock_equiv_column_btn\"\n        bsSize=\"xsmall\"\n        bsStyle={lockEquivColumn ? 'warning' : 'default'}\n        onClick={switchEquiv}\n      >\n        <i className={lockEquivColumn ? 'fa fa-lock' : 'fa fa-unlock'} />\n      </Button>\n    </OverlayTrigger>\n  );\n};\n\nfunction GeneralMaterialGroup({\n  contents, materialGroup, showLoadingColumn, reaction, addDefaultSolvent,\n  switchEquiv, lockEquivColumn, displayYieldField, switchYield\n}) {\n  const isReactants = materialGroup === 'reactants';\n  let headers = {\n    ref: 'Ref',\n    group: 'Starting materials',\n    show_label: 'L/S',\n    tr: 'T/R',\n    mass: 'Mass',\n    reaction_coefficient: 'Coef',\n    amount: 'Amount',\n    loading: 'Loading',\n    concn: 'Conc',\n    vol: 'Vol',\n    eq: 'Equiv'\n  };\n\n  const reagentList = [];\n  let reagentDd = <span />;\n  const createReagentForReaction = (event) => {\n    const smi = event.value;\n    MoleculesFetcher.fetchBySmi(smi)\n      .then((result) => {\n        const molecule = new Molecule(result);\n        molecule.density = molecule.density || 0;\n        addDefaultSolvent(molecule, null, materialGroup, event.label);\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  };\n\n  if (isReactants) {\n    headers = { group: 'Reactants' };\n    Object.keys(reagents_kombi).forEach((x) => {\n      reagentList.push({\n        label: x,\n        value: reagents_kombi[x]\n      });\n    });\n    reagentDd = (\n      <VirtualizedSelect\n        disabled={!permitOn(reaction)}\n        className=\"reagents-select\"\n        name=\"Reagents\"\n        multi={false}\n        options={reagentList}\n        placeholder=\"Reagents\"\n        onChange={createReagentForReaction}\n      />\n    );\n  }\n\n  const yieldConversionRateFields = () => {\n    const conversionText = 'Click to switch to conversion field.'\n    + ' The conversion will not be displayed as part of the reaction scheme';\n    const yieldText = 'Click to switch to yield field.'\n    + ' The yield will be displayed as part of the reaction scheme';\n    let conversionOrYield = displayYieldField;\n    if (displayYieldField || displayYieldField === null) {\n      conversionOrYield = true;\n    }\n    return (\n      <div>\n        <ToggleButton\n          isToggledInitial={conversionOrYield}\n          onToggle={switchYield}\n          onLabel=\"Yield\"\n          offLabel=\"Conv.\"\n          onColor=\"transparent\"\n          offColor=\"transparent\"\n          tooltipOn={conversionText}\n          tooltipOff={yieldText}\n          fontSize=\"14px\"\n          fontWeight=\"bold\"\n        />\n      </div>\n    );\n  };\n\n  if (materialGroup === 'products') {\n    headers.group = 'Products';\n    headers.eq = yieldConversionRateFields();\n  }\n\n  const refTHead = (materialGroup !== 'products') ? headers.ref : null;\n  /**\n   * Add a (not yet persisted) sample to a material group\n   * of the given reaction\n   */\n  const addSampleButton = (\n    <Button\n      disabled={!permitOn(reaction)}\n      bsStyle=\"success\"\n      bsSize=\"xs\"\n      onClick={() => ElementActions.addSampleToMaterialGroup({ reaction, materialGroup })}\n    >\n      <Glyphicon glyph=\"plus\" />\n    </Button>\n  );\n\n  return (\n    <div>\n      <table width=\"100%\" className=\"reaction-scheme\">\n        <colgroup>\n          <col style={{ width: '4%' }} />\n          <col style={{ width: showLoadingColumn ? '8%' : '15%' }} />\n          <col style={{ width: '4%' }} />\n          <col style={{ width: '2%' }} />\n          <col style={{ width: '2%' }} />\n          <col style={{ width: showLoadingColumn ? '3%' : '4%' }} />\n          <col style={{ width: showLoadingColumn ? '10%' : '11%' }} />\n          {showLoadingColumn && <col style={{ width: '11%' }} />}\n          <col style={{ width: showLoadingColumn ? '10%' : '11%' }} />\n          <col style={{ width: showLoadingColumn ? '12%' : '13%' }} />\n        </colgroup>\n        <thead>\n          <tr>\n            <th>{addSampleButton}</th>\n            <th>{headers.group}</th>\n            {isReactants && <th colSpan={showLoadingColumn ? 9 : 8}>{reagentDd}</th>}\n            {!isReactants && <th>{refTHead}</th>}\n            <th>{headers.show_label}</th>\n            {!isReactants && <th style={{ padding: '2px 2px' }}>{headers.tr}</th>}\n            {!isReactants\n              && (\n                <th style={{ padding: '2px 2px' }}>\n                  <OverlayTrigger\n                    placement=\"top\"\n                    overlay={\n                      <Tooltip id=\"coefficientHeaderTitleReactionScheme\">Coefficient</Tooltip>\n                    }\n                  >\n                    <span>{headers.reaction_coefficient}</span>\n                  </OverlayTrigger>\n                </th>\n              )}\n            {!isReactants && <th>{headers.amount}</th>}\n            {!isReactants && <th />}\n            {!isReactants && <th />}\n            {showLoadingColumn && !isReactants && <th>{headers.loading}</th>}\n            {!isReactants && <th>{headers.concn}</th>}\n            {!isReactants && <th>{headers.eq} {!isReactants && materialGroup !== 'products' && SwitchEquivButton(lockEquivColumn, switchEquiv)}</th> }\n          </tr>\n        </thead>\n        {contents.map(item => item)}\n      </table>\n    </div>\n  );\n}\n\n\nconst SolventsMaterialGroup = ({\n  contents, materialGroup, reaction, addDefaultSolvent\n}) => {\n  const addSampleButton = (\n    <Button\n      disabled={!permitOn(reaction)}\n      bsStyle=\"success\"\n      bsSize=\"xs\"\n      onClick={() => ElementActions.addSampleToMaterialGroup({ reaction, materialGroup })}\n    >\n      <Glyphicon glyph=\"plus\" />\n    </Button>\n  );\n\n  const createDefaultSolventsForReaction = (event) => {\n    const solvent = event.value;\n    // MoleculesFetcher.fetchByMolfile(solvent.molfile)\n    const smi = solvent.smiles;\n    MoleculesFetcher.fetchBySmi(smi)\n      .then((result) => {\n        const molecule = new Molecule(result);\n        const d = molecule.density;\n        const solventDensity = solvent.density || 1;\n        molecule.density = (d && d > 0) || solventDensity;\n        addDefaultSolvent(molecule, null, materialGroup, solvent.external_label);\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  };\n\n  const solventOptions = Object.keys(ionic_liquids).reduce(\n    (solvents, ionicLiquid) => solvents.concat({\n      label: ionicLiquid,\n      value: {\n        external_label: ionicLiquid,\n        smiles: ionic_liquids[ionicLiquid],\n        density: 1.0,\n        drySolvent: false\n      }\n    }), defaultMultiSolventsSmilesOptions\n  );\n\n  return (\n    <div>\n      <table width=\"100%\" className=\"reaction-scheme\">\n        <thead>\n          <tr>\n            <th width=\"4%\">{addSampleButton}</th>\n            <th width=\"21%\" style={{ paddingRight: '10px' }}>\n              <VirtualizedSelect\n                disabled={!permitOn(reaction)}\n                className=\"solvents-select\"\n                name=\"default solvents\"\n                multi={false}\n                options={solventOptions}\n                placeholder=\"Default solvents\"\n                onChange={createDefaultSolventsForReaction}\n              />\n            </th>\n            <th width=\"2%\" title=\"Dry Solvent\">DS</th>\n            <th width=\"4%\">T/R</th>\n            <th width=\"24%\">Label</th>\n            <th width=\"13%\">Vol</th>\n            <th width=\"13%\">Vol ratio</th>\n            <th width=\"3%\" />\n          </tr>\n        </thead>\n        <tbody>\n          {contents.map(item => item)}\n        </tbody>\n      </table>\n    </div>\n  );\n};\n\nMaterialGroup.propTypes = {\n  materialGroup: PropTypes.string.isRequired,\n  headIndex: PropTypes.number.isRequired,\n  materials: PropTypes.arrayOf(PropTypes.shape).isRequired,\n  deleteMaterial: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  showLoadingColumn: PropTypes.bool,\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n  addDefaultSolvent: PropTypes.func.isRequired,\n  dropMaterial: PropTypes.func.isRequired,\n  dropSample: PropTypes.func.isRequired,\n  switchEquiv: PropTypes.func.isRequired,\n  lockEquivColumn: PropTypes.bool,\n  displayYieldField: PropTypes.bool,\n  switchYield: PropTypes.func.isRequired\n};\n\nGeneralMaterialGroup.propTypes = {\n  materialGroup: PropTypes.string.isRequired,\n  showLoadingColumn: PropTypes.bool,\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n  addDefaultSolvent: PropTypes.func.isRequired,\n  contents: PropTypes.arrayOf(PropTypes.shape).isRequired,\n  switchEquiv: PropTypes.func.isRequired,\n  lockEquivColumn: PropTypes.bool,\n  displayYieldField: PropTypes.bool,\n  switchYield: PropTypes.func.isRequired\n};\n\nSolventsMaterialGroup.propTypes = {\n  materialGroup: PropTypes.string.isRequired,\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n  addDefaultSolvent: PropTypes.func.isRequired,\n  contents: PropTypes.arrayOf(PropTypes.shape).isRequired\n};\n\nMaterialGroup.defaultProps = {\n  showLoadingColumn: false,\n  lockEquivColumn: false,\n  displayYieldField: null\n};\n\nGeneralMaterialGroup.defaultProps = {\n  showLoadingColumn: false,\n  lockEquivColumn: false,\n  displayYieldField: null\n};\n\n\nexport { MaterialGroup, GeneralMaterialGroup, SolventsMaterialGroup };\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DropTarget } from 'react-dnd';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport { MaterialGroup } from 'src/apps/mydb/elements/details/reactions/schemeTab/MaterialGroup';\nimport Reaction from 'src/models/Reaction';\n\n\nconst target = {\n  drop(tagProps, monitor) {\n    const { dropSample, dropMaterial } = tagProps;\n    const srcItem = monitor.getItem();\n    const srcType = monitor.getItemType();\n    if (srcType === DragDropItemTypes.SAMPLE) {\n      dropSample(\n        srcItem.element,\n        tagProps.material,\n        tagProps.materialGroup,\n      );\n    } else if (srcType === DragDropItemTypes.MOLECULE) {\n      dropSample(\n        srcItem.element,\n        tagProps.material,\n        tagProps.materialGroup,\n        null,\n        true,\n      );\n    } else if (srcType === DragDropItemTypes.MATERIAL) {\n      dropMaterial(\n        srcItem.material,\n        srcItem.materialGroup,\n        tagProps.material,\n        tagProps.materialGroup,\n      );\n    }\n  },\n  canDrop(tagProps, monitor) {\n    const srcType = monitor.getItemType();\n    const isCorrectType = srcType === DragDropItemTypes.MATERIAL\n      || srcType === DragDropItemTypes.SAMPLE\n      || srcType === DragDropItemTypes.MOLECULE;\n    const noMaterial = tagProps.materials.length === 0;\n    return noMaterial && isCorrectType;\n  },\n};\n\nconst collect = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop(),\n});\n\nclass MaterialGroupContainer extends Component {\n  render() {\n    const {\n      materials, materialGroup, showLoadingColumn, headIndex,\n      isOver, canDrop, connectDropTarget,\n      deleteMaterial, onChange, reaction, dropSample, dropMaterial, switchEquiv, lockEquivColumn,\n      displayYieldField, switchYield,\n    } = this.props;\n    const style = {\n      padding: '2px 5px',\n    };\n    if (isOver && canDrop) {\n      style.borderStyle = 'dashed';\n      style.borderColor = '#337ab7';\n    } else if (canDrop) {\n      style.borderStyle = 'dashed';\n    }\n\n    return connectDropTarget(\n      <div style={style}>\n        <MaterialGroup\n          reaction={reaction}\n          onChange={onChange}\n          materials={materials}\n          materialGroup={materialGroup}\n          showLoadingColumn={showLoadingColumn}\n          deleteMaterial={deleteMaterial}\n          addDefaultSolvent={dropSample}\n          dropSample={dropSample}\n          dropMaterial={dropMaterial}\n          headIndex={headIndex}\n          switchEquiv={switchEquiv}\n          lockEquivColumn={lockEquivColumn}\n          displayYieldField={displayYieldField}\n          switchYield={switchYield}\n        />\n      </div>,\n    );\n  }\n}\n\nexport default DropTarget(\n  [DragDropItemTypes.SAMPLE, DragDropItemTypes.MOLECULE, DragDropItemTypes.MATERIAL],\n  target,\n  collect,\n)(MaterialGroupContainer);\n\nMaterialGroupContainer.propTypes = {\n  materials: PropTypes.arrayOf(PropTypes.shape).isRequired,\n  headIndex: PropTypes.number.isRequired,\n  materialGroup: PropTypes.string.isRequired,\n  deleteMaterial: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  dropSample: PropTypes.func.isRequired,\n  dropMaterial: PropTypes.func.isRequired,\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n  showLoadingColumn: PropTypes.bool,\n  isOver: PropTypes.bool.isRequired,\n  canDrop: PropTypes.bool.isRequired,\n  connectDropTarget: PropTypes.func.isRequired,\n  switchEquiv: PropTypes.func,\n  lockEquivColumn: PropTypes.bool,\n  displayYieldField: PropTypes.bool.isRequired,\n  switchYield: PropTypes.func.isRequired,\n};\n\nMaterialGroupContainer.defaultProps = {\n  showLoadingColumn: false,\n  switchEquiv: () => null,\n  lockEquivColumn: false\n};\n","import d3 from 'd3'\n\nclass D3LineChart {\n  constructor() {\n    this.margin = {\n      top: 0,\n      bottom: 40,\n      right: 10,\n      left: 80,\n    }\n    this.width = 650 - this.margin.left - this.margin.right\n    this.height = 400 - this.margin.top - this.margin.bottom\n  }\n\n  create(input) {\n    this.drawChart(input);\n  }\n\n  update(input) {\n    this.destroy(input.el);\n    this.drawChart(input);\n  }\n\n  destroy(el) {\n    d3.select(el).selectAll('svg').remove();\n  }\n\n  drawChart(props) {\n    const { data, el, xAxisLabel, yAxisLabel } = props\n\n    // Convert hh:mm:ss to hour decimal\n    let decimalData = data.data.map(function (d) {\n      if (!d.time) return { time: \"0\", value: \"21\" }\n\n      let timeArray = d.time.split(':')\n\n      let hours = parseFloat(timeArray[0].match(/\\d+/g))\n      let minutes = parseFloat(timeArray[1].match(/\\d+/g))\n      let seconds = parseFloat(timeArray[2].match(/\\d+/g))\n\n      let time = parseFloat((((seconds / 60) + minutes) / 60) + hours)\n      time = time.toFixed(4)\n\n      return { time: time, value: d.value }\n    })\n\n    // Sort by time\n    decimalData.sort((a, b) => (a.time - b.time))\n\n    const width = this.width\n    const height = this.height\n    const margin = this.margin\n\n    const xExtent = d3.extent(decimalData, d => d.time)\n    const yMin = d3.min(decimalData, d => parseFloat(d.value))\n    const yMax = d3.max(decimalData, d => parseFloat(d.value))\n    const delta = (yMax - yMin) * 0.1\n    const yExtent = [yMin - delta, yMax + delta]\n\n    const xScale = d3.scale.linear().range([0, width]).domain(xExtent)\n    const yScale = d3.scale.linear().range([height, 0]).domain(yExtent)\n\n    const linePath = d3.svg.line()\n      .x(d => xScale(d.time))\n      .y(d => yScale(d.value))\n\n    const zoomed = () => {\n      svg.select('.x.axis').call(xAxis)\n      svg.select('.y.axis').call(yAxis)\n\n      svg.select('.x.grid')\n        .call(makeXaxis.tickSize(-height, 0, 0).tickFormat(''))\n      svg.select('.y.grid')\n        .call(makeYaxis.tickSize(-width, 0, 0).tickFormat(''))\n\n      svg.select('.line')\n        .attr('class', 'line')\n        .attr('d', linePath(decimalData))\n    }\n\n    const zoom = d3.behavior.zoom().y(yScale).x(xScale).on('zoom', zoomed)\n\n    const resetZoom = () => {\n      d3.transition().duration(200).tween('zoom', () => {\n        const ix = d3.interpolate(xScale.domain(), xExtent)\n        const iy = d3.interpolate(yScale.domain(), yExtent)\n\n        d3.interpolate(xScale.domain(), xExtent)\n        d3.interpolate(yScale.domain(), yExtent)\n\n        return t => {\n          zoom.x(xScale.domain(ix(t))).y(yScale.domain(iy(t)))\n          zoomed()\n        }\n      })\n    }\n\n    const viewBoxWidth = width + margin.left + margin.right\n    const viewBoxHeight = height + 2 * margin.top + 2 * margin.bottom\n\n    const svg = d3.select(el)\n      .append('svg:svg')\n      .attr('id', 'line-chart')\n      .attr('width', width)\n      .attr('height', height)\n      .attr('viewBox', `0 0 ${viewBoxWidth} ${viewBoxHeight}`)\n      .attr('perserveAspectRatio', 'xMinYMin')\n      .append('svg:g')\n      .attr('transform', `translate(${margin.left}, ${margin.top})`)\n      .call(zoom).on('dblclick.zoom', resetZoom)\n\n    svg.append('svg:rect')\n      .attr('width', width)\n      .attr('height', height)\n      .attr('class', 'plot')\n\n    const xAxis = d3.svg.axis().scale(xScale).orient('bottom').ticks(5)\n    const yAxis = d3.svg.axis().scale(yScale).orient('left').ticks(5)\n\n    const makeXaxis = d3.svg.axis().scale(xScale).orient('bottom').ticks(5)\n    const makeYaxis = d3.svg.axis().scale(yScale).orient('left').ticks(5)\n\n    svg.append('svg:g')\n      .attr('class', 'x axis')\n      .attr('transform', `translate(0, ${height})`)\n      .call(xAxis)\n\n    svg.append('g')\n      .attr('class', 'y axis')\n      .call(yAxis)\n\n    svg.append('g')\n      .attr('class', 'x grid')\n      .attr('transform', `translate(0, ${height})`)\n      .call(makeXaxis.tickSize(-height, 0, 0).tickFormat(''))\n\n    svg.append('g')\n      .attr('class', 'y grid')\n      .call(makeYaxis.tickSize(-width, 0, 0).tickFormat(''))\n\n    svg.append('text')\n      .attr('text-anchor', 'middle')\n      .attr('transform',\n        `translate(${0 - margin.left + 15}, ${height / 2})rotate(-90)`)\n      .text(yAxisLabel)\n\n    svg.append('text')\n      .attr('text-anchor', 'middle')  // this makes it easy to centre the text\n      .attr('transform',\n        `translate(${width / 2}, ${height + margin.bottom})`)\n      .text(xAxisLabel)\n\n    svg.append('svg:clipPath')\n      .attr('id', 'clip')\n      .append('svg:rect')\n      .attr('x', 0)\n      .attr('y', 0)\n      .attr('width', width)\n      .attr('height', height)\n\n    const chartBody = svg.append('g')\n      .attr('clip-path', 'url(#clip)')\n\n    chartBody.append('svg:path')\n      .datum(data)\n      .attr('class', 'line')\n      .attr('d', linePath(decimalData))\n\n    // // responsive\n    // const chart = $('#line-chart')\n    // const aspect = chart.width() / chart.height()\n    // const container = chart.parent()\n    //\n    // $(window).on('resize', () => {\n    //   const targetWidth = container.width()\n    //   chart.attr('width', targetWidth)\n    //   chart.attr('height', Math.round(targetWidth / aspect))\n    // }).trigger('resize')\n  }\n}\n\nconst LineChart = new D3LineChart()\n\nexport { LineChart }\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { LineChart } from 'src/components/lineChart/LineChart';\n\nexport default class LineChartContainer extends React.Component {\n  componentDidMount() {\n    LineChart.create({\n      data: this.props.data,\n      el: this.getDOMNode(),\n      xAxisLabel: this.props.xAxis,\n      yAxisLabel: this.props.yAxis\n    })\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    LineChart.update({\n      data: nextProps.data,\n      el: this.getDOMNode(),\n      xAxisLabel: nextProps.xAxis,\n      yAxisLabel: nextProps.yAxis\n    })\n  }\n\n  componentWillUnmount() {\n    LineChart.destroy(this.getDOMNode())\n  }\n\n  getDOMNode() {\n    return ReactDOM.findDOMNode(this)\n  }\n\n  render() {\n    return (\n      <div id=\"line-chart\" />\n    )\n  }\n}\n\n// LineChartContainer.propTypes = {\n//   data: PropTypes.shape({\n//     timeUnit: PropTypes.string.isRequired,\n//     valueUnit: PropTypes.string.isRequired,\n//     data: PropTypes.arrayOf(PropTypes.shape({\n//       time: PropTypes.number.isRequired,\n//       value: PropTypes.number.isRequired\n//     }))\n//   })\n// }\n","import React from 'react';\n\nexport default class EditableCell extends React.Component {\n  constructor(props) {\n    super(props)\n    this.state = {\n      editing: false,\n      val: props.value\n    }\n\n    this.handleChange = this.handleChange.bind(this)\n    this.handleDoubleClick = this.handleDoubleClick.bind(this)\n    this.handleBlur = this.handleBlur.bind(this)\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    this.setState({ val: nextProps.value })\n  }\n\n  handleBlur(e) {\n    let { uid, type, onCellValueChange, inputOnChange } = this.props\n    let newValue = inputOnChange(this.state.val, e.target.value)\n\n    this.setState({\n      editing: false,\n      val: newValue\n    }, onCellValueChange(uid, type, newValue))\n  }\n\n  handleChange(e) {\n    let { inputOnChange } = this.props\n\n    this.setState({ val: e.target.value })\n  }\n\n  handleDoubleClick() {\n    this.setState({ editing: true })\n  }\n\n  render() {\n    let { uid, inputPlaceholder } = this.props\n    let { editing, val } = this.state\n\n    let displayValue = editing ? '' : val\n\n    let cellContent = ''\n    let className = ''\n    if (editing) {\n      className = 'editable-selected'\n      cellContent = (\n        <input placeholder={inputPlaceholder} style={{ width: \"100%\" }} value={val}\n          onChange={this.handleChange} onBlur={this.handleBlur} />\n      )\n    }\n\n    return (\n      <div className={className} onDoubleClick={this.handleDoubleClick}>\n        {cellContent}\n        <span>\n          {displayValue}\n        </span>\n      </div>\n    )\n  }\n}\n\n// EditableCell.propTypes = {\n//   inputOnChange: PropTypes.func.isRequired,\n//   onCellValueChange: PropTypes.func.isRequired\n// }\n","import React from 'react';\nimport { Table } from 'react-bootstrap';\n\nimport EditableCell from 'src/components/lineChart/EditableCell'\n\nexport default class EditableTable extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      data: this.props.temperature.data,\n      newTime: \"\",\n      newTemperature: \"\"\n    }\n\n    this.onCellValueChange = this.onCellValueChange.bind(this)\n    this.removeRow = this.removeRow.bind(this)\n    this.addRow = this.addRow.bind(this)\n\n    this.handleTimeOnchange = this.handleTimeOnchange.bind(this)\n    this.handleTemperatureOnchange = this.handleTemperatureOnchange.bind(this)\n\n    this.handleNewTimeInput = this.handleNewTimeInput.bind(this)\n    this.handleNewTemperatureInput = this.handleNewTemperatureInput.bind(this)\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    let data = nextProps.temperature.data\n    data.sort((a, b) => (\n      Date.parse(\"01/01/2016 \" + a.time) - Date.parse(\"01/01/2016 \" + b.time)\n    ))\n\n    this.setState({ data: data })\n  }\n\n  handleTimeOnchange(oldVal, newVal) {\n    newVal = this.checkDefaultTime(newVal)\n    oldVal = this.checkDefaultTime(oldVal)\n\n    if (newVal.length > 8) {\n      newVal = newVal.substr(1)\n      newVal = newVal.replace(/:/g, \"\")\n      newVal = newVal.replace(/(\\d)(?=(\\d\\d)+(?!\\d))/g, \"$1:\")\n\n      return newVal\n    }\n\n    let timeRegex = /^(?:(?:(\\d\\d):)?([0-5]?\\d):)?([0-5]?\\d)$/g\n    let match = timeRegex.exec(newVal)\n\n    if (match != null) {\n      return (match[1] || \"00\") + \":\" +\n        (match[2] || \"00\") + \":\" +\n        (match[3] || \"00\")\n    } else {\n      return oldVal\n    }\n  }\n\n  handleTemperatureOnchange(oldVal, newVal) {\n    newVal = newVal.replace(/[^\\d|-]/g, \"\")\n    return this.checkDefaultTemperature(newVal)\n  }\n\n  handleNewTimeInput(e) {\n    let newTime = e.target.value\n    newTime = this.handleTimeOnchange(this.state.newTime, newTime)\n    newTime = this.checkDefaultTime(newTime)\n\n    this.setState({ newTime: newTime })\n  }\n\n  handleNewTemperatureInput(e) {\n    let newTemperature = e.target.value\n    newTemperature = newTemperature.replace(/[^\\d|-]/g, \"\")\n    newTemperature = this.checkDefaultTemperature(newTemperature)\n\n    this.setState({ newTemperature: newTemperature })\n  }\n\n  checkDefaultTime(time) {\n    if (typeof (time) == \"undefined\" || time == null ||\n      time == \"\")\n      return \"00:00:00\"\n    else\n      return time\n  }\n\n  checkDefaultTemperature(temperature) {\n    if (typeof (temperature) == \"undefined\" || temperature == null ||\n      temperature == \"\")\n      return \"21\"\n    else\n      return temperature\n  }\n\n  removeRow(uid) {\n    let { data } = this.state\n    let { updateTemperature } = this.props\n    if (uid > -1) {\n      data.splice(uid, 1)\n    }\n\n    this.setState({ data: data }, updateTemperature(data))\n  }\n\n  addRow() {\n    let { data } = this.state\n    let { updateTemperature } = this.props\n    let newTime = this.newTime.value\n    newTime = this.checkDefaultTime(newTime)\n    let newTemperature = this.newTemperature.value\n    newTemperature = this.checkDefaultTemperature(newTemperature)\n    let newData = { time: newTime, value: newTemperature }\n\n    data.push(newData)\n    this.setState({\n      data: data,\n      newTime: '',\n      newTemperature: ''\n    }, updateTemperature(data))\n  }\n\n  onCellValueChange(uid, type, newValue) {\n    let { data } = this.state\n    let { updateTemperature } = this.props\n\n    data[uid][type] = newValue\n\n    this.setState({ data: data }, updateTemperature(data))\n  }\n\n  render() {\n    let { data, newTime, newTemperature } = this.state\n    let { valueUnit } = this.props.temperature\n\n    var rows = []\n    for (let i = 0; i < data.length; i = i + 1) {\n      let row = (\n        <tr key={\"rows_\" + i}>\n          <td className=\"table-cell\" key={\"time_td_\" + i}>\n            <EditableCell key={\"time_cell_\" + i} uid={i} type=\"time\"\n              value={data[i].time} ref={\"time_cell_\" + i}\n              onCellValueChange={(uid, type, newValue) => this.onCellValueChange(uid, type, newValue)}\n              inputOnChange={(oldVal, newVal) => this.handleTimeOnchange(oldVal, newVal)} />\n          </td>\n          <td className=\"table-cell\" key={\"value_td_\" + i}>\n            <div>\n              <div style={{ width: \"65%\", float: \"left\" }}>\n                <EditableCell key={\"value_cell_\" + i} uid={i} type=\"value\"\n                  value={data[i].value} ref={\"value_cell_\" + i}\n                  onCellValueChange={(uid, type, newValue) => this.onCellValueChange(uid, type, newValue)}\n                  inputOnChange={(oldVal, newVal) => this.handleTemperatureOnchange(oldVal, newVal)} />\n              </div>\n              <i className=\"fa fa-minus clickable-icon\" aria-hidden=\"true\"\n                onClick={() => this.removeRow(i)} />\n            </div>\n          </td>\n        </tr>\n      )\n      rows.push(row)\n    }\n\n    return (\n      <Table responsive className=\"editable-table\">\n        <thead>\n          <tr>\n            <th> Time (hh:mm:ss) </th>\n            <th> Temperature ({valueUnit}) </th>\n          </tr>\n        </thead>\n        <tbody>\n          {rows}\n          <tr>\n            <td className=\"table-cell\">\n              <input\n                ref={(n) => { this.newTime = n; }}\n                value={newTime}\n                onChange={this.handleNewTimeInput}\n              />\n            </td>\n            <td className=\"table-cell\">\n              <div>\n                <input\n                  ref={(m) => { this.newTemperature = m; }}\n                  style={{ width: '65%' }}\n                  value={newTemperature}\n                  onChange={this.handleNewTemperatureInput}\n                />\n                <i\n                  className=\"fa fa-plus clickable-icon\"\n                  aria-hidden=\"true\"\n                  onClick={this.addRow}\n                />\n              </div>\n            </td>\n          </tr>\n        </tbody>\n      </Table>\n    );\n  }\n}\n\n// EditableTable.propTypes = {\n//   onChangeHandler: PropTypes.func.isRequired,\n//   onCellValueChange: PropTypes.func.isRequired,\n//   onKeyDown: PropTypes.func.isRequired\n// }\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Col,\n  FormGroup,\n  FormControl,\n  ControlLabel,\n  OverlayTrigger,\n  Button,\n  Tooltip,\n  InputGroup,\n  Grid,\n  Row\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport uuid from 'uuid';\nimport Reaction from 'src/models/Reaction';\nimport { statusOptions } from 'src/components/staticDropdownOptions/options';\nimport LineChartContainer from 'src/components/lineChart/LineChartContainer';\nimport EditableTable from 'src/components/lineChart/EditableTable';\nimport { permitOn } from 'src/components/common/uis';\n\n// For REPO\nimport HelpInfo from 'src/components/common/HelpInfo';\n\nexport default class ReactionDetailsMainProperties extends Component {\n  constructor(props) {\n    super(props);\n    const { temperature } = props && props.reaction;\n    this.state = {\n      showTemperatureChart: false,\n      temperature,\n    };\n    this.toggleTemperatureChart = this.toggleTemperatureChart.bind(this);\n    this.updateTemperature = this.updateTemperature.bind(this);\n    this.temperatureUnit = props.reaction.temperature.valueUnit;\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    this.setState({\n      temperature: nextProps.reaction.temperature,\n    });\n\n    this.temperatureUnit = nextProps.reaction.temperature.valueUnit;\n  }\n\n  updateTemperature(newData) {\n    const { temperature } = this.state;\n    temperature.data = newData;\n    this.setState({ temperature });\n    this.props.onInputChange('temperatureData', temperature);\n  }\n\n  toggleTemperatureChart() {\n    const { showTemperatureChart } = this.state;\n    this.setState({ showTemperatureChart: !showTemperatureChart });\n  }\n\n  changeUnit() {\n    const index = Reaction.temperature_unit.indexOf(this.temperatureUnit);\n    const unit = Reaction.temperature_unit[(index + 1) % 3];\n    this.props.onInputChange('temperatureUnit', unit);\n  }\n\n\n  render() {\n    const { reaction, onInputChange } = this.props;\n    const temperatureTooltip = (\n      <Tooltip id=\"show_temperature\">Show temperature chart</Tooltip>\n    );\n\n    const temperatureDisplay = reaction.temperature_display;\n    const { showTemperatureChart, temperature } = this.state;\n    const tempUnitLabel = `Temperature (${this.temperatureUnit})`;\n\n    let TempChartRow = <span />;\n    if (showTemperatureChart) {\n      TempChartRow = (\n        <Col md={12}>\n          <div style={{ width: '74%', float: 'left' }}>\n            <LineChartContainer\n              data={temperature}\n              xAxis=\"Time\"\n              yAxis={tempUnitLabel}\n            />\n          </div>\n          <div style={{ width: '25%', float: 'left' }}>\n            <EditableTable\n              temperature={temperature}\n              updateTemperature={this.updateTemperature}\n            />\n          </div>\n        </Col>\n      );\n    }\n\n    return (\n      <Grid fluid style={{ paddingLeft: 'unset' }}>\n        <Row>\n          <Col md={6}>\n            <FormGroup>\n              <ControlLabel>Name</ControlLabel>\n              <FormControl\n                id={uuid.v4()}\n                name=\"reaction_name\"\n                type=\"text\"\n                value={reaction.name || ''}\n                placeholder=\"Name...\"\n                disabled={!permitOn(reaction) || reaction.isMethodDisabled('name')}\n                onChange={event => onInputChange('name', event)}\n              />\n            </FormGroup>\n          </Col>\n          <Col md={3}>\n            <FormGroup>\n              <ControlLabel>Status</ControlLabel>\n              <Select\n                className=\"status-select reaction-status-change\"\n                name=\"status\"\n                key={reaction.status}\n                multi={false}\n                options={statusOptions}\n                value={reaction.status}\n                disabled={!permitOn(reaction) || reaction.isMethodDisabled('status')}\n                onChange={(event) => {\n                  const wrappedEvent = {\n                    target: { value: event && event.value },\n                  };\n                  onInputChange('status', wrappedEvent);\n                }}\n              />\n            </FormGroup>\n          </Col>\n          <Col md={3}>\n            <FormGroup>\n              {reaction.is_published ? <ControlLabel>Temperature</ControlLabel> : <HelpInfo optionalElement={<ControlLabel>Temperature</ControlLabel>} source=\"requiredField\" />}\n              <InputGroup>\n                <InputGroup.Button>\n                  <OverlayTrigger placement=\"bottom\" overlay={temperatureTooltip}>\n                    <Button\n                      disabled={!permitOn(reaction)}\n                      active\n                      className=\"clipboardBtn\"\n                      onClick={this.toggleTemperatureChart}\n                    >\n                      <i className=\"fa fa-area-chart\" />\n                    </Button>\n                  </OverlayTrigger>\n                </InputGroup.Button>\n                <FormControl\n                  type=\"text\"\n                  value={temperatureDisplay || ''}\n                  disabled={!permitOn(reaction) || reaction.isMethodDisabled('temperature')}\n                  placeholder=\"Temperature...\"\n                  onChange={event => onInputChange('temperature', event)}\n                />\n                <InputGroup.Button>\n                  <Button\n                    disabled={!permitOn(reaction)}\n                    bsStyle=\"success\"\n                    onClick={() => this.changeUnit()}\n                  >\n                    {this.temperatureUnit}\n                  </Button>\n                </InputGroup.Button>\n              </InputGroup>\n            </FormGroup>\n          </Col>\n        </Row>\n        <Row>\n          {TempChartRow}\n        </Row>\n      </Grid>\n    );\n  }\n}\n\nReactionDetailsMainProperties.propTypes = {\n  // eslint-disable-next-line react/forbid-prop-types\n  reaction: PropTypes.object,\n  onInputChange: PropTypes.func\n};\n\nReactionDetailsMainProperties.defaultProps = {\n  reaction: {},\n  onInputChange: () => {}\n};\n","const observationPurification = [\n  { 'flash-chromatography': 'The obtained crude product was purified via flash-chromatography on silica gel using cyclohexane/ethyl acetate 20:1 to 4:1.' },\n  { hplc: 'The obtained crude product was purified via HPLC using MeCN/H₂O 10:1.' },\n];\n\nconst solventsTL = [\n  { cyclohexane: 'cyclohexane/ethyl acetate 20:1' },\n  { 'CH<sub>2</sub>Cl<sub>2</sub>': 'CH₂Cl₂/MeOH 20:1' },\n  { 'NEt<sub>3</sub>': 'cyclohexane/ethyl acetate 20:1 + 1% NEt₃' },\n];\n\nexport { solventsTL, observationPurification };\n","/* eslint-disable object-shorthand, no-trailing-spaces,\nobject-property-newline, semi, react/no-unused-prop-types, react/prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  FormGroup, ControlLabel, FormControl, OverlayTrigger, Tooltip\n} from 'react-bootstrap';\nimport PrivateNoteFetcher from 'src/fetchers/PrivateNoteFetcher';\nimport PrivateNote from 'src/models/PrivateNote';\n\nexport default class PrivateNoteElement extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      note: undefined,\n      isSaving: false\n    };\n  }\n\n  componentDidMount() {\n    const { element } = this.props;\n    this.fetchNote(element);\n  }\n\n  handleInputChange(value) {\n    let { note } = this.state;\n    if (note === undefined) {\n      note = PrivateNote.buildEmpty();\n    }\n    note.content = value;\n    this.setState({ note: note });\n  }\n\n  fetchNote(element) {\n    if (element === undefined || element.is_new) {\n      return;\n    }\n\n    PrivateNoteFetcher.fetchByNoteableId(element.id, element.type).then((note) => {\n      if (note != null) {\n        this.setState({ note: note });\n      }\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  saveNote() {\n    const { note } = this.state;\n    const { element } = this.props;\n    if (!element || !note) {\n      return;\n    }\n    this.setState({ isSaving: true })\n    if (!note.created_at) {\n      const params = {\n        content: note.content, noteable_id: element.id,\n        noteable_type: element.type\n      };\n      PrivateNoteFetcher.create(params).then((newNote) => {\n        this.setState({ note: newNote, isSaving: false });\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n        this.setState({ isSaving: false })\n      });\n    } else {\n      PrivateNoteFetcher.update(note).then((newNote) => {\n        this.setState({ note: newNote, isSaving: false });\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n        this.setState({ isSaving: false })\n      });\n    }\n  }\n\n  render() {\n    const { note, isSaving } = this.state;\n    const content = note ? note.content : '';\n    let disabled = this.props.disabled || false;\n    const { element } = this.props;\n    if (element && element.is_new) {\n      disabled = true;\n    }\n\n    return (\n      <div style={{ marginBottom: '10px' }}>\n        <FormGroup>\n          <OverlayTrigger\n            placement=\"top\"\n            overlay={\n              <Tooltip id=\"private-note\">Only you can see this note</Tooltip>\n          }\n          >\n            <ControlLabel>\n              Private Note\n              {' '}\n              <span className=\"glyphicon glyphicon-info-sign\" />\n            </ControlLabel>\n          </OverlayTrigger>\n\n          <i>{isSaving ? ' saving your note' : ''}</i>\n\n          <FormControl\n            componentClass=\"textarea\"\n            ref={(input) => { this.noteInput = input; }}\n            placeholder={content}\n            value={content ?? ''}\n            onChange={(e) => this.handleInputChange(e.target.value)}\n            rows={2}\n            disabled={disabled}\n            onBlur={() => this.saveNote()}\n          />\n        </FormGroup>\n      </div>\n    )\n  }\n}\n\nPrivateNoteElement.propTypes = {\n  element: PropTypes.object,\n  handlePrivateNoteChanged: PropTypes.func,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col, FormGroup } from 'react-bootstrap';\nimport Select from 'react-select';\nimport 'moment-precise-range-plugin';\nimport { purificationOptions } from 'src/components/staticDropdownOptions/options';\nimport MaterialGroupContainer from 'src/apps/mydb/elements/details/reactions/schemeTab/MaterialGroupContainer';\nimport QuillEditor from 'src/components/QuillEditor';\nimport QuillViewer from 'src/components/QuillViewer';\nimport Sample from 'src/models/Sample';\nimport { observationPurification, solventsTL } from 'src/utilities/reactionPredefined';\nimport { permitOn } from 'src/components/common/uis';\nimport PrivateNoteElement from 'src/apps/mydb/elements/details/PrivateNoteElement';\nimport HelpInfo from 'src/components/common/HelpInfo';\n\nfunction dummy() { return true; }\n\nexport default class ReactionDetailsPurification extends Component {\n  constructor(props) {\n    super(props);\n    this.handlePurificationChange = this.handlePurificationChange.bind(this);\n    this.handleOnReactionChange = this.handleOnReactionChange.bind(this);\n    this.handleOnSolventSelect = this.handleOnSolventSelect.bind(this);\n    this.handlePSolventChange = this.handlePSolventChange.bind(this);\n    this.deletePSolvent = this.deletePSolvent.bind(this);\n    this.dropPSolvent = this.dropPSolvent.bind(this);\n  }\n\n  handleOnReactionChange(reaction) {\n    this.props.onReactionChange(reaction);\n  }\n\n  handlePurificationChange(selected) {\n    if (selected.length === 0) {\n      return this.handleMultiselectChange('purification', selected);\n    }\n\n    const obs = observationPurification;\n    const { reaction } = this.props;\n\n    const selectedVal = selected[selected.length - 1].value;\n    const predefinedObs = obs.filter(x =>\n      Object.keys(x).filter(k =>\n        k.toLowerCase().localeCompare(selectedVal.toLowerCase()) === 0,\n      ).length > 0,\n    );\n\n    if (predefinedObs.length > 0) {\n      const values = selected.map(option => option.value);\n      reaction.purification = values;\n\n      const predefined = predefinedObs[0][selectedVal.toLowerCase()];\n      reaction.concat_text_observation(predefined);\n\n      this.handleOnReactionChange(reaction);\n    } else {\n      this.handleMultiselectChange('purification', selected);\n    }\n\n    return 0;\n  }\n\n  handlePSolventChange(changeEvent) {\n    const { sampleID, amount } = changeEvent;\n    const { reaction, onReactionChange } = this.props;\n    const updatedSample = reaction.sampleById(sampleID);\n    updatedSample.setAmount(amount);\n    onReactionChange(reaction);\n  }\n\n  deletePSolvent(material) {\n    const { reaction, onReactionChange } = this.props;\n    reaction.deleteMaterial(material, 'purification_solvents');\n    onReactionChange(reaction);\n  }\n\n  dropPSolvent(srcSample, tagMaterial, tagGroup, extLabel) {\n    const { reaction, onReactionChange } = this.props;\n    const splitSample = Sample.buildNew(srcSample, reaction.collection_id, tagGroup);\n    splitSample.short_label = tagGroup.slice(0, -1);\n    splitSample.external_label = extLabel;\n    reaction.addMaterialAt(splitSample, null, tagMaterial, tagGroup);\n    onReactionChange(reaction, { schemaChanged: true });\n  }\n\n  handleMultiselectChange(type, selectedOptions) {\n    const values = selectedOptions.map(option => option.value);\n    const wrappedEvent = { target: { value: values } };\n    this.props.onInputChange(type, wrappedEvent);\n  }\n\n  handleOnSolventSelect(eventKey) {\n    const { reaction } = this.props;\n    let val;\n    if (eventKey > solventsTL.length) {\n      val = '';\n    } else {\n      const key = Object.keys(solventsTL[eventKey])[0];\n      val = solventsTL[eventKey][key];\n    }\n    reaction.tlc_solvents = val;\n    this.handleOnReactionChange(reaction);\n  }\n\n  render() {\n    const { reaction, onInputChange, additionQuillRef } = this.props;\n    return (\n      <span>\n        <Row>\n          <Col md={12}>\n            <div><b>Purification</b></div>\n            <Select\n              className=\"status-select\"\n              style={{ zIndex: 10 }}\n              name=\"purification\"\n              multi\n              disabled={!permitOn(reaction) || reaction.isMethodDisabled('purification')}\n              options={purificationOptions}\n              onChange={this.handlePurificationChange}\n              value={reaction.purification}\n            />\n          </Col>\n        </Row>\n        <Row style={{ marginTop: '10px' }}>\n          <Col md={12}>\n            <div><b>Purification Solvents</b></div>\n            <MaterialGroupContainer\n              reaction={reaction}\n              materialGroup=\"purification_solvents\"\n              materials={reaction.purification_solvents}\n              dropMaterial={dummy}\n              deleteMaterial={this.deletePSolvent}\n              dropSample={this.dropPSolvent}\n              showLoadingColumn={!!reaction.hasPolymers()}\n              onChange={this.handlePSolventChange}\n              headIndex={0}\n            />\n          </Col>\n        </Row>\n        <Row style={{ marginTop: '10px' }}>\n          <Col md={12}>\n            <FormGroup>\n              <div><b>Additional information for publication and purification details</b>&nbsp;<HelpInfo source={reaction.is_published ? 'x' : 'additionalInformation'} place=\"right\" /></div>\n              <div className=\"quill-resize\">\n                {\n                  permitOn(reaction) ?\n                    <QuillEditor\n                      ref={additionQuillRef}\n                      value={reaction.observation}\n                      height=\"100%\"\n                      disabled={!permitOn(reaction) || reaction.isMethodDisabled('observation')}\n                      onChange={event => onInputChange('observation', event)}\n                    /> : <QuillViewer value={reaction.observation} />\n                }\n              </div>\n            </FormGroup>\n            <PrivateNoteElement element={reaction} disabled={!reaction.can_update} />\n          </Col>\n        </Row>\n      </span>\n    );\n  }\n}\n\nReactionDetailsPurification.propTypes = {\n  reaction: PropTypes.object,\n  onReactionChange: PropTypes.func,\n  onInputChange: PropTypes.func,\n  additionQuillRef: PropTypes.object\n};\n\nReactionDetailsPurification.defaultProps = {\n  reaction: {},\n  onReactionChange: () => {},\n  onInputChange: () => {},\n  additionQuillRef: {}\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { OverlayTrigger, Popover } from 'react-bootstrap';\n\nimport _ from 'lodash';\nimport Delta from 'quill-delta';\n\nimport TextTemplateStore from 'src/stores/alt/stores/TextTemplateStore';\nimport TextTemplateActions from 'src/stores/alt/actions/TextTemplateActions';\n\nimport DynamicToolbarEditor from 'src/components/reactQuill/DynamicToolbarEditor';\nimport BaseToolbar from 'src/components/reactQuill/BaseToolbar';\n\nimport TextTemplateToolbar from 'src/components/textTemplateToolbar/TextTemplateToolbar';\nimport ToolbarTemplateCreator from 'src/components/textTemplateToolbar/ToolbarTemplateCreator';\n\nconst toolbarOptions = [\n  'bold', 'italic', 'underline',\n  'header', 'script',\n  'list', 'bullet',\n];\n\nexport default class ReactionDescriptionEditor extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const templateStore = TextTemplateStore.getState();\n    const { predefinedTemplateNames, fetchedPredefinedTemplates } = templateStore;\n    const fetchedTemplates = fetchedPredefinedTemplates.toJS();\n    this.state = {\n      fetchedNames: Object.keys(fetchedTemplates),\n      predefinedTemplateNames: predefinedTemplateNames.toJS(),\n      fetchedPredefinedTemplates: fetchedTemplates,\n      updateTemplate: false\n    };\n\n    this.fetchPredefinedTemplates = this.fetchPredefinedTemplates.bind(this);\n\n    this.onChangeTemplateStore = this.onChangeTemplateStore.bind(this);\n    this.onChangeContent = this.onChangeContent.bind(this);\n    this.applyTemplate = this.applyTemplate.bind(this);\n    this.updateTextTemplates = this.updateTextTemplates.bind(this);\n\n    this.quillOnChange = this.quillOnChange.bind(this);\n  }\n\n  componentDidMount() {\n    TextTemplateStore.listen(this.onChangeTemplateStore);\n\n    TextTemplateActions.fetchPredefinedTemplateNames();\n\n    const { template } = this.props;\n    const namesToFetch = Object.values(template).flat();\n    this.fetchPredefinedTemplates(namesToFetch);\n  }\n\n  componentDidUpdate(prevProps) {\n    const { template } = this.props;\n    const namesToFetch = Object.values(template).flat();\n\n    if (!this.state.updateTemplate && Object.keys(template).length !== 0) {\n      // this.fetchPredefinedTemplates(namesToFetch);\n      TextTemplateActions.fetchPredefinedTemplateByNames(namesToFetch);\n\n      // eslint-disable-next-line react/no-did-update-set-state\n      this.setState({\n        updateTemplate: true\n      });\n    } else if (this.props.template !== prevProps.template && this.state.updateTemplate) {\n      const prevnamesToFetch = Object.values(prevProps.template).flat();\n\n      if (prevnamesToFetch.length !== namesToFetch.length) {\n        // this.fetchPredefinedTemplates(namesToFetch);\n        TextTemplateActions.fetchPredefinedTemplateByNames(namesToFetch);\n      }\n    }\n  }\n\n  componentWillUnmount() {\n    TextTemplateStore.unlisten(this.onChangeTemplateStore);\n  }\n\n  onChangeTemplateStore(state) {\n    const { predefinedTemplateNames, fetchedPredefinedTemplates } = state;\n    const { fetchedNames } = this.state;\n    const fetchedTemplates = fetchedPredefinedTemplates.toJS();\n\n    const templateStoreFetched = Object.keys(fetchedTemplates);\n    const fetched = [...new Set(fetchedNames.concat(templateStoreFetched))];\n    this.setState({\n      fetchedNames: fetched,\n      predefinedTemplateNames: predefinedTemplateNames.toJS(),\n      fetchedPredefinedTemplates: fetchedTemplates\n    });\n  }\n\n  onChangeContent(quillEditor) {\n    const { onChange } = this.props;\n\n    if (onChange) {\n      onChange(quillEditor.getContents());\n    }\n  }\n\n  fetchPredefinedTemplates(names) {\n    if (!names || names.length === 0) return;\n\n    const { fetchedNames } = this.state;\n    const namesToFetch = names.filter(n => !fetchedNames.includes(n));\n    if (namesToFetch.length === 0) return;\n\n    const fetched = [...new Set(fetchedNames.concat(names))];\n    this.setState({ fetchedNames: fetched }, () => {\n      TextTemplateActions.fetchPredefinedTemplateByNames(namesToFetch);\n    });\n  }\n\n  quillOnChange(content, delta, source, editor) {\n    if (this.reactQuillRef.current == null) {\n      return;\n    }\n\n    this.onChangeContent(editor);\n  }\n\n  applyTemplate(macro) {\n    const check = ('ops' in macro) && Array.isArray(macro.ops);\n    if (!check) return;\n\n    if (this.reactQuillRef.current == null) {\n      return;\n    }\n\n    const quill = this.reactQuillRef.current.getEditor();\n    const range = quill.getSelection();\n    if (!range) return;\n\n    let contents = quill.getContents();\n    let elementOps = macro.ops;\n    const insertDelta = new Delta(elementOps);\n    if (range.index > 0) {\n      elementOps = [{ retain: range.index }].concat(elementOps);\n    }\n    const macroDelta = new Delta(elementOps);\n    contents = contents.compose(macroDelta);\n    quill.setContents(contents);\n    range.length = 0;\n    range.index += insertDelta.length();\n    quill.setSelection(range);\n\n    this.onChangeContent(quill);\n  }\n\n  updateTextTemplates(template) {\n    const { updateTextTemplates } = this.props;\n    updateTextTemplates(template);\n  }\n\n  render() {\n    const { predefinedTemplateNames, fetchedPredefinedTemplates } = this.state;\n    const { template, readOnly, value, reactQuillRef } = this.props;\n    this.reactQuillRef = reactQuillRef;\n\n    const templateCreatorPopover = (\n      <Popover\n        id=\"popover-positioned-top\"\n        title=\"Custom toolbar\"\n        className=\"analyses-template-creator\"\n      >\n        <ToolbarTemplateCreator\n          template={template}\n          templateOptions={predefinedTemplateNames}\n          updateTextTemplates={this.updateTextTemplates}\n        />\n      </Popover>\n    );\n\n    return (\n      <DynamicToolbarEditor\n        theme=\"snow\"\n        formats={toolbarOptions}\n        style={{ height: '100%' }}\n        ref={this.reactQuillRef}\n        onChange={this.quillOnChange}\n        value={value}\n        readOnly={readOnly}\n      >\n        <BaseToolbar />\n        <TextTemplateToolbar\n          template={template}\n          predefinedTemplates={fetchedPredefinedTemplates}\n          applyTemplate={this.applyTemplate}\n        />\n        <OverlayTrigger\n          trigger=\"click\"\n          placement=\"top\"\n          rootClose\n          overlay={templateCreatorPopover}\n          onHide={this.onCloseTemplateCreator}\n        >\n          <span className=\"ql-formats\">\n            <button>\n              <span className=\"fa fa-cog\" />\n            </button>\n          </span>\n        </OverlayTrigger>\n      </DynamicToolbarEditor>\n    );\n  }\n}\n\nReactionDescriptionEditor.propTypes = {\n  /* eslint-disable react/forbid-prop-types */\n  template: PropTypes.object,\n  value: PropTypes.object,\n  /* eslint-enable react/forbid-prop-types */\n  readOnly: PropTypes.bool,\n  onChange: PropTypes.func,\n  updateTextTemplates: PropTypes.func,\n  reactQuillRef: PropTypes.object\n};\n\nReactionDescriptionEditor.defaultProps = {\n  readOnly: false,\n  template: {},\n  value: {},\n  onChange: null,\n  updateTextTemplates: null,\n  reactQuillRef: {}\n};\n","import React from 'react';\nimport { DropTarget } from 'react-dnd';\nimport { compose } from 'redux';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions.js';\nimport { UrlSilentNavigation } from 'src/utilities/ElementUtils';\n\nconst updRxnOriName = (oriRxn, sourceTag) => {\n  const nextRxn = oriRxn;\n  nextRxn.origin = sourceTag;\n  nextRxn.name = nextRxn.extractNameFromOri(sourceTag);\n  nextRxn.changed = true;\n  return nextRxn;\n};\n\nconst gpTarget = {\n  drop(targetProps, monitor) {\n    const sourceProps = monitor.getItem();\n    const source = sourceProps.element;\n    const sourceTag = { id: source.id, short_label: source.short_label };\n    const oriRxn = targetProps.reaction;\n    const nextRxn = updRxnOriName(oriRxn, sourceTag);\n    DetailActions.changeCurrentElement(oriRxn, nextRxn);\n  },\n};\n\nconst gpDropCollect = (connect, monitor) => (\n  {\n    connectDropTarget: connect.dropTarget(),\n    isOver: monitor.isOver(),\n    canDrop: monitor.canDrop(),\n  }\n);\n\nconst dndStyle = (canDrop, isOver) => {\n  const style = {};\n  if (canDrop) {\n    style.borderStyle = 'dashed';\n    style.borderWidth = 2;\n    style.opacity = 0.5;\n  }\n  if (isOver) {\n    style.borderColor = '#337ab7';\n    style.opacity = 0.2;\n  }\n  return style;\n};\n\nconst showReaction = (reaction) => {\n  UrlSilentNavigation(reaction);\n  ElementActions.fetchReactionById(reaction.id);\n}\n\nconst GpContent = ({ reaction }) => (\n  reaction.origin && reaction.origin.short_label\n    ? <span className=\"c-bs-primary gp-content\">\n      <span className=\"spacer-10\" />\n      <a role=\"link\" onClick={() => { showReaction(reaction.origin) }}>{reaction.origin.short_label}</a>\n    </span>\n    : null\n);\n\nconst GeneralProcedureDnd = ({ connectDropTarget, isOver, canDrop,\n  reaction }) => {\n  const style = dndStyle(canDrop, isOver);\n\n  return (\n    reaction.role === 'parts'\n      ? compose(connectDropTarget)(\n        <div style={style} className=\"gp-drop-zone\">\n          <i className=\"fa fa-home c-bs-primary gp-icon\" />\n          <GpContent reaction={reaction} />\n        </div>,\n      )\n      : null\n  );\n};\n\nexport default compose(\n  DropTarget(DragDropItemTypes.GENERALPROCEDURE, gpTarget, gpDropCollect),\n)(GeneralProcedureDnd);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Row, Col, FormGroup, ControlLabel, FormControl, Button,\n  InputGroup, OverlayTrigger, Tooltip\n} from 'react-bootstrap';\nimport 'moment-precise-range-plugin';\nimport Clipboard from 'clipboard';\nimport { permitOn } from 'src/components/common/uis';\nimport HelpInfo from 'src/components/common/HelpInfo';\n\nexport default class ReactionDetailsDuration extends Component {\n  constructor(props) {\n    super(props);\n    props.reaction.convertDurationDisplay();\n    this.setCurrentTime = this.setCurrentTime.bind(this);\n    this.copyToDuration = this.copyToDuration.bind(this);\n    this.handleDurationChange = this.handleDurationChange.bind(this);\n  }\n\n  componentDidMount() {\n    this.clipboard = new Clipboard('.clipboardBtn');\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if (!nextProps.reaction) { return; }\n    nextProps.reaction.convertDurationDisplay();\n  }\n\n  componentWillUnmount() {\n    this.clipboard.destroy();\n  }\n\n  setCurrentTime(type) {\n    const currentTime = new Date().toLocaleString('en-GB').split(', ').join(' ');\n    const { reaction } = this.props;\n    const wrappedEvent = { target: { value: currentTime } };\n    this.props.onInputChange(type, wrappedEvent);\n    if (type === 'timestampStart' && (reaction.status === 'Planned' || !reaction.status)) {\n      this.props.onInputChange('status', { target: { value: 'Running' } });\n    } else if (type === 'timestampStop' && reaction.status === 'Running') {\n      this.props.onInputChange('status', { target: { value: 'Done' } });\n    }\n  }\n\n  changeDurationUnit() {\n    this.props.onInputChange('duration', { nextUnit: true });\n  }\n\n  copyToDuration() {\n    this.props.onInputChange('duration', { fromStartStop: true });\n  }\n\n  handleDurationChange(event) {\n    const nextValue = event.target.value && event.target.value.replace(',', '.');\n    if (!isNaN(nextValue) || nextValue === '') {\n      this.props.onInputChange('duration', { nextValue });\n    }\n  }\n\n  render() {\n    const { reaction } = this.props;\n    const durationCalc = reaction && reaction.durationCalc();\n    const timePlaceholder = 'DD/MM/YYYY hh:mm:ss';\n    return (\n      <Row className=\"small-padding\">\n        <Col md={3} sm={6}>\n          <FormGroup>\n            <ControlLabel>Start</ControlLabel>\n            <InputGroup>\n              <FormControl\n                type=\"text\"\n                value={reaction.timestamp_start || ''}\n                disabled={!permitOn(reaction) || reaction.isMethodDisabled('timestamp_start') || reaction.gaseous}\n                placeholder={timePlaceholder}\n                onChange={event => this.props.onInputChange('timestampStart', event)}\n              />\n              <InputGroup.Button>\n                <Button disabled={!permitOn(reaction) || reaction.gaseous} active style={{ padding: '6px' }} onClick={() => this.setCurrentTime('timestampStart')}>\n                  <i className=\"fa fa-clock-o\" aria-hidden=\"true\" />\n                </Button>\n              </InputGroup.Button>\n            </InputGroup>\n          </FormGroup>\n        </Col>\n        <Col md={3} sm={6}>\n          <FormGroup>\n            <ControlLabel>Stop</ControlLabel>\n            <InputGroup>\n              <FormControl\n                type=\"text\"\n                value={reaction.timestamp_stop || ''}\n                disabled={!permitOn(reaction) || reaction.isMethodDisabled('timestamp_stop') || reaction.gaseous}\n                placeholder={timePlaceholder}\n                onChange={event => this.props.onInputChange('timestampStop', event)}\n              />\n              <InputGroup.Button>\n                <Button disabled={!permitOn(reaction) || reaction.gaseous} active style={{ padding: '6px' }} onClick={() => this.setCurrentTime('timestampStop')}>\n                  <i className=\"fa fa-clock-o\" aria-hidden=\"true\" />\n                </Button>\n              </InputGroup.Button>\n            </InputGroup>\n          </FormGroup>\n        </Col>\n        <Col md={3} sm={6}>\n          <FormGroup>\n            {reaction.is_published ? <ControlLabel>Duration</ControlLabel> : <HelpInfo optionalElement={<ControlLabel>Duration</ControlLabel>} source=\"requiredField\" />}\n            <InputGroup>\n              <FormControl type=\"text\" value={durationCalc || ''} disabled placeholder=\"Duration\" />\n              <InputGroup.Button>\n                <OverlayTrigger\n                  placement=\"bottom\"\n                  overlay={<Tooltip id=\"copy_duration_to_clipboard\">copy to clipboard</Tooltip>}\n                >\n                  <Button disabled={!permitOn(reaction) || reaction.gaseous} active className=\"clipboardBtn\" data-clipboard-text={durationCalc || ' '}>\n                    <i className=\"fa fa-clipboard\" aria-hidden=\"true\" />\n                  </Button>\n                </OverlayTrigger>\n                <OverlayTrigger\n                  placement=\"bottom\"\n                  overlay={<Tooltip id=\"copy_durationCalc_to_duration\">use this duration<br />(rounded to precision 1)</Tooltip>}\n                >\n                  <Button disabled={!permitOn(reaction) || reaction.gaseous} active className=\"clipboardBtn\" onClick={() => this.copyToDuration()}>\n                    <i className=\"fa fa-arrow-right\" aria-hidden=\"true\" />\n                  </Button>\n                </OverlayTrigger>\n              </InputGroup.Button>\n            </InputGroup>\n          </FormGroup>\n        </Col>\n        <Col md={3} sm={6}>\n          <FormGroup>\n            <ControlLabel>&nbsp;</ControlLabel>\n            <InputGroup>\n              <FormControl\n                disabled={!permitOn(reaction) || reaction.gaseous}\n                type=\"text\"\n                value={reaction.durationDisplay.dispValue || ''}\n                inputRef={this.refDuration}\n                placeholder=\"Input Duration...\"\n                onChange={event => this.handleDurationChange(event)}\n              />\n              <InputGroup.Button>\n                <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"switch_duration_unit\">switch duration unit</Tooltip>}>\n                  <Button disabled={!permitOn(reaction) || reaction.gaseous} bsStyle=\"success\" onClick={() => this.changeDurationUnit()}>\n                    {reaction.durationUnit}\n                  </Button>\n                </OverlayTrigger>\n              </InputGroup.Button>\n            </InputGroup>\n          </FormGroup>\n        </Col>\n      </Row>\n    );\n  }\n}\n\nReactionDetailsDuration.propTypes = {\n  reaction: PropTypes.object,\n  onInputChange: PropTypes.func\n};\n\nReactionDetailsDuration.defaultProps = {\n  reaction: {},\n  onInputChange: () => {}\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  ListGroup, ListGroupItem, FormGroup, ControlLabel, FormControl,\n  Row, Col, Collapse, Button, ButtonGroup, InputGroup, Grid,\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport Delta from 'quill-delta';\nimport MaterialGroupContainer from 'src/apps/mydb/elements/details/reactions/schemeTab/MaterialGroupContainer';\nimport Sample from 'src/models/Sample';\nimport Reaction from 'src/models/Reaction';\nimport Molecule from 'src/models/Molecule';\nimport ReactionDetailsMainProperties from 'src/apps/mydb/elements/details/reactions/ReactionDetailsMainProperties';\nimport ReactionDetailsPurification from 'src/apps/mydb/elements/details/reactions/schemeTab/ReactionDetailsPurification';\n\nimport QuillViewer from 'src/components/QuillViewer';\nimport ReactionDescriptionEditor from 'src/apps/mydb/elements/details/reactions/schemeTab/ReactionDescriptionEditor';\n\nimport GeneralProcedureDnd from 'src/apps/mydb/elements/details/reactions/schemeTab/GeneralProcedureDnD';\nimport { rolesOptions, conditionsOptions } from 'src/components/staticDropdownOptions/options';\nimport OlsTreeSelect from 'src/components/OlsComponent';\nimport ReactionDetailsDuration from 'src/apps/mydb/elements/details/reactions/schemeTab/ReactionDetailsDuration';\nimport { permitOn } from 'src/components/common/uis';\n\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport TextTemplateActions from 'src/stores/alt/actions/TextTemplateActions';\nimport TextTemplateStore from 'src/stores/alt/stores/TextTemplateStore';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport {\n  convertTemperature,\n  convertTime,\n  convertTurnoverFrequency,\n  calculateFeedstockMoles,\n} from 'src/utilities/UnitsConversion';\nimport GasPhaseReactionActions from 'src/stores/alt/actions/GasPhaseReactionActions';\nimport GasPhaseReactionStore from 'src/stores/alt/stores/GasPhaseReactionStore';\nimport { parseNumericString } from 'src/utilities/MathUtils';\n\nimport HelpInfo from 'src/components/common/HelpInfo';\n\nexport default class ReactionDetailsScheme extends Component {\n  constructor(props) {\n    super(props);\n\n    const { reaction } = props;\n\n    const textTemplate = TextTemplateStore.getState().reactionDescription;\n    this.state = {\n      reaction,\n      lockEquivColumn: false,\n      cCon: false,\n      displayYieldField: null,\n      reactionDescTemplate: textTemplate.toJS(),\n      open: true,\n    };\n\n    this.reactQuillRef = React.createRef();\n    this.additionQuillRef = React.createRef();\n\n    this.handleTemplateChange = this.handleTemplateChange.bind(this);\n\n    this.onReactionChange = this.onReactionChange.bind(this);\n    this.onChangeRole = this.onChangeRole.bind(this);\n    this.renderRole = this.renderRole.bind(this);\n    this.addSampleTo = this.addSampleTo.bind(this);\n    this.dropMaterial = this.dropMaterial.bind(this);\n    this.dropSample = this.dropSample.bind(this);\n    this.switchEquiv = this.switchEquiv.bind(this);\n    this.switchYield = this.switchYield.bind(this);\n    this.handleOnConditionSelect = this.handleOnConditionSelect.bind(this);\n    this.updateTextTemplates = this.updateTextTemplates.bind(this);\n    this.reactionVesselSize = this.reactionVesselSize.bind(this);\n    this.updateVesselSize = this.updateVesselSize.bind(this);\n    this.updateVesselSizeOnBlur = this.updateVesselSizeOnBlur.bind(this);\n    this.changeVesselSizeUnit = this.changeVesselSizeUnit.bind(this);\n  }\n\n  componentDidMount() {\n    TextTemplateStore.listen(this.handleTemplateChange);\n\n    TextTemplateActions.fetchTextTemplates('reaction');\n    TextTemplateActions.fetchTextTemplates('reactionDescription');\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const { reaction } = nextProps;\n    this.setState({ reaction });\n  }\n\n  componentWillUnmount() {\n    TextTemplateStore.unlisten(this.handleTemplateChange);\n    this.resetGasPhaseStore();\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  updateTextTemplates(textTemplate) {\n    TextTemplateActions.updateTextTemplates('reactionDescription', textTemplate);\n  }\n\n  dropSample(srcSample, tagMaterial, tagGroup, extLabel, isNewSample = false) {\n    const { reaction } = this.state;\n    let splitSample;\n\n    if (srcSample instanceof Molecule || isNewSample) {\n      // Create new Sample with counter\n      splitSample = Sample.buildNew(srcSample, reaction.collection_id, tagGroup);\n    } else if (srcSample instanceof Sample) {\n      if (tagGroup === 'reactants' || tagGroup === 'solvents') {\n        // Skip counter for reactants or solvents\n        splitSample = srcSample.buildChildWithoutCounter();\n        splitSample.short_label = tagGroup.slice(0, -1);\n      } else {\n        splitSample = srcSample.buildChild();\n      }\n    }\n    splitSample.show_label = (splitSample.decoupled && !splitSample.molfile) ? true : splitSample.show_label;\n    if (tagGroup == 'solvents') {\n      splitSample.reference = false;\n    }\n\n    this.insertSolventExtLabel(splitSample, tagGroup, extLabel);\n    reaction.addMaterialAt(splitSample, null, tagMaterial, tagGroup);\n    this.onReactionChange(reaction, { schemaChanged: true });\n  }\n\n  insertSolventExtLabel(splitSample, materialGroup, external_label) {\n    if (external_label && materialGroup === 'solvents' && !splitSample.external_label) {\n      splitSample.external_label = external_label;\n    }\n  }\n\n  onChangeRole(e) {\n    const { onInputChange } = this.props;\n    const value = e && e.value;\n    onInputChange('role', value);\n  }\n\n  switchEquiv() {\n    const { lockEquivColumn } = this.state;\n    this.setState({ lockEquivColumn: !lockEquivColumn });\n  }\n\n  switchYield = (shouldDisplayYield) => {\n    const { displayYieldField } = this.state;\n    this.setState({ displayYieldField: shouldDisplayYield ?? !displayYieldField });\n  };\n\n  handleOnConditionSelect(eventKey) {\n    const { reaction } = this.props;\n    const val = eventKey.value;\n    if (reaction.conditions == null || reaction.conditions.length === 0) {\n      reaction.conditions = `${val} `;\n    } else {\n      reaction.conditions += `\\n${val} `;\n    }\n    this.props.onReactionChange(reaction, { schemaChanged: true });\n  }\n\n  renderGPDnD() {\n    const { reaction } = this.props;\n    return (\n      <GeneralProcedureDnd\n        reaction={reaction}\n      />\n    );\n  }\n\n  renderRolesOptions(opt) {\n    const className = `fa ${opt.icon} ${opt.bsStyle}`;\n    return (\n      <span>\n        <i className={className} />\n        <span className=\"spacer-10\" />\n        {opt.label}\n      </span>\n    );\n  }\n\n  renderRoleSelect() {\n    const { role } = this.props.reaction;\n    return (\n      <Select\n        disabled={!permitOn(this.props.reaction)}\n        name=\"role\"\n        options={rolesOptions}\n        optionRenderer={this.renderRolesOptions}\n        multi={false}\n        clearable\n        value={role}\n        onChange={this.onChangeRole}\n      />\n    );\n  }\n\n  renderRole() {\n    const { reaction } = this.props;\n    const { role } = reaction;\n    let accordTo;\n    let width;\n    if (role === 'parts') {\n      accordTo = 'According to';\n      width = 2;\n    } else {\n      accordTo = null;\n      width = 4;\n    }\n    return (\n      <>\n        <Col md={width}>\n          <FormGroup>\n            <ControlLabel>Role</ControlLabel>\n            {this.renderRoleSelect()}\n          </FormGroup>\n        </Col>\n        {role === 'parts' && (\n          <Col md={2}>\n            <FormGroup>\n              <ControlLabel>{accordTo}</ControlLabel>\n              {this.renderGPDnD()}\n            </FormGroup>\n          </Col>\n        )}\n      </>\n    );\n  }\n\n  deleteMaterial(material, materialGroup) {\n    const { reaction } = this.state;\n    reaction.deleteMaterial(material, materialGroup);\n\n    // only reference of 'starting_materials' or 'reactants' triggers updatedReactionForReferenceChange\n    // only when reaction.referenceMaterial not exist triggers updatedReactionForReferenceChange\n    const referenceRelatedGroup = ['starting_materials', 'reactants'];\n    if (referenceRelatedGroup.includes(materialGroup) && (!reaction.referenceMaterial)) {\n      if (reaction[materialGroup].length === 0) {\n        const refMaterialGroup = materialGroup === 'starting_materials' ? 'reactants' : 'starting_materials';\n        if (reaction[refMaterialGroup].length > 0) {\n          const event = {\n            type: 'referenceChanged',\n            refMaterialGroup,\n            sampleID: reaction[refMaterialGroup][0].id,\n            value: 'on'\n          };\n          this.updatedReactionForReferenceChange(event);\n        }\n      } else {\n        const event = {\n          type: 'referenceChanged',\n          materialGroup,\n          sampleID: reaction[materialGroup][0].id,\n          value: 'on'\n        };\n        this.updatedReactionForReferenceChange(event);\n      }\n    }\n\n    this.onReactionChange(reaction, { schemaChanged: true });\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  updateDraggedMaterialGasType(reaction, srcMat, srcGroup, tagMat, tagGroup) {\n    const updatedSample = reaction.sampleById(srcMat.id);\n    const conditions = tagGroup === 'solvents'\n    || ((srcGroup === 'reactants' || srcGroup === 'starting_materials') && tagGroup === 'products')\n    || ((srcGroup === 'products') && (tagGroup === 'reactants' || tagGroup === 'starting_materials'));\n    if (conditions) {\n      updatedSample.gas_type = 'off';\n    }\n  }\n\n  dropMaterial(srcMat, srcGroup, tagMat, tagGroup) {\n    const { reaction } = this.state;\n    this.updateDraggedMaterialGasType(reaction, srcMat, srcGroup, tagMat, tagGroup);\n    reaction.moveMaterial(srcMat, srcGroup, tagMat, tagGroup);\n    this.onReactionChange(reaction, { schemaChanged: true });\n  }\n\n  onReactionChange(reaction, options = {}) {\n    this.props.onReactionChange(reaction, options);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  resetGasPhaseStore() {\n    GasPhaseReactionActions.setReactionVesselSize(null);\n    GasPhaseReactionActions.setCatalystReferenceMole(null);\n  }\n\n  handleTemplateChange(state) {\n    this.setState({\n      reactionDescTemplate: state.reactionDescription.toJS()\n    });\n  }\n\n  handleMaterialsChange(changeEvent) {\n    switch (changeEvent.type) {\n      case 'referenceChanged':\n        this.onReactionChange(\n          this.updatedReactionForReferenceChange(changeEvent)\n        );\n        break;\n      case 'showLabelChanged':\n        this.onReactionChange(\n          this.updatedReactionForShowLabelChange(changeEvent)\n        );\n        break;\n      case 'amountChanged':\n        this.onReactionChange(\n          this.updatedReactionForAmountChange(changeEvent)\n        );\n        break;\n      case 'amountUnitChanged':\n        this.onReactionChange(\n          this.updatedReactionForAmountUnitChange(changeEvent)\n        );\n        break;\n      case 'MetricsChanged':\n        this.onReactionChange(\n          this.updatedReactionForMetricsChange(changeEvent)\n        );\n        break;\n      case 'loadingChanged':\n        this.onReactionChange(\n          this.updatedReactionForLoadingChange(changeEvent)\n        );\n        break;\n      case 'coefficientChanged':\n        this.onReactionChange(\n          this.updatedReactionForCoefficientChange(changeEvent)\n        );\n        break;\n      case 'amountTypeChanged':\n        this.onReactionChange(\n          this.updatedReactionForAmountTypeChange(changeEvent)\n        );\n        break;\n      case 'equivalentChanged':\n        this.onReactionChange(\n          this.updatedReactionForEquivalentChange(changeEvent)\n        );\n        break;\n      case 'externalLabelChanged':\n        this.onReactionChange(\n          this.updatedReactionForExternalLabelChange(changeEvent)\n        );\n        break;\n      case 'drysolventChanged':\n        this.onReactionChange(\n          this.updatedReactionForDrySolventChange(changeEvent)\n        );\n        break;\n      case 'externalLabelCompleted':\n        const { reaction } = this.state;\n        this.onReactionChange(reaction, { schemaChanged: true });\n        break;\n      case 'addToDesc':\n        this.addSampleTo(changeEvent, 'description');\n        this.addSampleTo(changeEvent, 'observation');\n        break;\n      case 'gasType':\n        this.onReactionChange(\n          this.updatedReactionForGasTypeChange(changeEvent)\n        );\n        break;\n      case 'gasFieldsChanged':\n        this.onReactionChange(\n          this.updatedReactionForGasProductFieldsChange(changeEvent)\n        );\n        break;\n      case 'gasFieldsUnitsChanged':\n        this.onReactionChange(\n          this.updatedReactionForGasFieldsUnitsChange(changeEvent)\n        );\n        break;\n      case 'conversionRateChanged':\n        this.onReactionChange(\n          this.updatedReactionForConversionRateChange(changeEvent)\n        );\n        break;\n      default:\n        break;\n    }\n  }\n\n  addSampleTo(e, type) {\n    const { paragraph } = e;\n    let quillEditor = this.reactQuillRef.current.editor;\n    if (type === 'observation') quillEditor = this.additionQuillRef.current.editor;\n    const range = quillEditor.getSelection();\n    if (range) {\n      let contents = quillEditor.getContents();\n      let insertOps = [{ insert: paragraph }];\n      const insertDelta = new Delta(insertOps);\n      if (range.index > 0) {\n        insertOps = [{ retain: range.index }].concat(insertOps);\n      }\n      const elementDelta = new Delta(insertOps);\n      contents = contents.compose(elementDelta);\n      quillEditor.setContents(contents);\n      range.length = 0;\n      range.index += insertDelta.length();\n      quillEditor.setSelection(range);\n      this.props.onInputChange(type, new Delta(contents));\n    }\n  }\n\n  updatedReactionForExternalLabelChange(changeEvent) {\n    const { sampleID, externalLabel } = changeEvent;\n    const updatedSample = this.props.reaction.sampleById(sampleID);\n\n    updatedSample.external_label = externalLabel;\n\n    return this.updatedReactionWithSample(this.updatedSamplesForExternalLabelChange.bind(this), updatedSample);\n  }\n\n  updatedReactionForDrySolventChange(changeEvent) {\n    const { sampleID, dry_solvent } = changeEvent;\n    const updatedSample = this.props.reaction.sampleById(sampleID);\n\n    updatedSample.dry_solvent = dry_solvent;\n\n    return this.updatedReactionWithSample(this.updatedSamplesForDrySolventChange.bind(this), updatedSample);\n  }\n\n  updatedReactionForReferenceChange(changeEvent) {\n    const { sampleID } = changeEvent;\n    const { reaction } = this.state;\n    const sample = reaction.sampleById(sampleID);\n\n    reaction.markSampleAsReference(sampleID);\n\n    return this.updatedReactionWithSample(this.updatedSamplesForReferenceChange.bind(this), sample);\n  }\n\n  updatedReactionForShowLabelChange(changeEvent) {\n    const { sampleID, value } = changeEvent;\n    const { reaction } = this.state;\n    const sample = reaction.sampleById(sampleID);\n\n    reaction.toggleShowLabelForSample(sampleID);\n    this.onReactionChange(reaction, { schemaChanged: true });\n\n    return this.updatedReactionWithSample(this.updatedSamplesForShowLabelChange.bind(this), sample);\n  }\n\n  updatedReactionForAmountChange(changeEvent) {\n    const { sampleID, amount } = changeEvent;\n    const updatedSample = this.props.reaction.sampleById(sampleID);\n\n    // normalize to milligram\n    updatedSample.setAmountAndNormalizeToGram(amount);\n\n    return this.updatedReactionWithSample(this.updatedSamplesForAmountChange.bind(this), updatedSample);\n  }\n\n  updatedReactionForAmountUnitChange(changeEvent) {\n    const { sampleID, amount } = changeEvent;\n    const updatedSample = this.props.reaction.sampleById(sampleID);\n    // normalize to milligram\n    // updatedSample.setAmountAndNormalizeToGram(amount);\n    // setAmount should be called first before updating feedstock mole and volume values\n    updatedSample.setAmount(amount);\n\n    if (updatedSample.gas_type === 'catalyst') {\n      GasPhaseReactionActions.setCatalystReferenceMole(updatedSample.amount_mol);\n    }\n\n    return this.updatedReactionWithSample(this.updatedSamplesForAmountChange.bind(this), updatedSample);\n  }\n\n  updatedReactionForMetricsChange(changeEvent) {\n    const { sampleID, metricUnit, metricPrefix } = changeEvent;\n    const updatedSample = this.props.reaction.sampleById(sampleID);\n    updatedSample.setUnitMetrics(metricUnit, metricPrefix);\n\n    return this.updatedReactionWithSample(this.updatedSamplesForAmountChange.bind(this), updatedSample);\n  }\n\n  updatedReactionForLoadingChange(changeEvent) {\n    const { sampleID, amountType } = changeEvent;\n    const updatedSample = this.props.reaction.sampleById(sampleID);\n\n    updatedSample.amountType = amountType;\n\n    return this.updatedReactionWithSample(this.updatedSamplesForAmountChange.bind(this), updatedSample);\n  }\n\n  updatedReactionForAmountTypeChange(changeEvent) {\n    const { sampleID, amountType } = changeEvent;\n    const updatedSample = this.props.reaction.sampleById(sampleID);\n\n    updatedSample.amountType = amountType;\n\n    return this.updatedReactionWithSample(this.updatedSamplesForAmountChange.bind(this), updatedSample);\n  }\n\n  updatedReactionForCoefficientChange(changeEvent) {\n    const { sampleID, coefficient } = changeEvent;\n    const updatedSample = this.props.reaction.sampleById(sampleID);\n\n    updatedSample.coefficient = coefficient;\n    this.updatedReactionForEquivalentChange(changeEvent);\n\n    return this.updatedReactionWithSample(this.updatedSamplesForCoefficientChange.bind(this), updatedSample);\n  }\n\n  updatedReactionForEquivalentChange(changeEvent) {\n    const { sampleID, equivalent } = changeEvent;\n    const updatedSample = this.props.reaction.sampleById(sampleID);\n\n    updatedSample.equivalent = equivalent;\n\n    return this.updatedReactionWithSample(this.updatedSamplesForEquivalentChange.bind(this), updatedSample);\n  }\n\n  calculateEquivalentForProduct(sample, referenceMaterial, stoichiometryCoeff) {\n    const vesselVolume = GasPhaseReactionStore.getState().reactionVesselSizeValue;\n    if (sample.gas_type === 'gas') {\n      const result = this.calculateEquivalentForGasProduct(sample, vesselVolume);\n      const equivalent = result > 1 ? 1 : result;\n      return { ...sample, equivalent };\n    }\n    const numerator = referenceMaterial.amount_mol * stoichiometryCoeff * sample.molecule_molecular_weight;\n    const maxAmount = numerator / (sample.purity || 1);\n    let equivalent = maxAmount !== 0 ? (sample.amount_g / maxAmount) : 0;\n    if (sample.amount_g > maxAmount) {\n      equivalent = 1;\n      this.triggerNotification(sample.decoupled);\n    }\n    return { ...sample, equivalent };\n  }\n\n  updatedReactionForGasTypeChange(changeEvent) {\n    const {\n      sampleID,\n      materialGroup,\n      value\n    } = changeEvent;\n    const { reaction } = this.props;\n    let updatedSample = reaction.sampleById(sampleID);\n    const isFeedstockMaterialPresent = reaction.isFeedstockMaterialPresent();\n    if (materialGroup === 'products') {\n      if (value === 'gas') {\n        updatedSample.gas_type = 'off';\n      } else {\n        updatedSample.gas_type = 'gas';\n      }\n      if (!updatedSample.gas_phase_data) {\n        updatedSample.gas_phase_data = null;\n      }\n      const { referenceMaterial } = reaction;\n      const stoichiometryCoeff = (updatedSample.coefficient || 1.0) / (referenceMaterial?.coefficient || 1.0);\n      if (referenceMaterial && stoichiometryCoeff) {\n        updatedSample = this.calculateEquivalentForProduct(updatedSample, referenceMaterial, stoichiometryCoeff);\n      }\n    } else if (materialGroup === 'starting_materials' || materialGroup === 'reactants') {\n      if (isFeedstockMaterialPresent && value === 'off') {\n        updatedSample.gas_type = 'catalyst';\n      } else if (value === 'FES') {\n        updatedSample.gas_type = 'off';\n      } else if (value === 'CAT') {\n        updatedSample.gas_type = 'off';\n        GasPhaseReactionActions.setCatalystReferenceMole(null);\n      } else if (value === 'off' && !isFeedstockMaterialPresent) {\n        updatedSample.gas_type = 'feedstock';\n      } else if (value === 'off') {\n        updatedSample.gas_type = 'catalyst';\n      }\n    }\n    if (updatedSample.gas_type === 'catalyst') {\n      GasPhaseReactionActions.setCatalystReferenceMole(updatedSample.amount_mol);\n    }\n    return this.updatedReactionWithSample(this.updatedSamplesForGasTypeChange.bind(this), updatedSample);\n  }\n\n  updatedReactionForGasProductFieldsChange(changeEvent) {\n    const {\n      sampleID,\n      value,\n      materialGroup,\n      field\n    } = changeEvent;\n    const { reaction } = this.props;\n    const updatedSample = reaction.sampleById(sampleID);\n    if (materialGroup === 'products' && updatedSample.gas_type === 'gas') {\n      switch (field) {\n        case 'temperature':\n        case 'time':\n        case 'turnover_frequency':\n          updatedSample.gas_phase_data[field].value = value;\n          break;\n        case 'turnover_number':\n          updatedSample.gas_phase_data.turnover_number = value;\n          break;\n        case 'part_per_million':\n          updatedSample.gas_phase_data.part_per_million = value;\n          break;\n        default:\n          break;\n      }\n      if (field === 'temperature' || field === 'part_per_million') {\n        const vesselVolume = GasPhaseReactionStore.getState().reactionVesselSizeValue;\n        updatedSample.amount_value = updatedSample.updateGasMoles(vesselVolume);\n        const equivalent = this.calculateEquivalentForGasProduct(updatedSample);\n        updatedSample.equivalent = equivalent;\n        if (equivalent > 1) {\n          updatedSample.equivalent = 1;\n          setTimeout(() => this.triggerNotification(updatedSample.decoupled), 200);\n        }\n      } else if (field === 'time') {\n        const gasPhaseTime = updatedSample.gas_phase_data.time;\n        const tonValue = updatedSample.gas_phase_data.turnover_number;\n        updatedSample.updateTONPerTimeValue(tonValue, gasPhaseTime);\n      }\n    }\n    return this.updatedReactionWithSample(\n      this.updatedSamplesForGasProductFieldsChange.bind(this),\n      updatedSample,\n      field\n    );\n  }\n\n  updatedReactionForGasFieldsUnitsChange(changeEvent) {\n    const {\n      sampleID,\n      unit,\n      value,\n      field,\n    } = changeEvent;\n    const { reaction } = this.props;\n    const updatedSample = reaction.sampleById(sampleID);\n    let convertedValues;\n    if (field === 'temperature') {\n      convertedValues = convertTemperature(value, unit);\n    } else if (field === 'time') {\n      convertedValues = convertTime(value, unit);\n    } else if (field === 'turnover_frequency') {\n      convertedValues = convertTurnoverFrequency(value, unit);\n    }\n    if (convertedValues) {\n      updatedSample.gas_phase_data[field].value = convertedValues[0];\n      updatedSample.gas_phase_data[field].unit = convertedValues[1];\n    }\n\n    return this.updatedReactionWithSample(\n      this.updatedSamplesForGasProductFieldsChange.bind(this),\n      updatedSample,\n      field\n    );\n  }\n\n  updatedReactionForConversionRateChange(changeEvent) {\n    const { reaction } = this.props;\n    const { sampleID, conversionRate } = changeEvent;\n    const updatedSample = reaction.sampleById(sampleID);\n\n    updatedSample.conversion_rate = conversionRate;\n    if (conversionRate / 100 > 1) {\n      NotificationActions.add({\n        message: 'conversion rate cannot be more than 100%',\n        level: 'warning'\n      });\n    }\n\n    return this.updatedReactionWithSample(this.updatedSamplesForConversionRateChange.bind(this), updatedSample);\n  }\n\n  calculateEquivalent(refM, updatedSample) {\n    if (!refM.contains_residues) {\n      NotificationActions.add({\n        message: 'Cannot perform calculations for loading and equivalent',\n        level: 'error'\n      });\n\n      return 1.0;\n    }\n\n    if (!refM.loading) {\n      NotificationActions.add({\n        message: 'Please set non-zero starting material loading',\n        level: 'error'\n      });\n\n      return 0.0;\n    }\n\n    let loading = refM.residues[0].custom_info.loading;\n    let mass_koef = updatedSample.amount_g / refM.amount_g;\n    let mwb = updatedSample.molecule.molecular_weight;\n    let mwa = refM.molecule.molecular_weight;\n    let mw_diff = mwb - mwa;\n    let equivalent = (1000.0 / loading) * (mass_koef - 1.0) / mw_diff;\n\n    if (equivalent < 0.0 || equivalent > 1.0 || isNaN(equivalent) || !isFinite(equivalent)) {\n      equivalent = 1.0;\n    }\n\n    return equivalent;\n  }\n\n  checkMassMolecule(referenceM, updatedS) {\n    let errorMsg;\n    let mFull;\n    const mwb = updatedS.decoupled ? (updatedS.molecular_mass || 0) : updatedS.molecule.molecular_weight;\n\n    // mass check apply to 'polymers' only\n    if (!updatedS.contains_residues) {\n      mFull = referenceM.amount_mol * mwb;\n      const maxTheoAmount = mFull * (updatedS.coefficient || 1.0 / referenceM.coefficient || 1.0);\n      if (updatedS.amount_g > maxTheoAmount) {\n        errorMsg = 'Experimental mass value is larger than possible\\n' +\n          'by 100% conversion! Please check your data.';\n      }\n    } else {\n      const mwa = referenceM.decoupled ? (referenceM.molecular_mass || 0) : referenceM.molecule.molecular_weight;\n      const deltaM = mwb - mwa;\n      const massA = referenceM.amount_g;\n      mFull = massA + (referenceM.amount_mol * deltaM);\n      const massExperimental = updatedS.amount_g;\n\n      if (deltaM > 0) { // expect weight gain\n        if (massExperimental > mFull) {\n          errorMsg = 'Experimental mass value is larger than possible\\n' +\n            'by 100% conversion! Please check your data.';\n        } else if (massExperimental < massA) {\n          errorMsg = 'Material loss! ' +\n            'Experimental mass value is less than possible!\\n' +\n            'Please check your data.';\n        }\n      } else if (massExperimental < mFull) { // expect weight loss\n        errorMsg = 'Experimental mass value is less than possible\\n' +\n          'by 100% conversion! Please check your data.';\n      }\n    }\n\n    updatedS.maxAmount = mFull;\n\n    if (errorMsg && !updatedS.decoupled) {\n      updatedS.error_mass = true;\n      NotificationActions.add({\n        message: errorMsg,\n        level: 'error',\n      });\n    } else {\n      updatedS.error_mass = false;\n    }\n\n    return { mFull, errorMsg };\n  }\n\n  checkMassPolymer(referenceM, updatedS, massAnalyses) {\n    const equivalent = this.calculateEquivalent(referenceM, updatedS);\n    updatedS.equivalent = equivalent;\n    let fconv_loading = referenceM.amount_mol / updatedS.amount_g * 1000.0;\n    updatedS.residues[0].custom_info['loading_full_conv'] = fconv_loading;\n    updatedS.residues[0].custom_info['loading_type'] = 'mass_diff';\n\n    let newAmountMol;\n\n    if (equivalent < 0.0 || equivalent > 1.0) {\n      updatedS.adjusted_equivalent = equivalent > 1.0 ? 1.0 : 0.0;\n      updatedS.adjusted_amount_mol = referenceM.amount_mol;\n      updatedS.adjusted_loading = fconv_loading;\n      updatedS.adjusted_amount_g = updatedS.amount_g;\n      newAmountMol = referenceM.amount_mol;\n    }\n\n    newAmountMol = referenceM.amount_mol * equivalent;\n    const newLoading = (newAmountMol / updatedS.amount_g) * 1000.0;\n\n    updatedS.residues[0].custom_info.loading = newLoading;\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  triggerNotification(isDecoupled) {\n    if (!isDecoupled) {\n      const errorMsg = 'Experimental mass value is larger than possible\\n'\n        + 'by 100% conversion! Please check your data.';\n      NotificationActions.add({\n        message: errorMsg,\n        level: 'error',\n      });\n    }\n  }\n\n  updatedSamplesForAmountChange(samples, updatedSample, materialGroup) {\n    const { referenceMaterial } = this.props.reaction;\n    const { lockEquivColumn } = this.state;\n    const vesselVolume = GasPhaseReactionStore.getState().reactionVesselSizeValue;\n    let stoichiometryCoeff = 1.0;\n\n    return samples.map((sample) => {\n      stoichiometryCoeff = (sample.coefficient || 1.0) / (referenceMaterial?.coefficient || 1.0);\n      if (referenceMaterial) {\n        if (sample.id === updatedSample.id) {\n          if (!updatedSample.reference && referenceMaterial.amount_value) {\n            if (materialGroup === 'products') {\n              if (updatedSample.contains_residues && updatedSample.gas_type !== 'gas') {\n                const massAnalyses = this.checkMassMolecule(referenceMaterial, updatedSample);\n                this.checkMassPolymer(referenceMaterial, updatedSample, massAnalyses);\n                return sample;\n              }\n              sample.maxAmount = referenceMaterial.amount_mol * stoichiometryCoeff * sample.molecule_molecular_weight / (sample.purity || 1);\n              // yield taking into account stoichiometry:\n              if (updatedSample.gas_type === 'gas') {\n                const equivalent = this.calculateEquivalentForGasProduct(sample, vesselVolume);\n                sample.equivalent = equivalent > 1 ? 1 : equivalent;\n              } else {\n                sample.equivalent = sample.amount_mol / referenceMaterial.amount_mol / stoichiometryCoeff;\n              }\n            } else {\n              if (!lockEquivColumn) {\n                sample.equivalent = sample.amount_g / sample.maxAmount;\n              } else {\n                if (referenceMaterial && referenceMaterial.amount_value && updatedSample.gas_type !== 'feedstock') {\n                  sample.setAmountAndNormalizeToGram({\n                    value: sample.equivalent * referenceMaterial.amount_mol,\n                    unit: 'mol',\n                  });\n                } else if (sample.amount_value && updatedSample.gas_type !== 'feedstock') {\n                  sample.setAmountAndNormalizeToGram({\n                    value: sample.equivalent * sample.amount_mol,\n                    unit: 'mol'\n                  });\n                }\n\n              }\n            }\n          } else {\n            if (materialGroup === 'products' && sample.gas_type !== 'gas') {\n              sample.equivalent = 0.0;\n            } else {\n              sample.equivalent = 1.0;\n            }\n          }\n        } else {\n          if ((!lockEquivColumn || materialGroup === 'products') && sample.gas_type !== 'gas') {\n            // calculate equivalent, don't touch real amount\n            sample.maxAmount = referenceMaterial.amount_mol * stoichiometryCoeff * sample.molecule_molecular_weight / (sample.purity || 1);\n            // yield taking into account stoichiometry:\n            sample.equivalent = sample.amount_mol / referenceMaterial.amount_mol / stoichiometryCoeff;\n          } else {\n            //sample.amount_mol = sample.equivalent * referenceMaterial.amount_mol;\n            if (referenceMaterial && referenceMaterial.amount_value && updatedSample.gas_type !== 'feedstock' && sample.gas_type !== 'gas') {\n              sample.setAmountAndNormalizeToGram({\n                value: sample.equivalent * referenceMaterial.amount_mol,\n                unit: 'mol',\n              });\n            }\n          }\n        }\n\n        if ((materialGroup === 'starting_materials' || materialGroup === 'reactants') && !sample.reference) {\n          // eslint-disable-next-line no-param-reassign\n          sample.equivalent = sample.amount_mol / referenceMaterial.amount_mol;\n        } else if (materialGroup === 'products'\n          && (sample.equivalent < 0.0 || isNaN(sample.equivalent) || !isFinite(sample.equivalent))\n          && sample.gas_type !== 'gas') {\n          // if (materialGroup === 'products' && (sample.equivalent < 0.0 || sample.equivalent > 1.0 || isNaN(sample.equivalent) || !isFinite(sample.equivalent))) {\n          // eslint-disable-next-line no-param-reassign\n          sample.equivalent = 1.0;\n        } else if ((materialGroup === 'products' && (sample.amount_mol === 0 || referenceMaterial.amount_mol === 0)\n          && sample.gas_type !== 'gas')) {\n          // eslint-disable-next-line no-param-reassign\n          sample.equivalent = 0.0;\n        } else if (materialGroup === 'products' && sample.amount_g > sample.maxAmount && sample.gas_type !== 'gas') {\n          // eslint-disable-next-line no-param-reassign\n          sample.equivalent = 1;\n          this.triggerNotification(sample.decoupled);\n        }\n      }\n\n      if (materialGroup === 'products') {\n        if (typeof (referenceMaterial) !== 'undefined' && referenceMaterial) {\n          sample.maxAmount = referenceMaterial.amount_mol * stoichiometryCoeff * sample.molecule_molecular_weight / (sample.purity || 1);;\n        }\n      }\n      return sample;\n    });\n  }\n\n  calculateEquivalentForGasProduct(sample, reactionVesselSize = null) {\n    const { reaction } = this.state;\n    const vesselVolume = GasPhaseReactionStore.getState().reactionVesselSizeValue;\n    const volume = reactionVesselSize || vesselVolume;\n    const refMaterial = reaction.findFeedstockMaterial();\n    if (!refMaterial || !volume) {\n      return null;\n    }\n    const { purity } = refMaterial;\n    const feedstockMolValue = calculateFeedstockMoles(volume, purity || 1);\n    return (sample.amount_mol / feedstockMolValue);\n  }\n\n  updatedSamplesForEquivalentChange(samples, updatedSample, materialGroup) {\n    const { referenceMaterial } = this.props.reaction;\n    let stoichiometryCoeff = 1.0;\n    return samples.map((sample) => {\n      stoichiometryCoeff = (sample.coefficient || 1.0) / (referenceMaterial?.coefficient || 1.0);\n      if (sample.id === updatedSample.id && updatedSample.equivalent) {\n        sample.equivalent = updatedSample.equivalent;\n        if (referenceMaterial && referenceMaterial.amount_value\n          && updatedSample.gas_type !== 'feedstock') {\n          sample.setAmountAndNormalizeToGram({\n            value: updatedSample.equivalent * referenceMaterial.amount_mol,\n            unit: 'mol',\n          });\n        } else if (sample.amount_value && updatedSample.gas_type !== 'feedstock') {\n          sample.setAmountAndNormalizeToGram({\n            value: updatedSample.equivalent * sample.amount_mol,\n            unit: 'mol'\n          });\n        }\n      }\n      if (typeof (referenceMaterial) !== 'undefined' && referenceMaterial) {\n        /* eslint-disable no-param-reassign, no-unused-expressions */\n        if (materialGroup === 'products') {\n          sample = this.calculateEquivalentForProduct(sample, referenceMaterial, stoichiometryCoeff);\n        } else {\n          // NB: sample equivalent independant of coeff\n          if (sample.reference) {\n            sample.equivalent = sample.reference ? 1 : 0;\n          } else {\n            sample.equivalent = sample.amount_mol / referenceMaterial.amount_mol;\n          }\n        }\n      }\n      return sample;\n    });\n  }\n\n  updatedSamplesForExternalLabelChange(samples, updatedSample) {\n    const { referenceMaterial } = this.props.reaction;\n    return samples.map((sample) => {\n      if (sample.id === updatedSample.id) {\n        sample.external_label = updatedSample.external_label;\n      }\n      return sample;\n    });\n  }\n\n  updatedSamplesForDrySolventChange(samples, updatedSample) {\n    const { referenceMaterial } = this.props.reaction;\n\n    return samples.map((sample) => {\n      if (sample.id === updatedSample.id) {\n        sample.dry_solvent = updatedSample.dry_solvent;\n      }\n      return sample;\n    });\n  }\n\n  updatedSamplesForShowLabelChange(samples, referenceMaterial) {\n    return samples;\n  }\n\n  /* eslint-disable class-methods-use-this, no-param-reassign */\n  updatedSamplesForCoefficientChange(samples, updatedSample) {\n    return samples.map((sample) => {\n      if (sample.id === updatedSample.id) {\n        // set sampple.coefficient to default value, if user set coeff. value to zero\n        if (updatedSample.coefficient % 1 !== 0 || updatedSample.coefficient === 0) {\n          updatedSample.coefficient = 1;\n          sample.coefficient = updatedSample.coefficient;\n          NotificationActions.add({\n            message: 'The sample coefficient should be a positive integer',\n            level: 'error'\n          });\n        } else {\n          sample.coefficient = updatedSample.coefficient;\n        }\n        const rId = sample.belongTo ? sample.belongTo.id : null;\n        ElementActions.setRefreshCoefficient(sample.id, sample.coefficient, rId);\n      }\n      return sample;\n    });\n  }\n\n  updatedSamplesForReferenceChange(samples, referenceMaterial, materialGroup) {\n    return samples.map((sample) => {\n      if (sample.id === referenceMaterial.id) {\n        sample.equivalent = 1.0;\n        sample.reference = true;\n      } else {\n        if (sample.amount_value) {\n          const referenceAmount = referenceMaterial.amount_mol;\n          if (referenceMaterial && referenceAmount) {\n            if (materialGroup === 'products') {\n              sample.equivalent = sample.amount_mol * (referenceMaterial.coefficient || 1) / (referenceAmount * (sample.coefficient || 1));\n            } else {\n              sample.equivalent = sample.amount_mol / referenceAmount;\n            }\n          }\n        }\n        sample.reference = false;\n      }\n      return sample;\n    });\n  }\n\n  updatedSamplesForGasTypeChange(samples, updatedSample) {\n    return samples.map((sample) => {\n      if (sample.id === updatedSample.id) {\n        sample.gas_type = updatedSample.gas_type;\n        sample.equivalent = updatedSample.equivalent;\n      } else if (sample.id !== updatedSample.id) {\n        if ((updatedSample.gas_type === 'feedstock' && sample.gas_type === 'feedstock')\n        || (updatedSample.gas_type === 'catalyst' && sample.gas_type === 'catalyst')) {\n          sample.gas_type = 'off';\n        }\n        if (sample.gas_type === 'gas') {\n          const equivalent = this.calculateEquivalentForGasProduct(sample);\n          sample.equivalent = equivalent;\n        }\n      }\n      return sample;\n    });\n  }\n\n  updatedSamplesForGasProductFieldsChange(samples, updatedSample, MaterialGroup, field) {\n    if (MaterialGroup !== 'products') return samples;\n\n    return samples.map((sample) => {\n      if (sample.id !== updatedSample.id) return sample;\n      const updatedGasPhaseData = { ...sample.gas_phase_data };\n      switch (field) {\n        case 'temperature':\n        case 'time':\n        case 'turnover_frequency':\n          updatedGasPhaseData[field] = {\n            value: updatedSample.gas_phase_data[field].value,\n            unit: updatedSample.gas_phase_data[field].unit\n          };\n          break;\n        case 'turnover_number':\n          updatedGasPhaseData.turnover_number = updatedSample.gas_phase_data[field];\n          break;\n        case 'part_per_million':\n          updatedGasPhaseData.part_per_million = updatedSample.gas_phase_data[field];\n          break;\n        default:\n          break;\n      }\n\n      if (field === 'temperature' || field === 'part_per_million') {\n        sample.equivalent = updatedSample.equivalent;\n      }\n      return {\n        ...sample,\n        gas_phase_data: updatedGasPhaseData\n      };\n    });\n  }\n\n  updatedReactionWithSample(updateFunction, updatedSample, type) {\n    const { reaction } = this.state;\n    reaction.starting_materials = updateFunction(reaction.starting_materials, updatedSample, 'starting_materials', type);\n    reaction.reactants = updateFunction(reaction.reactants, updatedSample, 'reactants', type);\n    reaction.solvents = updateFunction(reaction.solvents, updatedSample, 'solvents', type);\n    reaction.products = updateFunction(reaction.products, updatedSample, 'products', type);\n    return reaction;\n  }\n\n  updatedSamplesForConversionRateChange(samples, updatedSample) {\n    return samples.map((sample) => {\n      if (sample.id === updatedSample.id) {\n        sample.conversion_rate = updatedSample.conversion_rate;\n      }\n      return sample;\n    });\n  }\n\n  solventCollapseBtn() {\n    const { open } = this.state;\n    const arrow = open\n      ? <i className=\"fa fa-angle-double-up\" />\n      : <i className=\"fa fa-angle-double-down\" />;\n    return (\n      <ButtonGroup vertical block>\n        <Button\n          bsSize=\"xsmall\"\n          style={{ backgroundColor: '#ddd' }}\n          onClick={() => this.setState({ open: !open })}\n        >{arrow} &nbsp; Solvents\n        </Button>\n      </ButtonGroup>\n    );\n  }\n\n  conditionsCollapseBtn() {\n    const { cCon } = this.state;\n    const arrow = cCon\n      ? <i className=\"fa fa-angle-double-up\" />\n      : <i className=\"fa fa-angle-double-down\" />;\n    return (\n      <ButtonGroup vertical block>\n        <Button\n          bsSize=\"xsmall\"\n          style={{ backgroundColor: '#ddd' }}\n          onClick={() => this.setState({ cCon: !cCon })}\n        >{arrow} &nbsp; Conditions\n        </Button>\n      </ButtonGroup>\n    );\n  }\n\n  updatesEquivalentForGasProductSamples(samples, vesselVolume) {\n    return samples.map((sample) => {\n      if (sample.gas_type === 'gas') {\n        const equivalent = this.calculateEquivalentForGasProduct(sample, vesselVolume);\n        sample.equivalent = equivalent > 1 ? 1 : equivalent;\n      }\n      return sample;\n    });\n  }\n\n  updateVesselSize(e) {\n    const { onInputChange } = this.props;\n    const { value } = e.target;\n    onInputChange('vesselSizeAmount', value);\n  }\n\n  updateVesselSizeOnBlur(e, unit) {\n    const { onInputChange, reaction } = this.props;\n    const { value } = e.target;\n    const newValue = parseNumericString(value);\n    onInputChange('vesselSizeAmount', newValue);\n    const valueInLiter = unit === 'ml' ? newValue * 0.001 : newValue;\n    GasPhaseReactionActions.setReactionVesselSize(valueInLiter);\n    reaction.products = this.updatesEquivalentForGasProductSamples(reaction.products, valueInLiter);\n    this.onReactionChange(reaction);\n  }\n\n  changeVesselSizeUnit() {\n    const { onInputChange, reaction } = this.props;\n    if (reaction.vessel_size.unit === 'ml') {\n      onInputChange('vesselSizeUnit', 'l');\n    } else if (reaction.vessel_size.unit === 'l') {\n      onInputChange('vesselSizeUnit', 'ml');\n    }\n  }\n\n  reactionVesselSize() {\n    const { reaction } = this.props;\n    return (\n      <Col md={3} className=\"vesselSize\">\n        <InputGroup style={{ width: '100%', paddingRight: '40px' }}>\n          <ControlLabel>Vessel size</ControlLabel>\n          <FormGroup style={{ display: 'flex' }}>\n            <FormControl\n              id=\"reactionVesselSize\"\n              name=\"reaction_vessel_size\"\n              type=\"text\"\n              style={{ height: '36px' }}\n              value={reaction.vessel_size?.amount || ''}\n              disabled={false}\n              onChange={(event) => this.updateVesselSize(event)}\n              onBlur={(event) => this.updateVesselSizeOnBlur(event, reaction.vessel_size.unit)}\n            />\n            <InputGroup.Button>\n              <Button\n                disabled={false}\n                bsStyle=\"success\"\n                onClick={() => this.changeVesselSizeUnit()}\n                style={{ width: '44px', height: '36px' }}\n              >\n                {reaction.vessel_size?.unit || 'ml'}\n              </Button>\n            </InputGroup.Button>\n          </FormGroup>\n        </InputGroup>\n      </Col>\n    );\n  }\n\n  render() {\n    const {\n      reaction,\n      lockEquivColumn,\n      reactionDescTemplate,\n      displayYieldField\n    } = this.state;\n    const minPadding = { padding: '1px 2px 2px 0px' };\n    if (reaction.editedSample !== undefined) {\n      if (reaction.editedSample.amountType === 'target') {\n        this.updatedSamplesForEquivalentChange(reaction.samples, reaction.editedSample);\n      } else { // real amount, so that we update amount in mmol\n        this.updatedSamplesForAmountChange(reaction.samples, reaction.editedSample);\n      }\n      reaction.editedSample = undefined;\n    } else {\n      const { referenceMaterial } = this.props.reaction;\n      reaction.products.map((sample) => {\n        sample.concn = sample.amount_mol / reaction.solventVolume;\n        if (typeof (referenceMaterial) !== 'undefined' && referenceMaterial) {\n          if (sample.contains_residues) {\n            sample.maxAmount = referenceMaterial.amount_g + (referenceMaterial.amount_mol\n              * (sample.molecule.molecular_weight - referenceMaterial.molecule.molecular_weight));\n          }\n        }\n      });\n    }\n\n    if ((typeof (lockEquivColumn) !== 'undefined' && !lockEquivColumn) || !reaction.changed) {\n      reaction.starting_materials.map((sample) => {\n        sample.concn = sample.amount_mol / reaction.solventVolume;\n      });\n      reaction.reactants.map((sample) => {\n        sample.concn = sample.amount_mol / reaction.solventVolume;\n      });\n    }\n\n    // if no reference material then mark first starting material\n    const refM = this.props.reaction.starting_materials[0];\n    if (!this.props.reaction.referenceMaterial && refM) {\n      reaction.markSampleAsReference(refM.id);\n    }\n\n    if (displayYieldField === null) {\n      const allHaveNoConversion = reaction.products.every(\n        (material) => material.conversion_rate && material.conversion_rate !== 0\n      );\n      if (allHaveNoConversion) {\n        this.switchYield(!allHaveNoConversion);\n      }\n    }\n\n    const headReactants = reaction.starting_materials.length ?? 0;\n    return (\n      <div>\n        <ListGroup fill=\"true\">\n          <ListGroupItem style={minPadding}>\n            <MaterialGroupContainer\n              reaction={reaction}\n              materialGroup=\"starting_materials\"\n              materials={reaction.starting_materials}\n              dropMaterial={this.dropMaterial}\n              deleteMaterial={\n                (material, materialGroup) => this.deleteMaterial(material, materialGroup)\n              }\n              dropSample={this.dropSample}\n              showLoadingColumn={!!reaction.hasPolymers()}\n              onChange={changeEvent => this.handleMaterialsChange(changeEvent)}\n              switchEquiv={this.switchEquiv}\n              lockEquivColumn={this.state.lockEquivColumn}\n              headIndex={0}\n            />\n          </ListGroupItem>\n          <ListGroupItem style={minPadding}>\n            <MaterialGroupContainer\n              reaction={reaction}\n              materialGroup=\"reactants\"\n              materials={reaction.reactants}\n              dropMaterial={this.dropMaterial}\n              deleteMaterial={\n                (material, materialGroup) => this.deleteMaterial(material, materialGroup)\n              }\n              dropSample={this.dropSample}\n              showLoadingColumn={!!reaction.hasPolymers()}\n              onChange={changeEvent => this.handleMaterialsChange(changeEvent)}\n              switchEquiv={this.switchEquiv}\n              lockEquivColumn={lockEquivColumn}\n              headIndex={headReactants}\n            />\n          </ListGroupItem>\n          <ListGroupItem style={minPadding}>\n\n            <MaterialGroupContainer\n              reaction={reaction}\n              materialGroup=\"products\"\n              materials={reaction.products}\n              dropMaterial={this.dropMaterial}\n              deleteMaterial={\n                (material, materialGroup) => this.deleteMaterial(material, materialGroup)\n              }\n              dropSample={this.dropSample}\n              showLoadingColumn={!!reaction.hasPolymers()}\n              onChange={changeEvent => this.handleMaterialsChange(changeEvent)}\n              switchEquiv={this.switchEquiv}\n              lockEquivColumn={this.state.lockEquivColumn}\n              switchYield={this.switchYield}\n              displayYieldField={displayYieldField}\n              headIndex={0}\n            />\n          </ListGroupItem>\n          <ListGroupItem style={minPadding}>\n            {this.solventCollapseBtn()}\n            <Collapse in={this.state.open}>\n              <div>\n                <MaterialGroupContainer\n                  reaction={reaction}\n                  materialGroup=\"solvents\"\n                  materials={reaction.solvents}\n                  dropMaterial={this.dropMaterial}\n                  deleteMaterial={\n                    (material, materialGroup) => this.deleteMaterial(material, materialGroup)\n                  }\n                  dropSample={this.dropSample}\n                  showLoadingColumn={!!reaction.hasPolymers()}\n                  onChange={changeEvent => this.handleMaterialsChange(changeEvent)}\n                  switchEquiv={this.switchEquiv}\n                  lockEquivColumn={this.state.lockEquivColumn}\n                  headIndex={0}\n                />\n              </div>\n            </Collapse>\n          </ListGroupItem>\n          <ListGroupItem style={minPadding}>\n            {this.conditionsCollapseBtn()}\n            <Collapse in={this.state.cCon}>\n              <div>\n                <Select\n                  disabled={!permitOn(reaction)}\n                  name=\"default_conditions\"\n                  multi={false}\n                  options={conditionsOptions}\n                  onChange={this.handleOnConditionSelect}\n                />\n                <FormControl\n                  componentClass=\"textarea\"\n                  rows=\"4\"\n                  value={reaction.conditions || ''}\n                  disabled={!permitOn(reaction) || reaction.isMethodDisabled('conditions')}\n                  placeholder=\"Conditions...\"\n                  onChange={event => this.props.onInputChange('conditions', event)}\n                />\n              </div>\n            </Collapse>\n          </ListGroupItem>\n        </ListGroup>\n        <ListGroup>\n          <ListGroupItem>\n            <div className=\"reaction-scheme-props\">\n              <ReactionDetailsMainProperties\n                reaction={reaction}\n                onInputChange={(type, event) => this.props.onInputChange(type, event)}\n              />\n            </div>\n            <ReactionDetailsDuration\n              reaction={reaction}\n              onInputChange={(type, event) => this.props.onInputChange(type, event)}\n            />\n            <Row className=\"small-padding\">\n              <Col md={5}>\n                <FormGroup>\n                  {reaction.is_published ? <ControlLabel>Type (Name Reaction Ontology)</ControlLabel> : <HelpInfo optionalElement={<ControlLabel className=\"field_required\">Type (Name Reaction Ontology)</ControlLabel>} source=\"requiredField\" />}\n                  <OlsTreeSelect\n                    selectName=\"rxno\"\n                    selectedValue={(reaction.rxno && reaction.rxno.trim()) || ''}\n                    onSelectChange={event => this.props.onInputChange('rxno', event.trim())}\n                    selectedDisable={!permitOn(reaction) || reaction.isMethodDisabled('rxno')}\n                  />\n                </FormGroup>\n              </Col>\n              {this.renderRole()}\n              {this.reactionVesselSize()}\n            </Row>\n            <Row>\n              <Col md={12}>\n                <FormGroup>\n                  {reaction.is_published ? <ControlLabel>Description</ControlLabel> : <span><HelpInfo optionalElement={<ControlLabel>Description</ControlLabel>} source=\"requiredField\" />&nbsp;<HelpInfo source=\"description\" place=\"right\" /></span>}\n                  <div className=\"quill-resize\">\n                    {\n                      permitOn(reaction) ?\n                        <ReactionDescriptionEditor\n                          height=\"100%\"\n                          reactQuillRef={this.reactQuillRef}\n                          template={reactionDescTemplate}\n                          value={reaction.description}\n                          updateTextTemplates={this.updateTextTemplates}\n                          onChange={event => this.props.onInputChange('description', event)}\n                        /> : <QuillViewer value={reaction.description} />\n                    }\n                  </div>\n                </FormGroup>\n              </Col>\n            </Row>\n            <ReactionDetailsPurification\n              reaction={reaction}\n              onReactionChange={r => this.onReactionChange(r)}\n              onInputChange={(type, event) => this.props.onInputChange(type, event)}\n              additionQuillRef={this.additionQuillRef}\n            />\n          </ListGroupItem>\n        </ListGroup>\n      </div>\n    );\n  }\n}\n\nReactionDetailsScheme.propTypes = {\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n  onReactionChange: PropTypes.func.isRequired,\n  onInputChange: PropTypes.func.isRequired\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction StringTag({ string }) {\n  const arr = string.match(/<\\s*(\\w+\\b)(?:(?!<\\s*\\/\\s*\\1\\b)[\\s\\S])*<\\s*\\/\\s*\\1\\s*>|[^<]+/g);\n\n  const arrComponents = arr.map((val, idx) => {\n    const subVal = val.match(/<sub[^>]*>([^<]+)<\\/sub>/);\n    if (subVal) return <sub key={`sub_${idx}`}>{ subVal[1] }</sub>;\n\n    const supVal = val.match(/<sup[^>]*>([^<]+)<\\/sup>/);\n    if (supVal) return <sup key={`sup_${idx}`}>{ subVal[1] }</sup>;\n\n    return <span key={val}>{ val }</span>;\n  });\n\n  return <span>{ arrComponents }</span>;\n}\n\nStringTag.propTypes = {\n  string: PropTypes.string.isRequired,\n};\n\nexport default StringTag;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Row, Col, FormGroup, ControlLabel, FormControl, MenuItem,\n  ListGroupItem, ListGroup, InputGroup, DropdownButton\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport 'moment-precise-range-plugin';\nimport Clipboard from 'clipboard';\nimport { dangerousProductsOptions } from 'src/components/staticDropdownOptions/options';\nimport ReactionDetailsMainProperties from 'src/apps/mydb/elements/details/reactions/ReactionDetailsMainProperties';\nimport StringTag from 'src/apps/mydb/elements/details/reactions/propertiesTab/StringTag';\nimport { solventsTL } from 'src/utilities/reactionPredefined';\nimport OlsTreeSelect from 'src/components/OlsComponent';\nimport { permitOn } from 'src/components/common/uis';\nimport HelpInfo from 'src/components/common/HelpInfo';\nimport { EditUserLabels } from 'src/components/UserLabels';\n\nexport default class ReactionDetailsProperties extends Component {\n  constructor(props) {\n    super(props);\n    props.reaction.convertDurationDisplay();\n\n    this.clipboard = new Clipboard('.clipboardBtn');\n    this.handleOnReactionChange = this.handleOnReactionChange.bind(this);\n    this.handleOnSolventSelect = this.handleOnSolventSelect.bind(this);\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if (!nextProps.reaction) { return; }\n    nextProps.reaction.convertDurationDisplay();\n  }\n\n  componentWillUnmount() {\n    this.clipboard.destroy();\n  }\n\n  handleOnReactionChange(reaction) {\n    this.props.onReactionChange(reaction);\n  }\n\n  handleMultiselectChange(type, selectedOptions) {\n    const values = selectedOptions.map(option => option.value);\n    const wrappedEvent = { target: { value: values } };\n    this.props.onInputChange(type, wrappedEvent);\n  }\n\n  handleOnSolventSelect(eventKey) {\n    const { reaction } = this.props;\n\n    let val;\n    if (eventKey > solventsTL.length) {\n      val = '';\n    } else {\n      const key = Object.keys(solventsTL[eventKey])[0];\n      val = solventsTL[eventKey][key];\n    }\n\n    reaction.tlc_solvents = val;\n    this.handleOnReactionChange(reaction);\n  }\n\n  render() {\n    const { reaction } = this.props;\n    const solventsItems = solventsTL.map((x, i) => {\n      const val = Object.keys(x)[0];\n      return (\n        <MenuItem key={i} eventKey={i}>\n          <StringTag key={i} string={val} />\n        </MenuItem>\n      )\n    });\n\n    solventsItems.unshift(\n      <MenuItem key={solventsTL.length + 1} eventKey={solventsTL.length + 1}>\n        -\n      </MenuItem>\n    );\n\n    return (\n      <div>\n        <ListGroup>\n          <ListGroupItem>\n            <div className=\"reaction-scheme-props\">\n              <ReactionDetailsMainProperties\n                reaction={reaction}\n                onInputChange={(type, event) => this.props.onInputChange(type, event)}\n              />\n            </div>\n            <FormGroup>\n              {reaction.is_published ? <ControlLabel>Type (Name Reaction Ontology)</ControlLabel> : <HelpInfo optionalElement={<ControlLabel className=\"field_required\">Type (Name Reaction Ontology)</ControlLabel>} source=\"requiredField\" />}\n              <OlsTreeSelect\n                selectName=\"rxno\"\n                selectedValue={(reaction.rxno && reaction.rxno.trim()) || ''}\n                onSelectChange={event => this.props.onInputChange('rxno', event.trim())}\n                selectedDisable={!permitOn(reaction) || reaction.isMethodDisabled('rxno')}\n              />\n            </FormGroup>\n            <Row>\n              <Col md={12}>\n                <div><b>Dangerous Products</b></div>\n                <Select\n                  name=\"dangerous_products\"\n                  multi\n                  options={dangerousProductsOptions}\n                  value={reaction.dangerous_products}\n                  disabled={!permitOn(reaction) || reaction.isMethodDisabled('dangerous_products')}\n                  onChange={selectedOptions => this.handleMultiselectChange('dangerousProducts', selectedOptions)}\n                />\n              </Col>\n            </Row>\n          </ListGroupItem>\n          <ListGroupItem>\n            <h4 className=\"list-group-item-heading\" >TLC-Control</h4>\n            <Row>\n              <Col md={6}>\n                <FormGroup>\n                  <ControlLabel>Solvents (parts)</ControlLabel>\n                  <FormGroup>\n                    <InputGroup>\n                      <DropdownButton\n                        disabled={!permitOn(reaction)}\n                        componentClass={InputGroup.Button}\n                        id=\"solvents_dd\"\n                        title=\"\"\n                        onSelect={this.handleOnSolventSelect}\n                      >\n                        {solventsItems}\n                      </DropdownButton>\n                      <FormControl\n                        style={{ zIndex: 0 }}\n                        type=\"text\"\n                        value={reaction.tlc_solvents || ''}\n                        disabled={!permitOn(reaction) || reaction.isMethodDisabled('tlc_solvents')}\n                        placeholder=\"Solvents as parts...\"\n                        onChange={event => this.props.onInputChange('tlc_solvents', event)}\n                      />\n                    </InputGroup>\n                  </FormGroup>\n                </FormGroup>\n              </Col>\n              <Col md={6}>\n                <FormGroup>\n                  <ControlLabel>Rf-Value</ControlLabel>\n                  <FormControl\n                    type=\"text\"\n                    value={reaction.rf_value || ''}\n                    disabled={!permitOn(reaction) || reaction.isMethodDisabled('rf_value')}\n                    placeholder=\"Rf-Value...\"\n                    onChange={event => this.props.onInputChange('rfValue', event)}\n                  />\n                </FormGroup>\n              </Col>\n            </Row>\n            <Row>\n              <Col md={12}>\n                <FormGroup>\n                  <ControlLabel>TLC-Description</ControlLabel>\n                  <FormControl\n                    componentClass=\"textarea\"\n                    value={reaction.tlc_description || ''}\n                    disabled={!permitOn(reaction) || reaction.isMethodDisabled('tlc_description')}\n                    placeholder=\"TLC-Description...\"\n                    onChange={event => this.props.onInputChange('tlcDescription', event)}\n                  />\n                </FormGroup>\n              </Col>\n            </Row>\n            <Row>\n              <Col md={12}>\n                <EditUserLabels element={reaction} fnCb={this.handleOnReactionChange} />\n              </Col>\n            </Row>\n          </ListGroupItem>\n        </ListGroup>\n      </div>\n    );\n  }\n}\n\nReactionDetailsProperties.propTypes = {\n  reaction: PropTypes.object,\n  onReactionChange: PropTypes.func,\n  onInputChange: PropTypes.func\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport _ from 'lodash';\nimport { AgGridReact } from 'ag-grid-react';\nimport { Checkbox } from 'react-bootstrap';\n\nimport Sample from 'src/models/Sample';\nimport SampleName from 'src/components/common/SampleName';\n\nfunction floatFormatter(params) {\n  if (isNaN(params.value)) {\n    return 0;\n  }\n  return (params.value || 0).toFixed(4);\n}\n\nfunction MaterialNameWithIupac({ group, node }) {\n  const material = node.data;\n  const skipIupacName = (\n    group === 'reactants' ||\n    group === 'solvents' ||\n    group === 'purification_solvents'\n  );\n\n  let materialName = '';\n  let moleculeIupacName = '';\n\n  if (skipIupacName) {\n    materialName = material.molecule_iupac_name || material.name;\n    if (group === 'solvents' || group === 'purification_solvents') {\n      materialName = material.external_label || '';\n    }\n    if (materialName === null || materialName === '') {\n      materialName = <SampleName sample={material} />;\n    }\n  } else {\n    moleculeIupacName = material.molecule_iupac_name;\n    materialName = material.title() === '' ?\n      <SampleName sample={material} /> :\n      material.title();\n  }\n\n  return (\n    <div>\n      <div>{materialName}</div>\n      <div>{moleculeIupacName}</div>\n    </div>\n  );\n}\n\nfunction WasteCheckbox({ node, toggleWaste }) {\n  const material = node.data;\n  return (\n    <div className=\"waste-chkbx\">\n      <Checkbox\n        checked={material.waste || false}\n        onChange={() => toggleWaste(material)}\n      />\n    </div>\n  );\n}\n\nexport default class GreenMaterialGroup extends React.Component {\n  constructor() {\n    super();\n\n    this.onGridReady = this.onGridReady.bind(this);\n    this.onCoefficientChanged = this.onCoefficientChanged.bind(this);\n    this.toggleWaste = this.toggleWaste.bind(this);\n    this.autoSizeAll = this.autoSizeAll.bind(this);\n  }\n\n  componentDidUpdate() {\n    this.autoSizeAll();\n  }\n\n  onGridReady(params) {\n    this.api = params.api;\n  }\n\n  autoSizeAll() {\n    if (!this.api) return;\n    if (this.api.isDestroyed()) return;\n    this.api.sizeColumnsToFit();\n  }\n\n  onCoefficientChanged(params) {\n    const { materials, onChange } = this.props;\n    const material = materials[params.rowIndex];\n    material.coefficient = params.value;\n\n    onChange();\n  }\n\n  toggleWaste(material) {\n    const { materials, onChange } = this.props;\n    material.waste = !(material.waste || false);\n    this.api.refreshCells();\n    onChange();\n  }\n\n  render() {\n    const {\n      group, materials\n    } = this.props;\n    if (materials && materials.length === 0) return <span />;\n\n    const isProduct = group === 'products';\n    const contents = [];\n\n    const columnDefs = [\n      {\n        headerName: _.startCase(group),\n        width: 170,\n        cellRenderer: MaterialNameWithIupac,\n        cellRendererParams: { group },\n      },\n      { headerName: \"Mass\", field: \"amount_g\", valueFormatter: floatFormatter },\n      {\n        headerName: \"Volume\",\n        field: \"amount_l\",\n        valueFormatter: floatFormatter,\n        width: 86,\n      },\n      {\n        headerName: \"Moles\",\n        field: \"amount_mol\",\n        width: 76,\n        valueFormatter: floatFormatter,\n      },\n      {\n        headerName: 'Equiv.',\n        field: 'equivalent',\n        width: 76,\n        valueFormatter: floatFormatter\n      },\n      {\n        headerName: group === 'products' ? 'Waste' : 'Recyclable',\n        field: 'waste',\n        width: 104,\n        cellRenderer: WasteCheckbox,\n        cellRendererParams: { toggleWaste: this.toggleWaste },\n      },\n      {\n        headerName: 'Coeff',\n        field: 'coefficient',\n        width: 72,\n        editable: true,\n        cellEditor: 'agTextCellEditor',\n      },\n    ];\n\n    const defaultColDef = {\n      editable: false,\n      width: 71,\n      autoHeight: true,\n      resizable: true,\n    };\n\n    return (\n      <div className=\"ag-theme-balham\">\n        <AgGridReact\n          columnDefs={columnDefs}\n          defaultColDef={defaultColDef}\n          onGridReady={this.onGridReady}\n          rowData={materials}\n          domLayout=\"autoHeight\"\n          onCellValueChanged={this.onCoefficientChanged}\n        />\n      </div>\n    );\n  }\n}\n\nGreenMaterialGroup.propTypes = {\n  group: PropTypes.string.isRequired,\n  materials: PropTypes.arrayOf(PropTypes.instanceOf(Sample)).isRequired,\n  onChange: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { AgGridReact } from 'ag-grid-react';\n\nimport Reaction from 'src/models/Reaction';\n\nfunction getWaste(samples) {\n  return samples.filter(s => s.waste);\n}\n\nfunction getNonWaste(samples) {\n  return (samples || []).filter(s => s == null || !s.waste);\n}\n\nfunction sumReducer(acc, cur) {\n  return acc + cur;\n}\n\nfunction floatFormatter(params) {\n  const { value } = params;\n  return value === '' ? value : value.toFixed(2);\n}\n\nexport default class GreenMetrics extends React.Component {\n  constructor() {\n    super();\n\n    this.onGridReady = this.onGridReady.bind(this);\n    this.autoSizeAll = this.autoSizeAll.bind(this);\n  }\n\n  componentDidUpdate() {\n    this.autoSizeAll();\n  }\n\n  onGridReady(params) {\n    this.api = params.api;\n  }\n\n  autoSizeAll() {\n    if (!this.api) return;\n    if (this.api.isDestroyed()) return;\n    this.api.sizeColumnsToFit();\n  }\n\n  render() {\n    const { reaction } = this.props;\n    const startsAmount = reaction.starting_materials\n      .map(x => x.amount_g).reduce(sumReducer, 0);\n    const selectedStartsAmount = getNonWaste(reaction.starting_materials)\n      .map(x => x.amount_g).reduce(sumReducer, 0);\n\n    const reactantsAmount = reaction.reactants\n      .map(x => x.amount_g).reduce(sumReducer, 0);\n    const selectedReactantsAmount = getNonWaste(reaction.reactants)\n      .map(x => x.amount_g).reduce(sumReducer, 0);\n\n    const solventsAmount = reaction.solvents\n      .map(x => x.amount_g).reduce(sumReducer, 0);\n    const selectedSolventsAmount = getNonWaste(reaction.solvents)\n      .map(x => x.amount_g).reduce(sumReducer, 0);\n\n    const pSolventsAmount = (reaction.purification_solvents || [])\n      .map(x => x.amount_g).reduce(sumReducer, 0);\n    const selectedPSolventsAmount = getNonWaste(reaction.purification_solvents)\n      .map(x => x.amount_g).reduce(sumReducer, 0);\n\n    const prodsAmount = (reaction.products || [])\n      .map(x => x.amount_g).reduce(sumReducer, 0);\n    const selectedProductsAmount = getNonWaste(reaction.products)\n      .map(x => x.amount_g).reduce(sumReducer, 0);\n    const wastedProductsAmount = getWaste(reaction.products)\n      .map(x => x.amount_g).reduce(sumReducer, 0);\n\n    const sef = (startsAmount + reactantsAmount + solventsAmount - prodsAmount) / prodsAmount;\n    const cef = (\n      startsAmount + reactantsAmount + solventsAmount +\n      pSolventsAmount - prodsAmount\n    ) / prodsAmount;\n    const cuef = (\n      selectedStartsAmount + selectedReactantsAmount + selectedSolventsAmount +\n      selectedPSolventsAmount - selectedProductsAmount - wastedProductsAmount\n    ) / selectedProductsAmount;\n\n    const aesm = reaction.starting_materials\n      .map(x => x.molecule_molecular_weight * x.coefficient)\n      .reduce(sumReducer, 0);\n    const aep = reaction.products\n      .map(x => x.molecule_molecular_weight * x.coefficient)\n      .reduce(sumReducer, 0);\n    const caep = getNonWaste(reaction.products)\n      .map(x => x.molecule_molecular_weight * x.coefficient)\n      .reduce(sumReducer, 0);\n    const aer = reaction.reactants\n      .map(x => x.equivalent < 0.3 ? 0 : (x.molecule_molecular_weight * x.coefficient))\n      .reduce(sumReducer, 0);\n    const caer = getNonWaste(reaction.reactants)\n      .map(x => x.equivalent < 0.3 ? 0 : (x.molecule_molecular_weight * x.coefficient))\n      .reduce(sumReducer, 0);\n    const ae = (aep / (aesm + aer));\n    const cae = (caep / (aesm + caer));\n\n    const data = [{\n      sef: sef || '',\n      cef: cef || '',\n      cuef: cuef || '',\n      ae: ae,\n      cae: cae,\n    }];\n\n    const columnDefs = [\n      {\n        headerName: 'Simple E factor (sEF)',\n        field: 'sef',\n      },\n      {\n        headerName: 'Complete E factor (cEF)',\n        field: 'cef',\n      },\n      {\n        headerName: 'Custom E factor',\n        field: 'cuef',\n      },\n      {\n        headerName: 'Atom economy (AE)',\n        field: 'ae',\n      },\n      {\n        headerName: 'Custom Atom economy',\n        field: 'cae',\n      },\n    ];\n\n    const defaultColDef = {\n      editable: false,\n      valueFormatter: floatFormatter,\n    };\n\n    return (\n      <div className=\"green-metrics ag-theme-balham\">\n        <AgGridReact\n          enableColResize\n          columnDefs={columnDefs}\n          defaultColDef={defaultColDef}\n          rowData={data}\n          onGridReady={this.onGridReady}\n          headerHeight={68}\n          domLayout=\"autoHeight\"\n        />\n      </div>\n    );\n  }\n}\n\nGreenMetrics.propTypes = {\n  reaction: PropTypes.instanceOf(Reaction).isRequired\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { AgGridReact } from 'ag-grid-react';\n\nimport Reaction from 'src/models/Reaction';\nimport GreenMaterialGroup from 'src/apps/mydb/elements/details/reactions/greenChemistryTab/GreenMaterialGroup';\nimport GreenMetrics from 'src/apps/mydb/elements/details/reactions/greenChemistryTab/GreenMetrics';\n\n\nexport default class GreenChemistry extends Component {\n  constructor() {\n    super();\n\n    this.updateGroupData = this.updateGroupData.bind(this);\n  }\n\n  updateGroupData() {\n    const { reaction, onReactionChange } = this.props;\n    onReactionChange(reaction, { schemaChanged: false });\n  }\n\n  render() {\n    const { reaction, onReactionChange } = this.props;\n\n    const data = [\n      { segment: 'Oil refining', factor: '< 0.1' },\n      { segment: 'Bulk chemicals', factor: '< 1 - 5' },\n      { segment: 'Fine chemicals', factor: '5 - 50' },\n      { segment: 'Pharmaceuticals', factor: '25 - > 100' },\n    ];\n\n    const columnDefs = [\n      {\n        headerName: 'Industry Segment',\n        field: 'segment',\n      },\n      {\n        headerName: 'E factor (kg waste per kg product)',\n        field: 'factor',\n        width: 148,\n      },\n    ];\n\n    const defaultColDef = {\n      editable: false,\n      width: 120,\n      resizable: true,\n    };\n\n    return (\n      <div className=\"green-chemistry\">\n        <GreenMetrics reaction={reaction} />\n        <GreenMaterialGroup\n          group=\"starting_materials\"\n          materials={reaction.starting_materials}\n          onChange={this.updateGroupData}\n        />\n        <GreenMaterialGroup\n          group=\"reactants\"\n          materials={reaction.reactants}\n          onChange={this.updateGroupData}\n        />\n        <GreenMaterialGroup\n          group=\"products\"\n          materials={reaction.products}\n          onChange={this.updateGroupData}\n        />\n        <GreenMaterialGroup\n          group=\"solvents\"\n          materials={reaction.solvents}\n          onChange={this.updateGroupData}\n        />\n        <GreenMaterialGroup\n          group=\"purification_solvents\"\n          materials={reaction.purification_solvents}\n          onChange={this.updateGroupData}\n        />\n        <div className=\"metrics-refs\">\n          <div className=\"ag-theme-balham\">\n            <b>E factor: </b>\n            <a href=\"https://doi.org/10.1039/C6GC02157C\">The E Factor 25 Years on: The Rise of Green Chemistry and Sustainability. </a>\n            <i>Sheldon, Roger A.  Green Chemistry 19, Nr. 1 (3. Januar 2017): 18–43.</i>\n            <br />\n            <br />\n            <b>Atom economy (AE): </b>\n            <a href=\"https://doi.org/10.1126/science.1962206\">The Atom Economy -- a Search for Synthetic Efficiency. </a>\n            <i>Trost, B. M. Science 254, Nr. 5037 (6. Dezember 1991): 1471–77.</i>\n            <br />\n            <br />\n            <b style={{ color: 'rgba(0, 0, 0, 0.54)' }}>\n              Atom economy has a value between 0 (bad) - 1 (very good)\n            </b>\n          </div>\n          <div className=\"e-factor-refs ag-theme-balham\">\n            <AgGridReact\n              columnDefs={columnDefs}\n              defaultColDef={defaultColDef}\n              headerHeight={68}\n              rowData={data}\n              domLayout=\"autoHeight\"\n            />\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nGreenChemistry.propTypes = {\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n  onReactionChange: PropTypes.func.isRequired,\n};\n","const setReactionByType = (reaction, type, value) => {\n  let options = {};\n\n  switch (type) {\n    case 'name':\n      reaction.name = value;\n      break;\n    case 'observation':\n      reaction.observation = value;\n      break;\n    case 'status':\n      reaction.status = value;\n      break;\n    case 'description':\n      reaction.description = value;\n      options = { schemaChanged: false }\n      break;\n    case 'purification':\n      reaction.purification = value;\n      break;\n    case 'tlc_solvents':\n      reaction.tlc_solvents = value;\n      break;\n    case 'rfValue':\n      reaction.rf_value = value;\n      break;\n    case 'timestampStart':\n      reaction.timestamp_start = value;\n      break;\n    case 'timestampStop':\n      reaction.timestamp_stop = value;\n      break;\n    case 'tlcDescription':\n      reaction.tlc_description = value;\n      break;\n    case 'temperature':\n      reaction.temperature.userText = value;\n      options = {schemaChanged: true}\n      break;\n    case 'temperatureUnit':\n      reaction.temperature = reaction.convertTemperature(value);\n      options = {schemaChanged: true}\n      break;\n    case 'temperatureData':\n      reaction.temperature = value;\n      options = {schemaChanged: true}\n      break;\n    case 'dangerousProducts':\n      reaction.dangerous_products = value;\n      break;\n    case 'conditions':\n      reaction.conditions = value;\n      options = {schemaChanged: true}\n      break;\n    case 'solvent':\n      reaction.solvent = value;\n      options = {schemaChanged: true}\n      break;\n    case 'role':\n      reaction.role = value;\n      reaction.name = reaction.nameFromRole(value);\n      break;\n    case 'duration':\n      reaction.durationDisplay = value;\n      options = { schemaChanged: true }\n      break;\n    case 'rxno':\n      reaction.rxno = value;\n      break;\n    case 'vesselSizeAmount':\n      reaction.vessel_size.amount = value;\n      break;\n    case 'vesselSizeUnit':\n      reaction.vessel_size.unit = value;\n      if (value === 'ml') {\n        reaction.vessel_size.amount = reaction.vessel_size.amount * 1000;\n      } else if (value === 'l') {\n        reaction.vessel_size.amount = reaction.vessel_size.amount / 1000;\n      }\n      break;\n    case 'gaseous':\n      reaction.gaseous = value;\n      break;\n  }\n\n  return { newReaction: reaction, options: options }\n}\n\nexport {setReactionByType}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport CollectionsFetcher from 'src/fetchers/CollectionsFetcher';\n\nexport default class ExportSamplesBtn extends Component {\n  constructor(props) {\n    super(props);\n    this.state = { startExport: false };\n  }\n\n  handleExport(type, id) {\n    this.setState({ startExport: true });\n    CollectionsFetcher.expotSamples(type, id)\n      .then(() => { this.setState({ startExport: false }); })\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  render() {\n    const { type, id } = this.props;\n    const { startExport } = this.state;\n    return (\n      <Button bsStyle=\"info\" onClick={() => this.handleExport(type, id)}>\n        Export samples{startExport ? <span>&nbsp;<i className=\"fa fa-spin fa-spinner\" /></span> : null}\n      </Button>\n    );\n  }\n}\n\nExportSamplesBtn.propTypes = {\n  type: PropTypes.string.isRequired,\n  id: PropTypes.number.isRequired\n};\n","/* eslint-disable no-underscore-dangle */\n/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport { Button, OverlayTrigger, Popover } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport uuid from 'uuid';\nimport MoleculesFetcher from 'src/fetchers/MoleculesFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nconst notify = (params) => {\n  NotificationActions.add({\n    title: params.title, message: params.msg, level: params.lvl, position: 'tc', dismissible: 'button', uid: uuid.v4()\n  });\n};\n\nconst buildRxn = (reaction) => {\n  let rxn = '$RXN\\n\\n\\n\\n';\n  const molBreak = '$MOL\\n';\n  let rl = 0;\n  let xl = 0;\n  let pl = 0;\n  let molfiles = '';\n  reaction._starting_materials.map((e) => {\n    rl += 1;\n    molfiles += molBreak + e.molfile.slice(0, e.molfile.lastIndexOf('$$$$'));\n  });\n  reaction._reactants.map((e) => {\n    xl += 1;\n    molfiles += molBreak + e.molfile.slice(0, e.molfile.lastIndexOf('$$$$'));\n  });\n  reaction._products.map((e) => {\n    pl += 1;\n    molfiles += molBreak + e.molfile.slice(0, e.molfile.lastIndexOf('$$$$'));\n  });\n  rxn += (`   ${(rl + xl).toString()}`).slice(-3);\n  rxn += (`   ${pl.toString()}`).slice(-3);\n  rxn += '\\n';\n  rxn += molfiles;\n  return { rxn };\n};\n\nconst ScifinderSearch = (props) => {\n  const { el } = props;\n  const search = (_type) => {\n    const str = el.type === 'reaction' ? buildRxn(el).rxn : el.molfile;\n    const params = { str, search: _type, ctype: 'x-mdl-rxnfile' };\n    LoadingActions.start();\n    MoleculesFetcher.fetchSciFinder(params)\n      .then((result) => {\n        if (result.errors.length === 0) {\n          const url = `${result.host}${result.path}`;\n          window.open(url, '_blank');\n        } else {\n          notify({ title: 'SciFinder-n Error', lvl: 'error', msg: result.errors[0] });\n        }\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n        notify({ title: 'SciFinder-n Error', lvl: 'error', msg: errorMessage });\n      }).finally(() => LoadingActions.stop());\n  };\n\n  const renderButtons = () => {\n    const BTNS = [\n      { substances: 'icon-sample' }, { reactions: 'icon-reaction' }, { references: 'fa fa-book' }, { suppliers: 'fa fa-shopping-cart' }\n    ];\n    if (el.type === 'reaction') { [BTNS[0], BTNS[1]] = [BTNS[1], BTNS[0]]; }\n    const btn = (name, icon) => (\n      <Button key={`_sfn_btn_${name}`} onClick={() => search(name)}>\n        <span style={{ float: 'left' }}><i className={icon} aria-hidden=\"true\" /></span>&nbsp;\n        <span><b>{name}</b></span>\n      </Button>\n    );\n    return BTNS.map(b => Object.entries(b).map(([key, value]) => btn(key, value)));\n  };\n\n  const popoverSettings = (\n    <Popover\n      className=\"collection-overlay\"\n      id=\"popover-layout\"\n      style={{ maxWidth: 'none', width: 'auto' }}\n    >\n      <div>\n        <h3 className=\"popover-title\">SciFinder-n Search for</h3>\n        <div className=\"popover-content\" style={{ display: 'flex', flexDirection: 'column' }}>\n          {renderButtons()}\n        </div>\n      </div>\n    </Popover>\n  );\n\n  return (\n    <OverlayTrigger trigger=\"click\" placement=\"left\" overlay={popoverSettings} rootClose>\n      <Button className=\"button-right\" style={{ padding: '0px' }}>\n        <div style={{ fontSize: '1.2vmin', padding: '2px', color: '#337ab7' }}><i className=\"fa fa-search\" aria-hidden=\"true\" />&nbsp;Search CAS</div>\n      </Button>\n    </OverlayTrigger>\n  );\n};\n\nScifinderSearch.propTypes = { el: PropTypes.object.isRequired };\nexport default ScifinderSearch;\n","/* eslint-disable no-underscore-dangle,  camelcase, semi,  no-unused-vars */\nimport Element from 'src/models/Element';\n\nexport default class Comment extends Element {\n  static buildEmpty() {\n    return new Comment({\n      content: '',\n      commentable_id: null,\n      commentable_type: null,\n      created_by: null,\n      created_at: null,\n    });\n  }\n\n  static buildWithElement(element) {}\n\n  get content() {\n    return this._content;\n  }\n\n  set content(content) {\n    this._content = content;\n  }\n\n  get commentable_id() {\n    return this._commentable_id;\n  }\n\n  set commentable_id(commentable_id) {\n    this._commentable_id = commentable_id;\n  }\n\n  get created_by() {\n    return this._created_by;\n  }\n\n  set created_by(created_by) {\n    this._created_by = created_by;\n  }\n\n  get commentable_type() {\n    return this._commentable_type;\n  }\n\n  set commentable_type(commentable_type) {\n    this._commentable_type = commentable_type;\n  }\n\n  get status() {\n    return this._status;\n  }\n\n  set status(status) {\n    this._status = status;\n  }\n\n  get submitter() {\n    return this._submitter;\n  }\n\n  set submitter(submitter) {\n    this._submitter = submitter;\n  }\n\n  get resolver_name() {\n    return this._resolver_name;\n  }\n\n  set resolver_name(resolver_name) {\n    this._resolver_name = resolver_name;\n  }\n\n  get section() {\n    return this._section;\n  }\n\n  set section(section) {\n    this._section = section;\n  }\n\n  serialize() {\n    return super.serialize({\n      content: this.content,\n      commentable_id: this.commentable_id,\n      commentable_type: this.commentable_type,\n      created_by: this.created_by,\n      status: this.status,\n      submitter: this.submitter,\n      resolver_name: this.resolver_name,\n      section: this.section,\n    });\n  }\n}\n","import 'whatwg-fetch';\n\nimport Comment from 'src/models/Comment';\nimport { CommentManagementServices } from 'src/endpoints/ApiServices';\n\nconst classify = (string) => {\n  const elementType = string.replace(/([-_]\\w)/g, (g) => g[1].toUpperCase());\n  return elementType.charAt(0).toUpperCase() + elementType.slice(1);\n};\nconst headers = {\n  Accept: 'application/json',\n  'Content-Type': 'application/json',\n};\n\nexport default class CommentFetcher {\n  static fetchById(commentId) {\n    return fetch(CommentManagementServices.COMMENT_BY_ID(commentId), {\n      credentials: 'same-origin'\n    }).then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchByCommentableId(commentableId, commentableType) {\n    return fetch(\n      CommentManagementServices.COMMENT_BY_COMMENTABLE(\n        commentableId,\n        classify(commentableType)\n      ),\n      {\n        credentials: 'same-origin',\n      }\n    ).then((response) => response.json())\n      .then((json) => json.comments.map((comment) => new Comment(comment)))\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static create(prms) {\n    const params = { ...prms };\n    if (prms.commentable_type) {\n      params.commentable_type = classify(prms.commentable_type);\n    }\n    return fetch(CommentManagementServices.CREATE_COMMENT, {\n      credentials: 'same-origin',\n      method: 'post',\n      headers,\n      body: JSON.stringify(params)\n    }).then((response) => response.json())\n      .then((json) => new Comment(json.comment))\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static updateComment(comment, params) {\n    return fetch(CommentManagementServices.UPDATE_COMMENT(comment), {\n      credentials: 'same-origin',\n      method: 'put',\n      headers,\n      body: JSON.stringify(params)\n    }).then((response) => response.json())\n      .then((json) => new Comment(json.comment))\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static delete(comment) {\n    return fetch(CommentManagementServices.DELETE_COMMENT(comment), {\n      credentials: 'same-origin',\n      method: 'delete',\n      headers\n    }).then((response) => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","/* eslint-disable class-methods-use-this */\n\nimport alt from 'src/stores/alt/alt';\nimport CommentFetcher from 'src/fetchers/CommentFetcher';\n\nclass CommentActions {\n  setCommentSection(section) {\n    return section;\n  }\n\n  fetchComments(element) {\n    return (dispatch) => {\n      CommentFetcher.fetchByCommentableId(element.id, element.type)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  toggleCommentModal(btnAction) {\n    return btnAction;\n  }\n\n  toggleCommentSection() {\n    return null;\n  }\n}\n\nexport default alt.createActions(CommentActions);\n","import alt from 'src/stores/alt/alt';\nimport CommentActions from 'src/stores/alt/actions/CommentActions';\n\nclass CommentStore {\n  constructor() {\n    this.state = {\n      comments: [],\n      section: null,\n      showCommentModal: false,\n      showCommentSection: false,\n    };\n\n    this.bindListeners({\n      handleSetCommentSection: CommentActions.setCommentSection,\n      handleFetchComments: CommentActions.fetchComments,\n      handleToggleCommentModal: CommentActions.toggleCommentModal,\n      handleToggleCommentSection: CommentActions.toggleCommentSection,\n    });\n  }\n\n  handleSetCommentSection(section) {\n    this.setState({ section });\n  }\n\n  handleFetchComments(comments) {\n    this.setState({ comments: comments ?? [] });\n  }\n\n  handleToggleCommentModal = (btnAction) => {\n    this.setState({ showCommentModal: btnAction });\n  };\n\n  handleToggleCommentSection() {\n    this.setState({ showCommentSection: !this.state.showCommentSection });\n  }\n}\n\nexport default alt.createStore(CommentStore, 'CommentStore');\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport CommentActions from 'src/stores/alt/actions/CommentActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport CommentStore from 'src/stores/alt/stores/CommentStore';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport {\n  getSectionComments,\n  selectCurrentUser,\n  commentActivation\n} from 'src/utilities/CommentHelper';\n\nclass HeaderCommentSection extends Component {\n  constructor(props) {\n    super(props);\n\n    const currentUser = selectCurrentUser(UserStore.getState());\n    const commentState = CommentStore.getState();\n\n    this.state = {\n      currentUser,\n      comments: commentState.comments,\n      showCommentSection: commentState.showCommentSection,\n    };\n\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    CommentStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    CommentStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState({ ...state });\n  }\n\n  render() {\n    const { element } = this.props;\n    const { comments, currentUser, showCommentSection } = this.state;\n    const headerSection = `${element.type}_header`;\n\n    const sectionComments = getSectionComments(comments, headerSection);\n\n    if (MatrixCheck(currentUser.matrix, commentActivation)) {\n      return (\n        element?.isNew ? <span /> : (\n          <span className=\"comments-header-btn\">\n            <OverlayTrigger\n              key=\"ot_comments\"\n              placement=\"top\"\n              overlay={<Tooltip id=\"showComments\">Show/Add Comments</Tooltip>}\n            >\n              <Button\n                bsSize=\"xsmall\"\n                bsStyle={sectionComments.length > 0 ? 'success' : 'default'}\n                onClick={() => {\n                  CommentActions.setCommentSection(headerSection);\n                  CommentActions.fetchComments(element);\n                  CommentActions.toggleCommentModal(true);\n                }}\n              >\n                <i className=\"fa fa-comments\" />\n              </Button>\n            </OverlayTrigger>\n            <OverlayTrigger\n              placement=\"top\"\n              overlay={<Tooltip id=\"toggleComments\">Show/Hide Section Comments</Tooltip>}\n            >\n              <Button\n                bsSize=\"xsmall\"\n                onClick={CommentActions.toggleCommentSection}\n                style={{ marginLeft: 5 }}\n              >\n                <span>\n                  <i className={showCommentSection ? 'fa fa-angle-down' : 'fa fa-angle-up'} />\n                </span>\n              </Button>\n            </OverlayTrigger>\n          </span>\n        )\n      );\n    }\n\n    return null;\n  }\n}\n\nHeaderCommentSection.propTypes = {\n  element: PropTypes.object.isRequired,\n};\n\nexport default HeaderCommentSection;\n","import React, { useState, useEffect } from 'react';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport CommentActions from 'src/stores/alt/actions/CommentActions';\nimport CommentStore from 'src/stores/alt/stores/CommentStore';\nimport { getSectionComments } from 'src/utilities/CommentHelper';\n\nexport default function CommentButton(props) {\n  const { section, element } = props;\n  const [commentState, setCommentState] = useState(CommentStore.getState());\n  const { comments } = commentState;\n  const sectionComments = getSectionComments(comments, section);\n\n  useEffect(() => {\n    const onChange = (state) => {\n      setCommentState({ ...state });\n    };\n    CommentStore.listen(onChange);\n    return () => {\n      CommentStore.unlisten(onChange);\n    };\n  }, []);\n\n  return (\n    <OverlayTrigger\n      key=\"ot_comments\"\n      placement=\"top\"\n      overlay={<Tooltip id=\"showComments\">Show/Add Comments</Tooltip>}\n    >\n      <Button\n        id=\"commentBtn\"\n        bsStyle={sectionComments.length > 0 ? 'success' : 'default'}\n        bsSize=\"xsmall\"\n        onClick={() => {\n          CommentActions.fetchComments(element);\n          CommentActions.toggleCommentModal(true);\n          CommentActions.setCommentSection(section);\n        }}\n      >\n        <i className=\"fa fa-comments\" />\n      </Button>\n    </OverlayTrigger>\n  );\n}\n\nCommentButton.propTypes = {\n  section: PropTypes.string,\n  element: PropTypes.object.isRequired,\n};\n\nCommentButton.defaultProps = {\n  section: 'sample_header',\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Table } from 'react-bootstrap';\nimport CommentStore from 'src/stores/alt/stores/CommentStore';\nimport { getSectionComments } from 'src/utilities/CommentHelper';\nimport { formatDate } from 'src/utilities/timezoneHelper';\n\nexport default function CommentList(props) {\n  const { section } = props;\n  const { comments } = CommentStore.getState();\n  const sectionComments = getSectionComments(comments, section)\n    ?.filter((cmt) => cmt.status === 'Pending');\n\n  let commentsTbl = null;\n\n  if (sectionComments?.length > 0) {\n    commentsTbl = sectionComments.map((comment) => (\n      <tr key={comment.id}>\n        <td style={{ width: '15%' }}>{formatDate(comment.created_at)}</td>\n        <td style={{ width: '40%' }}>{comment.content}</td>\n        <td style={{ width: '15%' }}>{comment.submitter}</td>\n      </tr>\n    ));\n  }\n\n  return (\n    <div>\n      {\n        (sectionComments?.length > 0)\n          ? (\n            <Table striped bordered hover>\n              <thead>\n                <tr>\n                  <th width=\"15%\">Date</th>\n                  <th width=\"40%\">Comment</th>\n                  <th width=\"15%\">From User</th>\n                </tr>\n              </thead>\n              <tbody>{commentsTbl}</tbody>\n            </Table>\n          )\n          : null\n      }\n    </div>\n  );\n}\n\nCommentList.propTypes = {\n  section: PropTypes.string,\n};\n\nCommentList.defaultProps = {\n  section: 'header',\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport CommentButton from 'src/components/comments/CommentButton';\nimport CommentList from 'src/components/comments/CommentList';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport CommentStore from 'src/stores/alt/stores/CommentStore';\nimport { selectCurrentUser, commentActivation } from 'src/utilities/CommentHelper';\n\nexport default class CommentSection extends Component {\n  constructor(props) {\n    super(props);\n    const commentState = CommentStore.getState();\n    this.state = {\n      showCommentSection: commentState.showCommentSection,\n    };\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    CommentStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    CommentStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState({ ...state });\n  }\n\n  render() {\n    const { section, element } = this.props;\n    const { showCommentSection } = this.state;\n    const currentUser = selectCurrentUser(UserStore.getState());\n\n    if (showCommentSection && MatrixCheck(currentUser.matrix, commentActivation)) {\n      return (\n        <div>\n          <CommentButton section={section} element={element} />\n          <CommentList section={section} />\n        </div>\n      );\n    }\n    return null;\n  }\n}\n\nCommentSection.propTypes = {\n  section: PropTypes.string,\n  element: PropTypes.object.isRequired,\n};\n\nCommentSection.defaultProps = {\n  section: 'header',\n};\n","import React, { Component } from 'react';\nimport { Button, Modal } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nexport default class DeleteComment extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showConfirmModal: false,\n    };\n    this.handleModalClose = this.handleModalClose.bind(this);\n    this.handleModalShow = this.handleModalShow.bind(this);\n    this.handleDelete = this.handleDelete.bind(this);\n  }\n\n  handleModalShow() {\n    this.setState({ showConfirmModal: true });\n  }\n\n  handleModalClose() {\n    this.setState({ showConfirmModal: false });\n  }\n\n  handleDelete = () => {\n    const { onDelete, comment } = this.props;\n    onDelete(comment);\n    this.handleModalClose();\n  };\n\n  render() {\n    const { showConfirmModal } = this.state;\n\n    return (\n      <span>\n        <Button\n          id=\"deleteCommentBtn\"\n          bsStyle=\"danger\"\n          bsSize=\"xsmall\"\n          onClick={() => this.handleModalShow(true)}\n        >\n          <i className=\"fa fa-trash-o\" />\n        </Button>\n        <Modal show={showConfirmModal} onHide={this.handleModalClose}>\n          <Modal.Header closeButton>\n            <Modal.Title>\n              Confirm Delete\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <p>Are you sure you want to delete?</p>\n          </Modal.Body>\n          <Modal.Footer>\n            <Button bsStyle=\"primary\" onClick={this.handleModalClose} className=\"pull-left\">Close</Button>\n            <Button bsStyle=\"success\" onClick={this.handleDelete} className=\"pull-left\">Delete</Button>\n          </Modal.Footer>\n        </Modal>\n      </span>\n    );\n  }\n}\n\nDeleteComment.propTypes = {\n  onDelete: PropTypes.func.isRequired,\n  comment: PropTypes.object.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ButtonToolbar, Table } from 'react-bootstrap';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport { formatSection, getAllComments, selectCurrentUser } from 'src/utilities/CommentHelper';\nimport CommentStore from 'src/stores/alt/stores/CommentStore';\nimport DeleteComment from 'src/components/common/DeleteComment';\nimport { formatDate } from 'src/utilities/timezoneHelper';\n\nexport default class CommentDetails extends Component {\n  constructor(props) {\n    super(props);\n    const commentState = CommentStore.getState();\n    this.state = {\n      comments: commentState.comments,\n      section: commentState.section,\n    };\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    CommentStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    CommentStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState({ ...state });\n  }\n\n  render() {\n    const {\n      element,\n      disableEditComment,\n      markCommentResolved,\n      commentByCurrentUser,\n      editComment,\n      deleteComment,\n    } = this.props;\n    const { comments, section } = this.state;\n    const allComments = getAllComments(comments, section);\n    const currentUser = selectCurrentUser(UserStore.getState());\n\n    let commentsTbl = null;\n    if (allComments?.length > 0) {\n      commentsTbl = allComments.map((comment) => (\n        <tr key={comment.id}>\n          <td width=\"10%\">{formatSection(comment.section, element.type)}</td>\n          <td width=\"10%\">\n            <span className=\"text-info\">\n              {formatDate(comment.created_at)}\n            </span>\n          </td>\n          <td width=\"34%\">{comment.content}</td>\n          <td width=\"15%\">{comment.submitter}</td>\n          <td width=\"15%\">\n            <ButtonToolbar>\n              <Button\n                disabled={disableEditComment(comment)}\n                onClick={() => markCommentResolved(comment)}\n              >\n                {comment.status === 'Resolved' ? 'Resolved' : 'Resolve'}\n              </Button>\n              {\n                commentByCurrentUser(comment, currentUser)\n                  ? (\n                    <Button\n                      id=\"editCommentBtn\"\n                      bsSize=\"xsmall\"\n                      bsStyle=\"primary\"\n                      onClick={() => editComment(comment)}\n                      disabled={disableEditComment(comment)}\n                    >\n                      <i className=\"fa fa-edit\" />\n                    </Button>\n                  )\n                  : null\n              }\n              {\n                commentByCurrentUser(comment, currentUser)\n                  ? (\n                    <DeleteComment\n                      comment={comment}\n                      onDelete={() => deleteComment(comment)}\n                    />\n                  ) : null\n              }\n            </ButtonToolbar>\n          </td>\n          <td width=\"15%\">{comment.resolver_name}</td>\n        </tr>\n      ));\n    }\n\n    return (\n      <Table striped bordered hover>\n        <thead>\n          <tr>\n            <th width=\"10%\">Column</th>\n            <th width=\"10%\">Date</th>\n            <th width=\"34%\">Comment</th>\n            <th width=\"15%\">From User</th>\n            <th width=\"17%\">Actions</th>\n            <th width=\"17%\">Resolved By</th>\n          </tr>\n        </thead>\n        <tbody>{commentsTbl}</tbody>\n      </Table>\n    );\n  }\n}\n\nCommentDetails.propTypes = {\n  element: PropTypes.object.isRequired,\n  disableEditComment: PropTypes.func.isRequired,\n  markCommentResolved: PropTypes.func.isRequired,\n  commentByCurrentUser: PropTypes.func.isRequired,\n  editComment: PropTypes.func.isRequired,\n  deleteComment: PropTypes.func.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Button, ButtonToolbar, FormControl, Glyphicon, Modal, Table\n} from 'react-bootstrap';\nimport Draggable from 'react-draggable';\nimport CommentFetcher from 'src/fetchers/CommentFetcher';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport CommentActions from 'src/stores/alt/actions/CommentActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport CommentStore from 'src/stores/alt/stores/CommentStore';\nimport CommentDetails from 'src/components/comments/CommentDetails';\nimport DeleteComment from 'src/components/common/DeleteComment';\nimport {\n  formatSection,\n  getAllComments,\n  getSectionComments,\n  selectCurrentUser,\n} from 'src/utilities/CommentHelper';\nimport { formatDate } from 'src/utilities/timezoneHelper';\n\nexport default class CommentModal extends Component {\n  constructor(props) {\n    super(props);\n    this.modalRef = React.createRef();\n    const commentState = CommentStore.getState();\n    this.state = {\n      commentBody: '',\n      isEditing: false,\n      commentObj: '',\n      commentsCollapseAll: false,\n      comments: commentState.comments,\n      section: commentState.section,\n    };\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    document.addEventListener('mousedown', this.handleClickOutside);\n    CommentStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    CommentStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState({ ...state });\n  }\n\n  handleInputChange = (e) => {\n    this.setState({ commentBody: e.target.value });\n    if (e.target.value.length === 0) {\n      this.setState({\n        commentObj: '',\n        isEditing: false,\n      });\n    }\n  };\n\n  markCommentResolved = (comment) => {\n    const { element } = this.props;\n    const params = {\n      content: comment.content,\n      status: 'Resolved',\n    };\n    CommentFetcher.updateComment(comment, params)\n      .then(() => {\n        CommentActions.fetchComments(element);\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  };\n\n  saveComment = () => {\n    LoadingActions.start();\n    const { element } = this.props;\n    const { commentBody, section } = this.state;\n    const params = {\n      content: commentBody,\n      commentable_id: element.id,\n      commentable_type: element.type,\n      section,\n    };\n    CommentFetcher.create(params)\n      .then(() => {\n        CommentActions.fetchComments(element);\n        this.scrollToTop();\n        ElementActions.refreshElements(element.type);\n        this.setState({ commentBody: '' }, () => {\n          LoadingActions.stop();\n        });\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  };\n\n  updateComment = () => {\n    LoadingActions.start();\n    const { element } = this.props;\n    const { commentBody, commentObj } = this.state;\n    const comment = commentObj;\n    const params = {\n      content: commentBody,\n    };\n    CommentFetcher.updateComment(comment, params)\n      .then(() => {\n        CommentActions.fetchComments(element);\n        this.setState({ commentBody: '', isEditing: false }, () => {\n          LoadingActions.stop();\n        });\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  };\n\n  deleteComment = (comment) => {\n    const { element } = this.props;\n    CommentFetcher.delete(comment)\n      .then(() => {\n        CommentActions.fetchComments(element);\n        ElementActions.refreshElements(element.type);\n        this.setState({ commentBody: '' });\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  };\n\n  editComment = (comment) => {\n    this.setState({\n      commentBody: comment.content,\n      commentObj: comment,\n      isEditing: true\n    });\n    this.commentInput.focus();\n  };\n\n  scrollToTop = () => {\n    this.modalRef.current.scrollTo({\n      top: 0,\n      behavior: 'smooth'\n    });\n  };\n\n  toggleCollapse = () => {\n    const { commentsCollapseAll } = this.state;\n    this.setState({ commentsCollapseAll: !commentsCollapseAll });\n  };\n\n  // eslint-disable-next-line class-methods-use-this\n  disableEditComment = (comment) => comment.status === 'Resolved';\n\n  // eslint-disable-next-line class-methods-use-this\n  commentByCurrentUser = (comment, currentUser) => currentUser.id === comment.created_by;\n\n  renderCommentTable() {\n    const { comments, section } = this.state;\n    const sectionComments = getSectionComments(comments, section);\n    const currentUser = selectCurrentUser(UserStore.getState());\n\n    if (sectionComments?.length > 0) {\n      return sectionComments.map((comment) => (\n        <tr key={comment.id}>\n          <td width=\"20%\">\n            <span className=\"text-info\">\n              {formatDate(comment.created_at)}\n            </span>\n          </td>\n          <td width=\"35%\">{comment.content}</td>\n          <td width=\"15%\">{comment.submitter}</td>\n          <td width=\"15%\">\n            <ButtonToolbar>\n              <Button\n                disabled={this.disableEditComment(comment)}\n                onClick={() => this.markCommentResolved(comment)}\n              >\n                {comment.status === 'Resolved' ? 'Resolved' : 'Resolve'}\n              </Button>\n              {\n                this.commentByCurrentUser(comment, currentUser)\n                  ? (\n                    <Button\n                      id=\"editCommentBtn\"\n                      bsSize=\"xsmall\"\n                      bsStyle=\"primary\"\n                      onClick={() => this.editComment(comment)}\n                      disabled={this.disableEditComment(comment)}\n                    >\n                      <i className=\"fa fa-edit\" />\n                    </Button>\n                  )\n                  : null\n              }\n              {\n                this.commentByCurrentUser(comment, currentUser)\n                  ? (\n                    <DeleteComment\n                      comment={comment}\n                      onDelete={() => this.deleteComment(comment)}\n                    />\n                  ) : null\n              }\n            </ButtonToolbar>\n          </td>\n          <td width=\"15%\">{comment.resolver_name}</td>\n        </tr>\n      ));\n    }\n    return null;\n  }\n\n  render() {\n    const { element } = this.props;\n    const {\n      isEditing,\n      commentsCollapseAll,\n      commentBody,\n      showCommentModal,\n      comments,\n      section\n    } = this.state;\n    const allComments = getAllComments(comments, section);\n    const collapseIcon = commentsCollapseAll ? 'chevron-up' : 'chevron-down';\n\n    return (\n      <Draggable enableUserSelectHack={false}>\n        <Modal\n          dialogClassName=\"comment-modal\"\n          show={showCommentModal}\n          onHide={() => CommentActions.toggleCommentModal(false)}\n          bsSize=\"large\"\n        >\n          <Modal.Header closeButton>\n            <Modal.Title>\n              Comments on:\n              {formatSection(section)}\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <div className=\"commentList\" ref={this.modalRef}>\n              <div className=\"table-responsive\">\n                <Table striped bordered hover>\n                  <thead>\n                  <tr>\n                    <th width=\"20%\">Date</th>\n                    <th width=\"35%\">Comment</th>\n                    <th width=\"15%\">From User</th>\n                    <th width=\"17%\">Actions</th>\n                    <th width=\"17%\">Resolved By</th>\n                  </tr>\n                  </thead>\n                  <tbody>{this.renderCommentTable()}</tbody>\n                </Table>\n              </div>\n\n              {\n                allComments?.length > 0\n                  ? (\n                    <Button onClick={this.toggleCollapse} id=\"detailsBtn\">\n                      <span>Details </span>\n                      <Glyphicon\n                        className=\"comment-details\"\n                        glyph={collapseIcon}\n                        title=\"Collapse/Uncollapse\"\n                      />\n                    </Button>\n                  )\n                  : null\n              }\n\n              {\n                commentsCollapseAll && allComments?.length > 0\n                  ? (\n                    <CommentDetails\n                      section={section}\n                      element={element}\n                      disableEditComment={this.disableEditComment}\n                      markCommentResolved={this.markCommentResolved}\n                      commentByCurrentUser={this.commentByCurrentUser}\n                      editComment={this.editComment}\n                      deleteComment={this.deleteComment}\n                    />\n                  )\n                  : null\n              }\n            </div>\n\n            <FormControl\n              componentClass=\"textarea\"\n              autoFocus\n              style={{\n                height: '100px',\n                marginBottom: '20px',\n              }}\n              value={commentBody}\n              ref={(input) => { this.nameInput = input; }}\n              inputRef={(m) => {\n                this.commentInput = m;\n              }}\n              onChange={this.handleInputChange}\n            />\n            <ButtonToolbar>\n              <Button onClick={() => CommentActions.toggleCommentModal(false)}>\n                Close\n              </Button>\n              <Button\n                bsStyle=\"primary\"\n                disabled={!commentBody}\n                onClick={() => {\n                  if (isEditing) {\n                    this.updateComment();\n                  } else {\n                    this.saveComment();\n                  }\n                }}\n              >\n                {isEditing ? 'Update' : 'Save'}\n              </Button>\n            </ButtonToolbar>\n          </Modal.Body>\n        </Modal>\n      </Draggable>\n    );\n  }\n}\n\nCommentModal.propTypes = {\n  element: PropTypes.object.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReviewStore from 'src/stores/alt/repo/stores/ReviewStore';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\nimport RepoReactionDetails from 'src/repoHome/RepoReactionDetails';\n\nexport default class ReactionDetailsRepoComment extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      reaction: null\n    };\n    this.onStoreChange = this.onStoreChange.bind(this);\n    this.handleReviewUpdate = this.handleReviewUpdate.bind(this);\n  }\n\n  componentDidMount() {\n    ReviewStore.listen(this.onStoreChange);\n    ReviewActions.displayReviewReaction(this.props.reactionId);\n  }\n\n  componentWillUnmount() {\n    ReviewStore.unlisten(this.onStoreChange);\n  }\n\n  onStoreChange(state) {\n    this.setState(prevState => ({ ...prevState, ...state }));\n  }\n\n  handleReviewUpdate(review) {\n    this.setState({ review });\n  }\n\n  render() {\n    const { reaction, review_info } = this.state;\n    return reaction && reaction.publication ?\n      (\n        <RepoReactionDetails\n          reaction={reaction}\n          canComment\n          review_info={review_info}\n          onReviewUpdate={this.handleReviewUpdate}\n          review={this.state.review || {}}\n          canClose={false}\n          buttons={['Comments']}\n        />) : <div>No Publication found</div>;\n  }\n}\n\nReactionDetailsRepoComment.propTypes = {\n  reactionId: PropTypes.number.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Panel, ListGroupItem, ButtonToolbar, Button,\n  Tabs, Tab, OverlayTrigger, Tooltip,\n  Row, Col, Alert, Label\n} from 'react-bootstrap';\nimport SvgFileZoomPan from 'react-svg-file-zoom-pan-latest';\nimport { findIndex, cloneDeep } from 'lodash';\n// For REPO\nimport RepositoryActions from 'src/stores/alt/repo/actions/RepositoryActions';\nimport PublishReactionModal from 'src/components/chemrepo/PublishReactionModal';\n\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport ElementResearchPlanLabels from 'src/apps/mydb/elements/labels/ElementResearchPlanLabels';\nimport ElementAnalysesLabels from 'src/apps/mydb/elements/labels/ElementAnalysesLabels';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ReactionVariations from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariations';\nimport ReactionDetailsLiteratures from 'src/apps/mydb/elements/details/literature/DetailsTabLiteratures';\nimport ReactionDetailsContainers from 'src/apps/mydb/elements/details/reactions/analysesTab/ReactionDetailsContainers';\nimport SampleDetailsContainers from 'src/apps/mydb/elements/details/samples/analysesTab/SampleDetailsContainers';\nimport ReactionDetailsScheme from 'src/apps/mydb/elements/details/reactions/schemeTab/ReactionDetailsScheme';\nimport ReactionDetailsProperties from 'src/apps/mydb/elements/details/reactions/propertiesTab/ReactionDetailsProperties';\nimport GreenChemistry from 'src/apps/mydb/elements/details/reactions/greenChemistryTab/GreenChemistry';\nimport Utils from 'src/utilities/Functions';\nimport PrintCodeButton from 'src/components/common/PrintCodeButton';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport { setReactionByType } from 'src/apps/mydb/elements/details/reactions/ReactionDetailsShare';\nimport { sampleShowOrNew } from 'src/utilities/routesUtils';\nimport ReactionSvgFetcher from 'src/fetchers/ReactionSvgFetcher';\nimport ConfirmClose from 'src/components/common/ConfirmClose';\nimport { rfValueFormat } from 'src/utilities/ElementUtils';\nimport ExportSamplesBtn from 'src/apps/mydb/elements/details/ExportSamplesBtn';\nimport CopyElementModal from 'src/components/common/CopyElementModal';\nimport { permitOn } from 'src/components/common/uis';\nimport { addSegmentTabs } from 'src/components/generic/SegmentDetails';\nimport Immutable from 'immutable';\nimport ElementDetailSortTab from 'src/apps/mydb/elements/details/ElementDetailSortTab';\nimport ScifinderSearch from 'src/components/scifinder/ScifinderSearch';\nimport OpenCalendarButton from 'src/components/calendar/OpenCalendarButton';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport HeaderCommentSection from 'src/components/comments/HeaderCommentSection';\nimport CommentSection from 'src/components/comments/CommentSection';\nimport CommentActions from 'src/stores/alt/actions/CommentActions';\nimport CommentModal from 'src/components/common/CommentModal';\nimport { commentActivation } from 'src/utilities/CommentHelper';\nimport { formatTimeStampsOfElement } from 'src/utilities/timezoneHelper';\nimport ToggleButton from 'src/components/common/ToggleButton';\nimport GasPhaseReactionActions from 'src/stores/alt/actions/GasPhaseReactionActions';\nimport { ShowUserLabels } from 'src/components/UserLabels';\n\nimport {\n  PublishedTag,\n  OrigElnTag,\n  LabelPublication,\n  PublishBtnReaction,\n  ReviewPublishBtn,\n  validateMolecule,\n  validateYield\n} from 'src/components/chemrepo/PublishCommon';\nimport ReactionDetailsRepoComment from 'src/components/chemrepo/ReactionDetailsRepoComment';\nimport { contentToText } from 'src/utilities/quillFormat';\nimport HelpInfo from 'src/components/common/HelpInfo';\nimport uuid from 'uuid';\n\nexport default class ReactionDetails extends Component {\n  constructor(props) {\n    super(props);\n\n    const { reaction } = props;\n    const publication = reaction.tag && reaction.tag.taggable_data\n      && reaction.tag.taggable_data.publication\n    this.state = {\n      reaction,\n      literatures: reaction.literatures,\n      activeTab: UIStore.getState().reaction.activeTab,\n      activeAnalysisTab: UIStore.getState().reaction.activeAnalysisTab,\n      visible: Immutable.List(),\n      sfn: UIStore.getState().hasSfn,\n      showPublishReactionModal: false,\n      commentScreen: false,\n      currentUser: (UserStore.getState() && UserStore.getState().currentUser) || {},\n    };\n\n    // remarked because of #466 reaction load image issue (Paggy 12.07.2018)\n    // if(reaction.hasMaterials()) {\n    //   this.updateReactionSvg();\n    // }\n\n    this.onUIStoreChange = this.onUIStoreChange.bind(this);\n    this.handleReactionChange = this.handleReactionChange.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.onTabPositionChanged = this.onTabPositionChanged.bind(this);\n    this.handleSegmentsChange = this.handleSegmentsChange.bind(this);\n    this.handlePublishReactionModal = this.handlePublishReactionModal.bind(this);\n    this.forcePublishRefreshClose = this.forcePublishRefreshClose.bind(this);\n    this.handleCommentScreen = this.handleCommentScreen.bind(this);\n    this.handleFullScreen = this.handleFullScreen.bind(this);\n    this.handleValidation = this.handleValidation.bind(this);\n    this.handleResetValidation = this.handleResetValidation.bind(this);\n    this.handleModalAnalysesCheck = this.handleModalAnalysesCheck.bind(this);\n    this.unseal = this.unseal.bind(this);\n    this.handleGaseousChange = this.handleGaseousChange.bind(this);\n    if (!reaction.reaction_svg_file) {\n      this.updateReactionSvg();\n    }\n  }\n\n  componentDidMount() {\n    const { reaction } = this.props;\n    const { currentUser } = this.state;\n\n    UIStore.listen(this.onUIStoreChange);\n    setTimeout(() => {\n      GasPhaseReactionActions.gaseousReaction(reaction.gaseous);\n    }, 0);\n\n    if (MatrixCheck(currentUser.matrix, commentActivation) && !reaction.isNew) {\n      CommentActions.fetchComments(reaction);\n    }\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const { reaction } = this.state;\n    const nextReaction = nextProps.reaction;\n\n\n    if (nextReaction.id !== reaction.id ||\n      nextReaction.updated_at !== reaction.updated_at ||\n      nextReaction.reaction_svg_file !== reaction.reaction_svg_file ||\n      nextReaction.can_publish !== reaction.can_publish ||\n      nextReaction.can_update !== reaction.can_update ||\n      nextReaction.updated_at !== reaction.updated_at ||\n      nextReaction.reaction_svg_file !== reaction.reaction_svg_file ||\n      nextReaction.changed || nextReaction.editedSample) {\n      this.setState(prevState => ({ ...prevState, reaction: nextReaction }));\n    }\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    const reactionFromNextProps = nextProps.reaction;\n    const reactionFromNextState = nextState.reaction;\n    const nextActiveTab = nextState.activeTab;\n    const nextActiveAnalysisTab = nextState.activeAnalysisTab;\n    const nextVisible = nextState.visible;\n    const {\n      reaction: reactionFromCurrentState, activeTab, visible, activeAnalysisTab\n    } = this.state;\n    return (\n      nextState.sealed !== reactionFromCurrentState.sealed ||\n      reactionFromNextProps.can_publish !== reactionFromCurrentState.can_publish ||\n      reactionFromNextProps.can_update !== reactionFromCurrentState.can_update ||\n      nextState.showPublishReactionModal !== this.state.showPublishReactionModal ||\n      reactionFromNextProps.id !== reactionFromCurrentState.id ||\n      reactionFromNextProps.updated_at !== reactionFromCurrentState.updated_at ||\n      reactionFromNextProps.reaction_svg_file !== reactionFromCurrentState.reaction_svg_file ||\n      !!reactionFromNextProps.changed || !!reactionFromNextProps.editedSample ||\n      nextActiveTab !== activeTab || nextVisible !== visible ||\n      nextActiveAnalysisTab !== activeAnalysisTab\n      || reactionFromNextState !== reactionFromCurrentState\n    );\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onUIStoreChange);\n  }\n\n  onUIStoreChange(state) {\n    if (state.reaction.activeTab != this.state.activeTab){\n      this.setState({\n        activeTab: state.reaction.activeTab\n      })\n    }\n  }\n\n  forcePublishRefreshClose(reaction, show) {\n    this.setState({ reaction, showPublishReactionModal: show });\n    this.forceUpdate();\n  }\n\n  unseal() {\n    const { reaction } = this.state;\n    reaction.sealed = false;\n    this.setState({ reaction });\n  }\n\n  handleModalAnalysesCheck(reaction) {\n    this.setState({ reaction });\n  }\n\n  handleValidation(element) {\n    let validates = [];\n    const reaction = element;\n    const schemeOnly = (reaction && reaction.publication && reaction.publication.taggable_data &&\n    reaction.publication.taggable_data.scheme_only === true) || false;\n    if ((reaction.rxno || '') === '' && schemeOnly === false) {\n      validates.push({ name: 'reaction_type', value: false, message: 'Reaction Type is missing.' });\n    }\n\n    if (schemeOnly === false) {\n      let hasAnalyses = (reaction.container.children.filter(c => c.container_type === 'analyses')[0].children.length > 0);\n      const startingMaterisls = (reaction.starting_materials || []);\n      if (startingMaterisls.length < 1) {\n        validates.push({ name: 'start_material', value: false, message: 'Start material is missing' });\n      }\n      startingMaterisls.forEach((st) => {\n        if (!st.amount || !st.amount.value) {\n          validates.push({ name: 'starting_materials-amount', value: false, message: `${st.molecule_iupac_name}: amount is 0` });\n        }\n      });\n      const products = (reaction.products || []);\n      if (products.length < 1) {\n        validates.push({ name: 'product', value: false, message: 'Product is missing' });\n      }\n      products.forEach((pt) => {\n        if (pt.analysisArray().length > 0) {\n          hasAnalyses = true;\n        }\n        const validatePt = validateMolecule(pt);\n        if (validatePt.length > 0) {\n          validates = validates.concat(validatePt);\n        }\n      });\n      if (!hasAnalyses) {\n        validates.push({ name: 'analyses', value: false, message: 'Analyses data is missing.' });\n      }\n    }\n    if (validates.length > 0) {\n      reaction.validates = validates;\n      this.setState({ reaction });\n    } else {\n      LoadingActions.start();\n      RepositoryActions.reviewPublish(element);\n    }\n  }\n\n  handleResetValidation() {\n    const { reaction } = this.state;\n    reaction.validates = [];\n    this.setState({ reaction });\n  }\n\n  handleCommentScreen() {\n    this.setState({ commentScreen: true });\n    this.props.toggleCommentScreen(true);\n  }\n\n  handleFullScreen() {\n    this.setState({ commentScreen: false });\n    this.props.toggleFullScreen();\n  }\n\n  handlePublishReactionModal(show) {\n    this.setState({ showPublishReactionModal: show });\n  }\n\n  updateReactionSvg() {\n    const {reaction} = this.state;\n    const materialsSvgPaths = {\n      starting_materials: reaction.starting_materials.map(material => material.svgPath),\n      reactants: reaction.reactants.map(material => material.svgPath),\n      products: reaction.products.map(material => [material.svgPath, material.equivalent])\n    };\n\n    const solvents = reaction.solvents.map((s) => {\n      const name = s.preferred_label;\n      return name;\n    }).filter(s => s);\n  }\n\n  onUIStoreChange(state) {\n    if (state.reaction.activeTab != this.state.activeTab ||\n      state.reaction.activeAnalysisTab !== this.state.activeAnalysisTab) {\n      this.setState({\n        activeTab: state.reaction.activeTab,\n        activeAnalysisTab: state.reaction.activeAnalysisTab\n      });\n    }\n  }\n\n  handleSubmit(closeView = false) {\n    LoadingActions.start();\n\n    const { reaction } = this.state;\n    if (reaction && reaction.isNew) {\n      ElementActions.createReaction(reaction);\n    } else {\n      ElementActions.updateReaction(reaction, closeView);\n    }\n\n    if (reaction.is_new || closeView) {\n      DetailActions.close(reaction, true);\n    }\n  }\n\n  reactionIsValid() {\n    const { reaction } = this.state;\n    return reaction.hasMaterials() && reaction.SMGroupValid();\n  }\n\n  handleReactionChange(reaction, options = {}) {\n    reaction.updateMaxAmountOfProducts();\n    reaction.changed = true;\n    if (options.schemaChanged) {\n      this.setState({ reaction }, () => this.updateReactionSvg());\n    } else {\n      this.setState({ reaction });\n    }\n  }\n\n  handleInputChange(type, event) {\n    let value;\n    if (type === 'temperatureUnit' || type === 'temperatureData'\n      || type === 'description' || type === 'role'\n      || type === 'observation' || type === 'durationUnit'\n      || type === 'duration' || type === 'rxno'\n      || type === 'vesselSizeAmount' || type === 'vesselSizeUnit'\n      || type === 'gaseous') {\n      value = event;\n    } else if (type === 'rfValue') {\n      value = rfValueFormat(event.target.value) || '';\n    } else {\n      value = event.target.value;\n    }\n\n    const { reaction } = this.state;\n\n    const { newReaction, options } = setReactionByType(reaction, type, value);\n    this.handleReactionChange(newReaction, options);\n  }\n\n  handleProductClick(product) {\n    const uri = Aviator.getCurrentURI();\n    const uriArray = uri.split(/\\//);\n    Aviator.navigate(`/${uriArray[1]}/${uriArray[2]}/sample/${product.id}`, { silent: true });\n    sampleShowOrNew({ params: { sampleID: product.id } });\n  }\n\n  handleProductChange(product, cb) {\n    let { reaction } = this.state\n\n    reaction.updateMaterial(product)\n    reaction.changed = true\n\n    this.setState({ reaction }, cb)\n  }\n\n  productLink(product) {\n    return (\n      <span>\n        Analysis:\n        &nbsp;\n        <span className=\"pseudo-link\"\n          onClick={() => this.handleProductClick(product)}\n          style={{ cursor: 'pointer' }}\n          title=\"Open sample window\">\n          <i className=\"icon-sample\" />&nbsp;{product.title()}\n        </span>\n      </span>\n    )\n  }\n\n  productData(reaction) {\n    const { products } = this.state.reaction;\n    const { activeAnalysisTab } = this.state;\n\n    const tabs = products.map((product, key) => {\n      const title = this.productLink(product);\n      const setState = () => this.handleProductChange(product);\n      const handleSampleChanged = (_, cb) => this.handleProductChange(product, cb);\n      return (\n        <Tab\n          key={product.id}\n          eventKey={key}\n          title={title}\n        >\n          <SampleDetailsContainers\n            sample={product}\n            setState={setState}\n            handleSampleChanged={handleSampleChanged}\n            handleSubmit={this.handleSubmit}\n            style={{ marginTop: 10 }}\n            publish={reaction.is_published}\n          />\n        </Tab>\n      );\n    });\n    const reactionTab = <span>Analysis:&nbsp;<i className=\"icon-reaction\" />&nbsp;{reaction.short_label}</span>;\n    return (\n      <Tabs\n        id=\"data-detail-tab\"\n        style={{ marginTop: '10px' }}\n        unmountOnExit\n        activeKey={activeAnalysisTab}\n        onSelect={this.handleSelectActiveAnalysisTab.bind(this)}\n      >\n        {tabs}\n        <Tab eventKey={4.1} title={reactionTab}>\n          <ListGroupItem style={{ paddingBottom: 20 }}>\n            <ReactionDetailsContainers\n              reaction={reaction}\n              parent={this}\n              readOnly={!permitOn(reaction)}\n              handleSubmit={this.handleSubmit}\n            />\n          </ListGroupItem>\n        </Tab>\n      </Tabs>\n    );\n  }\n\n  reactionSVG(reaction) {\n    if (!reaction.svgPath) {\n      return false;\n    } else {\n      const svgProps = reaction.svgPath.substr(reaction.svgPath.length - 4) === '.svg' ? { svgPath: reaction.svgPath } : { svg: reaction.reaction_svg_file }\n      if (reaction.hasMaterials()) {\n        return (\n          <SvgFileZoomPan\n            duration={300}\n            resize={true}\n            {...svgProps}\n          />)\n      }\n    }\n  }\n\n  reactionHeader(reaction) {\n    let hasChanged = reaction.changed ? '' : 'none';\n    const titleTooltip = formatTimeStampsOfElement(reaction || {});\n\n    const { currentCollection } = UIStore.getState();\n    const defCol = currentCollection && currentCollection.is_shared === false &&\n      currentCollection.is_locked === false && currentCollection.label !== 'All' ? currentCollection.id : null;\n\n\n    const copyBtn = (reaction.can_copy === true && !reaction.isNew) ? (\n      <CopyElementModal\n        element={reaction}\n        defCol={defCol}\n      />\n    ) : null;\n\n    const colLabel = reaction.isNew ? null : (\n      <ElementCollectionLabels element={reaction} key={reaction.id} placement=\"right\" />\n    );\n    if (reaction.is_published) {\n      hasChanged = 'none';\n    }\n\n    const schemeOnly = (reaction && reaction.publication && reaction.publication.taggable_data &&\n      reaction.publication.taggable_data.scheme_only === true) || false;\n\n    const rsPlanLabel = (reaction.isNew || _.isEmpty(reaction.research_plans)) ? null : (\n      <ElementResearchPlanLabels plans={reaction.research_plans} key={reaction.id} placement=\"right\" />\n    );\n\n    return (\n      <div>\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"sampleDates\">{titleTooltip}</Tooltip>}>\n          <span><i className=\"icon-reaction\" />&nbsp;{reaction.title()}</span>\n        </OverlayTrigger>\n        <ConfirmClose el={reaction} forceClose={reaction.is_published} />\n        <OverlayTrigger placement=\"bottom\"\n          overlay={<Tooltip id=\"saveReaction\">Save and Close Reaction</Tooltip>}>\n          <Button\n            bsStyle=\"warning\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.handleSubmit(true)}\n            disabled={\n              !permitOn(reaction) || !this.reactionIsValid() || reaction.isNew\n            }\n            style={{ display: hasChanged }}\n          >\n            <i className=\"fa fa-floppy-o\" />\n            <i className=\"fa fa-times\" />\n          </Button>\n        </OverlayTrigger>\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"saveReaction\">Save Reaction</Tooltip>}\n        >\n          <Button\n            bsStyle=\"warning\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.handleSubmit()}\n            disabled={!permitOn(reaction) || !this.reactionIsValid()}\n            style={{ display: hasChanged }}\n          >\n            <i className=\"fa fa-floppy-o \"></i>\n          </Button>\n        </OverlayTrigger>\n        {copyBtn}\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"fullSample\">FullScreen</Tooltip>}\n        >\n          <Button\n            bsStyle=\"info\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={this.handleFullScreen}\n          >\n            <i className=\"fa fa-expand\" />\n          </Button>\n        </OverlayTrigger>\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"generateReport\">Generate Report</Tooltip>}\n        >\n          <Button\n            bsStyle=\"success\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            disabled={reaction.changed || reaction.isNew}\n            title={(reaction.changed || reaction.isNew) ?\n              \"Report can be generated after reaction is saved.\"\n              : \"Generate report for this reaction\"}\n            onClick={() => Utils.downloadFile({\n              contents: \"/api/v1/reports/docx?id=\" + reaction.id,\n              name: reaction.name\n            })}\n          >\n            <i className=\"fa fa-cogs\" />\n          </Button>\n        </OverlayTrigger>\n        <div style={{ display: \"inline-block\", marginLeft: \"10px\" }}>\n          {colLabel}\n          {rsPlanLabel}\n          <ShowUserLabels element={reaction} />\n          <ElementAnalysesLabels element={reaction} key={reaction.id + \"_analyses\"} />\n          { schemeOnly ? <span>&nbsp;<Label>scheme only</Label></span> : '' }\n          <HeaderCommentSection element={reaction} />\n        </div>\n        {reaction.isNew\n          ? null\n          : <OpenCalendarButton isPanelHeader eventableId={reaction.id} eventableType=\"Reaction\" />}\n        <PrintCodeButton element={reaction} />\n\n        <PublishBtnReaction\n          reaction={reaction}\n          showModal={this.handlePublishReactionModal}\n        />\n        <ReviewPublishBtn element={reaction} showComment={this.handleCommentScreen} validation={this.handleValidation} />\n        <div style={{ display: \"inline-block\", marginLeft: \"10px\" }}>\n          <OrigElnTag element={reaction} />\n          <PublishedTag element={reaction} fnUnseal={this.unseal} />\n          <LabelPublication element={reaction} />\n        </div>\n      </div>\n    );\n  }\n\n  handleSelect(key) {\n    UIActions.selectTab({ tabKey: key, type: 'reaction' });\n    this.setState({\n      activeTab: key\n    });\n  }\n\n  handleSelectActiveAnalysisTab(key) {\n    UIActions.selectActiveAnalysisTab(key);\n    this.setState({\n      activeAnalysisTab: key\n    });\n  }\n\n  onTabPositionChanged(visible) {\n    this.setState({ visible });\n  }\n\n  updateReactionSvg() {\n    const { reaction } = this.state;\n    const materialsSvgPaths = {\n      starting_materials: reaction.starting_materials.map(material => material.svgPath),\n      reactants: reaction.reactants.map(material => material.svgPath),\n      products: reaction.products.map(material => [material.svgPath, material.equivalent])\n    };\n\n    const solvents = reaction.solvents.map((s) => {\n      const name = s.preferred_label;\n      return name;\n    }).filter(s => s);\n\n    let temperature = reaction.temperature_display;\n    if (/^[\\-|\\d]\\d*\\.{0,1}\\d{0,2}$/.test(temperature)) {\n      temperature = `${temperature} ${reaction.temperature.valueUnit}`;\n    }\n\n    ReactionSvgFetcher.fetchByMaterialsSvgPaths(materialsSvgPaths, temperature, solvents, reaction.duration, reaction.conditions).then((result) => {\n      reaction.reaction_svg_file = result.reaction_svg;\n      this.setState(reaction);\n    });\n  }\n\n  handleSegmentsChange(se) {\n    const { reaction } = this.state;\n    const { segments } = reaction;\n    const idx = findIndex(segments, o => o.segment_klass_id === se.segment_klass_id);\n    if (idx >= 0) { segments.splice(idx, 1, se); } else { segments.push(se); }\n    reaction.segments = segments;\n    reaction.changed = true;\n    this.setState({ reaction });\n  }\n\n  handleGaseousChange() {\n    const { reaction } = this.state;\n    this.handleInputChange('gaseous', !reaction.gaseous);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  updateReactionVesselSize(reaction) {\n    Promise.resolve().then(() => {\n      const { catalystMoles, vesselSize } = reaction.findReactionVesselSizeCatalystMaterialValues();\n\n      if (vesselSize) {\n        GasPhaseReactionActions.setReactionVesselSize(vesselSize);\n      }\n\n      if (catalystMoles) {\n        GasPhaseReactionActions.setCatalystReferenceMole(catalystMoles);\n      }\n\n      if (!vesselSize) {\n        GasPhaseReactionActions.setReactionVesselSize(null);\n      }\n\n      if (!catalystMoles) {\n        GasPhaseReactionActions.setCatalystReferenceMole(null);\n      }\n    });\n  }\n\n  render() {\n    const { reaction, visible } = this.state;\n    let { activeTab } = this.state;\n    this.updateReactionVesselSize(reaction);\n    const schemeTitle = reaction && activeTab === 'scheme' ? (\n      <div style={{ display: 'flex' }}>\n        <div style={{ paddingRight: '2px' }}>\n          <ToggleButton\n            isToggledInitial={reaction.gaseous}\n            onToggle={this.handleGaseousChange}\n            onLabel=\"Gas Scheme\"\n            offLabel=\"Default Scheme\"\n            onColor=\"#afcfee\"\n            offColor=\"#d3d3d3\"\n            tooltipOn=\"Click to enable Default mode\"\n            tooltipOff=\"Click to enable Gas mode\"\n          />\n        </div>\n      </div>\n    ) : 'Scheme';\n    const tabContentsMap = {\n      scheme: (\n        <Tab eventKey=\"scheme\" title={schemeTitle} key={`scheme_${reaction.id}`}>\n          {\n            !reaction.isNew && <CommentSection section=\"reaction_scheme\" element={reaction} />\n          }\n          <ReactionDetailsScheme\n            reaction={reaction}\n            onReactionChange={(reaction, options) => this.handleReactionChange(reaction, options)}\n            onInputChange={(type, event) => this.handleInputChange(type, event)}\n          />\n        </Tab>\n      ),\n      properties: (\n        <Tab eventKey=\"properties\" title=\"Properties\" key={`properties_${reaction.id}`}>\n          {\n            !reaction.isNew && <CommentSection section=\"reaction_properties\" element={reaction} />\n          }\n          <ReactionDetailsProperties\n            reaction={reaction}\n            onReactionChange={r => this.handleReactionChange(r)}\n            onInputChange={(type, event) => this.handleInputChange(type, event)}\n            key={reaction.checksum}\n          />\n        </Tab>\n      ),\n      references: (\n        <Tab eventKey=\"references\" title=\"References\" key={`references_${reaction.id}`}>\n          {\n            !reaction.isNew && <CommentSection section=\"reaction_references\" element={reaction} />\n          }\n          <ReactionDetailsLiteratures\n            element={reaction}\n            literatures={reaction.isNew === true ? reaction.literatures : null}\n            onElementChange={r => this.handleReactionChange(r)}\n          />\n        </Tab>\n      ),\n      analyses: (\n        <Tab eventKey=\"analyses\" title=\"Analyses\" key={`analyses_${reaction.id}`}>\n          {\n            !reaction.isNew && <CommentSection section=\"reaction_analyses\" element={reaction} />\n          }\n          {this.productData(reaction)}\n        </Tab>\n      ),\n      green_chemistry: (\n        <Tab eventKey=\"green_chemistry\" title=\"Green Chemistry\" key={`green_chem_${reaction.id}`}>\n          {\n            !reaction.isNew && <CommentSection section=\"reaction_green_chemistry\" element={reaction}/>\n          }\n          <GreenChemistry\n            reaction={reaction}\n            onReactionChange={this.handleReactionChange}\n          />\n        </Tab>\n      ),\n      variations: (\n        <Tab eventKey=\"variations\" title=\"Variations\" key={`variations_${reaction.id}`} unmountOnExit={false}>\n          <ReactionVariations\n            reaction={reaction}\n            onReactionChange={this.handleReactionChange}\n          />\n        </Tab>\n      )\n    };\n\n    const tabTitlesMap = {\n      green_chemistry: 'Green Chemistry'\n    }\n\n    addSegmentTabs(reaction, this.handleSegmentsChange, tabContentsMap);\n    const stb = [];\n    const tabContents = [];\n    visible.forEach((value) => {\n      const tabContent = tabContentsMap[value];\n      if (tabContent) { tabContents.push(tabContent); }\n      stb.push(value);\n    });\n\n    // For REPO\n    let segmentKlasses = (UserStore.getState() && UserStore.getState().segmentKlasses) || [];\n    segmentKlasses =\n      segmentKlasses.filter(s => s.element_klass && s.element_klass.name === reaction.type);\n    segmentKlasses.forEach((klass) => {\n      const visIdx = visible.indexOf(klass.label);\n      const idx = findIndex(reaction.segments, o => o.segment_klass_id === klass.id);\n      if (visIdx < 0 && idx > -1) {\n        const tabContent = tabContentsMap[klass.label];\n        if (tabContent) { tabContents.push(tabContent); }\n        stb.push(klass.label);\n      }\n    });\n\n\n    const { showPublishReactionModal } = this.state;\n    const submitLabel = (reaction && reaction.isNew) ? 'Create' : 'Save';\n    const exportButton = (reaction && reaction.isNew) ? null : <ExportSamplesBtn type=\"reaction\" id={reaction.id} />;\n\n    activeTab = (this.state.activeTab !== 0 && stb.indexOf(this.state.activeTab) > -1 &&\n      this.state.activeTab) || visible[0];\n    const panelStylePre = reaction.isPendingToSave ? 'info' : 'primary';\n    const publication = reaction.tag && reaction.tag.taggable_data &&\n      reaction.tag.taggable_data.publication;\n    const panelStyle = publication ? 'success' : panelStylePre;\n    const currentTab = (activeTab !== 0 && activeTab) || visible[0];\n\n    const validateObjs = reaction.validates && reaction.validates.filter(v => v.value === false);\n    const validationBlock = (validateObjs && validateObjs.length > 0) ? (\n      <Alert bsStyle=\"danger\" style={{ marginBottom: 'unset', padding: '5px', marginTop: '10px' }}>\n        <strong>Submission Alert</strong>&nbsp;&nbsp;\n        <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.handleResetValidation()}>Close Alert</Button>\n        <br />\n        {\n          validateObjs.map(m => (\n            <div key={uuid.v1()}>{m.message}</div>\n          ))\n        }\n      </Alert>\n    ) : null;\n    // const schemeTitle = <span>Scheme&nbsp;<HelpInfo source={reaction.is_published ? 'x' : 'scheme'} place=\"right\" /></span>;\n    return (\n      <Panel\n        className=\"element-panel-detail\"\n        bsStyle={panelStyle}\n      >\n        <Panel.Heading>{this.reactionHeader(reaction)}{validationBlock}</Panel.Heading>\n        <Panel.Body>\n          <Row><Col md={this.props.fullScreen && this.state.commentScreen ? 6 : 12}>\n            <div className={this.props.fullScreen ? 'full' : 'base'}>\n              {this.reactionSVG(reaction)}\n                <PublishReactionModal\n                    show={showPublishReactionModal}\n                    reaction={cloneDeep(reaction)}\n                    onHide={this.handlePublishReactionModal}\n                    onPublishRefreshClose={this.forcePublishRefreshClose}\n                    onHandleAnalysesCheck={this.handleModalAnalysesCheck}\n                />\n              <ElementDetailSortTab\n                type=\"reaction\"\n                availableTabs={Object.keys(tabContentsMap)}\n                tabTitles={tabTitlesMap}\n                onTabPositionChanged={this.onTabPositionChanged}\n              />\n              {this.state.sfn ? <ScifinderSearch el={reaction} /> : null}\n              <Tabs activeKey={activeTab} onSelect={this.handleSelect.bind(this)} id=\"reaction-detail-tab\" unmountOnExit={true}>\n                {tabContents}\n              </Tabs>\n              <hr />\n              <ButtonToolbar>\n                <Button bsStyle=\"primary\" onClick={() => DetailActions.close(reaction)}>\n                  Close\n                </Button>\n                <Button id=\"submit-reaction-btn\" bsStyle=\"warning\" onClick={() => this.handleSubmit()} disabled={!permitOn(reaction) || !this.reactionIsValid()}>\n                  {submitLabel}\n                </Button>\n                {exportButton}\n              </ButtonToolbar>\n              <CommentModal element={reaction} />\n            </div>\n          </Col>\n            {\n              this.props.fullScreen && this.state.commentScreen ?\n                <Col md={6}>\n                  <div className={this.props.fullScreen ? 'full' : 'base'}>\n                    <ReactionDetailsRepoComment reactionId={reaction.id} />\n                  </div>\n                </Col>\n                :\n                <div />\n            }\n          </Row>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nReactionDetails.propTypes = {\n  reaction: PropTypes.object,\n  toggleFullScreen: PropTypes.func,\n  toggleCommentScreen: PropTypes.func.isRequired,\n  fullScreen: PropTypes.bool.isRequired,\n  validates: PropTypes.array\n};\n","import React from 'react'\nimport {Table} from 'react-bootstrap'\nimport PropTypes from 'prop-types'\n\nconst CheckBoxs = ({items, toggleCheckbox, toggleCheckAll, checkedAll, customClass = 'check-box-list' , customStyle = {}}) => {\n  let checkBoxs = items.map( (setting, i) => {\n    const {text, checked} = setting\n    return(\n        <CheckBox key={i}\n                  text={text}\n                  checked={checked}\n                  toggleCheckbox={toggleCheckbox.bind(null, text, checked)} />\n    )\n  })\n  const lgth = items && items.length\n  if (customClass == 'check-box-list') {\n    customClass =  lgth && lgth < 4 ? `check-box-list-${lgth}` : 'check-box-list'\n  }\n  return (\n    <Table striped>\n      <thead>\n        <tr>\n          <th>\n            <input type=\"checkbox\"\n                   checked={checkedAll}\n                   onChange={toggleCheckAll.bind(null)}\n                   className=\"common-checkbox\" />\n            <span className=\"g-marginLeft--10\">\n              {checkedAll ? \"Deselect all\" : \"Select all\"}\n            </span>\n          </th>\n        </tr>\n      </thead>\n\n      <tbody>\n        <tr >\n          <td>\n            <ul className={customClass} style={customStyle}>\n              {checkBoxs}\n            </ul>\n          </td>\n        </tr>\n      </tbody>\n    </Table>\n  )\n}\nCheckBoxs.propTypes = {\n  items: PropTypes.array,\n  checkedAll: PropTypes.bool,\n  toggleCheckAll: PropTypes.func,\n  toggleCheckbox: PropTypes.func,\n  customClass: PropTypes.string,\n  customStyle: PropTypes.object,\n}\n\nconst CheckBox = ({text, checked, toggleCheckbox}) => {\n  return (\n    <li>\n      <input type=\"checkbox\"\n               onChange={toggleCheckbox}\n               checked={checked}\n               className=\"common-checkbox\" />\n      <span className=\"g-marginLeft--10\"> {text} </span>\n    </li>\n\n  )\n}\n\nCheckBox.propTypes = {\n  text: PropTypes.string,\n  checked: PropTypes.bool,\n  toggleCheckbox: PropTypes.func,\n}\n\nexport default CheckBoxs\n","import React from 'react';\nimport { Panel } from 'react-bootstrap';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport CheckBoxs from 'src/components/common/CheckBoxs';\n\nconst toggleSplSettings = (text, checked) => {\n  ReportActions.updateSplSettings({ text, checked });\n};\n\nconst toggleSplSettingsAll = () => {\n  ReportActions.toggleSplSettingsCheckAll();\n};\n\nconst toggleRxnSettings = (text, checked) => {\n  ReportActions.updateRxnSettings({ text, checked });\n};\n\nconst toggleRxnSettingsAll = () => {\n  ReportActions.toggleRxnSettingsCheckAll();\n};\n\nconst stdSetting = ({ splSettings, checkedAllSplSettings, rxnSettings,\n  checkedAllRxnSettings }) => (\n  <div>\n    <Panel bsStyle=\"default\">\n      <Panel.Heading>\n        <Panel.Title>\n          Sample\n        </Panel.Title>\n      </Panel.Heading>\n      <Panel.Body>\n        <CheckBoxs\n          items={splSettings}\n          toggleCheckbox={toggleSplSettings}\n          toggleCheckAll={toggleSplSettingsAll}\n          checkedAll={checkedAllSplSettings}\n        />\n      </Panel.Body>\n    </Panel>\n    <Panel bsStyle=\"default\">\n      <Panel.Heading>\n        <Panel.Title>\n          Reaction\n        </Panel.Title>\n      </Panel.Heading>\n      <Panel.Body>\n        <CheckBoxs\n          items={rxnSettings}\n          checkedAll={checkedAllRxnSettings}\n          toggleCheckbox={toggleRxnSettings}\n          toggleCheckAll={toggleRxnSettingsAll}\n        />\n      </Panel.Body>\n    </Panel>\n  </div>\n);\n\nconst toggleSiRxnSettings = (text, checked) => {\n  ReportActions.updateSiRxnSettings({ text, checked });\n};\n\nconst toggleSiRxnSettingsAll = () => {\n  ReportActions.toggleSiRxnSettingsCheckAll();\n};\n\nconst suiSetting = ({ siRxnSettings, checkedAllSiRxnSettings }) => (\n  <div>\n    <Panel bsStyle=\"default\">\n      <Panel.Heading>\n        <Panel.Title>\n          Synthesis Products Information\n        </Panel.Title>\n      </Panel.Heading>\n      <Panel.Body>\n        <CheckBoxs\n          items={siRxnSettings}\n          checkedAll={checkedAllSiRxnSettings}\n          toggleCheckbox={toggleSiRxnSettings}\n          toggleCheckAll={toggleSiRxnSettingsAll}\n        />\n      </Panel.Body>\n    </Panel>\n  </div>\n);\n\nconst spcSetting = () => (\n  <div>\n    <h5>Not applicable.</h5>\n  </div>\n);\n\nconst rxlSetting = () => (\n  <div>\n    <h5>Not applicable.</h5>\n  </div>\n);\n\nconst Setting = (props) => {\n  switch (props.template.value) {\n    case 'standard':\n      return stdSetting(props);\n    case 'spectrum':\n      return spcSetting();\n    case 'supporting_information':\n    case 'supporting_information_std_rxn':\n      return suiSetting(props);\n    case 'rxn_list_xlsx':\n    case 'rxn_list_csv':\n    case 'rxn_list_html':\n      return rxlSetting(props);\n    case 'doi_list_xlsx':\n      return rxlSetting(props);\n    default:\n      return stdSetting(props);\n  }\n};\n\nexport default Setting;\n","import React, {Component} from 'react'\nimport SVG from 'react-inlinesvg';\nimport {Alert, Label, Table, Tooltip, OverlayTrigger} from 'react-bootstrap';\nimport QuillViewer from 'src/components/QuillViewer';\nimport { map } from 'lodash';\n\nconst SectionReaction = ({reaction, settings, configs}) => {\n  const {description, literatures, starting_materials, reactants,\n         products, solvents, solvent, dangerous_products, purification,\n         observation, svgPath, tlc_description,\n         tlc_solvents, rf_value, status } = reaction;\n  const dangerousProducts = dangerous_products;\n\n  const has_analyses = !!(products.find((sample) => sample.analysesPresent()));\n\n  const showPuri = settings.purification\n    && purification\n    && purification.length !== 0;\n\n  const showDang = settings.dangerouspro\n    && dangerousProducts\n    && dangerousProducts.length !== 0;\n\n  return (\n    <div>\n      <Alert style={{ textAlign: 'center',\n                      backgroundColor: '#428bca',\n                      color:'white',\n                      border:'none'}}> {reaction.short_label}\n        <StatusContent status={status}/>\n      </Alert>\n\n      <SVGContent show={settings.diagram}\n                  svgPath={svgPath}\n                  isProductOnly={!configs.Showallchemi}\n                  products={products} />\n      <MaterialContent  show={settings.material}\n                        starting_materials={starting_materials}\n                        reactants={reactants}\n                        products={products} />\n      <SolventContent show={settings.material}\n                      solvents={solvents}\n                      solvent={solvent} />\n      <h4> Description </h4>\n      <DescriptionContent show={settings.description && description}\n                          description={description} />\n      <PurificationContent\n        show={showPuri}\n        puri={purification}\n      />\n      <br />\n      <DangerourProductsContent\n        show={showDang}\n        dang={dangerousProducts}\n      />\n      <br />\n      <TLCContent\n        show={settings.tlc && tlc_description}\n        tlcDescription={tlc_description}\n        tlcSolvents={tlc_solvents}\n        rfValue={rf_value}\n      />\n      <ObservationContent show={settings.observation && observation}\n                          observation={observation} />\n      <AnalysesContent show={settings.analysis && has_analyses}\n                       products={products} />\n      <LiteratureContent show={settings.literature && literatures && literatures.length != 0}\n                         literatures={literatures} />\n    </div>\n  )\n}\n\nconst SVGContent = ({show, svgPath, products, isProductOnly}) => {\n  const productsSvg = products.map(s => {\n    const svg = s.svgPath;\n    return (<td key={s.id}><SVG src={svg}/></td>);\n  });\n\n  if(!show) {\n    return null;\n  }\n\n  return (\n    isProductOnly\n      ? <Table className='reaction-details'>\n          <tbody>\n            <tr>\n              { productsSvg }\n            </tr>\n          </tbody>\n        </Table>\n      : <SVG key={svgPath} src={svgPath} className='reaction-details'/>\n  )\n}\n\nconst StatusContent = ({ status }) => {\n  let tooltip = null;\n  switch(status) {\n    case \"Successful\":\n      tooltip = (<Tooltip id=\"reaction_success\">Successful Reaction</Tooltip>);\n      return (\n        <OverlayTrigger placement=\"top\" overlay={tooltip}>\n          <a style={{ marginLeft: '10px', padding: '3px', color: 'white' }} >\n            <i className=\"fa fa-check-circle\" />\n          </a>\n        </OverlayTrigger>\n      );\n    case \"Planned\":\n      tooltip = (<Tooltip id=\"reaction_planned\">Planned Reaction</Tooltip>);\n      return (\n        <OverlayTrigger placement=\"top\" overlay={tooltip}>\n          <a style={{ marginLeft: '10px', padding: '3px', backgroundColor: 'white', color: 'orange' }} >\n            <i className=\"fa fa-clock-o\" />\n          </a>\n        </OverlayTrigger>\n      );\n    case \"Not Successful\":\n      tooltip = (<Tooltip id=\"reaction_fail\">Not Successful Reaction</Tooltip>);\n      return (\n        <OverlayTrigger placement=\"top\" overlay={tooltip}>\n          <a style={{ marginLeft: '10px', padding: '3px', backgroundColor: 'white', color: 'red' }} >\n            <i className=\"fa fa-times-circle-o\" />\n          </a>\n        </OverlayTrigger>\n      );\n    case \"General Procedure\":\n      tooltip = (<Tooltip id=\"general_procedure\">General Procedure</Tooltip>);\n      return (\n        <OverlayTrigger placement=\"top\" overlay={tooltip}>\n          <a style={{ marginLeft: '10px', padding: '3px', backgroundColor: 'white', color: 'blue' }} >\n            <i className=\"fa fa-home\" />\n          </a>\n        </OverlayTrigger>\n      );\n    default:\n      return null;\n  }\n};\n\nconst MaterialContent = ({show, starting_materials, reactants, products}) => {\n  const materialCalc = (target, multi, precision) => {\n    return (target ? (target*multi).toFixed(precision) : \" - \")\n  }\n\n  const equiv_or_yield = (s, isProduct) => {\n    return (\n      isProduct\n        ? materialCalc(s.equivalent*100, 1, 0).toString() + \"%\"\n        : materialCalc(s.equivalent, 1, 3)\n    )\n  }\n\n  const rows = (material, isProduct) => {\n    return (\n      typeof material != 'undefined'\n        ? material.map((sample, i) => {\n          return (\n            <tbody key={i}>\n              <tr>\n                <td colSpan=\"5\">\n                  <i className=\"fa fa-arrow-circle-right\" aria-hidden=\"true\" />&nbsp;\n                  {sample.molecule_iupac_name}&nbsp;\n                  ({sample.name || sample.external_label || sample.short_label || ''})\n                </td>\n              </tr>\n              <tr>\n                <td style={{width: '20%'}}>{sample.molecule_formula}</td>\n                <td style={{width: '20%'}}>{materialCalc(sample.amount_g, 1, 3)}</td>\n                <td style={{width: '20%'}}>{materialCalc(sample.amount_l, 1000, 3)}</td>\n                <td style={{width: '20%'}}>{materialCalc(sample.amount_mol, 1000, 3)}</td>\n                <td style={{width: '20%'}}>{equiv_or_yield(sample, isProduct)}</td>\n              </tr>\n            </tbody>\n          )})\n        : null\n    );\n  };\n  const table = dataRows => (\n    <Table striped condensed hover>\n      <thead>\n        <tr>\n          <th>Formula</th>\n          <th>Mass(g)</th>\n          <th>Vol(ml)</th>\n          <th>Amount(mmol)</th>\n          <th>Equiv/Yield</th>\n        </tr>\n      </thead>\n      {dataRows}\n    </Table>\n  );\n\n  return (\n    show ?\n      <div>\n        <h4><Label bsStyle=\"success\"> Starting Materials </Label></h4>\n        <div> {table(rows(starting_materials, false))} </div>\n        <h4><Label bsStyle=\"warning\"> Reactants </Label></h4>\n        <div> {table(rows(reactants, false))} </div>\n        <h4><Label bsStyle=\"danger\"> Products </Label></h4>\n        <div> {table(rows(products, true))} </div>\n      </div>\n      : null\n  );\n};\n\nconst SolventContent = ({ show, solvents, solvent }) => {\n  const volume = (s) => {\n    if (s.amount_l) {\n      return `(${s.amount_l * 1000}ml)`;\n    }\n    return '(0.0ml)';\n  };\n\n  const separator = (idx, last) => (\n    idx === last ? '' : ', '\n  );\n\n  const solventsData = () => {\n    const last = solvents.length - 1;\n    return solvents.map((s, i) => (\n      <pre key={i} className=\"noBorder display-inline no-padding\">\n        {s.preferred_label + volume(s) + separator(i, last)}\n      </pre>\n    ));\n  };\n\n  const solventData = () => (\n    <pre className=\"noBorder display-inline no-padding\">{solvent}</pre>\n  );\n\n  const displayContent = () => (\n    solvents.length !== 0 ? solventsData() : solventData()\n  );\n\n  return (\n    show\n      ? <div>\n        <h4 className=\"display-inline\"> Solvent(s): </h4>\n        {displayContent()}\n        </div>\n      : null\n  );\n};\n\nconst DescriptionContent = ({show, description}) => {\n  return show ? <QuillViewer value={description} /> : null;\n}\n\nconst PurificationContent = ({ show, puri }) => {\n  const puriText = typeof puri === 'object' ? puri.join(', ') : puri;\n  return (\n    show\n      ? <div>\n          <h4 className=\"display-inline\"> Type of Purification: </h4>\n          <pre className=\"noBorder display-inline no-padding\">\n            {puriText}\n          </pre>\n        </div>\n      : null\n  );\n};\n\nconst DangerourProductsContent = ({ show, dang }) => {\n  const dangText = typeof dang === 'object' ? dang.join(', ') : dang;\n  return (\n    show\n      ? <div>\n          <h4 className=\"display-inline\"> Dangerous Products: </h4>\n          <pre className=\"noBorder display-inline no-padding\">{dangText}</pre>\n        </div>\n      : null\n  );\n};\n\nconst TLCContent = ({show, tlcDescription, tlcSolvents, rfValue}) => (\n  show\n    ? <div>\n        <div>\n        <h4 className=\"display-inline\"> TLC - Control </h4>\n          <pre className=\"noBorder display-inline no-padding\">\n            Rf-value: {rfValue} (Solvent: {tlcSolvents})\n          </pre>\n        </div>\n        <div className=\"g-marginLeft--10\">\n          {tlcDescription}\n        </div>\n      </div>\n    : null\n);\n\nconst ObservationContent = ({show, observation}) => {\n  return (\n    show\n      ? <div>\n          <h4>Additional information for publication and purification details</h4>\n          <QuillViewer value={observation} />\n        </div>\n      : null\n  )\n}\n\nconst AnalysesContent = ({ show, products }) => {\n  const analyses = products.map((product, i) => (\n    product.analyses.map((analysis, j) => {\n      const content = analysis && analysis.extended_metadata\n        ? analysis.extended_metadata.content\n        : {};\n      const kind = analysis.kind ? `(${analysis.kind})` : '';\n      return (\n        analysis\n          ? <div key={i * 100 + j}>\n              <div className=\"noBorder g-marginLeft--20\">\n                <p><u>{product.molecule.sum_formular}</u> ({kind})</p>\n                <div className=\"noBorder g-marginLeft--20\">\n                  <QuillViewer value={content} />\n                  <p className=\"g-marginLeft--20\">{analysis.description}</p>\n                </div>\n              </div>\n              <br/>\n            </div>\n          : null\n      );\n    })\n  ));\n  return (\n    show\n      ? <div>\n          <h4> Analysis </h4>\n          <div className=\"noBorder\">{analyses}</div>\n        </div>\n      : null\n  );\n};\n\nconst LiteratureContent = ({show, literatures}) => {\n  const rows = map(literatures,(literature, i) => {\n    return (\n      <tr key={i}>\n        <td>{literature.title}</td>\n        <td>{literature.url}</td>\n      </tr>\n    )\n  })\n  const table = <Table striped condensed hover>\n                  <thead>\n                    <tr>\n                      <th>Title</th>\n                      <th>URL</th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    {rows}\n                  </tbody>\n                </Table>\n  return (\n    show\n      ? <div>\n          <h4> Literatures </h4>\n          <div> {table} </div>\n        </div>\n      : null\n  )\n}\n\nexport { SectionReaction, SVGContent, DescriptionContent };\n","import React from 'react';\nimport SVG from 'react-inlinesvg';\nimport { Alert } from 'react-bootstrap';\nimport QuillViewer from 'src/components/QuillViewer'\n\nconst SectionSample = ({ sample, settings, configs }) => {\n  const { short_label, molecule_iupac_name, svgPath, analyses,\n    reaction_description, name, external_label } = sample;\n\n  return (\n    <div>\n      <Alert style={{\n        textAlign: 'center',\n        backgroundColor: '#000000',\n        color: 'white',\n        border: 'none'\n      }}\n      > {`${molecule_iupac_name} (${name || external_label || short_label})`}\n      </Alert>\n\n      <SVGContent\n        show={settings.diagram}\n        svgPath={svgPath}\n      />\n\n      <AnalysesContent\n        show={settings.analyses && analyses}\n        showRecDes={settings.reactiondesc && reaction_description}\n        analyses={analyses}\n        reactionDescription={reaction_description}\n      />\n    </div>\n  );\n};\n\nconst SVGContent = ({ show, svgPath }) => {\n  if (!show) { return null; }\n  return <SVG key={svgPath} src={svgPath} className='sample-details' />\n}\n\nconst AnalysesContent = ({ show, showRecDes, analyses, reactionDescription }) => {\n  const isReDesObj = typeof reactionDescription === \"object\";\n  const init = showRecDes && isReDesObj ? reactionDescription.ops : [];\n  const analysesParagraph = () => {\n    const dataMerged = analyses.reduce((sum, a) => {\n      let defaultContent = \"{\\\"ops\\\":[{\\\"insert\\\":\\\"\\\"}]}\"\n\n      let contentJSON = a.extended_metadata.content || JSON.parse(defaultContent)\n      return [...sum, ...contentJSON.ops];\n    }, init);\n    const data = dataMerged.map(d => {\n      d.insert = d.insert.replace(/\\n/g, ' ');\n      return d;\n    });\n    return { ops: data };\n  };\n\n  return (\n    show\n      ? <div>\n        {<QuillViewer value={analysesParagraph()} />}\n      </div>\n      : null\n  );\n}\n\nexport default SectionSample;\n","import React from 'react';\nimport { SVGContent, DescriptionContent } from 'src/apps/mydb/elements/details/reports/SectionReaction';\nimport { rmDeltaRedundantSpaceBreak } from 'src/utilities/quillFormat';\n\nconst Title = ({ el, counter }) => {\n  return (\n    <h5>\n      3.{counter} {el.name} ({el.short_label})\n    </h5>\n  );\n}\n\nconst ProcedureRow = ({ el, counter }) => {\n  const clean_desc = rmDeltaRedundantSpaceBreak(el.description);\n  return (\n    <div>\n      <Title el={el} counter={counter} />\n      <SVGContent\n        show={true}\n        svgPath={el.svgPath}\n        products={[]}\n        isProductOnly={false}\n      />\n      <DescriptionContent show={true} description={clean_desc} />\n    </div>\n  );\n}\n\nconst SectionSiProcedures = ({ previewObjs }) => {\n  let counter = 0;\n  const contents = previewObjs.map(obj => {\n    if (obj.type === 'reaction' && obj.role === 'gp') {\n      counter += 1;\n      return (\n        <ProcedureRow id={obj.id} key={obj.id} el={obj} counter={counter} />\n      );\n    }\n  });\n\n  return (\n    <div>\n      {contents}\n    </div>\n  );\n}\n\nexport default SectionSiProcedures;\n","import React from 'react';\nimport _ from 'lodash';\nimport { SVGContent } from 'src/apps/mydb/elements/details/reports/SectionReaction';\nimport QuillViewer from 'src/components/QuillViewer';\nimport { fixDigit, validDigit } from 'src/utilities/MathUtils';\nimport { rmOpsRedundantSpaceBreak, frontBreak } from 'src/utilities/quillFormat';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport { Alphabet } from 'src/utilities/ElementUtils';\nimport { UserSerial } from 'src/utilities/ReportHelper';\n\nconst onlyBlank = (target) => {\n  if (target.length === 0) return true;\n  const content = target.map(t => t.insert).join('').replace(/\\s+/, '');\n  return !content;\n};\n\nconst deltaUserSerial = (molecule, molSerials) => {\n  const insert = UserSerial(molecule, molSerials);\n  return { insert, attributes: { bold: 'true' } };\n};\n\nconst Title = ({ el, counter, molSerials }) => {\n  let title = [];\n  el.products.forEach((p, i) => {\n    const us = UserSerial(p.molecule, molSerials);\n    const key = `${i}-text`;\n    const comma = <span key={`${i}-comma`}>, </span>;\n    const smn = p.showedName();\n    title = smn\n      ? [...title, <span key={key}>{smn} (<b>{us}</b>)</span>, comma]\n      : [...title, <span key={key}>&quot;<b>NAME</b>&quot; (<b>{us}</b>)</span>, comma];\n  });\n  title = _.flatten(title).slice(0, -1);\n\n  return (\n    <h5>\n      <span>{title}</span>\n    </h5>\n  );\n};\n\nconst deltaSampleMoleculeName = (s) => {\n  const smn = s.showedName();\n  if (smn) {\n    return { insert: smn };\n  }\n  return { attributes: { bold: 'true' }, insert: '\"NAME\"' };\n};\n\nconst isDisableAll = (settings) => {\n  let status = false;\n  const settingKeys = Object.keys(settings);\n  settingKeys.forEach((key) => {\n    status = status || settings[key];\n  });\n  return !status;\n};\n\nconst productEA = (p) => {\n  let ea = [];\n  p.elemental_compositions.forEach((ec) => {\n    if (ec.description === 'By molecule formula') {\n      for (let [k, v] of Object.entries(ec.data)) {\n        ea = [...ea, `${k}, ${v}`];\n      }\n    }\n    return null;\n  });\n  ea = ea.filter(r => r != null).join('; ');\n  return ea;\n};\n\nconst prdIdentifier = (counter, mol, molSerials) => (\n  [\n    { insert: `{P${counter}|` },\n    deltaUserSerial(mol, molSerials),\n    { insert: '}' },\n  ]\n);\n\nconst productContent = (products, settings, molSerials) => {\n  let content = [];\n  let counter = 0;\n\n  products.forEach((p) => {\n    const m = p.molecule;\n    const ea = productEA(p);\n    counter += 1;\n\n    const cas = p.xref && p.xref.cas ? p.xref.cas : '- ';\n    const deltaName = settings.Name ? [\n      { insert: 'Name ' },\n      ...prdIdentifier(counter, m, molSerials),\n      { insert: ': ' },\n      deltaSampleMoleculeName(p),\n      { insert: '; ' },\n    ] : [];\n\n    const pFormula = settings.Formula ? `Formula: ${m.sum_formular}; ` : '';\n    const pCAS = settings.CAS ? `CAS: ${cas}; ` : '';\n    const pMMass = settings.MolecularMas\n      ? `Molecular Mass: ${fixDigit(m.molecular_weight, 4)}; ` : '';\n    const pEMass = settings.ExactMass\n      ? `Exact Mass: ${fixDigit(m.exact_molecular_weight, 4)}; ` : '';\n    const pEA = settings.EA ? `EA: ${ea}.` : '';\n\n    const pSmiles = `Smiles: ${m.cano_smiles}`;\n    const pInChI = `InChIKey: ${m.inchikey}`;\n    const dSmiles = settings.Smiles\n      ? [{ insert: pSmiles }, { insert: '\\n' }]\n      : [];\n    const dInChI = settings.InChI\n      ? [{ insert: pInChI }, { insert: '\\n' }]\n      : [];\n\n    content = [...content, ...deltaName,\n    { insert: pFormula + pCAS + pMMass + pEMass + pEA },\n    { insert: '\\n' },\n    ...dSmiles,\n    ...dInChI,\n    { insert: '\\n' },\n    ];\n  });\n  return content;\n};\n\nconst ProductsInfo = ({ products = [], settings, molSerials }) => {\n  const disableAll = isDisableAll(settings);\n  if (disableAll) return null;\n\n  const content = productContent(products, settings, molSerials);\n  return <QuillViewer value={{ ops: content }} />;\n};\n\nconst stAndReContent = (el, prevContent, molSerials) => {\n  let counter = 0;\n  let content = prevContent;\n  [...el.starting_materials, ...el.reactants].forEach((elm) => {\n    counter += 1;\n    content = [...content,\n    { insert: `{${Alphabet(counter)}|` },\n    deltaUserSerial(elm.molecule, molSerials),\n    { insert: '} ' },\n    deltaSampleMoleculeName(elm),\n    { insert: ` (${validDigit(elm.amount_g, 3)} g, ${validDigit(elm.amount_mol * 1000, 3)} mmol, ${validDigit(elm.equivalent, 3)} equiv); ` }];\n  });\n  return { content };\n};\n\nconst solventsContent = (el, prevContent) => {\n  let counter = 0;\n  let content = prevContent;\n  el.solvents.forEach((elm) => {\n    counter += 1;\n    content = [...content,\n    { insert: `{S${counter}` },\n    { insert: '} ' },\n    deltaSampleMoleculeName(elm),\n    { insert: ` (${validDigit(elm.amount_l * 1000, 2)} mL); ` }];\n  });\n  return { content };\n};\n\nconst porductsContent = (el, prevContent, molSerials) => {\n  let counter = 0;\n  let content = prevContent;\n  content = [...content, { insert: 'Yield: ' }];\n  el.products.forEach((p) => {\n    const mol = p.molecule;\n    counter += 1;\n    content = [...content, ...prdIdentifier(counter, mol, molSerials),\n    { insert: ` = ${validDigit(p.equivalent * 100, 0)}%` },\n    { insert: ` (${validDigit(p.amount_g, 3)} g, ${validDigit(p.amount_mol * 1000, 3)} mmol)` },\n    { insert: '; ' }];\n  });\n  content = content.slice(0, -1);\n  content = [...content, { insert: '.' }];\n  return { content };\n};\n\nconst materailsContent = (el, molSerials) => {\n  const content = [];\n  const stAndRe = stAndReContent(el, content, molSerials);\n  const solvCon = solventsContent(el, stAndRe.content);\n  const prodCon = porductsContent(el, solvCon.content, molSerials);\n\n  return prodCon.content;\n};\n\nconst tlcContent = (el) => {\n  let content = [];\n  if (el.tlc_solvents) {\n    content = [{ attributes: { italic: 'true' }, insert: 'R' },\n    { attributes: { script: 'sub', italic: 'true' }, insert: 'f' },\n    { insert: ` = ${el.rf_value} (${el.tlc_solvents}).` }];\n  }\n  return content;\n};\n\nconst obsvTlcContent = (el) => {\n  let content = [];\n  const ops = el.observation.ops || [];\n  content = [...ops, ...tlcContent(el)];\n  content = rmOpsRedundantSpaceBreak(content);\n  if (onlyBlank(content)) return [];\n  return frontBreak(content);\n};\n\nconst rmHeadSpace = (content) => {\n  let els = content;\n  let head = null;\n  els.some((el) => {\n    head = el.insert.replace(/^\\s+/, '');\n    if (!head) els = [...els.slice(1)];\n    return head;\n  });\n  if (onlyBlank(els) || !head) return [];\n  els[0].insert = head;\n\n  return els;\n};\n\nconst rmTailSpace = (content) => {\n  let els = content;\n  let tail = null;\n  els.reverse().some((el) => {\n    tail = el.insert.replace(/\\s*[,.;]*\\s*$/, '');\n    if (!tail) els = [...els.slice(1)];\n    return tail;\n  });\n  if (onlyBlank(els) || !tail) return [];\n  els.reverse();\n  els[els.length - 1].insert = tail;\n\n  return els;\n};\n\nconst opsTailWithSymbol = (els, symbol) => [...els, { insert: symbol }];\n\nconst endingSymbol = (content, symbol) => {\n  if (onlyBlank(content)) return [];\n\n  let els = rmHeadSpace(content);\n  els = rmTailSpace(els);\n\n  if (onlyBlank(els)) return [];\n\n  return opsTailWithSymbol(els, symbol);\n};\n\nconst analysesContent = (products) => {\n  let content = [];\n  products.forEach((p) => {\n    const sortAnalyses = ArrayUtils.sortArrByIndex(p.analyses);\n    sortAnalyses.forEach((a) => {\n      const data = a && a.extended_metadata\n        && a.extended_metadata.report\n        && a.extended_metadata.report === 'true'\n        ? a.extended_metadata.content\n        : { ops: [] };\n      content = [...content, ...endingSymbol(data.ops, '; ')];\n    });\n  });\n  if (onlyBlank(content)) return [];\n  content = rmOpsRedundantSpaceBreak(content);\n  content = [...content.slice(0, -1), { insert: '.' }];\n  return frontBreak(content);\n};\n\nconst dangContent = (el) => {\n  if (el.dangerous_products.length === 0) return [];\n  let content = [{ attributes: { bold: 'true' }, insert: 'Attention! ' },\n  {\n    insert: 'The reaction includes the use of dangerous ' +\n      'chemicals, which have the following ' +\n      'classification: '\n  }];\n  el.dangerous_products.forEach((d) => {\n    content = [...content, { insert: d }, { insert: ', ' }];\n  });\n  content = content.slice(0, -1);\n  content = rmOpsRedundantSpaceBreak(content);\n  return content;\n};\n\nconst DangerBlock = ({ el }) => {\n  const block = dangContent(el);\n  return block.length > 0 ? <QuillViewer value={{ ops: block }} /> : null;\n};\n\nconst descContent = (el) => {\n  if (['gp', 'parts'].indexOf(el.role) >= 0) return [];\n  let block = rmOpsRedundantSpaceBreak(el.description.ops);\n  block = [{ insert: '\\n' }, ...block, { insert: '\\n' }];\n  return block;\n};\n\nconst synNameContent = (el) => {\n  const title = el.name || el.short_label;\n  return [{ insert: `${title}: ` }];\n};\n\nconst doiContent = (el) => {\n  let block = [];\n  const rdoi = el && el.tag && el.tag.taggable_data && el.tag.taggable_data.publication\n   && el.tag.taggable_data.publication.doi;\n   // prs = el.products || [];\n   // const pdois = prs.map {\n   //\n   // }\n  if (rdoi) {\n    block = [{\n      insert: `\\n Additional information on the chemical synthesis is available via Chemotion repository: \\n https://doi.org/${rdoi}\\n`\n    }];\n  }\n  return block;\n};\n\nconst ContentBlock = ({ el, molSerials }) => {\n  const synName = synNameContent(el);\n  const desc = descContent(el);\n  const materials = materailsContent(el, molSerials);\n  const obsvTlc = obsvTlcContent(el);\n  const analyses = analysesContent(el.products);\n  const dois = doiContent(el);\n  const block = [...synName, ...desc, ...materials, ...obsvTlc, ...analyses, ...dois];\n  return <QuillViewer value={{ ops: block }} />;\n};\n\nconst docFragment = (input) => {\n  const t = document.createElement('template');\n  t.innerHTML = input;\n  try {\n    return t.content.childNodes[0].childNodes[1].childNodes[2].childNodes;\n  } catch (err) {\n    return null;\n  }\n};\n\nconst bibContent = (bib, idx) => {\n  let delta = [{ insert: `[${idx + 1}] ` }];\n  const nodes = docFragment(bib);\n  if (!nodes) return [];\n  nodes.forEach((node) => {\n    const text = node.textContent;\n    let target = { insert: text };\n    if (node.nodeName === 'I') {\n      target = { attributes: { italic: 'true' }, insert: text };\n    } else if (node.nodeName === 'B') {\n      target = { attributes: { bold: 'true' }, insert: text };\n    }\n    delta = [...delta, target];\n  });\n  return [...delta, { insert: '\\n' }];\n};\n\nconst ZoteroBlock = ({ el }) => {\n  const refs = el.references || [];\n  let bibs = [];\n  refs.forEach((ref, idx) => {\n    bibs = [...bibs, ...bibContent(ref.bib, idx)];\n  });\n\n  return bibs.length > 0\n    ? <QuillViewer value={{ ops: bibs }} />\n    : null;\n};\n\nconst SynthesisRow = ({ el, counter, configs, molSerials, settings }) => (\n  <div>\n    <Title el={el} counter={counter} molSerials={molSerials} />\n    <SVGContent\n      show\n      svgPath={el.svgPath}\n      products={el.products}\n      isProductOnly={!configs.Showallchemi}\n    />\n    <ProductsInfo\n      products={el.products}\n      settings={settings}\n      molSerials={molSerials}\n    />\n    <ContentBlock el={el} molSerials={molSerials} />\n    <DangerBlock el={el} />\n    <ZoteroBlock el={el} />\n  </div>\n);\n\nconst SectionSiSynthesis = ({\n  previewObjs, configs, molSerials, settings,\n}) => {\n  let counter = 0;\n  const contents = previewObjs.map((obj) => {\n    if (obj.type === 'reaction' && obj.role !== 'gp') {\n      counter += 1;\n      return (\n        <SynthesisRow\n          id={obj.id}\n          key={obj.id}\n          el={obj}\n          counter={counter}\n          configs={configs}\n          molSerials={molSerials}\n          settings={settings}\n        />\n      );\n    }\n    return null;\n  }).filter(r => r !== null);\n\n  return (\n    <div>\n      {contents}\n    </div>\n  );\n};\n\nexport default SectionSiSynthesis;\n","import React, { Component } from 'react';\nimport _ from 'lodash';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\n\nconst TitleProduct = ({ prd, molSerials }) => {\n  const molId = prd.molId;\n  const serial = molSerials.map((ms) => {\n    if (molId === ms.mol.id) {\n      return ms.value;\n    }\n    return null;\n  }).filter(r => r !== null)[0];\n  const serialContent = serial ? `${serial}` : 'xx';\n\n  return (\n    <h5>\n      [{serialContent}] { prd.showedName }\n    </h5>\n  );\n};\n\nconst Thumbnail = ({ thumb }) => {\n  const noAvaSvg = '/images/wild_card/not_available.svg';\n  const thumbImg = `data:image/png;base64,${thumb}`;\n  const previewImg = thumb ? thumbImg : noAvaSvg;\n  return <img src={previewImg} alt=\"\" className=\"spectrum-thumbnail\" />;\n};\n\nconst isImg = (att) => {\n  const imgExts = ['jpg', 'jpeg', 'png'];\n  const ext = att.filename.split('.').pop().toLowerCase();\n  const idx = imgExts.indexOf(ext);\n  return idx >= 0;\n};\n\nconst ContentAtts = ({ prd, attThumbNails }) => {\n  const contents = prd.atts.map((att, idx) => {\n    if (!isImg(att)) {\n      return null;\n    }\n    const key = `${idx}-${att.identifier}`;\n    const thumb = attThumbNails.map(tn => (\n      tn.id === att.id ? tn.thumbnail : null\n    )).filter(r => r !== null)[0];\n    return (\n      <div key={key}>\n        <div>{att.kind}</div>\n        <Thumbnail thumb={thumb || att.thumbnail} />\n      </div>\n    );\n  });\n\n  return (\n    <div>\n      {contents}\n    </div>\n  );\n};\n\nconst RowProduct = ({ prd, molSerials, attThumbNails }) => (\n  <div>\n    <TitleProduct prd={prd} molSerials={molSerials} />\n    <ContentAtts prd={prd} attThumbNails={attThumbNails} />\n  </div>\n);\n\nclass SectionSpectrum extends Component {\n  componentDidUpdate() {\n    this.updateThumbNails();\n  }\n\n  shouldComponentUpdate(nextProps) {\n    const prevProps = this.props;\n    const isChanged = !_.isEqual(prevProps, nextProps);\n    return isChanged;\n  }\n\n  UNSAFE_componentWillUpdate() {\n    this.updateThumbNails();\n  }\n\n  updateThumbNails() {\n    const { prdAtts } = this.props;\n    const attArrIds = prdAtts.map(prdAtt => (\n      prdAtt.atts.map(att => (\n        att.thumbnail ? null : att.id\n      ))\n    ));\n    const attIds = _.flattenDeep(attArrIds).filter(r => r !== null);\n    if (attIds.length > 0) {\n      ReportActions.updateThumbNails(attIds);\n    }\n  }\n\n  renderContents() {\n    const { molSerials, prdAtts, attThumbNails } = this.props;\n\n    const contents = prdAtts.map((prd, idx) => {\n      const key = `${idx}-${prd.sum_formular}`;\n      return (\n        <div key={key}>\n          <RowProduct\n            prd={prd}\n            molSerials={molSerials}\n            attThumbNails={attThumbNails}\n          />\n        </div>\n      );\n    });\n    return contents;\n  }\n\n  render() {\n    return (\n      <div>\n        { this.renderContents() }\n      </div>\n    );\n  }\n}\n\nexport default SectionSpectrum;\n","import React from 'react';\nimport { Table, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport { UserSerial } from 'src/utilities/ReportHelper';\n\nconst rlRowTp = (content, rowId) => (\n  <Tooltip id={rowId}>\n    <p>{content}</p>\n  </Tooltip>\n);\n\nconst rlRowCont = (content, rowId) => {\n  const overlay = rlRowTp(content, rowId);\n  return (\n    <OverlayTrigger placement=\"top\" overlay={overlay}>\n      <p>{content ? content.substring(0, 15) : ''}</p>\n    </OverlayTrigger>\n  );\n};\n\nconst tableHeader = () => (\n  <thead>\n    <tr>\n      <th>Label</th>\n      <th>Image*</th>\n      <th>Name</th>\n      <th>InChI</th>\n      <th>InChIKey</th>\n      <th>Long-RInChIKey</th>\n      <th>Web-RInChIKey</th>\n      <th>Short-RInChIKey</th>\n    </tr>\n  </thead>\n);\n\nconst rowContent = (p, long, short, web, molSerials, idx) => (\n  <tr>\n    <td className=\"one-line\" >{UserSerial(p.molecule, molSerials)}</td>\n    <td className=\"one-line\" >{}</td>\n    <td className=\"one-line\" >{rlRowCont(p.showedName())}</td>\n    <td className=\"one-line\" >{rlRowCont(p.molecule.inchikey)}</td>\n    <td className=\"one-line\" >{rlRowCont(p.molecule.inchistring)}</td>\n    <td className=\"one-line\" >{rlRowCont(long, idx)}</td>\n    <td className=\"one-line\" >{rlRowCont(short, idx)}</td>\n    <td className=\"one-line\" >{rlRowCont(web, idx)}</td>\n  </tr>\n);\n\nconst tableBody = (objs, molSerials) => {\n  const contents = objs.map((r, idx) => {\n    if (r.type === 'reaction' && r.role !== 'gp') {\n      const long = r.rinchi_long_key;\n      const short = r.rinchi_short_key;\n      const web = r.rinchi_web_key;\n      return (\n        r.products.map(p => rowContent(p, long, short, web, molSerials, idx))\n      );\n    }\n    return null;\n  }).filter(r => r !== null);\n\n  return (\n    <tbody>{contents}</tbody>\n  );\n};\n\nconst SectionReactionList = ({ objs, molSerials }) => (\n  <div>\n    <p>* Images are hidden in the preview.</p>\n    <Table striped bordered condensed hover>\n      {tableHeader()}\n      {tableBody(objs, molSerials)}\n    </Table>\n  </div>\n);\n\nexport default SectionReactionList;\n","import React from 'react';\nimport _ from 'lodash';\nimport { SVGContent } from 'src/apps/mydb/elements/details/reports/SectionReaction';\nimport QuillViewer from 'src/components/QuillViewer';\nimport { fixDigit, validDigit } from 'src/utilities/MathUtils';\nimport { rmOpsRedundantSpaceBreak, frontBreak } from 'src/utilities/quillFormat';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport { Alphabet } from 'src/utilities/ElementUtils';\nimport { UserSerial, CapitalizeFirstLetter } from 'src/utilities/ReportHelper';\n\nconst onlyBlank = (target) => {\n  if (target.length === 0) return true;\n  const content = target.map(t => t.insert).join('').replace(/\\s+/, '');\n  return !content;\n};\n\nconst deltaUserSerial = (molecule, molSerials) => {\n  const insert = UserSerial(molecule, molSerials);\n  return { insert, attributes: { bold: 'true' } };\n};\n\nconst Title = ({ el, counter, molSerials }) => {\n  let title = [];\n  el.products.forEach((p, i) => {\n    const us = UserSerial(p.molecule, molSerials);\n    const key = `${i}-text`;\n    const comma = <span key={`${i}-comma`}>, </span>;\n    const smn = i == 0 ? CapitalizeFirstLetter(p.showedName()) : p.showedName();\n    title = smn\n      ? [...title, <span key={key}>{smn} (<b>{us}</b>)</span>, comma]\n      : [...title, <span key={key}>&quot;<b>NAME</b>&quot; (<b>{us}</b>)</span>, comma];\n  });\n  title = _.flatten(title).slice(0, -1);\n\n  return (\n    <h5>\n      <span>{title}</span>\n    </h5>\n  );\n};\n\nconst deltaSampleMoleculeName = (s) => {\n  const smn = s.showedName();\n  if (smn) {\n    return { insert: smn };\n  }\n  return { attributes: { bold: 'true' }, insert: '\"NAME\"' };\n};\n\nconst isDisableAll = (settings) => {\n  let status = false;\n  const settingKeys = Object.keys(settings);\n  settingKeys.forEach((key) => {\n    status = status || settings[key];\n  });\n  return !status;\n};\n\nconst productEA = (p) => {\n  let ea = [];\n  p.elemental_compositions.forEach((ec) => {\n    if (ec.description === 'By molecule formula') {\n      for (let [k, v] of Object.entries(ec.data)) {\n        ea = [...ea, `${k}, ${v}`];\n      }\n    }\n    return null;\n  });\n  ea = ea.filter(r => r != null).join('; ');\n  return ea;\n};\n\nconst prdIdentifier = (counter, mol, molSerials) => (\n  [\n    { insert: `{P${counter}|` },\n    deltaUserSerial(mol, molSerials),\n    { insert: '}' },\n  ]\n);\n\nconst productContent = (products, settings, molSerials) => {\n  let content = [];\n  let counter = 0;\n\n  products.forEach((p) => {\n    const m = p.molecule;\n    const ea = productEA(p);\n    counter += 1;\n\n    const cas = p.xref && p.xref.cas ? p.xref.cas : '- ';\n    const deltaName = settings.Name ? [\n      { insert: 'Name ' },\n      ...prdIdentifier(counter, m, molSerials),\n      { insert: ': ' },\n      deltaSampleMoleculeName(p),\n      { insert: '; ' },\n    ] : [];\n\n    const pFormula = settings.Formula ? `Formula: ${m.sum_formular}; ` : '';\n    const pCAS = settings.CAS ? `CAS: ${cas}; ` : '';\n    const pMMass = settings.MolecularMas\n      ? `Molecular Mass: ${fixDigit(m.molecular_weight, 4)}; ` : '';\n    const pEMass = settings.ExactMass\n      ? `Exact Mass: ${fixDigit(m.exact_molecular_weight, 4)}; ` : '';\n    const pEA = settings.EA ? `EA: ${ea}.` : '';\n\n    const pSmiles = `Smiles: ${m.cano_smiles}`;\n    const pInChI = `InChIKey: ${m.inchikey}`;\n    const dSmiles = settings.Smiles\n      ? [{ insert: pSmiles }, { insert: '\\n' }]\n      : [];\n    const dInChI = settings.InChI\n      ? [{ insert: pInChI }, { insert: '\\n' }]\n      : [];\n\n    content = [...content, ...deltaName,\n    { insert: pFormula + pCAS + pMMass + pEMass + pEA },\n    { insert: '\\n' },\n    ...dSmiles,\n    ...dInChI,\n    { insert: '\\n' },\n    ];\n  });\n  return content;\n};\n\nconst ProductsInfo = ({ products = [], settings, molSerials }) => {\n  const disableAll = isDisableAll(settings);\n  if (disableAll) return null;\n\n  const content = productContent(products, settings, molSerials);\n  return <QuillViewer value={{ ops: content }} />;\n};\n\nconst stAndReContent = (el, prevContent, molSerials) => {\n  let counter = 0;\n  let content = prevContent;\n  [...el.starting_materials, ...el.reactants].forEach((elm) => {\n    counter += 1;\n    content = [...content,\n    { insert: `{${Alphabet(counter)}|` },\n    deltaUserSerial(elm.molecule, molSerials),\n    { insert: '} ' },\n    deltaSampleMoleculeName(elm),\n    { insert: ` (${validDigit(elm.amount_g, 3)} g, ${validDigit(elm.amount_mol * 1000, 3)} mmol, ${validDigit(elm.equivalent, 3)} equiv); ` }];\n  });\n  return { content };\n};\n\nconst solventsContent = (el, prevContent) => {\n  let counter = 0;\n  let content = prevContent;\n  el.solvents.forEach((elm) => {\n    counter += 1;\n    content = [...content,\n    { insert: `{S${counter}` },\n    { insert: '} ' },\n    deltaSampleMoleculeName(elm),\n    { insert: ` (${validDigit(elm.amount_l * 1000, 2)} mL); ` }];\n  });\n  return { content };\n};\n\nconst porductsContent = (el, prevContent, molSerials) => {\n  let counter = 0;\n  let content = prevContent;\n  content = [...content, { insert: 'Yield: ' }];\n  el.products.forEach((p) => {\n    const mol = p.molecule;\n    counter += 1;\n    content = [...content, ...prdIdentifier(counter, mol, molSerials),\n    { insert: ` = ${validDigit(p.equivalent * 100, 0)}%` },\n    { insert: ` (${validDigit(p.amount_g, 3)} g, ${validDigit(p.amount_mol * 1000, 3)} mmol)` },\n    { insert: '; ' }];\n  });\n  content = content.slice(0, -1);\n  content = [...content, { insert: '.' }];\n  return { content };\n};\n\nconst materailsContent = (el, molSerials) => {\n  const content = [];\n  const stAndRe = stAndReContent(el, content, molSerials);\n  const solvCon = solventsContent(el, stAndRe.content);\n  const prodCon = porductsContent(el, solvCon.content, molSerials);\n\n  return prodCon.content;\n};\n\nconst tlcContent = (el) => {\n  let content = [];\n  if (el.tlc_solvents) {\n    content = [{ attributes: { italic: 'true' }, insert: 'R' },\n    { attributes: { script: 'sub', italic: 'true' }, insert: 'f' },\n    { insert: ` = ${el.rf_value} (${el.tlc_solvents}).` }];\n  }\n  return content;\n};\n\nconst obsvTlcContent = (el) => {\n  let content = [];\n  const ops = el.observation.ops || [];\n  content = [...ops, ...tlcContent(el)];\n  content = rmOpsRedundantSpaceBreak(content);\n  if (onlyBlank(content)) return [];\n  return frontBreak(content);\n};\n\nconst rmHeadSpace = (content) => {\n  let els = content;\n  let head = null;\n  els.some((el) => {\n    head = el.insert.replace(/^\\s+/, '');\n    if (!head) els = [...els.slice(1)];\n    return head;\n  });\n  if (onlyBlank(els) || !head) return [];\n  els[0].insert = head;\n\n  return els;\n};\n\nconst rmTailSpace = (content) => {\n  let els = content;\n  let tail = null;\n  els.reverse().some((el) => {\n    tail = el.insert.replace(/\\s*[,.;]*\\s*$/, '');\n    if (!tail) els = [...els.slice(1)];\n    return tail;\n  });\n  if (onlyBlank(els) || !tail) return [];\n  els.reverse();\n  els[els.length - 1].insert = tail;\n\n  return els;\n};\n\nconst opsTailWithSymbol = (els, symbol) => [...els, { insert: symbol }];\n\nconst endingSymbol = (content, symbol) => {\n  if (onlyBlank(content)) return [];\n\n  let els = rmHeadSpace(content);\n  els = rmTailSpace(els);\n\n  if (onlyBlank(els)) return [];\n\n  return opsTailWithSymbol(els, symbol);\n};\n\nconst analysesContent = (products) => {\n  let content = [];\n  products.forEach((p) => {\n    let current = [];\n    const sortAnalyses = ArrayUtils.sortArrByIndex(p.analyses);\n    sortAnalyses.forEach((a) => {\n      const data = a && a.extended_metadata\n        && a.extended_metadata.report\n        && a.extended_metadata.report === 'true'\n        ? a.extended_metadata.content\n        : { ops: [] };\n      current = [...current, ...endingSymbol(data.ops, '; ')];\n    });\n    if (!onlyBlank(current)) {\n      current = rmOpsRedundantSpaceBreak(current);\n      content = [...content, { insert: '\\n\\n' }, ...current.slice(0, -1), { insert: '.' }];\n    }\n  });\n  if (onlyBlank(content)) return [];\n  return frontBreak(content);\n};\n\nconst dangContent = (el) => {\n  if (el.dangerous_products.length === 0) return [];\n  let content = [{ attributes: { bold: 'true' }, insert: 'Attention! ' },\n  {\n    insert: 'The reaction includes the use of dangerous ' +\n      'chemicals, which have the following ' +\n      'classification: '\n  }];\n  el.dangerous_products.forEach((d) => {\n    content = [...content, { insert: d }, { insert: ', ' }];\n  });\n  content = content.slice(0, -1);\n  content = rmOpsRedundantSpaceBreak(content);\n  return content;\n};\n\nconst DangerBlock = ({ el }) => {\n  const block = dangContent(el);\n  return block.length > 0 ? <QuillViewer value={{ ops: block }} /> : null;\n};\n\nconst descContent = (el) => {\n  if (['gp', 'parts'].indexOf(el.role) >= 0) return [];\n  let block = rmOpsRedundantSpaceBreak(el.description.ops);\n  block = [{ insert: '\\n' }, ...block];\n  return block;\n};\n\nconst synNameContent = (el) => {\n  if (['gp', 'parts'].indexOf(el.role) < 0) return [];\n  const title = el.name || el.short_label;\n  return [{ insert: `${title}: ` }];\n};\n\nconst doiContent = (el) => {\n  let block = [];\n  const rdoi = el && el.tag && el.tag.taggable_data && el.tag.taggable_data.publication\n   && el.tag.taggable_data.publication.doi;\n   // prs = el.products || [];\n   // const pdois = prs.map {\n   //\n   // }\n  if (rdoi) {\n    block = [{\n      insert: `\\n Additional information on the chemical synthesis is available via Chemotion repository: \\n https://doi.org/${rdoi}\\n`\n    }];\n  }\n  return block;\n};\n\nconst ContentBlock = ({ el, molSerials }) => {\n  const synName = synNameContent(el);\n  const desc = descContent(el);\n  // const materials = materailsContent(el, molSerials);\n  const obsvTlc = obsvTlcContent(el);\n  const analyses = analysesContent(el.products);\n  const dois = doiContent(el);\n  const block = [...synName, ...desc, ...obsvTlc, ...analyses, ...dois];\n  return <QuillViewer value={{ ops: block }} />;\n};\n\nconst docFragment = (input) => {\n  const t = document.createElement('template');\n  t.innerHTML = input;\n  try {\n    return t.content.childNodes[0].childNodes[1].childNodes[2].childNodes;\n  } catch (err) {\n    return null;\n  }\n};\n\nconst bibContent = (bib, idx) => {\n  let delta = [{ insert: `[${idx + 1}] ` }];\n  const nodes = docFragment(bib);\n  if (!nodes) return [];\n  nodes.forEach((node) => {\n    const text = node.textContent;\n    let target = { insert: text };\n    if (node.nodeName === 'I') {\n      target = { attributes: { italic: 'true' }, insert: text };\n    } else if (node.nodeName === 'B') {\n      target = { attributes: { bold: 'true' }, insert: text };\n    }\n    delta = [...delta, target];\n  });\n  return [...delta, { insert: '\\n' }];\n};\n\nconst ZoteroBlock = ({ el }) => {\n  const refs = el.references || [];\n  let bibs = [];\n  refs.forEach((ref, idx) => {\n    bibs = [...bibs, ...bibContent(ref.bib, idx)];\n  });\n\n  return bibs.length > 0\n    ? <QuillViewer value={{ ops: bibs }} />\n    : null;\n};\n\nconst SynthesisRow = ({ el, counter, configs, molSerials, settings }) => (\n  <div>\n    <Title el={el} counter={counter} molSerials={molSerials} />\n    <SVGContent\n      show\n      svgPath={el.svgPath}\n      products={el.products}\n      isProductOnly={!configs.Showallchemi}\n    />\n    <ProductsInfo\n      products={el.products}\n      settings={settings}\n      molSerials={molSerials}\n    />\n    <ContentBlock el={el} molSerials={molSerials} />\n    <DangerBlock el={el} />\n    <ZoteroBlock el={el} />\n  </div>\n);\n\nconst SectionSiSynthesis = ({\n  previewObjs, configs, molSerials, settings,\n}) => {\n  let counter = 0;\n  const contents = previewObjs.map((obj) => {\n    if (obj.type === 'reaction' && obj.role !== 'gp') {\n      counter += 1;\n      return (\n        <SynthesisRow\n          id={obj.id}\n          key={obj.id}\n          el={obj}\n          counter={counter}\n          configs={configs}\n          molSerials={molSerials}\n          settings={settings}\n        />\n      );\n    }\n    return null;\n  }).filter(r => r !== null);\n\n  return (\n    <div>\n      {contents}\n    </div>\n  );\n};\n\nexport default SectionSiSynthesis;\n","import React from 'react';\nimport SVG from 'react-inlinesvg';\nimport { Table, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport ReportStore from 'src/stores/alt/stores/ReportStore';\nimport { UserSerial } from 'src/utilities/ReportHelper';\nimport ReportsFetcher from 'src/fetchers/ReportsFetcher';\n\n\nconst svgPath = (svg, type) => {\n  if (svg && svg !== '***') {\n    if (type === 'Reaction') {\n      return `/images/reactions/${svg}`;\n    }\n    return `/images/samples/${svg}`;\n  }\n  return 'images/wild_card/no_image_180.svg';\n};\n\nexport default class SectionDoiList extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      objs: props.objs,\n      molSerials: props.molSerials,\n      dois: []\n    };\n\n    this.initGetDoi = this.initGetDoi.bind(this);\n  }\n  componentDidMount() {\n    this.initGetDoi();\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    if (nextProps.objs && nextProps.objs.length > 0) {\n      if (this.state.objs.length !== nextProps.objs.length) {\n        this.setState({ objs: nextProps.objs });\n        this.initGetDoi();\n      }\n    }\n    return true;\n  }\n\n  initGetDoi() {\n    ReportsFetcher.getDois(this.props.objs)\n      .then((result) => {\n        this.setState({\n          dois: result.dois\n        })\n      });\n  }\n\n  render() {\n    const { dois } = this.state;\n    let doiTbl = <span />\n    if (dois && dois.length > 0) {\n      doiTbl = dois.map((e) => {\n        let ds = <div />;\n        if (typeof (e.dois) !== 'undefined' && e.dois && e.dois.length > 0) {\n          ds = e.dois.map(d => d == null ? <div/> : (<div>{d}<br /></div>) )\n        }\n        return (\n          <tr key={e.element_id}>\n            <td style={{ width: '30%' }}>\n              <div>\n                <SVG src={svgPath(e.svg, e.element_type)} className=\"molecule-mid\" key={e.svg} />\n              </div>\n            </td>\n            <td style={{ width: '70%' }}>{ds}</td>\n          </tr>\n        )\n      });\n    }\n    return (\n      <Table striped bordered hover>\n        <thead>\n          <tr>\n            <th width=\"30%\">SVG</th>\n            <th width=\"70%\">DOI</th>\n          </tr>\n        </thead>\n        <tbody>\n          { doiTbl }\n        </tbody>\n      </Table>\n    );\n  }\n}\n","import React from 'react';\nimport { SectionReaction } from 'src/apps/mydb/elements/details/reports/SectionReaction';\nimport SectionSample from 'src/apps/mydb/elements/details/reports/SectionSample';\nimport SectionSiProcedures from 'src/apps/mydb/elements/details/reports/SectionSiProcedures';\nimport SectionSiSynthesis from 'src/apps/mydb/elements/details/reports/SectionSiSynthesis';\nimport SectionSpectrum from 'src/apps/mydb/elements/details/reports/SectionSpectrum';\nimport SectionReactionList from 'src/apps/mydb/elements/details/reports/SectionReactionList';\nimport SectionSiSynthesisStdRxn from 'src/apps/mydb/elements/details/reports/SectionSiSynthesisStdRxn';\nimport SectionDoiList from 'src/components/report/SectionDoiList';\n\nconst objToKeyValPairs = (obj = []) => (\n  obj.reduce((ob, { text, checked }) => {\n    const o = ob;\n    const oTitle = text.replace(/\\s+/g, '').substring(0, 12);\n    o[oTitle] = checked;\n    return o;\n  }, {})\n);\n\nconst stdPreviews = ({\n  previewObjs,\n  splSettings,\n  rxnSettings,\n  configs\n}) => {\n  const splSettingsPairs = objToKeyValPairs(splSettings);\n  const rxnSettingsPairs = objToKeyValPairs(rxnSettings);\n  const configsPairs = objToKeyValPairs(configs);\n\n  const objs = previewObjs.map((obj, i) => (\n    obj.type === 'sample'\n      ? <SectionSample\n        key={i}\n        sample={obj}\n        settings={splSettingsPairs}\n        configs={configsPairs}\n      />\n      : <SectionReaction\n        key={i}\n        reaction={obj}\n        settings={rxnSettingsPairs}\n        configs={configsPairs}\n      />\n  ));\n\n  return (\n    <div> {objs} </div>\n  );\n};\n\nconst suiPreviews = ({ previewObjs, configs, molSerials, siRxnSettings }) => {\n  const configsPairs = objToKeyValPairs(configs);\n  const setPairs = objToKeyValPairs(siRxnSettings);\n\n  return (\n    <div>\n      <p>Experimental Part:</p>\n      <br />\n      <h4>1 Versions</h4>\n      <p>Version InChI (1.04), Version SMILES (Daylight)</p>\n      <br />\n      <h4>2 General remarks</h4>\n      <br />\n      <h4>3 General procedures</h4>\n      <SectionSiProcedures previewObjs={previewObjs} />\n      <br />\n      <h4>4 Synthesis</h4>\n      <SectionSiSynthesis\n        previewObjs={previewObjs}\n        configs={configsPairs}\n        molSerials={molSerials}\n        settings={setPairs}\n      />\n      <br />\n    </div>\n  );\n};\n\nconst suiStdRxnPreviews = ({ previewObjs, configs, molSerials, siRxnSettings }) => {\n  const configsPairs = objToKeyValPairs(configs);\n  const setPairs = objToKeyValPairs(siRxnSettings);\n\n  return (\n    <div>\n      <p>Experimental Part:</p>\n      <br />\n      <h4>1 Versions</h4>\n      <p>Version InChI (1.04), Version SMILES (Daylight)</p>\n      <br />\n      <h4>2 General remarks</h4>\n      <br />\n      <h4>3 General procedures</h4>\n      <SectionSiProcedures previewObjs={previewObjs} />\n      <br />\n      <h4>4 Synthesis</h4>\n      <SectionSiSynthesisStdRxn\n        previewObjs={previewObjs}\n        configs={configsPairs}\n        molSerials={molSerials}\n        settings={setPairs}\n      />\n      <br />\n    </div>\n  );\n};\n\nconst spcPreviews = ({ prdAtts, molSerials, attThumbNails }) => (\n  <div>\n    <SectionSpectrum\n      prdAtts={prdAtts}\n      molSerials={molSerials}\n      attThumbNails={attThumbNails}\n    />\n    <br />\n  </div>\n);\n\nconst rxlPreviews = ({ previewObjs, molSerials }) => (\n  <SectionReactionList\n    objs={previewObjs}\n    molSerials={molSerials}\n  />\n);\n\nconst doiPreviews = ({ selectedObjs, molSerials }) => (\n  <SectionDoiList\n    objs={selectedObjs}\n    molSerials={molSerials}\n  />\n);\n\nconst previewsContent = (props) => {\n  switch (props.template.value) {\n    case 'standard':\n      return stdPreviews(props);\n    case 'spectrum':\n      return spcPreviews(props);\n    case 'supporting_information':\n      return suiPreviews(props);\n    case 'supporting_information_std_rxn':\n      return suiStdRxnPreviews(props);\n    case 'rxn_list_xlsx':\n    case 'rxn_list_csv':\n    case 'rxn_list_html':\n      return rxlPreviews(props);\n    case 'doi_list_xlsx':\n    return doiPreviews(props);\n    default:\n      return stdPreviews(props);\n  }\n};\n\nconst Previews = props => (\n  <div className=\"report-preview\">\n    {previewsContent(props)}\n  </div>\n);\n\nexport default Previews;\n","import React from 'react';\nimport SVG from 'react-inlinesvg';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport { compose } from 'redux';\nimport { Panel, Button } from 'react-bootstrap';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport UIActions from 'src/stores/alt/actions/UIActions';\n\nconst orderSource = {\n  beginDrag(props) {\n    return { id: props.id, type: props.element.type };\n  },\n};\n\nconst orderTarget = {\n  drop(targetProps, monitor) {\n    const targetTag = { id: targetProps.id, type: targetProps.element.type };\n    const sourceProps = monitor.getItem();\n    const sourceTag = { id: sourceProps.id, type: sourceProps.type };\n    if (targetTag.type !== sourceTag.type || targetTag.id !== sourceTag.id) {\n      ReportActions.move({ sourceTag, targetTag });\n    }\n  },\n};\n\nconst orderDragCollect = (connect, monitor) => (\n  {\n    connectDragSource: connect.dragSource(),\n    isDragging: monitor.isDragging(),\n  }\n);\n\nconst orderDropCollect = (connect, monitor) => (\n  {\n    connectDropTarget: connect.dropTarget(),\n    isOver: monitor.isOver(),\n    canDrop: monitor.canDrop(),\n  }\n);\n\nconst headerTitle = (el, icon) => {\n  const clickToRm = () => {\n    ReportActions.remove({ type: el.type, id: el.id });\n    UIActions.uncheckWholeSelection.defer();\n  };\n\n  return (\n    <span>\n      {el.title()} {icon}\n      <Button\n        bsStyle=\"danger\"\n        bsSize=\"xsmall\"\n        className=\"button-right\"\n        onClick={clickToRm}\n      >\n        <i className=\"fa fa-times\" />\n      </Button>\n    </span>\n  );\n};\n\nconst ObjRow = ({ element, template, connectDragSource, connectDropTarget,\n  isDragging, isOver, canDrop }) => {\n  const style = {};\n  if (canDrop) {\n    style.borderStyle = 'dashed';\n    style.borderWidth = 2;\n  }\n  if (isOver) {\n    style.borderColor = '#337ab7';\n  }\n  if (isDragging) {\n    style.opacity = 0.2;\n  }\n\n  let bsStyle = 'default';\n  let icon = null;\n  const isStdTemplate = template === 'standard';\n  const { type, role } = element;\n  if (type === 'sample') {\n    bsStyle = 'success';\n  } else if (!isStdTemplate && type === 'reaction' && role === 'gp') {\n    bsStyle = 'primary';\n    icon = <i className=\"fa fa-home c-bs-info\" />;\n  } else if (!isStdTemplate && type === 'reaction' && role === 'single') {\n    bsStyle = 'default';\n    icon = <i className=\"fa fa-asterisk c-bs-danger\" />;\n  } else if (!isStdTemplate && type === 'reaction' && role === 'parts') {\n    bsStyle = 'info';\n    icon = <i className=\"fa fa-bookmark c-bs-success\" />;\n  } else if (type === 'reaction') {\n    bsStyle = 'info';\n  }\n\n  return compose(connectDragSource, connectDropTarget)(\n    <div>\n      <Panel\n        style={style}\n        bsStyle={bsStyle}\n      >\n        <Panel.Heading>{headerTitle(element, icon)}</Panel.Heading>\n        <div className=\"row\">\n          <div className=\"svg\">\n            <SVG src={element.svgPath} key={element.svgPath} />\n          </div>\n          <div className=\"dnd-btn\">\n            <span\n              style={{ fontSize: '18pt', cursor: 'move' }}\n              className=\"text-info fa fa-arrows\"\n            />\n          </div>\n        </div>\n      </Panel>\n    </div>,\n  );\n};\n\nexport default compose(\n  DragSource(DragDropItemTypes.GENERAL, orderSource, orderDragCollect),\n  DropTarget(DragDropItemTypes.GENERAL, orderTarget, orderDropCollect),\n)(ObjRow);\n","import React from 'react';\nimport ObjRow from 'src/apps/mydb/elements/details/reports/OrdersDnD';\n\nconst allContent = ({ selectedObjs, template }) => (\n  selectedObjs.map(obj => (\n    <ObjRow\n      id={obj.id}\n      key={`${obj.type}${obj.id}`}\n      element={obj}\n      template={template}\n    />\n  ))\n);\n\nconst suiContent = ({ selectedObjs, template }) => (\n  selectedObjs.map((obj) => {\n    if (obj.type === 'reaction') {\n      return (\n        <ObjRow\n          id={obj.id}\n          key={`${obj.type}${obj.id}`}\n          element={obj}\n          template={template}\n        />\n      );\n    }\n    return null;\n  }).filter(r => r != null)\n);\n\nconst spcContent = props => suiContent(props);\n\nconst rxlContent = props => suiContent(props);\n\nconst doiContent = props => suiContent(props);\n\nconst ordersContent = (props) => {\n  switch (props.template.value) {\n    case 'standard':\n      return allContent(props);\n    case 'spectrum':\n      return spcContent(props);\n    case 'supporting_information':\n    case 'supporting_information_std_rxn':\n      return suiContent(props);\n    case 'rxn_list_xlsx':\n    case 'rxn_list_csv':\n    case 'rxn_list_html':\n      return rxlContent(props);\n    case 'doi_list_xlsx':\n      return doiContent(props);\n    default:\n      return allContent(props);\n  }\n};\n\nconst Orders = props => (\n  <div className=\"report-orders\">\n    {ordersContent(props)}\n  </div>\n);\n\nexport default Orders;\n","import React, { Component } from 'react';\n\nexport default class CommonInput extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      value: props.value,\n    };\n\n    this.onBlur = this.onBlur.bind(this);\n    this.onChange = this.onChange.bind(this);\n  }\n\n  onBlur(e) {\n    this.props.onCompleteEdit(e.target.value);\n  }\n\n  onChange(e) {\n    this.setState({ value: e.target.value });\n  }\n\n  render() {\n    const { placeholder } = this.props;\n    const { value } = this.state;\n\n    return (\n      <input\n        value={value || ''}\n        placeholder={placeholder || ''}\n        onBlur={this.onBlur}\n        onChange={this.onChange}\n      />\n    );\n  }\n}\n","import React from 'react';\nimport SVG from 'react-inlinesvg';\nimport { Panel } from 'react-bootstrap';\nimport Formula from 'src/components/common/Formula';\nimport CommonInput from 'src/components/common/CommonInput';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\n\nconst Serial = ({ serial, counter }) => {\n  if (!serial) return null;\n  const mol = serial.mol;\n  const oddClass = counter % 2 === 1 ? 'order-even' : null;\n  const onCompleteEdit = val => ReportActions.updMSVal(mol.id, val);\n\n  return (\n    <Panel eventKey={counter} key={counter} >\n      <Panel.Body>\n        <div className=\"report-serial\">\n          <div className={`order ${oddClass}`}>{counter + 1}</div>\n          <div className=\"svg\">\n            <SVG src={mol.svgPath} key={mol.svgPath} />\n          </div>\n          <div className=\"info\">\n            <p><Formula formula={mol.sumFormula} /></p>\n            <p>{mol.iupacName}</p>\n          </div>\n          <div className=\"input\">\n            <CommonInput\n              value={serial.value}\n              key={mol.id}\n              placeholder=\"xx\"\n              onCompleteEdit={onCompleteEdit}\n            />\n          </div>\n        </div>\n      </Panel.Body>\n    </Panel>\n  );\n};\n\nconst stdSerials = () => (<h5>Not applicable.</h5>);\n\nconst suiSerials = (props) => {\n  const { selMolSerials, template } = props;\n  const contents = selMolSerials.map((molSer, i) => (\n    <Serial id={i} key={`ms-${molSer.mol.id}`} serial={molSer} counter={i} />\n  ));\n\n  return <div className=\"report-serials\">{contents}</div>;\n};\n\nconst spcSerials = props => suiSerials(props);\n\nconst rxlSerials = props => suiSerials(props);\n\nconst doiSerials = props => suiSerials(props);\n\nconst Serials = (props) => {\n  switch (props.template.value) {\n    case 'standard':\n      return stdSerials();\n    case 'spectrum':\n      return spcSerials(props);\n    case 'supporting_information':\n    case 'supporting_information_std_rxn':\n      return suiSerials(props);\n    case 'rxn_list_xlsx':\n    case 'rxn_list_csv':\n    case 'rxn_list_html':\n      return rxlSerials(props);\n    case 'doi_list_xlsx':\n      return doiSerials(props);\n    default:\n      return stdSerials();\n  }\n};\n\nexport default Serials;\n","import React from 'react';\nimport {\n  Button,\n  Label,\n  PanelGroup,\n  Panel,\n  OverlayTrigger,\n  Tooltip\n} from 'react-bootstrap';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport { stopBubble } from 'src/utilities/DomHelper';\n\nconst fileDescription = archive => (\n  archive.file_description\n    ? <p>{archive.file_description}</p>\n    : <p className=\"text-comment\">No file description</p>\n);\n\nconst clickDownloadReport = (e, archiveId, template) => {\n  e.stopPropagation();\n  ReportActions.downloadReport(archiveId, template);\n};\n\nconst reportStatusBtn = (archive) => {\n  const { downloadable, id, template } = archive;\n  const onClickDownloadReport = e => clickDownloadReport(e, id, template);\n  const downloadTP = <Tooltip id=\"download-docx\">Download</Tooltip>;\n  const processTP = (\n    <Tooltip id=\"wait-processing\">\n      Processing the report. Please wait\n    </Tooltip>\n  );\n  const downloadBtn = (\n    <OverlayTrigger placement=\"top\" overlay={downloadTP}>\n      <Button bsStyle=\"primary\" bsSize=\"small\" onClick={onClickDownloadReport}>\n        <i className=\"fa fa-download\" />\n      </Button>\n    </OverlayTrigger>\n  );\n\n  const processBtn = (\n    <OverlayTrigger placement=\"top\" overlay={processTP}>\n      <Button bsStyle=\"default\" bsSize=\"small\" onClick={stopBubble}>\n        <i className=\"fa fa-clock-o\" />\n      </Button>\n    </OverlayTrigger>\n  );\n\n  return downloadable ? downloadBtn : processBtn;\n};\n\nconst clickToDelete = (e, archive) => {\n  e.stopPropagation();\n  if (confirm('Are you sure to delete this archive?')) {\n    ReportActions.delete(archive);\n  }\n};\n\nconst deleteBtn = (archive) => {\n  const onClickToDelete = e => clickToDelete(e, archive);\n  const deleteTP = (\n    <Tooltip id=\"delete-tp\">\n      Delete this archive.\n    </Tooltip>\n  );\n\n  const btn = (\n    <OverlayTrigger placement=\"top\" overlay={deleteTP}>\n      <Button bsStyle=\"danger\" bsSize=\"small\" onClick={onClickToDelete}>\n        <i className=\"fa fa-times\" />\n      </Button>\n    </OverlayTrigger>\n  );\n\n  return btn;\n};\n\nconst clickToClone = (e, archive) => {\n  e.stopPropagation();\n  LoadingActions.start();\n  ReportActions.clone.defer(archive);\n  UIActions.uncheckWholeSelection.defer();\n};\n\nconst cloneBtn = (archive) => {\n  const onClickToClone = e => clickToClone(e, archive);\n  const cloneTP = (\n    <Tooltip id=\"clone-tp\">\n      Load data from this report.\n    </Tooltip>\n  );\n\n  const btn = (\n    <OverlayTrigger placement=\"top\" overlay={cloneTP}>\n      <Button bsStyle=\"warning\" bsSize=\"small\" onClick={onClickToClone}>\n        <i className=\"fa fa-pencil\" />\n      </Button>\n    </OverlayTrigger>\n  );\n\n  return btn;\n};\n\nconst suiTooltip = () => (\n  <Tooltip id=\"sui-tp\">Supporting Information</Tooltip>\n);\n\nconst suiLabel = () => (\n  <OverlayTrigger placement=\"right\" overlay={suiTooltip()}>\n    <Label bsStyle=\"info\">SI</Label>\n  </OverlayTrigger>\n);\n\nconst suiStdRxnLabelTooltip = () => (\n  <Tooltip id=\"sui-tp\">Supporting Information - Standard Reaction</Tooltip>\n);\n\nconst suiStdRxnLabel = () => (\n  <OverlayTrigger placement=\"right\" overlay={suiStdRxnLabelTooltip()}>\n    <Label bsStyle=\"info\">SI STD-RXN</Label>\n  </OverlayTrigger>\n);\n\nconst spcTooltip = () => (\n  <Tooltip id=\"spc-tp\">SI Spectrum</Tooltip>\n);\n\nconst spcLabel = () => (\n  <OverlayTrigger placement=\"right\" overlay={spcTooltip()}>\n    <Label bsStyle=\"info\">SI-SPC</Label>\n  </OverlayTrigger>\n);\n\nconst rxlTooltip = () => (\n  <Tooltip id=\"spc-tp\">SI Reaction List Xlsx</Tooltip>\n);\n\nconst rxlXlsxLabel = () => (\n  <OverlayTrigger placement=\"right\" overlay={rxlTooltip()}>\n    <Label bsStyle=\"info\">SI-XLSX</Label>\n  </OverlayTrigger>\n);\n\nconst rxlCsvLabel = () => (\n  <OverlayTrigger placement=\"right\" overlay={rxlTooltip()}>\n    <Label bsStyle=\"info\">SI-CSV</Label>\n  </OverlayTrigger>\n);\n\nconst rxlHtmlLabel = () => (\n  <OverlayTrigger placement=\"right\" overlay={rxlTooltip()}>\n    <Label bsStyle=\"info\">SI-HTML</Label>\n  </OverlayTrigger>\n);\n\nconst templateLable = (archive) => {\n  switch (archive.template.value) {\n    case 'standard':\n      return null;\n    case 'spectrum':\n      return spcLabel();\n    case 'supporting_information':\n      return suiLabel();\n    case 'supporting_information_std_rxn':\n      return suiStdRxnLabel();\n    case 'rxn_list_xlsx':\n      return rxlXlsxLabel();\n    case 'rxn_list_csv':\n      return rxlCsvLabel();\n    case 'rxn_list_html':\n      return rxlHtmlLabel();\n    default:\n      return null;\n  }\n};\n\nconst title = (archive) => {\n  const newLabel = archive.unread\n    ? <Label bsStyle=\"warning\">new</Label>\n    : null;\n\n  return (\n    <div style={{ width: '100%', lineHeight: '30px' }}>\n      {archive.file_name} {newLabel} {templateLable(archive)}\n      <div className=\"button-right\">\n        {cloneBtn(archive)}\n        <span>&nbsp;</span>\n        {reportStatusBtn(archive)}\n        <span>&nbsp;</span>\n        {deleteBtn(archive)}\n      </div>\n    </div>\n  );\n};\n\nconst Archives = ({ archives }) => {\n  const content = archives.map((archive, index) => (\n    <Panel\n      eventKey={index}\n      key={index}\n    >\n      <Panel.Heading>{title(archive)}</Panel.Heading>\n      {fileDescription(archive)}\n    </Panel>\n  ));\n\n  return (\n    <PanelGroup accordion>\n      {content}\n    </PanelGroup>\n  );\n};\n\nexport default Archives;\n","import React from 'react';\nimport Select from 'react-select';\nimport {\n  FormGroup, OverlayTrigger, ControlLabel, FormControl, Tooltip,\n  Row, Col\n} from 'react-bootstrap';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport CheckBoxs from 'src/components/common/CheckBoxs';\n\nconst imgFormatOpts = () => (\n  [\n    { label: 'PNG', value: 'png' },\n    { label: 'EPS', value: 'eps' },\n    { label: 'EMF', value: 'emf' },\n  ]\n);\n\nconst EpsWarning = ({ imgFormat }) => (\n  imgFormat === 'eps'\n    ? <p className=\"text-danger\" style={{ paddingTop: 12 }}>\n      WARNING: EPS format is not supported by Microsoft Office\n    </p>\n    : null\n);\n\nconst onImgFormatChange = (e) => {\n  ReportActions.updateImgFormat(e.value);\n};\n\nconst ImgFormat = ({ imgFormat }) => (\n  <Row style={{ paddingBottom: 100 }} >\n    <Col md={3} sm={8}>\n      <label>Images format</label>\n      <Select\n        options={imgFormatOpts()}\n        value={imgFormat}\n        clearable={false}\n        style={{ width: 100 }}\n        onChange={onImgFormatChange}\n      />\n    </Col>\n    <Col md={9} sm={16}>\n      <label />\n      <EpsWarning imgFormat={imgFormat} />\n    </Col>\n  </Row>\n);\n\nconst FileDescription = ({ fileDescription }) => (\n  <FormGroup>\n    <ControlLabel>File description</ControlLabel>\n    <FormControl\n      componentClass=\"textarea\"\n      onChange={ReportActions.updateFileDescription}\n      rows={2}\n      value={fileDescription}\n    />\n  </FormGroup>\n);\n\nconst fileNameRule = () => (\n  <Tooltip id=\"file-name-rule\" >\n    <p>Max 40 characters.</p>\n    <p>allowed: a to z, A to Z, 0 to 9, -, _</p>\n  </Tooltip>\n);\n\nconst FileName = ({ fileName }) => (\n  <FormGroup>\n    <OverlayTrigger overlay={fileNameRule()}>\n      <ControlLabel>\n        File Name\n      </ControlLabel>\n    </OverlayTrigger>\n    <FormControl\n      type=\"text\"\n      value={fileName}\n      onChange={ReportActions.updateFileName}\n    />\n  </FormGroup>\n);\n\nconst onTemplateChange = (e) => {\n  ReportActions.updateTemplate(e);\n};\n\nfunction TemplateRender(template, options) {\n  const templateOpts = options.map(item => ({ id: item.id, label: item.name, value: item.report_type }));\n\n  return (\n    <Row>\n      <Col md={6} sm={12}>\n        <label>Template Selection</label>\n        <Select\n          options={templateOpts}\n          value={template}\n          clearable={false}\n          onChange={onTemplateChange}\n        />\n      </Col>\n      <Col md={6} sm={12} />\n    </Row>\n  );\n}\n\nconst toggleConfigs = (text, checked) => {\n  ReportActions.updateConfigs({ text, checked });\n};\n\nconst toggleConfigsAll = () => {\n  ReportActions.toggleConfigsCheckAll();\n};\n\nconst suiConfig = ({ template, configs, fileName, checkedAllConfigs,\n  fileDescription, options }) => {\n\n  const filteredConfigs = configs.filter(c => c.text === 'Show all chemicals in schemes (unchecked to show products only)');\n  return (\n    <div>\n      <br />\n      {TemplateRender(template, options)}\n      <br />\n      <FileName fileName={fileName} />\n      <FileDescription fileDescription={fileDescription} />\n      <CheckBoxs\n        items={filteredConfigs}\n        toggleCheckbox={toggleConfigs}\n        toggleCheckAll={toggleConfigsAll}\n        checkedAll={checkedAllConfigs}\n      />\n    </div>\n  );\n};\n\nconst suiStdRxnConfig = ({\n  template, configs, fileName, checkedAllConfigs, fileDescription, options\n}) => {\n  const filteredConfigs = configs.filter(c => c.text === 'Show all chemicals in schemes (unchecked to show products only)');\n  return (\n    <div>\n      <br />\n      {TemplateRender(template, options)}\n      <br />\n      <FileName fileName={fileName} />\n      <FileDescription fileDescription={fileDescription} />\n      <CheckBoxs\n        items={filteredConfigs}\n        toggleCheckbox={toggleConfigs}\n        toggleCheckAll={toggleConfigsAll}\n        checkedAll={checkedAllConfigs}\n      />\n    </div>\n  );\n};\n\nconst stdConfig = ({\n  template,\n  configs,\n  fileName,\n  checkedAllConfigs,\n  imgFormat,\n  fileDescription,\n  options\n}) => (\n  <div>\n    <br />\n    {TemplateRender(template, options)}\n    <br />\n    <FileName fileName={fileName} />\n    <FileDescription fileDescription={fileDescription} />\n    <CheckBoxs\n      items={configs}\n      toggleCheckbox={toggleConfigs}\n      toggleCheckAll={toggleConfigsAll}\n      checkedAll={checkedAllConfigs}\n    />\n    <ImgFormat imgFormat={imgFormat} />\n  </div>\n);\n\nconst spcConfig = ({\n  template,\n  fileName,\n  fileDescription,\n  options\n}) => (\n  <div>\n    <br />\n    {TemplateRender(template, options)}\n    <br />\n    <FileName fileName={fileName} />\n    <FileDescription fileDescription={fileDescription} />\n  </div>\n);\n\nconst rxlConfig = props => spcConfig(props);\n\nconst doiConfig = props => spcConfig(props);\n\nconst Config = (props) => {\n  switch (props.template.value) {\n    case 'standard':\n      return stdConfig(props);\n    case 'spectrum':\n      return spcConfig(props);\n    case 'supporting_information':\n      return suiConfig(props);\n    case 'supporting_information_std_rxn':\n      return suiStdRxnConfig(props);\n    case 'rxn_list_xlsx':\n    case 'rxn_list_csv':\n    case 'rxn_list_html':\n      return rxlConfig(props);\n    case 'doi_list_xlsx':\n      return doiConfig(props);\n    default:\n      return stdConfig(props);\n  }\n};\n\nexport default Config;\n","const objTags = selectedObjs => (\n  selectedObjs.map(obj => ({ id: obj.id, type: obj.type }))\n);\n\nconst abstractSettings = settings => (\n  settings.map(obj => (\n    { text: obj.text.replace(' ', '_'), checked: obj.checked }\n  ))\n);\n\nconst abstractConfigs = configs => (\n  configs.map((obj) => {\n    switch (obj.text) {\n      case 'Page Break':\n        return { text: 'page_break', checked: obj.checked };\n      case 'Show all chemicals in schemes (unchecked to show products only)':\n        if (obj.checked) {\n          return { text: 'whole_diagram', checked: obj.checked };\n        }\n        return { text: 'product_diagram', checked: !obj.checked };\n      default:\n        return obj;\n    }\n  })\n);\n\nconst paramize = (state) => {\n  const {\n    selectedObjs, splSettings, rxnSettings, configs, selMolSerials,\n    fileName, fileDescription, imgFormat, template, siRxnSettings,\n    prdAtts\n  } = state;\n\n  const params = {\n    objTags: objTags(selectedObjs),\n    splSettings: abstractSettings(splSettings),\n    rxnSettings: abstractSettings(rxnSettings),\n    siRxnSettings: siRxnSettings,\n    configs: abstractConfigs(configs),\n    prdAtts: prdAtts,\n    imgFormat: imgFormat?.value || imgFormat || 'png',\n    fileName,\n    fileDescription,\n    templateId: template.id || template,\n    templateType: template?.value,\n    molSerials: selMolSerials,\n  };\n  return params;\n};\n\nexport default paramize;\n","import React from 'react';\nimport { Button } from 'react-bootstrap';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport paramize from 'src/apps/mydb/elements/details/reports/Paramize';\n\nconst clickToClose = (report) => {\n  DetailActions.close(report);\n};\n\nconst CloseBtn = ({ report }) => {\n  const onClickToClose = () => clickToClose(report);\n\n  return (\n    <Button\n      bsStyle=\"danger\"\n      bsSize=\"xsmall\"\n      className=\"button-right\"\n      onClick={onClickToClose}\n    >\n      <i className=\"fa fa-times\" />\n    </Button>\n  );\n};\n\nconst clickToReset = () => {\n  ReportActions.reset();\n  UIActions.uncheckWholeSelection.defer();\n};\n\nconst ResetBtn = () => (\n  <Button\n    bsStyle=\"info\"\n    bsSize=\"xsmall\"\n    className=\"button-right\"\n    onClick={clickToReset}\n  >\n    <span><i className=\"fa fa-eraser\" /> Reset</span>\n  </Button>\n);\n\nconst generateReport = (allState, updateQueue) => {\n  const report = paramize(allState);\n  ReportActions.generateReport(report);\n};\n\nconst GenerateReportBtn = ({ allState, updateQueue }) => {\n  const { selectedObjTags, defaultObjTags, splSettings, rxnSettings,\n    processingReport } = allState;\n\n  const hasObj = [...selectedObjTags.sampleIds,\n  ...selectedObjTags.reactionIds, ...defaultObjTags.sampleIds,\n  ...defaultObjTags.reactionIds].length !== 0;\n\n  const showGeneReportBtn = [...splSettings, ...rxnSettings].map((settting) => {\n    if (settting.checked) {\n      return true;\n    }\n    return null;\n  }).filter(r => r != null).length !== 0;\n\n  const onClick = () => generateReport(allState, updateQueue);\n\n  return (\n    !processingReport\n      ? <Button\n        bsStyle=\"primary\"\n        bsSize=\"xsmall\"\n        className=\"button-right\"\n        disabled={!(showGeneReportBtn && hasObj)}\n        onClick={onClick}\n      >\n        <span><i className=\"fa fa-file-text-o\" /> Generate</span>\n      </Button>\n      : <Button\n        bsStyle=\"danger\"\n        bsSize=\"xsmall\"\n        className=\"button-right\"\n      >\n        <span><i className=\"fa fa-spinner fa-pulse fa-fw\" /> Processing</span>\n      </Button>\n  );\n};\n\nexport { CloseBtn, ResetBtn, GenerateReportBtn };\n","import React, { Component } from 'react';\nimport { Alert, Panel, Tabs, Tab } from 'react-bootstrap';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport ReportStore from 'src/stores/alt/stores/ReportStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport Setting from 'src/apps/mydb/elements/details/reports/Setting';\nimport Previews from 'src/apps/mydb/elements/details/reports/Previews';\nimport Orders from 'src/apps/mydb/elements/details/reports/Orders';\nimport Serials from 'src/apps/mydb/elements/details/reports/Serials';\nimport Archives from 'src/apps/mydb/elements/details/reports/Archives';\nimport Config from 'src/apps/mydb/elements/details/reports/Config';\nimport PanelHeader from 'src/components/common/PanelHeader';\nimport { CloseBtn, ResetBtn, GenerateReportBtn } from 'src/apps/mydb/elements/details/reports/ReportComponent';\n\nconst fetchPreviewTabs = [3, 4];\n\nexport default class ReportContainer extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      ...ReportStore.getState(),\n    };\n    this.onChange = this.onChange.bind(this);\n    this.onChangeUI = this.onChangeUI.bind(this);\n    this.panelHeader = this.panelHeader.bind(this);\n    this.updateQueue = this.updateQueue.bind(this);\n  }\n\n  componentDidMount() {\n    ReportStore.listen(this.onChange);\n    UIStore.listen(this.onChangeUI);\n    const uiState = UIStore.getState();\n    this.onChangeUI(uiState);\n    ReportActions.getArchives.defer();\n    ReportActions.fetchTemplates.defer();\n  }\n\n  componentWillUnmount() {\n    ReportStore.unlisten(this.onChange);\n    UIStore.unlisten(this.onChangeUI);\n  }\n\n  onChange(state) {\n    this.setState({ ...state });\n  }\n\n  onChangeUI(uiState) {\n    // jump to config when in the preview\n    const { activeKey } = this.state;\n    if (fetchPreviewTabs.indexOf(activeKey) >= 0) {\n      ReportActions.updateActiveKey.defer(2);\n    }\n    // load list data only\n    const state = { uiState, reportState: this.state };\n    ReportActions.updateCheckedTags.defer(state);\n  }\n\n  panelHeader() {\n    const { report } = this.props;\n    const allState = this.state;\n    const btns = [\n      <CloseBtn key=\"closeBtn\" report={report} />,\n      <GenerateReportBtn\n        key=\"generateReportBtn\"\n        allState={allState}\n        updateQueue={this.updateQueue}\n      />,\n      <ResetBtn key=\"resetBtn\" />,\n    ];\n    return <PanelHeader title=\"Report Generation\" btns={btns} />;\n  }\n\n  selectTab(key) {\n    ReportActions.updateActiveKey(key);\n    if (fetchPreviewTabs.indexOf(key) >= 0) { // preview\n      LoadingActions.start.defer();\n      const reportState = ReportStore.getState();\n      ReportActions.loadReview.defer({ reportState });\n    }\n  }\n\n  archivesTitle() {\n    const unreadIds = this.unreadIds();\n    const unReadBadge = unreadIds.length > 0\n      ? <span className=\"badge-danger\">{unreadIds.length}</span>\n      : null;\n\n    return (\n      <span>Archive {unReadBadge}</span>\n    );\n  }\n\n  unreadIds() {\n    let ids = [];\n    this.state.archives.forEach((a) => {\n      if (a.unread) {\n        ids = [...ids, a.id];\n      }\n    });\n    return ids;\n  }\n\n  updateQueue() {\n    const { processings } = this.state;\n    if (processings.length > 0) {\n      ReportActions.updateProcessQueue.defer(processings);\n    }\n  }\n\n  render() {\n    const {\n      splSettings, checkedAllSplSettings, archives, activeKey,\n      rxnSettings, checkedAllRxnSettings, imgFormat, fileName,\n      configs, checkedAllConfigs, selectedObjs, selMolSerials,\n      siRxnSettings, checkedAllSiRxnSettings, fileDescription,\n      prdAtts, attThumbNails, previewObjs, templateOpts: _templateOpts\n    } = this.state;\n\n    let { template } = this.state;\n    let alertTemplateNotFound = false;\n    const templateOpts = _templateOpts.filter(\n      x => x.report_type !== 'doi_list_xlsx'\n    );\n    if (templateOpts.length > 0 && template && typeof template != 'object') {\n      let templateOpt = templateOpts.find(x => x.id == template || x.report_type == template);\n      if (!templateOpt) {\n        alertTemplateNotFound = true;\n        templateOpt = templateOpts.find(x => x.report_type === 'standard')\n      }\n      template = { id: templateOpt.id, label: templateOpt.name, value: templateOpt.report_type };\n    }\n\n    const archivesTitle = this.archivesTitle();\n    const tabStyle = {padding: \"15px\", border: \"1px solid #ddd\", borderRadius: \"4px\"}\n    return (\n      <Panel\n        bsStyle=\"default\"\n      >\n        {alertTemplateNotFound && (\n          <Alert variant=\"warning\">\n            Report Template not found. Set to Standard. Please check your config settings.\n          </Alert>\n        )}\n        <Panel.Heading>{this.panelHeader()}</Panel.Heading>\n        <Tabs\n          activeKey={activeKey}\n          onSelect={this.selectTab}\n          id=\"report-tabs\"\n          style={{padding:\"15px\"}}\n        >\n          <Tab eventKey={0} title=\"Config\" style={tabStyle}>\n            <Config\n              imgFormat={imgFormat}\n              fileName={fileName}\n              fileDescription={fileDescription}\n              configs={configs}\n              checkedAllConfigs={checkedAllConfigs}\n              template={template}\n              handleTemplateChanged={this.handleTemplateChanged}\n              options={templateOpts}\n            />\n          </Tab>\n          <Tab eventKey={1} title=\"Setting\" style={tabStyle}>\n            <Setting\n              template={template}\n              splSettings={splSettings}\n              checkedAllSplSettings={checkedAllSplSettings}\n              rxnSettings={rxnSettings}\n              checkedAllRxnSettings={checkedAllRxnSettings}\n              siRxnSettings={siRxnSettings}\n              checkedAllSiRxnSettings={checkedAllSiRxnSettings}\n            />\n          </Tab>\n\n          <Tab eventKey={2} title=\"Order\" style={tabStyle}>\n            <div className=\"panel-fit-screen\">\n              <Orders selectedObjs={selectedObjs} template={template} />\n            </div>\n          </Tab>\n          <Tab eventKey={3} title=\"Label\" style={tabStyle}>\n            <div className=\"panel-fit-screen\">\n              <Serials selMolSerials={selMolSerials} template={template} />\n            </div>\n          </Tab>\n          <Tab eventKey={4} title=\"Preview\" style={tabStyle}>\n            <div className=\"panel-fit-screen\">\n              <Previews\n                previewObjs={previewObjs}\n                splSettings={splSettings}\n                rxnSettings={rxnSettings}\n                siRxnSettings={siRxnSettings}\n                configs={configs}\n                template={template}\n                molSerials={selMolSerials}\n                prdAtts={prdAtts}\n                attThumbNails={attThumbNails}\n              />\n            </div>\n          </Tab>\n          <Tab eventKey={5} title={archivesTitle} style={tabStyle}>\n            <div className=\"panel-fit-screen\">\n              <Archives archives={archives} />\n            </div>\n          </Tab>\n        </Tabs>\n      </Panel>\n    );\n  }\n}\n","/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Panel, Button, ButtonGroup, Tooltip, Overlay, OverlayTrigger, Table, Glyphicon\n} from 'react-bootstrap';\nimport Aviator from 'aviator';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport { wellplateShowOrNew } from 'src/utilities/routesUtils';\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport ResearchPlan from 'src/models/ResearchPlan';\nimport Wellplate from 'src/models/Wellplate';\nimport { formatTimeStampsOfElement } from 'src/utilities/timezoneHelper';\n\nexport default class EmbeddedWellplate extends Component {\n  constructor(props) {\n    super(props);\n    this.cellStyle = { padding: 0 };\n\n    this.state = {\n      expanded: false,\n      confirmRemove: false,\n      showImportConfirm: false,\n    };\n  }\n\n  openWellplate() {\n    const { currentCollection, isSync } = UIStore.getState();\n    const wellplateID = this.props.wellplate.id;\n    const uri = `/${isSync ? 's' : ''}collection/${currentCollection.id}/wellplate/${wellplateID}`;\n    Aviator.navigate(uri, { silent: true });\n    wellplateShowOrNew({ params: { wellplateID } });\n  }\n\n  showImportConfirm() {\n    this.setState({ showImportConfirm: true });\n  }\n\n  hideImportConfirm() {\n    this.setState({ showImportConfirm: false });\n  }\n\n  confirmWellplateImport() {\n    const { importWellplate } = this.props;\n\n    importWellplate(this.props.wellplate.id);\n    this.hideImportConfirm();\n  }\n\n  // render functions\n  renderReadoutHeaders() {\n    const readoutTitles = this.props.wellplate.readout_titles;\n    return (\n      readoutTitles && readoutTitles.map((title) => {\n        const key = title.id;\n        return ([\n          <th style={this.cellStyle} key={`v_${key}`} width=\"15%\">\n            {title}\n            &nbsp;\n            Value\n          </th>,\n          <th style={this.cellStyle} key={`u_${key}`} width=\"10%\">\n            {title}\n            &nbsp;\n            Unit\n          </th>\n        ]);\n      })\n    );\n  }\n\n  renderImportWellplateButton() {\n    const importDisabled = this.props.researchPlan.changed;\n    const show = this.state.showImportConfirm;\n    const tooltipText = importDisabled\n      ? 'Please save the research plan before importing' : 'Import Wellplate data to ResearchPlan table';\n    const importTooltip = <Tooltip id=\"import_tooltip\">{tooltipText}</Tooltip>;\n\n    const confirmTooltip = (\n      <Tooltip placement=\"bottom\" className=\"in\" id=\"tooltip-bottom\">\n        Import data from Wellplate? This will create a table.\n        <br />\n        <ButtonGroup>\n          <Button bsStyle=\"success\" bsSize=\"xsmall\" onClick={() => this.confirmWellplateImport()}>\n            Yes\n          </Button>\n          <Button bsStyle=\"warning\" bsSize=\"xsmall\" onClick={() => this.hideImportConfirm()}>\n            No\n          </Button>\n        </ButtonGroup>\n      </Tooltip>\n    );\n\n    return ([\n      <OverlayTrigger key=\"overlay_trigger_import_button\" placement=\"bottom\" overlay={importTooltip}>\n        <Button\n          bsSize=\"xsmall\"\n          bsStyle=\"success\"\n          className=\"button-right\"\n          disabled={importDisabled}\n          ref={(button) => { this.target = button; }}\n          onClick={() => this.showImportConfirm()}\n        >\n          <Glyphicon glyph=\"import\" />\n        </Button>\n      </OverlayTrigger>,\n      <Overlay\n        key=\"overlay_import_button\"\n        show={show}\n        placement=\"bottom\"\n        rootClose\n        onHide={() => this.hideImportConfirm()}\n        target={this.target}\n      >\n        {confirmTooltip}\n      </Overlay>\n    ]);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  renderReadoutFields(well) {\n    const { readouts } = well;\n\n    return (\n      readouts && readouts.map((readout) => {\n        const key = readout.id;\n        return ([\n          <td key={`v_${key}`} style={this.cellStyle}>\n            {readout.value || ''}\n          </td>,\n          <td key={`u_${key}`} style={this.cellStyle}>\n            {readout.unit || ''}\n          </td>,\n        ]);\n      })\n    );\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  renderWellplateMain(wellplate) {\n    const { wells } = wellplate;\n\n    // Wellplates that were just dragged in do not have samples assigned.\n    // Saving the research plan and reloading it reloads the wellplates and fetches the samples as well\n    if (wells.every((well) => well.is_new)) {\n      return (<p>Please save the newly assigned wellplate to the research plan first</p>);\n    }\n\n    return (\n      <Table striped bordered hover responsive style={{ fontSize: 12 }}>\n        <thead>\n          <tr>\n            <th style={this.cellStyle} width=\"5%\">Position</th>\n            <th style={this.cellStyle} width=\"10%\">Sample</th>\n            {this.renderReadoutHeaders()}\n          </tr>\n        </thead>\n        <tbody>\n          {wells.map((well) => {\n            const { sample, position } = well;\n            let sample_title = '';\n            if (sample) {\n              sample_title = `${sample.short_label} ${sample.name}`;\n            }\n            const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');\n            const positionY = alphabet[position.y - 1];\n            const positions = positionY + position.x;\n            return (\n              <tr key={well.id}>\n                <td style={this.cellStyle}>{positions}</td>\n                <td style={this.cellStyle}>{sample_title}</td>\n                {this.renderReadoutFields(well)}\n              </tr>\n            );\n          })}\n        </tbody>\n      </Table>\n    );\n  }\n\n  renderPanelHeading(wellplate) {\n    const { deleteWellplate } = this.props;\n    const titleTooltip = formatTimeStampsOfElement(wellplate || {});\n    const expandIconClass = this.state.expanded ? 'fa fa-compress' : 'fa fa-expand';\n\n    const popover = (\n      <Tooltip placement=\"left\" className=\"in\" id=\"tooltip-bottom\">\n        Remove&nbsp;\n        {wellplate.name}\n        &nbsp;from ResearchPlan?\n        <br />\n        <ButtonGroup>\n          <Button bsStyle=\"danger\" bsSize=\"xsmall\" onClick={() => deleteWellplate(wellplate.id)}>\n            Yes\n          </Button>\n          <Button bsStyle=\"warning\" bsSize=\"xsmall\" onClick={() => this.setState({ confirmRemove: false })}>\n            No\n          </Button>\n        </ButtonGroup>\n      </Tooltip>\n    );\n\n    return (\n      <Panel.Heading>\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"WellplateDatesx\">{titleTooltip}</Tooltip>}>\n          <span>\n            <i className=\"icon-wellplate\" />\n            &nbsp;&nbsp;\n            <span>\n              {wellplate.short_label}\n              &nbsp;\n              {wellplate.name}\n            </span>\n            &nbsp;&nbsp;\n          </span>\n        </OverlayTrigger>\n        <ElementCollectionLabels element={wellplate} placement=\"right\" />\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"remove_wellplate\">Remove Wellplate from Screen</Tooltip>}\n        >\n          <Button\n            ref={(button) => { this.target = button; }}\n            bsStyle=\"danger\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.setState({ confirmRemove: !this.state.confirmRemove })}\n          >\n            <i className=\"fa fa-trash-o\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        <Overlay\n          rootClose\n          target={this.target}\n          show={this.state.confirmRemove}\n          placement=\"bottom\"\n          onHide={() => this.setState({ confirmRemove: false })}\n        >\n          {popover}\n        </Overlay>\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"open_wellplate\">Open Wellplate in Tab</Tooltip>}>\n          <Button bsStyle=\"info\" bsSize=\"xsmall\" className=\"button-right\" onClick={() => this.openWellplate()}>\n            <i className=\"fa fa-window-maximize\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"expand_wellplate\">Show/hide Wellplate details</Tooltip>}\n        >\n          <Button\n            bsStyle=\"info\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.setState({ expanded: !this.state.expanded })}\n          >\n            <i className={expandIconClass} aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        {this.renderImportWellplateButton()}\n      </Panel.Heading>\n    );\n  }\n\n  render() {\n    const { wellplate } = this.props;\n\n    return (\n      <Panel\n        expanded={this.state.expanded}\n        onToggle={() => {}}\n        bsStyle=\"primary\"\n        className=\"eln-panel-detail wellplate-details\"\n      >\n        {this.renderPanelHeading(wellplate)}\n        <Panel.Collapse>\n          <Panel.Body>\n            {this.renderWellplateMain(wellplate)}\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    );\n  }\n}\n\nEmbeddedWellplate.propTypes = {\n  researchPlan: PropTypes.instanceOf(ResearchPlan).isRequired,\n  wellplate: PropTypes.instanceOf(Wellplate).isRequired,\n  importWellplate: PropTypes.func.isRequired,\n  deleteWellplate: PropTypes.func.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DropTarget } from 'react-dnd';\nimport Aviator from 'aviator';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport { wellplateShowOrNew } from 'src/utilities/routesUtils';\nimport EmbeddedWellplate from 'src/apps/mydb/elements/details/researchPlans/wellplatesTab/EmbeddedWellplate';\n\nconst target = {\n  drop(props, monitor) {\n    const { dropWellplate } = props;\n    const item = monitor.getItem();\n    const itemType = monitor.getItemType();\n    if (itemType === 'wellplate') {\n      dropWellplate(item.element);\n    }\n  },\n  canDrop(props, monitor) {\n    const itemType = monitor.getItemType();\n    return (itemType === 'wellplate');\n  }\n};\n\nconst collect = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop()\n});\n\nclass ResearchPlanWellplates extends Component {\n  handleWellplateClick(wellplate) { // eslint-disable-line class-methods-use-this\n    const { currentCollection, isSync } = UIStore.getState();\n    const wellplateID = wellplate.id;\n    const uri = `/${isSync ? 's' : ''}collection/${currentCollection.id}/wellplate/${wellplateID}`;\n    Aviator.navigate(uri, { silent: true });\n    wellplateShowOrNew({ params: { wellplateID } });\n  }\n\n  renderDropZone() {\n    const { isOver, connectDropTarget } = this.props;\n    const style = {\n      padding: 10, borderStyle: 'dashed', textAlign: 'center', color: 'gray', marginTop: '12px', marginBottom: '8px'\n    };\n    if (isOver) { style.borderColor = '#337ab7'; }\n\n    return connectDropTarget(<div style={style}>Drop Wellplate here to add.</div>);\n  }\n\n\n  render() {\n    const { wellplates, deleteWellplate, importWellplate } = this.props;\n\n    return (\n      <div>\n        {this.renderDropZone()}\n\n        {wellplates && wellplates.map(wellplate => (\n          <EmbeddedWellplate\n            key={`${wellplate.short_label}-${wellplate.id}`}\n            researchPlan={this.props.researchPlan}\n            wellplate={wellplate}\n            deleteWellplate={deleteWellplate}\n            importWellplate={importWellplate}\n          />\n        ))}\n      </div>);\n  }\n}\n\nexport default DropTarget(DragDropItemTypes.WELLPLATE, target, collect)(ResearchPlanWellplates);\n\nResearchPlanWellplates.propTypes = { /* eslint-disable react/no-unused-prop-types */\n  researchPlan: PropTypes.object.isRequired,\n  wellplates: PropTypes.arrayOf(PropTypes.object).isRequired,\n  deleteWellplate: PropTypes.func.isRequired,\n  importWellplate: PropTypes.func.isRequired,\n  dropWellplate: PropTypes.func.isRequired,\n  isOver: PropTypes.bool.isRequired,\n  canDrop: PropTypes.bool.isRequired,\n  connectDropTarget: PropTypes.func.isRequired\n}; /* eslint-enable */\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Panel,\n  ControlLabel,\n  Form,\n  FormControl,\n  FormGroup,\n  Button,\n  Row,\n  Col\n} from 'react-bootstrap';\nimport ResearchPlansFetcher from 'src/fetchers/ResearchPlansFetcher';\n\nrequire('@citation-js/plugin-isbn');\n\nexport default class ResearchPlanMetadata extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      researchPlan: {},\n      researchPlanMetadata: {\n        title: '',\n        subject: '',\n        format: '',\n        version: '',\n        state: '',\n        url: '',\n        landing_page: '',\n        alternate_identifier: [],\n        related_identifier: [],\n        description: [],\n        dates: [],\n        geo_location: [],\n        funding_reference: []\n      }\n    };\n  }\n\n\n  componentDidMount() {\n    const { parentResearchPlan, parentResearchPlanMetadata } = this.props;\n    this.setState({\n      researchPlan: parentResearchPlan\n    });\n    if (parentResearchPlanMetadata) {\n      this.setState({\n        researchPlanMetadata: parentResearchPlanMetadata\n      });\n    }\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const { parentResearchPlan, parentResearchPlanMetadata } = nextProps;\n    this.setState({\n      researchPlan: parentResearchPlan,\n      researchPlanMetadata: parentResearchPlanMetadata\n    });\n  }\n\n  handleFieldChange(event) {\n    const { researchPlanMetadata } = this.state;\n\n    researchPlanMetadata[event.target.id] = event.target.value;\n\n    this.setState({ researchPlanMetadata });\n  }\n\n  saveResearchPlanMetadata() {\n    const { researchPlan, researchPlanMetadata } = this.state;\n\n    ResearchPlansFetcher.postResearchPlanMetadata({\n\n      research_plan_id: researchPlan.id,\n      title: researchPlanMetadata.title.trim(),\n      subject: researchPlanMetadata.subject.trim(),\n      alternate_identifier: researchPlanMetadata.alternate_identifier,\n      related_identifier: researchPlanMetadata.related_identifier,\n      description: researchPlanMetadata.description,\n\n      format: this.format.value.trim(),\n      version: this.version.value.trim(),\n      geo_location: this.state.researchPlanMetadata.geo_location,\n      funding_reference: this.state.researchPlanMetadata.funding_reference,\n\n      url: this.url.value.trim(),\n      landing_page: this.landing_page.value.trim()\n\n    }).then((result) => {\n      if (result.error) {\n        alert(result.error);\n      } else if (result.research_plan_metadata) {\n        this.setState({\n          researchPlanMetadata: result.research_plan_metadata\n        })\n      }\n    });\n  }\n\n  updateResearchPlanMetadataDataCiteState(value) {\n    this.setState(state => {\n      const researchPlanMetadata = state.researchPlanMetadata\n      researchPlanMetadata.data_cite_state = value\n\n      return {\n        researchPlanMetadata\n      }\n    })\n  }\n\n  newItemByType(type) {\n    switch (type) {\n      case 'alternate_identifier':\n        return { alternateIdentifier: '', alternateIdentifierType: '' }\n      case 'related_identifier':\n        return { relatedIdentifier: '', relatedIdentifierType: '' }\n      case 'description':\n        return { description: '', descriptionType: '' }\n      case 'geo_location':\n        return { geoLocationPoint: { latitude: '', longitude: '' } }\n      case 'funding_reference':\n        return { funderName: '', funderIdentifier: '' }\n    }\n  }\n\n  addResearchPlanMetadataArrayItem(type) {\n    this.setState(state => {\n      const newItem = this.newItemByType(type)\n\n      const researchPlanMetadata = state.researchPlanMetadata\n      const currentCollection = researchPlanMetadata[type] ? researchPlanMetadata[type] : []\n      const newCollection = currentCollection.concat(newItem)\n      researchPlanMetadata[type] = newCollection\n\n      return researchPlanMetadata\n    })\n  }\n\n  removeResearchPlanMetadataArrayItem(type, index) {\n    this.setState(state => {\n      const researchPlanMetadata = state.researchPlanMetadata\n      const currentCollection = researchPlanMetadata[type] ? researchPlanMetadata[type] : []\n      currentCollection.splice(index, 1)\n\n      researchPlanMetadata[type] = currentCollection\n\n      return researchPlanMetadata\n    })\n  }\n\n  updateResearchPlanMetadataArrayItem(type, index, fieldname, value) {\n    this.setState(state => {\n      const researchPlanMetadata = state.researchPlanMetadata\n      researchPlanMetadata[type][index][fieldname] = value\n\n      return researchPlanMetadata\n    })\n  }\n\n  updateResearchPlanMetadataGeoLocation(index, fieldname, value) {\n    this.setState(state => {\n      const researchPlanMetadata = state.researchPlanMetadata;\n      researchPlanMetadata.geo_location[index]['geoLocationPoint'][fieldname] = value;\n      return researchPlanMetadata;\n    })\n  }\n\n  render() {\n    const { researchPlanMetadata } = this.state;\n    return (\n      <Panel>\n        <Panel.Body>\n          <Form>\n            <FormGroup controlId=\"title\">\n              <ControlLabel>Title</ControlLabel>&nbsp;&nbsp;\n              <FormControl\n                type=\"text\"\n                value={researchPlanMetadata?.title}\n                onChange={event => this.handleFieldChange(event)}\n                placeholder=\"Title\"\n              />\n            </FormGroup>\n            <FormGroup controlId=\"subject\">\n              <ControlLabel>Subject</ControlLabel>&nbsp;&nbsp;\n              <FormControl\n                type=\"text\"\n                value={researchPlanMetadata?.subject}\n                onChange={event => this.handleFieldChange(event)}\n                placeholder=\"Subject\"\n              />\n            </FormGroup>\n\n            <ControlLabel>Alternate Identifiers</ControlLabel>&nbsp;&nbsp;\n            {researchPlanMetadata?.alternate_identifier && researchPlanMetadata?.alternate_identifier.map((alternateIdentifier, index) => (\n              <div key={index}>\n                <Row>\n                  <Col smOffset={0} sm={5}>\n                    <FormGroup>\n                      <ControlLabel>Alternate Identifier</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        value={alternateIdentifier?.alternateIdentifier}\n                        placeholder=\"Alternate Identifier\"\n                        onChange={(event) => this.updateResearchPlanMetadataArrayItem('alternate_identifier', index, 'alternateIdentifier', event.target.value)}\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col smOffset={0} sm={5}>\n                    <FormGroup>\n                      <ControlLabel>Type</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        value={alternateIdentifier?.alternateIdentifierType}\n                        placeholder=\"Type\"\n                        onChange={(event) => this.updateResearchPlanMetadataArrayItem('alternate_identifier', index, 'alternateIdentifierType', event.target.value)}\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col smOffset={0} sm={2}>\n                    <ControlLabel>Action</ControlLabel><br />\n                    <Button bsStyle=\"danger\" className=\"pull-right\" bsSize=\"small\" onClick={() => this.removeResearchPlanMetadataArrayItem('alternate_identifier', index)}>\n                      <i className=\"fa fa-trash-o\" />\n                    </Button>\n                  </Col>\n                </Row>\n              </div>\n            ))}\n            <Row>\n              <Col smOffset={0} sm={12}>\n                <Button className=\"pull-right\" bsStyle=\"success\" bsSize=\"small\" onClick={() => this.addResearchPlanMetadataArrayItem('alternate_identifier')}>\n                  <i className=\"fa fa-plus\" />\n                </Button>\n              </Col>\n            </Row>\n\n            <ControlLabel>Related Identifiers</ControlLabel>&nbsp;&nbsp;\n            {researchPlanMetadata?.related_identifier && researchPlanMetadata?.related_identifier.map((relatedIdentifier, index) => (\n              <div key={index}>\n                <Row>\n                  <Col smOffset={0} sm={5}>\n                    <FormGroup>\n                      <ControlLabel>Related Identifier</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        value={relatedIdentifier?.relatedIdentifier}\n                        placeholder=\"Related Identifier\"\n                        onChange={(event) => this.updateResearchPlanMetadataArrayItem('related_identifier', index, 'relatedIdentifier', event.target.value)}\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col smOffset={0} sm={5}>\n                    <FormGroup>\n                      <ControlLabel>Type</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        value={relatedIdentifier?.relatedIdentifierType}\n                        placeholder=\"Type\"\n                        onChange={(event) => this.updateResearchPlanMetadataArrayItem('related_identifier', index, 'relatedIdentifierType', event.target.value)}\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col smOffset={0} sm={2}>\n                    <ControlLabel>Action</ControlLabel><br />\n                    <Button bsStyle=\"danger\" className=\"pull-right\" bsSize=\"small\" onClick={() => this.removeResearchPlanMetadataArrayItem('related_identifier', index)}>\n                      <i className=\"fa fa-trash-o\" />\n                    </Button>\n                  </Col>\n                </Row>\n              </div>\n            ))}\n            <Row>\n              <Col smOffset={0} sm={12}>\n                <Button className=\"pull-right\" bsStyle=\"success\" bsSize=\"small\" onClick={() => this.addResearchPlanMetadataArrayItem('related_identifier')}>\n                  <i className=\"fa fa-plus\" />\n                </Button>\n              </Col>\n            </Row>\n\n            <ControlLabel>Descriptions</ControlLabel>&nbsp;&nbsp;\n            {researchPlanMetadata?.description && researchPlanMetadata?.description.map((description, index) => (\n              <div key={index}>\n                <Row>\n                  <Col smOffset={0} sm={5}>\n                    <FormGroup>\n                      <ControlLabel>Description</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        value={description?.description}\n                        placeholder=\"Description\"\n                        onChange={event => this.updateResearchPlanMetadataArrayItem('description', index, 'description', event.target.value)}\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col smOffset={0} sm={5}>\n                    <FormGroup>\n                      <ControlLabel>Type</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        value={description?.descriptionType}\n                        placeholder=\"Type\"\n                        onChange={event => this.updateResearchPlanMetadataArrayItem('description', index, 'descriptionType', event.target.value)}\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col smOffset={0} sm={2}>\n                    <ControlLabel>Action</ControlLabel><br />\n                    <Button bsStyle=\"danger\" className=\"pull-right\" bsSize=\"small\" onClick={() => this.removeResearchPlanMetadataArrayItem('description', index)}>\n                      <i className=\"fa fa-trash-o\" />\n                    </Button>\n                  </Col>\n                </Row>\n              </div>\n            ))}\n            <Row>\n              <Col smOffset={0} sm={12}>\n                <Button className=\"pull-right\" bsStyle=\"success\" bsSize=\"small\" onClick={() => this.addResearchPlanMetadataArrayItem('description')}>\n                  <i className=\"fa fa-plus\" />\n                </Button>\n              </Col>\n            </Row>\n\n            <FormGroup controlId=\"metadataFormFormat\">\n              <ControlLabel>Format</ControlLabel>\n              <FormControl\n                type=\"text\"\n                defaultValue={researchPlanMetadata?.format}\n                inputRef={(m) => { this.format = m; }}\n                placeholder=\"Format\"\n              />\n            </FormGroup>\n            <FormGroup controlId=\"metadataFormVersion\">\n              <ControlLabel>Version</ControlLabel>\n              <FormControl\n                type=\"text\"\n                defaultValue={researchPlanMetadata?.version}\n                inputRef={(m) => { this.version = m; }}\n                placeholder=\"Version\"\n              />\n            </FormGroup>\n            <ControlLabel style={{ marginTop: 5 }}>Geolocations</ControlLabel><br />\n            {researchPlanMetadata?.geo_location && researchPlanMetadata?.geo_location.map((locationItem, index) => (\n              <div key={index}>\n                <Row>\n                  <Col smOffset={0} sm={5}>\n                    <FormGroup>\n                      <ControlLabel>Longitude</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        value={locationItem?.geoLocationPoint?.longitude}\n                        placeholder=\"Longitude e.g. '71.43703438955458'\"\n                        onChange={event => this.updateResearchPlanMetadataGeoLocation(index, 'longitude', event.target.value)}\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col smOffset={0} sm={5}>\n                    <FormGroup>\n                      <ControlLabel>Latitude</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        value={locationItem?.geoLocationPoint?.latitude}\n                        placeholder=\"Latitude e.g. '-62.85961569975635'\"\n                        onChange={event => this.updateResearchPlanMetadataGeoLocation(index, 'latitude', event.target.value)}\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col smOffset={0} sm={2}>\n                    <ControlLabel>Action</ControlLabel><br />\n                    <Button bsStyle=\"danger\" className=\"pull-right\" bsSize=\"small\" onClick={() => this.removeResearchPlanMetadataArrayItem('geo_location', index)}>\n                      <i className=\"fa fa-trash-o\" />\n                    </Button>\n                  </Col>\n                </Row>\n              </div>\n            ))}\n            <Row>\n              <Col smOffset={0} sm={12}>\n                <Button className=\"pull-right\" bsStyle=\"success\" bsSize=\"small\" onClick={() => this.addResearchPlanMetadataArrayItem('geo_location')}>\n                  <i className=\"fa fa-plus\" />\n                </Button>\n              </Col>\n            </Row>\n\n            <ControlLabel style={{ marginTop: 5 }}>Funding References</ControlLabel>\n            {researchPlanMetadata?.funding_reference && researchPlanMetadata?.funding_reference.map((fundingReferenceItem, index) => (\n              <div key={index}>\n                <Row>\n                  <Col smOffset={0} sm={5}>\n                    <FormGroup>\n                      <ControlLabel>Funder Name</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        value={fundingReferenceItem?.funderName}\n                        placeholder=\"Funder Name e.g. 'Gordon and Betty Moore Foundation'\"\n                        onChange={event => this.updateResearchPlanMetadataArrayItem('funding_reference', index, 'funderName', event.target.value)}\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col smOffset={0} sm={5}>\n                    <FormGroup>\n                      <ControlLabel>Funder Identifier</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        value={fundingReferenceItem?.funderIdentifier}\n                        placeholder=\"Funder Identifier e.g. 'https://doi.org/10.13039/100000936'\"\n                        onChange={event => this.updateResearchPlanMetadataArrayItem('funding_reference', index, 'funderIdentifier', event.target.value)}\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col smOffset={0} sm={2}>\n                    <ControlLabel>Action</ControlLabel><br />\n                    <Button bsStyle=\"danger\" className=\"pull-right\" bsSize=\"small\" onClick={() => this.removeResearchPlanMetadataArrayItem('funding_reference', index)}>\n                      <i className=\"fa fa-trash-o\" />\n                    </Button>\n                  </Col>\n                </Row>\n              </div>\n            ))}\n            <Row>\n              <Col smOffset={0} sm={12}>\n                <Button className=\"pull-right\" bsStyle=\"success\" bsSize=\"small\" onClick={() => this.addResearchPlanMetadataArrayItem('funding_reference')}>\n                  <i className=\"fa fa-plus\" />\n                </Button>\n              </Col>\n            </Row>\n\n            <FormGroup controlId=\"metadataFormState\">\n              <ControlLabel>State</ControlLabel>\n              <FormControl\n                componentClass=\"select\"\n                value={researchPlanMetadata?.data_cite_state}\n                onChange={event => this.updateResearchPlanMetadataDataCiteState(event.target.value)}\n                inputRef={(m) => { this.dataCiteState = m; }}\n              >\n                <option value=\"draft\">Draft</option>\n                <option value=\"registered\">Registered</option>\n                <option value=\"findable\">Findable</option>\n              </FormControl>\n            </FormGroup>\n            <FormGroup controlId=\"metadataFormURL\">\n              <ControlLabel>URL</ControlLabel>\n              <FormControl\n                type=\"text\"\n                defaultValue={researchPlanMetadata?.url}\n                inputRef={(m) => { this.url = m; }}\n                placeholder=\"https://<researchplanmetadata.url>\"\n              />\n            </FormGroup>\n            <FormGroup controlId=\"metadataFormLandingPage\">\n              <ControlLabel>Landing Page</ControlLabel>\n              <FormControl\n                type=\"text\"\n                defaultValue={researchPlanMetadata?.landing_page}\n                inputRef={(m) => { this.landing_page = m; }}\n                placeholder=\"https://<researchplanmetadata.landing.page>\"\n              />\n            </FormGroup>\n\n            {/* Disabled Attributes, display only */}\n            <FormGroup controlId=\"metadataFormDOI\">\n              <ControlLabel>DOI</ControlLabel>&nbsp;&nbsp;\n              <FormControl\n                type=\"text\"\n                defaultValue={researchPlanMetadata?.doi}\n                placeholder=\"DOI\"\n                readOnly\n              />\n            </FormGroup>\n            <FormGroup controlId=\"metadataFormPublicationYear\">\n              <ControlLabel>Publication Year</ControlLabel>\n              <FormControl\n                type=\"number\"\n                defaultValue={researchPlanMetadata?.publication_year}\n                inputRef={(m) => { this.publication_year = m; }}\n                placeholder=\"Publication Year\"\n                readOnly\n              />\n            </FormGroup>\n            {researchPlanMetadata?.dates ? <ControlLabel style={{ marginTop: 5 }}>Dates</ControlLabel> : ''}\n            {researchPlanMetadata?.dates && researchPlanMetadata?.dates.map((dateItem, index) => (\n              <div key={index}>\n                <Row>\n                  <Col smOffset={0} sm={6}>\n                    <FormGroup>\n                      <ControlLabel>Date</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        defaultValue={dateItem.date}\n                        placeholder=\"Date\"\n                        readOnly\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col smOffset={0} sm={6}>\n                    <FormGroup>\n                      <ControlLabel>DateType</ControlLabel>\n                      <FormControl\n                        type=\"text\"\n                        defaultValue={dateItem.dateType}\n                        placeholder=\"DateType\"\n                        readOnly\n                      />\n                    </FormGroup>\n                  </Col>\n                </Row>\n              </div>\n            ))}\n\n            <FormGroup>\n              <Button className=\"pull-right\" bsStyle=\"success\" style={{ marginTop: 20 }} onClick={() => this.saveResearchPlanMetadata()}>\n                Save Metadata\n              </Button>\n            </FormGroup>\n\n          </Form>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nResearchPlanMetadata.propTypes = {\n  parentResearchPlan: PropTypes.object.isRequired,\n  parentResearchPlanMetadata: PropTypes.object\n};\n\n","export default class ImageAttachmentFilter {\n  filterAttachmentsWhichAreInBody(rpBody, attachments) {\n    const uuidsOfImageAttachments = rpBody\n      .filter((field) => field.type === 'image')\n      .map((field) => field.value.public_name);\n    return attachments.filter(\n      (attachment) => !uuidsOfImageAttachments.includes(attachment.identifier)\n    );\n  }\n}\n","/* eslint-disable lines-between-class-members */\n/* eslint-disable no-param-reassign */\n/* eslint-disable react/destructuring-assignment */\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport EditorFetcher from 'src/fetchers/EditorFetcher';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\nimport React, { Component } from 'react';\nimport ImageAnnotationModalSVG from 'src/apps/mydb/elements/details/researchPlans/ImageAnnotationModalSVG';\nimport { Button } from 'react-bootstrap';\nimport { last, findKey } from 'lodash';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport ImageAttachmentFilter from 'src/utilities/ImageAttachmentFilter';\nimport SaveEditedImageWarning from 'src/apps/mydb/elements/details/researchPlans/SaveEditedImageWarning';\nimport {\n  downloadButton,\n  removeButton,\n  annotateButton,\n  editButton,\n  importButton,\n  customDropzone,\n  sortingAndFilteringUI,\n  formatFileSize,\n  attachmentThumbnail,\n  ThirdPartyAppButton,\n} from 'src/apps/mydb/elements/list/AttachmentList';\nimport { formatDate, parseDate } from 'src/utilities/timezoneHelper';\n\nclass ResearchPlanDetailsAttachments extends Component {\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n    this.importButtonRefs = [];\n    const { thirdPartyApps } = UIStore.getState() || [];\n    this.thirdPartyApps = thirdPartyApps;\n\n    this.state = {\n      attachmentEditor: false,\n      extension: null,\n      imageEditModalShown: false,\n      showImportConfirm: [],\n      filteredAttachments: [...props.attachments],\n      filterText: '',\n      sortBy: 'name',\n      sortDirection: 'asc',\n    };\n    this.editorInitial = this.editorInitial.bind(this);\n    this.createAttachmentPreviews = this.createAttachmentPreviews.bind(this);\n    this.handleEdit = this.handleEdit.bind(this);\n    this.onImport = this.onImport.bind(this);\n    this.handleFilterChange = this.handleFilterChange.bind(this);\n    this.handleSortChange = this.handleSortChange.bind(this);\n    this.toggleSortDirection = this.toggleSortDirection.bind(this);\n    this.confirmAttachmentImport = this.confirmAttachmentImport.bind(this);\n    this.showImportConfirm = this.showImportConfirm.bind(this);\n    this.hideImportConfirm = this.hideImportConfirm.bind(this);\n  }\n\n  componentDidMount() {\n    this.editorInitial();\n    this.createAttachmentPreviews();\n  }\n\n  componentDidUpdate(prevProps) {\n    const { attachments } = this.props;\n    if (attachments !== prevProps.attachments) {\n      this.createAttachmentPreviews();\n      this.setState({ filteredAttachments: [...attachments] }, this.filterAndSortAttachments);\n    }\n  }\n\n  handleEdit(attachment) {\n    const fileType = last(attachment.filename.split('.'));\n    const docType = this.documentType(attachment.filename);\n\n    EditorFetcher.startEditing({ attachment_id: attachment.id })\n      .then((result) => {\n        if (result.token) {\n          const url = `/editor?id=${attachment.id}&docType=${docType}\n          &fileType=${fileType}&title=${attachment.filename}&key=${result.token}\n          &only_office_token=${result.only_office_token}`;\n          window.open(url, '_blank');\n\n          attachment.aasm_state = 'oo_editing';\n          attachment.updated_at = new Date();\n\n          this.props.onEdit(attachment);\n        } else {\n          alert('Unauthorized to edit this file.');\n        }\n      });\n  }\n\n  onImport(attachment) {\n    const { researchPlan, onAttachmentImportComplete } = this.props;\n    const researchPlanId = researchPlan.id;\n    LoadingActions.start();\n    ElementActions.importTableFromSpreadsheet(\n      researchPlanId,\n      attachment.id,\n      onAttachmentImportComplete\n    );\n    LoadingActions.stop();\n  }\n\n  handleFilterChange = (e) => {\n    this.setState({ filterText: e.target.value }, this.filterAndSortAttachments);\n  };\n\n  handleSortChange = (e) => {\n    this.setState({ sortBy: e.target.value }, this.filterAndSortAttachments);\n  };\n\n  toggleSortDirection = () => {\n    this.setState((prevState) => ({\n      sortDirection: prevState.sortDirection === 'asc' ? 'desc' : 'asc'\n    }), this.filterAndSortAttachments);\n  };\n\n  filterAndSortAttachments() {\n    const { filterText, sortBy } = this.state;\n\n    const filter = new ImageAttachmentFilter();\n    let filteredAttachments = filter.filterAttachmentsWhichAreInBody(\n      this.props.researchPlan.body,\n      this.props.attachments\n    );\n\n    filteredAttachments = filteredAttachments.filter(\n      (attachment) => attachment.filename.toLowerCase().includes(filterText.toLowerCase())\n    );\n\n    filteredAttachments.sort((a, b) => {\n      let comparison = 0;\n      switch (sortBy) {\n        case 'name':\n          comparison = a.filename.localeCompare(b.filename);\n          break;\n        case 'size':\n          comparison = a.filesize - b.filesize;\n          break;\n        case 'date': {\n          const dateA = parseDate(a.created_at);\n          const dateB = parseDate(b.created_at);\n          comparison = dateA.valueOf() - dateB.valueOf();\n          break;\n        }\n        default:\n          break;\n      }\n      return this.state.sortDirection === 'asc' ? comparison : -comparison;\n    });\n\n    this.setState({ filteredAttachments });\n  }\n\n  createAttachmentPreviews() {\n    const { attachments } = this.props;\n    attachments.map((attachment) => {\n      if (attachment.thumb) {\n        AttachmentFetcher.fetchThumbnail({ id: attachment.id }).then(\n          (result) => {\n            if (result != null) {\n              attachment.preview = `data:image/png;base64,${result}`;\n              this.forceUpdate();\n            }\n          }\n        );\n      } else {\n        attachment.preview = '/images/wild_card/not_available.svg';\n        this.forceUpdate();\n      }\n      return attachment;\n    });\n  }\n\n  documentType(filename) {\n    const { extension } = this.state;\n\n    const ext = last(filename.split('.'));\n    const docType = findKey(extension, (o) => o.includes(ext));\n\n    if (typeof docType === 'undefined' || !docType) {\n      return null;\n    }\n\n    return docType;\n  }\n\n  editorInitial() {\n    EditorFetcher.initial().then((result) => {\n      this.setState({\n        attachmentEditor: result.installed,\n        extension: result.ext,\n      });\n    });\n  }\n\n  showImportConfirm(attachmentId) {\n    const { showImportConfirm } = this.state;\n    showImportConfirm[attachmentId] = true;\n    this.setState({ showImportConfirm });\n  }\n\n  hideImportConfirm(attachmentId) {\n    const { showImportConfirm } = this.state;\n    showImportConfirm[attachmentId] = false;\n    this.setState({ showImportConfirm });\n  }\n\n  confirmAttachmentImport(attachment) {\n    this.onImport(attachment);\n    this.hideImportConfirm(attachment.id);\n  }\n\n  renderImageEditModal() {\n    const { chosenAttachment, imageEditModalShown } = this.state;\n    const { onEdit } = this.props;\n    return (\n      <ImageAnnotationModalSVG\n        attachment={chosenAttachment}\n        isShow={imageEditModalShown}\n        handleSave={\n          () => {\n            const newAnnotation = document.getElementById('svgEditId').contentWindow.svgEditor.svgCanvas.getSvgString();\n            chosenAttachment.updatedAnnotation = newAnnotation;\n            this.setState({ imageEditModalShown: false });\n            onEdit(chosenAttachment);\n          }\n        }\n        handleOnClose={() => { this.setState({ imageEditModalShown: false }); }}\n      />\n    );\n  }\n\n  render() {\n    const {\n      filteredAttachments, sortDirection, attachmentEditor, extension\n    } = this.state;\n    const { researchPlan } = this.props;\n\n    //Ugly temporary hack to avoid tests failling because the context is not accessable in tests with the enzyme framework\n    \n    let combinedAttachments = filteredAttachments;\n    if(this.context.attachmentNotificationStore ){\n      combinedAttachments =  this.context.attachmentNotificationStore.getCombinedAttachments(filteredAttachments,\"ResearchPlan\",researchPlan);\n    }\n\n    const { onUndoDelete, attachments } = this.props;\n    const thirdPartyApps = this.thirdPartyApps;\n    \n    return (\n      <div className=\"attachment-main-container\">\n        {this.renderImageEditModal()}\n        <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n          <div style={{ flex: '1', alignSelf: 'center' }}>\n            {customDropzone(this.props.onDrop)}\n          </div>\n          <div style={{ marginLeft: '20px', alignSelf: 'center' }}>\n            {attachments.length > 0\n        && sortingAndFilteringUI(\n          sortDirection,\n          this.handleSortChange,\n          this.toggleSortDirection,\n          this.handleFilterChange,\n          true\n        )}\n          </div>\n        </div>\n        {combinedAttachments.length === 0 ? (\n          <div className=\"no-attachments-text\">\n            There are currently no attachments.\n          </div>\n        ) : (\n          combinedAttachments.map((attachment) => (\n            <div className=\"attachment-row\" key={attachment.id}>\n              {attachmentThumbnail(attachment)}\n              <div className=\"attachment-row-text\" title={attachment.filename}>\n                {attachment.is_deleted ? (\n                  <strike>{attachment.filename}</strike>\n                ) : (\n                  attachment.filename\n                )}\n                <div className=\"attachment-row-subtext\">\n                  <div>\n                    Created:&nbsp;\n                    {formatDate(attachment.created_at)}\n                  </div>\n                  &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;\n                  <div>\n                    Size:&nbsp;\n                    <span style={{ fontWeight: 'bold', color: '#444' }}>\n                      {formatFileSize(attachment.filesize)}\n                    </span>\n                  </div>\n                </div>\n              </div>\n              <div className=\"attachment-row-actions\" style={{ display: 'flex', alignItems: 'center', gap: '5px' }}>\n                {attachment.is_deleted ? (\n                  <Button\n                    bsSize=\"xs\"\n                    bsStyle=\"danger\"\n                    className=\"attachment-button-size\"\n                    onClick={() => onUndoDelete(attachment)}\n                  >\n                    <i className=\"fa fa-undo\" aria-hidden=\"true\" />\n                  </Button>\n                ) : (\n                  <>\n                    {downloadButton(attachment)}\n                    <ThirdPartyAppButton attachment={attachment} options={thirdPartyApps} />\n                    {editButton(\n                      attachment,\n                      extension,\n                      attachmentEditor,\n                      attachment.aasm_state === 'oo_editing' && new Date().getTime()\n                          < (new Date(attachment.updated_at).getTime() + 15 * 60 * 1000),\n                      !attachmentEditor || attachment.aasm_state === 'oo_editing'\n                          || attachment.is_new || this.documentType(attachment.filename) === null,\n                      this.handleEdit\n                    )}\n                    {annotateButton(attachment, this)}\n                    {importButton(\n                      attachment,\n                      this.state.showImportConfirm,\n                      this.props.researchPlan.changed,\n                      this.importButtonRefs,\n                      this.showImportConfirm,\n                      this.hideImportConfirm,\n                      this.confirmAttachmentImport\n                    )}\n                    &nbsp;\n                    {removeButton(attachment, this.props.onDelete, this.props.readOnly)}\n                  </>\n                )}\n              </div>\n              {attachment.updatedAnnotation && <SaveEditedImageWarning visible />}\n            </div>\n          ))\n        )}\n      </div>\n    );\n  }\n}\n\nResearchPlanDetailsAttachments.propTypes = {\n  researchPlan: PropTypes.shape({\n    id: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ]).isRequired,\n    changed: PropTypes.bool.isRequired,\n    body: PropTypes.arrayOf(\n      PropTypes.shape({\n        id: PropTypes.string.isRequired,\n        title: PropTypes.string.isRequired,\n        type: PropTypes.string.isRequired,\n      })\n    ).isRequired,\n    attachments: PropTypes.arrayOf(\n      PropTypes.shape({\n        id: PropTypes.oneOfType([\n          PropTypes.string,\n          PropTypes.number\n        ]).isRequired,\n        aasm_state: PropTypes.string.isRequired,\n        content_type: PropTypes.string.isRequired,\n        filename: PropTypes.string.isRequired,\n        filesize: PropTypes.number.isRequired,\n        identifier: PropTypes.oneOfType([\n          PropTypes.string,\n          PropTypes.number\n        ]).isRequired,\n        thumb: PropTypes.bool.isRequired\n      })\n    )\n  }).isRequired,\n  attachments: PropTypes.arrayOf(PropTypes.shape({\n    id: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ]).isRequired,\n    aasm_state: PropTypes.string.isRequired,\n    content_type: PropTypes.string.isRequired,\n    filename: PropTypes.string.isRequired,\n    filesize: PropTypes.number.isRequired,\n    identifier: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ]).isRequired,\n    thumb: PropTypes.bool.isRequired\n  })),\n  onDrop: PropTypes.func.isRequired,\n  onDelete: PropTypes.func.isRequired,\n  onUndoDelete: PropTypes.func.isRequired,\n  onAttachmentImportComplete: PropTypes.func,\n  onEdit: PropTypes.func.isRequired,\n  readOnly: PropTypes.bool.isRequired\n};\n\nexport default observer(ResearchPlanDetailsAttachments);\n\nResearchPlanDetailsAttachments.defaultProps = {\n  attachments: [],\n  onAttachmentImportComplete: () => { }\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport uuid from 'uuid';\nimport { Button, ButtonGroup, Tooltip, OverlayTrigger } from 'react-bootstrap';\n\nconst buttonObjects = [\n  { label: 'Add Text Editor', type: 'richtext', icon: 'fa fa-file-text-o' },\n  { label: 'Add Table Editor', type: 'table', icon: 'fa fa-table' },\n  { label: 'Add Ketcher Editor', type: 'ketcher', icon: 'fa fa-pencil-square-o' },\n  { label: 'Add Image', type: 'image', icon: 'fa fa-picture-o' },\n  { label: 'Add Sample', type: 'sample', icon: 'icon-sample' },\n  { label: 'Add Reaction', type: 'reaction', icon: 'icon-reaction' },\n];\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport default class ResearchPlanDetailsAddField extends Component {\n  render() {\n    const { onAdd } = this.props;\n    return (\n      <span className=\"research-plan-field-drop-add-field\">\n        <ButtonGroup bsSize=\"xsmall\">\n          {\n            buttonObjects.map(button => (\n              <OverlayTrigger key={uuid.v4()} placement=\"top\" overlay={<Tooltip id={`rp_tooptip_${button.type}`}>{button.label}</Tooltip>}>\n                <Button onClick={() => onAdd(button.type)} data-cy={`btn_${button.type}`}>\n                  <i className={button.icon} aria-hidden=\"true\" />&nbsp;<i className=\"fa fa-plus\" aria-hidden=\"true\" />\n                </Button>\n              </OverlayTrigger>\n            ))\n          }\n        </ButtonGroup>\n      </span>\n    );\n  }\n}\n\nResearchPlanDetailsAddField.propTypes = {\n  onAdd: PropTypes.func.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DropTarget } from 'react-dnd';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\n\nconst spec = {\n  drop(props) {\n    return {\n      index: props.index\n    };\n  }\n};\n\nconst collect = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop()\n});\n\n\nclass ResearchPlanDetailsDropTarget extends Component {\n  render() {\n    const {\n      index, connectDropTarget, isOver, canDrop\n    } = this.props;\n\n    let className = 'research-plan-field-drop-target';\n\n    if (isOver) {\n      className += ' is-over';\n    }\n    if (canDrop) {\n      className += ' can-drop';\n    }\n\n    return connectDropTarget(<div className={className}><div className=\"indicator\" /></div>);\n  }\n}\n\nexport default\nDropTarget(DragDropItemTypes.RESEARCH_PLAN_FIELD, spec, collect)(ResearchPlanDetailsDropTarget);\n\nResearchPlanDetailsDropTarget.propTypes = {\n  index: PropTypes.number\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DragSource } from 'react-dnd';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\n\nconst spec = {\n  beginDrag(props) {\n    return {\n      index: props.index\n    };\n  },\n  endDrag(props, monitor) {\n    const target = monitor.getDropResult();\n    if (target) {\n      props.onDrop(props.index, target.index);\n    }\n  }\n};\n\nconst collect = (connect, monitor) => ({\n  connectDragSource: connect.dragSource(),\n  isDragging: monitor.isDragging(),\n});\n\nclass ResearchPlanDetailsDragSource extends Component {\n  render() {\n    const { connectDragSource, index } = this.props;\n\n    return connectDragSource(<span className=\"fa fa-lg fa-arrows text-info drag-source\" />);\n  }\n}\n\nexport default\nDragSource(DragDropItemTypes.RESEARCH_PLAN_FIELD, spec, collect)(ResearchPlanDetailsDragSource);\n\nResearchPlanDetailsDragSource.propTypes = {\n  index: PropTypes.number,\n  onChange: PropTypes.func,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport QuillEditor from 'src/components/QuillEditor';\nimport QuillViewer from 'src/components/QuillViewer';\n\nexport default class ResearchPlanDetailsFieldRichText extends Component {\n\n  renderEdit() {\n    const {\n      field, disabled, onChange\n    } = this.props;\n\n    return (\n      <div className=\"quill-resize\">\n        <QuillEditor\n          value={field.value}\n          height=\"100%\"\n          onChange={value => onChange(value, field.id)}\n          disabled={disabled}\n        />\n      </div>\n    );\n  }\n\n  renderStatic() {\n    const { field } = this.props;\n    return <QuillViewer value={field.value} />;\n  }\n\n  render() {\n    if (this.props.edit) {\n      return this.renderEdit();\n    }\n    return this.renderStatic();\n  }\n}\n\nResearchPlanDetailsFieldRichText.propTypes = {\n  field: PropTypes.object,\n  index: PropTypes.number,\n  disabled: PropTypes.bool,\n  onChange: PropTypes.func,\n  edit: PropTypes.bool,\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Glyphicon } from 'react-bootstrap';\nimport SVG from 'react-inlinesvg';\nimport ResearchPlansFetcher from 'src/fetchers/ResearchPlansFetcher';\nimport StructureEditorModal from 'src/components/structureEditor/StructureEditorModal';\n\nexport default class ResearchPlanDetailsFieldKetcher extends Component {\n  constructor(props) {\n    super(props);\n    const {\n      field, index, disabled, onChange\n    } = props;\n    this.state = {\n      field,\n      index,\n      disabled,\n      onChange,\n      showStructureEditor: false,\n      loadingMolecule: false,\n    };\n  }\n\n  showStructureEditor() {\n    this.setState({\n      showStructureEditor: true\n    });\n  }\n\n  hideStructureEditor() {\n    this.setState({\n      showStructureEditor: false\n    });\n  }\n\n  handleStructureEditorSave(sdf_file, svg_file, config = null) {\n    let { field, onChange } = this.state;\n\n    field.value = {\n      sdf_file,\n      svg_file\n    };\n\n    const smiles = config ? config.smiles : null;\n\n    this.setState({ loadingMolecule: true });\n\n    const isChemdraw = !!smiles;\n\n    ResearchPlansFetcher.updateSVGFile(svg_file, isChemdraw).then((json) => {\n      field.value.svg_file = json.svg_path;\n      this.setState({\n        field,\n        loadingMolecule: false\n      });\n      onChange(field.value, field.id);\n      this.hideStructureEditor();\n    });\n  }\n\n  handleStructureEditorCancel() {\n    this.hideStructureEditor();\n  }\n\n  renderStructureEditorModal(field) {\n    const { showStructureEditor } = this.state;\n    const molfile = field.value.sdf_file;\n\n    return (\n      <StructureEditorModal\n        key={field.id}\n        showModal={showStructureEditor}\n        onSave={this.handleStructureEditorSave.bind(this)}\n        onCancel={this.handleStructureEditorCancel.bind(this)}\n        molfile={molfile}\n      />\n    );\n  }\n\n  renderEdit() {\n    const { field } = this.state;\n    let className;\n    let svgPath;\n    if (field.value.svg_file) {\n      className = 'svg-container';\n      svgPath = `/images/research_plans/${field.value.svg_file}`;\n    } else {\n      className = 'svg-container-empty';\n      svgPath = '/images/wild_card/no_image_180.svg';\n    }\n    return (\n      <div className={className} onClick={this.showStructureEditor.bind(this)}>\n        <Glyphicon className=\"pull-right\" glyph=\"pencil\" />\n        <SVG key={svgPath} src={svgPath} className=\"molecule-mid\" />\n        {this.renderStructureEditorModal(field)}\n      </div>\n    );\n  }\n\n  renderStatic() {\n    const { field } = this.props;\n    if (typeof (field.value.svg_file) === 'undefined'\n      || field.value.svg_file === null) {\n      return (\n        <div />\n      );\n    }\n    const svgPath = `/images/research_plans/${field.value.svg_file}`;\n    return (\n      <div className=\"image-container\">\n        <img src={svgPath} alt=\"\" />\n      </div>\n    );\n  }\n\n  render() {\n    if (this.props.edit) {\n      return this.renderEdit();\n    }\n    return this.renderStatic();\n  }\n}\n\nResearchPlanDetailsFieldKetcher.propTypes = {\n  field: PropTypes.object,\n  index: PropTypes.number,\n  disabled: PropTypes.bool,\n  onChange: PropTypes.func,\n  edit: PropTypes.bool,\n};\n","import Attachment from 'src/models/Attachment';\n\nexport default class ImageFileDropHandler {\n  handleDrop(files, replace, attachments) {\n    const identifierOfAncestor = this.getIdentifierOfAncestor(replace.value);\n\n    const attachmentFromFile = this.createAttachmentFromFile(files[0], identifierOfAncestor);\n    attachments.push(attachmentFromFile);\n\n    attachments\n      .filter((attachment) => attachment.identifier === identifierOfAncestor)\n      .map((attachment) => {\n        attachment.is_deleted = true;\n        attachment.is_new = Number.isNaN(attachment.id);\n        return attachment;\n      });\n\n    const value = {\n      file_name: attachmentFromFile.name,\n      public_name: files[0].preview,\n      identifier: attachmentFromFile.identifier,\n      old_value: replace\n    };\n    return value;\n  }\n\n  getIdentifierOfAncestor(valueOfField) {\n    let identifierOfAncestor = null;\n    if (valueOfField.identifier) {\n      identifierOfAncestor = valueOfField.identifier;\n    } else if (valueOfField.public_name) {\n      identifierOfAncestor = valueOfField.public_name;\n    }\n    return identifierOfAncestor;\n  }\n\n  createAttachmentFromFile(file, identifierOfAncestor) {\n    const attachmentFromFile = Attachment.fromFile(file);\n    attachmentFromFile.ancestor = identifierOfAncestor;\n    attachmentFromFile.is_image_field = true;\n    return attachmentFromFile;\n  }\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Dropzone from 'react-dropzone';\nimport {\n  FormControl, FormGroup, InputGroup\n} from 'react-bootstrap';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport ImageFileDropHandler from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ImageFileDropHandler';\nimport ImageAnnotationEditButton from 'src/apps/mydb/elements/details/researchPlans/ImageAnnotationEditButton';\nimport ImageAnnotationModalSVG from 'src/apps/mydb/elements/details/researchPlans/ImageAnnotationModalSVG';\nimport SaveEditedImageWarning from 'src/apps/mydb/elements/details/researchPlans/SaveEditedImageWarning';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\n\nexport default class ResearchPlanDetailsFieldImage extends Component {\n  constructor(props) {\n    super(props);\n    this.state = { imageEditModalShown: false, attachments: props.attachments };\n\n    this.onElementStoreChange = this.onElementStoreChange.bind(this);\n  }\n\n  componentDidMount() {\n    this.generateSrcOfImage(this.props.field.value.public_name);\n    ElementStore.listen(this.onElementStoreChange);\n  }\n\n  componentWillUnmount() {\n    ElementStore.unlisten(this.onElementStoreChange);\n  }\n\n  onElementStoreChange(state) {\n    if (state.selecteds.length < 1) return;\n\n    // multiple items can be selected, we filter to only keep research plans\n    const researchPlans = state.selecteds.filter((element) => element\n        && element?.type === 'research_plan');\n\n    // we find the reasearch plan that has our image entry\n    const researchPlanWithImageEntry = researchPlans.find((element) => !!element.getBodyElementById(this.props?.field?.id));\n\n    // get the image Entry\n    const imageEntry = researchPlanWithImageEntry?.getBodyElementById(this.props?.field?.id);\n    if (!imageEntry) return;\n\n    this.generateSrcOfImage(imageEntry.value.public_name);\n  }\n\n  handleDrop(files) {\n    if (files.length === 0) {\n      return;\n    }\n    const handler = new ImageFileDropHandler();\n    const value = handler.handleDrop(\n      files,\n      this.props.field,\n      this.state.attachments\n    );\n    this.generateSrcOfImage(value.public_name);\n    this.props.onChange(value, this.props.field.id, this.state.attachments);\n  }\n\n  handleResizeChange(event) {\n    const { field, onChange } = this.props;\n    field.value.zoom = event.target.value;\n    onChange(field.value, field.id);\n  }\n\n  renderEdit() {\n    const { field } = this.props;\n    const currentAttachment = this.props.researchPlan.getAttachmentByIdentifier(field.value.public_name);\n    const is_annotationUpdated = currentAttachment != null && currentAttachment.updatedAnnotation;\n    let content;\n    if (field.value.public_name) {\n      const style = (field.value.zoom == null || typeof field.value.zoom === 'undefined'\n        || field.value.width === '') ? { width: 'unset' } : { width: `${field.value.zoom}%` };\n      content = (\n        <div className=\"image-container\">\n          <img style={style} src={this.state.imageSrc} alt={field.value.file_name} />\n        </div>\n      );\n    } else {\n      content = <p>Drop Files, or Click to Select.</p>;\n    }\n    return (\n      <div>\n        <FormGroup style={{ width: '30%' }}>\n          <InputGroup>\n            <InputGroup.Addon>Zoom</InputGroup.Addon>\n            <FormControl\n              type=\"number\"\n              max=\"100\"\n              min=\"1\"\n              placeholder=\"image zoom\"\n              defaultValue={field.value.zoom}\n              onChange={(event) => this.handleResizeChange(event)}\n            />\n            <InputGroup.Addon>%</InputGroup.Addon>\n            <div className=\"image-annotation-button-researchplan\">\n              <ImageAnnotationEditButton\n                parent={this}\n                attachment={currentAttachment}\n              />\n            </div>\n          </InputGroup>\n\n        </FormGroup>\n        <SaveEditedImageWarning visible={is_annotationUpdated} />\n        <Dropzone\n          accept=\"image/*\"\n          multiple={false}\n          onDrop={(files) => this.handleDrop(files)}\n          className=\"dropzone\"\n        >\n          {content}\n        </Dropzone>\n        {this.renderImageEditModal()}\n      </div>\n    );\n  }\n\n  isLegacyImage(publicName) {\n    if (!publicName) {\n      return true;\n    }\n    return publicName.includes('.');\n  }\n\n  generateSrcOfImage(publicName) {\n    if (!publicName) { return; }\n    let src;\n    if (publicName.startsWith('blob')) {\n      this.setState({ imageSrc: publicName });\n    } else if (this.isLegacyImage(publicName)) {\n      src = `/images/research_plans/${publicName}`;\n      this.setState({ imageSrc: src });\n    } else {\n      AttachmentFetcher.fetchImageAttachmentByIdentifier({ identifier: publicName, annotated: true })\n        .then((result) => {\n          if (result.data != null) {\n            this.setState({ imageSrc: result.data });\n          }\n        });\n    }\n  }\n\n  renderStatic() {\n    const { field } = this.props;\n    if (\n      typeof field.value.public_name === 'undefined'\n      || field.value.public_name === null\n    ) {\n      return <div />;\n    }\n    const style = (field.value.zoom == null || typeof field.value.zoom === 'undefined'\n      || field.value.width === '') ? { width: 'unset' } : { width: `${field.value.zoom}%` };\n\n    return (\n      <div className=\"image-container\">\n        <img style={style} src={this.state.imageSrc} alt={field.value.file_name} />\n      </div>\n    );\n  }\n\n  renderImageEditModal() {\n    if (this.isLegacyImage(this.props.field.value.public_name)) {\n      return null;\n    }\n\n    return (\n      <ImageAnnotationModalSVG\n        attachment={this.state.chosenAttachment}\n        isShow={this.state.imageEditModalShown}\n        handleSave={\n          () => {\n            const newAnnotation = document.getElementById('svgEditId').contentWindow.svgEditor.svgCanvas.getSvgString();\n            this.state.chosenAttachment.updatedAnnotation = newAnnotation;\n            this.setState({ imageEditModalShown: false });\n            this.props.onChange(this.props.field.value, this.props.field.id, this.state.attachments);\n          }\n        }\n        handleOnClose={() => { this.setState({ imageEditModalShown: false }); }}\n      />\n    );\n  }\n\n  render() {\n    if (this.props.edit) {\n      return this.renderEdit();\n    }\n    return this.renderStatic();\n  }\n}\n\nResearchPlanDetailsFieldImage.propTypes = {\n  field: PropTypes.object,\n  index: PropTypes.number,\n  disabled: PropTypes.bool,\n  onChange: PropTypes.func,\n  edit: PropTypes.bool,\n  attachments: PropTypes.array.isRequired\n};\n","// initial custom header for sort button taken from: https://www.ag-grid.com/react-data-grid/component-header/\n\nimport React, { Component } from 'react';\n\nexport default class CustomHeader extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      ascSort: 'inactive',\n      descSort: 'inactive',\n      noSort: 'inactive',\n    };\n\n    props.column.addEventListener('sortChanged', this.onSortChanged.bind(this));\n  }\n\n  componentDidMount() {\n    this.onSortChanged();\n  }\n\n  componentWillUnmount() {\n    this.onSortChanged();\n  }\n\n  onSortChanged() {\n    this.setState({\n      ascSort: this.props.column.isSortAscending() ? 'sort_active' : 'inactive',\n      descSort: this.props.column.isSortDescending() ? 'sort_active' : 'inactive',\n      noSort:\n        !this.props.column.isSortAscending() &&\n          !this.props.column.isSortDescending()\n          ? 'sort_active'\n          : 'inactive',\n    });\n  }\n\n  onSortRequested(order, event) {\n    this.props.setSort(order, event.shiftKey);\n  }\n\n  clickToRename() {\n    const columnClicked = this.props.column.colId;\n    { this.props.handleColumnNameModalShow('rename', columnClicked) }\n  }\n\n  render() {\n    let sort = null;\n    if (this.props.enableSorting) {\n      sort = (\n        <div className=\"sortHeader\" style={{ display: 'inline-block' }}>\n          <div\n            onClick={this.onSortRequested.bind(this, 'asc')}\n            onTouchEnd={this.onSortRequested.bind(this, 'asc')}\n            className={`customSortUpLabel ${this.state.ascSort}`}\n          >\n            <i className=\"fa fa-arrow-up\"></i>\n          </div>\n          <div\n            onClick={this.onSortRequested.bind(this, 'desc')}\n            onTouchEnd={this.onSortRequested.bind(this, 'desc')}\n            className={`customSortDownLabel ${this.state.descSort}`}\n          >\n            <i className=\"fa fa-arrow-down\"></i>\n          </div>\n          <div\n            onClick={this.onSortRequested.bind(this, '')}\n            onTouchEnd={this.onSortRequested.bind(this, '')}\n            className={`customSortRemoveLabel ${this.state.noSort}`}\n          >\n            <i className=\"fa fa-times\"></i>\n          </div>\n        </div>\n      );\n    }\n\n    return (\n      <div>\n        <div className=\"customHeaderLabel\" onClick={this.clickToRename.bind(this)}>{this.props.displayName}</div>\n        {sort}\n      </div>\n    );\n  }\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ButtonToolbar, Button, FormGroup, ControlLabel, FormControl, HelpBlock } from 'react-bootstrap';\n\nclass ResearchPlanDetailsFieldTableColumnNameModal extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      columnNameValue: '',\n      columnNameError: ''\n    };\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props !== prevProps) {\n      const { modal, columns } = this.props;\n\n      let columnNameValue = '';\n      if (modal.action === 'rename') {\n        columnNameValue = columns.find(o => o.colId === modal.colId).headerName;\n      }\n\n      this.setState({\n        columnNameValue,\n        columnNameError: ''\n      });\n    }\n  }\n\n  handleColumnNameChange(event) {\n    this.setState({ columnNameValue: event.target.value });\n  }\n\n  handleSubmit() {\n    const { columns, onSubmit } = this.props;\n    const { columnNameValue } = this.state;\n    const keys = columns.map(column => column.headerName);\n\n    if (!columnNameValue) {\n      this.setState({ columnNameError: 'Please give a column name.' });\n    } else if (keys.indexOf(columnNameValue) > -1) {\n      this.setState({ columnNameError: 'A column with this title already exists.' });\n    } else {\n      this.setState({ columnNameError: '', columnNameValue: '' });\n      onSubmit(columnNameValue);\n    }\n  }\n\n  render() {\n    const { modal, onHide } = this.props;\n    const { columnNameValue, columnNameError } = this.state;\n\n    let title;\n    if (modal.action === 'insert') {\n      title = 'Insert column';\n    } else if (modal.action === 'rename') {\n      title = 'Rename column';\n    }\n\n    const validationState = columnNameError ? 'error' : null;\n\n    return (\n      <Modal animation show={modal.show} onHide={onHide}>\n        <Modal.Header closeButton>\n          <Modal.Title>\n            {title}\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body >\n          <div>\n            <FormGroup validationState={validationState}>\n              <ControlLabel>Column name</ControlLabel>\n              <FormControl\n                type=\"text\"\n                value={columnNameValue}\n                onChange={this.handleColumnNameChange.bind(this)}\n              />\n              <HelpBlock>{columnNameError}</HelpBlock>\n            </FormGroup>\n          </div>\n          <div>\n            <ButtonToolbar>\n              <Button bsStyle=\"warning\" onClick={onHide}>\n                Cancel\n              </Button>\n              <Button bsStyle=\"primary\" onClick={this.handleSubmit.bind(this)}>\n                {title}\n              </Button>\n            </ButtonToolbar>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n}\n\nResearchPlanDetailsFieldTableColumnNameModal.propTypes = {\n  modal: PropTypes.object,\n  columnName: PropTypes.string,\n  onSubmit: PropTypes.func,\n  onHide: PropTypes.func,\n  columns: PropTypes.array\n};\n\nexport default ResearchPlanDetailsFieldTableColumnNameModal;\n","import Aviator from 'aviator';\nimport equal from 'deep-equal';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ButtonToolbar, Button, ButtonGroup, DropdownButton, MenuItem } from 'react-bootstrap';\nimport { v4 as uuidv4 } from 'uuid';\nimport { observer } from 'mobx-react';\n\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nclass MeasurementCandidate extends Component {\n  static propTypes = {\n    description: PropTypes.string,\n    errors: PropTypes.array,\n    id: PropTypes.number,\n    onChange: PropTypes.func.isRequired,\n    sample_identifier: PropTypes.string,\n    selected: PropTypes.bool.isRequired,\n    unit: PropTypes.string,\n    uuid: PropTypes.string.isRequired,\n    value: PropTypes.string,\n  };\n\n  constructor(props) {\n    super(props);\n  }\n\n  _status() {\n    if (this.props.id) {\n      return (<span className='success'>Success: Created measurement for sample</span>);\n    }\n    if (this.props.errors.length > 0) {\n      return (<span className='danger'>Error: {this.props.errors.join('. ')}</span>);\n    }\n  }\n\n  _selector() {\n    if (this.props.errors.length > 0) { return ''; }\n    if (this.props.id) { return ''; } // Prevent resubmitting if the server has already supplied an ID\n\n    return (\n      <input\n        type=\"checkbox\"\n        className=\"measurementSelector\"\n        checked={this.props.selected}\n        onChange={() => this.props.onChange(this.props.uuid)} />\n    );\n  }\n\n  _canExport() {\n    return this.props.sample_identifier &&\n      this.props.description &&\n      this.props.value &&\n      this.props.unit;\n  }\n\n  render() {\n    if (!this._canExport()) {\n      return null;\n    }\n\n    return (\n      <tr>\n        <td>{this._selector()}</td>\n        <td>{this.props.sample_identifier}</td>\n        <td>{this.props.description} {this.props.value} {this.props.unit}</td>\n        <td>{this._status()}</td>\n      </tr>\n    );\n  }\n}\n\nclass ResearchPlanDetailsFieldTableMeasurementExportModal extends Component {\n  static propTypes = {\n    show: PropTypes.bool,\n    onHide: PropTypes.func.isRequired,\n    rows: PropTypes.array.isRequired,\n    columns: PropTypes.array.isRequired,\n  };\n  static contextType = StoreContext;\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      measurementCandidates: this._measurementCandidates(props.rows, props.columns),\n      researchPlanId: this.getResearchPlanIdFromPath() ?? -1\n    };\n  }\n\n  componentDidUpdate(prevProps, _prevState, _snapshot) {\n    if (equal(this.props, prevProps)) {\n      return;\n    }\n\n    this.setState({ measurementCandidates: this._measurementCandidates(this.props.rows, this.props.columns) })\n  }\n\n  getResearchPlanIdFromPath() {\n    const currentURI = Aviator.getCurrentURI();\n\n    const researchPlanMatch = currentURI.match(/\\/research_plan\\/(\\d+)/);\n    if (researchPlanMatch) {\n      return researchPlanMatch[1];\n    } else {\n      return -1;\n    }\n  }\n\n  handleSubmit() {\n    const { measurementCandidates } = this.state;\n    const selectedCandidates = measurementCandidates.filter(candidate => candidate.selected === true);\n    if (selectedCandidates.length == 0) {\n      return;\n    }\n    LoadingActions.start();\n    this.context.measurements.createMeasurements(\n      selectedCandidates,\n      this.state.researchPlanId,\n      (result) => {\n        result.forEach((measurement) => {\n          var index = measurementCandidates.findIndex(candidate => candidate.uuid === measurement.uuid);\n          if (index > -1) { // safeguard to make sure the script does not crash if for whatever reason the candidate can not be found\n            if (measurement.errors.length === 0) {\n              measurementCandidates[index].id = measurement.id\n              measurementCandidates[index].selected = false\n            } else {\n              measurement.errors.forEach(error => measurementCandidates[index].errors.push(error))\n            }\n          }\n        });\n        this.setState({ measurementCandidates });\n        LoadingActions.stop();\n      }\n    );\n  }\n\n  readyForSubmit() {\n    const candidatesSelected = this.state.measurementCandidates.findIndex((candidate) => candidate.selected === true) > -1;\n    const researchPlanIdPresent = this.state.researchPlanId > -1;\n\n    return candidatesSelected && researchPlanIdPresent;\n  }\n\n  render() {\n    const { measurementCandidates } = this.state;\n\n    return (\n      <Modal animation bsSize=\"large\" show={this.props.show} onHide={this.props.onHide} className=\"measurementExportModal\">\n        <Modal.Header closeButton>\n          <Modal.Title>\n            Export measurements to samples\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body className='measurementExportModal__body'>\n          <table className=\"table\">\n            <thead>\n              <tr>\n                <th>{this._selectAllButton()}</th>\n                <th>Sample</th>\n                <th>Measurement</th>\n                <th>Status</th>\n              </tr>\n            </thead>\n            <tbody>\n              {measurementCandidates && measurementCandidates.map((candidate) => {\n                return (\n                  <MeasurementCandidate\n                    description={candidate.description}\n                    errors={candidate.errors}\n                    id={candidate.id}\n                    key={candidate.uuid}\n                    onChange={this._toggleCandidate.bind(this)}\n                    sample_identifier={candidate.sample_identifier}\n                    selected={candidate.selected}\n                    unit={candidate.unit}\n                    uuid={candidate.uuid}\n                    value={candidate.value}\n                  />\n                );\n              })}\n            </tbody>\n          </table>\n          <div>\n            <ButtonToolbar>\n              <Button bsStyle=\"warning\" onClick={this.props.onHide}>\n                Close\n              </Button>\n              <Button bsStyle=\"primary\" disabled={!this.readyForSubmit()} onClick={this.handleSubmit.bind(this)}>\n                Link data to sample\n              </Button>\n            </ButtonToolbar>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  _selectAll(prefix = null) {\n    const { measurementCandidates } = this.state;\n    measurementCandidates.forEach((candidate) => {\n      const candidate_has_no_errors = candidate.errors.length === 0\n      const candidate_matches_prefix = prefix == null || candidate.description == prefix\n\n      if (candidate_has_no_errors && candidate_matches_prefix) {\n        candidate.selected = true;\n      }\n    });\n    this.setState({ measurementCandidates });\n  }\n\n  _selectAllButton() {\n    const prefixes = this._readouts(this.props.columns).map(readout => readout.description)\n    if (prefixes.length == 1) {\n      return (\n        <Button onClick={() => this._selectAll.bind(this)()}>Select all</Button>\n      );\n    } else {\n      const readoutSelectors = prefixes.map((prefix, index) => (\n        <MenuItem\n          eventKey={prefix}\n          key={`SelectAllButtonForReadout${index}`}\n          onClick={() => this._selectAll.bind(this)(prefix)}\n        >\n          {prefix}\n        </MenuItem>\n      ));\n\n      return (\n        <ButtonGroup>\n          <Button onClick={() => this._selectAll.bind(this)()}>Select all</Button>\n          <DropdownButton title=\"by Readout\">\n            {readoutSelectors}\n          </DropdownButton>\n        </ButtonGroup>\n      );\n    }\n  }\n\n  _toggleCandidate(uuid) {\n    const { measurementCandidates } = this.state;\n    const index = measurementCandidates.findIndex(candidate => candidate.uuid === uuid);\n    measurementCandidates[index].selected = !measurementCandidates[index].selected;\n    this.setState({ measurementCandidates });\n  }\n\n  _sampleColumnField(columns) {\n    const sampleColumn = columns.find((column) => {\n      const matcher = /^Sample|sample$/\n      return column.headerName.match(matcher) ||\n        column.field.match(matcher) ||\n        column.colId.match(matcher)\n    });\n\n    if (sampleColumn !== undefined) {\n      return sampleColumn.field;\n    } else {\n      return null;\n    }\n  }\n\n  _readouts(columns) {\n    const readouts = [];\n\n    // TODO: recognize if readout column duplicates exist\n    columns.forEach((column) => {\n      const valueMatcher = /[_ ][Vv]alue$/\n      if (column.headerName && column.headerName.match(valueMatcher)) {\n        const prefix = column.headerName.split(valueMatcher)[0];\n        const unitColumn = columns.find(otherColumn => otherColumn.headerName.match(RegExp(\"^\" + prefix + \"[_ ][Uu]nit$\")))\n        if (unitColumn !== undefined) {\n          readouts.push({\n            valueColumn: column.field,\n            unitColumn: unitColumn.field,\n            description: prefix\n          });\n        }\n      }\n    });\n    return readouts;\n  }\n\n  _measurementCandidates(rows, columns) {\n    const candidates = [];\n    const readouts = this._readouts(columns);\n    const sampleColumnField = this._sampleColumnField(columns);\n\n    rows.forEach((row) => {\n      readouts.forEach((readout) => {\n        var candidate = {\n          uuid: uuidv4(),\n          sample_identifier: row[sampleColumnField],\n          description: readout.description,\n          value: row[readout.valueColumn],\n          unit: row[readout.unitColumn],\n          errors: [],\n          selected: false,\n        }\n        this._validateCandidate(candidate);\n\n        candidates.push(candidate);\n      });\n    });\n\n    return candidates;\n  }\n\n  _validateCandidate(candidate) {\n    if (candidate.sample_identifier === undefined || candidate.sample_identifier === null) {\n      candidate.errors.push('Missing sample identifier');\n    }\n    if (candidate.description === undefined || candidate.description === null) {\n      candidate.errors.push('Missing description');\n    }\n    if (candidate.value === undefined || candidate.value === null) {\n      candidate.errors.push('Missing value');\n    }\n    if (candidate.unit === undefined || candidate.unit === null) {\n      candidate.errors.push('Missing unit');\n    }\n  }\n}\n\nexport default observer(ResearchPlanDetailsFieldTableMeasurementExportModal);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Table, Modal, Button, FormGroup, ControlLabel, FormControl, HelpBlock, InputGroup } from 'react-bootstrap';\n\nclass ResearchPlanDetailsFieldTableSchemasModal extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      schemaNameValue: '',\n      schemaNameError: ''\n    };\n  }\n\n  handleSchemaNameChange(event) {\n    this.setState({ schemaNameValue: event.target.value });\n  }\n\n  handleSubmit() {\n    const { onSubmit } = this.props;\n    const { schemaNameValue } = this.state;\n\n    if (!schemaNameValue) {\n      this.setState({ schemaNameError: 'Please give a schema name.' });\n    } else {\n      this.setState({ schemaNameError: '', schemaNameValue: '' });\n      onSubmit(schemaNameValue);\n    }\n  }\n\n  render() {\n    const {\n      modal, onHide, onUse, onDelete\n    } = this.props;\n    const { schemaNameValue, schemaNameError } = this.state;\n\n    let schemaTable = null;\n    if (modal.schemas) {\n      schemaTable = modal.schemas.map((schema, index) => {\n        return (\n          <tr key={index}>\n            <td>{schema.name}</td>\n            <td>\n              {schema.value.columns.map(column => column.headerName).join(', ')}\n            </td>\n            <td>\n              {schema.value.rows.length}\n            </td>\n            <td>\n              <Button bsStyle=\"danger\" bsSize=\"xsmall\" onClick={() => onDelete(schema)}>\n                Delete\n              </Button>\n              <Button bsStyle=\"warning\" bsSize=\"xsmall\" onClick={() => onUse(schema)}>\n                Use\n              </Button>\n            </td>\n          </tr>\n        );\n      });\n    }\n\n    return (\n      <Modal animation show={modal.show} onHide={onHide}>\n        <Modal.Header closeButton>\n          <Modal.Title>\n            Table schemas\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body >\n          <div className=\"research-plan-table-schema-modal-create\">\n            <FormGroup validationState={schemaNameError ? 'error' : null}>\n              <ControlLabel>Save current schema</ControlLabel>\n              <InputGroup>\n                <FormControl\n                  type=\"text\"\n                  value={schemaNameValue}\n                  onChange={this.handleSchemaNameChange.bind(this)}\n                />\n                <InputGroup.Button>\n                  <Button bsStyle=\"success\" onClick={this.handleSubmit.bind(this)}>\n                    Save\n                  </Button>\n                </InputGroup.Button>\n              </InputGroup>\n              <HelpBlock>{schemaNameError}</HelpBlock>\n            </FormGroup>\n          </div>\n          <div className=\"research-plan-table-schema-modal-table\">\n            <h4>Stored schemas</h4>\n            <Table>\n              <thead>\n                <tr>\n                  <th style={{ width: '20%' }}>Name</th>\n                  <th style={{ width: '40%' }}>Columns</th>\n                  <th style={{ width: '20%' }}># Rows</th>\n                  <th style={{ width: '20%' }} />\n                </tr>\n              </thead>\n              <tbody>\n                {schemaTable}\n              </tbody>\n            </Table>\n          </div>\n          <div>\n            <Button bsStyle=\"default\" onClick={onHide}>\n              Close\n            </Button>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n}\n\nResearchPlanDetailsFieldTableSchemasModal.propTypes = {\n  modal: PropTypes.object,\n  onSubmit: PropTypes.func,\n  onHide: PropTypes.func,\n  onUse: PropTypes.func,\n  onDelete: PropTypes.func\n};\n\nexport default ResearchPlanDetailsFieldTableSchemasModal;\n","import Aviator from 'aviator';\nimport PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport uniqueId from 'react-html-id';\nimport { AgGridReact } from 'ag-grid-react';\nimport { ContextMenu, MenuItem, ContextMenuTrigger } from \"react-contextmenu\";\nimport { Row, Col, Button } from 'react-bootstrap';\n\nimport CustomHeader from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/CustomHeader';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport ResearchPlanDetailsFieldTableColumnNameModal from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldTableColumnNameModal';\nimport ResearchPlanDetailsFieldTableMeasurementExportModal from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldTableMeasurementExportModal';\nimport ResearchPlanDetailsFieldTableSchemasModal from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldTableSchemasModal';\nimport ResearchPlansFetcher from 'src/fetchers/ResearchPlansFetcher';\nimport SamplesFetcher from 'src/fetchers/SamplesFetcher';\nimport ReactionsFetcher from 'src/fetchers/ReactionsFetcher'\n\n\n// regexp to parse tap separated paste from the clipboard\nconst defaultParsePaste = str => (\n  str.split(/\\r\\n|\\n|\\r/).map(row => row.split('\\t'))\n);\n\nexport default class ResearchPlanDetailsFieldTable extends Component {\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      update: this.props.update,\n      currentlyCollapsedInEditMode: this.props?.field?.value?.startCollapsed ?? false,\n      currentlyCollapsedInViewMode: this.props?.field?.value?.startCollapsed ?? false,\n      columnNameModal: {\n        show: false,\n        colId: null\n      },\n      schemaModal: {\n        show: false\n      },\n      measurementExportModal: {\n        show: false\n      },\n      selection: {},\n      gridApi: {},\n      columnClicked: null,\n      rowClicked: null,\n      isDisable: true\n    };\n\n    uniqueId.enableUniqueIds(this)\n\n    this.ref = React.createRef();\n  }\n\n  componentDidUpdate() {\n    if (this.state.update !== this.props.update) {\n      this.setState({ update: this.props.update });\n    }\n  }\n\n  buildColumn(columnName) {\n    return {\n      cellEditor: 'agTextCellEditor',\n      colId: columnName,\n      editable: true,\n      field: columnName,\n      headerName: columnName,\n      key: columnName,\n      name: columnName,\n      resizable: true,\n      width: 200,\n    };\n  }\n\n  buildRow() {\n    return [];\n  }\n\n  handleColumnNameModalShow(action, colId) {\n    this.setState({\n      columnNameModal: {\n        show: true,\n        action,\n        colId\n      }\n    });\n  }\n\n  handleColumnNameModalSubmit(columnName) {\n    const { action, colId } = this.state.columnNameModal;\n\n    if (action === 'insert') {\n      this.handleColumnInsert(columnName);\n    } else if (action === 'rename') {\n      this.handleColumnRename(colId, columnName);\n    }\n\n    this.handleColumnNameModalHide();\n  }\n\n  handleColumnNameModalHide() {\n    this.setState({\n      columnNameModal: {\n        show: false,\n        action: null,\n        idx: null\n      }\n    });\n  }\n\n  handleColumnInsert(columnName) {\n    const { field, onChange } = this.props;\n    const { gridApi } = this.state\n\n    let columnDefs = gridApi.getColumnDefs();\n    columnDefs.push(this.buildColumn(columnName));\n    gridApi.setGridOption('columnDefs', columnDefs);\n    field.value.columns = gridApi.getColumnDefs();\n    field.value.columnStates = gridApi.getColumnState();\n\n    onChange(field.value, field.id);\n  }\n\n  handleColumnRename(colId, columnName) {\n    const { field, onChange } = this.props;\n    const { gridApi } = this.state\n\n    let columnDefs = gridApi.getColumnDefs();\n    let columnChange = columnDefs.find(o => o.colId === colId);\n    columnChange.headerName = columnName;\n    gridApi.setGridOption('columnDefs', columnDefs);\n    field.value.columns = gridApi.getColumnDefs();\n    field.value.columnStates = gridApi.getColumnState();\n\n    onChange(field.value, field.id);\n  }\n\n  handleColumnResize(columnIdx, width) {\n    const { field, onChange } = this.props;\n    field.value.columns[columnIdx]['width'] = width;\n    onChange(field.value, field.id);\n  }\n\n  handleColumnDelete(columnIdx) {\n    const { field, onChange } = this.props;\n    const columns = field.value.columns.slice();\n    columns.splice(columnIdx, 1);\n    field.value.columns = columns;\n    onChange(field.value, field.id);\n  }\n\n  handleRowInsert(rowIdx) {\n    const { field, onChange } = this.props;\n    field.value.rows.splice(rowIdx, 0, this.buildRow());\n    onChange(field.value, field.id);\n  }\n\n  handleRowDelete(rowIdx) {\n    const { field, onChange } = this.props;\n    field.value.rows.splice(rowIdx, 1);\n    onChange(field.value, field.id);\n  }\n\n  handleSchemaModalShow() {\n    ResearchPlansFetcher.fetchTableSchemas().then((json) => {\n      this.setState({\n        schemaModal: {\n          show: true,\n          schemas: json['table_schemas']\n        }\n      });\n    });\n  }\n\n  handleSchemasModalSubmit(schemaName) {\n    ResearchPlansFetcher.createTableSchema(schemaName, this.props.field.value).then(() => {\n      this.handleSchemaModalShow();\n    });\n  }\n\n  handleSchemasModalHide() {\n    this.setState({\n      schemaModal: {\n        show: false\n      }\n    });\n  }\n\n  _handleMeasurementExportModalShow() {\n    this.setState({\n      measurementExportModal: {\n        show: true\n      }\n    });\n  }\n\n  _handleMeasurementExportModalHide() {\n    this.setState({\n      measurementExportModal: {\n        show: false\n      }\n    });\n  }\n\n  handleSchemasModalUse(schema) {\n    const { field, onChange } = this.props;\n\n    onChange(schema.value, field.id);\n    this.handleSchemasModalHide();\n  }\n\n  handleSchemasModalDelete(schema) {\n    ResearchPlansFetcher.deleteTableSchema(schema.id).then(() => {\n      this.handleSchemaModalShow();\n    });\n  }\n\n  rowGetter(idx) {\n    return this.props.field.value.rows[idx];\n  }\n\n  cellValueChanged = () => {\n    const { field, onChange } = this.props;\n    const { gridApi } = this.state\n\n    let rowData = [];\n    gridApi.forEachNode(node => rowData.push(node.data));\n    field.value.rows = rowData\n    field.value.columns = gridApi.getColumnDefs();\n    field.value.columnStates = gridApi.getColumnState();\n\n    onChange(field.value, field.id);\n  }\n\n  onGridReady = (params) => {\n    this.setState({\n      gridApi: params.api,\n    });\n\n    const { field } = this.props;\n    if (!field.value.columnStates) return;\n    params.api.applyColumnState(field.value.columnStates);\n  }\n\n  onSaveGridColumnState(params) {\n    const { field, onChange } = this.props;\n    const { gridApi } = this.state\n\n    field.value.columns = gridApi.getColumnDefs();\n    field.value.columnStates = gridApi.getColumnState();\n\n    let sortedRows = []\n    gridApi.forEachNodeAfterFilterAndSort(row => sortedRows.push(row.data))\n    field.value.rows = sortedRows\n\n    onChange(field.value, field.id);\n  }\n\n  onSaveGridRow() {\n    const { field, onChange } = this.props;\n    const { gridApi } = this.state\n\n    let rowData = [];\n    gridApi.forEachNode(node => rowData.push(node.data));\n    field.value.rows = rowData\n\n    onChange(field.value, field.id);\n  }\n\n  addNewRow() {\n    const { field, onChange } = this.props;\n    const { gridApi } = this.state\n\n    gridApi.applyTransaction({\n      add: [{}],\n    });\n\n    let rowData = [];\n    gridApi.forEachNode(node => rowData.push(node.data));\n    field.value.columns = gridApi.getColumnDefs();\n    field.value.rows = rowData\n\n    onChange(field.value, field.id);\n  }\n\n  removeThisRow() {\n    const { field, onChange } = this.props;\n    const { gridApi, rowClicked } = this.state\n    let rowData = [];\n    gridApi.forEachNodeAfterFilterAndSort(node => {\n      rowData.push(node.data);\n    });\n    gridApi.applyTransaction({ remove: [rowData[rowClicked]] });\n\n    rowData = rowData.filter(function (value, index, arr) {\n      return index !== rowClicked;\n    });\n    field.value.rows = rowData\n\n    onChange(field.value, field.id);\n  }\n\n  removeThisColumn() {\n    const { field, onChange } = this.props;\n    const { gridApi, columnClicked } = this.state\n    if (columnClicked) {\n      let columnDefs = gridApi.getColumnDefs();\n      columnDefs = columnDefs.filter(function (value, index, arr) {\n        return value.colId !== columnClicked;\n      });\n\n      gridApi.setGridOption('columnDefs', columnDefs);\n      field.value.columns = gridApi.getColumnDefs();\n      field.value.columnStates = gridApi.getColumnState();\n\n      onChange(field.value, field.id);\n    }\n  }\n\n  onCellContextMenu(params) {\n    this.setState({ columnClicked: params.column.colId, rowClicked: params.rowIndex });\n  }\n\n  handleRenameClick() {\n    const { columnClicked } = this.state;\n    if (columnClicked) {\n      this.handleColumnNameModalShow('rename', columnClicked);\n    }\n  }\n\n  handlePaste(event) {\n    const { field, onChange } = this.props;\n    const { gridApi, columnClicked, rowClicked } = this.state;\n    onChange(field.value, field.id);\n\n    navigator.clipboard.readText()\n      .then(data => {\n        let lines = data.split(/\\n/);\n        let cellData = [];\n        lines.forEach(element => {\n          cellData.push(element.split('\\t'));\n        });\n\n\n        let columns = gridApi.getAllGridColumns();\n        let rowData = [];\n        gridApi.forEachNodeAfterFilterAndSort(node => {\n          rowData.push(node.data);\n        });\n\n        let rowIndex = 0;\n        for (let i = 0; i < rowData.length; i++) {\n          let row = [];\n          let startUpdate = false;\n          if (i >= rowClicked) {\n            let columnIndex = 0;\n            for (let j = 0; j < columns.length; j++) {\n              const element = columns[j];\n              if (startUpdate || element.colId === columnClicked) {\n                startUpdate = true;\n                rowData[i][element.colId] = cellData[rowIndex][columnIndex];\n                columnIndex++;\n              }\n            }\n            rowIndex++;\n          }\n        }\n\n        gridApi.applyTransaction({\n          update: rowData,\n        });\n\n        field.value.rows = rowData\n        onChange(field.value, field.id);\n      })\n      .catch(err => {\n        console.error('Failed to read clipboard contents: ', err);\n      });\n  }\n\n  handleInsertColumnClick() {\n    const { columnClicked } = this.state;\n    if (columnClicked) {\n      this.handleColumnNameModalShow('insert', columnClicked);\n    }\n  }\n\n  onCellMouseOver() {\n    this.setState({ isDisable: false });\n  }\n\n  onCellMouseOut() {\n    this.setState({ isDisable: true });\n  }\n\n  toggleTemporaryCollapse() {\n    if (this.props.edit) {\n      this.setState(\n        { currentlyCollapsedInEditMode: !this.state.currentlyCollapsedInEditMode }\n      )\n    } else {\n      this.setState(\n        { currentlyCollapsedInViewMode: !this.state.currentlyCollapsedInViewMode }\n      )\n    }\n  }\n\n  temporaryCollapseToggleButton() {\n    const collapsed = this.props.edit\n      ? this.state.currentlyCollapsedInEditMode\n      : this.state.currentlyCollapsedInViewMode\n    const collapseToggleIconClass = collapsed ? 'fa-expand' : 'fa-compress';\n    const collapseToggleTitle = collapsed ? 'expand table' : 'collapse table';\n    return (\n      <button\n        className=\"button-right btn btn-xs btn-info\"\n        type=\"button\"\n        title={collapseToggleTitle}\n        onClick={this.toggleTemporaryCollapse.bind(this)}\n      >\n        <i className={`fa ${collapseToggleIconClass}`}></i>\n      </button>\n    );\n  }\n\n  permanentCollapseToggleButton() {\n    const collapsed = this.props?.field?.value?.startCollapsed ?? false\n    const togglePermanentCollapse = () => {\n      const { field, onChange } = this.props;\n      field.value.startCollapsed = !collapsed\n\n      onChange(field.value, field.id);\n      this.setState({ currentlyCollapsedInViewMode: !collapsed })\n    }\n\n    return (\n      <button\n        className=\"btn btn-sm btn-info\"\n        style={{ \"margin-bottom\": \"5px\" }}\n        onClick={togglePermanentCollapse.bind(this)}\n      >\n        Table is <strong>{collapsed ? 'collapsed' : 'expanded'}</strong> in view mode\n      </button>\n    )\n  }\n\n  renderEdit() {\n    const { field, onExport } = this.props;\n    const { rows, columns } = field.value;\n    const { columnNameModal, schemaModal, measurementExportModal, isDisable } = this.state;\n    let contextMenuId = this.nextUniqueId();\n    const defaultColDef = {\n      resizable: true,\n      rowDrag: true,\n      sortable: true,\n      editable: true,\n      cellClass: 'cell-figure',\n      headerComponent: CustomHeader,\n      headerComponentParams: {\n        handleColumnNameModalShow: this.handleColumnNameModalShow.bind(this)\n      }\n    };\n\n    const gridWrapperClassName = ['research-plan-table-grid']\n    if (this.state.currentlyCollapsedInEditMode) {\n      gridWrapperClassName.push('grid-with-collapsed-rows')\n    }\n\n    return (\n      <div>\n        <div>\n          {this.permanentCollapseToggleButton()}\n          {this.temporaryCollapseToggleButton()}\n        </div>\n        <div className={gridWrapperClassName.join(' ')}>\n          <div id='myGrid' className='ag-theme-alpine'>\n            <ContextMenuTrigger id={contextMenuId} disable={isDisable}>\n              <AgGridReact\n                animateRows={true}\n                columnDefs={columns}\n                defaultColDef={defaultColDef}\n                domLayout='autoHeight'\n                rowDragMultiRow={true}\n                onCellContextMenu={this.onCellContextMenu.bind(this)}\n                onCellEditingStopped={this.cellValueChanged}\n                onCellMouseOut={this.onCellMouseOut.bind(this)}\n                onCellMouseOver={this.onCellMouseOver.bind(this)}\n                onColumnMoved={this.onSaveGridColumnState.bind(this)}\n                onColumnResized={this.onSaveGridColumnState.bind(this)}\n                onGridReady={this.onGridReady}\n                onRowDragEnd={this.onSaveGridRow.bind(this)}\n                onSortChanged={this.onSaveGridColumnState.bind(this)}\n                rowData={rows}\n                rowDragManaged={true}\n                rowHeight='37'\n                rowSelection='multiple'\n                singleClickEdit={true}\n                stopEditingWhenCellsLoseFocus={true}\n                suppressDragLeaveHidesColumns={true}\n              />\n            </ContextMenuTrigger>\n            <ContextMenu id={contextMenuId}>\n              <MenuItem onClick={this.handlePaste.bind(this)}>\n                Paste\n              </MenuItem>\n              <MenuItem onClick={this.handleRenameClick.bind(this)}>\n                Rename column\n              </MenuItem>\n              <MenuItem divider />\n              <MenuItem onClick={this.handleInsertColumnClick.bind(this)}>\n                Add new column\n              </MenuItem>\n              <MenuItem onClick={this.addNewRow.bind(this)}>\n                Add new row\n              </MenuItem>\n              <MenuItem divider />\n              <MenuItem onClick={this.removeThisColumn.bind(this)}>\n                Remove this column\n              </MenuItem>\n              <MenuItem onClick={this.removeThisRow.bind(this)}>\n                Remove this row\n              </MenuItem>\n            </ContextMenu>\n          </div>\n        </div>\n\n        <div className='research-plan-table-toolbar'>\n          <Row>\n            <Col xs={4}>\n              <Button bsSize='xsmall' onClick={this.handleSchemaModalShow.bind(this)}>\n                Table schemas\n              </Button>\n            </Col>\n            <Col xs={4}>\n              <Button bsSize='xsmall' onClick={this._handleMeasurementExportModalShow.bind(this)}>\n                Export Measurements\n              </Button>\n            </Col>\n            <Col xs={4}>\n              <Button bsSize='xsmall' onClick={() => onExport(field)}>\n                Export as Excel\n              </Button>\n            </Col>\n          </Row>\n        </div>\n        <ResearchPlanDetailsFieldTableColumnNameModal\n          modal={columnNameModal}\n          onSubmit={this.handleColumnNameModalSubmit.bind(this)}\n          onHide={this.handleColumnNameModalHide.bind(this)}\n          columns={columns} />\n        <ResearchPlanDetailsFieldTableSchemasModal\n          modal={schemaModal}\n          onSubmit={this.handleSchemasModalSubmit.bind(this)}\n          onHide={this.handleSchemasModalHide.bind(this)}\n          onUse={this.handleSchemasModalUse.bind(this)}\n          onDelete={this.handleSchemasModalDelete.bind(this)} />\n        <ResearchPlanDetailsFieldTableMeasurementExportModal\n          show={measurementExportModal.show}\n          onHide={this._handleMeasurementExportModalHide.bind(this)}\n          rows={rows}\n          columns={columns} />\n      </div>\n    );\n  }\n\n  renderStatic() {\n    const { field } = this.props;\n    const { columns, rows } = field.value;\n\n    const lastColumn = columns.length - 1;\n    const th = columns.map((column, index) => {\n\n      return (\n        <th key={column.colId}>\n          {column.headerName}\n          {index == lastColumn ? this.temporaryCollapseToggleButton() : ''}\n        </th>\n      );\n    });\n\n    const tr = rows.map((row, index) => {\n      const td = columns.map((column) => {\n        let cellContent = row[column.colId];\n        if (column.headerName == 'Sample') {\n          let cellContentIsShortLabel = column.headerName == 'Sample' && (cellContent || '').length > 3;\n          if (cellContentIsShortLabel) {\n            let shortLabel = cellContent;\n            cellContent = <a\n              onClick={(e) => { e.preventDefault(); this.openSampleByShortLabel(shortLabel) }}\n            >\n              {shortLabel}\n            </a>\n          }\n        }\n        else if (column.headerName == 'Reaction') {\n          let cellContentIsShortLabel = column.headerName == 'Reaction' && (cellContent || '').length > 3;\n          if (cellContentIsShortLabel) {\n            let shortLabel = cellContent;\n            cellContent = <a\n              onClick={(e) => { e.preventDefault(); this.openReactionByShortLabel(shortLabel) }}\n            >\n              {shortLabel}\n            </a>\n          }\n        }\n        return <td style={{ 'height': '37px' }} key={column.colId}>{cellContent}</td>;\n      });\n      return (\n        <tr key={index}>\n          {td}\n        </tr>\n      );\n    });\n    const collapsed = this.state.currentlyCollapsedInViewMode\n\n    return (\n      <table className='table table-bordered'>\n        <thead>\n          <tr>\n            {th}\n          </tr>\n        </thead>\n        <tbody className={collapsed ? 'hidden' : ''}>\n          {tr}\n        </tbody>\n      </table>\n    );\n  }\n\n  render() {\n    if (this.props.edit) {\n      return this.renderEdit();\n    }\n    return this.renderStatic();\n  }\n\n  openSampleByShortLabel(shortLabel) {\n    console.debug('opening Sample by short label', shortLabel);\n    SamplesFetcher.findByShortLabel(shortLabel).then((result) => {\n      console.debug('got Result', result);\n      if (result.sample_id && result.collection_id) {\n        Aviator.navigate(`/collection/${result.collection_id}/sample/${result.sample_id}`, { silent: true });\n        ElementActions.fetchSampleById(result.sample_id);\n      } else {\n        console.debug('No valid data returned for short label', shortLabel, result);\n      }\n    });\n  }\n\n  openReactionByShortLabel(shortLabel) {\n    console.debug('opening reaction by short label', shortLabel);\n    ReactionsFetcher.findByShortLabel(shortLabel).then((result) => {\n      console.debug('got Result', result);\n      if (result.reaction_id && result.collection_id) {\n        Aviator.navigate(`/collection/${result.collection_id}/reaction/${result.reaction_id}`, { silent: true });\n        ElementActions.fetchReactionById(result.reaction_id);\n      } else {\n        console.debug('No valid data returned for short label', shortLabel, result);\n      }\n    });\n  }\n}\n\nResearchPlanDetailsFieldTable.propTypes = {\n  field: PropTypes.object,\n  index: PropTypes.number,\n  disabled: PropTypes.bool,\n  onChange: PropTypes.func,\n  update: PropTypes.bool,\n  edit: PropTypes.bool\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DropTarget } from 'react-dnd';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport { UrlSilentNavigation } from 'src/utilities/ElementUtils';\nimport SampleName from 'src/components/common/SampleName';\nimport SamplesFetcher from 'src/fetchers/SamplesFetcher';\n\nconst spec = {\n  drop(props, monitor) {\n    const { field, onChange } = props;\n    onChange({ sample_id: monitor.getItem().element.id }, field.id);\n  }\n};\n\nconst collect = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop()\n});\n\nconst hasAuth = (id) => {\n  if (typeof id === 'string' && id.includes('error')) {\n    return false;\n  }\n  return true;\n};\n\nconst noAuth = (el) => (\n  <div className=\"research-plan-no-auth\">\n    <h4>\n      {el.id.split(':')[2]}\n      &nbsp;\n      <i className=\"fa fa-eye-slash\" aria-hidden=\"true\" />\n    </h4>\n  </div>\n);\n\nfunction elementError() {\n  return (\n    <div style={{ color: 'red', textAlign: 'center' }}>\n      <i className=\"fa fa-exclamation-triangle\" aria-hidden=\"true\" style={{ marginRight: '5px' }} />\n      <span style={{ fontWeight: 'bold' }}>Internal Server Error: Sample can not be found!</span>\n    </div>\n  );\n}\n\nclass ResearchPlanDetailsFieldSample extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      idle: true,\n      sample: {\n        id: null\n      },\n      error: false\n    };\n  }\n\n  componentDidMount() {\n    const { field } = this.props;\n    if (field && field.value && field.value.sample_id && hasAuth(field.value.sample_id)) {\n      this.fetch();\n    }\n  }\n\n  componentDidUpdate() {\n    const { field } = this.props;\n    const { idle, sample } = this.state;\n    if (idle && field.value.sample_id !== sample.id && hasAuth(sample.id)) {\n      this.setState({ idle: false }, this.fetch);\n    }\n  }\n\n  fetch() {\n    const { field } = this.props;\n    SamplesFetcher.fetchById(field.value.sample_id)\n      .then((sample) => {\n        if (sample && sample.id) {\n          this.setState({ idle: true, sample });\n        } else {\n          console.error('Fetched sample does not contain an id or is in incorrect format:', sample);\n          this.setState({ idle: true, error: true });\n        }\n      })\n      .catch((error) => {\n        console.error('Error fetching sample:', error);\n        this.setState({ idle: true, error: true });\n      });\n  }\n\n  showSample() {\n    const { sample } = this.state;\n    UrlSilentNavigation(sample);\n    ElementActions.fetchSampleById(sample.id);\n  }\n\n  renderSample(sample) {\n    if (!hasAuth(sample.id)) {\n      return noAuth(sample);\n    }\n    const { edit } = this.props;\n    const link = (\n      <button\n        type=\"button\"\n        style={{\n          cursor: 'pointer',\n          color: '#003366',\n          backgroundColor: 'transparent',\n          border: '1px solid #003366',\n          borderRadius: '4px',\n          margin: '5px',\n          outline: 'none',\n        }}\n        onClick={() => this.showSample()}\n      >\n        {sample.title()}\n      </button>\n    );\n\n    let image;\n    if (sample.svgPath) {\n      image = <img src={sample.svgPath} alt={sample.title()} />;\n    }\n\n    const sampleStyle = edit ? {} : {\n      border: '1px solid #cccccc',\n      padding: '5px',\n    };\n\n    return (\n      <div className=\"research-plan-field-image\" style={sampleStyle}>\n        {link}\n        <div className=\"image-container\">\n          {image}\n          <SampleName sample={sample} />\n        </div>\n      </div>\n    );\n  }\n\n  renderEdit() {\n    const { connectDropTarget, isOver, canDrop } = this.props;\n    const { sample, error } = this.state;\n    if (!hasAuth(sample.id)) {\n      return noAuth(sample);\n    }\n    let className = 'drop-target';\n    if (isOver) className += ' is-over';\n    if (canDrop) className += ' can-drop';\n    let content;\n    if (error) {\n      content = elementError();\n    } else if (sample.id) {\n      content = this.renderSample(sample);\n    } else {\n      content = 'Drop sample here.';\n    }\n    return connectDropTarget(\n      <div className={className}>\n        {content}\n      </div>\n    );\n  }\n\n  renderStatic() {\n    const { sample, error } = this.state;\n    let content;\n    if (error) {\n      content = elementError();\n    } else if (sample.id) {\n      content = this.renderSample(sample);\n    } else {\n      content = null;\n    }\n    return content;\n  }\n\n  render() {\n    if (this.props.edit) {\n      return this.renderEdit();\n    }\n    return this.renderStatic();\n  }\n}\n\nResearchPlanDetailsFieldSample.propTypes = {\n  field: PropTypes.object,\n  index: PropTypes.number,\n  disabled: PropTypes.bool,\n  onChange: PropTypes.func,\n  edit: PropTypes.bool,\n};\n\nexport default DropTarget(DragDropItemTypes.SAMPLE, spec, collect)(ResearchPlanDetailsFieldSample);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DropTarget } from 'react-dnd';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport { UrlSilentNavigation } from 'src/utilities/ElementUtils';\nimport ReactionsFetcher from 'src/fetchers/ReactionsFetcher';\n\nconst spec = {\n  drop(props, monitor) {\n    const { field, onChange } = props;\n    onChange({ reaction_id: monitor.getItem().element.id }, field.id);\n  }\n};\n\nconst collect = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop()\n});\n\nconst hasAuth = (id) => {\n  if (typeof id === 'string' && id.includes('error')) {\n    return false;\n  }\n  return true;\n};\n\nconst noAuth = (el) => (\n  <div className=\"research-plan-no-auth\">\n    <h4>\n      {el.id.split(':')[2]}\n      &nbsp;\n      <i className=\"fa fa-eye-slash\" aria-hidden=\"true\" />\n    </h4>\n  </div>\n);\n\nfunction elementError() {\n  return (\n    <div style={{ color: 'red', textAlign: 'center' }}>\n      <i className=\"fa fa-exclamation-triangle\" aria-hidden=\"true\" style={{ marginRight: '5px' }} />\n      <span style={{ fontWeight: 'bold' }}>Internal Server Error: Reaction can not be found!</span>\n    </div>\n  );\n}\n\nclass ResearchPlanDetailsFieldReaction extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      idle: true,\n      reaction: {\n        id: null\n      },\n      error: false\n    };\n  }\n\n  componentDidMount() {\n    const { field } = this.props;\n    if (field && field.value && field.value.reaction_id && hasAuth(field.value.reaction_id)) {\n      this.fetch();\n    }\n  }\n\n  componentDidUpdate() {\n    const { field } = this.props;\n    const { idle, reaction } = this.state;\n    if (idle && field.value.reaction_id !== reaction.id && hasAuth(reaction.id)) {\n      this.setState({ idle: false }, this.fetch);\n    }\n  }\n\n  fetch() {\n    const { field } = this.props;\n    ReactionsFetcher.fetchById(field.value.reaction_id)\n      .then((reaction) => {\n        if (reaction && reaction.id) {\n          this.setState({ idle: true, reaction });\n        } else {\n          console.error('Fetched reaction does not contain an id or is in incorrect format:', reaction);\n          this.setState({ idle: true, error: true });\n        }\n      })\n      .catch((error) => {\n        console.error('Error fetching reaction:', error);\n        this.setState({ idle: true, error: true });\n      });\n  }\n\n  showReaction() {\n    const { reaction } = this.state;\n    UrlSilentNavigation(reaction);\n    ElementActions.fetchReactionById(reaction.id);\n  }\n\n  renderReaction(reaction) {\n    if (!hasAuth(reaction.id)) {\n      return noAuth(reaction);\n    }\n    const { edit } = this.props;\n    const link = (\n      <button\n        type=\"button\"\n        style={{\n          cursor: 'pointer',\n          color: '#003366',\n          backgroundColor: 'transparent',\n          border: '1px solid #003366',\n          borderRadius: '4px',\n          margin: '5px',\n          outline: 'none',\n        }}\n        onClick={() => this.showReaction()}\n      >\n        {reaction.title()}\n      </button>\n    );\n\n    let image;\n    if (reaction.svgPath) {\n      image = <img src={reaction.svgPath} alt={reaction.title()} />;\n    }\n\n    const reactionStyle = edit ? {} : {\n      border: '1px solid #cccccc',\n      padding: '5px',\n    };\n\n    return (\n      <div className=\"research-plan-field-reaction\" style={reactionStyle}>\n        {link}\n        <div className=\"image-container\">\n          {image}\n        </div>\n      </div>\n    );\n  }\n\n  renderEdit() {\n    const { connectDropTarget, isOver, canDrop } = this.props;\n    const { reaction, error } = this.state;\n    if (!hasAuth(reaction.id)) {\n      return noAuth(reaction);\n    }\n    let className = 'drop-target';\n    if (isOver) className += ' is-over';\n    if (canDrop) className += ' can-drop';\n    let content;\n    if (error) {\n      content = elementError();\n    } else if (reaction.id) {\n      content = this.renderReaction(reaction);\n    } else {\n      content = 'Drop reaction here.';\n    }\n    return connectDropTarget(\n      <div className={className}>\n        {content}\n      </div>\n    );\n  }\n\n  renderStatic() {\n    const { reaction, error } = this.state;\n    let content;\n    if (error) {\n      content = elementError();\n    } else if (reaction.id) {\n      content = this.renderReaction(reaction);\n    } else {\n      content = null;\n    }\n    return content;\n  }\n\n  render() {\n    if (this.props.edit) {\n      return this.renderEdit();\n    }\n    return this.renderStatic();\n  }\n}\n\nResearchPlanDetailsFieldReaction.propTypes = {\n  field: PropTypes.object,\n  index: PropTypes.number,\n  disabled: PropTypes.bool,\n  onChange: PropTypes.func,\n  edit: PropTypes.bool,\n};\n\nexport default DropTarget(DragDropItemTypes.REACTION, spec, collect)(ResearchPlanDetailsFieldReaction);\n","/* eslint-disable react/prefer-stateless-function */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ButtonGroup, Row, Col, ControlLabel, Tooltip, OverlayTrigger, DropdownButton, MenuItem } from 'react-bootstrap';\nimport ResearchPlanDetailsDragSource from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsDragSource';\nimport ResearchPlanDetailsDropTarget from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsDropTarget';\nimport ResearchPlanDetailsFieldRichText from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldRichText';\nimport ResearchPlanDetailsFieldKetcher from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldKetcher';\nimport ResearchPlanDetailsFieldImage from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldImage';\nimport ResearchPlanDetailsFieldTable from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldTable';\nimport ResearchPlanDetailsFieldSample from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldSample';\nimport ResearchPlanDetailsFieldReaction from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsFieldReaction';\n\nexport default class ResearchPlanDetailsField extends Component {\n  render() {\n    const {\n      field, index, disabled, onChange, onDrop, onDelete, onExport, update, edit, tableIndex,\n      onCopyToMetadata, isNew, copyableFields\n    } = this.props;\n    let label;\n    let component;\n    const metadataTooltipText = 'Copy field content to Metadata';\n    switch (field.type) {\n      case 'richtext':\n        label = field?.title;\n        component =\n          (<ResearchPlanDetailsFieldRichText\n            key={field.id}\n            field={field}\n            index={index}\n            disabled={disabled}\n            onChange={onChange.bind(this)}\n            edit={edit}\n          />);\n        break;\n      case 'ketcher':\n        label = 'Ketcher schema';\n        component =\n          (<ResearchPlanDetailsFieldKetcher\n            key={field.id}\n            field={field}\n            index={index}\n            disabled={disabled}\n            onChange={onChange.bind(this)}\n            edit={edit}\n          />);\n        break;\n      case 'image':\n        label = 'Image';\n        component =\n          (<ResearchPlanDetailsFieldImage\n            attachments={this.props.attachments}\n            key={field.id}\n            field={field}\n            index={index}\n            disabled={disabled}\n            onChange={onChange.bind(this)}\n            researchPlan={this.props.researchPlan}\n            edit={edit}/>);\n        break;\n      case 'table':\n        field.value.columns.forEach((item) => {\n          item.cellEditor = 'agTextCellEditor';\n          return item;\n        });\n        label = 'Table';\n        component =\n          (<ResearchPlanDetailsFieldTable\n            key={field.id}\n            field={field}\n            index={index}\n            disabled={disabled}\n            onChange={onChange.bind(this)}\n            onExport={onExport}\n            update={update}\n            edit={edit}\n            tableIndex={tableIndex}\n          />);\n        break;\n      case 'sample':\n        label = 'Sample';\n        component =\n          (<ResearchPlanDetailsFieldSample\n            key={field.id}\n            field={field}\n            index={index}\n            disabled={disabled}\n            onChange={onChange.bind(this)}\n            edit={edit}\n          />);\n        break;\n      case 'reaction':\n        label = 'Reaction';\n        component =\n          (<ResearchPlanDetailsFieldReaction\n            key={field.id}\n            field={field}\n            index={index}\n            disabled={disabled}\n            onChange={onChange.bind(this)}\n            edit={edit}\n          />);\n        break;\n      default:\n        label = '';\n        component = <div />;\n    }\n\n    let dropTarget;\n    let fieldHeader;\n    let copyToMetadataButton = '';\n    let className = 'research-plan-field';\n    if (edit) {\n      dropTarget = (\n        <Col md={12}>\n          <ResearchPlanDetailsDropTarget index={index} />\n        </Col>\n      );\n\n      if (field.type === 'richtext') {\n        copyToMetadataButton = (\n          <OverlayTrigger\n            placement=\"top\"\n            delayShow={500}\n            overlay={<Tooltip id=\"metadataTooltip\">{metadataTooltipText}</Tooltip>}\n          >\n            <ButtonGroup className=\"pull-right\">\n              <DropdownButton\n                id=\"copyMetadataButton\"\n                title=\"\"\n                className=\"fa fa-laptop\"\n                bsStyle=\"info\"\n                bsSize=\"xsmall\"\n                pullRight\n                disabled={isNew}\n              >\n                <li role=\"presentation\" className=\"\">Copy to Metadata field:</li>\n                <li role=\"separator\" className=\"divider\" />\n                {\n                  copyableFields.map(element => (\n                    <MenuItem\n                      key={element.fieldName}\n                      onClick={() => onCopyToMetadata(field.id, element.fieldName)}\n                    >\n                      {element.title}\n                    </MenuItem>\n                  ))\n                }\n              </DropdownButton>\n            </ButtonGroup>\n          </OverlayTrigger>\n        );\n      }\n\n      fieldHeader = (\n        <div className=\"research-plan-field-header\">\n          {/* TODO: make label editable */}\n          <ControlLabel>{label}</ControlLabel>\n          <Button className=\"pull-right\" bsStyle=\"danger\" bsSize=\"xsmall\" onClick={() => onDelete(field.id,this.props.attachments )} data-cy=\"researchplan-item-delete\">\n            <i className=\"fa fa-times\" />\n          </Button>\n          {copyToMetadataButton}\n          <ResearchPlanDetailsDragSource index={index} onDrop={onDrop.bind(this)} />\n        </div>\n      );\n    } else {\n      className += ' static';\n    }\n\n    return (\n      <Row>\n        {dropTarget}\n        <Col md={12}>\n          <div className={className}>\n            {fieldHeader}\n            {component}\n          </div>\n        </Col>\n      </Row>\n    );\n  }\n}\n\nResearchPlanDetailsField.propTypes = {\n  field: PropTypes.object,\n  index: PropTypes.number,\n  disabled: PropTypes.bool,\n  onChange: PropTypes.func,\n  onDrop: PropTypes.func,\n  onDelete: PropTypes.func,\n  onExport: PropTypes.func,\n  onCopyToMetadata: PropTypes.func,\n  isNew: PropTypes.bool,\n  copyableFields: PropTypes.arrayOf(PropTypes.object),\n  update: PropTypes.bool,\n  edit: PropTypes.bool,\n  attachments: PropTypes.array\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { ControlLabel, Row, Col } from 'react-bootstrap';\nimport ResearchPlanDetailsAddField from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsAddField';\nimport ResearchPlanDetailsDropTarget from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsDropTarget';\nimport Field from 'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsField';\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport default class ResearchPlanDetailsBody extends Component {\n  render() {\n    const {\n      body, disabled, onChange, onDrop, onAdd, onDelete, onExport, update, edit, isNew,\n      copyableFields, onCopyToMetadata\n    } = this.props;\n\n    let tableIndex = 0;\n    const fields = body.map((field, index) => {\n      let item;\n      if (field.type === 'image') {\n        item = (<Field\n          attachments={this.props.attachments}\n          key={field.id}\n          field={field}\n          index={index}\n          disabled={disabled}\n          onChange={onChange.bind(this)}\n          onDrop={onDrop.bind(this)}\n          onDelete={onDelete.bind(this)}\n          onExport={onExport.bind(this)}\n          onCopyToMetadata={onCopyToMetadata.bind(this)}\n          update={update}\n          edit={edit}\n          tableIndex={tableIndex}\n          isNew={isNew}\n          copyableFields={copyableFields}\n          researchPlan={this.props.researchPlan}\n        />);\n      } else {\n        item = (<Field\n          key={field.id}\n          field={field}\n          index={index}\n          disabled={disabled}\n          onChange={onChange.bind(this)}\n          onDrop={onDrop.bind(this)}\n          onDelete={onDelete.bind(this)}\n          onExport={onExport.bind(this)}\n          onCopyToMetadata={onCopyToMetadata.bind(this)}\n          update={update}\n          edit={edit}\n          tableIndex={tableIndex}\n          isNew={isNew}\n          copyableFields={copyableFields}\n        />);\n      }\n      if (field.type === 'table') tableIndex++;\n\n\n      return item;\n    });\n\n    let className = 'research-plan-body';\n    let bodyFooter;\n    if (edit) {\n      bodyFooter = (\n        <Row>\n          <Col md={12}>\n            <ResearchPlanDetailsDropTarget index={fields.length} />\n            <div>\n              <ControlLabel>Add field</ControlLabel>\n              <div>\n                <ResearchPlanDetailsAddField onAdd={onAdd} />\n              </div>\n            </div>\n          </Col>\n        </Row>\n      );\n    } else {\n      className += ' static';\n    }\n\n    return (\n      <div className={className}>\n        {fields}\n        {bodyFooter}\n      </div>\n    );\n  }\n}\n\nResearchPlanDetailsBody.propTypes = {\n  body: PropTypes.array,\n  disabled: PropTypes.bool,\n  onChange: PropTypes.func,\n  onDrop: PropTypes.func,\n  onDelete: PropTypes.func,\n  onExport: PropTypes.func,\n  onCopyToMetadata: PropTypes.func,\n  update: PropTypes.bool,\n  edit: PropTypes.bool,\n  isNew: PropTypes.bool,\n  copyableFields: PropTypes.arrayOf(PropTypes.object),\n  attachments: PropTypes.array\n};\n","/* eslint-disable react/prefer-stateless-function */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  ControlLabel, FormControl, FormGroup, Row, Col, OverlayTrigger, Tooltip, Button\n} from 'react-bootstrap';\n\nexport default class ResearchPlanDetailsName extends Component {\n  renderCopyToMetadataButton() {\n    const { isNew, onCopyToMetadata } = this.props;\n    const metadataTooltipText = 'Copy Name to Metadata';\n    return (\n      <OverlayTrigger\n        placement=\"top\"\n        delayShow={500}\n        overlay={<Tooltip id=\"metadataTooltip\">{metadataTooltipText}</Tooltip>}\n      >\n        <Button\n          id=\"copyMetadataButton\"\n          title=\"\"\n          className=\"fa fa-laptop pull-right\"\n          bsStyle=\"info\"\n          bsSize=\"xsmall\"\n          style={{\n            width: '20px',\n            height: '20px',\n            display: 'flex',\n            justifyContent: 'center',\n            alignItems: 'center'\n          }}\n          onClick={() => onCopyToMetadata(null, 'name')}\n          disabled={isNew}\n        />\n\n      </OverlayTrigger>\n    );\n  }\n\n  render() {\n    const {\n      value, disabled, onChange, edit\n    } = this.props;\n    if (edit) {\n      return (\n        <div className=\"research-plan-name\">\n          <Row>\n            <Col lg={8}>\n              <FormGroup>\n                <ControlLabel>Name</ControlLabel>\n                { this.renderCopyToMetadataButton() }\n                <FormControl\n                  type=\"text\"\n                  value={value || ''}\n                  onChange={(event) => onChange(event.target.value)}\n                  disabled={disabled}\n                  name=\"research_plan_name\"\n                />\n              </FormGroup>\n            </Col>\n          </Row>\n        </div>\n      );\n    }\n    return (\n      <div className=\"research-plan-name static\">\n        <h1>{value}</h1>\n      </div>\n    );\n  }\n}\n\nResearchPlanDetailsName.propTypes = {\n  value: PropTypes.string,\n  disabled: PropTypes.bool,\n  isNew: PropTypes.bool,\n  onChange: PropTypes.func,\n  edit: PropTypes.bool,\n  onCopyToMetadata: PropTypes.func\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { PanelGroup, Panel, Button } from 'react-bootstrap';\nimport Container from 'src/models/Container';\nimport ContainerComponent from 'src/components/container/ContainerComponent';\nimport QuillViewer from 'src/components/QuillViewer';\nimport ImageModal from 'src/components/common/ImageModal';\nimport { instrumentText } from 'src/utilities/ElementUtils';\nimport { previewContainerImage } from 'src/utilities/imageHelper';\nimport { JcampIds, BuildSpcInfos, BuildSpcInfosForNMRDisplayer, isNMRKind } from 'src/utilities/SpectraHelper';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport SpectraActions from 'src/stores/alt/actions/SpectraActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ViewSpectra from 'src/apps/mydb/elements/details/ViewSpectra';\nimport NMRiumDisplayer from 'src/components/nmriumWrapper/NMRiumDisplayer';\nimport TextTemplateActions from 'src/stores/alt/actions/TextTemplateActions';\nimport SpectraEditorButton from 'src/components/common/SpectraEditorButton';\n\nexport default class ResearchPlanDetailsContainers extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      activeContainer: 0\n    };\n\n    this.handleChange = this.handleChange.bind(this);\n    this.handleSpChange = this.handleSpChange.bind(this);\n    this.handleAdd = this.handleAdd.bind(this);\n    this.handleRemove = this.handleRemove.bind(this);\n    this.handleUndo = this.handleUndo.bind(this);\n    this.handleAccordionOpen = this.handleAccordionOpen.bind(this);\n  }\n\n  componentDidMount() {\n    TextTemplateActions.fetchTextTemplates('researchPlan');\n  }\n\n  handleChange() {\n    const { researchPlan } = this.props;\n    this.props.parent.handleResearchPlanChange(researchPlan);\n  }\n\n  handleSpChange(researchPlan, cb) {\n    this.props.parent.handleResearchPlanChange(researchPlan);\n    cb();\n  }\n\n  handleAccordionOpen(key) {\n    this.setState({ activeContainer: key });\n  }\n\n  handleRemove(container) {\n    const { researchPlan } = this.props;\n    container.is_deleted = true;\n    this.props.parent.handleResearchPlanChange(researchPlan);\n  }\n\n  handleUndo(container) {\n    const { researchPlan } = this.props;\n    container.is_deleted = false;\n    this.props.parent.handleResearchPlanChange(researchPlan);\n  }\n\n  handleAdd() {\n    const { researchPlan } = this.props;\n    const container = Container.buildEmpty();\n    container.container_type = 'analysis';\n    container.extended_metadata.content = { ops: [{ insert: '' }] };\n\n    if (researchPlan.container.children.length === 0) {\n      const analyses = Container.buildEmpty();\n      analyses.container_type = 'analyses';\n      researchPlan.container.children.push(analyses);\n    }\n\n    researchPlan.container.children.filter(element => (\n      ~element.container_type.indexOf('analyses')\n    ))[0].children.push(container);\n\n    const newKey = researchPlan.container.children.filter(element => (\n      ~element.container_type.indexOf('analyses')\n    ))[0].children.length - 1;\n\n    this.handleAccordionOpen(newKey);\n    this.props.parent.handleResearchPlanChange(researchPlan);\n  }\n\n  headerBtnGroup(container, readOnly) {\n    const { researchPlan } = this.props;\n    const jcampIds = JcampIds(container);\n    const hasJcamp = jcampIds.orig.length > 0;\n    const confirmRegenerate = (e) => {\n      e.stopPropagation();\n      if (confirm('Regenerate spectra?')) {\n        LoadingActions.start();\n        SpectraActions.Regenerate(jcampIds, this.handleChange);\n      }\n    };\n    const spcInfos = BuildSpcInfos(researchPlan, container);\n    const { hasChemSpectra, hasNmriumWrapper } = UIStore.getState();\n    const toggleSpectraModal = (e) => {\n      e.stopPropagation();\n      SpectraActions.ToggleModal();\n      SpectraActions.LoadSpectra.defer(spcInfos);\n    };\n\n    //process open NMRium\n    const toggleNMRDisplayerModal = (e) => {\n      const spcInfosForNMRDisplayer = BuildSpcInfosForNMRDisplayer(researchPlan, container);\n      e.stopPropagation();\n      SpectraActions.ToggleModalNMRDisplayer();\n      SpectraActions.LoadSpectraForNMRDisplayer.defer(spcInfosForNMRDisplayer); // going to fetch files base on spcInfos\n    }\n\n    const { chmos } = UserStore.getState();\n    const hasNMRium = isNMRKind(container, chmos) && hasNmriumWrapper;\n\n    return (\n      <div className=\"upper-btn\">\n        <Button\n          bsSize=\"xsmall\"\n          bsStyle=\"danger\"\n          className=\"button-right\"\n          disabled={readOnly}\n          onClick={() => this.handleRemove(container)}\n        >\n          <i className=\"fa fa-trash\" />\n        </Button>\n        <SpectraEditorButton\n          element={researchPlan}\n          hasJcamp={hasJcamp}\n          spcInfos={spcInfos}\n          hasChemSpectra={hasChemSpectra}\n          toggleSpectraModal={toggleSpectraModal}\n          confirmRegenerate={confirmRegenerate}\n          toggleNMRDisplayerModal={toggleNMRDisplayerModal}\n          hasNMRium={hasNMRium}\n        />\n      </div>\n    );\n  }\n\n  addButton() {\n    const { readOnly } = this.props;\n    if (!readOnly) {\n      return (\n        <Button\n          className=\"button-right\"\n          bsSize=\"xsmall\"\n          bsStyle=\"success\"\n          onClick={this.handleAdd}\n        >\n          Add analysis\n        </Button>\n      );\n    }\n\n    return (<span />);\n  }\n\n  render() {\n    const { researchPlan, readOnly } = this.props;\n    const { activeContainer } = this.state;\n\n    const containerHeader = (container) => {\n      let kind = container.extended_metadata.kind || '';\n      kind = (kind.split('|')[1] || kind).trim();\n      const insText = instrumentText(container);\n      const previewImg = previewContainerImage(container);\n      const status = container.extended_metadata.status || '';\n      const content = container.extended_metadata.content || { ops: [{ insert: '' }] };\n      const contentOneLine = {\n        ops: content.ops.map((x) => {\n          const c = Object.assign({}, x);\n          if (c.insert) c.insert = c.insert.replace(/\\n/g, ' ');\n          return c;\n        }),\n      };\n      let hasPop = true;\n      let fetchNeeded = false;\n      let fetchId = 0;\n      if (previewImg.startsWith('data:image')) {\n        fetchNeeded = true;\n        fetchId = container.preview_img.id;\n      } else {\n        hasPop = false;\n      }\n\n      return (\n        <div className=\"analysis-header order\" style={{ width: '100%' }}>\n          <div className=\"preview\">\n            <ImageModal\n              hasPop={hasPop}\n              previewObject={{\n                src: previewImg\n              }}\n              popObject={{\n                title: container.name,\n                src: previewImg,\n                fetchNeeded,\n                fetchId\n              }}\n            />\n          </div>\n          <div className=\"abstract\">\n            {\n              this.headerBtnGroup(container, readOnly)\n            }\n            <div className=\"lower-text\">\n              <div className=\"main-title\">{container.name}</div>\n              <div className=\"sub-title\">Type: {kind}</div>\n              <div className=\"sub-title\">Status: {status} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {insText}</div>\n\n              <div className=\"desc sub-title\">\n                <span style={{ float: 'left', marginRight: '5px' }}>\n                  Content:\n                </span>\n                <QuillViewer value={contentOneLine} preview />\n              </div>\n\n            </div>\n          </div>\n        </div>\n      );\n    };\n\n    const containerHeaderDeleted = (container) => {\n      const kind = container.extended_metadata.kind && container.extended_metadata.kind !== '';\n      const titleKind = kind ? (` - Type: ${(container.extended_metadata.kind.split('|')[1] || container.extended_metadata.kind).trim()}`) : '';\n\n      const status = container.extended_metadata.status && container.extended_metadata.status !== '';\n      const titleStatus = status ? (` - Status: ${container.extended_metadata.status}`) : '';\n\n      return (\n        <div style={{ width: '100%' }}>\n          <strike>\n            {container.name}\n            {titleKind}\n            {titleStatus}\n          </strike>\n          <Button\n            className=\"pull-right\"\n            bsSize=\"xsmall\"\n            bsStyle=\"danger\"\n            onClick={() => this.handleUndo(container)}\n          >\n            <i className=\"fa fa-undo\" />\n          </Button>\n        </div>\n      );\n    };\n\n    if (researchPlan.container != null && researchPlan.container.children) {\n      const analysesContainer = researchPlan.container.children.filter(element => (\n        ~element.container_type.indexOf('analyses')\n      ));\n\n      if (analysesContainer.length === 1 && analysesContainer[0].children.length > 0) {\n        return (\n          <div>\n            <div style={{ marginBottom: '10px' }}>\n              &nbsp;{this.addButton()}\n            </div>\n            <PanelGroup id=\"research_plan-analyses-panel\" defaultActiveKey={0} activeKey={activeContainer} onSelect={this.handleAccordionOpen} accordion>\n              {analysesContainer[0].children.map((container, key) => {\n                if (container.is_deleted) {\n                  return (\n                    <Panel\n                      eventKey={key}\n                      key={`research_plan_container_deleted_${container.id}`}\n                    >\n                      <Panel.Heading>{containerHeaderDeleted(container)}</Panel.Heading>\n                    </Panel>\n                  );\n                }\n\n                return (\n                  <Panel\n                    eventKey={key}\n                    key={`research_plan_container_${container.id}`}\n                  >\n                    <Panel.Heading>\n                      <Panel.Title toggle>\n                        {containerHeader(container)}\n                      </Panel.Title>\n                    </Panel.Heading>\n                    <Panel.Body collapsible>\n                      <ContainerComponent\n                        templateType=\"researchPlan\"\n                        readOnly={readOnly}\n                        disabled={readOnly}\n                        container={container}\n                        onChange={this.handleChange}\n                      />\n                      <ViewSpectra\n                        sample={this.props.researchPlan}\n                        handleSampleChanged={this.handleSpChange}\n                        handleSubmit={this.props.handleSubmit}\n                      />\n                      <NMRiumDisplayer\n                        sample={this.props.researchPlan}\n                        handleSampleChanged={this.handleSpChange}\n                        handleSubmit={this.props.handleSubmit}\n                      />\n                    </Panel.Body>\n                  </Panel>\n                );\n              })}\n            </PanelGroup>\n          </div>\n        );\n      }\n\n      return (\n        <div\n          style={{ marginBottom: '10px' }}\n          className=\"noAnalyses-warning\"\n        >\n          There are currently no Analyses.\n          {this.addButton()}\n        </div>\n      );\n    }\n\n    return (\n      <div className=\"noAnalyses-warning\">\n        There are currently no Analyses.\n      </div>\n    );\n  }\n}\n\nResearchPlanDetailsContainers.propTypes = {\n  researchPlan: PropTypes.object.isRequired,\n  readOnly: PropTypes.bool.isRequired,\n  parent: PropTypes.object.isRequired,\n  handleSubmit: PropTypes.func\n};\n","/* eslint-disable react/destructuring-assignment */\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Panel, ListGroup, ListGroupItem, ButtonToolbar, Button,\n  Tooltip, OverlayTrigger, Tabs, Tab, Dropdown, MenuItem, ButtonGroup\n} from 'react-bootstrap';\nimport { unionBy, findIndex } from 'lodash';\nimport Immutable from 'immutable';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport ResearchPlansFetcher from 'src/fetchers/ResearchPlansFetcher';\nimport ResearchPlansLiteratures from 'src/apps/mydb/elements/details/literature/DetailsTabLiteratures';\nimport ResearchPlanWellplates from 'src/apps/mydb/elements/details/researchPlans/wellplatesTab/ResearchPlanWellplates';\nimport ResearchPlanMetadata from 'src/apps/mydb/elements/details/researchPlans/ResearchPlanMetadata';\nimport Attachment from 'src/models/Attachment';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ConfirmClose from 'src/components/common/ConfirmClose';\nimport ResearchPlan from 'src/models/ResearchPlan';\nimport ResearchPlanDetailsAttachments from\n  'src/apps/mydb/elements/details/researchPlans/attachmentsTab/ResearchPlanDetailsAttachments';\nimport ResearchPlanDetailsBody from\n  'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsBody';\nimport ResearchPlanDetailsName from\n  'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsName';\nimport ResearchPlanDetailsContainers from\n  'src/apps/mydb/elements/details/researchPlans/analysesTab/ResearchPlanDetailsContainers';\nimport ElementDetailSortTab from 'src/apps/mydb/elements/details/ElementDetailSortTab';\nimport { addSegmentTabs } from 'src/components/generic/SegmentDetails';\nimport PrivateNoteElement from 'src/apps/mydb/elements/details/PrivateNoteElement';\nimport OpenCalendarButton from 'src/components/calendar/OpenCalendarButton';\nimport HeaderCommentSection from 'src/components/comments/HeaderCommentSection';\nimport CommentSection from 'src/components/comments/CommentSection';\nimport CommentActions from 'src/stores/alt/actions/CommentActions';\nimport CommentModal from 'src/components/common/CommentModal';\nimport CopyElementModal from 'src/components/common/CopyElementModal';\nimport { formatTimeStampsOfElement } from 'src/utilities/timezoneHelper';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport { commentActivation } from 'src/utilities/CommentHelper';\n\nexport default class ResearchPlanDetails extends Component {\n  static contextType = StoreContext;\n  constructor(props) {\n    super(props);\n    const { researchPlan } = props;\n    this.state = {\n      researchPlan,\n      update: false,\n      visible: Immutable.List(),\n      currentUser: (UserStore.getState() && UserStore.getState().currentUser) || {},\n    };\n    this.handleSwitchMode = this.handleSwitchMode.bind(this);\n    this.handleResearchPlanChange = this.handleResearchPlanChange.bind(this);\n    this.toggleFullScreen = this.toggleFullScreen.bind(this);\n    this.handleNameChange = this.handleNameChange.bind(this);\n    this.handleBodyChange = this.handleBodyChange.bind(this);\n    this.handleBodyAdd = this.handleBodyAdd.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.onTabPositionChanged = this.onTabPositionChanged.bind(this);\n    this.handleSegmentsChange = this.handleSegmentsChange.bind(this);\n  }\n\n  componentDidMount() {\n    const { researchPlan } = this.props;\n    const { currentUser } = this.state;\n\n    if (MatrixCheck(currentUser.matrix, commentActivation) && !researchPlan.isNew) {\n      CommentActions.fetchComments(researchPlan);\n    }\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const { researchPlan } = nextProps;\n    this.setState({ researchPlan });\n  }\n\n  handleResearchPlanChange(el) {\n    const researchPlan = el;\n    researchPlan.changed = true;\n    this.setState({ researchPlan });\n  }\n\n  handleSegmentsChange(se) {\n    const { researchPlan } = this.state;\n    const { segments } = researchPlan;\n    const idx = findIndex(segments, (o) => o.segment_klass_id === se.segment_klass_id);\n    if (idx >= 0) { segments.splice(idx, 1, se); } else { segments.push(se); }\n    researchPlan.segments = segments;\n    researchPlan.changed = true;\n    this.setState({ researchPlan });\n  }\n\n  handleSwitchMode(mode) {\n    const { researchPlan } = this.state;\n    researchPlan.mode = mode;\n    this.setState({ researchPlan });\n  }\n\n  // handle functions\n\n  handleSubmit() {\n    const { researchPlan } = this.state;\n    LoadingActions.start();\n    this.context.attachmentNotificationStore.clearMessages();\n\n    if (researchPlan.isNew) {\n      ElementActions.createResearchPlan(researchPlan);\n    } else {\n      ElementActions.updateResearchPlan(researchPlan);\n    }\n\n    if (researchPlan.is_new) {\n      const force = true;\n      DetailActions.close(researchPlan, force);\n    }\n  }\n\n  handleSelect(eventKey) {\n    UIActions.selectTab({ tabKey: eventKey, type: 'research_plan' });\n    this.setState({\n      activeTab: eventKey\n    });\n  }\n\n  // handle name actions\n\n  handleNameChange(value) {\n    const { researchPlan } = this.state;\n    researchPlan.changed = true;\n    researchPlan.name = value;\n    this.setState({ researchPlan });\n  }\n\n  // handle body actions\n\n  handleBodyChange(value, idOfFieldToReplace, attachments) {\n    const { researchPlan } = this.state;\n    researchPlan.upsertAttachments(attachments);\n\n    const index = researchPlan.body.findIndex((field) => field.id === idOfFieldToReplace);\n    if (index === -1) { return; }\n\n    researchPlan.body[index].value = value;\n    researchPlan.changed = true;\n    this.setState({ researchPlan });\n  }\n\n  handleBodyDrop(source, target) {\n    const { researchPlan } = this.state;\n    researchPlan.body.splice(target, 0, researchPlan.body.splice(source, 1)[0]);\n    researchPlan.changed = true;\n    this.setState({ researchPlan });\n  }\n\n  handleBodyAdd(type) {\n    const { researchPlan } = this.state;\n    researchPlan.addBodyField(type);\n    researchPlan.changed = true;\n    this.setState({ researchPlan });\n  }\n\n  handleBodyDelete(id) {\n    const { researchPlan } = this.state;\n    researchPlan.removeFieldFromBody(id);\n    this.setState({ researchPlan });\n  }\n\n  // handle attachment actions\n  handleAttachmentDrop(files) {\n    this.setState((prevState) => {\n      const newAttachments = files.map((file) => Attachment.fromFile(file));\n      const updatedAttachments = prevState.researchPlan.attachments.concat(newAttachments);\n      const updatedResearchPlan = new ResearchPlan({\n        ...prevState.researchPlan,\n        attachments: updatedAttachments,\n        changed: true\n      });\n\n      return { researchPlan: updatedResearchPlan };\n    });\n  }\n\n  handleAttachmentDelete(attachment) {\n    const { researchPlan } = this.state;\n    const index = researchPlan.attachments.indexOf(attachment);\n    researchPlan.changed = true;\n    researchPlan.attachments[index].is_deleted = true;\n    this.setState({ researchPlan });\n  }\n\n  handleAttachmentUndoDelete(attachment) {\n    const { researchPlan } = this.state;\n    const index = researchPlan.attachments.indexOf(attachment);\n    researchPlan.attachments[index].is_deleted = false;\n    this.setState({ researchPlan });\n  }\n\n  handleAttachmentEdit(attachment) {\n    const { researchPlan } = this.state;\n    researchPlan.changed = true;\n    // update only this attachment\n    researchPlan.attachments.map((currentAttachment) => {\n      if (currentAttachment.id === attachment.id) return attachment;\n    });\n    this.setState({ researchPlan });\n    this.forceUpdate();\n  }\n\n  handleExport(exportFormat) {\n    const { researchPlan } = this.state;\n    ResearchPlansFetcher.export(researchPlan, exportFormat);\n  }\n\n  handleExportField(field) {\n    const { researchPlan } = this.props;\n    ResearchPlansFetcher.exportTable(researchPlan, field);\n  }\n\n  handleCopyToMetadata(id, fieldName) {\n    const { researchPlan } = this.state;\n    const researchPlanMetadata = researchPlan.research_plan_metadata;\n    const args = { research_plan_id: researchPlanMetadata.research_plan_id };\n    const index = researchPlan.body.findIndex((field) => field.id === id);\n    const value = researchPlan.body[index]?.value?.ops[0]?.insert?.trim() || '';\n    if (fieldName === 'name') {\n      researchPlanMetadata.title = researchPlan.name;\n      args.title = researchPlan.name.trim();\n    } else if (fieldName === 'subject') {\n      researchPlanMetadata.subject = value;\n      args.subject = value;\n    } else {\n      const type = researchPlan.body[index]?.title?.trim() || '';\n      const newItem = this.newItemByType(fieldName, value, type);\n\n      const currentCollection = researchPlanMetadata[fieldName]\n        ? researchPlanMetadata[fieldName] : [];\n      const newCollection = currentCollection.concat(newItem);\n      researchPlanMetadata[fieldName] = newCollection;\n      args[`${fieldName}`] = researchPlanMetadata[fieldName];\n    }\n\n    ResearchPlansFetcher.postResearchPlanMetadata(args).then((result) => {\n      if (result.error) {\n        alert(result.error);\n      }\n    });\n  }\n\n  handleAttachmentImportComplete() {\n    this.setState({ activeTab: 0 });\n  }\n\n  onTabPositionChanged(visible) {\n    this.setState({ visible });\n  }\n\n  toggleFullScreen() {\n    this.props.toggleFullScreen();\n\n    // toogle update prop to notify react data grid for view change\n    this.setState({ update: !this.state.update });\n  }\n\n  dropWellplate(wellplate) {\n    const { researchPlan } = this.state;\n    researchPlan.changed = true;\n    researchPlan.wellplates = unionBy(researchPlan.wellplates, [wellplate], 'id');\n    this.setState({ researchPlan });\n  }\n\n  deleteWellplate(wellplate) {\n    const { researchPlan } = this.state;\n    researchPlan.changed = true;\n    const wellplateIndex = researchPlan.wellplates.indexOf(wellplate);\n    researchPlan.wellplates.splice(wellplateIndex, 1);\n    this.setState({ researchPlan });\n  }\n\n  importWellplate(wellplateId) {\n    const { researchPlan } = this.state;\n    researchPlan.changed = true;\n\n    LoadingActions.start();\n    ElementActions.importWellplateIntoResearchPlan(\n      researchPlan.id,\n      wellplateId,\n      () => {\n        this.setState({ activeTab: 0 });\n        LoadingActions.stop();\n      }\n    );\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  newItemByType(fieldName, value, type) {\n    switch (fieldName) {\n      case 'description':\n        return {\n          description: value,\n          descriptionType: type\n        };\n      case 'alternate_identifier':\n        return {\n          alternateIdentifier: value,\n          alternateIdentifierType: type\n        };\n      case 'related_identifier':\n        return {\n          relatedIdentifier: value,\n          relatedIdentifierType: type\n        };\n      default:\n        return {};\n    }\n  }\n\n  // render functions\n\n  renderExportButton(disabled) {\n    return (\n      <Dropdown\n        id=\"research-plan-export-dropdown\"\n        className=\"research-plan-export-dropdown dropdown-right pull-right\"\n        disabled={disabled}\n      >\n        <Dropdown.Toggle>\n          Export\n        </Dropdown.Toggle>\n        <Dropdown.Menu>\n          <MenuItem onSelect={() => this.handleExport('docx')}>\n            as .docx\n          </MenuItem>\n          <MenuItem onSelect={() => this.handleExport('odt')}>\n            as .odt\n          </MenuItem>\n          <MenuItem onSelect={() => this.handleExport('html')}>\n            as HTML\n          </MenuItem>\n          <MenuItem onSelect={() => this.handleExport('markdown')}>\n            as Markdown\n          </MenuItem>\n          <MenuItem onSelect={() => this.handleExport('latex')}>\n            as LaTeX\n          </MenuItem>\n        </Dropdown.Menu>\n      </Dropdown>\n    );\n  }\n\n  renderResearchPlanMain(researchPlan, update) { /* eslint-disable react/jsx-no-bind */\n    const {\n      name, body, changed, attachments\n    } = researchPlan;\n    const edit = researchPlan.mode === 'edit';\n\n    const editTooltip = (<Tooltip id=\"edit-tooltip\">Click to switch to edit mode</Tooltip>);\n    const viewTooltip = (<Tooltip id=\"view-tooltip\">Click to switch to view mode</Tooltip>);\n\n    const EditButton = (\n      <Button\n        bsStyle={researchPlan.mode === 'edit' ? 'warning' : 'default'}\n        style={{\n          pointerEvents: 'none',\n          backgroundColor: researchPlan.mode !== 'edit' ? '#E8E8E8' : undefined,\n        }}\n      >\n        <i className=\"fa fa-pencil\" />\n      </Button>\n    );\n\n    const ViewButton = (\n      <Button\n        bsStyle={researchPlan.mode === 'view' ? 'info' : 'default'}\n        style={{\n          pointerEvents: 'none',\n          backgroundColor: researchPlan.mode !== 'view' ? '#E8E8E8' : undefined,\n        }}\n      >\n        <i className=\"fa fa-eye fa-sm\" />\n      </Button>\n    );\n\n    const btnMode = (\n      <div\n        role=\"button\"\n        tabIndex={0}\n        style={{ cursor: 'pointer' }}\n        onClick={() => {\n          if (researchPlan.mode === 'view') {\n            this.handleSwitchMode('edit');\n          } else {\n            this.handleSwitchMode('view');\n          }\n        }}\n        onKeyPress={() => {}}\n      >\n        <OverlayTrigger placement=\"top\" overlay={researchPlan.mode === 'view' ? editTooltip : viewTooltip}>\n          <ButtonGroup>\n            {EditButton}\n            {ViewButton}\n          </ButtonGroup>\n        </OverlayTrigger>\n      </div>\n    );\n\n    return (\n      <ListGroup fill=\"true\">\n        <ListGroupItem>\n          <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' }}>\n            <div style={{ flex: 1 }}>\n              <ResearchPlanDetailsName\n                value={name}\n                disabled={researchPlan.isMethodDisabled('name')}\n                onChange={this.handleNameChange}\n                edit={edit}\n              />\n            </div>\n            <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'flex-end' }}>\n              <div style={{ marginRight: '5px', marginLeft: '5px' }}>\n                {btnMode}\n              </div>\n              {this.renderExportButton(changed)}\n            </div>\n          </div>\n\n          <ResearchPlanDetailsBody\n            body={body}\n            attachments={attachments}\n            disabled={researchPlan.isMethodDisabled('body')}\n            onChange={this.handleBodyChange}\n            onDrop={this.handleBodyDrop.bind(this)}\n            onAdd={this.handleBodyAdd}\n            onDelete={this.handleBodyDelete.bind(this)}\n            onExport={this.handleExportField.bind(this)}\n            onCopyToMetadata={this.handleCopyToMetadata.bind(this)}\n            update={update}\n            edit={edit}\n            copyableFields={[\n              { title: 'Subject', fieldName: 'subject' },\n              {\n                title: 'Alternate Identifier',\n                fieldName: 'alternate_identifier',\n              },\n              { title: 'Related Identifier', fieldName: 'related_identifier' },\n              { title: 'Description', fieldName: 'description' },\n            ]}\n            researchPlan={researchPlan}\n          />\n        </ListGroupItem>\n      </ListGroup>\n    );\n  } /* eslint-enable */\n\n  renderAnalysesTab(researchPlan) {\n    return (\n      <ListGroup fill=\"true\">\n        <ListGroupItem>\n          <ResearchPlanDetailsContainers\n            handleSubmit={this.handleSubmit}\n            researchPlan={researchPlan}\n            readOnly={false}\n            parent={this}\n          />\n        </ListGroupItem>\n      </ListGroup>\n    );\n  }\n\n  renderAttachmentsTab(researchPlan) { /* eslint-disable react/jsx-no-bind */\n    return (\n      <ListGroup fill=\"true\">\n        <ListGroupItem>\n          <ResearchPlanDetailsAttachments\n            researchPlan={researchPlan}\n            attachments={researchPlan.attachments}\n            onDrop={this.handleAttachmentDrop.bind(this)}\n            onDelete={this.handleAttachmentDelete.bind(this)}\n            onUndoDelete={this.handleAttachmentUndoDelete.bind(this)}\n            onAttachmentImportComplete={this.handleAttachmentImportComplete.bind(this)}\n            onEdit={this.handleAttachmentEdit.bind(this)}\n            readOnly={false}\n          />\n        </ListGroupItem>\n      </ListGroup>\n    );\n  } /* eslint-enable */\n\n  renderPanelHeading(researchPlan) {\n    const { currentCollection } = UIStore.getState();\n    const rootCol = currentCollection && currentCollection.is_shared === false &&\n      currentCollection.is_locked === false && currentCollection.label !== 'All' ? currentCollection.id : null;\n    const titleTooltip = formatTimeStampsOfElement(researchPlan || {});\n    const copyBtn = (\n      <CopyElementModal\n        element={researchPlan}\n        defCol={rootCol}\n      />\n    );\n\n    return (\n      <Panel.Heading>\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"rpDates\">{titleTooltip}</Tooltip>}>\n          <span>\n            <i className=\"fa fa-file-text-o\" />\n            &nbsp;&nbsp;\n            <span>{researchPlan.name}</span>\n            &nbsp;&nbsp;\n          </span>\n        </OverlayTrigger>\n        <ElementCollectionLabels element={researchPlan} placement=\"right\" />\n        <HeaderCommentSection element={researchPlan} />\n        <ConfirmClose el={researchPlan} />\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"saveresearch_plan\">Save Research Plan</Tooltip>}>\n          <Button\n            bsStyle=\"warning\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.handleSubmit()}\n            style={{ display: (researchPlan.changed || false) ? '' : 'none' }}\n          >\n            <i className=\"fa fa-floppy-o\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"fullSample\">Full Research Plan</Tooltip>}>\n          <Button bsStyle=\"info\" bsSize=\"xsmall\" className=\"button-right\" onClick={this.toggleFullScreen}>\n            <i className=\"fa fa-expand\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        {researchPlan.isNew\n          ? null\n          : <OpenCalendarButton isPanelHeader eventableId={researchPlan.id} eventableType=\"ResearchPlan\" />}\n        {copyBtn}\n      </Panel.Heading>\n    );\n  }\n\n  render() {\n    const { researchPlan, update, visible } = this.state;\n\n    const tabContentsMap = {\n      research_plan: (\n        <Tab eventKey=\"research_plan\" title=\"Research plan\" key={`rp_${researchPlan.id}`}>\n          {\n            !researchPlan.isNew && <CommentSection section=\"research_plan_research_plan\" element={researchPlan} />\n          }\n          {this.renderResearchPlanMain(researchPlan, update)}\n          <PrivateNoteElement element={researchPlan} disabled={researchPlan.can_update} />\n        </Tab>\n      ),\n      analyses: (\n        <Tab eventKey=\"analyses\" title=\"Analyses\" key={`analyses_${researchPlan.id}`}>\n          {\n            !researchPlan.isNew && <CommentSection section=\"research_plan_analyses\" element={researchPlan} />\n          }\n          {this.renderAnalysesTab(researchPlan)}\n        </Tab>\n      ),\n      attachments: (\n        <Tab eventKey=\"attachments\" title=\"Attachments\" key={`attachments_${researchPlan.id}`}>\n          {\n            !researchPlan.isNew && <CommentSection section=\"research_plan_attachments\" element={researchPlan} />\n          }\n          {this.renderAttachmentsTab(researchPlan)}\n        </Tab>\n      ),\n      references: (\n        <Tab eventKey=\"references\" title=\"References\" key={`lit_${researchPlan.id}`}>\n          {\n            !researchPlan.isNew && <CommentSection section=\"research_plan_references\" element={researchPlan} />\n          }\n          <ResearchPlansLiteratures element={researchPlan} />\n        </Tab>\n      ),\n      wellplates: (\n        <Tab eventKey=\"wellplates\" title=\"Wellplates\" key={`wellplates_${researchPlan.id}`}>\n          <ResearchPlanWellplates\n            researchPlan={researchPlan}\n            wellplates={researchPlan.wellplates}\n            dropWellplate={(wellplate) => this.dropWellplate(wellplate)}\n            deleteWellplate={(wellplate) => this.deleteWellplate(wellplate)}\n            importWellplate={(wellplate) => this.importWellplate(wellplate)}\n          />\n        </Tab>\n      ),\n      metadata: (\n        <Tab eventKey=\"metadata\" title=\"Metadata\" disabled={researchPlan.isNew} key={`metadata_${researchPlan.id}`}>\n          {\n            !researchPlan.isNew && <CommentSection section=\"research_plan_metadata\" element={researchPlan} />\n          }\n          <ResearchPlanMetadata\n            parentResearchPlan={researchPlan}\n            parentResearchPlanMetadata={researchPlan.research_plan_metadata}\n          />\n        </Tab>\n      ),\n    };\n\n    const tabTitlesMap = {\n      research_plan: 'Research Plan',\n      analyses: 'Analyses',\n      attachments: 'Attachments',\n      wellplates: 'Wellplates',\n      references: 'References',\n      metadata: 'Metadata',\n    };\n    addSegmentTabs(researchPlan, this.handleSegmentsChange, tabContentsMap);\n\n    const tabContents = [];\n    visible.forEach((value) => {\n      const tabContent = tabContentsMap[value];\n      if (tabContent) { tabContents.push(tabContent); }\n    });\n    // eslint-disable-next-line react/destructuring-assignment\n    const activeTab = (this.state.activeTab !== 0 && this.state.activeTab) || visible[0];\n\n    return (\n      <Panel\n        bsStyle={researchPlan.isPendingToSave ? 'info' : 'primary'}\n        className=\"eln-panel-detail research-plan-details\"\n      >\n        {this.renderPanelHeading(researchPlan)}\n        <Panel.Body>\n          <ElementDetailSortTab\n            type=\"research_plan\"\n            availableTabs={Object.keys(tabContentsMap)}\n            tabTitles={tabTitlesMap}\n            onTabPositionChanged={this.onTabPositionChanged}\n          />\n          <Tabs activeKey={activeTab} onSelect={(key) => this.handleSelect(key)} id=\"screen-detail-tab\">\n            {tabContents}\n          </Tabs>\n          <ButtonToolbar>\n            <Button bsStyle=\"primary\" onClick={() => DetailActions.close(researchPlan)}>Close</Button>\n            {\n              (researchPlan.changed || researchPlan.is_copy) ? (\n                <Button bsStyle=\"warning\" onClick={() => this.handleSubmit()}>\n                  {researchPlan.isNew ? 'Create' : 'Save'}\n                </Button>\n              ) : <div />\n            }\n          </ButtonToolbar>\n          <CommentModal element={researchPlan} />\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nResearchPlanDetails.propTypes = {\n  researchPlan: PropTypes.instanceOf(ResearchPlan).isRequired,\n  toggleFullScreen: PropTypes.func.isRequired,\n};\n","import alt from 'src/stores/alt/alt';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\n\nclass QcActions {\n  setLoading() {\n    return null;\n  }\n\n  loadInfers({ sample }) {\n    const sId = sample.id;\n    const atts = sample.attachments();\n    const ids = atts.map(att => (\n      att.aasm_state === 'json' && att.filename.includes('.infer.json')\n        ? att.id : null\n    )).filter(r => r != null);\n\n    return (dispatch) => {\n      AttachmentFetcher.fetchFiles(ids)\n        .then(result => dispatch({ result, sId }))\n        .catch(err => console.log(err)); // eslint-disable-line\n    };\n  }\n}\n\nexport default alt.createActions(QcActions);\n","import alt from 'src/stores/alt/alt';\nimport QcActions from 'src/stores/alt/actions/QcActions';\n\nclass QcStore {\n  constructor() {\n    this.infers = [];\n    this.loading = false;\n\n    this.bindListeners({\n      handleLoadInfers: QcActions.loadInfers,\n      handleSetLoading: QcActions.setLoading,\n    });\n  }\n\n  handleSetLoading() {\n    this.setState({ loading: true });\n  }\n\n  handleLoadInfers({ result, sId }) {\n    const infer = { sId, result };\n    const prevInfers = this.infers\n      .map(i => ((i.sId !== sId) ? i : null))\n      .filter(r => r != null);\n    const nextInfers = [...prevInfers, infer];\n\n    this.setState({\n      loading: false,\n      infers: nextInfers,\n    });\n  }\n}\n\nexport default alt.createStore(QcStore, 'QcStore');\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst PubchemSigns = ({\n  objPath, objWidth, objHeight, objTitle\n}) => {\n  const objScale = 1;\n  return (\n    <svg\n      width={objWidth}\n      height={objHeight}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n    >\n      <title>{objTitle}</title>;\n      <g transform={`scale(${objScale})`}>\n        <image xlinkHref={objPath} width=\"100%\" height=\"100%\" />\n      </g>\n    </svg>\n  );\n};\n\nPubchemSigns.propTypes = {\n  objPath: PropTypes.string.isRequired,\n  objWidth: PropTypes.number,\n  objHeight: PropTypes.number,\n  objTitle: PropTypes.string\n};\n\nPubchemSigns.defaultProps = {\n  objWidth: 70,\n  objHeight: 70,\n  objTitle: ''\n};\n\nexport default PubchemSigns;\n","import React from 'react';\nimport { Button, Row, Col } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport { concat, uniqBy } from 'lodash';\nimport PubchemSigns from 'src/components/pubchem/PubchemSigns';\n\nconst PubchemLcss = ({\n  cid, informArray\n}) => {\n  const sourceRoot = 'https://pubchem.ncbi.nlm.nih.gov';\n  let imgWH = 70 * (4 / 9);\n  let imgs = [];\n\n  const picArry = informArray.filter(info => info.Name === 'Pictogram(s)');\n\n  if (picArry.length > 0) {\n    picArry.map((p) => {\n      const makeups = p.Value.StringWithMarkup;\n      makeups.map((ms) => {\n        const extract = ms.Markup.map(m => ({ src: m.URL.replace(sourceRoot, ''), title: m.Extra }));\n        imgs = concat(imgs, extract);\n      });\n    });\n  } else {\n    informArray.map((inform) => {\n      const htmlDoc = new DOMParser().parseFromString(inform.StringValue, 'text/html');\n      const extract = [].slice.call(htmlDoc.querySelectorAll('img')).map((g) => {\n        return { src: g.getAttribute('src'), title: g.title };\n      });\n      imgs = concat(imgs, extract);\n      return true;\n    });\n  }\n\n  imgs = uniqBy(imgs, 'src');\n  if (imgs.length < 5) {\n    imgWH = 70 * (3 / 4);\n  }\n  const signs = imgs.map((img, idx) => <PubchemSigns key={`pubchem_sign_${idx + 1}`} objPath={img.src} objTitle={img.title} objWidth={imgWH} objHeight={imgWH} />);\n\n  return (\n    <div>\n      <Row>\n        <Col md={12}>\n          {signs}\n        </Col>\n      </Row>\n      <Row>\n        <Col md={12}>\n          <Button style={{ border: 'none' }} bsSize=\"xsmall\" onClick={() => { window.open(`${sourceRoot}/compound/${cid}#datasheet=lcss&section=Top`, '_blank'); }}>\n            <img src=\"/images/wild_card/pubchem.svg\" style={{ height: '1.5vh' }} alt=\"\" />&nbsp;\n            <i className=\"lcss-link\">\n              Source: European Chemicals Agency (ECHA)<br />\n              Read more about Safety Summary from PubChem\n            </i>\n          </Button>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nPubchemLcss.propTypes = {\n  cid: PropTypes.number.isRequired,\n  informArray: PropTypes.arrayOf(PropTypes.shape({\n    ReferenceNumber: PropTypes.number.isRequired,\n    Name: PropTypes.string.isRequired,\n    StringValue: PropTypes.string.isRequired,\n  })).isRequired,\n};\n\nexport default PubchemLcss;\n","import React from 'react';\n\n\nexport default class ElementalComposition extends React.Component {\n\n  elementsList(elemental_composition) {\n    let keys = Object.keys(elemental_composition.data);\n    if (keys.length == 0) {\n      return (\n        <p>\n          Sorry, it was not possible to calculate the elemental\n          compositon. Check data please.\n        </p>\n      )\n    }\n\n    let elements = [];\n\n    keys.map(function (key, index) {\n      let value = elemental_composition.data[key];\n      elements.push(\n        <span className=\"data-item\" key={key}>\n          <strong>\n            {key}\n          </strong>\n          &nbsp;\n          &nbsp;\n          {Number(value).toFixed(2)}\n          &nbsp;\n          &nbsp;\n        </span>\n      );\n    });\n\n    return elements;\n  }\n\n  relatedLoading(elemental_composition) {\n    if (!elemental_composition.loading)\n      return false;\n\n    return (\n      <td className=\"loading\" style={{ textAlign: \"left\" }} width=\"13%\">\n        {elemental_composition.loading.toFixed(2)}\n      </td>\n    )\n  }\n\n  compositonTableHeader(elemental_composition) {\n    return (\n      <thead>\n        <tr>\n          <th>\n            <span>{elemental_composition.description}</span>\n          </th>\n\n          <th className=\"loading\">\n            {elemental_composition.loading ? 'Loading (mmol/g)' : ''}\n          </th>\n        </tr>\n      </thead>\n    )\n  }\n\n  render() {\n    let { elemental_composition, formula_changed } = this.props;\n\n    return (\n      <table className=\"elemental-composition\">\n        {this.compositonTableHeader(elemental_composition)}\n\n        <tbody>\n          <tr>\n            <td className=\"form-inline\">\n              {this.elementsList(elemental_composition, formula_changed)}\n            </td>\n            {this.relatedLoading(elemental_composition)}\n          </tr>\n        </tbody>\n      </table>\n    )\n  }\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Numeral from 'numeral';\nimport {\n  FormGroup,\n  FormControl,\n  ControlLabel,\n  InputGroup,\n} from 'react-bootstrap';\n\nexport default class NumeralInput extends Component {\n  constructor(props) {\n    super(props);\n\n    let { value } = props;\n    this.state = {\n      numeralValue: this._convertValueToNumeralValue(value)\n    };\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    let { value } = nextProps;\n    this.setState({\n      numeralValue: this._convertValueToNumeralValue(value)\n    });\n  }\n\n  _convertValueToNumeralValue(value) {\n    let { numeralFormat } = this.props;\n    let numeralValue = null;\n\n    try {\n      numeralValue = Numeral(value).format(numeralFormat);\n    } catch (err) {\n      console.log(`Error in NumeralInput component: ${err}`);\n    }\n\n    return numeralValue;\n  }\n\n  //TODO fix issue that cursor is behind, when numeral inserts a comma:\n  // containing comas need to be compared to previous amount\n  _handleInputValueChange(event) {\n    const inputField = event.target;\n    const { value, selectionStart } = inputField;\n    const formatedValue = this._convertValueToNumeralValue(value);\n    const unformatedValue = Numeral().unformat(formatedValue);\n    const { onChange } = this.props;\n\n    this.setState(\n      { numeralValue: formatedValue },\n      () => { inputField.selectionStart = selectionStart; }\n    );\n    onChange(unformatedValue);\n  }\n\n  render() {\n    let { bsSize, bsStyle, addonAfter, buttonAfter, label, disabled } = this.props;\n    let { numeralValue } = this.state;\n    let addonAfterWrapper, buttonAfterWrapper;\n    if (addonAfter) {\n      addonAfterWrapper = <InputGroup.Addon>{addonAfter}</InputGroup.Addon>;\n    }\n\n    if(buttonAfter) {\n      buttonAfterWrapper = <InputGroup.Button>{buttonAfter}</InputGroup.Button>;\n    }\n\n    return (\n      <FormGroup>\n        <ControlLabel>{label}</ControlLabel>\n        <InputGroup>\n          <FormControl type='text'  value={numeralValue || ''} bsSize={bsSize}\n            bsStyle={bsStyle}\n            disabled={disabled}\n            onChange={ event => this._handleInputValueChange(event)} />\n          {buttonAfterWrapper}\n          {addonAfterWrapper}\n        </InputGroup>\n      </FormGroup>\n    );\n  }\n}\n\nNumeralInput.defaultProps = {\n  numeralFormat: '',\n  value: 0,\n  onChange: () => {\n  }\n};\n\nNumeralInput.propTypes = {\n  onChange: PropTypes.func,\n  numeralFormat: PropTypes.string,\n  disabled: PropTypes.bool,\n  addonAfter: PropTypes.node,\n  buttonAfter: PropTypes.node,\n  label: PropTypes.node,\n  bsSize: PropTypes.string,\n  bsStyle: PropTypes.string,\n};\n","import React from 'react';\nimport { FormControl } from 'react-bootstrap';\nimport NumeralInput from 'src/apps/mydb/elements/details/NumeralInput';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nvar _ = require('lodash');\n\nexport default class ElementalCompositionCustom extends React.Component {\n\n  checkElementsSum(el_composition) {\n    let sum = 0.0;\n\n    let keys = Object.keys(el_composition.data);\n\n    keys.map(function (key, index) {\n      sum += parseFloat(el_composition.data[key] || 0.0);\n    });\n\n    if (sum > 100.0) {\n      NotificationActions.add({\n        message: 'Percentage sum is more than 100%',\n        level: 'error'\n      });\n      return false;\n    } else {\n      return true;\n    }\n  }\n\n  handleElementsListChanged(v, key, el_composition, handleElementalChanged) {\n    let oldval = el_composition.data[key];\n\n    el_composition.data[key] = v;\n\n    if (this.checkElementsSum(el_composition)) {\n      handleElementalChanged(el_composition)\n    }\n  }\n\n  elementsList(el_composition, concat_formula) {\n    let elements = [];\n\n    let klass = this;\n    let handleElementalChanged = klass.props.handleElementalChanged;\n    let newData = {};\n\n    // be sure that 3, 2-symbol (Br) elements are all before one-symbol (B)!\n    // TODO: check performance\n    let mendeleev = /(Uut|Uup|Uus|Uuo|He|Li|Be|Ne|Na|Mg|Al|Si|Cl|Ar|Ca|Sc|Ti|Cr|Mn|Fe|Co|Ni|Cu|Zn|Ga|Ge|As|Se|Br|Kr|Rb|Sr|Zr|Nb|Mo|Tc|Ru|Rh|Pd|Ag|Cd|In|Sn|Sb|Te|Xe|Cs|Ba|La|Ce|Pr|Nd|Pm|Sm|Eu|Gd|Tb|Dy|Ho|Er|Tm|Yb|Lu|Hf|Ta|Re|Os|Ir|Pt|Au|Hg|Tl|Pb|Bi|Po|At|Rn|Fr|Ra|Ac|Th|Pa|Np|Pu|Am|Cm|Bk|Cf|Es|Fm|Md|No|Lr|Rf|Db|Sg|Bh|Hs|Mt|Ds|Rg|Cn|Fl|Lv|H|B|C|N|O|F|P|S|K|V|Y|I|W|U)/g\n    let keys = _.uniq(concat_formula.match(mendeleev)).sort();\n\n    // add new key to custom composition, so that we have new input\n    keys.forEach(function (key) {\n      newData[key] = (el_composition.data[key] || 0.0);\n      elements.push(<NumeralInput\n        className=\"padding-left\"\n        numeralFormat='0,0.00'\n        label={key}\n        key={key + 'found'}\n        value={newData[key]}\n        defaultValue={newData[key]}\n        onChange={(v) => klass.handleElementsListChanged(v, key, el_composition, handleElementalChanged)}\n      />\n      );\n    });\n\n    el_composition.data = newData;\n\n    return elements;\n  }\n\n  hideLoading(elemental_composition) {\n    let c_type = elemental_composition.composition_type;\n    return this.props.hideLoading || !elemental_composition.loading;\n  }\n\n  relatedLoading(el_composition) {\n    if (this.hideLoading(el_composition))\n      return false;\n\n    return (\n      <td className=\"loading\" style={{ textAlign: \"left\" }} width=\"13%\">\n        <FormControl type=\"text\"\n          key={\"mc-loading\" + (el_composition.id || 0).toString()}\n          defaultValue={el_composition.loading || ''}\n          value={el_composition.loading && el_composition.loading.toFixed(2) || ''}\n          disabled\n          readOnly\n        />\n      </td>\n    )\n  }\n\n  compositonTableHeader(elemental_composition) {\n    return (\n      <thead>\n        <tr>\n          <th>\n            <span>{elemental_composition.description}</span>\n          </th>\n\n          <th className=\"loading\">\n            {!this.hideLoading(elemental_composition) ? 'Loading (mmol/g)' : ''}\n          </th>\n        </tr>\n      </thead>\n    )\n  }\n\n  render() {\n    let { elemental_composition, concat_formula, parent } = this.props;\n\n    if (!elemental_composition) return false;\n\n    return (\n      <table className=\"elemental-composition-custom\">\n        {this.compositonTableHeader(elemental_composition)}\n\n        <tbody>\n          <tr>\n            <td className=\"form-inline\">\n              {this.elementsList(elemental_composition, concat_formula)}\n            </td>\n            {this.relatedLoading(elemental_composition)}\n          </tr>\n        </tbody>\n      </table>\n    )\n  }\n}\n","import React from 'react';\nimport ElementalComposition from 'src/apps/mydb/elements/details/samples/propertiesTab/ElementalComposition'\nimport ElementalCompositionCustom from 'src/apps/mydb/elements/details/samples/propertiesTab/ElementalCompositionCustom'\n\nexport default class ElementalCompositionGroup extends React.Component {\n\n  handleElementalChanged(el_composition) {\n    this.props.handleSampleChanged(this.props.sample)\n  }\n\n  render() {\n    let { sample, show } = this.props;\n    let elemental_compositions = sample.elemental_compositions;\n\n    let display_error = true;\n    let data = [];\n    let el_composition_custom;\n\n    if (elemental_compositions.length == 1) {\n      data = '';\n      display_error = false;\n    }\n    else if (sample.formulaChanged) {\n      data = (\n        <p>\n          Formula has been changed. Please save sample to calculate the\n          elemental compositon.\n        </p>\n      )\n    }\n\n    elemental_compositions.map((elemental_composition, key) => {\n      if (Object.keys(elemental_composition.data).length)\n        display_error = false;\n\n      if (elemental_composition.composition_type == 'found') {\n        el_composition_custom = elemental_composition;\n      } else if (data.constructor === Array) {\n        data.push(\n          <ElementalComposition\n            elemental_composition={elemental_composition}\n            key={elemental_composition.id} />\n        );\n      }\n    });\n\n    if (display_error) {\n      data = (\n        <p>\n          Sorry, it was not possible to calculate the elemental\n          compositon. Check data please.\n        </p>\n      )\n    }\n\n    const custom = sample.can_update\n      ? (<ElementalCompositionCustom\n        handleElementalChanged={(el) => this.handleElementalChanged(el)}\n        elemental_composition={el_composition_custom}\n        hideLoading={!sample.contains_residues}\n        concat_formula={sample.concat_formula}\n        key={'elem_composition_found'} />)\n      : null;\n\n    if (!sample.molecule_formula) {\n      return false;\n    }\n\n    const label = sample.contains_residues ? <label>Elemental composition</label> : false\n\n    return (\n      <div>\n        {label}\n        {data}\n        {custom}\n      </div>\n    )\n\n  }\n}\n","import React from 'react';\nimport { FormGroup, ControlLabel, FormControl, Radio, Row, Col } from 'react-bootstrap';\nimport NumeralInputWithUnitsCompo from 'src/apps/mydb/elements/details/NumeralInputWithUnitsCompo'\nimport ElementalCompositionGroup from 'src/apps/mydb/elements/details/samples/propertiesTab/ElementalCompositionGroup'\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions'\nimport Select from 'react-select'\n\nexport default class PolymerSection extends React.Component {\n\n  handleAmountChanged(amount) {\n    this.props.parent.handleAmountChanged(amount);\n  }\n\n  handleCustomInfoNumericChanged(e, name, residue, sample) {\n    residue.custom_info[name] = e.value;\n\n    // make calculations if loading was changed\n    if (name == 'loading') {\n\n      this.handleAmountChanged(sample.amount);\n      if (residue.custom_info.loading_type == 'external')\n        sample.external_loading = e.value;\n\n      let errorMessage;\n      if (e.value == 0.0)\n        errorMessage = 'Loading can not be 0. Please define a value.'\n\n      let mw_defined = sample.molecule.molecular_weight;\n      let value_to_check = e.value * mw_defined;\n\n      if (value_to_check > 1000.0) {\n        errorMessage = 'Combination of loading and molecular weight is wrong\\\n         (MW*L > 1.0)'\n      }\n\n      if (errorMessage)\n        NotificationActions.add({\n          message: errorMessage,\n          level: 'error'\n        });\n\n    } else {\n      this.props.parent.handleSampleChanged(sample);\n    }\n  }\n\n  handleCustomInfoChanged(e, residue, sample) {\n    residue.custom_info[e.target.name] = e.target.value;\n\n    if (e.target.name == \"formula\") {\n      if (e.target.value) {\n        sample.formulaChanged = true;\n      }\n    }\n\n    this.props.parent.handleSampleChanged(sample);\n  }\n\n  handlePRadioChanged(e, residue, sample) {\n    residue.custom_info['loading_type'] = e.target.value;\n\n    if (e.target.value == 'external') {\n      sample.loading = sample.external_loading;\n    }\n    else {\n      let e_compositon = sample.elemental_compositions.find(function (item) {\n        return item.composition_type == e.target.value\n      });\n\n      if (e_compositon)\n        sample.loading = e_compositon.loading;\n    }\n\n    this.props.parent.handleSampleChanged(sample);\n  }\n\n  handlePolymerTypeSelectChanged(value, residue, sample) {\n    residue.custom_info['polymer_type'] = value;\n    delete residue.custom_info['surface_type'];\n\n    // tell parent (SampleDetails) component about changes\n    this.props.parent.handleSampleChanged(sample);\n  }\n\n  handleSurfaceTypeSelectChanged(value, residue, sample) {\n    residue.custom_info['surface_type'] = value;\n    delete residue.custom_info['polymer_type'];\n    this.props.parent.handleSampleChanged(sample);\n  }\n\n\n  checkInputStatus(sample, key) {\n    if (sample['error_' + key]) {\n      return 'error';\n    } else {\n      return 'success';\n    }\n  }\n\n  polymerFormula(sample, residue) {\n    return (\n      <FormGroup>\n        <ControlLabel>Formula</ControlLabel>\n        <FormControl type=\"text\"\n          value={residue.custom_info.formula || ''}\n          name=\"formula\"\n          key={'polymer_formula_input' + sample.id.toString()}\n          onChange={(e) => this.handleCustomInfoChanged(e, residue, sample)}\n        />\n      </FormGroup>\n    )\n  }\n\n  customInfoRadio(label, value, residue, sample) {\n    let additionalLoadingInput = false;\n\n    if (value == 'external') {\n      let disabled = !(residue.custom_info.loading_type == value);\n      additionalLoadingInput = (\n        <td width=\"50%\" className=\"loading-input visible-hd\">\n          <NumeralInputWithUnitsCompo\n            value={sample.loading}\n            unit='mmol/g'\n            metricPrefix='n'\n            metricPrefixes={['n']}\n            precision={3}\n            key={'polymer_loading_input' + sample.id.toString()}\n            name=\"polymer_loading\"\n            // TODO: enable again\n            //bsStyle={this.checkInputStatus(sample, 'loading')}\n            onChange={(e) => this.handleCustomInfoNumericChanged(e, 'loading', residue, sample)}\n            disabled={disabled}\n            readOnly={disabled}\n          />\n        </td>\n      )\n    }\n\n    let rel_composition = sample.elemental_compositions.find(function (item) {\n      return item.composition_type == value\n    });\n    let rel_loading = rel_composition && rel_composition.loading;\n\n    return (\n      <tr>\n        <td>\n          <FormGroup>\n            <Radio onChange={(e) => this.handlePRadioChanged(e, residue, sample)}\n              checked={residue.custom_info.loading_type == value}\n              name=\"loading_type\"\n              key={value + sample.id.toString() + 'loading_type'}\n              value={value}\n              disabled={value != 'external' && !rel_loading}\n            >{label}</Radio>\n          </FormGroup>\n        </td>\n        {additionalLoadingInput}\n      </tr>\n    )\n  }\n\n  polymerLoading(sample, residue) {\n    if (sample.reaction_product)\n      return false;\n\n    return (\n      <table width=\"100%\" key={'polymer_loading' + sample.id.toString()}>\n        <thead>\n          <tr>\n            <th>\n              <label>Loading according to:</label>\n            </th>\n          </tr>\n        </thead>\n        <tbody>\n          {this.customInfoRadio(\"Mass difference\", \"mass_diff\", residue, sample)}\n          {this.customInfoRadio(\"100% conversion\", \"full_conv\", residue, sample)}\n          {this.customInfoRadio(\"Elemental analyses\", \"found\", residue, sample)}\n          {this.customInfoRadio(\"External estimation\", \"external\", residue, sample)}\n          <tr className=\"hidden-hd\">\n            <td>\n              <NumeralInputWithUnitsCompo\n                value={sample.loading}\n                unit='mmol/g'\n                metricPrefix='n'\n                metricPrefixes={['n']}\n                precision={3}\n                key={'polymer_loading_input' + sample.id.toString()}\n                name=\"polymer_loading\"\n                bsStyle={this.checkInputStatus(sample, 'loading')}\n                onChange={(e) => this.handleCustomInfoNumericChanged(e, 'loading', residue, sample)}\n                disabled={residue.custom_info.loading_type != 'external'}\n                readOnly={residue.custom_info.loading_type != 'external'}\n              />\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    )\n  }\n\n  polymerType(sample, residue) {\n    let selectOptions = [\n      { label: 'Polystyrene', value: 'polystyrene' },\n      { label: 'Polyethyleneglycol', value: 'polyethyleneglycol' },\n      { label: 'Self-defined', value: 'self_defined' }\n    ];\n\n    return (\n      <Select\n        options={selectOptions}\n        simpleValue\n        key={\"polymer_type\" + sample.id.toString()}\n        name=\"polymer_type\"\n        value={residue.custom_info.polymer_type}\n        clearable={false}\n        onChange={(v) => this.handlePolymerTypeSelectChanged(v, residue, sample)}\n      />\n    )\n  }\n\n  surfaceType(sample, residue) {\n    let selectOptions = [\n      { label: 'Glass', value: 'glass' },\n      { label: 'Si native oxide', value: 'si Native Oxide' },\n      { label: 'Si, 5nm Ti, 100nm Au', value: 'si, 5nm Ti, 100nm Au' }\n    ];\n\n    return (\n      <Select\n        options={selectOptions}\n        simpleValue\n        key={`surface_type_${sample.id}`}\n        name=\"surface_type\"\n        value={residue.custom_info.surface_type}\n        clearable={false}\n        onChange={(v) => this.handleSurfaceTypeSelectChanged(v, residue, sample)}\n      />\n    )\n  }\n\n  polymerCrossLinkage(sample, residue) {\n    return (\n      <FormGroup>\n        <ControlLabel>Cross-linkage</ControlLabel>\n        <FormControl type=\"text\"\n          value={residue.custom_info.cross_linkage || ''}\n          name=\"cross_linkage\"\n          key={'cross_linkage' + sample.id.toString()}\n          onChange={(e) => this.handleCustomInfoChanged(e, residue, sample)}\n        />\n      </FormGroup>\n    )\n  }\n\n  render() {\n    let sample = this.props.sample || {}\n    let residue = sample.residues[0];\n\n    if (!this.props.show)\n      return false;\n\n    return (\n      <div className=\"polymer-section\">\n        <Row>\n          <Col md={6}>\n            <label>Polymer type</label>\n            {this.polymerType(sample, residue)}\n          </Col>\n          <Col md={6}>\n            <label>Surface type</label>\n            {this.surfaceType(sample, residue)}\n          </Col>\n        </Row>\n        <br />\n        <Row>\n          <Col md={6}>\n            {this.polymerCrossLinkage(sample, residue)}\n          </Col>\n          <Col md={6}>\n            {this.polymerFormula(sample, residue)}\n          </Col>\n        </Row>\n        <Row>\n          <Col md={8}>\n            <ElementalCompositionGroup\n              handleSampleChanged={(s) => this.props.parent.handleSampleChanged(s)}\n              sample={sample} />\n          </Col>\n          <Col md={4}>\n            {this.polymerLoading(sample, residue)}\n          </Col>\n        </Row>\n      </div>\n    )\n  }\n}\n","import React from 'react';\nimport {\n  Tooltip,\n  OverlayTrigger\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nconst ToggleSection = ({ show }) => (\n  <div style={{ float: 'right' }}>\n    <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"toggle_section\">Toggle Section</Tooltip>}>\n      <span style={{ fontSize: 15, color: '#337ab7', lineHeight: '10px' }}>\n        <i className={`glyphicon ${(show) ? 'glyphicon-chevron-down' : 'glyphicon-chevron-right'}`} />\n      </span>\n    </OverlayTrigger>\n  </div>\n);\n\nToggleSection.propTypes = {\n  show: PropTypes.bool,\n};\n\nToggleSection.defaultProps = {\n  show: true\n};\n\nexport default ToggleSection;\n","/* eslint-disable react/require-default-props */\n/* eslint-disable no-shadow */\nimport React, { useState, useEffect } from 'react';\nimport {\n  FormControl, ControlLabel, InputGroup, Button\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport {\n  convertTemperature,\n  handleFloatNumbers,\n} from 'src/utilities/UnitsConversion';\n\nexport default function NumericInputUnit(props) {\n  const {\n    numericValue,\n    unit,\n    field,\n    inputDisabled,\n    label,\n    onInputChange\n  } = props;\n\n  const [value, setValue] = useState(numericValue);\n  const [currentUnit, setUnit] = useState(unit);\n\n  useEffect(() => {\n    setValue(numericValue);\n    setUnit(unit);\n  }, [numericValue, unit]);\n\n  const weightConversion = (value, multiplier) => value * multiplier;\n\n  const conversionMap = {\n    g: { convertedUnit: 'mg', conversionFactor: 1000 },\n    mg: { convertedUnit: 'μg', conversionFactor: 1000 },\n    μg: { convertedUnit: 'g', conversionFactor: 0.000001 },\n    l: { convertedUnit: 'ml', conversionFactor: 1000 },\n    ml: { convertedUnit: 'μl', conversionFactor: 1000 },\n    μl: { convertedUnit: 'l', conversionFactor: 0.000001 }\n  };\n\n  const convertValue = (valueToFormat, currentUnit) => {\n    const { convertedUnit, conversionFactor } = conversionMap[currentUnit];\n    const decimalPlaces = 7;\n    const formattedValue = weightConversion(valueToFormat, conversionFactor);\n    const convertedValue = handleFloatNumbers(formattedValue, decimalPlaces);\n    return [convertedValue, convertedUnit];\n  };\n\n  const toggleInput = () => {\n    let [convertedValue, convertedUnit] = [value, currentUnit];\n    switch (field) {\n      case 'chemical_amount_in_g':\n      case 'chemical_amount_in_l':\n        [convertedValue, convertedUnit] = convertValue(value, currentUnit);\n        break;\n      case 'flash_point':\n        [convertedValue, convertedUnit] = convertTemperature(value, currentUnit);\n        break;\n      default:\n        // handle default case by doing no conversion\n        convertedValue = parseFloat(value);\n        break;\n    }\n    onInputChange(convertedValue, convertedUnit);\n    setUnit(convertedUnit);\n  };\n\n  const handleInputValueChange = (event) => {\n    const newInput = event.target.value;\n    onInputChange(newInput, unit);\n    setValue(newInput);\n  };\n\n  const labelWrap = label ? <ControlLabel>{label}</ControlLabel> : <ControlLabel style={{ paddingTop: '15px' }} />;\n  const bsSize = field === 'flash_point' ? 'small' : null;\n\n  const unitSwitch = (\n    <InputGroup.Button>\n      <Button\n        disabled={inputDisabled}\n        active\n        onClick={() => { toggleInput(); }}\n        bsSize={bsSize}\n      >\n        {currentUnit}\n      </Button>\n    </InputGroup.Button>\n  );\n\n  return (\n    <div className={`numericInputWithUnit_${unit}`}>\n      {labelWrap}\n      <InputGroup>\n        <FormControl\n          type=\"text\"\n          bsClass=\"bs-form--compact form-control\"\n          disabled={inputDisabled}\n          bsSize={bsSize}\n          value={value}\n          onChange={(event) => handleInputValueChange(event)}\n          name={field}\n          label={label}\n        />\n        {unitSwitch}\n      </InputGroup>\n    </div>\n  );\n}\n\nNumericInputUnit.propTypes = {\n  onInputChange: PropTypes.func,\n  unit: PropTypes.string,\n  numericValue: PropTypes.number,\n  label: PropTypes.node,\n  field: PropTypes.string,\n  inputDisabled: PropTypes.bool,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { ControlLabel, FormGroup, InputGroup, FormControl } from 'react-bootstrap';\n\nexport default class TextRangeWithAddon extends Component {\n  handleInputChange(e) {\n    const input = e.target;\n    input.focus();\n    const { value, selectionStart } = input;\n    let newValue = value;\n    const lastChar = value[selectionStart - 1] || '';\n    if (lastChar !== '' && !lastChar.match(/-|\\d|\\.| |(,)/)) {\n      const reg = new RegExp(lastChar, 'g');\n      newValue = newValue.replace(reg, '');\n      this.input.value = newValue;\n      return;\n    }\n    newValue = newValue.replace(/--/g, '');\n    newValue = newValue.replace(/,/g, '.');\n    newValue = newValue.replace(/\\.+\\./g, '.');\n    newValue = newValue.replace(/ - /g, ' ');\n    this.props.onChange(this.props.field, newValue, newValue);\n  }\n\n  handleInputFocus() {\n    this.input.value = this.input.value.trim().replace(/ – /g, ' ');\n  }\n\n  handleInputBlur() {\n    const value = this.input.value.trim();\n    const result = value.match(/[-.0-9]+|[0-9]/g);\n    if (result) {\n      // eslint-disable-next-line no-restricted-globals\n      const nums = result.filter(r => !isNaN(r));\n      if (nums.length > 0) {\n        let lower = null;\n        let upper = null;\n        if (nums.length === 1) {\n          lower = nums.shift();\n          upper = lower;\n        } else {\n          lower = nums.shift();\n          upper = nums.pop();\n        }\n        this.props.onChange(this.props.field, Number.parseFloat(lower), Number.parseFloat(upper));\n      } else {\n        this.input.value = '';\n        this.props.onChange(this.props.field, '', '');\n      }\n    } else {\n      this.props.onChange(this.props.field, '', '');\n    }\n  }\n\n  render() {\n    const {\n      addon, disabled, label, tipOnText, value\n    } = this.props;\n    return (\n      <FormGroup bsSize=\"small\">\n        <ControlLabel>{label}</ControlLabel>\n        <InputGroup data-cy={\"cy_\"+label}>\n          <FormControl\n            title={tipOnText}\n            type=\"text\"\n            disabled={disabled}\n            value={value}\n            inputRef={(ref) => { this.input = ref; }}\n            onChange={(event) => this.handleInputChange(event)}\n            onFocus={() => this.handleInputFocus()}\n            onBlur={() => this.handleInputBlur()}\n          />\n          <InputGroup.Addon>{addon}</InputGroup.Addon>\n        </InputGroup>\n      </FormGroup>\n    );\n  }\n}\n\nTextRangeWithAddon.propTypes = {\n  field: PropTypes.string.isRequired,\n  label: PropTypes.string,\n  value: PropTypes.string,\n  addon: PropTypes.string,\n  disabled: PropTypes.bool,\n  onChange: PropTypes.func,\n  tipOnText: PropTypes.string\n};\n\nTextRangeWithAddon.defaultProps = {\n  label: '',\n  value: '',\n  addon: '',\n  disabled: false,\n  onChange: () => {},\n  tipOnText: ''\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Button, FormControl, ListGroup, ListGroupItem\n} from 'react-bootstrap';\nimport Molecule from 'src/models/Molecule';\nimport VirtualizedSelect from 'react-virtualized-select';\nimport { defaultMultiSolventsSmilesOptions } from 'src/components/staticDropdownOptions/options';\nimport MoleculesFetcher from 'src/fetchers/MoleculesFetcher';\nimport { ionic_liquids } from 'src/components/staticDropdownOptions/ionic_liquids';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\n// For REPO\nimport { permitOn } from 'src/components/common/uis';\n\nfunction SolventDetails({ sample, solvent, deleteSolvent, onChangeSolvent }) {\n  if (!solvent) {\n    return null;\n  }\n\n  const changeLabel = (event) => {\n    solvent.label = event.target.value;\n    onChangeSolvent(solvent);\n  };\n\n  const changeRatio = (event) => {\n    solvent.ratio = event.target.value;\n    onChangeSolvent(solvent);\n  };\n\n  // onChangeRatio\n  return (\n    <tr>\n      <td>\n        <FormControl\n          type=\"text\"\n          name=\"solvent_label\"\n          value={solvent.label}\n          onChange={changeLabel}\n          disabled\n        />\n      </td>\n      <td>\n        <FormControl\n          type=\"number\"\n          name=\"solvent_ratio\"\n          value={solvent.ratio}\n          onChange={changeRatio}\n          disabled={!permitOn(sample)}\n        />\n      </td>\n      <td>\n        <Button\n          bsStyle=\"danger\"\n          onClick={() => deleteSolvent(solvent)}\n          style={{\n            width: '30px',\n            height: '30px',\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'center'\n          }}\n        >\n          <i className=\"fa fa-trash-o fa-lg\" />\n        </Button>\n      </td>\n    </tr>\n  );\n}\n\nfunction SampleSolventGroup({\n  materialGroup, sample, dropSample, deleteSolvent, onChangeSolvent\n}) {\n  const contents = [];\n  const sampleSolvents = sample.solvent;\n  const minPadding = { padding: '4px 4px 4px 4px' };\n\n  if (sampleSolvents && sampleSolvents.length > 0) {\n    let key = -1;\n    sampleSolvents.forEach((solv) => {\n      key += 1;\n      contents.push((\n        <SolventDetails\n          key={key}\n          sample={sample}\n          solvent={solv}\n          deleteSolvent={deleteSolvent}\n          onChangeSolvent={onChangeSolvent}\n        />\n      ));\n    });\n  }\n\n  const createDefaultSolvents = (event) => {\n    const solvent = event.value;\n    const smi = solvent.smiles;\n    MoleculesFetcher.fetchBySmi(smi)\n      .then((result) => {\n        const molecule = new Molecule(result);\n        const d = molecule.density;\n        const solventDensity = solvent.density || 1;\n        molecule.density = (d && d > 0) || solventDensity;\n        dropSample(molecule, null, materialGroup, solvent.external_label);\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n        NotificationActions.add({\n          title: 'Error',\n          message: 'Failed to fetch molecule data.',\n          level: 'error',\n          dismissible: true,\n          autoDismiss: 5\n        });\n      });\n  };\n\n  const solventOptions = Object.keys(ionic_liquids).reduce((solvents, ionicLiquid) => solvents.concat({\n    label: ionicLiquid,\n    value: {\n      external_label: ionicLiquid,\n      smiles: ionic_liquids[ionicLiquid],\n      density: 1.0\n    }\n  }), defaultMultiSolventsSmilesOptions);\n\n  return (\n    <div>\n      <table width=\"100%\" className=\"reaction-scheme\">\n        <ListGroup fill=\"true\">\n          <h5 style={{ fontWeight: 'bold' }}>Solvents:</h5>\n          <ListGroupItem style={minPadding}>\n            <div className=\"properties-form\">\n              <VirtualizedSelect\n                disabled={!permitOn(sample)}\n                name=\"default solvents\"\n                multi={false}\n                options={solventOptions}\n                placeholder=\"Select solvents or drag-n-drop molecules from the sample list\"\n                onChange={createDefaultSolvents}\n                menuContainerStyle={{ minHeight: '200px' }}\n                style={{ marginBottom: '10px' }}\n              />\n              { sampleSolvents && sampleSolvents.length > 0 && (\n                <>\n                  <td style={{ width: '50%', fontWeight: 'bold' }}>Label:</td>\n                  <td style={{ width: '50%', fontWeight: 'bold' }}>Ratio:</td>\n                </>\n              )}\n              {contents.map((item) => item)}\n            </div>\n          </ListGroupItem>\n        </ListGroup>\n      </table>\n    </div>\n  );\n}\n\nSampleSolventGroup.propTypes = {\n  materialGroup: PropTypes.string.isRequired,\n  headIndex: PropTypes.number.isRequired,\n  deleteMaterial: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  showLoadingColumn: PropTypes.bool,\n  addDefaultSolvent: PropTypes.func.isRequired,\n  dropMaterial: PropTypes.func.isRequired,\n  dropSample: PropTypes.func.isRequired,\n  switchEquiv: PropTypes.func.isRequired,\n  lockEquivColumn: PropTypes.bool\n};\n\nSampleSolventGroup.defaultProps = {\n  showLoadingColumn: false,\n  lockEquivColumn: false\n};\n\nexport { SampleSolventGroup, SolventDetails };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DropTarget } from 'react-dnd';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport Sample from 'src/models/Sample';\nimport { SampleSolventGroup } from 'src/apps/mydb/elements/details/samples/propertiesTab/SampleSolventGroup';\n\nconst target = {\n  drop(tagProps, monitor) {\n    const { dropSample } = tagProps;\n    const srcItem = monitor.getItem();\n    const srcType = monitor.getItemType();\n    if (srcType === DragDropItemTypes.SAMPLE) {\n      dropSample(srcItem.element);\n    } else if (srcType === DragDropItemTypes.MOLECULE) {\n      dropSample(\n        srcItem.element,\n        null,\n        true,\n      );\n    }\n  },\n  canDrop(tagProps, monitor) {\n    const srcType = monitor.getItemType();\n    const isCorrectType = srcType === DragDropItemTypes.SAMPLE\n      || srcType === DragDropItemTypes.MOLECULE;\n    return isCorrectType;\n  },\n};\n\nconst collect = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop()\n});\n\nclass SampleDetailsSolventsDnd extends React.Component {\n  render() {\n    const {\n      sample,\n      headIndex, materialGroup, deleteMaterial, onChange,\n      addDefaultSolvent, dropMaterial, switchEquiv,\n      isOver, canDrop, connectDropTarget, dropSample, deleteSolvent, onChangeSolvent\n    } = this.props;\n    const style = {\n      padding: '0px 0px',\n    };\n    if (isOver && canDrop) {\n      style.borderStyle = 'dashed';\n      style.borderColor = '#337ab7';\n    } else if (canDrop) {\n      style.borderStyle = 'dashed';\n    }\n    return connectDropTarget(\n      <div style={style}>\n        <SampleSolventGroup\n          sample={sample}\n          dropSample={dropSample}\n          deleteSolvent={deleteSolvent}\n          onChangeSolvent={onChangeSolvent}\n          headIndex={headIndex ?? 0}\n          materialGroup={materialGroup ?? ''}\n          deleteMaterial={deleteMaterial ?? (() => true)}\n          onChange={onChange ?? (() => true)}\n          addDefaultSolvent={addDefaultSolvent ?? (() => true)}\n          dropMaterial={dropMaterial ?? (() => true)}\n          switchEquiv={switchEquiv ?? (() => true)}\n        />\n      </div>\n    );\n  }\n}\n\nexport default DropTarget(\n  [DragDropItemTypes.SAMPLE, DragDropItemTypes.MOLECULE],\n  target,\n  collect,\n)(SampleDetailsSolventsDnd);\n\nSampleDetailsSolventsDnd.propTypes = {\n  sample: PropTypes.instanceOf(Sample).isRequired,\n  headIndex: PropTypes.number,\n  onChangeSolvent: PropTypes.func.isRequired,\n  dropSample: PropTypes.func.isRequired,\n  isOver: PropTypes.bool.isRequired,\n  canDrop: PropTypes.bool.isRequired,\n  connectDropTarget: PropTypes.func.isRequired,\n  deleteSolvent: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Sample from 'src/models/Sample';\nimport Molecule from 'src/models/Molecule';\nimport SampleDetailsSolventsDnd from 'src/apps/mydb/elements/details/samples/propertiesTab/SampleDetailsSolventsDnd';\n\nexport default class SampleDetailsSolvents extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const { sample } = props;\n    this.state = {\n      sample\n    };\n\n    this.dropSample = this.dropSample.bind(this);\n    this.deleteSolvent = this.deleteSolvent.bind(this);\n    this.onChangeSolvent = this.onChangeSolvent.bind(this);\n  }\n\n  onChangeSolvent(solvent) {\n    const { sample } = this.state;\n    sample.updateSolvent(solvent);\n    this.props.onChange(sample);\n  }\n\n  dropSample(srcSample, tagMaterial, tagGroup, extLabel, isNewSample = false) {\n    const { sample } = this.state;\n    let splitSample;\n\n    if (srcSample instanceof Molecule || isNewSample) {\n      // Create new Sample with counter\n      splitSample = Sample.buildNew(srcSample, sample.collection_id, tagGroup);\n    } else if (srcSample instanceof Sample) {\n      splitSample = srcSample.buildChild();\n    }\n\n    sample.addSolvent(splitSample);\n    this.props.onChange(sample);\n  }\n\n  deleteSolvent(solvent) {\n    const { sample } = this.state;\n    sample.deleteSolvent(solvent);\n    this.props.onChange(sample);\n  }\n\n  render() {\n    const {\n      sample, isOver, canDrop\n    } = this.props;\n    const style = {\n      padding: '2px 5px',\n    };\n    if (isOver && canDrop) {\n      style.borderStyle = 'dashed';\n      style.borderColor = '#337ab7';\n    } else if (canDrop) {\n      style.borderStyle = 'dashed';\n    }\n    return (\n      <SampleDetailsSolventsDnd\n        sample={sample}\n        dropSample={this.dropSample}\n        deleteSolvent={this.deleteSolvent}\n        onChangeSolvent={(changeEvent) => this.onChangeSolvent(changeEvent)}\n      />\n    );\n  }\n}\n\nSampleDetailsSolvents.propTypes = {\n  sample: PropTypes.instanceOf(Sample).isRequired,\n  onChange: PropTypes.func.isRequired,\n  isOver: PropTypes.bool.isRequired,\n  canDrop: PropTypes.bool.isRequired,\n};\n\nSampleDetailsSolvents.defaultProps = {\n  canDrop: true,\n  isOver: false\n};\n","/* eslint-disable max-len */\n/* eslint-disable react/sort-comp */\n/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Button, Checkbox, FormGroup, FormControl, InputGroup, ControlLabel,\n  Table, Glyphicon, Tabs, Tab, OverlayTrigger, Tooltip, ListGroup, ListGroupItem\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport NumeralInputWithUnitsCompo from 'src/apps/mydb/elements/details/NumeralInputWithUnitsCompo';\nimport NumericInputUnit from 'src/apps/mydb/elements/details/NumericInputUnit';\nimport TextRangeWithAddon from 'src/apps/mydb/elements/details/samples/propertiesTab/TextRangeWithAddon';\nimport { solventOptions } from 'src/components/staticDropdownOptions/options';\nimport SampleDetailsSolvents from 'src/apps/mydb/elements/details/samples/propertiesTab/SampleDetailsSolvents';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport InventoryFetcher from 'src/fetchers/InventoryFetcher';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport MoleculeFetcher from 'src/fetchers/MoleculesFetcher';\n\n// For REPO\nimport { permitOn } from 'src/components/common/uis';\n\n\nexport default class SampleForm extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      molarityBlocked: (props.sample.molarity_value || 0) <= 0,\n      isMolNameLoading: false,\n      moleculeFormulaWas: props.sample.molecule_formula,\n      sumFormula: null,\n    };\n\n    this.handleFieldChanged = this.handleFieldChanged.bind(this);\n    this.updateMolName = this.updateMolName.bind(this);\n    this.updateStereoAbs = this.updateStereoAbs.bind(this);\n    this.updateStereoRel = this.updateStereoRel.bind(this);\n    this.addMolName = this.addMolName.bind(this);\n    this.showStructureEditor = this.showStructureEditor.bind(this);\n    this.handleRangeChanged = this.handleRangeChanged.bind(this);\n    this.handleSolventChanged = this.handleSolventChanged.bind(this);\n    this.handleMetricsChange = this.handleMetricsChange.bind(this);\n    this.fetchNextInventoryLabel = this.fetchNextInventoryLabel.bind(this);\n    this.matchSelectedCollection = this.matchSelectedCollection.bind(this);\n    this.markSumFormulaUndefined = this.markSumFormulaUndefined.bind(this);\n    this.handleMassCalculation = this.handleMassCalculation.bind(this);\n    this.calculateMolecularMass = this.calculateMolecularMass.bind(this);\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps() {\n    this.setState({ isMolNameLoading: false });\n  }\n\n  formulaChanged() {\n    return this.props.sample.molecule_formula !== this.state.moleculeFormulaWas;\n  }\n\n  handleAmountChanged(amount) {\n    this.props.sample.setAmount(amount);\n  }\n\n  handleMolarityChanged(molarity) {\n    this.props.sample.setMolarity(molarity);\n    this.setState({ molarityBlocked: false });\n  }\n\n  handleDensityChanged(density) {\n    this.props.sample.setDensity(density);\n    this.setState({ molarityBlocked: true });\n  }\n\n  handleMolecularMassChanged(mass) {\n    this.props.sample.setMolecularMass(mass);\n  }\n\n  handleSolventChanged(sample) {\n    this.props.parent.setState({ sample });\n  }\n\n  showStructureEditor() {\n    this.props.parent.setState({\n      showStructureEditor: true,\n    });\n  }\n\n  structureEditorButton(isDisabled) {\n    return (\n      <Button\n        onClick={this.showStructureEditor}\n        disabled={isDisabled}\n      >\n        <Glyphicon glyph=\"pencil\" />\n      </Button>\n    );\n  }\n\n  // Info button display info message when one hover over it\n  infoButton() {\n    return (\n      <div>\n        <OverlayTrigger placement=\"top\" overlay={this.infoMessage()}>\n          <Button\n            className=\"btn btn-circle btn-sm btn-info\"\n          >\n            <Glyphicon glyph=\"info-sign\" />\n          </Button>\n        </OverlayTrigger>\n      </div>\n    );\n  }\n\n  infoMessage = () => (\n    <Tooltip id=\"assignButton\">\n      Information mirrored to the reaction table describing the content of pure\n      compound or amount of pure compound in a given solution\n    </Tooltip>\n  );\n\n  // Input components of sample details should be disabled if detail level\n  // does not allow to read their content\n  topSecretCheckbox(sample) {\n    if (permitOn(sample)) {\n      return (\n        <Checkbox\n          inputRef={(ref) => { this.topSecretInput = ref; }}\n          checked={sample.is_top_secret}\n          onChange={(e) => this.handleFieldChanged('is_top_secret', e.target.checked)}\n        >\n          Top secret\n        </Checkbox>\n      );\n    }\n\n    return (<span />);\n  }\n\n  drySolventCheckbox(sample) {\n    if (permitOn(sample)) {\n      return (\n        <Checkbox\n          checked={sample.dry_solvent}\n          onChange={(e) => this.handleFieldChanged('dry_solvent', e.target.checked)}\n        >\n          Anhydrous\n        </Checkbox>\n      );\n    }\n\n    return (<span />);\n  }\n\n  decoupledCheckbox(sample) {\n    if (permitOn(sample)) {\n      return (\n        <Checkbox\n          inputRef={(ref) => { this.decoupledInput = ref; }}\n          checked={sample.decoupled}\n          onChange={(e) => this.handleFieldChanged('decoupled', e.target.checked)}\n        >\n          Decoupled\n        </Checkbox>\n      );\n    }\n\n    return (<span />);\n  }\n\n  openMolName(sample) {\n    this.setState({ isMolNameLoading: true });\n    DetailActions.updateMoleculeNames(sample);\n  }\n\n  addMolName(moleculeName) {\n    this.setState({ isMolNameLoading: true });\n    DetailActions.updateMoleculeNames(this.props.sample, moleculeName.label);\n  }\n\n  updateMolName(e) {\n    const { sample } = this.props;\n    sample.molecule_name = e;\n    this.props.parent.setState({ sample });\n  }\n\n  updateStereoAbs(e) {\n    const { sample } = this.props;\n    if (!sample.stereo) sample.stereo = {};\n    sample.stereo.abs = e.value;\n    this.props.parent.setState({ sample });\n  }\n\n  updateStereoRel(e) {\n    const { sample } = this.props;\n    if (!sample.stereo) sample.stereo = {};\n    sample.stereo.rel = e.value;\n    this.props.parent.setState({ sample });\n  }\n\n  stereoAbsInput() {\n    const { sample } = this.props;\n\n    const absOptions = [\n      { label: 'any', value: 'any' },\n      { label: 'rac', value: 'rac' },\n      { label: 'meso', value: 'meso' },\n      { label: 'delta', value: 'delta' },\n      { label: 'lambda', value: 'lambda' },\n      { label: '(S)', value: '(S)' },\n      { label: '(R)', value: '(R)' },\n      { label: '(Sp)', value: '(Sp)' },\n      { label: '(Rp)', value: '(Rp)' },\n      { label: '(Sa)', value: '(Sa)' },\n      { label: '(Ra)', value: '(Ra)' },\n    ];\n\n    const value = sample.stereo ? sample.stereo.abs : 'any';\n\n    return (\n      <FormGroup>\n        <ControlLabel\n          style={{\n            display: 'block',\n            marginBottom: '5px',\n            whiteSpace: 'nowrap',\n            overflow: 'hidden',\n            textOverflow: 'ellipsis'\n          }}\n        >\n          Stereo Abs\n        </ControlLabel>\n        <Select\n          name=\"stereoAbs\"\n          clearable={false}\n          disabled={!permitOn(sample)}\n          options={absOptions}\n          onChange={this.updateStereoAbs}\n          value={value}\n        />\n      </FormGroup>\n    );\n  }\n\n  stereoRelInput() {\n    const { sample } = this.props;\n\n    const relOptions = [\n      { label: 'any', value: 'any' },\n      { label: 'syn', value: 'syn' },\n      { label: 'anti', value: 'anti' },\n      { label: 'p-geminal', value: 'p-geminal' },\n      { label: 'p-ortho', value: 'p-ortho' },\n      { label: 'p-meta', value: 'p-meta' },\n      { label: 'p-para', value: 'p-para' },\n      { label: 'cis', value: 'cis' },\n      { label: 'trans', value: 'trans' },\n      { label: 'fac', value: 'fac' },\n      { label: 'mer', value: 'mer' },\n    ];\n\n    const value = sample.stereo ? sample.stereo.rel : 'any';\n\n    return (\n      <FormGroup>\n        <ControlLabel\n          style={{\n            display: 'block',\n            marginBottom: '5px',\n            whiteSpace: 'nowrap',\n            overflow: 'hidden',\n            textOverflow: 'ellipsis'\n          }}\n        >\n          Stereo Rel\n        </ControlLabel>\n        <Select\n          name=\"stereoRel\"\n          clearable={false}\n          disabled={!permitOn(sample)}\n          options={relOptions}\n          onChange={this.updateStereoRel}\n          value={value}\n        />\n      </FormGroup>\n    );\n  }\n\n  moleculeInput() {\n    const { sample } = this.props;\n    const mnos = sample.molecule_names;\n    const mno = sample.molecule_name;\n    const newMolecule = !mno || sample._molecule.id !== mno.mid;\n    let moleculeNames = newMolecule ? [] : [mno];\n    if (sample && mnos) { moleculeNames = moleculeNames.concat(mnos); }\n    const onOpenMolName = () => this.openMolName(sample);\n    return (\n      <FormGroup>\n        <ControlLabel>Molecule name</ControlLabel>\n        <InputGroup>\n          <Select.Creatable\n            name=\"moleculeName\"\n            multi={false}\n            disabled={!permitOn(sample)}\n            options={moleculeNames}\n            onOpen={onOpenMolName}\n            onChange={this.updateMolName}\n            isLoading={this.state.isMolNameLoading}\n            value={!newMolecule && mno && mno.value}\n            onNewOptionClick={this.addMolName}\n            clearable={false}\n          />\n          <InputGroup.Button>\n            {this.structureEditorButton(!permitOn(sample))}\n          </InputGroup.Button>\n        </InputGroup>\n      </FormGroup>\n    );\n  }\n\n  handleRangeChanged(field, lower, upper) {\n    const { sample } = this.props;\n    sample.updateRange(field, lower, upper);\n    this.props.parent.setState({ sample });\n  }\n\n  /* eslint-disable camelcase */\n  matchSelectedCollection(currentCollection) {\n    const { sample } = this.props;\n    const { collection_labels } = sample.tag?.taggable_data || [];\n    const result = collection_labels?.filter((object) => object.id === currentCollection.id).length > 0;\n    return result;\n  }\n\n  fetchNextInventoryLabel() {\n    const { currentCollection } = UIStore.getState();\n    if (this.matchSelectedCollection(currentCollection)) {\n      InventoryFetcher.fetchInventoryOfCollection(currentCollection.id)\n        .then((result) => {\n          if (result && result.prefix && result.counter !== undefined) {\n            const { prefix, counter } = result;\n            const value = `${prefix}-${counter + 1}`;\n            this.handleFieldChanged('xref_inventory_label', value);\n          } else {\n            NotificationActions.add({\n              message: 'Could not find next inventory label. '\n              + 'Please assign a prefix and a counter for a valid collection first.',\n              level: 'error'\n            });\n          }\n        })\n        .catch((error) => {\n          console.error(error);\n        });\n    } else {\n      NotificationActions.add({\n        message: 'Please select the collection to which sample belongs first',\n        level: 'error'\n      });\n    }\n  }\n\n  handleFieldChanged(field, e, unit = null) {\n    const { sample } = this.props;\n    if (field === 'purity' && (e.value < 0 || e.value > 1)) {\n      e.value = 1;\n      sample[field] = e.value;\n      NotificationActions.add({\n        message: 'Purity value should be >= 0 and <=1',\n        level: 'error'\n      });\n    } else if (/amount/.test(field)) {\n      this.handleAmountChanged(e);\n    } else if (/molarity/.test(field)) {\n      this.handleMolarityChanged(e);\n    } else if (/density/.test(field)) {\n      this.handleDensityChanged(e);\n    } else if (/molecular_mass/.test(field)) {\n      this.handleMolecularMassChanged(e);\n    } else if (field === 'xref_flash_point') {\n      const object = { value: e, unit };\n      sample.xref = { ...sample.xref, flash_point: object };\n    } else if (/^xref_/.test(field)) {\n      sample.xref ||= {};\n      const key = field.split('xref_')[1];\n      sample.xref[key] = e;\n    } else if (e && (e.value || e.value === 0)) {\n      // for numeric inputs\n      sample[field] = e.value;\n    } else {\n      sample[field] = e;\n    }\n\n    sample.formulaChanged = this.formulaChanged();\n\n    if (field === 'decoupled') {\n      if (!sample[field]) {\n        sample.sum_formula = '';\n      } else {\n        if (sample.sum_formula.trim() === '') sample.sum_formula = 'undefined structure';\n        if (sample.residues && sample.residues[0] && sample.residues[0].custom_info) {\n          sample.residues[0].custom_info.polymer_type = 'self_defined';\n          delete sample.residues[0].custom_info.surface_type;\n        }\n      }\n      if (!sample[field] && ((sample.molfile || '') === '')) {\n        this.props.parent.setState({ sample });\n      } else {\n        this.props.parent.setState({ sample }, this.props.decoupleMolecule);\n      }\n    } else { this.props.parent.setState({ sample }); }\n  }\n\n  btnCalculateMolecularMass(sample) {\n    const { sumFormula } = this.state;\n\n    return (\n      <div>\n        <ControlLabel> &nbsp; </ControlLabel>\n        <div>\n          <OverlayTrigger\n            placement=\"top\"\n            overlay={\n              <Tooltip id=\"molMass\">calculate the molecular mass</Tooltip>\n            }\n          >\n            <Button\n              className=\"btn btn-sm\"\n              onClick={() => this.handleMassCalculation(sumFormula)}\n            >\n              <Glyphicon glyph=\"cog\" />\n            </Button>\n          </OverlayTrigger>\n        </div>\n      </div>\n    );\n  }\n\n  markUndefinedButton(sample) {\n    const resetTooltip = 'click to mark as undefined structure - it will reset the Molecular mass';\n\n    return (\n      <div>\n        <ControlLabel> &nbsp; </ControlLabel>\n        <div>\n          <OverlayTrigger\n            placement=\"top\"\n            overlay={\n              <Tooltip id=\"markUndefined\">{resetTooltip}</Tooltip>\n            }\n          >\n            <Button\n              className=\"btn btn-sm\"\n              onClick={this.markSumFormulaUndefined}\n            >\n              <Glyphicon glyph=\"tag\" />\n            </Button>\n          </OverlayTrigger>\n        </div>\n      </div>\n    );\n  }\n\n  handleMassCalculation(sumFormula) {\n    if (sumFormula === 'undefined structure') {\n      this.handleError();\n    } else {\n      this.calculateMolecularMass(sumFormula);\n    }\n  }\n\n  handleError() {\n    this.clearMolecularMass();\n    NotificationActions.add({\n      message: 'Could not calculate the molecular mass for this sum formula',\n      level: 'error'\n    });\n  }\n\n  markSumFormulaUndefined() {\n    this.setState({ sumFormula: 'undefined structure' });\n    this.handleFieldChanged('sum_formula', 'undefined structure');\n    this.clearMolecularMass();\n  }\n\n  calculateMolecularMass(sumFormula) {\n    MoleculeFetcher.calculateMolecularMassFromSumFormula(sumFormula)\n      .then((result) => {\n        if (result !== undefined) {\n          this.handleFieldChanged('molecular_mass', { value: result });\n        } else {\n          NotificationActions.add({\n            message: 'Could not calculate the molecular mass for this sum formula',\n            level: 'error'\n          });\n        }\n      })\n      .catch((error) => {\n        console.log(error);\n\n        NotificationActions.add({\n          message: 'An error occurred while calculating the molecular mass',\n          level: 'error'\n        });\n      });\n  }\n\n  clearMolecularMass() {\n    this.handleFieldChanged('molecular_mass', { value: null });\n  }\n\n  textInput(sample, field, label, disabled = false, readOnly = false) {\n    const condition = field !== 'external_label' && field !== 'xref_inventory_label'\n      && field !== 'name' && field !== 'location' && field !== 'short_label';\n    const updateValue = (/^xref_/.test(field) && sample.xref\n      ? sample.xref[field.split('xref_')[1]] : sample[field]) || '';\n    const onBlurHandler = field === 'sum_formula' ? this.handleMassCalculation : null;\n    const formControlStyle = field === 'name' ? { height: '38px', width: '100%' } : {};\n\n    return (\n      <FormGroup bsSize={condition ? 'small' : null}>\n        <ControlLabel\n          style={{\n            display: 'block',\n            marginBottom: '5px',\n            whiteSpace: 'nowrap',\n            overflow: 'hidden',\n            textOverflow: 'ellipsis'\n          }}\n        >\n          {label}\n        </ControlLabel>\n        <FormControl\n          id={`txinput_${field}`}\n          type=\"text\"\n          value={updateValue}\n          onChange={(e) => {\n            const newValue = e.target.value;\n            this.setState({ sumFormula: newValue });\n            this.handleFieldChanged(field, newValue);\n          }}\n          disabled={disabled || !permitOn(sample)}\n          readOnly={disabled || !permitOn(sample) || readOnly}\n          style={{ ...formControlStyle, width: '100%' }}\n        />\n      </FormGroup>\n    );\n  }\n\n  nextInventoryLabel(sample) {\n    const overlayMessage = sample.isNew\n      ? 'Inventory label will be auto generated on sample create,'\n       + ' if sample belongs to a collection with a predefined label'\n      : 'click to assign next inventory label';\n    return (\n      <div style={{ display: 'flex', flexDirection: 'column' }}>\n        <ControlLabel> &nbsp; </ControlLabel>\n        <OverlayTrigger\n          placement=\"top\"\n          overlay={\n            <Tooltip id=\"FetchNextInventoryLabel\">{overlayMessage}</Tooltip>\n          }\n        >\n          <Button\n            onClick={this.fetchNextInventoryLabel}\n            disabled={sample.isNew}\n          >\n            <Glyphicon glyph=\"tag\" />\n          </Button>\n        </OverlayTrigger>\n      </div>\n    );\n  }\n\n  inputWithUnit(sample, field, label) {\n    const value = sample.xref && sample.xref[field.split('xref_')[1]] ? sample.xref[field.split('xref_')[1]].value : '';\n    const unit = sample.xref && sample.xref[field.split('xref_')[1]] ? sample.xref[field.split('xref_')[1]].unit : '°C';\n    const isPolymer = (sample.molfile || '').indexOf(' R# ') !== -1;\n    const isDisabled = !permitOn(sample);\n    const polyDisabled = isPolymer || isDisabled;\n\n    return (\n      <NumericInputUnit\n        field=\"flash_point\"\n        inputDisabled={polyDisabled}\n        onInputChange={\n          (newValue, newUnit) => this.handleFieldChanged(field, newValue, newUnit)\n        }\n        unit={unit}\n        numericValue={value}\n        label={label}\n      />\n    );\n  }\n\n  sampleSolvent(sample) {\n    return (\n      <Select\n        ref={(input) => { this.solventInput = input; }}\n        id=\"solventInput\"\n        name=\"solvents\"\n        style={{ marginBottom: '15px' }}\n        multi={false}\n        options={solventOptions}\n        value={sample.solvent}\n        disabled={!permitOn(sample)}\n        onChange={e => this.handleFieldChanged('solvent', e)}\n      />\n    );\n  }\n\n  attachedAmountInput(sample, size) {\n    if (!sample.contains_residues) return false;\n\n    return this.numInput(\n      sample,\n      'defined_part_amount',\n      'g',\n      ['m', 'n'],\n      4,\n      'Attached',\n      'attachedAmountMg',\n      true,\n      'Weight of the defined part'\n    );\n  }\n\n  handleMetricsChange(e) {\n    this.props.sample.setUnitMetrics(e.metricUnit, e.metricPrefix);\n  }\n\n  numInput(\n    sample,\n    field,\n    unit,\n    prefixes,\n    precision,\n    label,\n    ref = '',\n    disabled = false,\n    title = '',\n    block = false,\n    notApplicable = false\n  ) {\n    if (sample.contains_residues && unit === 'l') return false;\n    const value = !isNaN(sample[field]) ? sample[field] : null;\n    const metricPrefixes = ['m', 'n', 'u'];\n    const disableFieldsForGasTypeSample = ['amount_l', 'amount_g', 'amount_mol'];\n    const gasSample = sample.gas_type === 'gas' && disableFieldsForGasTypeSample.includes(field);\n    const feedstockSample = sample.gas_type === 'feedstock' && field === 'amount_g';\n    let metric;\n    if (unit === 'l') {\n      metric = prefixes[1];\n    } else if (unit === 'mol') {\n      metric = prefixes[2];\n    } else {\n      metric = prefixes[0];\n    }\n    if (sample) {\n      switch (field) {\n        case 'amount_g': {\n          const isAmountGValid = sample.metrics && sample.metrics.length > 2;\n          const prefixAmountG = isAmountGValid ? sample.metrics[0] : 'm';\n          metric = metricPrefixes.indexOf(prefixAmountG) > -1 ? prefixAmountG : 'm';\n          break;\n        }\n        case 'amount_mol': {\n          const isAmountMolValid = sample.metrics && sample.metrics.length > 2;\n          const prefixAmountMol = isAmountMolValid ? sample.metrics[2] : 'm';\n          metric = metricPrefixes.indexOf(prefixAmountMol) > -1 ? prefixAmountMol : 'm';\n          break;\n        }\n        case 'amount_l': {\n          const isAmountLValid = sample.metrics && sample.metrics.length > 3;\n          const prefixAmountL = isAmountLValid ? sample.metrics[3] : 'm';\n          metric = metricPrefixes.indexOf(prefixAmountL) > -1 ? prefixAmountL : 'm';\n          break;\n        }\n        case 'molecular_mass': {\n          metric = 'n';\n          break;\n        }\n        default:\n          console.warn(`Unknown field: ${field}`);\n          metric = 'm';\n          break;\n      }\n    }\n\n    return (\n      <td key={field + sample.id.toString()}>\n        <NumeralInputWithUnitsCompo\n          value={notApplicable ? 'N/A' : value}\n          unit={unit}\n          label={label}\n          ref={ref}\n          metricPrefix={metric}\n          metricPrefixes={prefixes}\n          precision={precision}\n          title={title}\n          disabled={disabled || gasSample || feedstockSample}\n          block={block}\n          bsStyle={unit && sample.amount_unit === unit ? 'success' : 'default'}\n          onChange={(e) => this.handleFieldChanged(field, e)}\n          onMetricsChange={(e) => this.handleMetricsChange(e)}\n          id={`numInput_${field}`}\n        />\n      </td>\n    );\n  }\n\n  numInputWithoutTable(\n    sample,\n    field,\n    unit,\n    prefixes,\n    precision,\n    label,\n    ref = '',\n    disabled = false,\n    title = '',\n    block = false,\n    notApplicable = false\n  ) {\n    if (sample.contains_residues && unit === 'l') return false;\n    const value = !isNaN(sample[field]) ? sample[field] : null;\n\n    let mpx;\n    if (unit === 'l') {\n      mpx = prefixes[1];\n    } else if (unit === 'mol') {\n      mpx = prefixes[2];\n    } else {\n      mpx = prefixes[0];\n    }\n    return (\n      <NumeralInputWithUnitsCompo\n        key={field + sample.id.toString()}\n        value={notApplicable ? 'N/A' : value}\n        unit={unit}\n        label={label}\n        ref={ref}\n        metricPrefix={mpx}\n        metricPrefixes={prefixes}\n        precision={precision}\n        title={title}\n        disabled={disabled}\n        block={block}\n        bsStyle={unit && sample.amount_unit === unit ? 'success' : 'default'}\n        onChange={(e) => this.handleFieldChanged(field, e)}\n      />\n    );\n  }\n\n  sampleAmount(sample) {\n    const content = [];\n    const isDisabled = !permitOn(sample);\n    const volumeBlocked = !sample.has_density && !sample.has_molarity;\n\n    if (sample.isMethodDisabled('amount_value') === false) {\n      // if (sample.isMethodRestricted('molecule') === true) {\n      //   content.push(this.numInput(sample, 'amount_g', 'g', ['m', 'n'],\n      //     4, 'Amount', 'massMgInput', isDisabled, ''));\n      // } else {\n      content.push(this.numInput(\n        sample,\n        'amount_g',\n        'g',\n        ['m', 'n', 'u'],\n        4,\n        'Amount',\n        'massMgInput',\n        isDisabled,\n        ''\n      ));\n\n      if (!sample.contains_residues) {\n        content.push(this.numInput(\n          sample,\n          'amount_l',\n          'l',\n          ['m', 'u', 'n'],\n          5,\n          '\\u202F',\n          'l',\n          isDisabled,\n          '',\n          volumeBlocked\n        ));\n      }\n\n      content.push(this.numInput(\n        sample,\n        'amount_mol',\n        'mol',\n        ['m', 'n'],\n        4,\n        '\\u202F',\n        'amountInput',\n        isDisabled,\n        ''\n      ));\n\n      if (sample.contains_residues) {\n        content.push(this.attachedAmountInput(sample));\n      }\n\n      return content;\n    }\n\n    return (\n      <FormGroup>\n        <ControlLabel>Amount</ControlLabel>\n        <FormControl type=\"text\" disabled defaultValue=\"***\" readOnly />\n      </FormGroup>\n    );\n  }\n\n  sampleDescription(sample) {\n    return (\n      <FormGroup>\n        <ControlLabel>Description</ControlLabel>\n        <FormControl\n          componentClass=\"textarea\"\n          ref={(input) => { this.descriptionInput = input; }}\n          placeholder={sample.description}\n          value={sample.description || ''}\n          onChange={(e) => this.handleFieldChanged('description', e.target.value)}\n          rows={2}\n          disabled={!permitOn(sample)}\n        />\n      </FormGroup>\n    );\n  }\n\n  additionalProperties(sample) {\n    const isPolymer = (sample.molfile || '').indexOf(' R# ') !== -1;\n    const isDisabled = !permitOn(sample);\n    const polyDisabled = isPolymer || isDisabled;\n\n    return (\n      <ListGroup fill=\"true\" style={{marginBottom: 0}}>\n        <h5 style={{ fontWeight: 'bold' }}>Additional properties of the pure compound:</h5>\n        <ListGroupItem style={{ padding: '4px 4px 4px 4px', border: 'none' }}>\n          <div className=\"properties-form\" style={{ width: '100%' }}>\n            <table width=\"100%\">\n              <tbody>\n                <tr>\n                  <td colSpan=\"3\">\n                    <div style={{ width: '100%', display: 'flex', justifyContent: 'space-between' }}>\n                      <div style={{ width: '33%', paddingLeft: '5px' }}>\n                        {this.textInput(sample, 'xref_form', 'Form')}\n                      </div>\n                      <div style={{ width: '33%', paddingLeft: '5px' }}>\n                        {this.textInput(sample, 'xref_color', 'Color')}\n                      </div>\n                      <div style={{ width: '33%', paddingLeft: '5px' }}>\n                        {this.textInput(sample, 'xref_solubility', 'Soluble in ')}\n                      </div>\n                    </div>\n                  </td>\n                </tr>\n                <tr>\n                  <td colSpan=\"4\">\n                    <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n                      <div style={{ width: '25%', paddingLeft: '5px', marginTop: '12px' }}>\n                        <TextRangeWithAddon\n                          field=\"melting_point\"\n                          label=\"Melting point\"\n                          addon=\"°C\"\n                          value={sample.melting_point_display}\n                          disabled={polyDisabled}\n                          onChange={this.handleRangeChanged}\n                          tipOnText=\"Use space-separated value to input a Temperature range\"\n                        />\n                      </div>\n                      <div style={{ width: '25%', paddingLeft: '5px', marginTop: '12px' }}>\n                        <TextRangeWithAddon\n                          field=\"boiling_point\"\n                          label=\"Boiling point\"\n                          addon=\"°C\"\n                          value={sample.boiling_point_display}\n                          disabled={polyDisabled}\n                          onChange={this.handleRangeChanged}\n                          tipOnText=\"Use space-separated value to input a Temperature range\"\n                        />\n                      </div>\n                      <div style={{ width: '25%', paddingLeft: '5px', marginTop: '12px' }}>\n                        {this.inputWithUnit(sample, 'xref_flash_point', 'Flash Point')}\n                      </div>\n                      <div style={{ width: '25%', paddingLeft: '5px', marginTop: '12px' }}>\n                        {this.textInput(sample, 'xref_refractive_index', 'Refractive Index ')}\n                      </div>\n                    </div>\n                  </td>\n                </tr>\n              </tbody>\n            </table>\n          </div>\n        </ListGroupItem>\n      </ListGroup>\n    );\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  assignAmountType(reaction, sample) {\n    // eslint-disable-next-line no-underscore-dangle\n    reaction._products.map((s) => {\n      if (s.id === sample.id) {\n        // eslint-disable-next-line no-param-reassign\n        sample.amountType = 'real';\n      }\n      return sample;\n    });\n  }\n\n  render() {\n    const sample = this.props.sample || {};\n    const isPolymer = (sample.molfile || '').indexOf(' R# ') !== -1;\n    const isDisabled = !permitOn(sample);\n    const polyDisabled = isPolymer || isDisabled;\n    const molarityBlocked = isDisabled ? true : this.state.molarityBlocked;\n    const densityBlocked = isDisabled ? true : !molarityBlocked;\n    const { enableSampleDecoupled, customizableField } = this.props;\n\n    if (sample.belongTo !== undefined && sample.belongTo !== null) {\n      // assign amount type for product samples of reaction to real\n      this.assignAmountType(sample.belongTo, sample);\n    }\n\n    return (\n      <Table responsive className=\"sample-form\">\n        <tbody>\n          <ListGroup fill=\"true\">\n            <h5 style={{ fontWeight: 'bold' }}>Basic properties:</h5>\n            <ListGroupItem style={{ padding: '4px 4px 4px 4px', border: 'none' }}>\n              <div className=\"properties-form\" style={{ width: '100%' }}>\n                <tr>\n                  <td colSpan=\"4\">\n                    <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n                      <div style={{ flex: '2 1 0', paddingRight: '5px' }}>\n                        {this.moleculeInput()}\n                      </div>\n                      <div style={{ flex: '2 1 0', paddingLeft: '10px', paddingRight: '5px' }}>\n                        {this.textInput(sample, 'name', 'Sample name')}\n                      </div>\n                      <div style={{ flex: '1 1 0', marginRight: '5px', paddingLeft: '10px', paddingRight: '5px' }}>\n                        {this.stereoAbsInput()}\n                      </div>\n                      <div style={{ flex: '1 1 0', paddingLeft: '10px', marginRight: '5px' }}>\n                        {this.stereoRelInput()}\n                      </div>\n                      {enableSampleDecoupled && (\n                        <div style={{ paddingLeft: '10px' }} className=\"decoupled-checkbox\">\n                          {this.decoupledCheckbox(sample)}\n                        </div>\n                      )}\n                    </div>\n                  </td>\n                </tr>\n                <tr>\n                  <td colSpan=\"4\">\n                    <div style={{ display: 'flex' }}>\n                      <div style={{ flex: '1 1 0', paddingRight: '5px' }}>\n                        {this.textInput(sample, 'short_label', 'Short label', true)}\n                      </div>\n                      <div style={{ flex: '1 1 0', paddingLeft: '10px', paddingRight: '5px' }}>\n                        {this.textInput(sample, 'external_label', 'External label')}\n                      </div>\n                      <div\n                        style={{\n                          flex: '1 1 0',\n                          paddingLeft: '10px',\n                          paddingRight: '5px',\n                          display: 'flex',\n                          alignItems: 'flex-center',\n                          flexWrap: 'nowrap',\n                        }}\n                      >\n                        <div style={{ flex: 1, minWidth: '150px' }}>\n                          {this.textInput(sample, 'xref_inventory_label', 'Inventory label')}\n                        </div>\n                        <div style={{ marginLeft: 0 }}>\n                          {this.nextInventoryLabel(sample)}\n                        </div>\n                      </div>\n                      <div style={{ flex: '1 1 0', paddingLeft: '10px', paddingRight: '5px' }}>\n                        {this.textInput(sample, 'location', 'Location')}\n                      </div>\n                      <div\n                        style={{ display: 'flex', width: 'auto', paddingLeft: '5px' }}\n                        className=\"top-secret-checkbox\">\n                        {this.drySolventCheckbox(sample)}\n                      </div>\n                    </div>\n                  </td>\n                </tr>\n                {sample.decoupled\n                  && (\n                    <tr>\n                      {\n                        this.numInput(sample, 'molecular_mass', 'g/mol', ['m', 'n'], 5, 'Molecular mass', '', isDisabled)\n                      }\n                      <td colSpan=\"3\">\n                        <div style={{ display: 'flex' }}>\n                          {this.textInput(sample, 'sum_formula', 'Sum formula')}\n                          {this.btnCalculateMolecularMass(sample)}\n                          {this.markUndefinedButton(sample)}\n                        </div>\n                      </td>\n                    </tr>\n                  )}\n                <tr className=\"visible-hd\">\n                  <td colSpan=\"6\">\n                    <table>\n                      <tbody>\n                        <tr>\n                          <td style={{ width: '3%' }}>\n                            <div style={{ marginBottom: '15px' }}>\n                              {/* eslint-disable-next-line jsx-a11y/label-has-for */}\n                              <label style={{ height: '14px' }} />\n                              <InputGroup.Button id=\"email\" name=\"email\" type=\"email\" placeholder=\"Email Address\">\n                                {this.infoButton()}\n                              </InputGroup.Button>\n                            </div>\n                          </td>\n                          {this.sampleAmount(sample)}\n                          <td style={{ width: '47%' }}>\n                            <div className=\"name-form\" style={{ marginBottom: '15px' }}>\n                              <Tabs\n                                style={{ width: '60%' }}\n                                id=\"tab-density-molarity\"\n                                defaultActiveKey={sample.molarity_value !== 0 ? 'molarity' : 'density'}\n                              >\n                                <Tab eventKey=\"density\" title=\"Density\">\n                                  {\n                                    this.numInputWithoutTable(sample, 'density', 'g/ml', ['n'], 5, '', '', polyDisabled, '', false, isPolymer)\n                                  }\n                                </Tab>\n                                <Tab eventKey=\"molarity\" title=\"Molarity\">\n                                  {\n                                    this.numInputWithoutTable(sample, 'molarity_value', 'M', ['n'], 5, '', '', polyDisabled, '', false, isPolymer)\n                                  }\n                                </Tab>\n                              </Tabs>\n                              <div style={{ width: '45%', paddingLeft: '5px' }}>\n                                {\n                                  this.numInputWithoutTable(sample, 'purity', 'n', ['n'], 5, 'Purity/Concentration', '', isDisabled)\n                                }\n                              </div>\n                            </div>\n                          </td>\n                        </tr>\n                      </tbody>\n                    </table>\n                  </td>\n                </tr>\n              </div>\n            </ListGroupItem>\n          </ListGroup>\n          {this.additionalProperties(sample)}\n          <tr>\n            <td colSpan=\"4\">\n              <SampleDetailsSolvents\n                sample={sample}\n                onChange={this.handleSolventChanged}\n              />\n            </td>\n          </tr>\n          <tr style={{ paddingTop: '15px' }}>\n            <td colSpan=\"4\">{this.sampleDescription(sample)}</td>\n          </tr>\n          <td colSpan=\"4\">\n            {customizableField}\n          </td>\n\n        </tbody>\n      </Table>\n    );\n  }\n}\n\nSampleForm.propTypes = {\n  sample: PropTypes.object,\n  parent: PropTypes.object,\n  customizableField: PropTypes.func.isRequired,\n  enableSampleDecoupled: PropTypes.bool,\n  decoupleMolecule: PropTypes.func.isRequired,\n};\n\nSampleForm.defaultProps = {\n  enableSampleDecoupled: false,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { AgGridReact } from 'ag-grid-react';\n\nfunction dateFormatter(params) {\n  const dateTime = new Date(params.value);\n  const options = { year: 'numeric', month: 'short', day: 'numeric' };\n  return dateTime.toLocaleDateString('en-GB', options);\n}\n\nexport default class SampleComputedProps extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.onGridReady = this.onGridReady.bind(this);\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if (this.gridApi) this.gridApi.setGridOption('rowData', nextProps.cprops);\n  }\n\n  onGridReady(params) {\n    this.gridApi = params.api;\n  }\n\n  render() {\n    const { cprops } = this.props;\n    if (cprops.length === 0) {\n      return (\n        <span>No computed properties found. </span>\n      );\n    }\n\n    const columnDefs = [\n      {\n        headerName: 'MaP',\n        headerTooltip: 'Maximum Potential',\n        field: 'max_potential',\n        width: 67,\n      },\n      {\n        headerName: 'MiP',\n        headerTooltip: 'Minimum Potential',\n        field: 'min_potential',\n        width: 63,\n      },\n      {\n        headerName: 'MeP',\n        headerTooltip: 'Mean Potential',\n        field: 'mean_potential',\n        width: 66,\n      },\n      {\n        headerName: 'MeAbsP',\n        headerTooltip: 'Mean Absolute Potential',\n        width: 88,\n        field: 'mean_abs_potential',\n      },\n      {\n        headerName: 'HOMO',\n        field: 'homo',\n        width: 80,\n      },\n      {\n        headerName: 'LUMO',\n        field: 'lumo',\n        width: 77,\n      },\n      {\n        headerName: 'IP',\n        field: 'ip',\n        width: 53,\n      },\n      {\n        headerName: 'EA',\n        field: 'ea',\n        width: 55,\n      },\n      {\n        headerName: 'Dipol',\n        field: 'dipol_debye',\n        width: 72,\n      },\n      {\n        headerName: 'S1',\n        valueGetter: params => params.data.tddft.s1_energy,\n        width: 55,\n      },\n      {\n        headerName: 'T1',\n        valueGetter: params => params.data.tddft.t1_energy,\n        width: 55,\n      },\n      {\n        headerName: 'deltaEST',\n        valueGetter: params => params.data.tddft.delta_est,\n        width: 90,\n      },\n      {\n        headerName: 'Singlet osc str.',\n        valueGetter: params => params.data.tddft.s1_osc,\n        width: 125,\n      },\n      {\n        headerName: 'TADF rate',\n        valueGetter: params => params.data.tddft.tadf_rate,\n        width: 105,\n      },\n      {\n        headerName: 'Date',\n        headerTooltip: 'Request Date',\n        field: 'created_at',\n        width: 81,\n        valueFormatter: dateFormatter,\n      },\n    ];\n\n    return (\n      <div className=\"ag-theme-balham\">\n        <AgGridReact\n          onGridReady={this.onGridReady}\n          suppressCellFocus\n          columnDefs={columnDefs}\n          defaultColDef={{ resizable: true }}\n          editable={false}\n          rowData={cprops}\n          domLayout=\"autoHeight\"\n        />\n      </div>\n    );\n  }\n}\n\nSampleComputedProps.propTypes = {\n  cprops: PropTypes.arrayOf(PropTypes.object).isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ButtonGroup, Button, ControlLabel } from 'react-bootstrap';\n\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\n\nimport ComputedPropsGraphContainer from 'src/components/computedProps/ComputedPropsGraphContainer';\nimport SampleComputedProps from 'src/components/computedProps/SampleComputedProps';\nimport { ConfirmModal } from 'src/components/common/ConfirmModal';\n\nexport default class ComputedPropsContainer extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      showGraph: false,\n      compute: false\n    };\n\n    this.onClickComputeBtn = this.onClickComputeBtn.bind(this);\n    this.computePropsFromSmiles = this.computePropsFromSmiles.bind(this);\n    this.toggleGraph = this.toggleGraph.bind(this);\n  }\n\n  onClickComputeBtn() {\n    this.setState({ compute: true });\n  }\n\n  computePropsFromSmiles(shouldPerform) {\n    if (shouldPerform) {\n      const { sample } = this.props;\n      ElementActions.computePropsFromSmiles(sample.id);\n    }\n\n    this.setState({ compute: false });\n  }\n\n  toggleGraph() {\n    this.setState({ showGraph: !this.state.showGraph });\n  }\n\n  render() {\n    const { sample } = this.props;\n    const cprops = sample.molecule_computed_props || [];\n    let lastCProp = null;\n\n    if (cprops && cprops.length > 0) {\n      cprops.sort((a, b) => a.updated_at - b.updated_at);\n      lastCProp = cprops[cprops.length - 1];\n    }\n\n    const { compute, showGraph } = this.state;\n    let text = 'Show Graph';\n    let arrow = <i className=\"fa fa-angle-double-down\" />;\n\n    if (showGraph) {\n      text = 'Hide Graph';\n      arrow = <i className=\"fa fa-angle-double-up\" />;\n    }\n    const confirmText = (\n      <ControlLabel>Would you like to simulate this molecule ?</ControlLabel>\n    );\n\n    return (\n      <div>\n        <SampleComputedProps cprops={cprops} />\n        <Button\n          bsStyle=\"success\"\n          bsSize=\"small\"\n          className=\"button-right\"\n          onClick={this.onClickComputeBtn}\n          style={{ marginTop: '10px', marginBottom: '10px' }}\n        >\n          <i className=\"fa fa-paper-plane\" />\n          &nbsp;&nbsp; Compute\n        </Button>\n        <ButtonGroup vertical block>\n          <Button\n            bsSize=\"xsmall\"\n            style={{ marginBottom: '20px', backgroundColor: '#ddd' }}\n            onClick={this.toggleGraph}\n          >\n            {text} &nbsp; {arrow}\n          </Button>\n        </ButtonGroup>\n        <ComputedPropsGraphContainer\n          show={showGraph}\n          graphData={[{ name: sample.short_label, props: lastCProp }]}\n        />\n        <ConfirmModal\n          showModal={compute}\n          title=\"Are you sure ?\"\n          content={confirmText}\n          onClick={this.computePropsFromSmiles}\n        />\n      </div>\n    );\n  }\n}\n\nComputedPropsContainer.propTypes = {\n  sample: PropTypes.object.isRequired,\n};\n","const evalMsg = (score) => {\n  if (score === 'incomplete analysis') {\n    return 'MS, 13C NMR and 1H NMR must exist.';\n  } else if (score <= -4) {\n    return 'Your data seems to contain errors according to your analysis. Please check the description of the analysis’ content.';\n  } else if (score <= -3) {\n    return 'Your analysis might be right, but we are unable to approve it without data and additional information. Please add data or refer your data to already submitted samples with full analysis.';\n  } else if (score <= -1) {\n    return 'Your analysis might be right, please add data to approve it.';\n  } else if (score <= 0) {\n    return 'Data to your analyses is detected but a reliable automated evaluation is not possible.';\n  } else if (score <= 4) {\n    return 'Check your data, the data does not reflect your analysis.';\n  } else if (score <= 7) {\n    return 'Check your data, the data does not reflect your analysis in a comprehensive way.';\n  } else if (score <= 9) {\n    return 'Your data is almost complete, please check for further data available.';\n  } else if (score <= 10) {\n    return 'Your data is consistent with the theoretically expected ones, thank you!';\n  }\n  return 'Unknown status.';\n};\n\nconst isDisabled = ({ dav, qck, conclusionOwn }) => {\n  const { ansQck } = qck;\n  return dav === undefined && ansQck === undefined && conclusionOwn === undefined;\n};\n\nconst isIncompDf = ({ dav, qck }) => qck && dav === undefined; // no dav, yes qck\n\nconst isDavGood = ({ dav }) => !!dav;\n\nconst isQckGood = ({ qck }) => qck.ansQck;\n\nconst isQcpGood = ({ conclusionOwn }) => conclusionOwn;\n\nconst isOnlyPrc = ({ dav, conclusionOwn }) => dav !== undefined && conclusionOwn === undefined;\nconst isMorePrc = ({ dav, conclusionOwn }) => dav !== undefined && conclusionOwn !== undefined;\n\nconst evalScoreStd1 = (ansHnmr, ansCnmr, ansMs, ansIr) => {\n  const isOneDavFail = !isDavGood(ansHnmr) || !isDavGood(ansCnmr) || !isDavGood(ansMs);\n  const isAllQckGood = isQckGood(ansHnmr) && isQckGood(ansCnmr) && isQckGood(ansMs);\n  const isQcpGoodBothHnmrCnmr = isQcpGood(ansHnmr) && isQcpGood(ansCnmr);\n  const isQcpGoodBothMsIr = isQcpGood(ansMs) && isQcpGood(ansIr);\n  const isQcpGoodHnmrOrCnmr = isQcpGood(ansHnmr) || isQcpGood(ansCnmr);\n  const isQcpGoodMsOrIr = isQcpGood(ansMs) || isQcpGood(ansIr);\n\n  if (isOneDavFail) return 'nonZeroDisabled';\n  if (!isDavGood(ansIr)\n    && isAllQckGood\n  ) return -2;\n  if (!isDavGood(ansIr)) return -4;\n\n  if (isAllQckGood\n    && isQcpGoodBothHnmrCnmr && isQcpGoodBothMsIr\n  ) return 10;\n\n  if (isAllQckGood\n    && isQcpGoodBothHnmrCnmr && isQcpGoodMsOrIr\n  ) return 9;\n\n  if (isAllQckGood\n    && isQcpGoodBothHnmrCnmr\n  ) return 8;\n\n  if (isAllQckGood\n    && isQcpGoodHnmrOrCnmr && isQcpGoodBothMsIr\n  ) return 7;\n\n  if (isAllQckGood\n    && isQcpGoodHnmrOrCnmr && isQcpGoodMsOrIr\n  ) return 6;\n\n  if (isAllQckGood\n    && isQcpGoodHnmrOrCnmr\n  ) return 5;\n\n  if (isAllQckGood\n    && isQcpGoodBothMsIr\n  ) return 4;\n\n  if (isAllQckGood\n    && isQcpGoodMsOrIr\n  ) return 3;\n\n  if (isAllQckGood) return 2;\n\n  return 0;\n};\n\nconst evalScore = (ansHnmr, ansCnmr, ansMs, ansIr, curation) => {\n  switch (curation) {\n    case 1:\n      return 'Unknow curation.';\n    case 2:\n    default:\n      return evalScoreStd1(ansHnmr, ansCnmr, ansMs, ansIr);\n  }\n};\n\nconst evalCurTitle = (curation) => {\n  switch (curation) {\n    case 1:\n      return 'No curation standard';\n    case 2:\n    default:\n      return 'Standard: Curation standard I: experimental organic chemistry';\n  }\n};\n\nconst evalLabel = (score) => {\n  if (typeof score === 'string') return 'box-qcsum-score bc-bs-dark';\n  if (score === 0) return 'box-qcsum-score bc-bs-warning';\n  return score > 0\n    ? 'box-qcsum-score bc-bs-success'\n    : 'box-qcsum-score bc-bs-danger';\n};\n\nconst evalScoreTxt = (score) => {\n  if (typeof score === 'string') return '-';\n  return score;\n};\n\nexport { evalMsg, evalScore, evalLabel, evalScoreTxt, evalCurTitle };\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { evalCurTitle } from 'src/apps/mydb/elements/details/samples/qcTab/components/summary/eval';\n\nconst AreaTitle = ({ curation }) => (\n  <div>\n    <h4>\n      <span>\n        Curation aspects of available data\n      </span>\n    </h4>\n    <h4>\n      <span className=\"underline-qc\">\n        {evalCurTitle(curation)}\n      </span>\n    </h4>\n  </div>\n);\n\nAreaTitle.propTypes = {\n  curation: PropTypes.number.isRequired,\n};\n\nexport default AreaTitle;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nimport { evalMsg, evalLabel, evalScoreTxt } from 'src/apps/mydb/elements/details/samples/qcTab/components/summary/eval';\n\nconst tpMsg = score => (\n  <Tooltip id=\"tp-msg\">\n    {evalMsg(score)}\n  </Tooltip>\n);\n\nconst LineScore = ({ score }) => {\n  const clsName = evalLabel(score);\n  const scoreTxt = evalScoreTxt(score);\n\n  return (\n    <OverlayTrigger placement=\"top\" overlay={tpMsg(score)}>\n      <div className={clsName}>\n        <span className=\"txt-qcsum-score\">{scoreTxt}</span>\n      </div>\n    </OverlayTrigger>\n  );\n};\n\nLineScore.propTypes = {\n  score: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.number,\n  ]).isRequired,\n};\n\nexport default LineScore;\n","import React from 'react';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nconst tpBadge = txt => (\n  <Tooltip id={`tp${txt}`}>\n    { txt }\n  </Tooltip>\n);\n\nconst BadgeNotAvailable = () => (\n  <OverlayTrigger placement=\"top\" overlay={tpBadge('Not Available!')}>\n    <div className=\"qc-dark\" />\n  </OverlayTrigger>\n);\n\nconst BadgeSuccess = () => (\n  <OverlayTrigger placement=\"top\" overlay={tpBadge('Pass')}>\n    <div className=\"qc-success\" />\n  </OverlayTrigger>\n);\n\nconst BadgeFail = () => (\n  <OverlayTrigger placement=\"top\" overlay={tpBadge('Fail')}>\n    <div className=\"qc-failure\" />\n  </OverlayTrigger>\n);\n\nconst BadgeDefault = () => (\n  <div className=\"qc-default\" />\n);\n\nexport {\n  BadgeNotAvailable,\n  BadgeSuccess,\n  BadgeFail,\n  BadgeDefault,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n  BadgeSuccess,\n  BadgeFail,\n  BadgeDefault,\n} from 'src/apps/mydb/elements/details/samples/qcTab/components/summary/common';\n\n/*\nconst tpUv = (\n  <Tooltip id=\"tpUv\">\n    UV\n  </Tooltip>\n);\n\nconst tpXr = (\n  <Tooltip id=\"tpXr\">\n    X-ray\n  </Tooltip>\n);\n*/\n\nconst LineTitle = () => (\n  <div className=\"card-qcsum\">\n    <span className=\"qc-title qc-placeholder\">.</span>\n    <span><strong>1H</strong></span>\n    <span><strong>13C</strong></span>\n    <span><strong>MS</strong></span>\n    <span><strong>IR</strong></span>\n    <span><strong>UV</strong></span>\n    <span><strong>X-ray</strong></span>\n    <span><strong>Rf</strong></span>\n  </div>\n);\n\nconst statusLabel = status => status ? <BadgeSuccess /> : <BadgeFail />;\n\nconst LineQcp = ({\n  ansHnmr, ansCnmr, ansMs, ansIr,\n}) => (\n  <div className=\"card-qcsum\">\n    <span className=\"qc-title\">Data Evaluation</span>\n    <span>{statusLabel(ansHnmr.qcp.ansMac && ansHnmr.qcp.ansOwn)}</span>\n    <span>{statusLabel(ansCnmr.qcp.ansMac && ansCnmr.qcp.ansOwn)}</span>\n    <span>{statusLabel(ansMs.qcp.matchMass)}</span>\n    <span>{statusLabel(ansIr.qcp.ansMac80 && ansIr.qcp.ansOwn80 && ansIr.qcp.ansMacF90 && ansIr.qcp.ansOwnF90)}</span>\n    <span><BadgeDefault /></span>\n    <span><BadgeDefault /></span>\n    <span><BadgeDefault /></span>\n  </div>\n);\n\nLineQcp.propTypes = {\n  ansHnmr: PropTypes.object.isRequired,\n  ansCnmr: PropTypes.object.isRequired,\n  ansMs: PropTypes.object.isRequired,\n  ansIr: PropTypes.object.isRequired,\n};\n\nconst LineQck = ({ ansHnmr, ansCnmr, ansMs }) => (\n  <div className=\"card-qcsum\">\n    <span className=\"qc-title\">Analysis Check</span>\n    <span>{statusLabel(ansHnmr.qck.ansQck)}</span>\n    <span>{statusLabel(ansCnmr.qck.ansQck)}</span>\n    <span>{statusLabel(ansMs.qck.ansQck)}</span>\n    <span><BadgeDefault /></span>\n    <span><BadgeDefault /></span>\n    <span><BadgeDefault /></span>\n    <span><BadgeDefault /></span>\n  </div>\n);\n\nLineQck.propTypes = {\n  ansHnmr: PropTypes.object.isRequired,\n  ansCnmr: PropTypes.object.isRequired,\n  ansMs: PropTypes.object.isRequired,\n};\n\nconst LineDav = ({\n  ansHnmr, ansCnmr, ansMs, ansIr,\n}) => (\n  <div className=\"card-qcsum\">\n    <span className=\"qc-title\">Data Availability</span>\n    <span>{statusLabel(ansHnmr.dav)}</span>\n    <span>{statusLabel(ansCnmr.dav)}</span>\n    <span>{statusLabel(ansMs.dav)}</span>\n    <span>{statusLabel(ansIr.dav)}</span>\n    <span><BadgeDefault /></span>\n    <span><BadgeDefault /></span>\n    <span><BadgeDefault /></span>\n  </div>\n);\n\nLineDav.propTypes = {\n  ansHnmr: PropTypes.object.isRequired,\n  ansCnmr: PropTypes.object.isRequired,\n  ansMs: PropTypes.object.isRequired,\n  ansIr: PropTypes.object.isRequired,\n};\n\nexport { LineTitle, LineQcp, LineQck, LineDav };\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport LineScore from 'src/apps/mydb/elements/details/samples/qcTab/components/summary/LineScore';\nimport {\n  LineTitle,\n  LineQcp,\n  LineQck,\n  LineDav,\n} from 'src/apps/mydb/elements/details/samples/qcTab/components/summary/LineSummary';\nimport { evalScore } from 'src/apps/mydb/elements/details/samples/qcTab/components/summary/eval';\n\nconst AreaSummary = ({\n  ansHnmr, ansCnmr, ansMs, ansIr, curation,\n}) => {\n  const score = evalScore(ansHnmr, ansCnmr, ansMs, ansIr, curation);\n  return (\n    <div>\n      <div className=\"col-qcsum-l\">\n        <LineTitle />\n        <LineDav\n          ansHnmr={ansHnmr}\n          ansCnmr={ansCnmr}\n          ansMs={ansMs}\n          ansIr={ansIr}\n        />\n        <LineQcp\n          ansHnmr={ansHnmr}\n          ansCnmr={ansCnmr}\n          ansMs={ansMs}\n          ansIr={ansIr}\n        />\n        <LineQck\n          ansHnmr={ansHnmr}\n          ansCnmr={ansCnmr}\n          ansMs={ansMs}\n        />\n      </div>\n      <div className=\"col-qcsum-r\">\n        <LineScore score={score} />\n      </div>\n    </div>\n  );\n};\n\nAreaSummary.propTypes = {\n  ansHnmr: PropTypes.object.isRequired,\n  ansCnmr: PropTypes.object.isRequired,\n  ansMs: PropTypes.object.isRequired,\n  ansIr: PropTypes.object.isRequired,\n  curation: PropTypes.number.isRequired,\n};\n\nexport default AreaSummary;\n","import React from 'react';\nimport { Tooltip, OverlayTrigger } from 'react-bootstrap';\n\nconst infoTp = (\n  <Tooltip id=\"tp-qc-info\" className=\"card-qc\">\n    <p>ChemSpectra (0.10)</p>\n    <p>NMRShiftDB (2.0)</p>\n    <p>ChemSpectraDeepIr (0.10)</p>\n  </Tooltip>\n);\n\nconst BlockTitle = () => (\n  <div>\n    <h4>\n      <span className=\"underline-qc\">\n        Analysis of digital research data for plausibility and Quality Control - QC\n      </span>\n    </h4>\n    <h4>\n      <span>Information </span>\n      <OverlayTrigger\n        placement=\"right\"\n        overlay={infoTp}\n        style={{ marginLeft: '10px' }}\n      >\n        <i className=\"fa fa-info-circle\" style={{ color: '#337ab7' }} />\n      </OverlayTrigger>\n    </h4>\n    <h4>\n      <span>Analysis</span>\n    </h4>\n  </div>\n);\n\nexport default BlockTitle;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SvgFileZoomPan from 'react-svg-file-zoom-pan-latest';\n\nconst QcMolView = ({ svg }) => {\n  if (!svg) return null;\n  return (\n    <div className=\"grid-qc-mol-view\">\n      <SvgFileZoomPan\n        svg={svg}\n        duration={300}\n        resize\n      />\n    </div>\n  );\n};\n\nQcMolView.propTypes = {\n  svg: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.bool,\n  ]),\n};\n\nQcMolView.defaultProps = {\n  svg: false,\n};\n\nexport default QcMolView;\n","import React from 'react';\nimport { Label, Tooltip, OverlayTrigger } from 'react-bootstrap';\n\nconst iconTp = margin => (\n  <Tooltip id=\"ans-tp\">\n    max { margin } failure allowed.\n  </Tooltip>\n);\n\nconst iconByBool = result => (\n  result\n    ? <Label bsStyle=\"success\" className=\"label-qc\">Pass</Label>\n    : <Label bsStyle=\"danger\" className=\"label-qc\">Fail</Label>\n);\n\nconst iconByMargin = (result, margin = 0) => (\n  <OverlayTrigger placement=\"right\" overlay={iconTp(margin)}>\n    { iconByBool(result) }\n  </OverlayTrigger>\n);\n\nconst iconTpMs = (\n  <Tooltip id=\"ans-tp-ms\">\n    Whether exact molecular mass is matched in the scan?\n  </Tooltip>\n);\n\nconst iconMs = result => (\n  <OverlayTrigger placement=\"right\" overlay={iconTpMs}>\n    { iconByBool(result) }\n  </OverlayTrigger>\n);\n\nconst statusTp = txt => <Tooltip id=\"status-tp\">{ txt }</Tooltip>;\n\nconst iconStatus = (status) => {\n  switch (status) {\n    case 'accept':\n      return (\n        <OverlayTrigger placement=\"top\" overlay={statusTp(status)}>\n          <i className=\"fa fa-check-circle-o\" style={{ color: '#4caf50' }} />\n        </OverlayTrigger>\n      );\n    case 'warning':\n      return (\n        <OverlayTrigger placement=\"top\" overlay={statusTp(status)}>\n          <i className=\"fa fa-exclamation-circle\" style={{ color: '#ffc107' }} />\n        </OverlayTrigger>\n      );\n    case 'reject':\n      return (\n        <OverlayTrigger placement=\"top\" overlay={statusTp(status)}>\n          <i className=\"fa fa-times-circle-o\" style={{ color: '#e91e63' }} />\n        </OverlayTrigger>\n      );\n    case 'missing':\n      return (\n        <OverlayTrigger placement=\"top\" overlay={statusTp(status)}>\n          <i className=\"fa fa-question-circle-o\" style={{ color: '#5d4037' }} />\n        </OverlayTrigger>\n      );\n    case 'unknown':\n      return (\n        <OverlayTrigger placement=\"top\" overlay={statusTp(status)}>\n          <i className=\"fa fa-question-circle-o\" style={{ color: '#5d4037' }} />\n        </OverlayTrigger>\n      );\n    default:\n      return null;\n  }\n};\n\nexport {\n  iconByMargin,\n  iconByBool,\n  iconMs,\n  iconStatus,\n};\n","const numFormat = (input, digit = 2) => parseFloat(input).toFixed(digit);\n\nconst realFormat = (val, status) => {\n  if (status === 'missing') {\n    return '- - -';\n  }\n  return numFormat(val);\n};\n\nconst makeDav = (hasFiles, hasValidFiles) => {\n  if (hasFiles !== undefined) return hasValidFiles;\n  return undefined;\n};\n\nexport { numFormat, realFormat, makeDav };\n","import React from 'react';\nimport { Table } from 'react-bootstrap';\n\nimport { iconStatus } from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/icon';\nimport { numFormat, realFormat } from 'src/apps/mydb/elements/details/samples/qcTab/utils/common';\n\nconst tableNmr = (shifts = []) => (\n  <Table responsive striped condensed hover>\n    <thead>\n      <tr>\n        <th>Atom</th>\n        <th>Prediction (ppm)</th>\n        <th>Real (ppm)</th>\n        <th>Diff (ppm)</th>\n        <th>Machine</th>\n        <th>Owner</th>\n      </tr>\n    </thead>\n    <tbody>\n      {\n        shifts\n          .sort((a, b) => a.atom - b.atom)\n          .map((s, idx) => (\n            <tr key={`${s.atom}${idx}`}>\n              <td>{s.atom}</td>\n              <td>{numFormat(s.prediction)}</td>\n              <td>{realFormat(s.real, s.status)}</td>\n              <td>{realFormat(s.diff, s.status)}</td>\n              <td>{iconStatus(s.status)}</td>\n              <td>{iconStatus(s.statusOwner)}</td>\n            </tr>\n          ))\n      }\n    </tbody>\n  </Table>\n);\n\nconst formatQV = (ops) => {\n  if (ops[0].insert === '\\n') return ops.slice(1);\n  return ops;\n};\n\nexport {\n  tableNmr,\n  formatQV,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Panel, Alert } from 'react-bootstrap';\n\nimport QuillViewer from 'src/components/QuillViewer';\nimport QcMolView from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/QcMolView';\nimport { iconByMargin } from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/icon';\nimport {\n  tableNmr,\n  formatQV,\n} from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/nmr';\n\nconst emptyBlock = () => (\n  <div className=\"card-qc\">\n    <h5>\n      <span>1. Analysis of the provided digital NMR spectroscopy data: 1H NMR:</span>\n    </h5>\n    <div className=\"card-qc\">\n      <Alert bsStyle=\"danger\">\n        No Information. Please upload spectrum & make predictions in Spectra Editor.\n      </Alert>\n    </div>\n  </div>\n);\n\nconst BlockHnmr = ({ ansHnmr }) => {\n  if (!ansHnmr.exist) return emptyBlock();\n  const { qck, qcp } = ansHnmr;\n  const {\n    shifts,\n    svg,\n    desc,\n    sigSent,\n    sigReal,\n    numAll,\n    numAcpMac,\n    numAcpOwn,\n    ansMac,\n    ansOwn,\n  } = qcp;\n  const {\n    countExpAtoms,\n    countIdnAtoms,\n    ansQck,\n  } = qck;\n\n  return (\n    <div className=\"card-qc\">\n      <h5>\n        <span>1. Analysis of the provided digital NMR spectroscopy data: 1H NMR:</span>\n      </h5>\n      <div className=\"card-qc\">\n        <div\n          style={{ display: 'inline' }}\n        >\n          <QuillViewer\n            value={formatQV(desc)}\n          />\n        </div>\n        <div>\n          <span>\n            Expected protons: {countExpAtoms}.\n            Identified protons: {countIdnAtoms}.\n          </span>\n          {iconByMargin(ansQck, 0)}\n        </div>\n        <div>\n          <span>\n            Signals detected: {sigSent}\n          </span>\n        </div>\n        <div>\n          <span>\n            Signals detected (NMRShiftDB): {sigReal}\n          </span>\n        </div>\n        <div>\n          <span>\n            Correctly assigned (machine):\n            ({numAcpMac}/{numAll})\n            {iconByMargin(ansMac, 1)}\n          </span>\n        </div>\n        <div>\n          <span>\n            Correctly assigned (owner):\n            ({numAcpOwn}/{numAll})\n            {iconByMargin(ansOwn, 0)}\n          </span>\n        </div>\n        <Panel\n          className=\"qc-detail-panel\"\n          id=\"qc-detail-panel-hnmr\"\n          defaultExpanded={false}\n        >\n          <Panel.Heading>\n            <Panel.Title className=\"qc-detail-panel-title\" toggle>\n              1H NMR Prediction Detail\n            </Panel.Title>\n          </Panel.Heading>\n          <Panel.Collapse>\n            <Panel.Body>\n              <QcMolView svg={svg} />\n              {tableNmr(shifts)}\n            </Panel.Body>\n          </Panel.Collapse>\n        </Panel>\n      </div>\n    </div>\n  );\n};\n\nBlockHnmr.propTypes = {\n  ansHnmr: PropTypes.object.isRequired,\n};\n\nexport default BlockHnmr;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Panel, Alert } from 'react-bootstrap';\n\nimport QuillViewer from 'src/components/QuillViewer';\nimport QcMolView from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/QcMolView';\nimport { iconByMargin } from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/icon';\nimport {\n  tableNmr,\n  formatQV,\n} from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/nmr';\n\nconst emptyBlock = () => (\n  <div className=\"card-qc\">\n    <h5>\n      <span>2 Analysis of the provided digital NMR spectroscopy data: 13C NMR:</span>\n    </h5>\n    <div className=\"card-qc\">\n      <Alert bsStyle=\"danger\">\n        No Information. Please upload spectrum & make predictions in Spectra Editor.\n      </Alert>\n    </div>\n  </div>\n);\n\nconst BlockCnmr = ({ ansCnmr }) => {\n  if (!ansCnmr.exist) return emptyBlock();\n  const { qck, qcp } = ansCnmr;\n  const {\n    shifts,\n    svg,\n    desc,\n    sigSent,\n    sigReal,\n    numAll,\n    numAcpMac,\n    numAcpOwn,\n    ansMac,\n    ansOwn,\n  } = qcp;\n  const {\n    countExpAtoms,\n    countIdnAtoms,\n    ansQck,\n  } = qck;\n\n  return (\n    <div className=\"card-qc\">\n      <h5>\n        <span>2 Analysis of the provided digital NMR spectroscopy data: 13C NMR:</span>\n      </h5>\n      <div className=\"card-qc\">\n        <div\n          style={{ display: 'inline' }}\n        >\n          <QuillViewer\n            value={formatQV(desc)}\n          />\n        </div>\n        <div>\n          <span>\n            Expected carbons: {countExpAtoms}.\n            Identified carbons: {countIdnAtoms}.\n          </span>\n          {iconByMargin(ansQck, 0)}\n        </div>\n        <div>\n          <span>\n            Signals detected: {sigSent}\n          </span>\n        </div>\n        <div>\n          <span>\n            Signals detected (NMRShiftDB): {sigReal}\n          </span>\n        </div>\n        <div>\n          <span>\n            Correctly assigned (machine):\n            ({numAcpMac}/{numAll})\n            {iconByMargin(ansMac, 1)}\n          </span>\n        </div>\n        <div>\n          <span>\n            Correctly assigned (owner):\n            ({numAcpOwn}/{numAll})\n            {iconByMargin(ansOwn, 0)}\n          </span>\n        </div>\n        <Panel\n          className=\"qc-detail-panel\"\n          id=\"qc-detail-panel-cnmr\"\n          defaultExpanded={false}\n        >\n          <Panel.Heading>\n            <Panel.Title className=\"qc-detail-panel-title\" toggle>\n              13C NMR Prediction Detail\n            </Panel.Title>\n          </Panel.Heading>\n          <Panel.Collapse>\n            <Panel.Body>\n              <QcMolView svg={svg} />\n              {tableNmr(shifts)}\n            </Panel.Body>\n          </Panel.Collapse>\n        </Panel>\n      </div>\n    </div>\n  );\n};\n\nBlockCnmr.propTypes = {\n  ansCnmr: PropTypes.object.isRequired,\n};\n\nexport default BlockCnmr;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Alert } from 'react-bootstrap';\n\nimport { iconMs } from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/icon';\n\nconst emptyBlock = () => (\n  <div className=\"card-qc\">\n    <h5>\n      <span>3 Analysis of the provided digital mass spectrometry data:</span>\n    </h5>\n    <div className=\"card-qc\">\n      <Alert bsStyle=\"danger\">\n        No Information. Please upload spectra to Spectra Editor.\n      </Alert>\n    </div>\n  </div>\n);\n\nconst BlockMS = ({ ansMs }) => {\n  if (!ansMs.exist) return emptyBlock();\n  const { qcp, conclusion } = ansMs;\n  const {\n    emMass,\n    scan,\n    desc,\n  } = qcp;\n\n  return (\n    <div className=\"card-qc\">\n      <h5>\n        <span>3 Analysis of the provided digital mass spectrometry data:</span>\n      </h5>\n      <div className=\"card-qc\">\n        <div>\n          <span>Identified Mass peaks (<i>m/z</i>) = </span>\n          {desc}\n        </div>\n        <div>\n          <span>Selected scan: {scan}.</span>\n        </div>\n        <div>\n          <span>Exact molecular mass = </span>\n          {emMass}\n        </div>\n        <div>\n          <span>Conclusion: </span>\n          {iconMs(conclusion)}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nBlockMS.propTypes = {\n  ansMs: PropTypes.object.isRequired,\n};\n\nexport default BlockMS;\n","import React from 'react';\nimport { Table } from 'react-bootstrap';\n\nimport { iconStatus } from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/icon';\n\nconst colorStyles = [\n  { backgroundColor: '#FFFF00' },\n  { backgroundColor: '#87CEFA' },\n  { backgroundColor: '#FFB6C1' },\n  { backgroundColor: '#00FF00' },\n  { backgroundColor: '#E6E6FA' },\n  { backgroundColor: '#FFD700' },\n  { backgroundColor: '#F0FFFF' },\n  { backgroundColor: '#F5F5DC' },\n];\n\nconst colorLabel = (idx) => {\n  const style = Object.assign(\n    {},\n    colorStyles[idx % 8],\n    { width: 20, borderRadius: 20, textAlign: 'center' },\n  );\n\n  return (\n    <div\n      style={style}\n    >\n      <span\n        className=\"txt-label\"\n      >\n        {idx + 1}\n      </span>\n    </div>\n  );\n};\n\nconst tableIr = (fgs) => {\n  if (!fgs) return null;\n\n  return (\n    <Table responsive striped condensed hover>\n      <thead>\n        <tr>\n          <th>#</th>\n          <th>SMARTS</th>\n          <th>Machine Confidence</th>\n          <th>Machine</th>\n          <th>Owner</th>\n        </tr>\n      </thead>\n      <tbody>\n        {\n          fgs\n            .sort((a, b) => b.confidence - a.confidence)\n            .map((fg, idx) => (\n              <tr key={`${fg}${idx}`}>\n                <td>{colorLabel(idx)}</td>\n                <td>{fg.sma}</td>\n                <td>{fg.confidence} %</td>\n                <td>{iconStatus(fg.status)}</td>\n                <td>{iconStatus(fg.statusOwner)}</td>\n              </tr>\n            ))\n        }\n      </tbody>\n    </Table>\n  );\n};\n\nexport { tableIr }; // eslint-disable-line\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Panel, Alert } from 'react-bootstrap';\n\nimport QcMolView from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/QcMolView';\nimport { iconByMargin } from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/icon';\nimport { tableIr } from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/ir';\n\nconst emptyBlock = () => (\n  <div className=\"card-qc\">\n    <h5>\n      <span>4 Analysis of the provided digital IR data:</span>\n    </h5>\n    <div className=\"card-qc\">\n      <Alert bsStyle=\"danger\">\n        No Information. Please upload spectra to Spectra Editor.\n      </Alert>\n    </div>\n  </div>\n);\n\nconst BlockIr = ({ ansIr }) => {\n  if (!ansIr.exist) return emptyBlock();\n  const { qcp } = ansIr;\n  const {\n    fgs, svg, numFg, numFg80, numFg90,\n    posMac80, posOwn80, posMac90, posOwn90,\n    negMac90, negOwn90,\n    numMac, numOwn,\n    ansMac80, ansOwn80, ansMacF90, ansOwnF90,\n  } = qcp;\n\n  return (\n    <div className=\"card-qc\">\n      <h5>\n        <span>4 Analysis of the provided digital IR data:</span>\n      </h5>\n      <div className=\"card-qc\">\n        <div>\n          <span>Amount of functional groups given: {numFg}</span>\n        </div>\n        <div>\n          <span>\n            Amount of functional groups that were part of the routine and\n            accurracy &gt;80%: {numFg80 + numFg90}\n          </span>\n        </div>\n        <div>\n          <span>Output true machine (&gt;80%): </span>\n          {`${(posMac80 + posMac90)}/${(numMac)}`}\n          {iconByMargin(ansMac80, 1)}\n        </div>\n        <div>\n          <span>Output true owner (&gt;80%): </span>\n          {`${(posOwn80 + posOwn90)}/${(numOwn)}`}\n          {iconByMargin(ansOwn80, 1)}\n        </div>\n        <div>\n          <span>Output false machine (&gt;90%): </span>\n          {`${(negMac90)}/${(posMac90 + negMac90)}`}\n          {iconByMargin(ansMacF90, 0)}\n        </div>\n        <div>\n          <span>Output false owner (&gt; 90%): </span>\n          {`${(negOwn90)}/${(posOwn90 + negOwn90)}`}\n          {iconByMargin(ansOwnF90, 0)}\n        </div>\n        <Panel\n          className=\"qc-detail-panel\"\n          id=\"qc-detail-panel-ir\"\n          defaultExpanded={false}\n        >\n          <Panel.Heading>\n            <Panel.Title className=\"qc-detail-panel-title\" toggle>\n              IR Prediction Detail\n            </Panel.Title>\n          </Panel.Heading>\n          <Panel.Collapse>\n            <Panel.Body>\n              <QcMolView svg={svg} />\n              {tableIr(fgs)}\n            </Panel.Body>\n          </Panel.Collapse>\n        </Panel>\n      </div>\n    </div>\n  );\n};\n\nBlockIr.propTypes = {\n  ansIr: PropTypes.object.isRequired,\n};\n\nexport default BlockIr;\n","import React from 'react';\n\nconst BlockEa = () => (\n  <div className=\"card-qc\">\n    <h5>\n      <span>5 Analysis of the provided EA analysis:</span>\n    </h5>\n    <div className=\"card-qc\">\n      <p>TBD</p>\n    </div>\n    <br />\n  </div>\n);\n\nexport default BlockEa;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Label } from 'react-bootstrap';\n\nimport { iconByBool } from 'src/apps/mydb/elements/details/samples/qcTab/components/helper/icon';\n\nconst iconNmr = (ansNmr) => {\n  const { conclusion, conclusionOwn } = ansNmr;\n  if (!conclusion && conclusionOwn) {\n    return (\n      <Label bsStyle=\"success\" className=\"label-qc\">\n        Pass due to owner correction\n      </Label>\n    );\n  }\n  return iconByBool(conclusion);\n};\n\nconst iconIr = (ansIr) => {\n  const { conclusion, conclusionOwn } = ansIr;\n  if (!conclusion && conclusionOwn) {\n    return (\n      <Label bsStyle=\"success\" className=\"label-qc\">\n        Pass due to owner correction\n      </Label>\n    );\n  }\n  return iconByBool(conclusion);\n};\n\nconst BlockConclusion = ({\n  ansHnmr, ansCnmr, ansMs, ansIr,\n}) => (\n  <div>\n    <h4>\n      <span>Conclusion of the automated analysis check:</span>\n    </h4>\n    <div className=\"card-qc\">\n      <p>\n        <span>1H NMR</span>\n        {iconNmr(ansHnmr)}\n      </p>\n      <p>\n        <span>13C NMR</span>\n        {iconNmr(ansCnmr)}\n      </p>\n      <p>\n        <span>MS</span>\n        {iconByBool(ansMs.conclusion)}\n      </p>\n      <p>\n        <span>IR</span>\n        {iconIr(ansIr)}\n      </p>\n    </div>\n    <br />\n  </div>\n);\n\nBlockConclusion.propTypes = {\n  ansHnmr: PropTypes.object.isRequired,\n  ansCnmr: PropTypes.object.isRequired,\n  ansMs: PropTypes.object.isRequired,\n  ansIr: PropTypes.object.isRequired,\n};\n\nexport default BlockConclusion;\n","const extractInfer = (ai, files) => {\n  let targetPred = false;\n  let targetTyp = false;\n  let hasInfer = false;\n  let hasFiles = false;\n  let hasValidFiles = false;\n  const valids = ['json', 'peaked', 'edited'];\n  ai.children.forEach((dt) => {\n    hasFiles = dt.attachments.length > 0;\n    dt.attachments.forEach((att) => {\n      if (valids.indexOf(att.aasm_state) > -1) hasValidFiles = true;\n      if (att.aasm_state !== 'json') return;\n      if (!files) return;\n      const pred = files\n        .map(f => (f.id === att.id ? f : null))\n        .filter(r => r != null)[0];\n      if (!pred || pred.predictions.outline.code >= 300) return;\n      targetTyp = pred.predictions.output.result[0] &&\n        pred.predictions.output.result[0].type;\n      targetPred = pred.predictions;\n      hasInfer = true;\n    });\n  });\n  return {\n    pred: targetPred, type: targetTyp, hasInfer, hasFiles, hasValidFiles,\n  };\n};\n\nconst buildQcs = (sample, infer) => {\n  const { files } = infer.result || {};\n  let irQc = {};\n  let msQc = {};\n  let hrmsQc = {};\n  let hnmrQc = {};\n  let cnmrQc = {};\n  sample.container.children[0].children.forEach((ai) => {\n    const { content, kind } = ai.extended_metadata;\n    const { ops } = content;\n    const inferO = extractInfer(ai, files);\n    const { type } = inferO;\n    if ((!type || type === 'ms') && (kind && kind.includes('mass spectrometry') && !kind.includes('HRMS'))) {\n      msQc = Object.assign({}, msQc, inferO, { ops, exist: true, type: 'Mass' });\n    } else if ((!type || type === 'ms') && (kind && kind.includes('mass spectrometry') && kind.includes('HRMS'))) {\n      hrmsQc = Object.assign({}, hrmsQc, inferO, { ops, exist: true, type: 'Mass' });\n    } else if ((!type || type === 'nmr;13C;1d') && (kind && kind.includes('13C NMR'))) {\n      cnmrQc = Object.assign({}, cnmrQc, inferO, { ops, exist: true, type: '13C NMR' });\n    } else if ((!type || type === 'nmr;1H;1d') && (kind && kind.includes('1H NMR'))) {\n      hnmrQc = Object.assign({}, hnmrQc, inferO, { ops, exist: true, type: '1H NMR' });\n    } else if ((!type || type === 'ir') && (kind && kind.includes('IR'))) {\n      irQc = Object.assign({}, irQc, inferO, { ops, exist: true, type: 'IR' });\n    }\n  });\n  if (msQc.hasValidFiles === false && hrmsQc.hasValidFiles === true) msQc = hrmsQc;\n  return {\n    irQc, msQc, hnmrQc, cnmrQc,\n  };\n};\n\nconst prismQcs = (sample, infer) => {\n  const qcs = buildQcs(sample, infer);\n  return qcs;\n};\n\nexport { prismQcs }; // eslint-disable-line\n","import { FN } from '@complat/react-spectra-editor';\n\nimport { makeDav } from 'src/apps/mydb/elements/details/samples/qcTab/utils/common';\nimport { contentToText } from 'src/utilities/quillFormat';\nimport { emwInStr } from 'src/utilities/ElementUtils';\n\nconst emm = s => s.molecule_exact_molecular_weight.toFixed(2);\n\nconst isMatchMass = (xs, emMass) => {\n  const emw = parseFloat(emMass, 10);\n  const margin = 1.0;\n  let result = false;\n\n  xs.forEach((x) => {\n    if (Math.abs(x - (emw + 0.0)) <= margin) { result = true; }\n    if (Math.abs(x - (emw + 1.0)) <= margin) { result = true; } // eslint-disable-line\n    if (Math.abs(x - (emw + 23.0)) <= margin) { result = true; } // eslint-disable-line\n    if (Math.abs(x - (emw + 39.0)) <= margin) { result = true; } // eslint-disable-line\n  });\n\n  return result;\n};\n\nconst getDesc = (xs, ys) => {\n  const maxY = Math.max(...ys);\n  const peaks = xs.map((x, idx) => ({ x, y: ys[idx] }));\n  const signal = FN.formatedMS(peaks, maxY);\n  return signal;\n};\n\nconst makeQck = (ops, sample) => {\n  if (!ops) return {};\n  const emw = parseFloat(emm(sample), 10);\n  const opStr = contentToText({ ops });\n  const ansQck = emwInStr(emw, opStr);\n  return { ansQck };\n};\n\nconst makeQcp = (pred, sample) => {\n  if (!pred || !pred.output || !pred.output.result || !pred.output.result[0]) {\n    return {};\n  }\n\n  const { scan, xs, ys } = pred.output.result[0];\n\n  const emMass = emm(sample);\n  const matchMass = isMatchMass(xs, emMass);\n  const desc = getDesc(xs, ys); // TBD\n  return {\n    matchMass, emMass, scan, desc,\n  };\n};\n\nconst evaluateMs = (msQc, sample) => {\n  const {\n    exist, hasFiles, hasValidFiles, ops, pred,\n  } = msQc;\n\n  const dav = makeDav(hasFiles, hasValidFiles);\n  const qck = makeQck(ops, sample);\n  const qcp = makeQcp(pred, sample);\n  const { matchMass } = qcp;\n  const conclusion = matchMass;\n  const conclusionOwn = matchMass;\n\n  return {\n    exist, dav, qck, qcp, conclusion, conclusionOwn,\n  };\n};\n\nexport { evaluateMs } // eslint-disable-line\n","import { numFormat, makeDav } from 'src/apps/mydb/elements/details/samples/qcTab/utils/common';\n\nimport { contentToText } from 'src/utilities/quillFormat';\nimport {\n  atomCountInFormula,\n  atomCountInNMRDescription,\n  atomCountCInNMRDescription,\n} from 'src/utilities/ElementUtils';\n\nconst countSignal = (shifts) => {\n  const numAll = shifts.length;\n  let numAcpMac = 0;\n  let numWarMac = 0;\n  let numRjtMac = 0;\n  let numMisMac = 0;\n  let numAcpOwn = 0;\n  shifts.forEach((s) => {\n    if (s.status === 'accept') {\n      numAcpMac += 1;\n    } else if (s.status === 'warning') {\n      numWarMac += 1;\n    } else if (s.status === 'reject') {\n      numRjtMac += 1;\n    } else if (s.status === 'missing') {\n      numMisMac += 1;\n    }\n    const ownAccept = (s.statusOwner && s.statusOwner === 'accept') ||\n      (!s.statusOwner && s.status === 'accept');\n    if (ownAccept) {\n      numAcpOwn += 1;\n    }\n  });\n  return {\n    numAll, numAcpMac, numWarMac, numRjtMac, numMisMac, numAcpOwn,\n  };\n};\n\nconst extractSignal = (shifts) => {\n  const reals = shifts.map(s => s.real)\n    .filter(r => (r != null && r !== 0)).sort((a, b) => a - b);\n  const sents = Array.from(new Set(reals)).sort((a, b) => a - b);\n\n  const sigSent = sents.map(s => numFormat(s)).join(', ');\n  const sigReal = reals.map(r => numFormat(r)).join(', ');\n\n  return {\n    sigSent, sigReal,\n  };\n};\n\nconst makeQck = (sumFormula, ops, type) => {\n  if (!ops) return {};\n  const is1H = type === '1H NMR';\n  const countExpAtoms = is1H\n    ? atomCountInFormula(sumFormula, 'H')\n    : atomCountInFormula(sumFormula, 'C');\n  const opStr = contentToText({ ops });\n  const countIdnAtoms = is1H\n    ? atomCountInNMRDescription(opStr)\n    : atomCountCInNMRDescription(opStr);\n  const ansQck = (countExpAtoms - countIdnAtoms) === 0;\n  return { countExpAtoms, countIdnAtoms, ansQck };\n};\n\nconst makeQcp = (pred, ops = []) => {\n  const desc = [{ insert: 'According to user: ' }, ...ops];\n  if (!pred || !pred.output || !pred.output.result || !pred.output.result[0]) {\n    return { desc };\n  }\n  const { shifts, svgs } = pred.output.result[0];\n  const svg = svgs ? svgs[0] : false;\n  const {\n    sigSent, sigReal,\n  } = extractSignal(shifts);\n  const {\n    numAll, numAcpMac, numAcpOwn,\n  } = countSignal(shifts);\n  const ansMac = numAll - numAcpMac <= 1;\n  const ansOwn = numAll - numAcpOwn <= 0;\n  return {\n    shifts,\n    svg,\n    desc,\n    sigSent,\n    sigReal,\n    numAll,\n    numAcpMac,\n    numAcpOwn,\n    ansMac,\n    ansOwn,\n  };\n};\n\nconst evaluateNmr = (nmrQc, sumFormula) => {\n  const {\n    exist, hasFiles, hasValidFiles, ops, type, pred,\n  } = nmrQc;\n\n  const dav = makeDav(hasFiles, hasValidFiles);\n  const qck = makeQck(sumFormula, ops, type);\n  const qcp = makeQcp(pred, ops);\n  const { ansQck } = qck;\n  const { ansMac, ansOwn } = qcp;\n  const conclusion = ansMac && ansOwn && ansQck;\n  const conclusionOwn = ansOwn && ansQck;\n\n  return {\n    exist, dav, qck, qcp, conclusion, conclusionOwn,\n  };\n};\n\nexport { evaluateNmr } // eslint-disable-line\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport AreaTitle from 'src/apps/mydb/elements/details/samples/qcTab/components/summary/AreaTitle';\nimport AreaSummary from 'src/apps/mydb/elements/details/samples/qcTab/components/summary/AreaSummary';\n\nimport BlockTitle from 'src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockTitle';\nimport BlockHnmr from 'src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockHnmr';\nimport BlockCnmr from 'src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockCnmr';\nimport BlockMS from 'src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockMS';\nimport BlockIr from 'src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockIr';\nimport BlockEa from 'src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockEa';\nimport BlockConclusion from 'src/apps/mydb/elements/details/samples/qcTab/components/substance/BlockConclusion';\n\nimport { prismQcs } from 'src/apps/mydb/elements/details/samples/qcTab/utils/qcs';\nimport { evaluateMs } from 'src/apps/mydb/elements/details/samples/qcTab/utils/ms';\nimport { evaluateIr } from 'src/apps/mydb/elements/details/samples/qcTab/utils/ir';\nimport { evaluateNmr } from 'src/apps/mydb/elements/details/samples/qcTab/utils/nmr';\n\nconst QcContent = ({ sample, infer, curation }) => {\n  const {\n    irQc, msQc, hnmrQc, cnmrQc,\n  } = prismQcs(sample, infer);\n  const sumFormula = sample.molecule_formula;\n\n  const ansHnmr = evaluateNmr(hnmrQc, sumFormula);\n  const ansCnmr = evaluateNmr(cnmrQc, sumFormula);\n  const ansMs = evaluateMs(msQc, sample);\n  const ansIr = evaluateIr(irQc);\n\n  return (\n    <div>\n      <div>\n        <AreaTitle\n          curation={curation}\n        />\n        <AreaSummary\n          curation={curation}\n          ansHnmr={ansHnmr}\n          ansCnmr={ansCnmr}\n          ansMs={ansMs}\n          ansIr={ansIr}\n        />\n      </div>\n      <br />\n      <br />\n      <div>\n        <BlockTitle />\n        <BlockHnmr\n          ansHnmr={ansHnmr}\n        />\n        <BlockCnmr\n          ansCnmr={ansCnmr}\n        />\n        <BlockMS\n          ansMs={ansMs}\n        />\n        <BlockIr\n          ansIr={ansIr}\n        />\n        <BlockEa />\n        <BlockConclusion\n          ansHnmr={ansHnmr}\n          ansCnmr={ansCnmr}\n          ansMs={ansMs}\n          ansIr={ansIr}\n        />\n      </div>\n    </div>\n  );\n};\n\nQcContent.propTypes = {\n  sample: PropTypes.object.isRequired,\n  infer: PropTypes.object.isRequired,\n  curation: PropTypes.number.isRequired,\n};\n\nexport default QcContent;\n","import { makeDav } from 'src/apps/mydb/elements/details/samples/qcTab/utils/common';\n\nconst makeQck = () => ({});\n\nconst makeQcp = (pred) => {\n  if (!pred || !pred.output || !pred.output.result || !pred.output.result[0]) {\n    return {};\n  }\n\n  const { fgs, svgs } = pred.output.result[0];\n  const svg = svgs ? svgs[0] : false;\n  let numFg = 0;\n  let numFg80 = 0;\n  let numFg90 = 0;\n  let posMac80 = 0;\n  let posOwn80 = 0;\n  let posMac90 = 0;\n  let posOwn90 = 0;\n  let negMac80 = 0;\n  let negOwn80 = 0;\n  let negMac90 = 0;\n  let negOwn90 = 0;\n  fgs.forEach((fg) => {\n    numFg += 1;\n    if (fg.confidence >= 90.0) {\n      numFg90 += 1;\n      fg.status === 'accept' ? posMac90 += 1 : negMac90 += 1; // eslint-disable-line\n      const ownAccept = (fg.statusOwner && fg.statusOwner === 'accept') ||\n        (!fg.statusOwner && fg.status === 'accept');\n      ownAccept ? posOwn90 += 1 : negOwn90 += 1; // eslint-disable-line\n    } else if (fg.confidence >= 80.0) {\n      numFg80 += 1;\n      fg.status === 'accept' ? posMac80 += 1 : negMac80 += 1; // eslint-disable-line\n      const ownAccept = (fg.statusOwner && fg.statusOwner === 'accept') ||\n        (!fg.statusOwner && fg.status === 'accept');\n      ownAccept ? posOwn80 += 1 : negOwn80 += 1; // eslint-disable-line\n    }\n  });\n\n  const numMac = posMac80 + posMac90 + negMac80 + negMac90;\n  const numOwn = posOwn80 + posOwn90 + negOwn80 + negOwn90;\n  const ansMac80 = numMac - posMac80 - posMac90 <= 1;\n  const ansOwn80 = numOwn - posOwn80 - posOwn90 <= 1;\n  const ansMacF90 = negMac90 - 0 <= 0;\n  const ansOwnF90 = negOwn90 - 0 <= 0;\n  return {\n    fgs,\n    svg,\n    numFg,\n    numFg80,\n    numFg90,\n    numMac,\n    numOwn,\n    ansMac80,\n    ansOwn80,\n    ansMacF90,\n    ansOwnF90,\n    posMac80,\n    posOwn80,\n    posMac90,\n    posOwn90,\n    negMac80,\n    negOwn80,\n    negMac90,\n    negOwn90,\n  };\n};\n\nconst evaluateIr = (irQc) => {\n  const {\n    exist, hasFiles, hasValidFiles, pred,\n  } = irQc;\n\n  const dav = makeDav(hasFiles, hasValidFiles);\n  const qck = makeQck();\n  const qcp = makeQcp(pred);\n  const {\n    ansMac80, ansOwn80, ansMacF90, ansOwnF90,\n  } = qcp;\n  const conclusion = ansMac80 && ansOwn80 && ansMacF90 && ansOwnF90;\n  const conclusionOwn = ansOwn80 && ansOwnF90;\n\n  return {\n    exist, dav, qck, qcp, conclusion, conclusionOwn,\n  };\n};\n\nexport { evaluateIr } // eslint-disable-line\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\n\nimport QcContent from 'src/apps/mydb/elements/details/samples/qcTab/components/QcContent';\nimport QcActions from 'src/stores/alt/actions/QcActions';\nimport QcStore from 'src/stores/alt/stores/QcStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nclass QcMain extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      ...QcStore.getState(),\n      profile: UserStore.getState().profile,\n    };\n\n    this.onChange = this.onChange.bind(this);\n    this.renderQcBtn = this.renderQcBtn.bind(this);\n    this.renderQcContent = this.renderQcContent.bind(this);\n  }\n\n  componentDidMount() {\n    QcStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    QcStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState({ ...state });\n  }\n\n  renderQcBtn() {\n    const { loading } = this.state;\n    const { sample } = this.props;\n    const handleOnClick = () => {\n      QcActions.setLoading();\n      QcActions.loadInfers.defer({ sample });\n    };\n    let iconClsName = 'fa fa-cog fa-1x';\n    if (loading) iconClsName += ' fa-spin fa-fw';\n    const bsStyle = loading ? 'warning' : 'primary';\n\n    return (\n      <Button\n        bsStyle={bsStyle}\n        bsSize=\"small\"\n        onClick={handleOnClick}\n        disabled={loading}\n      >\n        <i className={iconClsName} />\n        <span className=\"g-marginLeft--10\">Refresh</span>\n      </Button>\n    );\n  }\n\n  renderQcContent() {\n    const { infers, profile } = this.state;\n    const { sample } = this.props;\n    const infer = infers\n      .map(i => (i.sId === sample.id ? i : null))\n      .filter(r => r != null)[0];\n    if (!infer) return null;\n    let curation = profile ? profile.curation : 2;\n    if (curation === null) { curation = 2 }\n    return (\n      <QcContent\n        sample={sample}\n        infer={infer}\n        curation={curation}\n      />\n    );\n  }\n\n  render() {\n    return (\n      <div>\n        {this.renderQcBtn()}\n        {this.renderQcContent()}\n      </div>\n    );\n  }\n}\n\nQcMain.propTypes = {\n  sample: PropTypes.object.isRequired,\n};\n\nexport default QcMain;\n","import 'whatwg-fetch';\n\nexport default class NmrSimFetcher {\n  static fetchNmrdbById(id) {\n    const promise = fetch(`/api/v1/simulation/nmrdb?molecule_id=${id}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n    })\n      .then(response => response.json()).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n}\n","import alt from 'src/stores/alt/alt';\nimport NmrSimFetcher from 'src/fetchers/NmrSimFetcher';\n\nclass NmrSimActions {\n  updateNmrdb(type, needToFetch, id) {\n    if (needToFetch) {\n      return (dispatch) => {\n        NmrSimFetcher.fetchNmrdbById(id)\n          .then((result) => {\n            dispatch({ type, spectrum: result });\n          }).catch((errorMessage) => {\n            console.log(errorMessage);\n          });\n      };\n    }\n    const spectrum = false;\n    return { type, spectrum };\n  }\n\n  resetNMR() {\n    return null;\n  }\n}\n\nexport default alt.createActions(NmrSimActions);\n","import alt from 'src/stores/alt/alt';\nimport NmrSimActions from 'src/stores/alt/actions/NmrSimActions';\n\nimport Jcampconverter from 'jcampconverter';\n\nclass NmrSimStore {\n  constructor() {\n    this.state = {\n      currentNmr: { data13C: [], data1H: [] },\n      currentType: '13C',\n      synced: false,\n    };\n\n    this.bindListeners({\n      handleUpdateNmrdb: NmrSimActions.updateNmrdb,\n      handleResetNMR: NmrSimActions.resetNMR,\n    });\n  }\n\n  handleUpdateNmrdb({ type, spectrum }) {\n    this.state.currentType = type;\n    this.state.synced = true;\n    if (spectrum) {\n      if (spectrum.response_1h) {\n        const data1h = this.decodeNmrdb1H(JSON.parse(spectrum.response_1h));\n        this.assignNmrdb(data1h, '1H');\n      }\n      if (spectrum.response_13c) {\n        const data13C = this.decodeNmrdb13C(JSON.parse(spectrum.response_13c));\n        this.assignNmrdb(data13C, '13C');\n      }\n    }\n  }\n\n  decodeNmrdb13C(response) {\n    const jcamp = response.result.spectrum13C.jcamp.value;\n    return Jcampconverter.convert(jcamp, { xy: true }).spectra[0].data[0];\n  }\n\n  decodeNmrdb1H(response) {\n    const jcamp = response.jcamp.value;\n    return Jcampconverter.convert(jcamp, { xy: true }).spectra[0].data[0];\n  }\n\n  assignNmrdb(spectrum, type) {\n    const data = [];\n    for (let i = 0; i < spectrum.y.length; i++) {\n      data.push({ x: spectrum.x[i], y: spectrum.y[i] });\n    }\n    if (type === '13C') {\n      this.state.currentNmr.data13C = data;\n    } else {\n      this.state.currentNmr.data1H = data;\n    }\n  }\n\n  handleResetNMR() {\n    this.state.currentNmr = { data13C: [], data1H: [] };\n    this.state.synced = false;\n  }\n}\n\nexport default alt.createStore(NmrSimStore, 'NmrSimStore');\n","import d3 from 'd3';\n\nclass D3LineChart {\n  constructor() {\n    this.margin = {\n      top: 50,\n      bottom: 50,\n      right: 10,\n      left: 90,\n    };\n    this.width = 1000 - this.margin.left - this.margin.right;\n    this.height = 500 - this.margin.top - this.margin.bottom;\n  }\n\n  create(input) {\n    this.drawChart(input);\n  }\n\n  update(input) {\n    this.destroy(input.el);\n    this.drawChart(input);\n  }\n\n  destroy(el) {\n    d3.select(el).selectAll('svg').remove();\n  }\n\n  drawChart(props) {\n    const { data, el, type } = props;\n    const width = this.width;\n    const height = this.height;\n    const margin = this.margin;\n\n    const xExtent = d3.extent(data, d => d.x);\n    const yExtent = d3.extent(data, d => d.y);\n\n    const xScale = d3.scale.linear()\n      .domain(xExtent)\n      .range([width, 0]);\n    const yScale = d3.scale.linear()\n      .domain(yExtent)\n      .range([height, 0]);\n\n    const linePath = d3.svg.line()\n      .x(d => xScale(d.x))\n      .y(d => yScale(d.y));\n\n    const yFormat = d3.format('.2n');\n\n    const zoomed = () => {\n      svg.select('.x.axis').call(xAxis);\n      svg.select('.y.axis').call(yAxis);\n      svg.select('.x.grid')\n        .call(makeXaxis\n          .tickSize(-height, 0, 0)\n          .tickFormat(''));\n      svg.select('.y.grid')\n        .call(makeYaxis\n          .tickSize(-width, 0, 0)\n          .tickFormat(''));\n      svg.select('.line')\n        .attr('class', 'line')\n        .attr('d', linePath);\n    };\n\n    const zoom = d3.behavior.zoom()\n      .x(xScale) // omit y\n      .on('zoom', zoomed);\n\n    const resetZoom = () => {\n      d3.transition().duration(200).tween('zoom', () => {\n        const ix = d3.interpolate(xScale.domain(), xExtent);\n        d3.interpolate(yScale.domain(), yExtent);\n        return t => {\n          zoom.x(xScale.domain(ix(t))); // omit y\n          zoomed();\n        };\n      });\n    };\n\n    const svg = d3.select(el)\n      .append('svg:svg')\n      .attr('id', 'line-chart')\n      .attr('width', width + margin.left + margin.right)\n      .attr('height', height + margin.top + margin.bottom)\n      .attr('viewBox', `0 0  ${width + margin.left + margin.right}\n                                         ${height + margin.top + margin.bottom}`)\n      .attr('perserveAspectRatio', 'xMinYMid')\n      .append('svg:g')\n      .attr('transform', `translate(${margin.left}, ${margin.top})`)\n      .call(zoom).on('dblclick.zoom', resetZoom);\n\n    svg.append('svg:rect')\n      .attr('width', width)\n      .attr('height', height)\n      .attr('class', 'plot');\n\n    const xAxis = d3.svg.axis()\n      .scale(xScale)\n      .orient('bottom')\n      .ticks(5);\n    const yAxis = d3.svg.axis()\n      .scale(yScale)\n      .orient('left')\n      .ticks(5)\n      .tickFormat(yFormat);\n    const makeXaxis = d3.svg.axis()\n      .scale(xScale)\n      .orient('bottom')\n      .ticks(5);\n    const makeYaxis = d3.svg.axis()\n      .scale(yScale)\n      .orient('left')\n      .ticks(5);\n\n    svg.append('svg:g')\n      .attr('class', 'x axis')\n      .attr('transform', `translate(0, ${height})`)\n      .call(xAxis);\n\n    svg.append('g')\n      .attr('class', 'y axis')\n      .call(yAxis);\n\n    svg.append('g')\n      .attr('class', 'x grid')\n      .attr('transform', `translate(0, ${height})`)\n      .call(makeXaxis\n        .tickSize(-height, 0, 0)\n        .tickFormat(''));\n\n    svg.append('g')\n      .attr('class', 'y grid')\n      .call(makeYaxis\n        .tickSize(-width, 0, 0)\n        .tickFormat(''));\n\n    svg.append('text')\n      .attr('text-anchor', 'middle')\n      .attr('transform', `translate(${0 - margin.left + 15}, ${height / 2})rotate(-90)`)\n      .text('Y(A.U)');\n    svg.append('text')\n      .attr('text-anchor', 'middle')  // this makes it easy to centre the text\n      .attr('transform', `translate(${width / 2}, ${height + margin.bottom})`)\n      .text('X(PPM)');\n\n    svg.append('svg:clipPath')\n      .attr('id', 'clip')\n      .append('svg:rect')\n      .attr('x', 0)\n      .attr('y', 0)\n      .attr('width', width)\n      .attr('height', height);\n\n    const chartBody = svg.append('g')\n      .attr('clip-path', 'url(#clip)');\n\n    chartBody.append('svg:path')\n      .datum(data)\n      .attr('class', 'line')\n      .attr('d', linePath);\n\n    // display type on the top-right corner\n    svg.append('text')\n      .attr('text-anchor', 'middle')\n      .attr('transform', `translate(${width - 50}, 30)`)\n      .text(`NMR ${type}`);\n    svg.append('rect')\n      .attr('transform', `translate(${width - 120}, 25)`)\n      .attr('width', 30)\n      .attr('height', 1)\n      .attr('class', 'line');\n\n    // responsive\n    const chart = $('#line-chart');\n    const aspect = chart.width() / chart.height();\n    const container = chart.parent();\n\n    $(window).on('resize', () => {\n      const targetWidth = container.width();\n      chart.attr('width', targetWidth);\n      chart.attr('height', Math.round(targetWidth / aspect));\n    }).trigger('resize');\n  }\n}\n\nconst LineChart = new D3LineChart();\n\nexport { LineChart };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { LineChart } from 'src/apps/mydb/elements/details/samples/nmrSimTab/LineChart';\n\nexport default class LineChartWrapper extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.d3Ref = React.createRef();\n  }\n\n  componentDidMount() {\n    const node = this.d3Ref.current;\n\n    LineChart.create({\n      data: this.props.data,\n      type: this.props.type,\n      el: node,\n    });\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const node = this.d3Ref.current;\n\n    LineChart.update({\n      data: nextProps.data,\n      type: nextProps.type,\n      el: node,\n    });\n  }\n\n  componentWillUnmount() {\n    const node = this.d3Ref.current;\n\n    LineChart.destroy(node);\n  }\n\n  render() {\n    return (\n      <div\n        className=\"nmr-chart\"\n        ref={this.d3Ref}\n      />\n    );\n  }\n}\n\nLineChartWrapper.propTypes = {\n  data: PropTypes.array,\n  type: PropTypes.string,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst ViewAtNmrdb = ({ is13C, smile }) => {\n  const nmrdbLink = is13C\n    ? `http://www.nmrdb.org/service.php?name=nmr-13c-prediction&smiles=${smile}`\n    : `http://www.nmrdb.org/service.php?name=nmr-1h-prediction&smiles=${smile}`;\n  return (\n    <div className=\"nmr-icon\">\n      <i>View directly on </i>\n      <a target=\"_blank\" rel=\"noreferrer\" href={nmrdbLink} className=\"nmr-icon-border\">\n        <img src=\"/images/nmrdb_logo.jpg\" alt=\"\" width=\"80\" />\n      </a>\n    </div>\n  );\n};\n\nconst LinkToNmrdb = () => (\n  <div>\n    <i>Powered by <img src=\"/images/nmrdb_logo.jpg\" alt=\"\" width=\"80\" /></i>\n    <br />\n    <h5>References</h5>\n    <p>Banfi, D.; Patiny, L. <a target=\"_blank\" rel=\"noreferrer\" href=\"https://doi.org/10.2533/chimia.2008.280\">www.nmrdb.org: Resurrecting and processing NMR spectra on-line Chimia</a>, 2008, 62(4), 280-281.</p>\n    <p>Andrés M. Castillo, Luc Patiny and Julien Wist. <a target=\"_blank\" rel=\"noreferrer\" href=\"https://doi.org/10.1016/j.jmr.2010.12.008\">Fast and Accurate Algorithm for the Simulation of NMR spectra of Large Spin Systems</a>. J of Magnetic Resonance 2011.</p>\n    <p>Aires-de-Sousa, M. Hemmer, J. Gasteiger, <a target=\"_blank\" rel=\"noreferrer\" href=\"https://doi.org/10.1021/ac010737m\">Prediction of 1H NMR Chemical Shifts Using Neural Networks</a>, Analytical Chemistry, 2002, 74(1), 80-90.</p>\n    <p>Steinbeck, Christoph, Stefan Krause, and Stefan Kuhn, <a target=\"_blank\" rel=\"noreferrer\" href=\"https://doi.org/10.1021/ci0341363\">NMRShiftDB Constructing a Free Chemical Information System with Open-Source Components</a>, J of chemical information and computer sciences, 2003, 43(6): 1733-1739.</p>\n  </div>\n);\n\nexport { ViewAtNmrdb, LinkToNmrdb };\n\nViewAtNmrdb.propTypes = {\n  is13C: PropTypes.bool,\n  smile: PropTypes.string,\n};\n","import React from 'react';\nimport { Button, ButtonToolbar, ListGroup, ListGroupItem } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport NmrSimActions from 'src/stores/alt/actions/NmrSimActions';\nimport NmrSimStore from 'src/stores/alt/stores/NmrSimStore';\nimport LineChartWrapper from 'src/apps/mydb/elements/details/samples/nmrSimTab/LineChartWrapper';\nimport { ViewAtNmrdb, LinkToNmrdb } from 'src/apps/mydb/elements/details/samples/nmrSimTab/NmrdbReference';\n\nexport default class NmrSimTab extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      nmrSpectrum: { data13C: [], data1H: [] },\n      nmrType: '13C',\n      synced: false,\n    };\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    NmrSimStore.listen(this.onChange);\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const sample = this.props.sample;\n    if (sample.molecule.id !== nextProps.sample.molecule.id) {\n      NmrSimActions.resetNMR.defer();\n    }\n  }\n\n  componentWillUnmount() {\n    NmrSimStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState({\n      nmrSpectrum: state.currentNmr,\n      nmrType: state.currentType,\n      synced: state.synced,\n    });\n  }\n\n  updateNmrdb(type) {\n    const sample = this.props.sample;\n    const spectrum = this.state.nmrSpectrum;\n    const needToFetch = spectrum.data13C.length + spectrum.data1H.length === 0;\n    NmrSimActions.updateNmrdb(type, needToFetch, sample.molecule.id);\n  }\n\n  showChartNmrdb(spectrum) {\n    const synced = this.state.synced;\n    const is13C = this.state.nmrType === '13C';\n    const data = is13C ? spectrum.data13C : spectrum.data1H;\n    return (\n      synced ? this.chartOrWarning(data) : null\n    );\n  }\n\n  chartOrWarning(data) {\n    return (\n      data.length !== 0\n        ? <LineChartWrapper data={data}\n          type={this.state.nmrType}\n          className=\"line-chart-wrapper\" />\n        : this.warning()\n    );\n  }\n\n  warning() {\n    const type = this.state.nmrType;\n    const style = type === '13C' ? 'danger' : 'warning';\n    return (\n      <div>\n        <br />\n        <ListGroup>\n          <ListGroupItem bsStyle={style}>\n            Sorry, the {type} simulation is not available now. Please check directly on\n            <a target=\"_blank\" href=\"https://www.nmrdb.org/\">\n              <img src=\"/images/nmrdb_logo.jpg\" alt=\"\" width=\"80\" />\n            </a>\n          </ListGroupItem>\n        </ListGroup>\n      </div>\n    );\n  }\n\n  render() {\n    const sample = this.props.sample;\n    const spectrum = this.state.nmrSpectrum;\n    const type = this.state.nmrType;\n    const smile = sample.molecule_cano_smiles || 'c1ccccc1CC';\n\n    return (\n      <div style={{ width: '100%' }}>\n        <ButtonToolbar>\n          <Button bsStyle=\"primary\"\n            onClick={this.updateNmrdb.bind(this, '1H')}>\n            predict 1H NMR\n          </Button>\n          <Button bsStyle=\"success\"\n            onClick={this.updateNmrdb.bind(this, '13C')}>\n            predict 13C NMR\n          </Button>\n          <ViewAtNmrdb is13C={type === '13C'}\n            smile={smile} />\n        </ButtonToolbar>\n\n        {this.showChartNmrdb(spectrum)}\n\n        <br />\n        <ListGroupItem>\n          <LinkToNmrdb />\n        </ListGroupItem>\n      </div>\n    );\n  }\n\n}\n\nNmrSimTab.propTypes = {\n  sample: PropTypes.object,\n};\n","const addHyphensToCas = (cas) => {\n  const filterCas = cas.replace(/-/g, '');\n  const firstHyphenIndex = filterCas.length - 3;\n  const secondHyphenIndex = filterCas.length - 1;\n  const firstPart = filterCas.substring(0, firstHyphenIndex);\n  const secondPart = filterCas.substring(firstHyphenIndex, secondHyphenIndex);\n  const thirdPart = filterCas.substring(secondHyphenIndex, filterCas.length);\n  const format = `${firstPart}-${secondPart}-${thirdPart}`;\n  const checkFormat = format.match(/([0-9]{2,7})-([0-9]{2})-[0-9]/);\n  return checkFormat;\n};\n\nconst checkCasDigit = (digits) => {\n  let sum = 0;\n  let final = 0;\n  for (let i = 0; i < digits.length; i += 1) {\n    sum += (i + 1) * parseInt(digits[i], 10);\n  }\n  final = sum % 10;\n  return final;\n};\n\nconst validateCas = (cas, boolean) => {\n  const filterCas = cas.replace(/-/g, '');\n  if (cas && cas !== '') {\n    const isnum = /^[0-9-]+$/.test(cas) && !(/^[-]+$/.test(cas));\n    let match;\n    let result;\n    if (filterCas.length >= 5 && isnum) {\n      const checkFormat = cas.match(/([0-9]{2,7})-([0-9]{2})-[0-9]/);\n      match = checkFormat || addHyphensToCas(cas);\n      const digits = (match[1] + match[2]).split('').reverse();\n      result = checkCasDigit(digits);\n    }\n    const valid = result == cas.slice(-1);\n    if (!valid && boolean) {\n      return false;\n    }\n    return match ? match[0] : 'smile';\n  }\n  return cas;\n};\n\nexport {\n  addHyphensToCas,\n  checkCasDigit,\n  validateCas\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useRef, useState } from 'react';\nimport {\n  InputGroup, OverlayTrigger, FormGroup, Tooltip, FormControl, Button, Glyphicon\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport uuid from 'uuid';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport BaseFetcher from 'src/fetchers/BaseFetcher';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport { validateCas } from 'src/utilities/CasValidation';\n\nconst apiCall = (cas, src = 'cas') => (src === 'cas' ? `https://commonchemistry.cas.org/api/detail?cas_rn=${cas}` : `https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/${cas}/property/CanonicalSMILES/JSON`);\nfunction FastInput(props) {\n  const refInput = useRef(null);\n  const [value, setValue] = useState(null);\n  const notify = (_params) => {\n    NotificationActions.add({\n      title: _params.title,\n      message: _params.msg,\n      level: _params.lvl,\n      position: 'tc',\n      dismissible: 'button',\n      autoDismiss: 5,\n      uid: uuid.v4()\n    });\n  };\n\n  const searchSmile = () => {\n    LoadingActions.start();\n    props.fnHandle(refInput.current.props.value);\n  };\n\n  const searchCas = (cas) => {\n    let params = {\n      apiEndpoint: apiCall(cas),\n      requestMethod: 'get',\n      jsonTranformation: json => json\n    };\n    LoadingActions.start();\n    BaseFetcher.withoutBodyData(params).then((cjson) => {\n      if (cjson.message) {\n        params = {\n          apiEndpoint: apiCall(cas, 'pubchem'),\n          requestMethod: 'get',\n          jsonTranformation: json => json\n        };\n        BaseFetcher.withoutBodyData(params).then((pjson) => {\n          if (pjson.Fault) {\n            notify({ title: 'CAS Error', lvl: 'error', msg: pjson.Fault.Code });\n          } else {\n            props.fnHandle(pjson.PropertyTable.Properties[0].CanonicalSMILES, cas);\n          }\n        }).catch((err) => {\n          notify({ title: 'CAS Error', lvl: 'error', msg: err });\n        });\n      } else {\n        props.fnHandle(cjson.smile, cas);\n      }\n    }).catch((err) => {\n      notify({ title: 'CAS Error', lvl: 'error', msg: err });\n    }).finally(() => {\n      LoadingActions.stop();\n    });\n  };\n\n  const searchString = (e) => {\n    const input = refInput.current.props.value;\n    if (e.key === 'Enter' || e.type === 'click') {\n      const getCas = validateCas(input, false);\n      if (getCas !== 'smile') {\n        searchCas(getCas);\n      } else {\n        searchSmile();\n      }\n    } else {\n      e.stopPropagation();\n    }\n  };\n\n  const updateValue = (e) => {\n    setValue(e.target.value);\n  };\n  const buttonStyle = {\n    height: '23px', borderRadius: '5px', position: 'absolute', right: '8px', borderColor: 'rgba(16, 10, 13, 0.14)', backgroundColor: 'white', outline: 'none'\n  };\n  const formStyle = {\n    height: '23px', borderRadius: '5px', position: 'relative', right: '30px'\n  };\n\n  return (\n    <div style={{ marginLeft: 'auto' }}>\n      <OverlayTrigger\n        placement=\"top\"\n        delayShow={500}\n        overlay={<Tooltip id=\"_fast_create_btn\">Fast create by CAS RN (with dashes) or SMILES</Tooltip>}\n      >\n        <FormGroup bsSize=\"xsmall\" className=\"fast-input\">\n          <InputGroup className=\"mb-3\">\n            <FormControl\n              id=\"_fast_create_btn_split\"\n              type=\"text\"\n              pullRight\n              ref={refInput}\n              onChange={updateValue}\n              value={value}\n              onKeyPress={(e) => searchString(e)}\n              style={formStyle}\n              placeholder=\"fast create by CAS/Smiles ...\"\n            />\n            <Button\n              bsSize=\"xsmall\"\n              style={buttonStyle}\n              onClick={(e) => searchString(e)}\n            >\n              <Glyphicon glyph=\"glyphicon glyphicon-search\" />\n            </Button>\n          </InputGroup>\n        </FormGroup>\n      </OverlayTrigger>\n    </div>\n  );\n}\n\nFastInput.propTypes = {\n  fnHandle: PropTypes.func.isRequired\n};\n\nexport default FastInput;\n","import Aviator from 'aviator';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { observer } from 'mobx-react';\n\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport { researchPlanShowOrNew } from 'src/utilities/routesUtils';\n\nclass MeasurementsTable extends Component {\n  static propTypes = {\n    sample: PropTypes.object.isRequired,\n  };\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n  };\n\n  // currently only research plan is supported as source\n  navigateToSource(measurement) {\n    const { uri } = Aviator.getCurrentRequest();\n    Aviator.navigate(`${uri}/${measurement.source_type}/${measurement.source_id}`, { silent: true });\n    if (measurement.source_type == 'research_plan') {\n      researchPlanShowOrNew({ params: { research_planID: measurement.source_id } });\n    }\n  }\n\n  // Column Layout:\n  //  - Sample Name/Identifier\n  //  - 1 Column per unique description\n  //\n  // NOTE: No action column for deletion, as we aggregate multiple measurements within one row\n  //       Use list view for deleting individual measurements\n\n  rows() {\n    const measurementsStore = this.context.measurementsStore;\n    let sample_ids = [...this.props.sample.ancestor_ids, this.props.sample.id].filter(e => e);\n    return sample_ids.map(sampleId => {\n      if (!measurementsStore.dataForSampleAvailable(sampleId)) { return null; }\n\n      let sampleHeader = measurementsStore.sampleHeader(sampleId);\n      const columnsForRow = [this._sampleOutput(sampleHeader)];\n\n      this._uniqueDescriptions().forEach((description, index) => {\n        const measurements = this._measurementsWithDescription(\n          measurementsStore.measurementsForSample(sampleId),\n          description\n        );\n\n        const descriptionColumn = (\n          <td className={`measurementTable--Sample--sortedReadout`} key={`MeasurementTableSampleSortedReadout${sampleId}.${index}`}>\n            <ul className=\"list-unstyled\">\n              {measurements}\n            </ul>\n          </td>\n        );\n        columnsForRow.push(descriptionColumn);\n      });\n\n      return (\n        <tr className=\"measurementTable--Sample\" key={`MeasurementTableSample${sampleId}`}>\n          {columnsForRow}\n        </tr>\n      );\n    });\n  }\n\n  render() {\n    const descriptionColumns = this._uniqueDescriptions().map(description => (<th key={description}>{description}</th>));\n    return (\n      <table className=\"table measurementTable striped condensed hover\">\n        <thead>\n          <tr>\n            <td></td>\n            {descriptionColumns}\n          </tr>\n        </thead>\n        <tbody>\n          {this.rows()}\n        </tbody>\n      </table>\n    );\n  }\n\n  _uniqueDescriptions() {\n    const descriptions = {};\n    let sampleIds = [...this.props.sample.ancestor_ids, this.props.sample.id].filter(e => e);\n    this.context.measurements\n      .measurementsForSamples(sampleIds)\n      .forEach(measurement => descriptions[measurement.description] = 1);\n\n    return Object.keys(descriptions).sort();\n  }\n\n  _sampleOutput(sampleHeader) {\n    return (\n      <th className=\"measurementTable--Sample--name\" key={`MeasurementTableSampleName${sampleHeader.id}`}>\n        {`${sampleHeader.short_label} ${sampleHeader.name}`}\n      </th>\n    );\n  }\n\n  _measurementOutput(measurement) {\n    return (\n      <li key={`MeasurementSource${measurement.id}`}>\n        <a\n          key={`MeasurementSourceLink${measurement.id}`}\n          onClick={() => this.navigateToSource(measurement)}\n          style={{ cursor: 'pointer' }}\n        >\n          {measurement.value} {measurement.unit}\n        </a>\n      </li>\n    );\n  }\n\n  _measurementsWithDescription(measurements, description) {\n    return measurements\n      .filter(measurement => measurement.description == description)\n      .map(measurement => this._measurementOutput(measurement));\n  }\n\n  _navigateToSource(measurement) {\n    const { uri } = Aviator.getCurrentRequest();\n    Aviator.navigate(`${uri}/${measurement.source_type}/${measurement.source_id}`, { silent: true });\n    if (measurement.source_type == 'research_plan') {\n      researchPlanShowOrNew({ params: { research_planID: measurement.source_id } });\n    }\n  }\n}\nexport default observer(MeasurementsTable);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal } from 'react-bootstrap';\n\nexport default class ConfirmDeletionModal extends Component {\n  render() {\n    return (\n      <Modal show={this.props.show} onHide={this.props.onCancel}>\n        <Modal.Header closeButton>\n          <Modal.Title>Confirm deletion</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <h4>{this.props.confirmationText}</h4>\n        </Modal.Body>\n        <Modal.Footer>\n          <Button onClick={this.props.onConfirm}>Yes</Button>\n          <Button onClick={this.props.onCancel}>No</Button>\n        </Modal.Footer>\n      </Modal>\n    );\n  }\n}\nConfirmDeletionModal.propTypes = {\n  show: PropTypes.bool.isRequired,\n  onConfirm: PropTypes.func.isRequired,\n  onCancel: PropTypes.func.isRequired,\n  confirmationText: PropTypes.string.isRequired\n}\n","import Aviator from 'aviator';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Glyphicon } from 'react-bootstrap';\nimport { observer } from 'mobx-react';\n\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport { researchPlanShowOrNew } from 'src/utilities/routesUtils';\nimport ConfirmDeletionModal from 'src/apps/mydb/elements/details/samples/measurementsTab/ConfirmDeletionModal';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nclass MeasurementsList extends Component {\n  static propTypes = {\n    sample: PropTypes.object.isRequired\n  };\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      measurementToDelete: null\n    }\n  };\n\n  // currently only research plan is supported as source\n  navigateToSource(measurement) {\n    const { uri } = Aviator.getCurrentRequest();\n    Aviator.navigate(`${uri}/${measurement.source_type}/${measurement.source_id}`, { silent: true });\n    if (measurement.source_type == 'research_plan') {\n      researchPlanShowOrNew({ params: { research_planID: measurement.source_id } });\n    }\n  }\n\n  deleteMeasurement() {\n    const measurement = this.state.measurementToDelete;\n    if (measurement == null) { return; }\n\n    LoadingActions.start();\n    this.context.measurements.deleteMeasurement(\n      measurement.id,\n      () => {\n        this.hideConfirmationModal();\n        LoadingActions.stop();\n      }\n    );\n  }\n\n  hideConfirmationModal() {\n    this.setState({ measurementToDelete: null });\n  }\n\n  renderDeleteButton(measurement) {\n    return (\n      <Button\n        bsStyle=\"danger\"\n        bsSize=\"xsmall\"\n        key={`Measurement${measurement.id}-DeleteButton`}\n        onClick={() => { this.setState({ measurementToDelete: measurement }) }}\n      >\n        <Glyphicon glyph=\"trash\" />\n      </Button>\n    );\n  }\n\n  renderEntry(sampleHeader, measurements) {\n    measurements = measurements.map(measurement => {\n      let measurementDisplay;\n      if (measurement.source_id) {\n        measurementDisplay = (\n          <a\n            key={`Measurement${measurement.id}-SourceLink`}\n            onClick={() => this.navigateToSource(measurement)}\n            style={{ cursor: 'pointer' }}\n          >\n            {measurement.description}: {measurement.value}{measurement.unit}\n          </a>\n        );\n      } else {\n        measurementDisplay = (\n          <span key={`Measurement${measurement.id}-Display`}>\n            {measurement.description}: {measurement.value}{measurement.unit}\n          </span>\n        );\n      }\n\n      return (\n        <tr key={`Measurement${measurement.id}`}>\n          <td>\n            {measurementDisplay}\n          </td>\n          <td>\n            {this.renderDeleteButton(measurement)}\n          </td>\n        </tr>\n      );\n    });\n\n    return (\n      <div key={`MeasurementListEntry${sampleHeader.id}`}>\n        <h4 key={`MeasurementListEntry${sampleHeader.id}-SampleName`}>\n          {sampleHeader.short_label} {sampleHeader.name}\n        </h4>\n        <table className=\"table striped condensed hover\">\n          <thead>\n            <tr>\n              <th>Measurement</th>\n              <th>Actions</th>\n            </tr>\n          </thead>\n          <tbody>\n            {measurements}\n          </tbody>\n        </table>\n        <ConfirmDeletionModal\n          show={this.state.measurementToDelete != null}\n          onConfirm={this.deleteMeasurement.bind(this)}\n          onCancel={this.hideConfirmationModal.bind(this)}\n          confirmationText=\"Are you sure you want to delete this measurement?\"\n        />\n      </div>\n    );\n  }\n\n  render() {\n    const measurementsStore = this.context.measurements;\n    let sampleIds = [...this.props.sample.ancestor_ids, this.props.sample.id].filter(a => a);\n    const entries = sampleIds.map(sampleId => {\n      if (!measurementsStore.dataForSampleAvailable(sampleId)) { return null; }\n\n      return this.renderEntry(\n        measurementsStore.sampleHeader(sampleId),\n        measurementsStore.measurementsForSample(sampleId)\n      );\n    });\n\n    return (\n      <div className=\"measurementList\">\n        {entries}\n      </div>\n    );\n  }\n}\n\nexport default observer(MeasurementsList);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ButtonGroup } from 'react-bootstrap';\nimport { observer } from 'mobx-react';\n\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport MeasurementsTable from 'src/apps/mydb/elements/details/samples/measurementsTab/MeasurementsTable';\nimport MeasurementsList from 'src/apps/mydb/elements/details/samples/measurementsTab/MeasurementsList';\n\nclass MeasurementsTab extends Component {\n  static propTypes = {\n    sample: PropTypes.object.isRequired\n  };\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      displayMode: 'table',\n      loading: false\n    };\n  }\n\n  componentDidMount() {\n    this.loadMeasurementsForSample();\n  }\n\n  loadMeasurementsForSample() {\n    this.setState({ loading: true });\n    this.context.measurements.loadMeasurementsForSample(\n      this.props.sample,\n      () => this.setState({ loading: false })\n    );\n  }\n\n  renderDisplaySwitcher() {\n    return (<ButtonGroup>\n      <Button\n        active={this.state.displayMode == 'table'}\n        bsSize=\"small\"\n        onClick={() => this.setState({ displayMode: 'table' })}\n      >\n        Show as Table\n      </Button>\n      <Button\n        active={this.state.displayMode == 'list'}\n        bsSize=\"small\"\n        onClick={() => this.setState({ displayMode: 'list' })}\n      >\n        Show as List\n      </Button>\n    </ButtonGroup>);\n  }\n\n  render() {\n    if (this.state.loading) {\n      return (<h2>Loading measurements...</h2>);\n    }\n    if (!this.context.measurements.dataForSampleHierarchyAvailable(this.props.sample)) {\n      return (<span>No measurements recorded for this sample</span>);\n    }\n\n    const displaySwitcher = this.renderDisplaySwitcher();\n\n    let displayData =\n      this.state.displayMode == 'table'\n        ? <MeasurementsTable sample={this.props.sample} />\n        : <MeasurementsList sample={this.props.sample} />;\n\n    return (\n      <div>\n        {displaySwitcher}\n        {displayData}\n      </div>\n    );\n  }\n}\nexport default observer(MeasurementsTab);\n","/* eslint-disable no-underscore-dangle,  camelcase, semi,  no-unused-vars */\nimport Element from 'src/models/Element';\n\nexport default class Chemical extends Element {\n  static buildEmpty() {\n    return new Chemical({\n      chemical_data: [{ }],\n      cas: null,\n    });\n  }\n\n  get chemical_data() {\n    return this._chemical_data;\n  }\n\n  set chemical_data(chemical_data) {\n    if (chemical_data) {\n      this._chemical_data = chemical_data;\n    }\n  }\n\n  get cas() {\n    return this._cas;\n  }\n\n  set cas(cas) {\n    if (cas) {\n      this._cas = cas;\n    }\n  }\n\n  serialize() {\n    return super.serialize({\n      chemical_data: this.chemical_data,\n      cas: this.cas\n    })\n  }\n\n  buildChemical(parameter, value) {\n    const chemicalData = Chemical.buildEmpty().chemical_data[0];\n    chemicalData[parameter] = value;\n    if (parameter !== 'cas' && !this._chemical_data) {\n      this._chemical_data = [];\n      this._chemical_data.push(chemicalData);\n    } else if (parameter !== 'cas' && this._chemical_data) {\n      this._chemical_data[0][parameter] = value;\n    } else if (parameter === 'cas') {\n      this._cas = value;\n    }\n  }\n}\n","import 'whatwg-fetch';\nimport Chemical from 'src/models/Chemical';\n\nexport default class ChemicalFetcher {\n  static fetchChemical(sampleId) {\n    return fetch(`/api/v1/chemicals?sample_id=${sampleId}`, {\n      credentials: 'same-origin',\n    }).then((response) => response.json())\n      .then((json) => new Chemical(json))\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static create(data) {\n    const params = { ...data };\n    return fetch('/api/v1/chemicals/create', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static update(params) {\n    return fetch(`/api/v1/chemicals/${params.sample_id}`, {\n      credentials: 'same-origin',\n      method: 'put',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchSafetySheets(queryParams) {\n    return fetch(`/api/v1/chemicals/fetch_safetysheet/${queryParams.id}`\n       + `?data[vendor]=${queryParams.vendor}&data[option]=${queryParams.queryOption}`\n        + `&data[language]=${queryParams.language}&data[searchStr]=${queryParams.string}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => {\n      if (response.ok) {\n        return response.text();\n      }\n      return null;\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n      return null;\n    });\n  }\n\n  static saveSafetySheets(params) {\n    return fetch('/api/v1/chemicals/save_safety_datasheet', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static safetyPhrases(queryParams) {\n    return fetch(`/api/v1/chemicals/safety_phrases/${queryParams.id}?vendor=${queryParams.vendor}`, {\n      credentials: 'same-origin',\n      method: 'GET'\n    }).then((response) => {\n      if (response.status === 204) {\n        return response.status;\n      }\n      return response.json();\n    }).catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static chemicalProperties(productLink) {\n    return fetch(`/api/v1/chemicals/chemical_properties?link=${productLink}`, {\n      credentials: 'same-origin',\n      method: 'GET'\n    }).then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n}\n","import React, { Component } from 'react';\nimport { Button, ButtonGroup } from 'react-bootstrap';\n\nconst CollapseButton = (props) => {\n    const { openTab, setOpenTab } = props;\n    const arrow = openTab\n        ? <i className=\"fa fa-angle-double-up\" />\n        : <i className=\"fa fa-angle-double-down\" />;\n    return (\n        <ButtonGroup vertical block>\n        <Button\n            id={props.name}\n            bsSize=\"xsmall\"\n            style={{ backgroundColor: '#ddd' }}\n            onClick={() =>  props.setOpenTab(!openTab)}\n        >\n            {arrow}\n            &nbsp; {props.name}\n        </Button>\n        </ButtonGroup>\n    );\n}\nexport default CollapseButton;\n","/* eslint-disable no-underscore-dangle */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  FormGroup, ControlLabel, FormControl, Button, OverlayTrigger, Tooltip, Tabs, Tab, ButtonToolbar,\n  ListGroup, ListGroupItem, InputGroup, Collapse, Modal\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport SVG from 'react-inlinesvg';\nimport ChemicalFetcher from 'src/fetchers/ChemicalFetcher';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport Sample from 'src/models/Sample';\nimport CollapseButton from 'src/components/common/CollapseButton';\nimport NumericInputUnit from 'src/apps/mydb/elements/details/NumericInputUnit';\n\nexport default class ChemicalTab extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      chemical: undefined,\n      safetySheets: [],\n      displayWell: false,\n      checkSaveIconThermofischer: false,\n      checkSaveIconMerck: false,\n      vendorValue: 'All',\n      queryOption: 'CAS',\n      safetySheetLanguage: 'en',\n      safetyPhrases: '',\n      warningMessage: '',\n      loadingQuerySafetySheets: false,\n      loadingSaveSafetySheets: false,\n      loadChemicalProperties: { vendor: '', loading: false },\n      openInventoryInformationTab: true,\n      openSafetyTab: true,\n      openLocationTab: true,\n      viewChemicalPropertiesModal: false,\n      viewModalForVendor: ''\n    };\n    this.handleFieldChanged = this.handleFieldChanged.bind(this);\n    this.handleMetricsChange = this.handleMetricsChange.bind(this);\n  }\n\n  componentDidMount() {\n    const { sample } = this.props;\n    this.fetchChemical(sample);\n    this.updateDisplayWell();\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    const { saveInventory } = this.props;\n    const { chemical } = this.state;\n\n    if (prevState.chemical !== chemical) {\n      this.updateDisplayWell();\n    }\n\n    if (saveInventory === true) {\n      this.handleSubmitSave();\n    }\n  }\n\n  handleFieldChanged(parameter, value) {\n    const { chemical } = this.state;\n    const { editChemical } = this.props;\n    if (chemical) {\n      chemical.buildChemical(parameter, value);\n      editChemical(chemical.isEdited);\n    }\n    this.setState({ chemical });\n  }\n\n  handleSubmitSave() {\n    const { chemical } = this.state;\n    const {\n      sample,\n      parent,\n      editChemical,\n    } = this.props;\n    if (!sample || !chemical) {\n      return;\n    }\n    const chemicalData = chemical._chemical_data || null;\n    const cas = sample.xref?.cas ?? '';\n    const params = {\n      chemical_data: chemicalData,\n      cas,\n      sample_id: sample.id\n    };\n    if (chemical.isNew) {\n      ChemicalFetcher.create(params).then((response) => {\n        if (response) {\n          this.setState({ chemical });\n        }\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n      chemical.isNew = false;\n      editChemical(false);\n      chemical.updateChecksum();\n    } else {\n      ChemicalFetcher.update(params).then((response) => {\n        if (response) {\n          editChemical(false);\n          chemical.updateChecksum();\n          this.setState({ chemical });\n        }\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    }\n    parent.setState({ saveInventoryAction: false });\n  }\n\n  handleRemove(index, document) {\n    const { safetySheets, chemical } = this.state;\n    const parameters = chemical._chemical_data[0];\n    if (safetySheets.length !== 0) {\n      safetySheets.splice(index, 1);\n      this.setState({ safetySheets });\n    }\n    const path = chemical._chemical_data[0].safetySheetPath;\n    if (path && path.length > 0) {\n      const { safetySheetPath } = chemical._chemical_data[0];\n\n      const alfaIndex = safetySheetPath.findIndex((element) => element.alfa_link);\n      const merckIndex = safetySheetPath.findIndex((element) => element.merck_link);\n      if (alfaIndex !== -1 && document.alfa_link) {\n        delete parameters.alfaProductInfo;\n        path.splice(alfaIndex, 1);\n      } else if (merckIndex !== -1 && document.merck_link) {\n        delete parameters.merckProductInfo;\n        path.splice(merckIndex, 1);\n      }\n      this.setState({ chemical });\n      this.handleSubmitSave();\n    }\n    this.setState({ warningMessage: '' });\n    this.updateCheckMark(document);\n  }\n\n  handleCheckMark(vendor) {\n    if (vendor === 'Thermofisher') {\n      this.setState({ checkSaveIconThermofischer: true });\n    } else if (vendor === 'Merck') {\n      this.setState({ checkSaveIconMerck: true });\n    }\n  }\n\n  handleVendorOption(value) {\n    this.setState({ vendorValue: value });\n  }\n\n  handleQueryOption(value) {\n    this.setState({ queryOption: value });\n  }\n\n  handleLanguageOption(value) {\n    this.setState({ safetySheetLanguage: value });\n  }\n\n  handlePropertiesModal(vendor) {\n    this.setState({\n      viewChemicalPropertiesModal: true,\n      viewModalForVendor: vendor\n    });\n  }\n\n  // eslint-disable-next-line react/sort-comp\n  handleMetricsChange(parameter, newValue, newUnit) {\n    const paramObj = { unit: newUnit, value: newValue };\n    this.handleFieldChanged(parameter, paramObj);\n  }\n\n  querySafetySheets = () => {\n    const { sample } = this.props;\n    this.setState({ loadingQuerySafetySheets: true });\n    const sampleName = sample.showedName();\n    const moleculeId = sample.molecule_name_hash?.mid ?? null;\n    const {\n      chemical, vendorValue, queryOption, safetySheetLanguage\n    } = this.state;\n    if (chemical) {\n      chemical.buildChemical('sample_name', sampleName);\n      chemical.buildChemical('molecule_id', moleculeId);\n    }\n    let searchStr;\n\n    if (queryOption === 'Common Name') {\n      searchStr = sample.molecule_name_hash.label;\n    } else {\n      const sampleCas = sample.xref?.cas ?? '';\n      searchStr = sampleCas;\n    }\n\n    const queryParams = {\n      id: moleculeId,\n      vendor: vendorValue,\n      queryOption,\n      language: safetySheetLanguage,\n      string: searchStr\n    };\n    const { safetySheets } = this.state;\n\n    ChemicalFetcher.fetchSafetySheets(queryParams).then((result) => {\n      const obj = JSON.parse(result);\n      safetySheets.splice(0, 1);\n      this.setState({ safetySheets });\n      if (obj !== null && obj !== undefined) {\n        this.setState({ safetySheets: Object.values(obj) });\n      } else {\n        // using a mock value if obj undefined or null -> for testing purposes\n        const mockValue = ['mockValue'];\n        this.setState({ safetySheets: mockValue });\n      }\n      this.setState({ loadingQuerySafetySheets: false });\n      this.setState({ displayWell: true });\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  };\n\n  // eslint-disable-next-line class-methods-use-this\n  stylePhrases = (str) => {\n    const HazardPhrases = [];\n    if (str && str.h_statements && str.h_statements.length !== 0) {\n      // eslint-disable-next-line no-restricted-syntax\n      for (const [key, value] of Object.entries(str.h_statements)) {\n        // eslint-disable-next-line react/jsx-one-expression-per-line\n        const st = <p key={key}> {key}:{value} </p>;\n        HazardPhrases.push(st);\n      }\n    }\n\n    const precautionaryPhrases = [];\n    if (str && str.p_statements && str?.p_statements?.length !== 0) {\n      // eslint-disable-next-line no-restricted-syntax\n      for (const [key, value] of Object.entries(str?.p_statements || {})) {\n        // eslint-disable-next-line react/jsx-one-expression-per-line\n        const st = <p key={key}>{key}:{value}</p>;\n        precautionaryPhrases.push(st);\n      }\n    }\n\n    const pictogramsArray = str.pictograms?.map((i) => (\n      i !== null ? <SVG key={`ghs${i}`} src={`/images/ghs/${i}.svg`} /> : null));\n\n    return (\n      <div>\n        <p className=\"safety-phrases\">Pictograms: </p>\n        {(str.pictograms !== undefined && str.pictograms.length !== 0)\n          ? pictogramsArray : <p>Could not find pictograms</p>}\n        <p className=\"safety-phrases\">Hazard Statements: </p>\n        {HazardPhrases}\n        <p className=\"safety-phrases\">Precautionary Statements: </p>\n        {precautionaryPhrases}\n      </div>\n    );\n  };\n\n  fetchSafetyPhrases = (vendor) => {\n    const { sample } = this.props;\n    const queryParams = {\n      vendor, id: sample.id\n    };\n    const warningMessage = 'Please fetch and save corresponding safety data sheet first';\n    this.setState({ warningMessage: '' });\n    ChemicalFetcher.safetyPhrases(queryParams).then((result) => {\n      if (result === warningMessage || result === 204) {\n        this.setState({ warningMessage });\n      } else if (result === 'Could not find H and P phrases') {\n        this.setState({ warningMessage: result });\n      } else {\n        this.setState({ safetyPhrases: this.stylePhrases(result) });\n        this.handleFieldChanged('safetyPhrases', result);\n      }\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  };\n\n  fetchChemicalProperties = (vendor) => {\n    const { chemical } = this.state;\n    let productLink;\n    this.setState({ loadChemicalProperties: { vendor, loading: true } });\n    this.setState({ warningMessage: '' });\n\n    if (chemical && vendor === 'thermofischer') {\n      productLink = chemical._chemical_data[0].alfaProductInfo ? chemical._chemical_data[0].alfaProductInfo.productLink : '';\n    } else if (chemical && vendor === 'merck') {\n      productLink = chemical._chemical_data[0].merckProductInfo ? chemical._chemical_data[0].merckProductInfo.productLink : '';\n    }\n    const warningMessage = 'Please fetch and save corresponding safety data sheet first';\n\n    ChemicalFetcher.chemicalProperties(productLink).then((result) => {\n      this.setState({ loadChemicalProperties: { vendor: '', loading: false } });\n      if (result === 'Could not find additional chemical properties' || result === null) {\n        this.setState({ warningMessage });\n      } else {\n        if (chemical && vendor === 'thermofischer') {\n          chemical._chemical_data[0].alfaProductInfo.properties = result;\n        } else if (chemical && vendor === 'merck') {\n          if (chemical._chemical_data && chemical._chemical_data[0] && chemical._chemical_data[0].merckProductInfo) {\n            chemical._chemical_data[0].merckProductInfo.properties = result;\n          }\n        }\n        this.mapToSampleProperties(vendor);\n      }\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  };\n\n  querySafetyPhrases = (vendor) => (\n    <Button\n      id=\"safetyPhrases-btn\"\n      onClick={() => this.fetchSafetyPhrases(vendor)}\n    >\n      fetch Safety Phrases\n    </Button>\n  );\n\n  fetchChemical(sample) {\n    if (sample === undefined || sample.is_new) {\n      return;\n    }\n    ChemicalFetcher.fetchChemical(sample.id).then((chemical) => {\n      if (chemical !== null) {\n        this.setState({ chemical });\n      }\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  /* eslint-disable prefer-destructuring */\n  mapToSampleProperties(vendor) {\n    const { sample, parent } = this.props;\n    const { chemical } = this.state;\n    const chemicalData = chemical?._chemical_data[0] || [];\n    let properties = {};\n\n    if (vendor === 'thermofischer') {\n      properties = chemicalData.alfaProductInfo.properties;\n    } else if (vendor === 'merck') {\n      properties = chemicalData.merckProductInfo.properties;\n    }\n\n    const updateSampleProperty = (propertyName, propertyValue) => {\n      if (propertyValue) {\n        const rangeValues = propertyValue.replace(/°C?/g, '').trim().split('-');\n        // replace hyphen with minus sign and parse\n        const lowerBound = parseFloat(rangeValues[0].replace('−', '-')) || Number.NEGATIVE_INFINITY;\n        const upperBound = rangeValues.length === 2 ? parseFloat(rangeValues[1].replace('−', '-')) : Number.POSITIVE_INFINITY;\n        sample.updateRange(propertyName, lowerBound, upperBound);\n      }\n    };\n\n    updateSampleProperty('boiling_point', properties.boiling_point);\n    updateSampleProperty('melting_point', properties.melting_point);\n\n    sample.xref.flash_point = {\n      unit: '°C',\n      value: properties.flash_point\n    };\n\n    const densityNumber = properties.density?.match(/[0-9.]+/g);\n    if (densityNumber) {\n      sample.density = densityNumber[0];\n    }\n\n    sample.xref.form = properties.form || sample.xref.form;\n    sample.xref.color = properties.color || sample.xref.color;\n    sample.xref.refractive_index = properties.refractive_index || sample.xref.refractive_index;\n    sample.xref.solubility = properties.solubility || sample.xref.solubility;\n\n    parent.setState({ sample });\n    ElementActions.updateSample(new Sample(sample), false);\n  }\n\n  chemicalStatus(data, label, parameter) {\n    const val = data?.[parameter] ?? '';\n    const statusOptions = [\n      { label: 'Available', value: 'Available' },\n      { label: 'Out of stock', value: 'Out of stock' },\n      { label: 'To be ordered', value: 'To be ordered' },\n      { label: 'Ordered', value: 'Ordered' }\n    ];\n    return (\n      <FormGroup>\n        <ControlLabel>{label}</ControlLabel>\n        <InputGroup id=\"chemical-status\">\n          <Select.Creatable\n            name=\"chemicalStatus\"\n            multi={false}\n            options={statusOptions}\n            onChange={(e) => { this.handleFieldChanged(parameter, e.value); }}\n            value={val}\n            clearable={false}\n          />\n        </InputGroup>\n      </FormGroup>\n    );\n  }\n\n  textInput(data, label, parameter) {\n    const componentClass = parameter !== 'important_notes' && parameter !== 'disposal_info' && parameter !== 'sensitivity_storage'\n    && parameter !== 'solubility' ? 'input' : 'textarea';\n    let value = '';\n    if (parameter !== 'cas') {\n      value = data?.[parameter] ?? '';\n    } else {\n      value = data || '';\n    }\n    let conditionalOverlay;\n    if (parameter === 'date') {\n      conditionalOverlay = 'please enter the name of the person who orders/ordered the substance';\n    } else if (parameter === 'required_by') {\n      conditionalOverlay = 'please enter the name of the person who requires the substance';\n    } else {\n      conditionalOverlay = null;\n    }\n    const checkLabel = label !== 'Date' && <ControlLabel>{label}</ControlLabel>;\n\n    return (\n      <OverlayTrigger placement=\"top\" overlay={parameter === 'date' || parameter === 'required_by' ? <Tooltip id=\"field-text-input\">{conditionalOverlay}</Tooltip> : <div />}>\n        <FormGroup>\n          {checkLabel}\n          <FormControl\n            componentClass={componentClass}\n            id={`textInput_${label}`}\n            type=\"text\"\n            value={value}\n            onChange={(e) => { this.handleFieldChanged(parameter, e.target.value); }}\n            rows={label !== 'Important notes' && label !== 'Disposal information' ? 1 : 2}\n          />\n        </FormGroup>\n      </OverlayTrigger>\n    );\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  clipboardTooltip(value) {\n    const info = `product link (${value})`;\n    return (\n      <Tooltip id=\"productLink_button\">{info}</Tooltip>\n    );\n  }\n\n  copyButton(document) {\n    const { chemical } = this.state;\n    let info = '';\n    let value;\n    if (chemical) {\n      if (chemical._chemical_data !== undefined && chemical._chemical_data.length !== 0) {\n        info = chemical._chemical_data[0];\n      }\n    }\n    if (document.alfa_link !== undefined) {\n      if (info.alfaProductInfo) {\n        value = info.alfaProductInfo.productLink;\n      } else {\n        value = document.alfa_product_link || null;\n      }\n    } else if (info.merckProductInfo) {\n      value = info.merckProductInfo.productLink;\n    } else {\n      value = document.merck_product_link || null;\n    }\n    return (\n      <OverlayTrigger placement=\"bottom\" overlay={this.clipboardTooltip(value)}>\n        <Button active bsSize=\"xs\">\n          <a href={value} target=\"_blank\" rel=\"noreferrer\">\n            <i className=\"fa fa-external-link\" />\n          </a>\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n\n  locationInput(data, parameter, domain) {\n    const value = data?.[parameter] ?? '';\n    const subLabel = (parameter.split('_'))[1];\n    const string = domain.replace(/_/g, ' ');\n    const modifyStr = string.charAt(0).toUpperCase() + string.slice(1);\n    const ParentLabelCondition = ['host_building', 'current_building', 'host_group', 'current_group'];\n    const ParentLabel = ParentLabelCondition.includes(parameter)\n      ? <ControlLabel>{modifyStr}</ControlLabel> : <ControlLabel className=\"location-input\"> </ControlLabel>;\n    const paramsObj = {};\n    paramsObj[domain] = parameter;\n\n    return (\n      <div>\n        {ParentLabel}\n        <InputGroup className=\"location-chemicalTab\">\n          <InputGroup.Addon>{subLabel}</InputGroup.Addon>\n          <FormGroup controlId=\"subLabel\">\n            <FormControl\n              componentClass=\"input\"\n              value={value}\n              onChange={(e) => { this.handleFieldChanged(parameter, e.target.value); }}\n            />\n          </FormGroup>\n        </InputGroup>\n      </div>\n    );\n  }\n\n  numInputWithoutTable(data, label, parameter) {\n    const value = data?.[parameter]?.value ?? 0;\n    let unit; let field;\n    if (parameter === 'amount') {\n      unit = data?.[parameter]?.unit ?? 'mg';\n      field = 'chemical_amount_in_g';\n    } else if (parameter === 'volume') {\n      unit = data?.[parameter]?.unit ?? 'ml';\n      field = 'chemical_amount_in_l';\n    }\n    return (\n      <NumericInputUnit\n        field={field}\n        inputDisabled={false}\n        onInputChange={\n          (newValue, newUnit) => this.handleMetricsChange(parameter, newValue, newUnit)\n        }\n        unit={unit}\n        numericValue={value}\n        label={label}\n      />\n    );\n  }\n\n  updateCheckMark(document) {\n    if (document.alfa_link) {\n      this.setState({ checkSaveIconThermofischer: false });\n    } else if (document.merck_link) {\n      this.setState({ checkSaveIconMerck: false });\n    }\n  }\n\n  checkMarkButton(document) {\n    const { checkSaveIconThermofischer, checkSaveIconMerck } = this.state;\n    let checkMark;\n    if (document.alfa_link) {\n      checkMark = (!checkSaveIconThermofischer && document.alfa_product_number !== undefined)\n        ? null : (\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"saveCheckIconThermo\">Saved</Tooltip>}>\n            <i className=\"fa fa-check-circle\" />\n          </OverlayTrigger>\n        );\n    } else if (document.merck_link) {\n      checkMark = (!checkSaveIconMerck && document.merck_product_number !== undefined) ? null : (\n        <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"saveCheckIconMerck\">Saved</Tooltip>}>\n          <i className=\"fa fa-check-circle\" />\n        </OverlayTrigger>\n      );\n    }\n    return checkMark;\n  }\n\n  removeButton(index, document) {\n    return (\n      <Button\n        bsSize=\"xs\"\n        bsStyle=\"danger\"\n        onClick={() => this.handleRemove(index, document)}\n      >\n        <i className=\"fa fa-trash-o\" />\n      </Button>\n    );\n  }\n\n  saveSdsFile(productInfo) {\n    const { chemical } = this.state;\n    const { sample } = this.props;\n    let vendorProduct;\n    if (productInfo.vendor === 'Thermofisher') {\n      vendorProduct = 'alfaProductInfo';\n    } else if (productInfo.vendor === 'Merck') {\n      vendorProduct = 'merckProductInfo';\n      this.setState({ loadingSaveSafetySheets: true });\n    }\n    const cas = sample.xref?.cas ?? '';\n    // update chemical data before saving it in the database\n    this.handleFieldChanged(vendorProduct, productInfo);\n    const params = {\n      sample_id: sample.id,\n      cas,\n      chemical_data: chemical._chemical_data,\n      vendor_product: vendorProduct\n    };\n    ChemicalFetcher.saveSafetySheets(params).then((result) => {\n      if (result) {\n        const value = `/safety_sheets/${productInfo.productNumber}_${productInfo.vendor}.pdf`;\n        const chemicalData = chemical._chemical_data;\n        const pathArr = [];\n        const pathParams = {};\n        let vendorParams;\n        if (productInfo.vendor === 'Thermofisher') {\n          vendorParams = 'alfa_link';\n        } else {\n          vendorParams = 'merck_link';\n        }\n        pathParams[vendorParams] = value;\n        if (chemicalData[0].safetySheetPath === undefined\n          || chemicalData[0].safetySheetPath.length === 0) {\n          pathArr.push(pathParams);\n          this.handleFieldChanged('safetySheetPath', pathArr);\n        } else if (chemicalData[0].safetySheetPath.length === 1\n          && chemicalData[0].safetySheetPath[0][vendorParams]\n          === undefined) {\n          chemicalData[0].safetySheetPath.push(pathParams);\n        } else if (chemicalData[0].safetySheetPath.length === 1\n          && chemicalData[0].safetySheetPath[0][vendorParams]\n          !== undefined && chemicalData[0].safetySheetPath[0][vendorParams] !== value) {\n          chemicalData[0].safetySheetPath[0][vendorParams] = value;\n        } else {\n          for (let i = 0; i < chemicalData[0].safetySheetPath.length; i += 1) {\n            if (chemicalData[0].safetySheetPath[i][vendorParams]\n              !== undefined && chemicalData[0].safetySheetPath[i][vendorParams] !== value) {\n              chemicalData[0].safetySheetPath[i][vendorParams] = value;\n            }\n          }\n        }\n        chemical.isNew = false;\n        this.setState({ chemical });\n        this.handleSubmitSave();\n        this.setState({ loadingSaveSafetySheets: false });\n        this.handleCheckMark(productInfo.vendor);\n      }\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  saveSafetySheetsButton(sdsInfo, index) {\n    const {\n      checkSaveIconMerck, checkSaveIconThermofischer,\n      loadingSaveSafetySheets, chemical\n    } = this.state;\n    let vendor;\n    let sdsLink;\n    let productNumber;\n    let productLink;\n    let checkMark;\n    if (chemical && chemical._chemical_data) {\n      const { safetySheetPath } = chemical._chemical_data[0] || [];\n      if (sdsInfo.alfa_link !== undefined) {\n        vendor = 'Thermofisher';\n        sdsLink = sdsInfo.alfa_link;\n        productNumber = sdsInfo.alfa_product_number;\n        productLink = sdsInfo.alfa_product_link;\n        const hasAlfaLink = Boolean(safetySheetPath?.[index]?.alfa_link);\n        checkMark = checkSaveIconThermofischer || hasAlfaLink;\n      } else if (sdsInfo.merck_link !== undefined) {\n        vendor = 'Merck';\n        sdsLink = sdsInfo.merck_link;\n        productNumber = sdsInfo.merck_product_number;\n        productLink = sdsInfo.merck_product_link;\n        const hasMerckLink = Boolean(safetySheetPath?.[index]?.merck_link);\n        checkMark = checkSaveIconMerck || hasMerckLink;\n      }\n    }\n    const productInfo = {\n      vendor,\n      sdsLink,\n      productNumber,\n      productLink,\n    };\n\n    return (\n      <Button\n        id=\"saveSafetySheetButton\"\n        bsSize=\"xs\"\n        bsStyle=\"warning\"\n        disabled={checkMark}\n        onClick={() => this.saveSdsFile(productInfo)}\n      >\n        {loadingSaveSafetySheets === true && sdsInfo.merck_link !== undefined\n          ? (\n            <div>\n              <i className=\"fa fa-spinner fa-pulse fa-fw\" />\n            </div>\n          )\n          : <i className=\"fa fa-save\" />}\n      </Button>\n    );\n  }\n\n  chooseVendor() {\n    const { vendorValue } = this.state;\n    const vendorOptions = [\n      // { label: 'All', value: 'All' },\n      { label: 'Merck', value: 'Merck' },\n      // { label: 'Thermofisher', value: 'Thermofisher' },\n    ];\n\n    return (\n      <FormGroup>\n        <ControlLabel>Vendor</ControlLabel>\n        <Select\n          name=\"chemicalVendor\"\n          clearable={false}\n          options={vendorOptions}\n          onChange={(e) => this.handleVendorOption(e.value)}\n          value={vendorValue}\n        />\n      </FormGroup>\n    );\n  }\n\n  queryOption() {\n    const { queryOption } = this.state;\n    const { sample } = this.props;\n    const cas = sample.xref?.cas ?? '';\n    const queryOptions = [\n      { label: 'Common Name', value: 'Common Name' },\n      { label: 'CAS', value: 'CAS' }\n    ];\n    const conditionalOverlay = 'Assign a cas number using the cas field in labels section for better search results using cas number';\n\n    return (\n      <OverlayTrigger placement=\"top\" overlay={cas && cas !== '' ? <div /> : <Tooltip id=\"sds-query-message\">{conditionalOverlay}</Tooltip>}>\n\n        <FormGroup>\n          <ControlLabel>Query SDS using</ControlLabel>\n          <Select\n            name=\"queryOption\"\n            clearable={false}\n            options={queryOptions}\n            onChange={(e) => this.handleQueryOption(e.value)}\n            value={queryOption}\n          />\n        </FormGroup>\n      </OverlayTrigger>\n\n    );\n  }\n\n  safetySheetLanguage() {\n    const { safetySheetLanguage } = this.state;\n    const languageOptions = [\n      { label: 'English', value: 'en' },\n      { label: 'Deutsch', value: 'de' },\n      { label: 'French', value: 'fr' },\n    ];\n\n    return (\n      <FormGroup>\n        <ControlLabel>Choose Language of SDS</ControlLabel>\n        <Select\n          name=\"languageOption\"\n          clearable={false}\n          options={languageOptions}\n          onChange={(e) => this.handleLanguageOption(e.value)}\n          value={safetySheetLanguage}\n        />\n      </FormGroup>\n    );\n  }\n\n  renderChildElements = (document, index) => (\n    <div className=\"render-childs\">\n      <div className=\"child-elements\">\n        <div className=\"link-wrapper\">\n          <a href={(document.alfa_link !== undefined) ? document.alfa_link : document.merck_link} target=\"_blank\" rel=\"noreferrer\">\n            {(document.alfa_link !== undefined) ? 'Safety Data Sheet from Thermofisher' : 'Safety Data Sheet from Merck'}\n            { this.checkMarkButton(document) }\n          </a>\n        </div>\n        <div className=\"button-toolbar-wrapper\">\n          <ButtonToolbar>\n            {this.copyButton(document)}\n            {this.saveSafetySheetsButton(document, index)}\n            {this.removeButton(index, document)}\n          </ButtonToolbar>\n        </div>\n        <div className=\"chemical-properties\">\n          { document.alfa_link !== undefined ? this.renderChemicalProperties('thermofischer') : this.renderChemicalProperties('merck') }\n        </div>\n        <div className=\"query-safety-phrases-button\">\n          { document.alfa_link !== undefined ? this.querySafetyPhrases('thermofischer') : this.querySafetyPhrases('merck') }\n        </div>\n      </div>\n    </div>\n  );\n\n  renderSafetySheets = () => {\n    const { safetySheets, chemical } = this.state;\n    if (!chemical || !chemical._chemical_data || !chemical._chemical_data.length) {\n      return null;\n    }\n    const savedSds = chemical._chemical_data[0].safetySheetPath;\n    const sdsStatus = safetySheets.length ? safetySheets : savedSds;\n    const mappedSafetySheets = sdsStatus?.map((document, index) => {\n      const key = (document.alfa_product_number || document.merck_product_number) || index;\n      const isValidDocument = document !== 'Could not find safety data sheet from Thermofisher'\n        && document !== 'Could not find safety data sheet from Merck';\n      return (\n        <div className=\"safety-sheets-form\" key={key}>\n          {isValidDocument ? (\n            <ListGroupItem key={`${key}-file`}>\n              {this.renderChildElements(document, index)}\n            </ListGroupItem>\n          ) : (\n            <ListGroupItem key={`${key}-no-document`}>\n              <div>\n                <p className=\"safety-sheets-paragraph\">\n                  {document}\n                </p>\n              </div>\n            </ListGroupItem>\n          )}\n        </div>\n      );\n    });\n\n    return (\n      <div>\n        <ListGroup>{mappedSafetySheets}</ListGroup>\n      </div>\n    );\n  };\n\n  renderSafetyPhrases = () => {\n    const { chemical, safetyPhrases } = this.state;\n    let fetchedSafetyPhrases;\n    if (chemical && chemical._chemical_data !== undefined && chemical._chemical_data.length !== 0) {\n      const phrases = chemical._chemical_data[0].safetyPhrases;\n      fetchedSafetyPhrases = (phrases !== undefined) ? this.stylePhrases(phrases) : '';\n    }\n    return (\n      <div className=\"render-safety-phrases\">\n        {safetyPhrases === '' ? fetchedSafetyPhrases : safetyPhrases}\n      </div>\n    );\n  };\n\n  closePropertiesModal() {\n    this.setState({\n      viewChemicalPropertiesModal: false,\n      viewModalForVendor: ''\n    });\n  }\n\n  renderChemicalProperties = (vendor) => {\n    const { loadingQuerySafetySheets, loadChemicalProperties } = this.state;\n\n    return (\n      <div className=\"render-chemical-properties\">\n        <InputGroup.Button>\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"renderChemProp\">Info, if any found, will be copied to properties fields in sample properties tab</Tooltip>}>\n            <Button\n              id=\"fetch-properties\"\n              onClick={() => this.fetchChemicalProperties(vendor)}\n              disabled={!!loadingQuerySafetySheets || !!loadChemicalProperties.loading}\n              className=\"fetch-properties-button\"\n            >\n              {loadChemicalProperties.loading === true && loadChemicalProperties.vendor === vendor\n                ? (\n                  <div>\n                    <i className=\"fa fa-spinner fa-pulse fa-fw\" />\n                    <span className=\"visually-hidden\">\n                      Loading...\n                    </span>\n                  </div>\n\n                ) : 'fetch Chemical Properties'}\n            </Button>\n          </OverlayTrigger>\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"viewChemProp\">click to view fetched chemical properties</Tooltip>}>\n            <Button active className=\"show-properties-modal\" onClick={() => this.handlePropertiesModal(vendor)}><i className=\"fa fa-file-text\" /></Button>\n          </OverlayTrigger>\n        </InputGroup.Button>\n\n      </div>\n    );\n  };\n\n  inventoryCollapseBtn() {\n    const { openInventoryInformationTab } = this.state;\n    return (\n      <CollapseButton\n        openTab={openInventoryInformationTab}\n        setOpenTab={() => this.setState(\n          { openInventoryInformationTab: !openInventoryInformationTab }\n        )}\n        name=\"Inventory Information\"\n      />\n    );\n  }\n\n  safetyCollapseBtn() {\n    const { openSafetyTab } = this.state;\n    return (\n      <CollapseButton\n        openTab={openSafetyTab}\n        setOpenTab={() => this.setState({ openSafetyTab: !openSafetyTab })}\n        name=\"Safety\"\n      />\n    );\n  }\n\n  locationCollapseBtn() {\n    const { openLocationTab } = this.state;\n    return (\n      <CollapseButton\n        openTab={openLocationTab}\n        setOpenTab={() => this.setState({ openLocationTab: !openLocationTab })}\n        name=\"Location and Information\"\n      />\n    );\n  }\n\n  inventoryInformationTab(data) {\n    const { openInventoryInformationTab } = this.state;\n    return (\n      <div className=\"inventory-tab\">\n        {this.inventoryCollapseBtn()}\n        <Collapse in={openInventoryInformationTab} key=\"inventory-Information-collapse-list\">\n          <div className=\"inventory-tab\">\n            <div className=\"inventory-information\">\n              <div className=\"inventory-information-status\">\n                {this.chemicalStatus(data, 'Status', 'status')}\n              </div>\n              <div className=\"inventory-text-input\">\n                {this.textInput(data, 'Vendor', 'vendor')}\n              </div>\n              <div className=\"inventory-text-input\">\n                {this.textInput(data, 'Order number', 'order_number')}\n              </div>\n              <div className=\"inventory-text-input\">\n                {this.numInputWithoutTable(data, 'Amount', 'amount')}\n              </div>\n              <div className=\"inventory-text-input\">\n                {this.numInputWithoutTable(data, '', 'volume')}\n              </div>\n            </div>\n            <div className=\"text-input-group\">\n              <div className=\"inventory-text-input\">\n                {this.textInput(data, 'Price', 'price')}\n              </div>\n              <div className=\"text-input-person\">\n                {this.textInput(data, 'Person', 'person')}\n              </div>\n              <div className=\"text-input-date\">\n                <Tabs id=\"tab-date\">\n                  <Tab eventKey=\"required\" title=\"Required date\">\n                    {this.textInput(data, 'Date', 'required_date')}\n                  </Tab>\n                  <Tab eventKey=\"ordered\" title=\"Ordered date\">\n                    {this.textInput(data, 'Date', 'ordered_date')}\n                  </Tab>\n                </Tabs>\n              </div>\n              <div className=\"text-input-required-by\">\n                {this.textInput(data, 'Required by', 'required_by')}\n              </div>\n            </div>\n          </div>\n        </Collapse>\n      </div>\n    );\n  }\n\n  locationTab(data) {\n    const { openLocationTab } = this.state;\n    return (\n      <div>\n        {this.locationCollapseBtn()}\n        <Collapse in={openLocationTab} key=\"location-tab-collapse-list\">\n          <div className=\"location-tab\">\n            <div className=\"location-input-group\">\n              <div>\n                {this.locationInput(data, 'host_building', 'host_location')}\n              </div>\n              <div>\n                {this.locationInput(data, 'host_room', 'host_location')}\n              </div>\n              <div>\n                {this.locationInput(data, 'host_cabinet', 'host_location')}\n              </div>\n              <div>\n                {this.locationInput(data, 'host_group', 'host_group')}\n              </div>\n              <div>\n                {this.locationInput(data, 'host_owner', 'host_group')}\n              </div>\n            </div>\n            <div className=\"location-input-group\">\n              <div>\n                {this.locationInput(data, 'current_building', 'current_location')}\n              </div>\n              <div>\n                {this.locationInput(data, 'current_room', 'current_location')}\n              </div>\n              <div>\n                {this.locationInput(data, 'current_cabinet', 'current_location')}\n              </div>\n              <div>\n                {this.locationInput(data, 'current_group', 'current_group')}\n              </div>\n              <div>\n                {this.locationInput(data, 'borrowed_by', 'current_group')}\n              </div>\n            </div>\n            <div className=\"disposal-info\">\n              <div>\n                {this.textInput(data, 'Disposal information', 'disposal_info')}\n              </div>\n            </div>\n            <div className=\"important-notes\">\n              <div>\n                {this.textInput(data, 'Important notes', 'important_notes')}\n              </div>\n            </div>\n          </div>\n        </Collapse>\n      </div>\n\n    );\n  }\n\n  updateDisplayWell() {\n    const { chemical } = this.state;\n    let savedSds;\n    if (chemical) {\n      if (chemical._chemical_data !== undefined && chemical._chemical_data.length !== 0) {\n        savedSds = chemical._chemical_data[0].safetySheetPath;\n        if (savedSds && savedSds.length !== 0) {\n          this.setState({ displayWell: true });\n        }\n      }\n    }\n  }\n\n  querySafetySheetButton() {\n    const { loadingQuerySafetySheets, chemical } = this.state;\n    let checkSavedSds = false;\n    checkSavedSds = chemical?._chemical_data?.[0]?.safetySheetPath?.length !== undefined\n    && chemical._chemical_data[0].safetySheetPath.length !== 0;\n\n    const button = (\n      <Button\n        id=\"submit-sds-btn\"\n        onClick={() => this.querySafetySheets()}\n        disabled={!!loadingQuerySafetySheets || checkSavedSds}\n      >\n        {loadingQuerySafetySheets === false ? 'Search for SDS'\n          : (\n            <div>\n              <i className=\"fa fa-spinner fa-pulse fa-fw\" />\n              <span className=\"visually-hidden\">\n                Loading...\n              </span>\n            </div>\n\n          )}\n      </Button>\n    );\n\n    const overlay = (\n      <Tooltip id=\"disabledSdsSearchButton\">delete saved sheets to enable search button</Tooltip>\n    );\n\n    const buttonElement = (\n      <div className=\"button-container\">\n        {button}\n        {checkSavedSds && (\n          <OverlayTrigger placement=\"top\" overlay={overlay}>\n            <div className=\"overlay-trigger-container\" />\n          </OverlayTrigger>\n        )}\n      </div>\n    );\n    return buttonElement;\n  }\n\n  safetyTab() {\n    const { openSafetyTab, displayWell } = this.state;\n    return (\n      <div>\n        {this.safetyCollapseBtn()}\n        <Collapse in={openSafetyTab} key=\"inventory-safety-tab-collapse-list\">\n          <div className=\"safety-tab\">\n            <div className=\"parent-element-safety\">\n              <div className=\"choose-vendor\">\n                {this.chooseVendor()}\n              </div>\n              <div className=\"query-option\">\n                {this.queryOption()}\n              </div>\n              <div className=\"safety-sheet-language\">\n                {this.safetySheetLanguage()}\n              </div>\n              <div className=\"query-safety-sheet-button\">\n                {this.querySafetySheetButton()}\n              </div>\n            </div>\n            <div>\n              { displayWell && (\n                <div>\n                  {this.renderSafetySheets()}\n                </div>\n              ) }\n            </div>\n            { this.renderWarningMessage() }\n            { this.renderSafetyPhrases() }\n          </div>\n        </Collapse>\n      </div>\n    );\n  }\n\n  renderPropertiesModal() {\n    const { viewChemicalPropertiesModal, chemical, viewModalForVendor } = this.state;\n    let fetchedChemicalProperties = 'Please fetch chemical properties first to view results';\n    if (viewModalForVendor === 'thermofischer') {\n      const condition = chemical._chemical_data[0].alfaProductInfo\n      && chemical._chemical_data[0].alfaProductInfo.properties;\n      fetchedChemicalProperties = condition\n        ? JSON.stringify(chemical._chemical_data[0].alfaProductInfo.properties, null, '\\n') : fetchedChemicalProperties;\n    } else if (viewModalForVendor === 'merck') {\n      const condition = chemical._chemical_data[0].merckProductInfo\n      && chemical._chemical_data[0].merckProductInfo.properties;\n      fetchedChemicalProperties = condition\n        ? JSON.stringify(chemical._chemical_data[0].merckProductInfo.properties, null, '\\n') : fetchedChemicalProperties;\n    }\n    if (viewChemicalPropertiesModal) {\n      return (\n        <Modal\n          show={viewChemicalPropertiesModal}\n          onHide={() => this.closePropertiesModal()}\n        >\n          <Modal.Header closeButton>\n            <Modal.Title>Fetched Chemical Properties</Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <div className=\"properties-modal-dev\">\n              <FormGroup controlId=\"propertiesModal\">\n                <FormControl\n                  componentClass=\"textarea\"\n                  className=\"properties-modal\"\n                  readOnly\n                  disabled\n                  type=\"text\"\n                  value={fetchedChemicalProperties}\n                />\n              </FormGroup>\n            </div>\n            <div>\n              <Button bsStyle=\"warning\" onClick={() => this.closePropertiesModal()}>\n                Close\n              </Button>\n            </div>\n          </Modal.Body>\n        </Modal>\n      );\n    }\n    return (<div />);\n  }\n\n  renderWarningMessage() {\n    const { warningMessage } = this.state;\n    return (\n      <div className=\"text-danger\">\n        {warningMessage !== '' ? warningMessage : null}\n      </div>\n    );\n  }\n\n  render() {\n    const {\n      chemical\n    } = this.state;\n\n    const data = chemical?._chemical_data?.[0] ?? [];\n    return (\n      <table className=\"table table-borderless table-responsive\">\n        <tbody>\n          <tr>\n            <td className=\"chemical-table-cells\">\n              {this.inventoryInformationTab(data)}\n            </td>\n          </tr>\n          <tr>\n            <td className=\"chemical-table-cells\">\n              {this.safetyTab()}\n            </td>\n          </tr>\n          <tr>\n            <td className=\"chemical-table-cells\">\n              {this.locationTab(data)}\n            </td>\n          </tr>\n          <tr>\n            <td className=\"chemical-table-cells\">\n              <div>\n                {this.renderPropertiesModal()}\n              </div>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    );\n  }\n}\n\nChemicalTab.propTypes = {\n  sample: PropTypes.object,\n  saveInventory: PropTypes.bool.isRequired,\n  editChemical: PropTypes.func.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Panel, PanelGroup, Modal, Table,\n  ListGroupItem, ListGroup, Button, Checkbox,\n  OverlayTrigger, Tooltip\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport Immutable from 'immutable';\nimport { sortedUniq } from 'lodash';\n\nimport Sample from 'src/models/Sample';\nimport SampleDetailsContainers from 'src/apps/mydb/elements/details/samples/analysesTab/SampleDetailsContainers';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport RepositoryActions from 'src/stores/alt/repo/actions/RepositoryActions';\nimport { groupByCitation, Citation } from 'src/apps/mydb/elements/details/literature/LiteratureCommon';\nimport { MoleculeInfo, EmbargoCom, isNmrPass, isDatasetPass, OrcidIcon } from 'src/repoHome/RepoCommon';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport SamplesFetcher from 'src/fetchers/SamplesFetcher';\nimport CollaboratorFetcher from 'src/repo/fetchers/CollaboratorFetcher';\nimport LiteraturesFetcher from 'src/fetchers/LiteraturesFetcher';\nimport EmbargoFetcher from 'src/repo/fetchers/EmbargoFetcher';\nimport { CitationTypeMap, CitationTypeEOL } from 'src/components/CitationType';\n\nexport default class PublishSampleModal extends Component {\n  constructor(props) {\n    super(props);\n    const { currentUser } = UserStore.getState();\n    const { sample } = props;\n    this.state = {\n      sample,\n      selectedUsers: [],\n      selectedReviewers: [],\n      showSelectionUser: false,\n      showSelectionAnalysis: false,\n      showPreview: false,\n      currentUser,\n      selectedRefs: [],\n      collaborations: [],\n      showSelectionReviewer: false,\n      literatures: new Immutable.Map(),\n      sortedIds: [],\n      selectedEmbargo: '-1',\n      selectedLicense: 'CC BY',\n      cc0Consent: { consent1: false, consent2: false },\n      bundles: [],\n      noEmbargo: false\n    };\n    this.onUserChange = this.onUserChange.bind(this);\n    this.handleSampleChanged = this.handleSampleChanged.bind(this);\n    this.handlePublishSample = this.handlePublishSample.bind(this);\n    this.handleReserveDois = this.handleReserveDois.bind(this);\n    this.handleSelectUser = this.handleSelectUser.bind(this);\n    this.handleSelectReviewer = this.handleSelectReviewer.bind(this);\n    this.loadReferences = this.loadReferences.bind(this);\n    this.loadMyCollaborations = this.loadMyCollaborations.bind(this);\n    this.loadBundles = this.loadBundles.bind(this);\n    this.selectReferences = this.selectReferences.bind(this);\n    this.handleRefCheck = this.handleRefCheck.bind(this);\n    this.handleEmbargoChange = this.handleEmbargoChange.bind(this);\n    this.handleLicenseChange = this.handleLicenseChange.bind(this);\n    this.handleCC0ConsentChange = this.handleCC0ConsentChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onUserChange);\n    this.loadReferences();\n    this.loadBundles();\n    this.loadMyCollaborations();\n  }\n\n  // UNSAFE_componentWillReceiveProps(nextProps) {\n  //   this.setState({\n  //     sample: nextProps.sample,\n  //   });\n  // }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onUserChange);\n  }\n\n  onUserChange(state) {\n    this.setState(previousState => ({ ...previousState, users: state.users }));\n  }\n\n  handleRefCheck(id) {\n    let { selectedRefs } = this.state;\n\n    if (selectedRefs.includes(id)) {\n      selectedRefs = selectedRefs.filter(item => item !== id);\n    } else {\n      selectedRefs.push(id);\n    }\n    this.setState({ selectedRefs });\n  }\n\n  loadBundles() {\n    EmbargoFetcher.fetchEmbargoCollections(true).then(result => {\n      const cols = result.repository || [];\n      this.setState({ bundles: cols });\n    });\n  }\n\n  loadMyCollaborations() {\n    CollaboratorFetcher.fetchMyCollaborations().then(result => {\n      if (result) {\n        this.setState({\n          collaborations: result.authors,\n        });\n      }\n    });\n  }\n\n  loadReferences() {\n    let { selectedRefs } = this.state;\n    const { sample } = this.state;\n    LiteraturesFetcher.fetchElementReferences(sample).then(literatures => {\n      const sortedIds = groupByCitation(literatures);\n      selectedRefs = selectedRefs.filter(item => sortedIds.includes(item));\n      this.setState({ selectedRefs, literatures, sortedIds });\n    });\n  }\n\n  handleSelectUser(val) {\n    if (val) { this.setState({ selectedUsers: val }); }\n  }\n\n  handleSelectReviewer(val) {\n    if (val) { this.setState({ selectedReviewers: val }); }\n  }\n\n  handleSampleChanged(sample) {\n    this.setState(prevState => ({ ...prevState, sample }));\n  }\n\n  validateAnalyses() {\n    const publishedAnalyses = this.state.sample.analysisArray().filter(a => (a.extended_metadata.publish && (a.extended_metadata.publish === true || a.extended_metadata.publish === 'true')))\n    if (publishedAnalyses.length === 0) {\n      return false;\n    }\n    return true;\n  }\n\n  // molecule-submissions mandatory check (https://git.scc.kit.edu/ComPlat/chemotion_REPO/issues/236)\n  validateSubmission() {\n    const { sample, selectedEmbargo, noEmbargo } = this.state;\n    if (selectedEmbargo === '-1' && !noEmbargo) return false;\n    const analyses = sample.analysisArray();\n    if (!this.validateAnalyses()) {\n      return false;\n    }\n\n    let publishedAnalyses = analyses.filter(a =>\n      (a.extended_metadata &&\n        (a.extended_metadata.publish && (a.extended_metadata.publish === true || a.extended_metadata.publish === 'true'))));\n\n    publishedAnalyses = publishedAnalyses.filter(a =>\n      (a.extended_metadata &&\n        (((a.extended_metadata.kind || '') !== '') && // fail if analysis-type is empty\n        ((a.extended_metadata.status || '') === 'Confirmed') && // fail if status is not set to Confirmed\n        (isNmrPass(a, sample)) && // fail if NMR check fail\n        (isDatasetPass(a))))); // fail if Dataset check fail\n    if (publishedAnalyses.length === 0) {\n      return false;\n    }\n    return true;\n  }\n\n  handlePublishSample() {\n    const { selectedLicense, cc0Consent } = this.state;\n    const authorCount = this.state.selectedUsers && this.state.selectedUsers.length;\n    // const reviewerCount = this.state.selectedReviewers && this.state.selectedReviewers.length;\n    const plural = authorCount > 0 ? 's' : '';\n\n    if (selectedLicense === 'CC0' && (!cc0Consent.consent1 || !cc0Consent.consent2)) {\n      alert('Please check the license section before sending your data.');\n      return true;\n    }\n\n    if (!this.validateSubmission()) {\n      alert('Submission Check fail. Please review your data and re-submit.');\n      return true;\n    }\n\n    if (authorCount > 0 && !this.refBehalfAsAuthor.checked) {\n      alert(`Please confirm you are contributing on behalf of the author${plural}`);\n      return true;\n    }\n\n    if (authorCount < 1 && !this.refMeAsAuthor.checked) {\n      alert(\"Please add an author or check 'add me as author.'\");\n      return true;\n    }\n\n    const analyses = this.state.sample.analysisArray();\n    let publishedAnalyses = analyses.filter(a =>\n      (a.extended_metadata &&\n        (a.extended_metadata.publish && (a.extended_metadata.publish === true || a.extended_metadata.publish === 'true'))));\n\n    publishedAnalyses = publishedAnalyses.filter(a =>\n      (a.extended_metadata &&\n        (((a.extended_metadata.kind || '') !== '') && // fail if analysis-type is empty\n          ((a.extended_metadata.status || '') === 'Confirmed') && // fail if status is not set to Confirmed\n          (isNmrPass(a, this.state.sample)) && // fail if NMR check fail\n          (isDatasetPass(a))))); // fail if Dataset check fail\n\n    const { sample } = this.state;\n    sample.container.children.find(c => (c && c.container_type === 'analyses')).children = publishedAnalyses;\n\n    LoadingActions.start();\n    RepositoryActions.publishSample({\n      // sample: this.state.sample,\n      sample,\n      coauthors: this.state.selectedUsers.map(u => u.value),\n      reviewers: this.state.selectedReviewers.map(u => u.value),\n      refs: this.state.selectedRefs,\n      embargo: this.state.selectedEmbargo,\n      license: this.state.selectedLicense,\n      addMe: this.refMeAsAuthor.checked\n    }, true);\n    this.props.onHide();\n  }\n\n  handleReserveDois() {\n    LoadingActions.start();\n    RepositoryActions.publishSampleReserveDois({\n      sample: this.state.sample,\n      coauthors: this.state.selectedUsers.map(u => u.value)\n    });\n    SamplesFetcher.fetchById(this.state.sample.id)\n      .then((sample) => {\n        this.props.onPublishRefreshClose(sample, true);\n        LoadingActions.stop();\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n        LoadingActions.stop();\n      });\n    return true;\n  }\n\n  contributor() {\n    const { currentUser } = this.state;\n    const orcid = currentUser.orcid == null ? '' : <OrcidIcon orcid={currentUser.orcid} />;\n    const aff = currentUser && currentUser.current_affiliations && Object.keys(currentUser.current_affiliations).map(k => (\n      <div>  -{currentUser.current_affiliations[k]}</div>\n    ));\n    return (<div><h5><b>Contributor:</b></h5>{orcid}{currentUser.name} <br/> {aff} </div>)\n  }\n\n  selectUsers() {\n    const { selectedUsers, collaborations } = this.state;\n    const options = collaborations.map(c => (\n      { label: c.name, value: c.id }\n    ));\n\n    const authorInfo = selectedUsers && selectedUsers.map((a) => {\n      const us = collaborations.filter(c => c.id === a.value);\n      const u = us && us.length > 0 ? us[0] : {};\n      const orcid = u.orcid == null ? '' : <OrcidIcon orcid={u.orcid} />;\n      const aff = u && u.current_affiliations && u.current_affiliations.map(af => (\n        <div>  -{af.department}, {af.organization}, {af.country}</div>\n      ));\n      return (<div>{orcid}{a.label}<br/>{aff}<br/></div>)\n    });\n\n    const authorCount = selectedUsers && selectedUsers.length;\n\n    return (\n      <div >\n        <Checkbox inputRef={(ref) => { this.refMeAsAuthor = ref; }}>add me as author</Checkbox>\n        <Checkbox inputRef={(ref) => { this.refBehalfAsAuthor = ref; }}>\n          I am contributing on behalf of the author{authorCount > 0 ? 's' : ''}\n        </Checkbox>\n        <h5><b>Authors:</b></h5>\n        <Select\n          multi\n          searchable\n          placeholder=\"Select authors from my collaboration\"\n          backspaceRemoves\n          value={selectedUsers}\n          valueKey=\"value\"\n          labelKey=\"label\"\n          matchProp=\"name\"\n          options={options}\n          onChange={this.handleSelectUser}\n        />\n        <div>\n          {authorInfo}\n        </div>\n      </div>\n    );\n  }\n\n  addReviewers() {\n    const { selectedReviewers, collaborations } = this.state;\n    const options = collaborations.map(c => (\n      { label: c.name, value: c.id }\n    ));\n\n    const reviewerInfo = selectedReviewers && selectedReviewers.map((a) => {\n      const us = collaborations.filter(c => c.id === a.value);\n      const u = us && us.length > 0 ? us[0] : {};\n      const orcid = u.orcid == null ? '' : <OrcidIcon orcid={u.orcid} />;\n      const aff = u && u.current_affiliations && u.current_affiliations.map(af => (\n        <div>  -{af.department}, {af.organization}, {af.country}</div>\n      ));\n      return (<div>{orcid}{a.label}<br/>{aff}<br/></div>)\n    });\n\n\n    return (\n      <div >\n        <h5><b>Additional Reviewers:</b></h5>\n        <Select\n          multi\n          searchable\n          placeholder=\"Select reviewers from my collaboration\"\n          backspaceRemoves\n          value={selectedReviewers}\n          valueKey=\"value\"\n          labelKey=\"label\"\n          matchProp=\"name\"\n          options={options}\n          onChange={this.handleSelectReviewer}\n        />\n        <div>\n          {reviewerInfo}\n        </div>\n      </div>\n    );\n  }\n\n  citationTable(rows, sortedIds, selectedRefs) {\n    const sids = sortedUniq(sortedIds);\n    return (\n      <Table>\n        <thead>\n          <tr>\n            <th width=\"60%\" />\n            <th width=\"40%\" />\n          </tr>\n        </thead>\n        <tbody>\n          {sids.map((id) => {\n            const citation = rows.get(id);\n            let { litype } = citation;\n            if (typeof litype === 'undefined' || CitationTypeEOL.includes(litype)) {\n              litype = 'uncategorized';\n            }\n            const chkDisabled = litype === 'uncategorized';\n            const chkDesc = chkDisabled ? 'citation type is uncategorized, cannot publish this reference' : 'publish this reference';\n            return (\n              <tr key={id}>\n                <td className=\"padding-right\">\n                  <Citation literature={citation} />\n                </td>\n                <td>\n                  <OverlayTrigger\n                    placement=\"left\"\n                    overlay={<Tooltip id=\"checkAnalysis\">{chkDesc}</Tooltip>}\n                  >\n                    <span>\n                      <Checkbox\n                        disabled={chkDisabled}\n                        checked={selectedRefs.includes(id)}\n                        onChange={() => { this.handleRefCheck(id); }}\n                      >\n                        <span>Add to publication</span><br />\n                        <span>({CitationTypeMap[litype].def})</span>\n                      </Checkbox>\n                    </span>\n                  </OverlayTrigger>\n                </td>\n              </tr>\n            );\n          })}\n        </tbody>\n      </Table>\n    );\n  }\n\n  selectReferences() {\n    const { selectedRefs, literatures, sortedIds } = this.state;\n    return (\n      <div >\n        <ListGroup fill=\"true\">\n          <ListGroupItem>\n            {this.citationTable(literatures, sortedIds, selectedRefs)}\n          </ListGroupItem>\n        </ListGroup>\n      </div>\n    );\n  }\n\n  toggleDiv(key) {\n    if (key) {\n      this.setState((previousState) => {\n        const newState = previousState;\n        newState[key] = !previousState[key];\n        return { ...newState };\n      }, this.forceUpdate());\n    }\n  }\n\n  handleEmbargoChange(selectedValue) {\n    if (selectedValue) {\n      this.setState({ selectedEmbargo: selectedValue });\n    }\n  }\n\n  handleLicenseChange(selectedValue) {\n    if (selectedValue) {\n      this.setState({\n        selectedLicense: selectedValue,\n        cc0Consent: { consent1: false, consent2: false }\n      });\n    }\n  }\n\n  handleCC0ConsentChange(selectedValue, selectedType) {\n    const { cc0Consent } = this.state;\n    if (selectedType === 'consent1') {\n      cc0Consent.consent1 = selectedValue;\n    }\n    if (selectedType === 'consent2') {\n      cc0Consent.consent2 = selectedValue;\n    }\n    this.setState({ cc0Consent });\n  }\n\n  handleNoEmbargoCheck() {\n    this.setState({ noEmbargo: !this.state.noEmbargo });\n  }\n\n  render() {\n    const { show, onHide, sample } = this.props;\n    const { bundles } = this.state;\n    const canPublish = this.validateSubmission(); // this.validateAnalyses();\n    const {\n      showPreview,\n      selectedUsers,\n      selectedReviewers,\n      selectedRefs\n    } = this.state;\n    const analyses = sample.analysisArray();\n    const selectedAnalysesCount = analyses.filter(\n      a => (a.extended_metadata && (a.extended_metadata.publish && (a.extended_metadata.publish === true || a.extended_metadata.publish === 'true')) && a.extended_metadata.kind && a.extended_metadata.status === 'Confirmed' && isNmrPass(a, sample) && isDatasetPass(a))).length;\n\n    const { molecule } = sample;\n\n    const {\n      selectedEmbargo, selectedLicense, cc0Consent, noEmbargo\n    } = this.state;\n\n    const awareEmbargo = selectedEmbargo === '-1' ? (\n      <Checkbox\n        onChange={() => { this.handleNoEmbargoCheck(); }}\n        checked={noEmbargo}\n      >\n        <span>\n          I know that the data that is submitted without the selection of an embargo\n          bundle will be published immediately after a successful review.\n        </span>\n      </Checkbox>\n    ) : <div />;\n\n    if (show) {\n      const opts = [];\n      bundles.forEach((col) => {\n        const tag = col.taggable_data || {};\n        opts.push({ value: col.element_id, name: tag.label, label: tag.label });\n      });\n      return (\n        <div>\n          <Modal\n            dialogClassName=\"publishReactionModal\"\n            animation\n            show={show}\n            bsSize=\"large\"\n            onHide={() => onHide()}\n          >\n            <Modal.Header closeButton>\n              <Modal.Title>Publish Sample</Modal.Title>\n            </Modal.Header>\n            <Modal.Body\n              style={{\n                paddingBottom: 'unset',\n                maxHeight: 'calc(100vh - 210px)',\n                overflowY: 'auto',\n              }}\n            >\n              <EmbargoCom\n                opts={opts}\n                selectedValue={selectedEmbargo}\n                onEmbargoChange={this.handleEmbargoChange}\n                selectedLicense={selectedLicense}\n                onLicenseChange={this.handleLicenseChange}\n                onCC0ConsentChange={this.handleCC0ConsentChange}\n                cc0Deed={cc0Consent}\n              />\n              <Panel>\n                <Panel.Body>\n                  <MoleculeInfo molecule={molecule} sample_svg_file={sample.sample_svg_file} />\n                </Panel.Body>\n              </Panel>\n              {awareEmbargo}\n              <PanelGroup accordion id=\"publish-sample-config\">\n                <Panel eventKey=\"2\">\n                  <Panel.Heading>\n                    <Panel.Title toggle>\n                      <h4> Select Analyses ({selectedAnalysesCount})</h4>\n                    </Panel.Title>\n                  </Panel.Heading>\n                  <Panel.Body collapsible>\n                    <SampleDetailsContainers\n                      readOnly\n                      publish\n                      sample={sample}\n                      handleSampleChanged={this.handleSampleChanged}\n                    />\n                  </Panel.Body>\n                </Panel>\n                <Panel eventKey=\"3\">\n                  <Panel.Heading>\n                    <Panel.Title toggle>\n                      <h4> Select Authors ({selectedUsers.length})</h4>\n                    </Panel.Title>\n                  </Panel.Heading>\n                  <Panel.Body collapsible>\n                    {this.contributor()}\n                    {this.selectUsers()}\n                  </Panel.Body>\n                </Panel>\n                <Panel eventKey=\"5\">\n                  <Panel.Heading>\n                    <Panel.Title toggle>\n                      <h4> Select References ({selectedRefs.length})</h4>\n                    </Panel.Title>\n                  </Panel.Heading>\n                  <Panel.Body collapsible>{this.selectReferences()}</Panel.Body>\n                </Panel>\n                <Panel eventKey=\"6\">\n                  <Panel.Heading>\n                    <Panel.Title toggle>\n                      <h4>\n                        {' '}\n                        Additional Reviewers ({selectedReviewers.length})\n                      </h4>\n                    </Panel.Title>\n                  </Panel.Heading>\n                  <Panel.Body collapsible>{this.addReviewers()}</Panel.Body>\n                </Panel>\n              </PanelGroup>\n              {showPreview ? null : null}\n            </Modal.Body>\n            <Modal.Footer>\n              <Button onClick={() => onHide()}>Close</Button>\n              <Button\n                bsStyle=\"primary\"\n                disabled={!canPublish}\n                onClick={this.handlePublishSample}\n              >\n                Publish Sample\n              </Button>\n            </Modal.Footer>\n          </Modal>\n        </div>\n      );\n    }\n    return <div />;\n  }\n}\n\nPublishSampleModal.propTypes = {\n  sample: PropTypes.instanceOf(Sample).isRequired,\n  show: PropTypes.bool.isRequired,\n  onHide: PropTypes.func.isRequired,\n  onPublishRefreshClose: PropTypes.func.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ReviewStore from 'src/stores/alt/repo/stores/ReviewStore';\nimport RepoSampleDetails from 'src/repoHome/RepoSampleDetails';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\n\nexport default class SampleDetailsRepoComment extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      element: null,\n      review_info: {}\n    };\n    this.onStoreChange = this.onStoreChange.bind(this);\n    this.handleReviewUpdate = this.handleReviewUpdate.bind(this);\n  }\n\n  componentDidMount() {\n    ReviewStore.listen(this.onStoreChange);\n    LoadingActions.start();\n    ReviewActions.fetchSample(this.props.sampleId);\n  }\n\n  componentWillUnmount() {\n    ReviewStore.unlisten(this.onStoreChange);\n  }\n\n  onStoreChange(state) {\n    this.setState(prevState => ({ ...prevState, ...state }));\n  }\n\n  handleReviewUpdate(review) {\n    this.setState({ review });\n  }\n\n  render() {\n    const { element, review_info } = this.state;\n    return element && element.sample && element.publication ?\n      (\n        <RepoSampleDetails\n          element={element}\n          canComment\n          review_info={review_info}\n          onReviewUpdate={this.handleReviewUpdate}\n          review={this.state.review || {}}\n          canClose={false}\n          buttons={['Comments']}\n        />) : <div>No Publication found</div>;\n  }\n}\n\nSampleDetailsRepoComment.propTypes = {\n  sampleId: PropTypes.number.isRequired,\n};\n","/* eslint-disable react/no-access-state-in-setstate */\n/* eslint-disable react/destructuring-assignment */\n/* eslint-disable react/forbid-prop-types */\n/* eslint-disable no-param-reassign */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Button, ButtonToolbar,\n  InputGroup, FormGroup, FormControl,\n  Panel, ListGroup, ListGroupItem, Glyphicon, Tabs, Tab, Row, Col,\n  Tooltip, OverlayTrigger, DropdownButton, MenuItem,\n  ControlLabel, Modal, Alert, Checkbox\n} from 'react-bootstrap';\nimport SVG from 'react-inlinesvg';\nimport Clipboard from 'clipboard';\nimport Select from 'react-select';\nimport { cloneDeep, findIndex } from 'lodash';\nimport uuid from 'uuid';\nimport classNames from 'classnames';\nimport Immutable from 'immutable';\n\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport QcActions from 'src/stores/alt/actions/QcActions';\nimport QcStore from 'src/stores/alt/stores/QcStore';\n\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport ElementAnalysesLabels from 'src/apps/mydb/elements/labels/ElementAnalysesLabels';\nimport PubchemLabels from 'src/components/pubchem/PubchemLabels';\nimport PubchemLcss from 'src/components/pubchem/PubchemLcss';\nimport ElementReactionLabels from 'src/apps/mydb/elements/labels/ElementReactionLabels';\nimport SampleDetailsContainers from 'src/apps/mydb/elements/details/samples/analysesTab/SampleDetailsContainers';\n\nimport StructureEditorModal from 'src/components/structureEditor/StructureEditorModal';\n\nimport Sample from 'src/models/Sample';\nimport Container from 'src/models/Container';\nimport PolymerSection from 'src/apps/mydb/elements/details/samples/propertiesTab/PolymerSection';\nimport ElementalCompositionGroup from 'src/apps/mydb/elements/details/samples/propertiesTab/ElementalCompositionGroup';\nimport ToggleSection from 'src/components/common/ToggleSection';\nimport SampleName from 'src/components/common/SampleName';\nimport ClipboardCopyText from 'src/components/common/ClipboardCopyText';\nimport SampleForm from 'src/apps/mydb/elements/details/samples/propertiesTab/SampleForm';\nimport ComputedPropsContainer from 'src/components/computedProps/ComputedPropsContainer';\nimport ComputedPropLabel from 'src/apps/mydb/elements/labels/ComputedPropLabel';\nimport Utils from 'src/utilities/Functions';\nimport PrintCodeButton from 'src/components/common/PrintCodeButton';\nimport SampleDetailsLiteratures from 'src/apps/mydb/elements/details/literature/DetailsTabLiteratures';\nimport MoleculesFetcher from 'src/fetchers/MoleculesFetcher';\nimport QcMain from 'src/apps/mydb/elements/details/samples/qcTab/QcMain';\nimport { chmoConversions } from 'src/components/OlsComponent';\nimport ConfirmClose from 'src/components/common/ConfirmClose';\nimport { EditUserLabels, ShowUserLabels } from 'src/components/UserLabels';\nimport CopyElementModal from 'src/components/common/CopyElementModal';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport NmrSimTab from 'src/apps/mydb/elements/details/samples/nmrSimTab/NmrSimTab';\nimport FastInput from 'src/apps/mydb/elements/details/samples/FastInput';\nimport ScifinderSearch from 'src/components/scifinder/ScifinderSearch';\nimport ElementDetailSortTab from 'src/apps/mydb/elements/details/ElementDetailSortTab';\nimport { addSegmentTabs } from 'src/components/generic/SegmentDetails';\nimport MeasurementsTab from 'src/apps/mydb/elements/details/samples/measurementsTab/MeasurementsTab';\nimport { validateCas } from 'src/utilities/CasValidation';\nimport ChemicalTab from 'src/components/ChemicalTab';\nimport OpenCalendarButton from 'src/components/calendar/OpenCalendarButton';\nimport HeaderCommentSection from 'src/components/comments/HeaderCommentSection';\nimport CommentSection from 'src/components/comments/CommentSection';\nimport CommentActions from 'src/stores/alt/actions/CommentActions';\nimport CommentModal from 'src/components/common/CommentModal';\nimport { formatTimeStampsOfElement } from 'src/utilities/timezoneHelper';\nimport { commentActivation } from 'src/utilities/CommentHelper';\nimport PrivateNoteElement from 'src/apps/mydb/elements/details/PrivateNoteElement';\nimport MolViewerBtn from 'src/components/viewer/MolViewerBtn';\nimport MolViewerSet from 'src/components/viewer/MolViewerSet';\n\n\n// For REPO\nimport RepositoryActions from 'src/stores/alt/repo/actions/RepositoryActions';\nimport PublishSampleModal from 'src/components/chemrepo/PublishSampleModal';\n// import RepoXvialButton from 'src/components/chemrepo/common/RepoXvialButton';\nimport {\n  PublishedTag,\n  OrigElnTag,\n  LabelPublication,\n  PublishBtn,\n  ReviewPublishBtn,\n  validateMolecule,\n} from 'src/components/chemrepo/PublishCommon';\nimport SampleDetailsRepoComment from 'src/components/chemrepo/SampleDetailsRepoComment';\nimport { permitOn } from 'src/components/common/uis';\n\nconst MWPrecision = 6;\n\nconst decoupleCheck = (sample) => {\n  if (!sample.decoupled && sample.molecule && sample.molecule.id === '_none_') {\n    NotificationActions.add({\n      title: 'Error on Sample creation', message: 'The molecule structure is required!', level: 'error', position: 'tc'\n    });\n    LoadingActions.stop();\n    return false;\n  }\n  if (sample.decoupled && sample.sum_formula?.trim() === '') { sample.sum_formula = 'undefined structure'; }\n  if (!sample.decoupled) { sample.sum_formula = ''; }\n  return true;\n};\n\nconst rangeCheck = (field, sample) => {\n  if (sample[`${field}_lowerbound`] && sample[`${field}_lowerbound`] !== ''\n    && sample[`${field}_upperbound`] && sample[`${field}_upperbound`] !== ''\n    && Number.parseFloat(sample[`${field}_upperbound`]) < Number.parseFloat(sample[`${field}_lowerbound`])) {\n    NotificationActions.add({\n      title: `Error on ${field.replace(/(^\\w{1})|(_{1}\\w{1})/g, (match) => match.toUpperCase())}`,\n      message: 'range lower bound must be less than or equal to range upper',\n      level: 'error',\n      position: 'tc'\n    });\n    LoadingActions.stop();\n    return false;\n  }\n  return true;\n};\n\nexport default class SampleDetails extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n\n    this.state = {\n      sample: props.sample,\n      reaction: null,\n      materialGroup: null,\n      showStructureEditor: false,\n      loadingMolecule: false,\n      showElementalComposition: false,\n      showChemicalIdentifiers: false,\n      activeTab: UIStore.getState().sample.activeTab,\n      qrCodeSVG: '',\n      isCasLoading: false,\n      validCas: true,\n      showMolfileModal: false,\n      trackMolfile: props.sample.molfile,\n      smileReadonly: !((typeof props.sample.molecule.inchikey === 'undefined')\n        || props.sample.molecule.inchikey == null || props.sample.molecule.inchikey === 'DUMMY'),\n      quickCreator: false,\n      showInchikey: false,\n      pageMessage: null,\n      visible: Immutable.List(),\n      startExport: false,\n      sfn: UIStore.getState().hasSfn,\n      saveInventoryAction: false,\n      showPublishSampleModal: false,\n      commentScreen: false,\n      xvial: (props.sample && props.sample.tag && props.sample.tag.taggable_data && props.sample.tag.taggable_data.xvial && props.sample.tag.taggable_data.xvial.num) || '',\n      isChemicalEdited: false,\n      currentUser,\n    };\n\n    this.enableComputedProps = MatrixCheck(currentUser.matrix, 'computedProp');\n    this.enableSampleDecoupled = MatrixCheck(currentUser.matrix, 'sampleDecoupled');\n    this.enableNmrSim = MatrixCheck(currentUser.matrix, 'nmrSim');\n    this.enableMoleculeViewer = MatrixCheck(currentUser.matrix, MolViewerSet.PK);\n\n    this.onUIStoreChange = this.onUIStoreChange.bind(this);\n    this.clipboard = new Clipboard('.clipboardBtn');\n    this.isCASNumberValid = this.isCASNumberValid.bind(this);\n    this.handleMolfileShow = this.handleMolfileShow.bind(this);\n    this.handleMolfileClose = this.handleMolfileClose.bind(this);\n    this.handleSampleChanged = this.handleSampleChanged.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleSelect = this.handleSelect.bind(this);\n    this.toggleInchi = this.toggleInchi.bind(this);\n    this.fetchQcWhenNeeded = this.fetchQcWhenNeeded.bind(this);\n    this.customizableField = this.customizableField.bind(this);\n    this.decoupleMolecule = this.decoupleMolecule.bind(this);\n    this.onTabPositionChanged = this.onTabPositionChanged.bind(this);\n    this.handleSegmentsChange = this.handleSegmentsChange.bind(this);\n    this.decoupleChanged = this.decoupleChanged.bind(this);\n    this.handleFastInput = this.handleFastInput.bind(this);\n    this.matchSelectedCollection = this.matchSelectedCollection.bind(this);\n\n    this.handleStructureEditorSave = this.handleStructureEditorSave.bind(this);\n    this.handleStructureEditorCancel = this.handleStructureEditorCancel.bind(this);\n    this.showPublishSampleModal = this.showPublishSampleModal.bind(this);\n    this.forcePublishRefreshClose = this.forcePublishRefreshClose.bind(this);\n    this.handleCommentScreen = this.handleCommentScreen.bind(this);\n    this.handleFullScreen = this.handleFullScreen.bind(this);\n    this.handleValidation = this.handleValidation.bind(this);\n    this.handleResetValidation = this.handleResetValidation.bind(this);\n    this.handleAssociateClick = this.handleAssociateClick.bind(this);\n    this.handleRepoXvial = this.handleRepoXvial.bind(this);\n    this.unseal = this.unseal.bind(this);\n  }\n\n  componentDidMount() {\n    const { sample } = this.props;\n    const { currentUser } = this.state;\n\n    UIStore.listen(this.onUIStoreChange);\n\n    const { activeTab } = this.state;\n    this.fetchQcWhenNeeded(activeTab);\n\n    if (MatrixCheck(currentUser.matrix, commentActivation) && !sample.isNew) {\n      CommentActions.fetchComments(sample);\n    }\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if (\n      (nextProps.sample.isNew\n       && (typeof (nextProps.sample.molfile) === 'undefined'\n        || (nextProps.sample.molfile || '').length === 0)\n      )\n      || (typeof (nextProps.sample.molfile) !== 'undefined' && nextProps.sample.molecule.inchikey === 'DUMMY')\n    ) {\n      this.setState({\n        smileReadonly: false,\n      });\n    } else {\n      this.setState({\n        smileReadonly: true,\n      });\n    }\n    this.setState({\n      sample: nextProps.sample,\n      loadingMolecule: false,\n      isCasLoading: false,\n    });\n  }\n\n  componentWillUnmount() {\n    this.clipboard.destroy();\n    UIStore.unlisten(this.onUIStoreChange);\n  }\n\n  onUIStoreChange(state) {\n    if (state.sample.activeTab !== this.state.activeTab) {\n      this.setState(previousState => ({\n        ...previousState, activeTab: state.sample.activeTab\n      }));\n    }\n  }\n\n  forcePublishRefreshClose(sample, show) {\n    this.setState({ sample, showPublishSampleModal: show });\n    this.forceUpdate();\n  }\n\n  handleAssociateClick() {\n    const { sample } = this.state;\n    ElementActions.tryFetchReactionById(sample.tag.taggable_data.reaction_id);\n    sample.validates = [];\n    this.setState({ sample });\n  }\n\n  handleValidation(element) {\n    let validates = [];\n    const sample = element;\n    if (sample.tag && sample.tag.taggable_data && sample.tag.taggable_data.reaction_id) {\n      validates.push({ name: `sample [${sample.name}]`, value: false, message: `${sample.name} is associated with a Reaction.` });\n    } else {\n      const analyses = sample.analysisArray();\n      if (analyses.length < 1) {\n        validates.push({ name: `sample [${sample.name}]`, value: false, message: 'Analyses data is missing.' });\n      } else {\n        const validatePt = validateMolecule(sample);\n        if (validatePt.length > 0) {\n          validates = validates.concat(validatePt);\n        }\n      }\n    }\n    if (validates.length > 0) {\n      sample.validates = validates;\n      this.setState({ sample });\n    } else {\n      LoadingActions.start();\n      RepositoryActions.reviewPublish(element);\n    }\n  }\n\n  handleResetValidation() {\n    const { sample } = this.state;\n    sample.validates = [];\n    this.setState({ sample });\n  }\n\n  handleCommentScreen() {\n    this.setState({ commentScreen: true });\n    this.props.toggleCommentScreen(true);\n  }\n\n  handleFullScreen() {\n    this.setState({ commentScreen: false });\n    this.props.toggleFullScreen();\n  }\n\n  handleMolfileShow() {\n    this.setState({\n      showMolfileModal: true\n    });\n  }\n\n  handleMolfileClose() {\n    this.setState({\n      showMolfileModal: false\n    });\n  }\n\n  handleSampleChanged(sample, cb) {\n    this.setState({\n      sample,\n    }, cb);\n  }\n\n  handleAmountChanged(amount) {\n    const { sample } = this.state;\n    sample.setAmountAndNormalizeToGram(amount);\n    this.setState({ sample });\n  }\n\n  handleImportedReadoutChanged(e) {\n    const { sample } = this.state;\n    sample.imported_readout = e.target.value;\n    this.setState({\n      sample\n    });\n  }\n\n  handleFastInput(smi, cas) {\n    this.setState({ showChemicalIdentifiers: true }, () => {\n      this.smilesInput.value = smi;\n      this.handleMoleculeBySmile(cas);\n    });\n  }\n\n  handleRepoXvial(elementId, xvial) {\n    this.setState({ xvial });\n    ElementActions.refreshElements('sample');\n  }\n\n\n  showStructureEditor() {\n    this.setState({\n      showStructureEditor: true\n    });\n  }\n\n  hideStructureEditor() {\n    this.setState({\n      showStructureEditor: false\n    });\n  }\n\n  toggleInchi() {\n    const { showInchikey } = this.state;\n    this.setState({ showInchikey: !showInchikey });\n  }\n\n  handleMoleculeBySmile(cas) {\n    const smi = this.smilesInput.value;\n    const { sample } = this.state;\n    // const casObj = {};\n    MoleculesFetcher.fetchBySmi(smi)\n      .then((result) => {\n        if (!result || result == null) {\n          NotificationActions.add({\n            title: 'Error on Sample creation',\n            message: `Cannot create molecule with entered Smiles/CAS! [${smi}]`,\n            level: 'error',\n            position: 'tc'\n          });\n        } else {\n          sample.molfile = result.molfile;\n          sample.molecule_id = result.id;\n          sample.molecule = result;\n          this.molfileInput.value = result.molfile;\n          this.inchistringInput.value = result.inchistring;\n          sample.xref = { ...sample.xref, cas };\n          this.setState({\n            quickCreator: true,\n            sample,\n            smileReadonly: true,\n            pageMessage: result.ob_log\n          });\n          ElementActions.refreshElements('sample');\n        }\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      }).finally(() => LoadingActions.stop());\n  }\n\n  handleInventorySample(e) {\n    const { sample } = this.state;\n    sample.inventory_sample = e.target.checked;\n    this.handleSampleChanged(sample);\n    if (!e.target.checked) {\n      this.setState({ activeTab: 'properties' });\n    }\n  }\n\n  handleStructureEditorSave(molfile, svgFile = null, config = null, editor = 'ketcher') {\n    const { sample } = this.state;\n    sample.molfile = molfile;\n    const smiles = (config && sample.molecule) ? config.smiles : null;\n    sample.contains_residues = molfile.indexOf(' R# ') > -1;\n    sample.formulaChanged = true;\n    this.setState({ loadingMolecule: true });\n\n    const fetchError = (errorMessage) => {\n      NotificationActions.add({\n        title: 'Error on Sample creation',\n        message: `Cannot create molecule! Error: [${errorMessage}]`,\n        level: 'error',\n        position: 'tc'\n      });\n      this.setState({ loadingMolecule: false });\n    };\n\n    const fetchSuccess = (result) => {\n      if (!result || result == null) {\n        throw new Error('No molecule returned!');\n      }\n      sample.molecule = result;\n      sample.molecule_id = result.id;\n      if (result.inchikey === 'DUMMY') { sample.decoupled = true; }\n      this.setState({\n        sample,\n        smileReadonly: true,\n        pageMessage: result.ob_log,\n        loadingMolecule: false\n      });\n    };\n\n    const fetchMolecule = (fetchFunction) => {\n      fetchFunction()\n        .then(fetchSuccess).catch(fetchError).finally(() => {\n          this.hideStructureEditor();\n        });\n    };\n\n    if (!smiles || smiles === '') {\n      fetchMolecule(\n        () => MoleculesFetcher.fetchByMolfile(molfile, svgFile, editor, sample.decoupled)\n      );\n    } else {\n      fetchMolecule(() => MoleculesFetcher.fetchBySmi(smiles, svgFile, molfile, editor));\n    }\n  }\n\n  handleStructureEditorCancel() {\n    this.hideStructureEditor();\n  }\n\n  handleSubmit(closeView = false) {\n    const { currentCollection } = UIStore.getState();\n    LoadingActions.start.defer();\n    const { sample, validCas } = this.state;\n    if (this.matchSelectedCollection(currentCollection) && sample.xref.inventory_label !== undefined) {\n      sample.collection_id = currentCollection.id;\n    }\n    this.checkMolfileChange();\n    if (!validCas) {\n      sample.xref = { ...sample.xref, cas: '' };\n    }\n    if (!decoupleCheck(sample)) return;\n    if (!rangeCheck('boiling_point', sample)) return;\n    if (!rangeCheck('melting_point', sample)) return;\n    if (sample.belongTo && sample.belongTo.type === 'reaction') {\n      const reaction = sample.belongTo;\n      reaction.editedSample = sample;\n      const materialGroup = sample.matGroup;\n      if (sample.isNew) {\n        ElementActions.createSampleForReaction(sample, reaction, materialGroup);\n      } else {\n        ElementActions.updateSampleForReaction(sample, reaction, closeView);\n      }\n    } else if (sample.belongTo && sample.belongTo.type === 'wellplate') {\n      const wellplate = sample.belongTo;\n      ElementActions.updateSampleForWellplate(sample, wellplate);\n    } else if (sample.isNew) {\n      ElementActions.createSample(sample, closeView);\n    } else {\n      sample.cleanBoilingMelting();\n      ElementActions.updateSample(new Sample(sample), closeView);\n    }\n\n    if (sample.is_new || closeView) {\n      DetailActions.close(sample, true);\n    }\n    sample.updateChecksum();\n    this.setState({ validCas: true, trackMolfile: sample.molfile });\n  }\n\n  handleSegmentsChange(se) {\n    const { sample } = this.state;\n    const { segments } = sample;\n    const idx = findIndex(segments, (o) => o.segment_klass_id === se.segment_klass_id);\n    if (idx >= 0) { segments.splice(idx, 1, se); } else { segments.push(se); }\n    sample.segments = segments;\n    this.setState({ sample });\n  }\n\n  unseal() {\n    const { sample } = this.state;\n    sample.sealed = false;\n    this.setState({ sample });\n  }\n\n  handleElementalSectionToggle() {\n    this.setState({\n      showElementalComposition: !this.state.showElementalComposition\n    });\n  }\n\n  showPublishSampleModal(show) {\n    this.setState({showPublishSampleModal: show});\n    this.forceUpdate();\n  }\n\n  handleChemIdentSectionToggle() {\n    this.setState({\n      showChemicalIdentifiers: !this.state.showChemicalIdentifiers\n    });\n  }\n\n  handleSubmitInventory() {\n    this.setState({ saveInventoryAction: true });\n  }\n\n  handleExportAnalyses(sample) {\n    this.setState({ startExport: true });\n    AttachmentFetcher.downloadZipBySample(sample.id)\n      .then(() => { this.setState({ startExport: false }); })\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  handleSelect(eventKey) {\n    UIActions.selectTab({ tabKey: eventKey, type: 'sample' });\n    this.fetchQcWhenNeeded(eventKey);\n  }\n\n  onCasSelectOpen(e, casArr) {\n    const { sample } = this.state;\n    if (casArr.length === 0) {\n      this.setState({ isCasLoading: true });\n      DetailActions.getMoleculeCas(sample);\n    }\n  }\n\n  onTabPositionChanged(visible) {\n    this.setState({ visible });\n  }\n\n  onUIStoreChange(state) {\n    if (state.sample.activeTab !== this.state.activeTab) {\n      this.setState((previousState) => ({\n        ...previousState, activeTab: state.sample.activeTab\n      }));\n    }\n  }\n\n  /* eslint-disable camelcase */\n\n\n  sampleFooter() {\n    const { sample, startExport } = this.state;\n    const belongToReaction = sample.belongTo && sample.belongTo.type === 'reaction';\n    const hasAnalyses = !!(sample.analyses && sample.analyses.length > 0);\n    const downloadAnalysesBtn = (sample.isNew || !hasAnalyses) ? null : (\n      <Button bsStyle=\"info\" disabled={!this.sampleIsValid()} onClick={() => this.handleExportAnalyses(sample)}>\n        Download Analysis\n        {' '}\n        {startExport ? (\n          <span>\n            <i className=\"fa fa-spin fa-spinner\" />\n          </span>\n        ) : null}\n      </Button>\n    );\n\n    const saveAndCloseBtn = belongToReaction && !sample.isNew ? this.saveBtn(sample, true) : null;\n    return (\n      <ButtonToolbar>\n        <Button bsStyle=\"primary\" onClick={() => DetailActions.close(sample)}>\n          Close\n        </Button>\n        {this.saveBtn(sample)}\n        {saveAndCloseBtn}\n        {downloadAnalysesBtn}\n      </ButtonToolbar>\n    );\n  }\n\n  structureEditorModal(sample) {\n    const { molfile } = sample;\n    const hasParent = sample && sample.parent_id;\n    const hasChildren = sample && sample.children_count > 0;\n    return (\n      <StructureEditorModal\n        key={sample.id}\n        showModal={this.state.showStructureEditor}\n        onSave={this.handleStructureEditorSave}\n        onCancel={this.handleStructureEditorCancel}\n        molfile={molfile}\n        hasParent={hasParent}\n        hasChildren={hasChildren}\n      />\n    );\n  }\n\n  saveSampleOrInventory(closeView) {\n    const { activeTab, sample } = this.state;\n    if (activeTab === 'inventory' && sample.inventory_sample) {\n      this.handleSubmitInventory();\n    } else {\n      this.handleSubmit(closeView);\n    }\n  }\n\n  editChemical = (boolean) => {\n    this.setState({ isChemicalEdited: boolean });\n  };\n\n  matchSelectedCollection(currentCollection) {\n    const { sample } = this.props;\n    if (sample.isNew) {\n      return true;\n    }\n    const collection_labels = sample.tag?.taggable_data?.collection_labels || [];\n    const result = collection_labels.filter((object) => object.id === currentCollection.id).length > 0;\n    return result;\n  }\n\n  sampleInventoryTab(ind) {\n    const sample = this.state.sample || {};\n    const { saveInventoryAction } = this.state;\n\n    return (\n      <Tab eventKey={ind} title=\"Inventory\" key={`Inventory${sample.id.toString()}`}>\n        {\n          !sample.isNew && <CommentSection section=\"sample_inventory\" element={sample} />\n        }\n        <ListGroupItem>\n          <ChemicalTab\n            sample={sample}\n            parent={this}\n            saveInventory={saveInventoryAction}\n            editChemical={this.editChemical}\n            key={`ChemicalTab${sample.id.toString()}`}\n          />\n        </ListGroupItem>\n      </Tab>\n    );\n  }\n\n  sampleContainerTab(ind) {\n    const { sample } = this.state;\n    return (\n      <Tab eventKey={ind} title=\"Analyses\" key={`Container${sample.id.toString()}`}>\n        {\n          !sample.isNew && <CommentSection section=\"sample_analyses\" element={sample} />\n        }\n        <ListGroupItem style={{ paddingBottom: 20 }}>\n          <SampleDetailsContainers\n            sample={sample}\n            setState={(newSample) => { this.setState(newSample); }}\n            handleSampleChanged={this.handleSampleChanged}\n            handleSubmit={this.handleSubmit}\n            fromSample\n          />\n        </ListGroupItem>\n      </Tab>\n    );\n  }\n\n  sampleLiteratureTab() {\n    const { sample } = this.state;\n    if (!sample) { return null; }\n    return (\n      <Tab\n        eventKey=\"references\"\n        title=\"References\"\n        key={`References_${sample.id}`}\n      >\n        {\n          !sample.isNew && <CommentSection section=\"sample_references\" element={sample} />\n        }\n        <ListGroupItem style={{ paddingBottom: 20 }}>\n          <SampleDetailsLiteratures\n            element={sample}\n          />\n        </ListGroupItem>\n      </Tab>\n    );\n  }\n\n  sampleImportReadoutTab(ind) {\n    const sample = this.state.sample || {};\n    return (\n      <Tab\n        eventKey={ind}\n        title=\"Results\"\n        key={`Results${sample.id.toString()}`}\n      >\n        {\n          !sample.isNew && <CommentSection section=\"sample_results\" element={sample} />\n        }\n        <ListGroupItem style={{ paddingBottom: 20 }}>\n          <FormGroup controlId=\"importedReadoutInput\">\n            <ControlLabel>Imported Readout</ControlLabel>\n            <InputGroup>\n              <FormControl\n                type=\"text\"\n                value={sample.imported_readout || ''}\n                disabled\n                readOnly\n              />\n            </InputGroup>\n          </FormGroup>\n        </ListGroupItem>\n      </Tab>\n    );\n  }\n\n  measurementsTab(index) {\n    const sample = this.state.sample || {};\n\n    return (\n      <Tab\n        eventKey={index}\n        title=\"Measurements\"\n        key={`Measurements${sample.id.toString()}`}\n      >\n        <ListGroupItem style={{ paddingBottom: 20 }}>\n          <MeasurementsTab sample={sample} />\n        </ListGroupItem>\n      </Tab>\n    );\n  }\n\n  moleculeComputedProps(ind) {\n    const { sample } = this.state;\n    const key = `computed_props_${sample.id.toString()}`;\n    if (!this.enableComputedProps) return <span key={key} />;\n\n    const title = (\n      <span>\n        <ComputedPropLabel cprops={sample.molecule_computed_props} />\n        &nbsp; Computed Properties\n      </span>\n    );\n\n    return (\n      <Tab\n        eventKey={ind}\n        title={title}\n        key={key}\n      >\n        <ListGroupItem style={{ paddingBottom: 20 }}>\n          <ComputedPropsContainer sample={sample} />\n        </ListGroupItem>\n      </Tab>\n    );\n  }\n\n  fetchQcWhenNeeded(key) {\n    if (key !== 'qc_curation') return;\n    const { infers } = QcStore.getState();\n    const { sample } = this.state;\n    let isInStore = false;\n    infers.forEach((i) => {\n      if (i.sId === sample.id) isInStore = true;\n    });\n    if (isInStore) return;\n    QcActions.setLoading.defer();\n    QcActions.loadInfers.defer({ sample });\n  }\n\n  qualityCheckTab(ind) {\n    const { sample } = this.state;\n    if (!sample) { return null; }\n    return (\n      <Tab\n        eventKey={ind}\n        title=\"QC & curation\"\n        key={`QC_${sample.id}_${ind}`}\n      >\n        {\n          !sample.isNew && <CommentSection section=\"sample_qc_curation\" element={sample} />\n        }\n        <ListGroupItem style={{ paddingBottom: 20 }}>\n          <QcMain\n            sample={sample}\n          />\n        </ListGroupItem>\n      </Tab>\n    );\n  }\n\n  nmrSimTab(ind) {\n    const { sample } = this.state;\n    if (!sample) { return null; }\n    return (\n      <Tab\n        eventKey={ind}\n        title=\"NMR Simulation\"\n        key={`NMR_${sample.id}_${ind}`}\n      >\n        <ListGroupItem style={{ paddingBottom: 20 }}>\n          <NmrSimTab\n            sample={sample}\n          />\n        </ListGroupItem>\n      </Tab>\n    );\n  }\n\n  sampleIsValid() {\n    const { sample, loadingMolecule, quickCreator } = this.state;\n    return (sample.isValid && !loadingMolecule) || sample.is_scoped == true || quickCreator;\n  }\n\n  saveBtn(sample, closeView = false) {\n    let submitLabel = (sample && sample.isNew) ? 'Create' : 'Save';\n    const isDisabled = !sample.can_update;\n    if (closeView) submitLabel += ' and close';\n\n    return (\n      <Button\n        id=\"submit-sample-btn\"\n        bsStyle=\"warning\"\n        onClick={() => this.saveSampleOrInventory(closeView)}\n        disabled={!this.sampleIsValid() || isDisabled}\n      >\n        {submitLabel}\n      </Button>\n    );\n  }\n\n  elementalPropertiesItemHeader(sample) {\n    let label;\n    if (sample.contains_residues) {\n      label = 'Polymer section';\n      if (!this.state.showElementalComposition) {\n        label += ' / Elemental composition';\n      }\n    } else {\n      label = 'Elemental composition';\n    }\n\n    return (\n      <ListGroupItem onClick={() => this.handleElementalSectionToggle()}>\n        <Col className=\"padding-right elem-composition-header\" md={6}>\n          {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n          <label>{label}</label>\n        </Col>\n        <div className=\"col-md-6\">\n          <ToggleSection show={this.state.showElementalComposition} />\n        </div>\n      </ListGroupItem>\n    );\n  }\n\n  elementalPropertiesItemContent(sample, materialGroup, show) {\n    if (!show) return false;\n\n    if (sample.contains_residues) {\n      return (\n        <ListGroupItem className=\"ea-section\">\n          <PolymerSection\n            sample={sample}\n            parent={this}\n            show={sample.contains_residues}\n            materialGroup={materialGroup}\n          />\n        </ListGroupItem>\n      );\n    }\n    return (\n      <ListGroupItem className=\"ea-section\">\n        <Row>\n          <Col md={6}>\n            <ElementalCompositionGroup\n              handleSampleChanged={(s) => this.handleSampleChanged(s)}\n              sample={sample}\n            />\n          </Col>\n        </Row>\n      </ListGroupItem>\n    );\n  }\n\n  elementalPropertiesItem(sample) {\n    // avoid empty ListGroupItem\n    if (!sample.molecule_formula) {\n      return false;\n    }\n\n    const { showElementalComposition, materialGroup } = this.state;\n\n    return (\n      <div width=\"100%\" className=\"polymer-section\">\n        {this.elementalPropertiesItemHeader(sample)}\n\n        {this.elementalPropertiesItemContent(sample, materialGroup, showElementalComposition)}\n      </div>\n    );\n  }\n\n  chemicalIdentifiersItemHeader(sample) {\n    return (\n      <ListGroupItem onClick={() => this.handleChemIdentSectionToggle()}>\n        <Col className=\"padding-right chem-identifiers-header\" md={6}>\n          <b>Chemical identifiers</b>\n          {sample.decoupled\n            && (\n            <span className=\"text-danger\">\n              &nbsp;[decoupled]\n            </span>\n            )}\n        </Col>\n        <div className=\"col-md-6\">\n          <ToggleSection show={this.state.showChemicalIdentifiers} />\n        </div>\n      </ListGroupItem>\n    );\n  }\n\n  chemicalIdentifiersItemContent(sample, show) {\n    if (!show) return false;\n    return (\n      <ListGroupItem>\n        {this.moleculeInchi(sample)}\n        {this.moleculeCanoSmiles(sample)}\n        {this.moleculeMolfile(sample)}\n      </ListGroupItem>\n    );\n  }\n\n  chemicalIdentifiersItem(sample) {\n    const show = this.state.showChemicalIdentifiers;\n    return (\n      <div\n        width=\"100%\"\n        className={classNames({\n          'chem-identifiers-section': true,\n          decoupled: sample.decoupled\n        })}\n      >\n        {this.chemicalIdentifiersItemHeader(sample)}\n        {this.chemicalIdentifiersItemContent(sample, show)}\n      </div>\n    );\n  }\n\n  samplePropertiesTab(ind) {\n    const sample = this.state.sample || {};\n\n    return (\n      <Tab eventKey={ind} title=\"Properties\" key={`Props${sample.id.toString()}`}>\n        {\n          !sample.isNew && <CommentSection section=\"sample_properties\" element={sample} />\n        }\n        <ListGroupItem>\n          <SampleForm\n            sample={sample}\n            parent={this}\n            customizableField={this.customizableField}\n            enableSampleDecoupled={this.enableSampleDecoupled}\n            decoupleMolecule={this.decoupleMolecule}\n          />\n        </ListGroupItem>\n        {this.chemicalIdentifiersItem(sample)}\n        <div style={{ marginTop: '10px' }}>\n          <EditUserLabels element={sample} fnCb={this.handleSampleChanged} />\n        </div>\n        {this.elementalPropertiesItem(sample)}\n        <div style={{ marginTop: '10px' }}>\n          <PrivateNoteElement element={sample} disabled={!sample.can_update} />\n        </div>\n      </Tab>\n    );\n  }\n\n  customizableField() {\n    const { xref } = this.state.sample;\n    const {\n      cas,\n      optical_rotation,\n      rfvalue,\n      rfsovents,\n      supplier,\n      private_notes,\n      ...customKeys\n    } = cloneDeep(xref || {});\n    const check = ['form', 'solubility', 'refractive_index', 'flash_point', 'inventory_label'];\n\n    if (Object.keys(customKeys).length === 0\n      || check.some((key) => Object.keys(customKeys).includes(key))) return null;\n    return (\n      Object.keys(customKeys).map((key) => (\n        <tr key={`field_${key}`}>\n          <td colSpan=\"4\">\n            <FormGroup>\n              <ControlLabel>{key}</ControlLabel>\n              <FormControl type=\"text\" defaultValue={customKeys[key] || ''} onChange={(e) => this.updateKey(key, e)} />\n            </FormGroup>\n          </td>\n        </tr>\n      ))\n    );\n  }\n\n  updateKey(key, e) {\n    const { sample } = this.state;\n    sample.xref[key] = e.target.value;\n    this.setState({ sample });\n  }\n\n  moleculeCas() {\n    const { sample, isCasLoading, validCas } = this.state;\n    const { molecule, xref } = sample;\n    const cas = xref?.cas ?? '';\n    let casArr = [];\n    casArr = molecule?.cas?.filter((element) => element !== null);\n    casArr = cas && casArr && cas !== '' && !casArr.includes(cas) ? [...casArr, cas] : casArr;\n    const onChange = (e) => this.updateCas(e);\n    const onOpen = (e) => this.onCasSelectOpen(e, casArr);\n    const validate = () => this.isCASNumberValid(cas || '', true);\n    const errorMessage = <span className=\"text-danger\">Cas number is invalid</span>;\n    const options = casArr?.map((element) => ({ label: element, value: element }));\n    return (\n      <div className=\"form-row\" style={{ maxWidth: '300px' }}>\n        <InputGroup className=\"sample-molecule-identifier\">\n          <InputGroup.Addon>CAS</InputGroup.Addon>\n          <Select.Creatable\n            name=\"cas\"\n            multi={false}\n            options={options}\n            onChange={onChange}\n            onOpen={onOpen}\n            isLoading={isCasLoading}\n            value={cas}\n            onBlur={validate}\n            disabled={!sample.can_update}\n          />\n          <InputGroup.Button>\n            <OverlayTrigger placement=\"bottom\" overlay={this.clipboardTooltip()}>\n              <Button\n                active\n                className=\"clipboardBtn\"\n                data-clipboard-text={cas}\n              >\n                <i className=\"fa fa-clipboard\" />\n              </Button>\n            </OverlayTrigger>\n          </InputGroup.Button>\n        </InputGroup>\n        <div style={{ marginTop: '-11px' }}>\n          {!validCas && errorMessage}\n        </div>\n      </div>\n    );\n  }\n\n  isCASNumberValid(cas, boolean) {\n    const { sample } = this.state;\n    const result = validateCas(cas, boolean);\n    if (result !== false) {\n      sample.xref = { ...sample.xref, cas: result };\n      this.setState({ sample, validCas: result });\n    } else {\n      this.setState({ validCas: result });\n    }\n  }\n\n  updateCas(e) {\n    const { sample } = this.state;\n    const value = e?.value ?? '';\n    sample.xref = { ...sample.xref, cas: value };\n    this.setState({ sample });\n  }\n\n  saveButton(sampleUpdateCondition, saveBtnDisplay, floppyTag, timesTag, boolean = false) {\n    return (\n      <Button\n        bsStyle=\"warning\"\n        bsSize=\"xsmall\"\n        className=\"button-right\"\n        onClick={() => this.saveSampleOrInventory(boolean)}\n        style={{ display: saveBtnDisplay }}\n        disabled={sampleUpdateCondition}\n      >\n        {floppyTag}\n        {timesTag || null}\n      </Button>\n    );\n  }\n\n  saveAndCloseSample(sample, saveBtnDisplay) {\n    const { activeTab, isChemicalEdited } = this.state;\n    const isChemicalTab = activeTab === 'inventory';\n    const floppyTag = (\n      <i className=\"fa fa-floppy-o\" />\n    );\n    const timesTag = (\n      <i className=\"fa fa-times\" />\n    );\n    const sampleUpdateCondition = !this.sampleIsValid() || !sample.can_update;\n\n    const elementToSave = activeTab === 'inventory' ? 'Chemical' : 'Sample';\n    const saveAndClose = (\n      <OverlayTrigger\n        placement=\"bottom\"\n        overlay={(\n          <Tooltip id=\"saveCloseSample\">\n            {`Save and Close ${elementToSave}`}\n          </Tooltip>\n        )}\n      >\n        {this.saveButton(sampleUpdateCondition, saveBtnDisplay, floppyTag, timesTag, true)}\n      </OverlayTrigger>\n    );\n    const save = (\n      <OverlayTrigger\n        placement=\"bottom\"\n        overlay={(\n          <Tooltip id=\"saveSample\">\n            {`Save ${elementToSave}`}\n          </Tooltip>\n        )}\n      >\n        {this.saveButton(sampleUpdateCondition, saveBtnDisplay, floppyTag)}\n      </OverlayTrigger>\n    );\n\n    const saveForChemical = isChemicalTab && isChemicalEdited ? save : null;\n    return (\n      <div>\n        <ConfirmClose el={sample} />\n        { isChemicalTab ? null : saveAndClose }\n        { isChemicalTab ? saveForChemical : save}\n      </div>\n    );\n  }\n\n  sampleHeader(sample) {\n    const { isChemicalEdited, activeTab } = this.state;\n    const titleTooltip = formatTimeStampsOfElement(sample || {});\n    const isChemicalTab = activeTab === 'inventory';\n    const saveBtnDisplay = sample.isEdited || (isChemicalEdited && isChemicalTab) ? '' : 'none';\n\n    const { currentCollection } = UIStore.getState();\n    const defCol = currentCollection && currentCollection.is_shared === false\n      && currentCollection.is_locked === false && currentCollection.label !== 'All' ? currentCollection.id : null;\n\n    const copyBtn = (sample.can_copy && !sample.isNew) ? (\n      <CopyElementModal\n        element={sample}\n        defCol={defCol}\n      />\n    ) : null;\n\n    const colLabel = sample.isNew ? null : (\n      <ElementCollectionLabels element={sample} key={sample.id} placement=\"right\" />\n    );\n    const inventorySample = (\n      <Checkbox\n        className=\"sample-inventory-header\"\n        checked={sample.inventory_sample}\n        onChange={(e) => this.handleInventorySample(e)}\n      >\n        Inventory\n      </Checkbox>\n    );\n\n    const decoupleCb = sample.can_update && this.enableSampleDecoupled ? (\n      <Checkbox className=\"sample-header-decouple\" checked={sample.decoupled} onChange={(e) => this.decoupleChanged(e)}>\n        Decoupled\n      </Checkbox>\n    ) : null;\n\n    return (\n      <div style={{ display: 'flex', alignItems: 'center' }}>\n        <div style={{ display: 'flex', alignItems: 'center' }}>\n          <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"sampleDates\">{titleTooltip}</Tooltip>}>\n            <span>\n              <i className=\"icon-sample\" />\n            &nbsp;&nbsp;\n              {sample.title()}\n            &nbsp;&nbsp;\n            </span>\n          </OverlayTrigger>\n          <ShowUserLabels element={sample} />\n          <ElementAnalysesLabels element={sample} key={`${sample.id}_analyses`} />\n          <div style={{ marginTop: '-5px' }}>{colLabel}</div>\n          <ElementReactionLabels element={sample} key={`${sample.id}_reactions`} />\n          <PubchemLabels element={sample} />\n          <HeaderCommentSection element={sample} />\n          {sample.isNew\n            ? <FastInput fnHandle={this.handleFastInput} />\n            : null}\n        </div>\n        <div style={{ marginLeft: 'auto', display: 'flex', justifyContent: 'space-between' }}>\n          <div>\n            {copyBtn}\n            <OverlayTrigger\n              placement=\"bottom\"\n              overlay={<Tooltip id=\"fullSample\">FullScreen</Tooltip>}\n            >\n              <Button\n                bsStyle=\"info\"\n                bsSize=\"xsmall\"\n                className=\"button-right\"\n                onClick={() => this.props.toggleFullScreen()}\n              >\n                <i className=\"fa fa-expand\" />\n              </Button>\n            </OverlayTrigger>\n            <PrintCodeButton element={sample} />\n            <PublishBtn sample={sample} showModal={this.showPublishSampleModal} />\n            <ReviewPublishBtn element={sample} showComment={this.handleCommentScreen} validation={this.handleValidation} />\n            {sample.isNew\n              ? null\n              : <OpenCalendarButton isPanelHeader eventableId={sample.id} eventableType=\"Sample\" />}\n            {inventorySample}\n            {decoupleCb}\n            <div style={{ display: 'inline-block', marginLeft: '10px', marginRight: '10px' }}>\n              <OrigElnTag element={sample} />\n              <PublishedTag element={sample} fnUnseal={this.unseal} />\n              <LabelPublication element={sample} />\n            </div>\n          </div>\n          {this.saveAndCloseSample(sample, saveBtnDisplay)}\n        </div>\n      </div>\n    );\n  }\n\n  transferToDeviceButton(sample) {\n    return (\n      <Button\n        bsSize=\"xsmall\"\n        onClick={() => {\n          const { selectedDeviceId, devices } = ElementStore.getState().elements.devices;\n          const device = devices.find((d) => d.id === selectedDeviceId);\n          ElementActions.addSampleToDevice(sample, device, { save: true });\n        }}\n        style={{ marginLeft: 25 }}\n      >\n        Transfer to Device\n      </Button>\n    );\n  }\n\n  sampleInfo(sample) {\n    const style = { height: 'auto', marginBottom: '20px' };\n    let pubchemLcss = (sample.pubchem_tag && sample.pubchem_tag.pubchem_lcss\n      && sample.pubchem_tag.pubchem_lcss.Record) || null;\n    if (pubchemLcss && pubchemLcss.Reference) {\n      const echa = pubchemLcss.Reference.filter((e) => e.SourceName\n        === 'European Chemicals Agency (ECHA)').map((e) => e.ReferenceNumber);\n      if (echa.length > 0) {\n        pubchemLcss = pubchemLcss.Section.find((e) => e.TOCHeading === 'Safety and Hazards') || [];\n        pubchemLcss = pubchemLcss.Section.find((e) => e.TOCHeading === 'Hazards Identification') || [];\n        pubchemLcss = pubchemLcss.Section[0].Information.filter((e) => echa.includes(e.ReferenceNumber)) || null;\n      } else pubchemLcss = null;\n    }\n    const pubchemCid = sample.pubchem_tag && sample.pubchem_tag.pubchem_cid\n      ? sample.pubchem_tag.pubchem_cid : 0;\n    const lcssSign = pubchemLcss && !sample.decoupled\n      ? <PubchemLcss cid={pubchemCid} informArray={pubchemLcss} /> : <div />;\n\n    return (\n      <Row style={style}>\n        <Col md={4}>\n          <h4><SampleName sample={sample} /></h4>\n          <h5>{this.sampleAverageMW(sample)}</h5>\n          <h5>{this.sampleExactMW(sample)}</h5>\n          {sample.isNew ? null : <h6>{this.moleculeCas()}</h6>}\n          {lcssSign}\n        </Col>\n        <Col md={8}>\n          {this.svgOrLoading(sample)}\n        </Col>\n      </Row>\n    );\n  }\n\n  moleculeInchi(sample) {\n    if (typeof (this.inchistringInput) !== 'undefined' && this.inchistringInput\n      && typeof (sample.molecule_inchistring) !== 'undefined' && sample.molecule_inchistring) {\n      this.inchistringInput.value = sample.molecule_inchistring;\n    }\n    const inchiLabel = this.state.showInchikey ? 'InChIKey' : 'InChI';\n    const inchiTooltip = <Tooltip id=\"inchi_tooltip\">toggle InChI/InChIKey</Tooltip>;\n\n    return (\n      <InputGroup className=\"sample-molecule-identifier\">\n        <InputGroup.Button>\n          <OverlayTrigger placement=\"top\" overlay={inchiTooltip}>\n            <Button\n              active\n              onClick={this.toggleInchi}\n            >\n              {inchiLabel}\n            </Button>\n          </OverlayTrigger>\n        </InputGroup.Button>\n        <FormGroup controlId=\"inchistringInput\">\n          <FormControl\n            type=\"text\"\n            inputRef={(m) => { this.inchistringInput = m; }}\n            key={sample.id}\n            value={(this.state.showInchikey ? sample.molecule_inchikey : sample.molecule_inchistring) || ''}\n            defaultValue={(this.state.showInchikey ? sample.molecule_inchikey : sample.molecule_inchistring) || ''}\n            disabled\n            readOnly\n          />\n        </FormGroup>\n        <InputGroup.Button>\n          <OverlayTrigger placement=\"bottom\" overlay={this.clipboardTooltip()}>\n            <Button\n              active\n              className=\"clipboardBtn\"\n              data-clipboard-text={(this.state.showInchikey\n                ? sample.molecule_inchikey : sample.molecule_inchistring) || ' '}\n            >\n              <i className=\"fa fa-clipboard\" />\n            </Button>\n          </OverlayTrigger>\n        </InputGroup.Button>\n      </InputGroup>\n    );\n  }\n\n  clipboardTooltip() {\n    return (\n      <Tooltip id=\"assign_button\">copy to clipboard</Tooltip>\n    )\n  }\n  sampleContainerTab(ind) {\n    const { sample, currentUser } = this.state;\n    const isPub = !!(sample.publication && sample.publication.published_at);\n    return (\n      <Tab eventKey={ind} title=\"Analyses\" key={'Container' + sample.id.toString()}>\n        <ListGroupItem style={{ paddingBottom: 20 }}>\n          <SampleDetailsContainers\n            sample={sample}\n            setState={(sample) => {this.setState(sample)}}\n            handleSampleChanged={this.handleSampleChanged}\n            handleSubmit={this.handleSubmit}\n            fromSample\n            publish={isPub}\n            isReviewer={!!currentUser.is_reviewer}\n          />\n        </ListGroupItem>\n      </Tab>\n    );\n  }\n\n\n  moleculeCreatorTooltip() {\n    return (\n      <Tooltip id=\"assign_button\">create molecule</Tooltip>\n    );\n  }\n\n  moleculeCanoSmiles(sample) {\n    if (this.state.smileReadonly && typeof (this.smilesInput) !== 'undefined'\n      && this.smilesInput && typeof (sample.molecule_cano_smiles) !== 'undefined'\n      && sample.molecule_cano_smiles) {\n      this.smilesInput.value = sample.molecule_cano_smiles;\n    }\n    return (\n      <InputGroup className=\"sample-molecule-identifier\">\n        <InputGroup.Addon>Canonical Smiles</InputGroup.Addon>\n        <FormGroup controlId=\"smilesInput\">\n          <FormControl\n            type=\"text\"\n            id=\"smilesInput\"\n            inputRef={(m) => { this.smilesInput = m; }}\n            defaultValue={sample.molecule_cano_smiles || ''}\n            disabled={this.state.smileReadonly}\n            readOnly={this.state.smileReadonly}\n          />\n        </FormGroup>\n        <InputGroup.Button>\n          <OverlayTrigger placement=\"bottom\" overlay={this.clipboardTooltip()}>\n            <Button active className=\"clipboardBtn\" data-clipboard-text={sample.molecule_cano_smiles || ' '}>\n              <i className=\"fa fa-clipboard\" />\n            </Button>\n          </OverlayTrigger>\n        </InputGroup.Button>\n        <InputGroup.Button>\n          <OverlayTrigger placement=\"bottom\" overlay={this.moleculeCreatorTooltip()}>\n            <Button\n              active\n              className=\"clipboardBtn\"\n              id=\"smile-create-molecule\"\n              disabled={this.state.smileReadonly}\n              readOnly={this.state.smileReadonly}\n              onClick={() => this.handleMoleculeBySmile()}\n            >\n              <i className=\"fa fa-save\" />\n            </Button>\n          </OverlayTrigger>\n        </InputGroup.Button>\n      </InputGroup>\n    );\n  }\n\n  moleculeMolfile(sample) {\n    if (typeof (this.molfileInput) !== 'undefined' && this.molfileInput\n      && typeof (sample.molfile) !== 'undefined' && sample.molfile) {\n      this.molfileInput.value = sample.molfile;\n    }\n\n    const textAreaStyle = {\n      minHeight: '35px',\n      height: '35px',\n      overflow: 'auto',\n      whiteSpace: 'pre',\n      resize: 'vertical',\n    };\n\n    return (\n      <InputGroup className=\"sample-molecule-identifier\">\n        <InputGroup.Addon>Molfile</InputGroup.Addon>\n        <FormGroup controlId=\"molfileInput\">\n          <FormControl\n            componentClass=\"textarea\"\n            style={textAreaStyle}\n            inputRef={(m) => { this.molfileInput = m; }}\n            defaultValue={sample.molfile || ''}\n            disabled\n            readOnly\n          />\n        </FormGroup>\n        <InputGroup.Button>\n          <OverlayTrigger placement=\"bottom\" overlay={this.clipboardTooltip()}>\n            <Button active className=\"clipboardBtn\" data-clipboard-text={sample.molfile || ' '}>\n              <i className=\"fa fa-clipboard\" />\n            </Button>\n          </OverlayTrigger>\n        </InputGroup.Button>\n        <InputGroup.Button>\n          <Button\n            active\n            className=\"clipboardBtn\"\n            onClick={this.handleMolfileShow}\n          >\n            <i className=\"fa fa-file-text\" />\n          </Button>\n        </InputGroup.Button>\n      </InputGroup>\n    );\n  }\n\n  initiateAnalysisButton(sample) {\n    return (\n      <div style={{ display: 'inline-block', marginLeft: '100px' }}>\n        <DropdownButton id=\"InitiateAnalysis\" bsStyle=\"info\" bsSize=\"xsmall\" title=\"Initiate Analysis\">\n          <MenuItem\n            eventKey=\"1\"\n            onClick={() => this.initiateAnalysisWithKind(sample, chmoConversions.nmr_1h.termId)}\n          >\n            {chmoConversions.nmr_1h.label}\n          </MenuItem>\n          <MenuItem\n            eventKey=\"2\"\n            onClick={() => this.initiateAnalysisWithKind(sample, chmoConversions.nmr_13c.termId)}\n          >\n            {chmoConversions.nmr_13c.label}\n          </MenuItem>\n          <MenuItem eventKey=\"3\" onClick={() => this.initiateAnalysisWithKind(sample, 'Others')}>others</MenuItem>\n          <MenuItem eventKey=\"4\" onClick={() => this.initiateAnalysisWithKind(sample, 'Others2x')}>others 2x</MenuItem>\n          <MenuItem eventKey=\"5\" onClick={() => this.initiateAnalysisWithKind(sample, 'Others3x')}>others 3x</MenuItem>\n        </DropdownButton>\n      </div>\n    );\n  }\n\n  initiateAnalysisWithKind(sample, kind) {\n    let analysis = '';\n    const a1 = Container.buildAnalysis(chmoConversions.others.value);\n    const a2 = Container.buildAnalysis(chmoConversions.others.value);\n    const a3 = Container.buildAnalysis(chmoConversions.others.value);\n    switch (kind) {\n      case chmoConversions.nmr_1h.termId:\n        analysis = Container.buildAnalysis(chmoConversions.nmr_1h.value);\n        sample.addAnalysis(analysis);\n        ElementActions.updateSample(sample);\n        Utils.downloadFile({\n          contents: `/api/v1/code_logs/print_analyses_codes?sample_id=${sample.id}`\n                    + `&analyses_ids[]=${analysis.id}&type=nmr_analysis&size=small`\n        });\n        break;\n      case chmoConversions.nmr_13c.termId:\n        analysis = Container.buildAnalysis(chmoConversions.nmr_13c.value);\n        sample.addAnalysis(analysis);\n        ElementActions.updateSample(sample);\n        Utils.downloadFile({\n          contents: `/api/v1/code_logs/print_analyses_codes?sample_id=${sample.id}`\n          + `&analyses_ids[]=${analysis.id}&type=nmr_analysis&size=small`\n        });\n        break;\n      case 'Others':\n        sample.addAnalysis(a1);\n        ElementActions.updateSample(sample);\n        Utils.downloadFile({\n          contents: `/api/v1/code_logs/print_analyses_codes?sample_id=${sample.id}`\n                    + `&analyses_ids[]=${a1.id}&type=analysis&size=small`\n        });\n        break;\n      case 'Others2x':\n        sample.addAnalysis(a1);\n        sample.addAnalysis(a2);\n        ElementActions.updateSample(sample);\n        Utils.downloadFile({\n          contents: `/api/v1/code_logs/print_analyses_codes?sample_id=${sample.id}`\n                    + `&analyses_ids[]=${a1.id}&analyses_ids[]=${a2.id}&type=analysis&size=small`\n        });\n        break;\n      case 'Others3x':\n        sample.addAnalysis(a1);\n        sample.addAnalysis(a2);\n        sample.addAnalysis(a3);\n        ElementActions.updateSample(sample);\n        Utils.downloadFile({\n          contents: `/api/v1/code_logs/print_analyses_codes?sample_id=${sample.id}`\n              + `&analyses_ids[]=${a1.id}&analyses_ids[]=${a2.id}&analyses_ids[]=${a3.id}&type=analysis&size=small`\n        });\n        break;\n      default:\n        // Console warning if no case matching\n        console.warn(`Unknown analysis kind: ${kind}`);\n        break;\n    }\n  }\n\n  structureEditorButton(isDisabled) {\n    return (\n      // eslint-disable-next-line react/jsx-no-bind\n      <Button onClick={this.showStructureEditor.bind(this)} disabled={isDisabled}>\n        <Glyphicon glyph=\"pencil\" />\n      </Button>\n    );\n  }\n\n  svgOrLoading(sample) {\n    let svgPath = '';\n    const { svgPath: sampleSvgPath } = sample;\n    if (this.state.loadingMolecule) {\n      svgPath = '/images/wild_card/loading-bubbles.svg';\n    } else {\n      svgPath = sampleSvgPath;\n    }\n    const className = svgPath ? 'svg-container' : 'svg-container-empty';\n    return sample.can_update ? (\n      <>\n        <div\n          className={className}\n          style={{ position: 'relative' }}\n          onClick={this.showStructureEditor.bind(this)}\n          onKeyPress={this.showStructureEditor.bind(this)}\n          role=\"button\"\n          tabIndex=\"0\"\n        >\n          <Glyphicon className=\"pull-right\" glyph=\"pencil\" />\n          <SVG key={svgPath} src={svgPath} className=\"molecule-mid\" />\n        </div>\n        <MolViewerBtn\n          className=\"structure-editor-container\"\n          disabled={sample.isNew || !this.enableMoleculeViewer}\n          fileContent={sample.molfile}\n          isPublic={false}\n          viewType={`mol_${sample.id}`}\n        />\n      </>\n    ) : (\n      <div className={className} style={{ position: 'relative' }}>\n        <SVG key={svgPath} src={svgPath} className=\"molecule-mid\" />\n        <MolViewerBtn\n          className=\"structure-editor-container\"\n          disabled={sample.isNew || !this.enableMoleculeViewer}\n          fileContent={sample.molfile}\n          isPublic={false}\n          viewType={`mol_${sample.id}`}\n        />\n      </div>\n    );\n  }\n\n  sampleAverageMW(sample) {\n    const mw = sample.molecule_molecular_weight;\n    if (mw) return <ClipboardCopyText text={`${mw.toFixed(MWPrecision)} g/mol`} />;\n    return '';\n  }\n\n  sampleExactMW(sample) {\n    const mw = sample.molecule_exact_molecular_weight;\n    if (mw) return <ClipboardCopyText text={`Exact mass: ${mw.toFixed(MWPrecision)} g/mol`} />;\n    return '';\n  }\n\n  checkMolfileChange() {\n    const { trackMolfile } = this.state;\n    const { sample } = this.props;\n    // !sample.isNew to allow setting mp & bp for new samples\n    if (trackMolfile !== sample.molfile && !sample.isNew) {\n      sample.updateRange('boiling_point', '', '');\n      sample.updateRange('melting_point', '', '');\n      this.setState({ sample });\n    }\n  }\n\n  saveBtn(sample, closeView = false) {\n    let submitLabel = sample && sample.isNew ? 'Create' : 'Save';\n    const isDisabled = !permitOn(sample);\n    if (closeView) submitLabel += ' and close';\n\n    return (\n      <Button\n        id=\"submit-sample-btn\"\n        bsStyle=\"warning\"\n        onClick={() => this.handleSubmit(closeView)}\n        disabled={!this.sampleIsValid() || isDisabled}\n      >\n        {submitLabel}\n      </Button>\n    );\n  }\n\n  hideStructureEditor() {\n    this.setState({\n      showStructureEditor: false\n    });\n  }\n\n  toggleInchi() {\n    const { showInchikey } = this.state;\n    this.setState({ showInchikey: !showInchikey });\n  }\n\n  decoupleMolecule() {\n    const { sample } = this.state;\n    MoleculesFetcher.decouple(sample.molfile, sample.sample_svg_file, sample.decoupled)\n      .then((result) => {\n        sample.molecule = result;\n        sample.molecule_id = result.id;\n        if (result.inchikey === 'DUMMY') { sample.decoupled = true; }\n        this.setState({\n          sample, pageMessage: result.ob_log\n        });\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  decoupleChanged(e) {\n    const { sample } = this.state;\n    sample.decoupled = e.target.checked;\n    if (!sample.decoupled) {\n      sample.sum_formula = '';\n      sample.molecular_mass = null;\n    } else {\n      if (sample.sum_formula?.trim() === '') sample.sum_formula = 'undefined structure';\n      if (sample.residues && sample.residues[0] && sample.residues[0].custom_info) {\n        sample.residues[0].custom_info.polymer_type = 'self_defined';\n        delete sample.residues[0].custom_info.surface_type;\n      }\n    }\n    if (!sample.decoupled && ((sample.molfile || '') === '')) {\n      this.handleSampleChanged(sample);\n    } else {\n      this.handleSampleChanged(sample, this.decoupleMolecule);\n    }\n  }\n\n  renderMolfileModal() {\n    const textAreaStyle = {\n      width: '500px',\n      height: '640px',\n      margin: '30px',\n      whiteSpace: 'pre-line',\n    };\n    if (this.state.showMolfileModal) {\n      let molfile = this.molfileInput.value;\n      molfile = molfile.replace(/\\r?\\n/g, '<br />');\n      return (\n        <Modal\n          show={this.state.showMolfileModal}\n          dialogClassName=\"importChemDrawModal\"\n          onHide={this.handleMolfileClose}\n        >\n          <Modal.Header closeButton>\n            <Modal.Title>Molfile</Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <div>\n              <FormGroup controlId=\"molfileInputModal\">\n                <FormControl\n                  componentClass=\"textarea\"\n                  style={textAreaStyle}\n                  readOnly\n                  disabled\n                  inputRef={(m) => { this.molfileInputModal = m; }}\n                  defaultValue={this.molfileInput.value || ''}\n                />\n              </FormGroup>\n            </div>\n            <div>\n              <Button bsStyle=\"warning\" onClick={this.handleMolfileClose}>\n                Close\n              </Button>\n            </div>\n          </Modal.Body>\n        </Modal>\n      );\n    }\n    return (<div />);\n  }\n\n  onTabPositionChanged(visible) {\n    this.setState({ visible });\n  }\n\n  isRepoSecretExternalLabel() {\n    const sample = this.state.sample || {};\n    const currentUser = this.state.currentUser || {};\n    if (sample.is_repo_public) {\n      if (currentUser.is_reviewer || currentUser.id === sample.created_by) return false;\n      return true;\n    }\n    return false;\n  }\n\n  render() {\n    const sample = this.state.sample || {};\n    const { visible, isChemicalEdited } = this.state;\n    const tabContentsMap = {\n      properties: this.samplePropertiesTab('properties'),\n      analyses: this.sampleContainerTab('analyses'),\n      references: this.sampleLiteratureTab(),\n      results: this.sampleImportReadoutTab('results'),\n      qc_curation: this.qualityCheckTab('qc_curation'),\n      measurements: this.measurementsTab('measurements')\n    };\n\n    if (this.enableComputedProps) {\n      tabContentsMap.computed_props = this.moleculeComputedProps('computed_props');\n    }\n\n    if (this.enableNmrSim) {\n      tabContentsMap.nmr_sim = this.nmrSimTab('nmr_sim');\n    }\n\n    if (sample.inventory_sample) {\n      tabContentsMap.inventory = this.sampleInventoryTab('inventory');\n    }\n\n    const tabTitlesMap = {\n      literature: 'References',\n      qc_curation: 'QC & curation',\n      computed_props: 'computed props',\n      nmr_sim: 'NMR Simulation',\n      measurements: 'Measurements',\n      inventory: 'Inventory'\n    };\n\n    let { showPublishSampleModal } = this.state\n\n    addSegmentTabs(sample, this.handleSegmentsChange, tabContentsMap);\n    const stb = [];\n    const tabContents = [];\n    visible.forEach((value) => {\n      const tabContent = tabContentsMap[value];\n      if (tabContent) { tabContents.push(tabContent); }\n      stb.push(value);\n    });\n\n    let segmentKlasses = (UserStore.getState() && UserStore.getState().segmentKlasses) || [];\n    segmentKlasses = segmentKlasses.filter((s) => s.element_klass && s.element_klass.name === sample.type);\n    segmentKlasses.forEach((klass) => {\n      const visIdx = visible.indexOf(klass.label);\n      const idx = findIndex(sample.segments, (o) => o.segment_klass_id === klass.id);\n      if (visIdx < 0 && idx > -1) {\n        const tabContent = tabContentsMap[klass.label];\n        if (tabContent) { tabContents.push(tabContent); }\n        stb.push(klass.label);\n      }\n    });\n\n    const validateObjs = sample.validates && sample.validates.filter(v => v.value === false);\n    let validationBlock = null;\n    if (validateObjs && validateObjs.length > 0) {\n      const validateAssociate = sample.validates && sample.validates.filter(v => v.value === false && v.message.includes('associated'));\n      if (validateAssociate && validateAssociate.length > 0) {\n        validationBlock = (\n          <Alert bsStyle=\"danger\" style={{ marginBottom: 'unset', padding: '5px', marginTop: '10px' }}>\n            <strong>Submission Alert</strong>\n            <p>\n              This sample is associated with a Reaction and can not be published alone.\n            </p>\n            <Button bsSize=\"xsmall\" onClick={() => this.handleAssociateClick()}>Go to Reaction&nbsp;<i className=\"icon-reaction\" /></Button>\n            <span>&nbsp;&nbsp;or&nbsp;&nbsp;</span>\n            <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.handleResetValidation()}>Close Alert</Button>\n          </Alert>\n        );\n      } else {\n        validationBlock = (\n          <Alert bsStyle=\"danger\" style={{ marginBottom: 'unset', padding: '5px', marginTop: '10px' }}>\n            <strong>Submission Alert</strong>&nbsp;&nbsp;\n            <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.handleResetValidation()}>Close Alert</Button>\n            <br />\n            {\n              validateObjs.map(m => (\n                <div key={uuid.v1()}>{m.message}</div>\n              ))\n            }\n          </Alert>\n        );\n      }\n    }\n\n    const { pageMessage } = this.state;\n    const messageBlock = (pageMessage\n      && (pageMessage.error.length > 0 || pageMessage.warning.length > 0)) ? (\n        <Alert bsStyle=\"warning\" style={{ marginBottom: 'unset', padding: '5px', marginTop: '10px' }}>\n          <strong>Structure Alert</strong>\n          &nbsp;\n          <Button\n            bsSize=\"xsmall\"\n            bsStyle=\"warning\"\n            onClick={() => this.setState({ pageMessage: null })}\n          >\n            Close Alert\n          </Button>\n          <br />\n          {\n          pageMessage.error.map((m) => (\n            <div key={uuid.v1()}>{m}</div>\n          ))\n        }\n          {\n          pageMessage.warning.map((m) => (\n            <div key={uuid.v1()}>{m}</div>\n          ))\n        }\n        </Alert>\n      ) : null;\n\n    const activeTab = (this.state.activeTab !== 0 && stb.indexOf(this.state.activeTab) > -1\n      && this.state.activeTab) || visible.get(0);\n\n    const publication = sample.tag && sample.tag.taggable_data &&\n      sample.tag.taggable_data.publication;\n\n    return (\n      <Panel\n        className=\"eln-panel-detail\"\n        bsStyle={publication ? 'success' : ((sample.isPendingToSave || isChemicalEdited) ? 'info' : 'primary')}\n      >\n        <Panel.Heading>\n          {this.sampleHeader(sample)}\n          {messageBlock}\n          {validationBlock}\n        </Panel.Heading>\n        <Panel.Body>\n          <Row><Col md={this.props.fullScreen && this.state.commentScreen ? 6 : 12}>\n            <div className={this.props.fullScreen ? 'full' : 'base'}>\n          {this.sampleInfo(sample)}\n          <ListGroup>\n            <ElementDetailSortTab\n              type=\"sample\"\n              availableTabs={Object.keys(tabContentsMap)}\n              tabTitles={tabTitlesMap}\n              onTabPositionChanged={this.onTabPositionChanged}\n            />\n            {this.state.sfn ? <ScifinderSearch el={sample} /> : null}\n            <Tabs activeKey={activeTab} onSelect={this.handleSelect} id=\"SampleDetailsXTab\">\n              {tabContents}\n            </Tabs>\n            {\n              showPublishSampleModal && (\n                <PublishSampleModal\n                show={showPublishSampleModal}\n                sample={sample}\n                onHide={() => this.showPublishSampleModal(false)}\n                onPublishRefreshClose={this.forcePublishRefreshClose}\n              />\n              )\n            }\n          </ListGroup>\n          {this.sampleFooter()}\n          {this.structureEditorModal(sample)}\n          {this.renderMolfileModal()}\n          <CommentModal element={sample} />\n            </div>\n          </Col>\n            {\n              this.props.fullScreen && this.state.commentScreen ?\n                <Col md={6}>\n                  <div className={this.props.fullScreen ? 'full' : 'base'}>\n                    <SampleDetailsRepoComment sampleId={sample.id} />\n                  </div>\n                </Col>\n                :\n                <div />\n            }\n          </Row>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nSampleDetails.propTypes = {\n  sample: PropTypes.object,\n  toggleFullScreen: PropTypes.func,\n  toggleCommentScreen: PropTypes.func.isRequired,\n  fullScreen: PropTypes.bool.isRequired\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { PanelGroup, Panel, Button } from 'react-bootstrap';\n\nimport Container from 'src/models/Container';\nimport ContainerComponent from 'src/components/container/ContainerComponent';\nimport PrintCodeButton from 'src/components/common/PrintCodeButton';\n\nimport TextTemplateActions from 'src/stores/alt/actions/TextTemplateActions';\n\nexport default class ScreenDetailsContainers extends Component {\n  constructor(props) {\n    super();\n    const { screen } = props;\n    this.state = {\n      screen,\n      activeContainer: 0\n    };\n  }\n\n  componentDidMount() {\n    TextTemplateActions.fetchTextTemplates('screen');\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    this.setState({\n      screen: nextProps.screen\n    })\n  }\n\n  handleChange(container) {\n    const { screen } = this.state\n    this.props.parent.handleScreenChanged(screen)\n  }\n\n  handleAdd() {\n    const { screen } = this.state;\n    let container = Container.buildEmpty();\n    container.container_type = \"analysis\";\n\n    screen.container.children.filter(element => ~element.container_type.indexOf('analyses'))[0].children.push(container);\n\n    const newKey = screen.container.children.filter(element => ~element.container_type.indexOf('analyses'))[0].children.length - 1;\n\n    this.handleAccordionOpen(newKey);\n\n    this.props.parent.setState({ screen: screen })\n  }\n\n  handleRemove(container) {\n    let { screen } = this.state;\n    container.is_deleted = true;\n\n    this.props.parent.setState({ screen: screen })\n  }\n\n  handleUndo(container) {\n    let { screen } = this.state;\n    container.is_deleted = false;\n\n    this.props.parent.setState({ screen: screen })\n  }\n\n  handleAccordionOpen(key) {\n    this.setState({ activeContainer: key });\n  }\n\n  addButton() {\n    const { readOnly } = this.props;\n    if (!readOnly) {\n      return (\n        <Button className=\"button-right\" bsSize=\"xsmall\" bsStyle=\"success\" onClick={() => this.handleAdd()}>\n          Add analysis\n        </Button>\n      )\n    }\n  }\n\n  render() {\n    const { screen, activeContainer } = this.state;\n    const { readOnly } = this.props;\n\n    let containerHeader = (container) =>\n      <p style={{ width: '100%' }}>{container.name}\n        {(container.extended_metadata['kind'] && container.extended_metadata['kind'] != '') ?\n          (` - Type: ${container.extended_metadata['kind'].split('|')[1] || container.extended_metadata['kind']}`) : ''}\n        {(container.extended_metadata['status'] && container.extended_metadata['status'] != '') ? (' - Status: ' + container.extended_metadata['status']) : ''}\n        <Button bsSize=\"xsmall\" bsStyle=\"danger\"\n          className=\"button-right\" disabled={readOnly}\n          onClick={() => { if (confirm('Delete the container?')) { this.handleRemove(container) } }}>\n          <i className=\"fa fa-trash\"></i>\n        </Button>\n        <PrintCodeButton element={screen} analyses={[container]} ident={container.id} />\n      </p>\n\n    let containerHeaderDeleted = (container) => <p style={{ width: '100%' }}><strike>{container.name}\n      {(container.extended_metadata['kind'] && container.extended_metadata['kind'] != '') ?\n        (` - Type: ${container.extended_metadata['kind'].split('|')[1] || container.extended_metadata['kind']}`) : ''}\n      {(container.extended_metadata['status'] && container.extended_metadata['status'] != '') ? (' - Status: ' + container.extended_metadata['status']) : ''}\n    </strike>\n      <Button className=\"pull-right\" bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.handleUndo(container)}>\n        <i className=\"fa fa-undo\"></i>\n      </Button>\n    </p>\n\n    if (screen.container != null) {\n\n      var analyses_container = screen.container.children.filter(element => ~element.container_type.indexOf('analyses'));\n\n      if (analyses_container.length == 1 && analyses_container[0].children.length > 0) {\n        return (\n          <div>\n            <p>&nbsp;{this.addButton()}</p>\n            <PanelGroup defaultActiveKey={0} activeKey={activeContainer} accordion>\n              {analyses_container[0].children.map((container, key) => {\n                if (container.is_deleted) {\n                  return (\n                    <Panel eventKey={key}\n                      key={key} >\n                      <Panel.Heading>{containerHeaderDeleted(container)}</Panel.Heading>\n                    </Panel>\n                  );\n                } else {\n                  return (\n                    <Panel eventKey={key}\n                      key={key} onClick={() => this.handleAccordionOpen(key)}>\n                      <Panel.Heading>{containerHeader(container)}</Panel.Heading>\n                      <Panel.Body collapsible=\"true\">\n                        <ContainerComponent\n                          templateType=\"screen\"\n                          readOnly={readOnly}\n                          container={container}\n                          onChange={container => this.handleChange(container)}\n                        />\n                      </Panel.Body>\n                    </Panel>\n                  );\n                }\n\n              }\n              )}\n            </PanelGroup>\n          </div>\n        )\n      } else {\n        return (\n          <div>\n            <p className='noAnalyses-warning'>\n              There are currently no Analyses.\n              {this.addButton()}\n            </p>\n          </div>\n        )\n      }\n\n    } else {\n\n      return (\n        <div>\n          <p className='noAnalyses-warning'>\n            There are currently no Analyses.\n          </p>\n        </div>\n      )\n    }\n\n  }\n\n}\n\nScreenDetailsContainers.propTypes = {\n  readOnly: PropTypes.bool,\n  parent: PropTypes.object,\n};\n","/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Panel, Label, ListGroup, ListGroupItem, Button, ButtonGroup, Tooltip, Overlay, OverlayTrigger, Dropdown, MenuItem\n} from 'react-bootstrap';\nimport Aviator from 'aviator';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport { researchPlanShowOrNew } from 'src/utilities/routesUtils';\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport ResearchPlansFetcher from 'src/fetchers/ResearchPlansFetcher';\nimport ResearchPlan from 'src/models/ResearchPlan';\nimport ResearchPlanDetailsBody from\n  'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsBody';\nimport ResearchPlanDetailsName from\n  'src/apps/mydb/elements/details/researchPlans/researchPlanTab/ResearchPlanDetailsName';\nimport { formatTimeStampsOfElement } from 'src/utilities/timezoneHelper';\n\nfunction InfoLabel({\n  iconClass, text, style, tooltip\n}) {\n  style ||= 'info';\n  if (!(iconClass && text)) { return null; }\n  const icon = (<i className={`fa ${iconClass}`} />);\n  const label = (\n    <Label bsStyle={style} style={{ 'margin-right': '1em' }} tooltip={tooltip}>\n      {icon}\n      {` ${text}`}\n    </Label>\n  );\n  if (tooltip) {\n    return (\n      <OverlayTrigger placement=\"bottom\" overlay={<Tooltip>{tooltip}</Tooltip>}>\n        {label}\n      </OverlayTrigger>\n    );\n  }\n  return label;\n}\n\nexport default class EmbeddedResearchPlanDetails extends Component {\n  constructor(props) {\n    super(props);\n    const { researchPlan, expanded } = props;\n\n    this.state = {\n      researchPlan,\n      update: false,\n      expanded: expanded || false,\n      confirmRemove: false,\n    };\n    this.handleSwitchMode = this.handleSwitchMode.bind(this);\n    this.handleResearchPlanChange = this.handleResearchPlanChange.bind(this);\n    this.handleNameChange = this.handleNameChange.bind(this);\n    this.handleBodyChange = this.handleBodyChange.bind(this);\n    this.handleBodyAdd = this.handleBodyAdd.bind(this);\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    let { researchPlan, expanded } = nextProps;\n    if (!(researchPlan instanceof ResearchPlan)) {\n      const rResearchPlan = new ResearchPlan(researchPlan);\n      researchPlan = rResearchPlan;\n    }\n    this.setState({ researchPlan, expanded });\n  }\n\n  handleResearchPlanChange(el) {\n    const researchPlan = el;\n    researchPlan.changed = true;\n    this.setState({ researchPlan });\n  }\n\n  handleSwitchMode(mode) {\n    const { researchPlan } = this.state;\n    researchPlan.mode = mode;\n    this.setState({ researchPlan });\n    this.handleUpdateResearchPlan();\n  }\n\n  // handle name actions\n  handleNameChange(value) {\n    const { researchPlan } = this.state;\n    researchPlan.changed = true;\n    researchPlan.name = value;\n    this.setState({ researchPlan });\n    this.handleUpdateResearchPlan();\n  }\n\n  // handle body actions\n  handleBodyChange(value, id) {\n    const { researchPlan } = this.state;\n    const index = researchPlan.body.findIndex((field) => field.id === id);\n    researchPlan.body[index].value = value;\n    researchPlan.changed = true;\n    this.setState({ researchPlan });\n  }\n\n  handleBodyDrop(source, target) {\n    const { researchPlan } = this.state;\n    researchPlan.body.splice(target, 0, researchPlan.body.splice(source, 1)[0]);\n    researchPlan.changed = true;\n    this.setState({ researchPlan });\n  }\n\n  handleBodyAdd(type) {\n    const { researchPlan } = this.state;\n    researchPlan.addBodyField(type);\n    researchPlan.changed = true;\n    this.setState({ researchPlan });\n  }\n\n  handleBodyDelete(id, attachments) {\n    const { researchPlan } = this.state;\n    const index = researchPlan.body.findIndex((field) => field.id === id);\n    researchPlan.body.splice(index, 1);\n    researchPlan.changed = true;\n    this.setState({ researchPlan });\n  }\n\n  handleUpdateResearchPlan() {\n    const { researchPlan } = this.state;\n    const { updateResearchPlan } = this.props;\n    updateResearchPlan(researchPlan);\n  }\n\n  handleExport(exportFormat) {\n    const { researchPlan } = this.state;\n    ResearchPlansFetcher.export(researchPlan, exportFormat);\n  }\n\n  handleExportField(field) {\n    const { researchPlan } = this.props;\n    ResearchPlansFetcher.exportTable(researchPlan, field);\n  }\n\n  handleCopyToMetadata(id, fieldName) {\n    const { researchPlan } = this.state;\n    const researchPlanMetadata = researchPlan.research_plan_metadata;\n    const args = { research_plan_id: researchPlanMetadata.research_plan_id };\n    const index = researchPlan.body.findIndex((field) => field.id === id);\n    const value = researchPlan.body[index]?.value?.ops[0]?.insert?.trim() || '';\n    if (fieldName === 'name') {\n      researchPlanMetadata.title = researchPlan.name;\n      args.title = researchPlan.name.trim();\n    } else if (fieldName === 'subject') {\n      researchPlanMetadata.subject = value;\n      args.subject = value;\n    } else {\n      const type = researchPlan.body[index]?.title?.trim() || '';\n      const newItem = this.newItemByType(fieldName, value, type);\n\n      const currentCollection = researchPlanMetadata[fieldName]\n        ? researchPlanMetadata[fieldName] : [];\n      const newCollection = currentCollection.concat(newItem);\n      researchPlanMetadata[fieldName] = newCollection;\n      args[`${fieldName}`] = researchPlanMetadata[fieldName];\n    }\n\n    ResearchPlansFetcher.postResearchPlanMetadata(args).then((result) => {\n      if (result.error) {\n        alert(result.error);\n      }\n    });\n  }\n\n  openResearchPlan() {\n    const { currentCollection, isSync } = UIStore.getState();\n    const researchPlanID = this.state.researchPlan.id;\n    const uri = `/${isSync ? 's' : ''}collection/${currentCollection.id}/research_plan/${researchPlanID}`;\n    Aviator.navigate(uri, { silent: true });\n    researchPlanShowOrNew({ params: { research_planID: researchPlanID } });\n  }\n\n  numberOfAnalyses(researchPlan) {\n    if (!researchPlan.container) { return; }\n    const analyses_container = researchPlan.container.children\n      .find((subcontainer) => subcontainer.container_type == 'analyses');\n    if (!analyses_container) { return; }\n    if (analyses_container.children.length == 0) { return; }\n    return analyses_container.children.length;\n  }\n\n  renderResearchPlanMain(researchPlan, update) { /* eslint-disable react/jsx-no-bind */\n    const { name, body, changed } = researchPlan;\n    const edit = researchPlan.mode === 'edit';\n    return (\n      <ListGroup fill=\"true\">\n        <ListGroupItem>\n          {this.renderExportButton(changed)}\n          <ResearchPlanDetailsName\n            value={name}\n            disabled={researchPlan.isMethodDisabled('name')}\n            onChange={this.handleNameChange}\n            edit={edit}\n          />\n          <ResearchPlanDetailsBody\n            body={body}\n            disabled={researchPlan.isMethodDisabled('body')}\n            onChange={this.handleBodyChange}\n            onDrop={this.handleBodyDrop.bind(this)}\n            onAdd={this.handleBodyAdd}\n            onDelete={this.handleBodyDelete.bind(this)}\n            onExport={this.handleExportField.bind(this)}\n            onCopyToMetadata={this.handleCopyToMetadata.bind(this)}\n            update={update}\n            edit={edit}\n            researchPlan={researchPlan}\n          />\n        </ListGroupItem>\n      </ListGroup>\n    );\n  } /* eslint-enable */\n\n  // render functions\n  renderExportButton(disabled) {\n    return (\n      <Dropdown\n        id=\"research-plan-export-dropdown\"\n        className=\"research-plan-export-dropdown dropdown-right pull-right\"\n        disabled={disabled}\n      >\n        <Dropdown.Toggle>\n          Export\n        </Dropdown.Toggle>\n        <Dropdown.Menu>\n          <MenuItem onSelect={() => this.handleExport('docx')}>\n            as .docx\n          </MenuItem>\n          <MenuItem onSelect={() => this.handleExport('odt')}>\n            as .odt\n          </MenuItem>\n          <MenuItem onSelect={() => this.handleExport('html')}>\n            as HTML\n          </MenuItem>\n          <MenuItem onSelect={() => this.handleExport('markdown')}>\n            as Markdown\n          </MenuItem>\n          <MenuItem onSelect={() => this.handleExport('latex')}>\n            as LaTeX\n          </MenuItem>\n        </Dropdown.Menu>\n      </Dropdown>\n    );\n  }\n\n  renderPanelHeading(researchPlan) {\n    const { deleteResearchPlan, saveResearchPlan } = this.props;\n    const titleTooltip = formatTimeStampsOfElement(researchPlan || {});\n    const expandIconClass = this.state.expanded ? 'fa fa-compress' : 'fa fa-expand';\n\n    const popover = (\n      <Tooltip placement=\"left\" className=\"in\" id=\"tooltip-bottom\">\n        Remove&nbsp;\n        {researchPlan.name}\n        &nbsp;from Screen?\n        <br />\n        <ButtonGroup>\n          <Button\n            bsStyle=\"danger\"\n            bsSize=\"xsmall\"\n            onClick={() => deleteResearchPlan(researchPlan.id)}\n          >\n            Yes\n          </Button>\n          <Button\n            bsStyle=\"warning\"\n            bsSize=\"xsmall\"\n            onClick={() => this.setState({ confirmRemove: false })}\n          >\n            No\n          </Button>\n        </ButtonGroup>\n      </Tooltip>\n    );\n\n    return (\n      <Panel.Heading>\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"rpDates\">{titleTooltip}</Tooltip>}>\n          <span>\n            <i className=\"fa fa-file-text-o\" />\n            &nbsp;&nbsp;\n            <span>{researchPlan.name}</span>\n            &nbsp;&nbsp;\n          </span>\n        </OverlayTrigger>\n\n        <InfoLabel iconClass=\"fa-bar-chart\" text={this.numberOfAnalyses(researchPlan)} tooltip=\"Analyses\" />\n        <InfoLabel iconClass=\"fa-file-text-o\" text={researchPlan.attachmentCount} tooltip=\"Attachments\" />\n        <ElementCollectionLabels element={researchPlan} placement=\"right\" />\n\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"remove_esearch_plan\">Remove Research Plan from Screen</Tooltip>}\n        >\n          <Button\n            ref={(button) => { this.target = button; }}\n            bsStyle=\"danger\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.setState({ confirmRemove: !this.state.confirmRemove })}\n          >\n            <i className=\"fa fa-trash-o\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        <Overlay\n          rootClose\n          target={this.target}\n          show={this.state.confirmRemove}\n          placement=\"bottom\"\n          onHide={() => this.setState({ confirmRemove: false })}\n        >\n          {popover}\n        </Overlay>\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"save_research_plan\">Save Research Plan</Tooltip>}>\n          <Button\n            bsStyle=\"warning\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => saveResearchPlan(researchPlan)}\n            style={{ display: (researchPlan.changed || false) ? '' : 'none' }}\n          >\n            <i className=\"fa fa-floppy-o\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"open_research_plan\">Open Research Plan in Tab</Tooltip>}\n        >\n          <Button bsStyle=\"info\" bsSize=\"xsmall\" className=\"button-right\" onClick={() => this.openResearchPlan()}>\n            <i className=\"fa fa-window-maximize\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"expand_research_plan\">Show/hide Research Plan details</Tooltip>}\n        >\n          <Button\n            bsStyle=\"info\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.setState({ expanded: !this.state.expanded })}\n          >\n            <i className={expandIconClass} aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n      </Panel.Heading>\n    );\n  }\n\n  render() {\n    const { researchPlan, update } = this.state;\n    let btnMode = (\n      <Button\n        bsSize=\"xs\"\n        bsStyle=\"success\"\n        onClick={() => this.handleSwitchMode('edit')}\n      >\n        click to edit\n      </Button>\n    );\n    if (researchPlan.mode !== 'view') {\n      btnMode = <Button bsSize=\"xs\" bsStyle=\"info\" onClick={() => this.handleSwitchMode('view')}>click to view</Button>;\n    }\n\n    return (\n      <Panel\n        expanded={this.state.expanded}\n        onToggle={() => {}}\n        bsStyle={researchPlan.isPendingToSave ? 'info' : 'primary'}\n        className=\"eln-panel-detail research-plan-details\"\n      >\n        {this.renderPanelHeading(researchPlan)}\n        <Panel.Collapse>\n          <Panel.Body>\n            <div style={{ margin: '5px 0px 5px 5px' }}>\n              {btnMode}\n            </div>\n            {this.renderResearchPlanMain(researchPlan, update)}\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    );\n  }\n}\n\nEmbeddedResearchPlanDetails.propTypes = {\n  researchPlan: PropTypes.instanceOf(ResearchPlan).isRequired,\n  updateResearchPlan: PropTypes.func.isRequired,\n  saveResearchPlan: PropTypes.func.isRequired,\n  deleteResearchPlan: PropTypes.func.isRequired,\n};\n","import Aviator from 'aviator';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport EmbeddedResearchPlanDetails from 'src/apps/mydb/elements/details/screens/researchPlansTab/EmbeddedResearchPlanDetails';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport ResearchPlan from 'src/models/ResearchPlan';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport { Button } from 'react-bootstrap';\nimport { DropTarget } from 'react-dnd';\nimport { researchPlanShowOrNew } from 'src/utilities/routesUtils';\n\nconst target = {\n  drop(props, monitor) {\n    const { dropResearchPlan } = props;\n    const item = monitor.getItem();\n    const itemType = monitor.getItemType();\n    if (itemType === 'research_plan') {\n      dropResearchPlan(item.element);\n    }\n  },\n  canDrop(props, monitor) {\n    const itemType = monitor.getItemType();\n    return (itemType === 'research_plan');\n  }\n};\n\nconst collect = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop()\n});\n\nclass ScreenResearchPlans extends Component {\n  handleResearchPlanClick(researchPlan) { // eslint-disable-line class-methods-use-this\n    const { currentCollection, isSync } = UIStore.getState();\n    const researchPlanID = researchPlan.id;\n    const uri = `/${isSync ? 's' : ''}collection/${currentCollection.id}/research_plan/${researchPlanID}`;\n    Aviator.navigate(uri, { silent: true });\n    researchPlanShowOrNew({ params: { research_planID: researchPlanID } });\n  }\n\n  renderDropZone() {\n    const { isOver, connectDropTarget } = this.props;\n    const style = {\n      padding: 10, borderStyle: 'dashed', textAlign: 'center', color: 'gray', marginTop: '12px', marginBottom: '8px'\n    };\n    if (isOver) { style.borderColor = '#337ab7'; }\n\n    return connectDropTarget( // eslint-disable-line function-paren-newline\n      <div style={style}>\n        Drop Research Plan here to add.\n      </div>);\n  }\n\n  handleAddResearchPlan() {\n    const { currentCollection } = UIStore.getState();\n    const collection_id = currentCollection.id;\n    const screen_id = this.getScreenIdFromPath();\n    if (screen_id == -1) { return }\n    LoadingActions.start();\n\n    ElementActions.addResearchPlanToScreen(\n      screen_id,\n      collection_id,\n      () => LoadingActions.stop()\n    );\n  }\n\n  getScreenIdFromPath() {\n    const currentURI = Aviator.getCurrentURI();\n\n    const screenMatch = currentURI.match(/\\/screen\\/(\\d+)/);\n    if (screenMatch) {\n      return screenMatch[1];\n    } else {\n      return -1;\n    }\n  }\n\n  render() {\n    const {\n      researchPlans, deleteResearchPlan, updateResearchPlan, saveResearchPlan\n    } = this.props;\n\n    return (\n      <div>\n        {this.renderDropZone()}\n\n        {researchPlans.map(researchPlan => (\n          <EmbeddedResearchPlanDetails\n            key={`${researchPlan.name}-${researchPlan.id}`}\n            researchPlan={new ResearchPlan(researchPlan)}\n            expanded={this.props.expandedResearchPlanId == researchPlan.id}\n            deleteResearchPlan={deleteResearchPlan}\n            updateResearchPlan={updateResearchPlan}\n            saveResearchPlan={saveResearchPlan}\n          />\n        ))}\n        <Button\n          bsSize=\"xsmall\"\n          bsStyle=\"success\"\n          className=\"button-right\"\n          onClick={this.handleAddResearchPlan.bind(this)}\n          type=\"button\"\n        >\n          Add new research plan\n        </Button>\n      </div>);\n  }\n}\n\nexport default DropTarget(DragDropItemTypes.RESEARCH_PLAN, target, collect)(ScreenResearchPlans);\n\nScreenResearchPlans.propTypes = { /* eslint-disable react/no-unused-prop-types */\n  researchPlans: PropTypes.arrayOf(PropTypes.object).isRequired,\n  expandedResearchPlanId: PropTypes.number,\n  deleteResearchPlan: PropTypes.func.isRequired,\n  updateResearchPlan: PropTypes.func.isRequired,\n  saveResearchPlan: PropTypes.func.isRequired,\n  dropResearchPlan: PropTypes.func.isRequired,\n  isOver: PropTypes.bool.isRequired,\n  canDrop: PropTypes.bool.isRequired,\n  connectDropTarget: PropTypes.func.isRequired\n}; /* eslint-enable */\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport { DropTarget } from 'react-dnd';\nimport Aviator from 'aviator';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport { wellplateShowOrNew } from 'src/utilities/routesUtils';\nimport QuillViewer from 'src/components/QuillViewer';\n\nconst target = {\n  drop(props, monitor) {\n    const { dropWellplate } = props;\n    const item = monitor.getItem();\n    const itemType = monitor.getItemType();\n    if (itemType === 'wellplate') {\n      dropWellplate(item.element);\n    }\n  },\n  canDrop(props, monitor) {\n    const itemType = monitor.getItemType();\n    return (itemType === 'wellplate');\n  }\n};\n\nconst collect = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop()\n});\n\nclass ScreenWellplates extends Component {\n  // eslint-disable-next-line class-methods-use-this\n  handleWellplateClick(wellplate) {\n    const { currentCollection, isSync } = UIStore.getState();\n    const wellplateID = wellplate.id;\n    const uri = `/${isSync ? 's' : ''}collection/${currentCollection.id}/wellplate/${wellplateID}`;\n    Aviator.navigate(uri, { silent: true });\n    wellplateShowOrNew({ params: { wellplateID } });\n  }\n\n  render() {\n    // eslint-disable-next-line object-curly-newline\n    const { wellplates, isOver, canDrop, connectDropTarget, deleteWellplate } = this.props;\n    const style = { padding: 10 };\n    if (isOver && canDrop) {\n      style.borderStyle = 'dashed';\n      style.borderColor = '#337ab7';\n    } else if (canDrop) {\n      style.borderStyle = 'dashed';\n    }\n    return connectDropTarget(\n      <div style={style}>\n        <table width=\"100%\">\n          <thead>\n            <tr>\n              <th width=\"45%\">Name</th>\n              <th width=\"50%\">Description</th>\n              <th width=\"5%\" />\n            </tr>\n          </thead>\n          <tbody>\n            {wellplates.map(wellplate => (\n              <tr key={wellplate.id} style={{ height: '80px', verticalAlign: 'middle' }}>\n                <td>\n                  <a\n                    onClick={() => this.handleWellplateClick(wellplate)}\n                    style={{ cursor: 'pointer' }}\n                  >\n                    {wellplate.name}\n                  </a>\n                </td>\n                <td>\n                  <QuillViewer\n                    value={wellplate.description}\n                    theme=\"bubble\"\n                    height=\"44px\"\n                  />\n                </td>\n                <td style={{ verticalAlign: 'middle' }}>\n                  <Button\n                    bsStyle=\"danger\"\n                    style={{ marginLeft: '10px' }}\n                    onClick={() => deleteWellplate(wellplate)}\n                  >\n                    <i className=\"fa fa-trash-o\" />\n                  </Button>\n                </td>\n              </tr>\n            ))}\n          </tbody>\n        </table>\n      </div>\n    );\n  }\n}\n\nexport default DropTarget(DragDropItemTypes.WELLPLATE, target, collect)(ScreenWellplates);\n\nScreenWellplates.propTypes = {\n  wellplates: PropTypes.arrayOf(PropTypes.object).isRequired,\n  deleteWellplate: PropTypes.func.isRequired,\n  dropWellplate: PropTypes.func.isRequired,\n  isOver: PropTypes.bool.isRequired,\n  canDrop: PropTypes.bool.isRequired,\n  connectDropTarget: PropTypes.func.isRequired\n};\n","import React, { useState, useCallback, useEffect, useRef } from 'react'\nimport ReactFlow, {\n  ReactFlowProvider, Controls, Background, applyNodeChanges, applyEdgeChanges, addEdge, useReactFlow,\n  Panel as ReactFlowPanel, useUpdateNodeInternals\n} from 'reactflow'\nimport { Modal, Button, ButtonGroup, InputGroup, Panel } from 'react-bootstrap'\n\nconst buildUnassignedNodes = (nodes, researchplans) => {\n  return researchplans.reduce((newNodes, plan) => {\n    const nodeIds = nodes.map(({ id }) => parseInt(id))\n    if (!nodeIds.includes(plan.id)) {\n      const { id, name } = plan\n      newNodes.push({\n        id: String(id),\n        data: { label: name },\n        position: { x: 10, y: 10 },\n      })\n    }\n    return newNodes\n  }, [])\n}\n\nconst ResearchplanFlowEditor = (props) => {\n  const { visible, initialEditorData, researchplans, toggleModal, onSave } = props\n  const labelInput = useRef(null);\n  const reactFlowInstance = useReactFlow()\n  const updateNodeInternals = useUpdateNodeInternals()\n\n  const initialNodes = initialEditorData.nodes || []\n  const initialEdges = initialEditorData.edges || []\n  const initialUnassignedNodes = buildUnassignedNodes(initialNodes, researchplans)\n\n  const [nodes, setNodes] = useState(initialNodes);\n  const [edges, setEdges] = useState(initialEdges);\n  const [unassignedNodes, setUnassignedNodes] = useState(initialUnassignedNodes);\n  const [currentEdge, setCurrentEdge] = useState(null);\n\n  const onNodesChange = useCallback(\n    (changes) => setNodes((nds) => applyNodeChanges(changes, nds)),\n    []\n  )\n\n  const onEdgesChange = useCallback(\n    (changes) => setEdges((eds) => applyEdgeChanges(changes, eds)),\n    []\n  )\n\n  const onConnect = useCallback(\n    (params) => {\n      const newEdge = { ...params, label: 'followed by', animated: true }\n      setEdges((eds) => addEdge(newEdge, eds))\n    },\n    []\n  )\n\n  const changeLabelOfCurrentEdge = (newLabel) => {\n    const newEdge = { ...currentEdge, label: newLabel, animated: true }\n    const changes = [\n      { id: currentEdge.id, type: 'remove' },\n      { item: newEdge, type: 'add' },\n    ]\n    setEdges((eds) => applyEdgeChanges(changes, eds));\n    setCurrentEdge(newEdge);\n  };\n\n  const onEdgeClick = useCallback((_event, edge) => setCurrentEdge(edge));\n  const onPaneClick = useCallback((_event) => setCurrentEdge(null));\n\n  useEffect(() => {\n    setUnassignedNodes(buildUnassignedNodes(nodes, researchplans))\n  }, [nodes, researchplans])\n\n  const onHide = () => {\n    setNodes(initialNodes)\n    setEdges(initialEdges)\n    setUnassignedNodes(initialUnassignedNodes)\n    toggleModal(false)\n  }\n\n  const onEnter = () => {\n    setNodes(initialNodes)\n  }\n\n  const onClickSave = () => {\n    const data = reactFlowInstance.toObject()\n    const cleanedNodes = data.nodes.map((node) => {\n      const { id, position } = node\n      return {\n        id,\n        position\n      }\n    })\n\n    onSave({ nodes: cleanedNodes, edges: data.edges })\n    toggleModal(false)\n  }\n\n  const handleClickToAddNode = (index) => {\n    const newNode = unassignedNodes[index]\n    const newNodes = [...nodes, newNode]\n    setNodes(newNodes)\n    updateNodeInternals(newNode.id)\n  }\n\n  const edgeLabelEditor = () => {\n    if (!currentEdge) { return (<div></div>); }\n\n    return (\n      <Panel bsStyle=\"primary\">\n        <Panel.Heading>\n          <Panel.Title>Connection name</Panel.Title>\n        </Panel.Heading>\n        <Panel.Body>\n          <InputGroup>\n            <InputGroup.Button>\n              <Button\n                className=\"btn btn-danger\"\n                type=\"button\"\n                onClick={() => labelInput.current.value = currentEdge.label}\n              >\n                Reset\n              </Button>\n            </InputGroup.Button>\n            <input name=\"edgeLabel\" className=\"form-control\" ref={labelInput} defaultValue={currentEdge.label} />\n            <InputGroup.Button>\n              <Button\n                className=\"btn btn-success\"\n                type=\"button\"\n                onClick={() => changeLabelOfCurrentEdge(labelInput.current.value)}\n              >\n                Save\n              </Button>\n            </InputGroup.Button>\n          </InputGroup>\n        </Panel.Body>\n      </Panel>\n    );\n  };\n  const unassignedNodeButtons = () => {\n    if (unassignedNodes.length == 0) { return (<div></div>) };\n\n    return (\n      <Panel bsStyle=\"primary\">\n        <Panel.Heading>\n          <Panel.Title>Unused Research Plans</Panel.Title>\n        </Panel.Heading>\n        <Panel.Body>\n          <ButtonGroup vertical>\n            {\n              unassignedNodes.map(\n                (node, index) => <Button key={index} onClick={() => handleClickToAddNode(index)}>{node.data.label}</Button>)\n            }\n          </ButtonGroup>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n\n  return (\n    <div>\n      <Modal\n        show={visible}\n        animation\n        dialogClassName=\"researchplan-flow-editor-modal\"\n        onHide={onHide}\n        onEnter={onEnter}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>ResearchPlan Flow Editor</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <div style={{ width: '100%', height: '500px', display: 'block' }}>\n            <ReactFlow\n              nodes={nodes}\n              onNodesChange={onNodesChange}\n              edges={edges}\n              onEdgesChange={onEdgesChange}\n              onConnect={onConnect}\n              onEdgeClick={onEdgeClick}\n              onPaneClick={onPaneClick}\n            >\n              <Background />\n              <Controls showInteractive={false} />\n              <ReactFlowPanel position=\"top-right\" style={{ width: '20%' }}>\n                {edgeLabelEditor()}\n                {unassignedNodeButtons()}\n              </ReactFlowPanel>\n            </ReactFlow>\n          </div>\n        </Modal.Body>\n        <Modal.Footer>\n          <Button className=\"pull-left\" bsStyle=\"default\" onClick={onHide}>\n            Cancel\n          </Button>\n          <Button className=\"pull-right\" bsStyle=\"success\" onClick={onClickSave}>\n            Save\n          </Button>\n        </Modal.Footer>\n      </Modal>\n    </div>\n  )\n}\n\nconst ResearchplanFlowEditorWithProvider = (props) => {\n  return (\n    <ReactFlowProvider>\n      <ResearchplanFlowEditor {...props} />\n    </ReactFlowProvider>\n  );\n}\n\nexport default ResearchplanFlowEditorWithProvider\n","import React from 'react'\nimport { useState } from 'react'\nimport ReactFlow, { Controls, ControlButton, Background } from 'reactflow'\n\nimport ResearchplanFlowEditorWithProvider from 'src/apps/mydb/elements/details/screens/ResearchplanFlowEditor';\n\nconst ResearchplanFlowDisplay = (props) => {\n  const researchplans = props.researchplans || []\n  const defaultNodesWithoutLabel = props.initialData.nodes || []\n  const defaultEdges = props.initialData.edges || []\n  const [showEditor, toggleModal] = useState(false);\n  const [previewFlowInstance, setPreviewFlowInstance] = useState(null);\n\n  const buildNodes = (nodes) => {\n    return nodes.map((node) => {\n      const researchplan = researchplans.find(plan => plan.id === parseInt(node.id))\n\n      return {\n        ...node,\n        data: { label: researchplan ? researchplan.name : 'Deleted researchplan' },\n        style: {\n          border: researchplan ? '1px solid #000' : '1px solid #f00',\n          color: researchplan ? '#000' : '#f00',\n        },\n      }\n    })\n  }\n\n  const defaultNodes = buildNodes(defaultNodesWithoutLabel)\n\n  const initialEditorData = {\n    nodes: defaultNodes,\n    edges: defaultEdges,\n  }\n\n  const onSave = (data) => {\n    previewFlowInstance.setNodes(buildNodes(data.nodes));\n    previewFlowInstance.setEdges(data.edges);\n    previewFlowInstance.fitView();\n\n    props.flowConfiguration.editor.onSave(data);\n  }\n\n  const optionsForPreviewDisplay = {\n    elementsSelectable: true,\n    nodesDraggable: false,\n    nodesConnectable: false,\n    panOnDrag: true,\n    zoomOnScroll: true,\n    zoomOnDoubleClick: false,\n    selectNodesOnDrag: false\n  }\n\n  return (\n    <div style={{ marginBottom: \"10px\", width: \"100%\", height: \"250px\" }}>\n      <ReactFlow\n        fitView\n        nodes={defaultNodes}\n        edges={defaultEdges}\n        onInit={(instance) => setPreviewFlowInstance(instance)}\n        onNodeDoubleClick={props.flowConfiguration.preview.onNodeDoubleClick}\n        {...optionsForPreviewDisplay}\n      >\n        <Background />\n        <Controls showInteractive={false}>\n          <ControlButton onClick={() => toggleModal(true)}>\n            <div>Edit</div>\n          </ControlButton>\n        </Controls>\n      </ReactFlow>\n      <ResearchplanFlowEditorWithProvider\n        visible={showEditor}\n        toggleModal={toggleModal}\n        initialEditorData={initialEditorData}\n        researchplans={researchplans}\n        onSave={onSave}\n      />\n    </div>\n  )\n}\n\nexport default ResearchplanFlowDisplay\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  FormGroup, ControlLabel, FormControl, Panel, ListGroup, ListGroupItem,\n  ButtonToolbar, Button, Tooltip, OverlayTrigger, Tabs, Tab\n} from 'react-bootstrap';\nimport { unionBy, findIndex } from 'lodash';\nimport Immutable from 'immutable';\n\nimport ConfirmClose from 'src/components/common/ConfirmClose';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport ElementDetailSortTab from 'src/apps/mydb/elements/details/ElementDetailSortTab';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport PrintCodeButton from 'src/components/common/PrintCodeButton';\nimport PrivateNoteElement from 'src/apps/mydb/elements/details/PrivateNoteElement';\nimport QuillEditor from 'src/components/QuillEditor';\nimport ResearchPlansFetcher from 'src/fetchers/ResearchPlansFetcher';\nimport Screen from 'src/models/Screen';\nimport ScreenDetailsContainers from 'src/apps/mydb/elements/details/screens/analysesTab/ScreenDetailsContainers';\nimport ScreenResearchPlans from 'src/apps/mydb/elements/details/screens/researchPlansTab/ScreenResearchPlans';\nimport ScreenWellplates from 'src/apps/mydb/elements/details/screens/ScreenWellplates';\nimport ResearchplanFlowDisplay from 'src/apps/mydb/elements/details/screens/ResearchplanFlowDisplay';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport { addSegmentTabs } from 'src/components/generic/SegmentDetails';\nimport OpenCalendarButton from 'src/components/calendar/OpenCalendarButton';\nimport HeaderCommentSection from 'src/components/comments/HeaderCommentSection';\nimport CommentSection from 'src/components/comments/CommentSection';\nimport CommentActions from 'src/stores/alt/actions/CommentActions';\nimport CommentModal from 'src/components/common/CommentModal';\nimport { commentActivation } from 'src/utilities/CommentHelper';\nimport { formatTimeStampsOfElement } from 'src/utilities/timezoneHelper';\n\nexport default class ScreenDetails extends Component {\n  constructor(props) {\n    super(props);\n    const { screen } = props;\n    this.state = {\n      screen,\n      activeTab: UIStore.getState().screen.activeTab,\n      visible: Immutable.List(),\n      expandedResearchPlanId: null,\n      currentUser: (UserStore.getState() && UserStore.getState().currentUser) || {},\n    };\n    this.onUIStoreChange = this.onUIStoreChange.bind(this);\n    this.onTabPositionChanged = this.onTabPositionChanged.bind(this);\n    this.handleSegmentsChange = this.handleSegmentsChange.bind(this);\n    this.updateComponentGraphData = this.updateComponentGraphData.bind(this);\n  }\n\n  componentDidMount() {\n    const { screen } = this.props;\n    const { currentUser } = this.state;\n\n    UIStore.listen(this.onUIStoreChange);\n    if (MatrixCheck(currentUser.matrix, commentActivation) && !screen.isNew) {\n      CommentActions.fetchComments(screen);\n    }\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const { screen } = nextProps;\n    this.setState({ screen });\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onUIStoreChange);\n  }\n\n  onUIStoreChange(state) {\n    if (state.screen.activeTab !== this.state.activeTab) {\n      this.setState({\n        activeTab: state.screen.activeTab\n      });\n    }\n  }\n\n  onUIStoreChange(state) {\n    if (state.screen.activeTab != this.state.activeTab) {\n      this.setState({\n        activeTab: state.screen.activeTab\n      });\n    }\n  }\n\n  onTabPositionChanged(visible) {\n    this.setState({ visible });\n  }\n\n  handleSubmit() {\n    const { screen } = this.state;\n    LoadingActions.start();\n\n    if (screen.isNew) {\n      ElementActions.createScreen(screen);\n    } else {\n      ElementActions.updateScreen(screen);\n    }\n    if (screen.is_new) {\n      const force = true;\n      DetailActions.close(screen, force);\n    }\n  }\n\n  handleInputChange(type, event) {\n    const types = ['name', 'requirements', 'collaborator', 'conditions', 'result', 'description'];\n    if (types.indexOf(type) !== -1) {\n      const { screen } = this.state;\n      const { value } = event.target;\n\n      screen[type] = value;\n      this.setState({ screen });\n    }\n  }\n\n  handleSegmentsChange(se) {\n    const { screen } = this.state;\n    const { segments } = screen;\n    const idx = findIndex(segments, o => o.segment_klass_id === se.segment_klass_id);\n    if (idx >= 0) { segments.splice(idx, 1, se); } else { segments.push(se); }\n    screen.segments = segments;\n    screen.changed = true;\n    this.setState({ screen });\n  }\n\n  handleScreenChanged(screen) {\n    this.setState({ screen });\n  }\n\n  dropResearchPlan(researchPlan) {\n    const { screen } = this.state;\n    screen.research_plans = unionBy(screen.research_plans, [researchPlan], 'id');\n    this.forceUpdate();\n  }\n\n  deleteResearchPlan(researchPlanID) {\n    const { screen } = this.state;\n    const researchPlanIndex = screen.research_plans.findIndex(rp => rp.id === researchPlanID);\n    screen.research_plans.splice(researchPlanIndex, 1);\n\n    this.setState({ screen });\n  }\n\n  updateResearchPlan(researchPlan) {\n    const { screen } = this.state;\n    const researchPlanIndex = screen.research_plans.findIndex(rp => rp.id === researchPlan.id);\n    screen.research_plans[researchPlanIndex] = researchPlan;\n  }\n\n  saveResearchPlan(researchPlan) {\n    const { screen } = this.state;\n    LoadingActions.start();\n\n    ResearchPlansFetcher.update(researchPlan)\n      .then((result) => {\n        const researchPlanIndex = screen.research_plans.findIndex(rp => rp.id === researchPlan.id);\n        screen.research_plans[researchPlanIndex] = result;\n        ElementActions.updateEmbeddedResearchPlan(result);\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  dropWellplate(wellplate) {\n    const { screen } = this.state;\n    screen.wellplates = unionBy(screen.wellplates, [wellplate], 'id');\n    this.forceUpdate();\n  }\n\n  deleteWellplate(wellplate) {\n    const { screen } = this.state;\n    const wellplateIndex = screen.wellplates.indexOf(wellplate);\n    screen.wellplates.splice(wellplateIndex, 1);\n\n    this.setState({ screen });\n  }\n\n  screenHeader(screen) {\n    const saveBtnDisplay = screen.isEdited ? '' : 'none';\n    const datetp = formatTimeStampsOfElement(screen || {});\n    const { showCommentSection, comments } = this.props;\n\n    return (\n      <div>\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"screenDatesx\">{datetp}</Tooltip>}>\n          <span>\n            <i className=\"icon-screen\" />\n            &nbsp;<span>{screen.name}</span> &nbsp;\n          </span>\n        </OverlayTrigger>\n        <ElementCollectionLabels element={screen} placement=\"right\" />\n        <HeaderCommentSection element={screen} />\n        <ConfirmClose el={screen} />\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"saveScreen\">Save Screen</Tooltip>}\n        >\n          <Button\n            bsStyle=\"warning\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.handleSubmit()}\n            style={{ display: saveBtnDisplay }}\n          >\n            <i className=\"fa fa-floppy-o \" />\n          </Button>\n        </OverlayTrigger>\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"fullSample\">FullScreen</Tooltip>}\n        >\n          <Button\n            bsStyle=\"info\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.props.toggleFullScreen()}\n          >\n            <i className=\"fa fa-expand\" />\n          </Button>\n        </OverlayTrigger>\n        {screen.isNew\n          ? null\n          : <OpenCalendarButton isPanelHeader eventableId={screen.id} eventableType=\"Screen\" />}\n        <PrintCodeButton element={screen} />\n      </div>\n    );\n  }\n\n  propertiesFields(screen) {\n    const {\n      wellplates, name, collaborator, result, conditions, requirements, description\n    } = screen;\n\n    return (\n      <ListGroup fill=\"true\">\n        <ListGroupItem>\n          <table width=\"100%\">\n            <tbody>\n              <tr>\n                <td width=\"50%\" className=\"padding-right\">\n                  <FormGroup>\n                    <ControlLabel>Name</ControlLabel>\n                    <FormControl\n                      type=\"text\"\n                      value={name || ''}\n                      onChange={event => this.handleInputChange('name', event)}\n                      disabled={screen.isMethodDisabled('name')}\n                    />\n                  </FormGroup>\n                </td>\n                <td width=\"50%\">\n                  <FormGroup>\n                    <ControlLabel>Collaborator</ControlLabel>\n                    <FormControl\n                      type=\"text\"\n                      value={collaborator || ''}\n                      onChange={event => this.handleInputChange('collaborator', event)}\n                      disabled={screen.isMethodDisabled('collaborator')}\n                    />\n                  </FormGroup>\n                </td>\n              </tr>\n              <tr>\n                <td className=\"padding-right\">\n                  <FormGroup>\n                    <ControlLabel>Requirements</ControlLabel>\n                    <FormControl\n                      type=\"text\"\n                      value={requirements || ''}\n                      onChange={event => this.handleInputChange('requirements', event)}\n                      disabled={screen.isMethodDisabled('requirements')}\n                    />\n                  </FormGroup>\n                </td>\n                <td >\n                  <FormGroup>\n                    <ControlLabel>Conditions</ControlLabel>\n                    <FormControl\n                      type=\"text\"\n                      value={conditions || ''}\n                      onChange={event => this.handleInputChange('conditions', event)}\n                      disabled={screen.isMethodDisabled('conditions')}\n                    />\n                  </FormGroup>\n                </td>\n              </tr>\n              <tr>\n                <td colSpan=\"2\">\n                  <FormGroup>\n                    <ControlLabel>Result</ControlLabel>\n                    <FormControl\n                      type=\"text\"\n                      value={result || ''}\n                      onChange={event => this.handleInputChange('result', event)}\n                      disabled={screen.isMethodDisabled('result')}\n                    />\n                  </FormGroup>\n                </td>\n              </tr>\n              <tr>\n                <td colSpan=\"2\">\n                  <FormGroup>\n                    <ControlLabel>Description</ControlLabel>\n                    <QuillEditor\n                      value={description}\n                      onChange={event => this.handleInputChange('description', { target: { value: event } })}\n                      disabled={screen.isMethodDisabled('description')}\n                    />\n                  </FormGroup>\n                  <PrivateNoteElement element={screen} disabled={screen.can_update} />\n                </td>\n              </tr>\n            </tbody>\n          </table>\n        </ListGroupItem>\n        <ListGroupItem>\n          <h4 className=\"list-group-item-heading\">Wellplates</h4>\n          <ScreenWellplates\n            wellplates={wellplates}\n            dropWellplate={wellplate => this.dropWellplate(wellplate)}\n            deleteWellplate={wellplate => this.deleteWellplate(wellplate)}\n          />\n        </ListGroupItem>\n      </ListGroup>\n    );\n  }\n\n  handleSelect(eventKey) {\n    UIActions.selectTab({ tabKey: eventKey, type: 'screen' });\n    this.setState({\n      activeTab: eventKey\n    });\n  }\n\n  updateComponentGraphData(data) {\n    const { screen } = this.state\n    screen.componentGraphData = data;\n    this.setState({ screen });\n  }\n\n  switchToResearchPlanTab() {\n    if (this.state.activeTab == 'researchPlans') { return; }\n    // call the pre-existing method to act as if a user had clicked on the research plans tab\n    this.handleSelect('researchPlans');\n  }\n\n  expandResearchPlan(researchPlanId) {\n    this.setState({ expandedResearchPlanId: researchPlanId });\n  }\n\n  scrollToResearchPlan(researchPlanId) {\n\n  }\n\n\n  render() {\n    const { screen, visible } = this.state;\n    const submitLabel = screen.isNew ? 'Create' : 'Save';\n\n    const tabContentsMap = {\n      properties: (\n        <Tab eventKey=\"properties\" title=\"Properties\" key={`properties_${screen.id}`}>\n          {\n            !screen.isNew && <CommentSection section=\"screen_properties\" element={screen} />\n          }\n          {this.propertiesFields(screen)}\n        </Tab>\n      ),\n      analyses: (\n        <Tab eventKey=\"analyses\" title=\"Analyses\" key={`analyses_${screen.id}`}>\n          {\n            !screen.isNew && <CommentSection section=\"screen_analyses\" element={screen} />\n          }\n          <ScreenDetailsContainers\n            screen={screen}\n            parent={this}\n          />\n        </Tab>\n      ),\n      research_plans: (\n        <Tab eventKey=\"researchPlans\" title=\"Research Plans\" key={`research_plans_${screen.id}`}>\n          <ScreenResearchPlans\n            researchPlans={screen.research_plans}\n            expandedResearchPlanId={this.state.expandedResearchPlanId}\n            dropResearchPlan={researchPlan => this.dropResearchPlan(researchPlan)}\n            deleteResearchPlan={researchPlan => this.deleteResearchPlan(researchPlan)}\n            updateResearchPlan={researchPlan => this.updateResearchPlan(researchPlan)}\n            saveResearchPlan={researchPlan => this.saveResearchPlan(researchPlan)}\n          />\n        </Tab>\n      )\n    };\n\n    const tabTitlesMap = {\n      properties: 'Properties',\n      analyses: 'Analyses',\n      research_plans: 'Research Plans',\n    };\n\n    addSegmentTabs(screen, this.handleSegmentsChange, tabContentsMap);\n\n    const tabContents = [];\n    visible.forEach((value) => {\n      const tabContent = tabContentsMap[value];\n      if (tabContent) { tabContents.push(tabContent); }\n    });\n\n    const activeTab = (this.state.activeTab !== 0 && this.state.activeTab) || visible[0];\n\n    const flowConfiguration = {\n      preview: {\n        onNodeDoubleClick: (_mouseEvent, node) => {\n          const researchPlanId = parseInt(node.id)\n          this.switchToResearchPlanTab()\n          this.expandResearchPlan(researchPlanId)\n          this.scrollToResearchPlan(researchPlanId)\n        }\n      },\n      editor: {\n        onSave: this.updateComponentGraphData\n      }\n    };\n\n    return (\n      <Panel\n        bsStyle={screen.isPendingToSave ? 'info' : 'primary'}\n        className=\"eln-panel-detail\"\n      >\n        <Panel.Heading>{this.screenHeader(screen)}</Panel.Heading>\n        <Panel.Body>\n          <ResearchplanFlowDisplay\n            initialData={screen.componentGraphData}\n            researchplans={screen.research_plans}\n            flowConfiguration={flowConfiguration}\n          />\n          <ElementDetailSortTab\n            type=\"screen\"\n            availableTabs={Object.keys(tabContentsMap)}\n            tabTitles={tabTitlesMap}\n            onTabPositionChanged={this.onTabPositionChanged}\n          />\n          <Tabs activeKey={activeTab} onSelect={key => this.handleSelect(key)} id=\"screen-detail-tab\">\n            {tabContents}\n          </Tabs>\n          <ButtonToolbar>\n            <Button bsStyle=\"primary\" onClick={() => DetailActions.close(screen)}>Close</Button>\n            <Button bsStyle=\"warning\" onClick={() => this.handleSubmit()}>{submitLabel}</Button>\n          </ButtonToolbar>\n          <CommentModal element={screen} />\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nScreenDetails.propTypes = {\n  screen: PropTypes.instanceOf(Screen).isRequired,\n  toggleFullScreen: PropTypes.func.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport SVG from 'react-inlinesvg';\n\nexport default class Well extends Component {\n  render() {\n    const {sample, active} = this.props;\n\n    const className = (active) ? \"well-molecule molecule-selected\" : \"well-molecule\";\n    if (sample) {\n      return (\n        <div>\n          <SVG className={className} key={sample.id} src={sample.svgPath}/>\n        </div>\n      );\n    } else {\n      return <div></div>\n    }\n  }\n}\n\nWell.propTypes = {\n  sample: PropTypes.object\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport Well from 'src/apps/mydb/elements/details/wellplates/designerTab/Well';\n\nconst wellSource = {\n  beginDrag(props) {\n    return props;\n  }\n};\n\nconst wellTarget = {\n  canDrop(props, monitor) {\n    const item = monitor.getItem();\n    const itemType = monitor.getItemType();\n    let canDrop = true;\n    if (itemType == 'sample' && props.well.sample) {\n      canDrop = false;\n    } else if (itemType == 'well' && !item.well.sample && !props.well.sample) {\n      canDrop = false;\n    }\n    return canDrop;\n  },\n  drop(props, monitor) {\n    const item = monitor.getItem();\n    const itemType = monitor.getItemType();\n    if (itemType == 'sample') {\n      props.dropSample(item.element, props.well);\n    } else if (itemType == 'well') {\n      props.swapWells(item.well, props.well);\n    }\n  }\n};\n\nconst collectTarget = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop()\n});\n\nconst collectSource = (connect, monitor) => ({\n  connectDragSource: connect.dragSource(),\n  isDragging: monitor.isDragging()\n});\n\nclass WellContainer extends Component {\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const { active, hideOverlay } = this.props;\n    if (active && nextProps.isDragging) {\n      hideOverlay();\n    }\n  }\n\n  render() {\n    const { style, isDragging, connectDragSource, connectDropTarget, well, isOver, canDrop, active } = this.props;\n    const containerStyle = {\n      paddingTop: 9,\n      borderRadius: '50%',\n      float: 'left',\n      borderWidth: 4,\n      borderStyle: 'solid',\n      borderColor: 'lightgray',\n      textAlign: 'center',\n      verticalAlign: 'middle',\n      lineHeight: 2,\n      cursor: 'move',\n      backgroundColor: well.color_code || 'white'\n    };\n    if (active) {\n      containerStyle.backgroundColor = '#337ab7';\n      containerStyle.color = 'white';\n    }\n    if (isDragging) {\n      containerStyle.opacity = 0;\n    }\n    if (well.sample) {\n      containerStyle.borderColor = 'gray';\n    }\n    if (isOver && canDrop) {\n      containerStyle.borderStyle = 'dashed';\n      containerStyle.borderColor = '#337ab7';\n      containerStyle.opacity = 0;\n    } else if (canDrop) {\n      containerStyle.borderStyle = 'dashed';\n    }\n\n    return (\n      connectDragSource(connectDropTarget(\n        <div style={{ ...containerStyle, ...style }}>\n          <Well\n            active={active}\n            label={well.label}\n            sample={well.sample}\n          />\n        </div>\n      ))\n    );\n  }\n}\n\nexport default DropTarget([DragDropItemTypes.WELL, DragDropItemTypes.SAMPLE], wellTarget, collectTarget)(DragSource(DragDropItemTypes.WELL, wellSource, collectSource)(WellContainer));\n\nWellContainer.propTypes = {\n  connectDragSource: PropTypes.func.isRequired,\n  connectDropTarget: PropTypes.func.isRequired,\n  isDragging: PropTypes.bool.isRequired,\n  isOver: PropTypes.bool.isRequired,\n  canDrop: PropTypes.bool.isRequired,\n  swapWells: PropTypes.func.isRequired,\n  dropSample: PropTypes.func.isRequired,\n  well: PropTypes.object\n};\n","import React, {Component} from 'react';\n\nexport default class WellplateLabels extends Component {\n  render() {\n    const {size, cols, width, type} = this.props;\n    let style = {\n      width: width,\n      fontSize: 20,\n      fontWeight: 'bold'\n    };\n    if (type == 'horizontal') {\n      let labels = [];\n      for (let i = 0; i < cols; i ++) {\n        labels[i] = i + 1;\n      }\n      style = {\n        ...style,\n        float: 'left',\n        height: width / 2,\n        textAlign: 'center'\n      };\n      return (\n        <div>\n          {labels.map(label => <div style={style} key={label}>{label}</div>)}\n        </div>\n      );\n    } else if (type == 'vertical') {\n      const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\");\n      let labels = [];\n      const rows = size / cols;\n      for (let i = 0; i < rows; i ++) {\n        labels[i] = alphabet[i];\n      }\n      style = {\n        ...style,\n        height: width,\n        lineHeight: 3,\n        verticalAlign: 'middle',\n        paddingLeft: 10\n      };\n      return (\n        <div style={{float: 'right', marginTop: width / 2}}>\n          {labels.map((label, key) => <div style={style} key={key}>{label}</div>)}\n        </div>\n      );\n    }\n  }\n}\n","import React from 'react';\nimport {\n  Button, Popover, Overlay, ControlLabel, FormGroup, FormControl, Col, InputGroup, ButtonGroup\n} from 'react-bootstrap';\nimport SVG from 'react-inlinesvg';\nimport PropTypes from 'prop-types';\nimport Select from 'react-select';\nimport { CirclePicker } from 'react-color';\nimport { wellplateShowSample } from 'src/utilities/routesUtils';\nimport Aviator from 'aviator';\n\nconst handleSampleClick = (sample) => {\n  const { params, uri } = Aviator.getCurrentRequest();\n  Aviator.navigate(`${uri}/sample/${sample.id}`, { silent: true });\n  wellplateShowSample({ params: { ...params, sampleID: sample.id } });\n};\n\nconst sampleName = (sample) => { /* eslint-disable camelcase */\n  if (sample) {\n    const { name, external_label, short_label } = sample;\n    const sampleNameLabel = `${name || ''} ${external_label || ''} ${short_label || ''}`;\n    if (sample.isNew) {\n      return sampleNameLabel;\n    }\n    return (\n      <a onClick={() => handleSampleClick(sample)} style={{ cursor: 'pointer' }}>\n        {sampleNameLabel}\n      </a>\n    );\n  }\n  return (<div />);\n}; /* eslint-enable */\n\nconst renderWellContent = (well, removeSampleFromWell) => {\n  const { sample } = well;\n  let svg; let moleculeName; let\n    removeButton = '';\n\n  const svgContainerStyle = {\n    borderRadius: '50%',\n    height: 190,\n    width: 190,\n    border: '6px solid lightgray',\n    textAlign: 'center',\n    verticalAlign: 'middle',\n    lineHeight: 2\n  };\n  if (sample) {\n    svg = <SVG key={sample.id} className=\"molecule-mid\" src={sample.svgPath} />;\n    moleculeName = sample.molecule.iupac_name;\n    removeButton = (\n      <Button className=\"pull-right\" bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => removeSampleFromWell(well)}>\n        <i className=\"fa fa-trash-o\" />\n      </Button>\n    );\n  }\n  return (\n    <div>\n      <div style={svgContainerStyle}>\n        {svg}\n      </div>\n      <div className=\"wellplate-overlay\">\n        {sampleName(sample)}\n        <br />\n        {moleculeName}\n        <br />\n      </div>\n      <div>\n        {removeButton}\n      </div>\n    </div>\n  );\n};\n\nconst sampleImportedReadout = (sample) => (sample ? sample.imported_readout : '');\n\nconst content = (\n  well,\n  readoutTitles,\n  removeSampleFromWell,\n  handleWellLabel,\n  handleColorPicker,\n  selectedColor,\n  saveColorCode\n) => {\n  const { sample, readouts } = well;\n  const bcStyle = {\n    backgroundColor: selectedColor || well.color_code\n  };\n  const wellLabels = well.label ? well.label.split(',') : [];\n  const isDisable = () => wellLabels.some((item) => item === 'Molecular structure');\n\n  const labels = [{\n    label: 'Name',\n    value: 'Name',\n    disabled: isDisable()\n  }, {\n    label: 'External label',\n    value: 'External label',\n    disabled: isDisable()\n  }, {\n    label: 'Molecular structure',\n    value: 'Molecular structure',\n    disabled: (wellLabels.some((item) => item !== 'Molecular structure'))\n  }];\n\n  return (\n    <div style={{ width: 220, height: 550 }}>\n      {renderWellContent(well, removeSampleFromWell)}\n      <div>\n        <Select\n          className=\"well-overlay-select\"\n          id=\"label\"\n          name=\"label\"\n          multi\n          options={labels}\n          value={well.label}\n          onChange={(e) => handleWellLabel(e)}\n          style={{ top: '2px', bottom: '2px' }}\n        />\n        <FormGroup>\n          {readouts && readouts.map((readout, index) => (\n            <div key={`readout_${readout.id}`}>\n              <ControlLabel>{readoutTitles[index]}</ControlLabel>\n              <InputGroup>\n                <FormControl\n                  type=\"text\"\n                  value={readout.value}\n                  disabled\n                  placeholder=\"Value\"\n                />\n                <InputGroup.Addon disabled>{readout.unit}</InputGroup.Addon>\n              </InputGroup>\n            </div>\n          ))}\n        </FormGroup>\n        <FormGroup style={{ display: 'none' }}>\n          <ControlLabel>Imported Readout</ControlLabel>\n          <FormControl\n            componentClass=\"textarea\"\n            disabled\n            value={sampleImportedReadout(sample) || ''}\n            style={{ height: 50 }}\n          />\n        </FormGroup>\n        <FormGroup>\n          <Col\n            style={{ marginTop: '7px', marginLeft: '-15px' }}\n            className=\"row row-no-gutters\"\n            componentClass={ControlLabel}\n            sm={3}\n          >\n            Select&nbsp;Color\n          </Col>\n          <Col sm={9} style={{ marginLeft: '35px', width: '65%' }}>\n            <InputGroup>\n              <InputGroup.Addon style={bcStyle} />\n              <FormControl\n                className=\"input-sm\"\n                type=\"text\"\n                readOnly\n                value={selectedColor || well.color_code}\n              />\n            </InputGroup>\n          </Col>\n        </FormGroup>\n        <FormGroup controlId=\"formHorizontalPicker\" style={{ marginTop: '60px' }}>\n          <CirclePicker circleSize={17} width=\"100%\" onChangeComplete={(e) => handleColorPicker(e)} />\n        </FormGroup>\n        <ButtonGroup style={{ bottom: '5x' }}>\n          <Button style={{ left: '80px' }} onClick={saveColorCode}>Save</Button>\n        </ButtonGroup>\n      </div>\n    </div>\n  );\n};\n\nconst title = (handleClose) => (\n  <div>\n    Well Details\n    <span className=\"pull-right\" style={{ marginRight: -8, marginTop: -3 }}>\n      <Button bsSize=\"xsmall\" onClick={() => handleClose()}>\n        <i className=\"fa fa-times\" />\n      </Button>\n    </span>\n  </div>\n);\n\nfunction WellOverlay({\n  show, well, readoutTitles, placement, target, handleClose, removeSampleFromWell, handleWellLabel,\n  handleColorPicker, selectedColor, saveColorCode\n}) {\n  return (\n    <Overlay\n      rootClose\n      show={show}\n      target={target}\n      placement={placement}\n      style={{ position: 'sticky', top: 0, overflow: 'scroll' }}\n      onHide={() => handleClose()}\n    >\n      <Popover title={title(handleClose)} id={`wellpop${well.id}`}>\n        <div style={{\n          maxHeight: '500px',\n          overflowY: 'auto',\n          overflowX: 'hidden',\n          paddingRight: '10px',\n          marginRight: '-10px',\n          boxSizing: 'border-box'\n        }}\n        >\n          {content(\n            well,\n            readoutTitles,\n            removeSampleFromWell,\n            handleWellLabel,\n            handleColorPicker,\n            selectedColor,\n            saveColorCode\n          )}\n        </div>\n      </Popover>\n    </Overlay>\n  );\n}\n\nWellOverlay.propTypes = {\n  show: PropTypes.bool.isRequired,\n  well: PropTypes.object.isRequired,\n  readoutTitles: PropTypes.array.isRequired,\n  placement: PropTypes.string.isRequired,\n  target: PropTypes.func.isRequired,\n  handleClose: PropTypes.func.isRequired,\n  removeSampleFromWell: PropTypes.func.isRequired,\n  handleWellLabel: PropTypes.func.isRequired,\n  handleColorPicker: PropTypes.func.isRequired,\n  selectedColor: PropTypes.func.isRequired,\n  saveColorCode: PropTypes.func.isRequired,\n};\n\nexport default WellOverlay;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport WellContainer from 'src/apps/mydb/elements/details/wellplates/designerTab/WellContainer';\nimport WellplateLabels from 'src/apps/mydb/elements/details/wellplates/designerTab/WellplateLabels';\nimport WellOverlay from 'src/apps/mydb/elements/details/wellplates/designerTab/WellOverlay';\nimport WellplatesFetcher from 'src/fetchers/WellplatesFetcher';\n\nexport default class Wellplate extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showOverlay: false,\n      overlayTarget: {},\n      overlayWell: {},\n      overlayPlacement: 'right',\n      selectedColor: null\n    };\n  }\n\n  componentDidMount() {\n    window.addEventListener('scroll', this.onScroll.bind(this));\n    document.getElementsByClassName('panel-body')[0].addEventListener('scroll', this.onScroll.bind(this));\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const { show } = nextProps;\n    if (!show) {\n      this.hideOverlay();\n    }\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener('scroll', this.onScroll.bind(this));\n    document.getElementsByClassName('panel-body')[0].removeEventListener('scroll', this.onScroll.bind(this));\n  }\n\n  onScroll() {\n    const { showOverlay, overlayTarget, overlayWell } = this.state;\n    if (showOverlay) {\n      this.hideOverlay();\n      setTimeout(() => {\n        this.showOverlay(overlayTarget, overlayWell);\n      }, 700);\n    }\n  }\n\n  swapWells(firstWell, secondWell) {\n    const { handleWellsChange, wells } = this.props;\n    const firstWellId = wells.indexOf(firstWell);\n    const secondWellId = wells.indexOf(secondWell);\n    const temp = wells[firstWellId].sample;\n    wells[firstWellId].sample = wells[secondWellId].sample;\n    wells[secondWellId].sample = temp;\n    handleWellsChange(wells);\n  }\n\n  dropSample(droppedSample, well) {\n    const { handleWellsChange, wells } = this.props;\n    const wellId = wells.indexOf(well);\n    const sample = droppedSample.buildChild();\n    wells[wellId] = {\n      ...well,\n      sample\n    };\n    handleWellsChange(wells);\n  }\n\n  removeSampleFromWell(well) {\n    const { handleWellsChange, wells } = this.props;\n    const wellId = wells.indexOf(well);\n    wells[wellId] = {\n      ...well,\n      sample: null\n    };\n    handleWellsChange(wells);\n    this.hideOverlay();\n  }\n\n  hideOverlay() {\n    this.setState({\n      showOverlay: false,\n      selectedColor: null\n    });\n  }\n\n  showOverlay(key, well) {\n    const { cols } = this.props;\n    const isWellInUpperHalf = Math.ceil(cols / 2) > key % cols;\n    const placement = (isWellInUpperHalf) ? 'right' : 'left';\n    this.setState({\n      showOverlay: true,\n      overlayTarget: key,\n      overlayWell: well,\n      overlayPlacement: placement\n    });\n  }\n\n  setWellLabel(target) {\n    const { overlayWell } = this.state;\n    WellplatesFetcher.updateWellLabel({\n      id: overlayWell.id,\n      label: target.map(t => t.label).toString()\n    }).then((result) => {\n      overlayWell.label = result.label;\n      this.setState({ overlayWell });\n    });\n  }\n\n  toggleOverlay(key, well) {\n    const { showOverlay, overlayWell } = this.state;\n    if (showOverlay && overlayWell === well) {\n      this.hideOverlay();\n    } else {\n      this.showOverlay(key, well);\n    }\n  }\n\n  isWellActive(well) {\n    const { showOverlay, overlayWell } = this.state;\n    return (showOverlay && overlayWell === well);\n  }\n\n  saveColorCode() {\n    const { overlayWell, selectedColor } = this.state;\n    WellplatesFetcher.updateWellColorCode({\n      id: overlayWell.id,\n      color_code: selectedColor,\n    }).then((result) => {\n      overlayWell.color_code = result.color_code;\n      this.setState({ overlayWell });\n    });\n  }\n\n  setColorPicker(color) {\n    this.setState({ selectedColor: color.hex });\n  }\n\n  render() {\n    const { wells, readoutTitles, size, cols, width, handleWellsChange } = this.props;\n    const { showOverlay, overlayTarget, overlayWell, overlayPlacement, selectedColor } = this.state;\n    const style = {\n      width: (cols + 1) * width,\n      height: ((size / cols) + 1) * width\n    };\n    const containerStyle = {\n      width,\n      height: width,\n      fontSize: 8\n    };\n\n    return (\n      <div style={style}>\n        <WellplateLabels\n          size={size}\n          cols={cols}\n          width={width}\n          type=\"horizontal\"\n        />\n        <WellplateLabels\n          size={size}\n          cols={cols}\n          width={width}\n          type=\"vertical\"\n        />\n        {wells.map((well, key) => (\n          <div\n            key={key}\n            ref={key}\n            onClick={event => this.toggleOverlay(key, well)}\n          >\n            <WellContainer\n              well={well}\n              style={containerStyle}\n              swapWells={(firstWell, secondWell) => this.swapWells(firstWell, secondWell)}\n              dropSample={(sample, wellId) => this.dropSample(sample, wellId)}\n              active={this.isWellActive(well)}\n              hideOverlay={() => this.hideOverlay()}\n            />\n          </div>\n        ))}\n        <WellOverlay\n          show={showOverlay}\n          well={overlayWell}\n          readoutTitles={readoutTitles}\n          selectedColor={selectedColor}\n          placement={overlayPlacement}\n          target={() => ReactDOM.findDOMNode(this.refs[overlayTarget]).children[0]}\n          handleClose={() => this.hideOverlay()}\n          removeSampleFromWell={well => this.removeSampleFromWell(well)}\n          handleColorPicker={value => this.setColorPicker(value)}\n          saveColorCode={() => this.saveColorCode()}\n          handleWellLabel={value => this.setWellLabel(value)}\n        />\n      </div>\n    );\n  }\n}\n\nWellplate.propTypes = {\n  show: PropTypes.bool.isRequired,\n  size: PropTypes.number.isRequired,\n  width: PropTypes.number.isRequired,\n  cols: PropTypes.number.isRequired,\n  handleWellsChange: PropTypes.func.isRequired\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Table, FormControl } from 'react-bootstrap';\nimport SVG from 'react-inlinesvg';\n\nexport default class WellplateList extends Component {\n  handleReadoutOfWellChange(event, well, index, type) {\n    const { value } = event.target;\n    const { wells, handleWellsChange } = this.props;\n    const wellId = wells.indexOf(well);\n    wells[wellId].readouts[index][type] = value;\n    handleWellsChange(wells);\n  }\n\n  renderReadoutHeaders() {\n    const { readoutTitles } = this.props;\n    return (\n      readoutTitles && readoutTitles.map((title) => {\n        const key = title.id;\n        return (\n          [\n            <th key={`v_${key}`} width=\"15%\">{title} Value</th>,\n            <th key={`u_${key}`} width=\"10%\">{title} Unit</th>\n          ]\n        );\n      })\n    );\n  }\n\n  renderReadoutFields(well) {\n    const { readouts } = well;\n    const inputContainerStyle = {\n      padding: 0\n    };\n    const inputFieldStyle = {\n      resize: 'none',\n      height: 66\n    };\n    return (\n      readouts && readouts.map((readout, index) => {\n        const key = readout.id;\n        return (\n          [\n            <td key={`v_${key}`} style={inputContainerStyle}>\n              <FormControl\n                componentClass=\"textarea\"\n                style={inputFieldStyle}\n                value={readout.value || ''}\n                onChange={event => this.handleReadoutOfWellChange(event, well, index, 'value')}\n                className=\"no-margin\"\n              />\n            </td>,\n            <td key={`u_${key}`} style={inputContainerStyle}>\n              <FormControl\n                componentClass=\"textarea\"\n                style={inputFieldStyle}\n                value={readout.unit || ''}\n                onChange={event => this.handleReadoutOfWellChange(event, well, index, 'unit')}\n                className=\"no-margin\"\n              />\n            </td>,\n          ]\n        );\n      })\n    );\n  }\n\n  render() {\n    const { wells } = this.props;\n    return (\n      <Table bordered hover condensed>\n        <thead>\n          <tr>\n            <th width=\"3%\">#</th>\n            <th width=\"5%\">Position</th>\n            <th width=\"5%\">Molecule</th>\n            <th width=\"11%\">Name</th>\n            <th width=\"11%\">External Label</th>\n            <th width=\"15%\">Sum-Formula</th>\n            {this.renderReadoutHeaders()}\n            <th style={{ display: 'none' }} width=\"25%\">Imported Readout</th>\n          </tr>\n        </thead>\n        <tbody>\n          {wells.map((well, key) => {\n            const id = key + 1;\n            const { sample, position } = well;\n            const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');\n            const positionY = alphabet[position.y - 1];\n            const positions = positionY + position.x;\n            let svgPath = '';\n            let sampleName = '';\n            let externalLabel = '';\n            let sum_formular = '';\n            let importedReadout = '';\n            let svgNode = '';\n            const style = {\n              resize: 'none',\n              height: 66\n            };\n            const inputContainerStyle = {\n              padding: 0,\n              display: 'none'\n            };\n            if (sample) {\n              svgPath = `/images/molecules/${sample.molecule.molecule_svg_file}`;\n              svgNode = <SVG className=\"molecule-small\" src={svgPath} />;\n              const { external_label, short_label, imported_readout } = sample;\n              sampleName = `${short_label || ''}`;\n              externalLabel = `${external_label || ''}`;\n              importedReadout = imported_readout;\n              sum_formular = sample.molecule_formula;\n            }\n            return (\n              <tr key={key}>\n                <td>{id}</td>\n                <td>{positions}</td>\n                <td>{svgNode}</td>\n                <td>{sampleName}</td>\n                <td>{externalLabel}</td>\n                <td>{sum_formular}</td>\n                {this.renderReadoutFields(well)}\n                <td style={inputContainerStyle}>\n                  <FormControl\n                    componentClass=\"textarea\"\n                    style={style}\n                    value={importedReadout || ''}\n                    disabled\n                    className=\"no-margin\"\n                  />\n                </td>\n              </tr>\n            );\n          })}\n        </tbody>\n      </Table>\n    );\n  }\n}\n\nWellplateList.propTypes = {\n  wells: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types\n  readoutTitles: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types\n  handleWellsChange: PropTypes.func.isRequired\n};\n","// eslint-disable-next-line max-classes-per-file\nimport React, { Component } from 'react';\nimport Select from 'react-select';\nimport PropTypes from 'prop-types';\nimport Wellplate from 'src/models/Wellplate';\n\nclass Option {\n  constructor(width, height) {\n    this.width = width;\n    this.height = height;\n  }\n\n  get label() {\n    return `${this.height * this.width} (${this.width}x${this.height})`;\n  }\n}\n\nexport default class WellplateSizeDropdown extends Component {\n  constructor(props) {\n    super(props);\n\n    const rawOptions = [new Option(24, 16), new Option(12, 8), new Option(6, 4), new Option(4, 3)];\n\n    const options = rawOptions.map((option) => (\n      { value: option, label: option.label }\n    ));\n\n    this.state = { options };\n\n    const { wellplate } = this.props;\n    this.state.currentSize = this.selectOptionOfWellplate(wellplate);\n  }\n\n  changeSizeOption(selectedOption) {\n    const { wellplate, triggerUIUpdate } = this.props;\n    wellplate.edited = true;\n    this.setState({ currentSize: selectedOption });\n\n    const width = parseInt(selectedOption.value.width, 10);\n    const height = parseInt(selectedOption.value.height, 10);\n\n    wellplate.changeSize(width, height);\n\n    triggerUIUpdate({ type: 'size' });\n  }\n\n  selectOptionOfWellplate(wellplate) {\n    const { options } = this.state;\n\n    const option = options.find((o) => o.width === wellplate.width && o.height === wellplate.height);\n    return option !== undefined ? option : new Option(wellplate.width, wellplate.height);\n  }\n\n  render() {\n    const { wellplate } = this.props;\n\n    const isNew = wellplate.is_new;\n    const { options } = this.state;\n\n    return (\n      <Select\n        clearable={false}\n        value={this.selectOptionOfWellplate(wellplate)}\n        onChange={(option) => this.changeSizeOption(option)}\n        options={options}\n        disabled={!isNew}\n      />\n    );\n  }\n}\n\nWellplateSizeDropdown.propTypes = {\n  wellplate: PropTypes.instanceOf(Wellplate).isRequired,\n  triggerUIUpdate: PropTypes.func.isRequired,\n};\n","import React, { Component } from 'react';\nimport {\n  Button, Modal, FormGroup, FormControl, ControlLabel, Col, Row\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport Wellplate from 'src/models/Wellplate';\n\nexport default class CustomSizeModal extends Component {\n  static isInteger(value) {\n    return !Number.isNaN(value) && Number.isInteger(Number(value));// && Number(value) > 0;\n  }\n\n  static propertyIsInvalid(value) {\n    return value > Wellplate.MAX_DIMENSION || value <= 0;\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      width: props.wellplate.width,\n      height: props.wellplate.height\n    };\n  }\n\n  updateDimensionsFromWellplate() {\n    const { wellplate } = this.props;\n    this.setState({\n      width: wellplate.width,\n      height: wellplate.height\n    });\n  }\n\n  applySizeChange() {\n    const { handleClose, wellplate, triggerUIUpdate } = this.props;\n    const { height, width } = this.state;\n    wellplate.changeSize(width, height);\n    triggerUIUpdate();\n    handleClose();\n  }\n\n  updateDimension(dimension, value) {\n    if (!CustomSizeModal.isInteger(value)) {\n      return; // state is not updated if value is not an integer\n    }\n    this.setState({ [dimension]: value });\n  }\n\n  renderApplyButton() {\n    const { height, width } = this.state;\n    const disabled = CustomSizeModal.propertyIsInvalid(height) || CustomSizeModal.propertyIsInvalid(width);\n    return (\n      <Button\n        onClick={() => this.applySizeChange()}\n        disabled={disabled}\n      >\n        Apply\n      </Button>\n    );\n  }\n\n  renderProperty(value, label, propertyName) {\n    const invalidStyleClass = CustomSizeModal.propertyIsInvalid(value)\n      ? 'invalid-wellplate-size' : 'size-without-error';\n    const errorMessage = CustomSizeModal.propertyIsInvalid(value)\n      ? (\n        <div className=\"invalid-wellplate-size-text\">\n          {label}\n          {' '}\n          must be between 0 and 100.\n        </div>\n      )\n      : null;\n    return (\n      <div className=\"floating-left\">\n        <FormGroup>\n          <ControlLabel>{label}</ControlLabel>\n          <FormControl\n            type=\"text\"\n            value={value}\n            className={invalidStyleClass}\n            onChange={(event) => this.updateDimension(propertyName, event.target.value)}\n          />\n          {errorMessage}\n        </FormGroup>\n      </div>\n    );\n  }\n\n  renderSize() {\n    const { height, width } = this.state;\n    return (\n      <FormGroup>\n        <ControlLabel>Size</ControlLabel>\n        <FormControl.Static>{height * width}</FormControl.Static>\n      </FormGroup>\n    );\n  }\n\n  render() {\n    const { showCustomSizeModal, handleClose } = this.props;\n    const { height, width } = this.state;\n    return (\n      <Modal\n        show={showCustomSizeModal}\n        onHide={handleClose}\n        onShow={() => this.updateDimensionsFromWellplate()}\n      >\n        <Modal.Header closeButton>Wellplate Dimensions</Modal.Header>\n        <Modal.Body>\n          <Row>\n            <Col xs={4}>\n              {this.renderProperty(width, 'Width', 'width') }\n            </Col>\n            <Col xs={4}>\n              {this.renderProperty(height, 'Height', 'height') }\n            </Col>\n            <Col xs={4}>\n              {this.renderSize() }\n            </Col>\n          </Row>\n          <Row>\n            <Col xs={1} xsOffset={10}>\n              {this.renderApplyButton()}\n            </Col>\n          </Row>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n}\n\nCustomSizeModal.propTypes = {\n  wellplate: PropTypes.instanceOf(Wellplate).isRequired,\n  showCustomSizeModal: PropTypes.bool.isRequired,\n  handleClose: PropTypes.func.isRequired,\n  triggerUIUpdate: PropTypes.func.isRequired,\n};\n","import React, { Component } from 'react';\nimport {\n  FormGroup, InputGroup, FormControl, ControlLabel, Button, ButtonGroup, Overlay, OverlayTrigger, Tooltip\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport QuillEditor from 'src/components/QuillEditor';\nimport WellplateSizeDropdown from 'src/apps/mydb/elements/details/wellplates/propertiesTab/WellplateSizeDropdown';\nimport CustomSizeModal from 'src/apps/mydb/elements/details/wellplates/propertiesTab/CustomSizeModal';\nimport Wellplate from 'src/models/Wellplate';\n\nexport default class WellplateProperties extends Component {\n  constructor(props) {\n    super(props);\n    this.deleteButtonRefs = [];\n    this.state = { showDeleteReadoutConfirm: [], showCustomSizeModal: false };\n  }\n\n  handleInputChange(type, event) {\n    const { changeProperties } = this.props;\n    const { value } = event.target;\n    changeProperties({ type, value });\n  }\n\n  showDeleteReadoutTitleConfirm(index) {\n    const { showDeleteReadoutConfirm } = this.state;\n    showDeleteReadoutConfirm[index] = true;\n    this.setState({ showDeleteReadoutConfirm });\n  }\n\n  hideDeleteReadoutTitleConfirm(index) {\n    const { showDeleteReadoutConfirm } = this.state;\n    showDeleteReadoutConfirm[index] = false;\n    this.setState({ showDeleteReadoutConfirm });\n  }\n\n  addReadoutTitle() {\n    const { readoutTitles, changeProperties, handleAddReadout } = this.props;\n    const currentTitles = readoutTitles || [];\n    const newTitles = currentTitles.concat('Readout');\n    changeProperties({ type: 'readoutTitles', value: newTitles });\n    handleAddReadout();\n  }\n\n  deleteReadoutTitle(index) {\n    const { readoutTitles, changeProperties, handleRemoveReadout } = this.props;\n    const currentTitles = readoutTitles || [];\n    currentTitles.splice(index, 1);\n    changeProperties({ type: 'readoutTitles', value: currentTitles });\n    handleRemoveReadout(index);\n    this.hideDeleteReadoutTitleConfirm(index);\n  }\n\n  updateReadoutTitle(index, newValue) {\n    const { readoutTitles, changeProperties } = this.props;\n    const currentTitles = readoutTitles || [];\n    currentTitles[index] = newValue;\n    changeProperties({ type: 'readoutTitles', value: currentTitles });\n  }\n\n  showCustomSizeModal() {\n    this.setState({ showCustomSizeModal: true });\n  }\n\n  renderDeleteReadoutTitleButton(index) {\n    const { showDeleteReadoutConfirm } = this.state;\n    const show = showDeleteReadoutConfirm[index];\n\n    const confirmTooltip = (\n      <Tooltip className=\"in\" id=\"tooltip-bottom\">\n        Delete Readout Title? This will also delete the respective well readouts.\n        <br />\n        <ButtonGroup>\n          <Button\n            bsStyle=\"danger\"\n            bsSize=\"xsmall\"\n            onClick={() => this.deleteReadoutTitle(index)}\n          >\n            Yes\n          </Button>\n          <Button\n            bsStyle=\"warning\"\n            bsSize=\"xsmall\"\n            onClick={() => this.hideDeleteReadoutTitleConfirm(index)}\n          >\n            No\n          </Button>\n        </ButtonGroup>\n      </Tooltip>\n    );\n\n    return (\n      <InputGroup.Button>\n        <OverlayTrigger\n          placement=\"top\"\n          overlay={<Tooltip id=\"delete_readout_title_tooltip\">Delete Readout Title</Tooltip>}\n        >\n          <Button\n            bsStyle=\"danger\"\n            className=\"button-right\"\n            ref={(ref) => { this.deleteButtonRefs[index] = ref; }}\n            onClick={() => this.showDeleteReadoutTitleConfirm(index)}\n          >\n            <i className=\"fa fa-trash-o\" />\n          </Button>\n        </OverlayTrigger>\n        <Overlay\n          show={show}\n          placement=\"bottom\"\n          rootClose\n          onHide={() => this.hideDeleteReadoutTitleConfirm(index)}\n          target={this.deleteButtonRefs[index]}\n        >\n          { confirmTooltip }\n        </Overlay>\n      </InputGroup.Button>\n    );\n  }\n\n  render() {\n    const {\n      readoutTitles, wellplate, changeProperties\n    } = this.props;\n\n    const { name, description } = wellplate;\n\n    const { showCustomSizeModal } = this.state;\n\n    return (\n      <div>\n        <CustomSizeModal\n          showCustomSizeModal={showCustomSizeModal}\n          wellplate={wellplate}\n          triggerUIUpdate={changeProperties}\n          handleClose={() => { this.setState({ showCustomSizeModal: false }); }}\n        />\n        <table width=\"100%\">\n          <tbody>\n            <tr>\n              <td width=\"70%\" className=\"padding-right\">\n                <FormGroup>\n                  <ControlLabel>Name</ControlLabel>\n                  <FormControl\n                    type=\"text\"\n                    value={name || ''}\n                    onChange={(event) => this.handleInputChange('name', event)}\n                    disabled={name === '***'}\n                  />\n                </FormGroup>\n              </td>\n              <td width=\"30%\">\n\n                <div>Size</div>\n                <div className=\"custom-size-dropdown\">\n                  <WellplateSizeDropdown\n                    triggerUIUpdate={changeProperties}\n                    wellplate={wellplate}\n                  />\n                </div>\n                <OverlayTrigger\n                  placement=\"top\"\n                  overlay={<Tooltip id=\"create-custom-tooltip-id\">Create custom wellplate size</Tooltip>}\n                >\n                  <Button\n                    className=\"create-own-size-button\"\n                    disabled={!wellplate.is_new}\n                    onClick={() => this.showCustomSizeModal()}\n                  >\n                    <i className=\"fa fa-braille\" />\n                  </Button>\n                </OverlayTrigger>\n\n              </td>\n            </tr>\n            <tr>\n              <td colSpan={2}>\n                <ControlLabel>Readout Titles</ControlLabel>\n              </td>\n            </tr>\n            {readoutTitles && readoutTitles.map((readoutTitle, index) => (\n            // eslint-disable-next-line react/no-array-index-key\n              <tr key={index}>\n                <td colSpan={2}>\n                  <FormGroup>\n                    <InputGroup>\n                      <FormControl\n                        type=\"text\"\n                        value={readoutTitle}\n                        onChange={(event) => this.updateReadoutTitle(index, event.target.value)}\n                      />\n                      { this.renderDeleteReadoutTitleButton(index) }\n                    </InputGroup>\n                  </FormGroup>\n                </td>\n              </tr>\n            ))}\n            <tr>\n              <td colSpan={2}>\n                <OverlayTrigger\n                  placement=\"top\"\n                  overlay={<Tooltip id=\"add_readout_title_tooltip\">Add Readout Title</Tooltip>}\n                >\n                  <Button className=\"button-right\" bsStyle=\"success\" onClick={() => this.addReadoutTitle()}>\n                    Add Readouts\n                  </Button>\n                </OverlayTrigger>\n              </td>\n            </tr>\n            <tr>\n              <td colSpan=\"2\">\n                <FormGroup>\n                  <ControlLabel>Description</ControlLabel>\n                  <QuillEditor\n                    value={description}\n                    onChange={(event) => this.handleInputChange('description', { target: { value: event } })}\n                    disabled={description === '***'}\n                  />\n                </FormGroup>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    );\n  }\n}\n\nWellplateProperties.propTypes = { /* eslint-disable react/forbid-prop-types */\n  wellplate: PropTypes.instanceOf(Wellplate).isRequired,\n  changeProperties: PropTypes.func.isRequired,\n  handleAddReadout: PropTypes.func.isRequired,\n  handleRemoveReadout: PropTypes.func.isRequired,\n  readoutTitles: PropTypes.array.isRequired\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { PanelGroup, Panel, Button } from 'react-bootstrap';\nimport Container from 'src/models/Container';\nimport ContainerComponent from 'src/components/container/ContainerComponent';\nimport PrintCodeButton from 'src/components/common/PrintCodeButton'\n\nimport TextTemplateActions from 'src/stores/alt/actions/TextTemplateActions';\n\nexport default class WellplateDetailsContainers extends Component {\n  constructor(props) {\n    super();\n    const { wellplate } = props;\n    this.state = {\n      wellplate,\n      activeContainer: 0\n    };\n  }\n\n  componentDidMount() {\n    TextTemplateActions.fetchTextTemplates('wellplate');\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    this.setState({\n      wellplate: nextProps.wellplate\n    })\n  }\n\n  handleChange(container) {\n    const { wellplate } = this.state\n    this.props.parent.handleWellplateChanged(wellplate)\n  }\n\n  handleAdd() {\n    const { wellplate } = this.state;\n    let container = Container.buildEmpty();\n    container.container_type = \"analysis\";\n\n    wellplate.container.children.filter(element => ~element.container_type.indexOf('analyses'))[0].children.push(container);\n\n    const newKey = wellplate.container.children.filter(element => ~element.container_type.indexOf('analyses'))[0].children.length - 1;\n\n    this.handleAccordionOpen(newKey);\n\n    this.props.parent.setState({ wellplate: wellplate })\n  }\n\n  handleRemove(container) {\n    let { wellplate } = this.state;\n    container.is_deleted = true;\n\n    this.props.parent.setState({ wellplate: wellplate })\n  }\n\n  handleUndo(container) {\n    let { wellplate } = this.state;\n    container.is_deleted = false;\n\n    this.props.parent.setState({ wellplate: wellplate })\n  }\n\n  handleAccordionOpen(key) {\n    this.setState({ activeContainer: key });\n  }\n\n  addButton() {\n    const { readOnly } = this.props;\n    if (!readOnly) {\n      return (\n        <Button className=\"button-right\" bsSize=\"xsmall\" bsStyle=\"success\" onClick={() => this.handleAdd()}>\n          Add analysis\n        </Button>\n      )\n    }\n  }\n\n  render() {\n    const { wellplate, activeContainer } = this.state;\n    const { readOnly } = this.props;\n\n    let containerHeader = (container) => <div style={{ width: '100%' }}>\n      {container.name}\n      {(container.extended_metadata['kind'] &&\n        container.extended_metadata['kind'] != '')\n        ? (` - Type: ${container.extended_metadata['kind'].split('|')[1] || container.extended_metadata['kind']}`) : ''}\n      {(container.extended_metadata['status'] &&\n        container.extended_metadata['status'] != '')\n        ? (' - Status: ' + container.extended_metadata['status']) : ''}\n      <Button bsSize=\"xsmall\" bsStyle=\"danger\"\n        className=\"button-right\" disabled={readOnly}\n        onClick={() => {\n          if (confirm('Delete the container?')) {\n            this.handleRemove(container)\n          }\n        }}>\n        <i className=\"fa fa-trash\"></i>\n      </Button>\n      <PrintCodeButton element={wellplate} analyses={[container]}\n        ident={container.id} />\n    </div>\n\n    let containerHeaderDeleted = (container) => <p style={{ width: '100%' }}><strike>{container.name}\n      {(container.extended_metadata['kind'] &&\n        container.extended_metadata['kind'] != '')\n        ? (` - Type: ${container.extended_metadata['kind'].split('|')[1] || container.extended_metadata['kind']}`) : ''}\n      {(container.extended_metadata['status'] && container.extended_metadata['status'] != '') ? (' - Status: ' + container.extended_metadata['status']) : ''}\n    </strike>\n      <Button className=\"pull-right\" bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.handleUndo(container)}>\n        <i className=\"fa fa-undo\"></i>\n      </Button>\n    </p>\n\n    if (wellplate.container != null) {\n\n      var analyses_container = wellplate.container.children.filter(element => ~element.container_type.indexOf('analyses'));\n\n      if (analyses_container.length == 1 && analyses_container[0].children.length > 0) {\n        return (\n          <div>\n            <p>&nbsp;{this.addButton()}</p>\n            <PanelGroup defaultActiveKey={0} activeKey={activeContainer} accordion>\n              {analyses_container[0].children.map((container, key) => {\n                if (container.is_deleted) {\n                  return (\n                    <Panel eventKey={key}\n                      key={key} >\n                      <Panel.Heading>{containerHeaderDeleted(container)}</Panel.Heading>\n                    </Panel>\n                  );\n                } else {\n                  return (\n                    <Panel eventKey={key}\n                      key={key} onClick={() => this.handleAccordionOpen(key)}>\n                      <Panel.Heading>{containerHeader(container)}</Panel.Heading>\n                      <Panel.Body collapsible=\"true\">\n                        <ContainerComponent\n                          templateType=\"wellplate\"\n                          readOnly={readOnly}\n                          container={container}\n                          onChange={container => this.handleChange(container)}\n                        />\n                      </Panel.Body>\n                    </Panel>\n                  );\n                }\n\n              }\n              )}\n            </PanelGroup>\n          </div>\n        )\n      } else {\n        return (\n          <div>\n            <p className='noAnalyses-warning'>\n              There are currently no Analyses.\n              {this.addButton()}\n            </p>\n          </div>\n        )\n      }\n\n    } else {\n\n      return (\n        <div>\n          <p className='noAnalyses-warning'>\n            There are currently no Analyses.\n          </p>\n        </div>\n      )\n    }\n\n  }\n\n}\n\nWellplateDetailsContainers.propTypes = {\n  readOnly: PropTypes.bool,\n  parent: PropTypes.object,\n};\n","/* eslint-disable no-param-reassign */\n/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport EditorFetcher from 'src/fetchers/EditorFetcher';\nimport ImageAnnotationModalSVG from 'src/apps/mydb/elements/details/researchPlans/ImageAnnotationModalSVG';\nimport Utils from 'src/utilities/Functions';\nimport {\n  Button, ButtonGroup, OverlayTrigger, Popover\n} from 'react-bootstrap';\nimport { last, findKey } from 'lodash';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport SaveEditedImageWarning from 'src/apps/mydb/elements/details/researchPlans/SaveEditedImageWarning';\nimport {\n  downloadButton,\n  removeButton,\n  annotateButton,\n  editButton,\n  importButton,\n  customDropzone,\n  sortingAndFilteringUI,\n  formatFileSize,\n  attachmentThumbnail,\n  ThirdPartyAppButton,\n} from 'src/apps/mydb/elements/list/AttachmentList';\nimport { formatDate, parseDate } from 'src/utilities/timezoneHelper';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport { observer } from 'mobx-react';\n\nconst templateInfo = (\n  <Popover id=\"popver-template-info\" title=\"Template info\">\n    This template should be used to import well readouts. The&nbsp;\n    <strong>red</strong>\n    &nbsp;column may not be altered at all. The contents of the&nbsp;\n    <strong>yellow</strong>\n    &nbsp;columns may be altered, the headers may not. The&nbsp;\n    <strong>green</strong>\n    &nbsp;columns must contain at least one&nbsp;\n    <i>_Value</i>\n    &nbsp;and&nbsp;\n    <i>_Unit</i>\n    &nbsp;pair with a matching prefix before the underscore. They may contain an arbitrary amount of readout pairs.\n  </Popover>\n);\n\nexport class WellplateDetailsAttachments extends Component {\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n    this.importButtonRefs = [];\n    const {\n      onImport\n    } = props;\n    const { thirdPartyApps } = UIStore.getState() || [];\n    this.thirdPartyApps = thirdPartyApps;\n\n    this.state = {\n      onImport,\n      attachmentEditor: false,\n      extension: null,\n      imageEditModalShown: false,\n      showImportConfirm: [],\n      filteredAttachments: [...props.attachments],\n      filterText: '',\n      sortBy: 'name',\n      sortDirection: 'asc',\n    };\n    this.editorInitial = this.editorInitial.bind(this);\n    this.createAttachmentPreviews = this.createAttachmentPreviews.bind(this);\n\n    this.handleEdit = this.handleEdit.bind(this);\n    this.handleFilterChange = this.handleFilterChange.bind(this);\n    this.handleSortChange = this.handleSortChange.bind(this);\n    this.toggleSortDirection = this.toggleSortDirection.bind(this);\n    this.confirmAttachmentImport = this.confirmAttachmentImport.bind(this);\n    this.showImportConfirm = this.showImportConfirm.bind(this);\n    this.hideImportConfirm = this.hideImportConfirm.bind(this);\n  }\n\n  componentDidMount() {\n    this.editorInitial();\n    this.createAttachmentPreviews();\n  }\n\n  componentDidUpdate(prevProps) {\n    const { attachments } = this.props;\n    if (attachments !== prevProps.attachments) {\n      this.createAttachmentPreviews();\n      this.setState({ filteredAttachments: [...attachments] }, this.filterAndSortAttachments);\n    }\n  }\n\n  handleEdit(attachment) {\n    const fileType = last(attachment.filename.split('.'));\n    const docType = this.documentType(attachment.filename);\n\n    EditorFetcher.startEditing({ attachment_id: attachment.id })\n      .then((result) => {\n        if (result.token) {\n          const url = `/editor?id=${attachment.id}&docType=${docType}&fileType=${fileType}&title=${attachment.filename}&key=${result.token}&only_office_token=${result.only_office_token}`;\n          window.open(url, '_blank');\n\n          attachment.aasm_state = 'oo_editing';\n          attachment.updated_at = new Date();\n\n          this.props.onEdit(attachment);\n        } else {\n          alert('Unauthorized to edit this file.');\n        }\n      });\n  }\n\n  handleTemplateDownload() { // eslint-disable-line class-methods-use-this\n    const { wellplate } = this.props;\n    Utils.downloadFile({\n      contents: `/api/v1/wellplates/template/${wellplate.id}`,\n      name: 'wellplate_import_template.xlsx'\n    });\n  }\n\n  handleFilterChange = (e) => {\n    this.setState({ filterText: e.target.value }, this.filterAndSortAttachments);\n  };\n\n  handleSortChange = (e) => {\n    this.setState({ sortBy: e.target.value }, this.filterAndSortAttachments);\n  };\n\n  toggleSortDirection = () => {\n    this.setState((prevState) => ({\n      sortDirection: prevState.sortDirection === 'asc' ? 'desc' : 'asc'\n    }), this.filterAndSortAttachments);\n  };\n\n  filterAndSortAttachments() {\n    const { filterText, sortBy } = this.state;\n\n    const filteredAttachments = this.props.attachments.filter((\n      attachment\n    ) => attachment.filename.toLowerCase().includes(filterText.toLowerCase()));\n\n    filteredAttachments.sort((a, b) => {\n      let comparison = 0;\n      switch (sortBy) {\n        case 'name':\n          comparison = a.filename.localeCompare(b.filename);\n          break;\n        case 'size':\n          comparison = a.filesize - b.filesize;\n          break;\n        case 'date': {\n          const dateA = parseDate(a.created_at);\n          const dateB = parseDate(b.created_at);\n          comparison = dateA.valueOf() - dateB.valueOf();\n          break;\n        }\n        default:\n          break;\n      }\n      return this.state.sortDirection === 'asc' ? comparison : -comparison;\n    });\n\n    this.setState({ filteredAttachments });\n  }\n\n  createAttachmentPreviews() {\n    const { attachments } = this.props;\n    attachments.map((attachment) => {\n      if (attachment.thumb) {\n        AttachmentFetcher.fetchThumbnail({ id: attachment.id }).then(\n          (result) => {\n            if (result != null) {\n              attachment.preview = `data:image/png;base64,${result}`;\n              this.forceUpdate();\n            }\n          }\n        );\n      } else {\n        attachment.preview = '/images/wild_card/not_available.svg';\n        this.forceUpdate();\n      }\n      return attachment;\n    });\n  }\n\n  documentType(filename) {\n    const { extension } = this.state;\n\n    const ext = last(filename.split('.'));\n    const docType = findKey(extension, (o) => o.includes(ext));\n\n    if (typeof docType === 'undefined' || !docType) {\n      return null;\n    }\n\n    return docType;\n  }\n\n  editorInitial() {\n    EditorFetcher.initial().then((result) => {\n      this.setState({\n        attachmentEditor: result.installed,\n        extension: result.ext,\n      });\n    });\n  }\n\n  showImportConfirm(attachmentId) {\n    const { showImportConfirm } = this.state;\n    showImportConfirm[attachmentId] = true;\n    this.setState({ showImportConfirm });\n  }\n\n  hideImportConfirm(attachmentId) {\n    const { showImportConfirm } = this.state;\n    showImportConfirm[attachmentId] = false;\n    this.setState({ showImportConfirm });\n  }\n\n  confirmAttachmentImport(attachment) {\n    const { onImport } = this.state;\n    onImport(attachment);\n    this.hideImportConfirm(attachment.id);\n  }\n\n  renderImageEditModal() {\n    const { chosenAttachment, imageEditModalShown } = this.state;\n    const { onEdit } = this.props;\n    return (\n      <ImageAnnotationModalSVG\n        attachment={chosenAttachment}\n        isShow={imageEditModalShown}\n        handleSave={\n          () => {\n            const newAnnotation = document.getElementById('svgEditId').contentWindow.svgEditor.svgCanvas.getSvgString();\n            chosenAttachment.updatedAnnotation = newAnnotation;\n            this.setState({ imageEditModalShown: false });\n            onEdit(chosenAttachment);\n          }\n        }\n        handleOnClose={() => { this.setState({ imageEditModalShown: false }); }}\n      />\n    );\n  }\n\n  renderTemplateDownload() {\n    return (\n      <div>\n        <ButtonGroup style={{ marginBottom: '10px' }}>\n          <Button\n            bsStyle=\"primary\"\n            onClick={() => this.handleTemplateDownload()}\n          >\n            <i className=\"fa fa-download\" aria-hidden=\"true\" />\n            &nbsp;\n            Download Import Template xlsx\n          </Button>\n          <OverlayTrigger placement=\"bottom\" overlay={templateInfo}>\n            <Button\n              bsStyle=\"info\"\n            >\n              <i className=\"fa fa-info\" aria-hidden=\"true\" />\n            </Button>\n          </OverlayTrigger>\n        </ButtonGroup>\n      </div>\n    );\n  }\n\n  render() {\n    const {\n      filteredAttachments, sortDirection, attachmentEditor, extension\n    } = this.state;\n    const { onUndoDelete, attachments,wellplate } = this.props;\n\n    let combinedAttachments = filteredAttachments;\n    if(this.context.attachmentNotificationStore ){\n      combinedAttachments =  this.context.attachmentNotificationStore.getCombinedAttachments(filteredAttachments,\"Wellplate\",wellplate);\n    }\n\n    return (\n      <div className=\"attachment-main-container\">\n        {this.renderTemplateDownload()}\n        {this.renderImageEditModal()}\n        <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n          <div style={{ flex: '1', alignSelf: 'center' }}>\n            {customDropzone(this.props.onDrop)}\n          </div>\n          <div style={{ marginLeft: '20px', alignSelf: 'center' }}>\n            {attachments.length > 0\n        && sortingAndFilteringUI(\n          sortDirection,\n          this.handleSortChange,\n          this.toggleSortDirection,\n          this.handleFilterChange,\n          true\n        )}\n          </div>\n        </div>\n        {combinedAttachments.length === 0 ? (\n          <div className=\"no-attachments-text\">\n            There are currently no attachments.\n          </div>\n        ) : (\n          combinedAttachments.map((attachment) => (\n            <div className=\"attachment-row\" key={attachment.id}>\n              {attachmentThumbnail(attachment)}\n\n              <div className=\"attachment-row-text\" title={attachment.filename}>\n                {attachment.is_deleted ? (\n                  <strike>{attachment.filename}</strike>\n                ) : (\n                  attachment.filename\n                )}\n                <div className=\"attachment-row-subtext\">\n                  <div>\n                    Created:&nbsp;\n                    {formatDate(attachment.created_at)}\n                  </div>\n                  &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;\n                  <div>\n                    Size:&nbsp;\n                    <span style={{ fontWeight: 'bold', color: '#444' }}>\n                      {formatFileSize(attachment.filesize)}\n                    </span>\n                  </div>\n                </div>\n              </div>\n              <div className=\"attachment-row-actions\" style={{ display: 'flex', alignItems: 'center', gap: '5px' }}>\n                {attachment.is_deleted ? (\n                  <Button\n                    bsSize=\"xs\"\n                    bsStyle=\"danger\"\n                    className=\"attachment-button-size\"\n                    onClick={() => onUndoDelete(attachment)}\n                  >\n                    <i className=\"fa fa-undo\" aria-hidden=\"true\" />\n                  </Button>\n                ) : (\n                  <>\n                    {downloadButton(attachment)}\n                    <ThirdPartyAppButton attachment={attachment} options={this.thirdPartyApps} />\n                    {editButton(\n                      attachment,\n                      extension,\n                      attachmentEditor,\n                      attachment.aasm_state === 'oo_editing' && new Date().getTime()\n                          < (new Date(attachment.updated_at).getTime() + 15 * 60 * 1000),\n                      !attachmentEditor || attachment.aasm_state === 'oo_editing'\n                          || attachment.is_new || this.documentType(attachment.filename) === null,\n                      this.handleEdit\n                    )}\n                    {annotateButton(attachment, this)}\n                    {importButton(\n                      attachment,\n                      this.state.showImportConfirm,\n                      this.props.wellplate.changed,\n                      this.importButtonRefs,\n                      this.showImportConfirm,\n                      this.hideImportConfirm,\n                      this.confirmAttachmentImport\n                    )}\n                    &nbsp;\n                    {removeButton(attachment, this.props.onDelete, this.props.readOnly)}\n                  </>\n                )}\n              </div>\n              {attachment.updatedAnnotation && <SaveEditedImageWarning visible />}\n            </div>\n          ))\n        )}\n      </div>\n    );\n  }\n}\n\nWellplateDetailsAttachments.propTypes = {\n  wellplate: PropTypes.shape({\n    id: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ]).isRequired,\n    changed: PropTypes.bool.isRequired,\n    body: PropTypes.arrayOf(\n      PropTypes.shape({\n        id: PropTypes.string.isRequired,\n        title: PropTypes.string.isRequired,\n        type: PropTypes.string.isRequired,\n      })\n    ).isRequired,\n    attachments: PropTypes.arrayOf(\n      PropTypes.shape({\n        id: PropTypes.oneOfType([\n          PropTypes.string,\n          PropTypes.number\n        ]).isRequired,\n        aasm_state: PropTypes.string.isRequired,\n        content_type: PropTypes.string.isRequired,\n        filename: PropTypes.string.isRequired,\n        filesize: PropTypes.number.isRequired,\n        identifier: PropTypes.oneOfType([\n          PropTypes.string,\n          PropTypes.number\n        ]).isRequired,\n        thumb: PropTypes.bool.isRequired\n      })\n    )\n  }).isRequired,\n  attachments: PropTypes.arrayOf(PropTypes.shape({\n    id: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ]).isRequired,\n    aasm_state: PropTypes.string.isRequired,\n    content_type: PropTypes.string.isRequired,\n    filename: PropTypes.string.isRequired,\n    filesize: PropTypes.number.isRequired,\n    identifier: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ]).isRequired,\n    thumb: PropTypes.bool.isRequired\n  })),\n  onDrop: PropTypes.func.isRequired,\n  onDelete: PropTypes.func.isRequired,\n  onUndoDelete: PropTypes.func.isRequired,\n  onEdit: PropTypes.func.isRequired,\n  readOnly: PropTypes.bool.isRequired,\n  onImport: PropTypes.func.isRequired,\n};\n\nWellplateDetailsAttachments.defaultProps = {\n  attachments: [],\n};\n\nexport default observer(WellplateDetailsAttachments);\n","/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport html2pdf from 'html2pdf.js/src';\nimport PropTypes from 'prop-types';\nimport {\n  Well, Panel, ListGroup, ListGroupItem, ButtonToolbar, Button,\n  Tabs, Tab, Tooltip, OverlayTrigger\n} from 'react-bootstrap';\nimport { findIndex } from 'lodash';\nimport Immutable from 'immutable';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport Wellplate from 'src/apps/mydb/elements/details/wellplates/designerTab/Wellplate';\nimport WellplateList from 'src/apps/mydb/elements/details/wellplates/listTab/WellplateList';\nimport WellplateProperties from 'src/apps/mydb/elements/details/wellplates/propertiesTab/WellplateProperties';\nimport WellplateDetailsContainers from\n  'src/apps/mydb/elements/details/wellplates/analysesTab/WellplateDetailsContainers';\nimport WellplateDetailsAttachments from\n  'src/apps/mydb/elements/details/wellplates/attachmentsTab/WellplateDetailsAttachments';\nimport PrintCodeButton from 'src/components/common/PrintCodeButton';\nimport Attachment from 'src/models/Attachment';\nimport Utils from 'src/utilities/Functions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport ConfirmClose from 'src/components/common/ConfirmClose';\nimport ExportSamplesBtn from 'src/apps/mydb/elements/details/ExportSamplesBtn';\nimport ElementDetailSortTab from 'src/apps/mydb/elements/details/ElementDetailSortTab';\nimport { addSegmentTabs } from 'src/components/generic/SegmentDetails';\nimport PrivateNoteElement from 'src/apps/mydb/elements/details/PrivateNoteElement';\nimport HeaderCommentSection from 'src/components/comments/HeaderCommentSection';\nimport CommentSection from 'src/components/comments/CommentSection';\nimport CommentActions from 'src/stores/alt/actions/CommentActions';\nimport CommentModal from 'src/components/common/CommentModal';\nimport { commentActivation } from 'src/utilities/CommentHelper';\nimport { formatTimeStampsOfElement } from 'src/utilities/timezoneHelper';\nimport WellplateModel from 'src/models/Wellplate';\n\nexport default class WellplateDetails extends Component {\n  static contextType = StoreContext;\n  constructor(props) {\n    super(props);\n    const { wellplate } = props;\n    this.state = {\n      wellplate,\n      activeTab: UIStore.getState().wellplate.activeTab,\n      showWellplate: true,\n      visible: Immutable.List(),\n      currentUser: (UserStore.getState() && UserStore.getState().currentUser) || {},\n    };\n    this.handleWellplateChanged = this.handleWellplateChanged.bind(this);\n    this.onUIStoreChange = this.onUIStoreChange.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.onTabPositionChanged = this.onTabPositionChanged.bind(this);\n    this.handleSegmentsChange = this.handleSegmentsChange.bind(this);\n  }\n\n  componentDidMount() {\n    const { wellplate } = this.props;\n    const { currentUser } = this.state;\n\n    UIStore.listen(this.onUIStoreChange);\n\n    if (MatrixCheck(currentUser.matrix, commentActivation) && !wellplate.isNew) {\n      CommentActions.fetchComments(wellplate);\n    }\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const { wellplate } = this.state;\n    const nextWellplate = nextProps.wellplate;\n    if (nextWellplate.id !== wellplate.id || nextWellplate.updated_at !== wellplate.updated_at) {\n      this.setState({\n        wellplate: nextWellplate\n      });\n    }\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onUIStoreChange);\n  }\n\n  handleSegmentsChange(se) {\n    const { wellplate } = this.state;\n    const { segments } = wellplate;\n    const idx = findIndex(segments, (o) => o.segment_klass_id === se.segment_klass_id);\n    if (idx >= 0) { segments.splice(idx, 1, se); } else { segments.push(se); }\n    wellplate.segments = segments;\n    wellplate.changed = true;\n    this.setState({ wellplate });\n  }\n\n  handleSubmit() {\n    const { wellplate } = this.state;\n    this.context.attachmentNotificationStore.clearMessages();\n    LoadingActions.start();\n    if (wellplate.isNew) {\n      ElementActions.createWellplate(wellplate);\n    } else {\n      ElementActions.updateWellplate(wellplate);\n    }\n    if (wellplate.is_new) {\n      const force = true;\n      DetailActions.close(wellplate, force);\n    }\n    wellplate.updateChecksum();\n  }\n\n  handleWellplateChanged(el) {\n    const wellplate = el;\n    wellplate.changed = true;\n    this.setState({ wellplate });\n  }\n\n  handlePrint() {\n    const element = document.getElementById('wellplate-designer');\n    if (element) {\n      const opt = { filename: `${this.state.wellplate.name}-wells.pdf` };\n      html2pdf(element, opt);\n    }\n  }\n\n  handleWellsChange(wells) {\n    const { wellplate } = this.state;\n    wellplate.wells = wells;\n    this.setState({ wellplate });\n  }\n\n  handleAddReadout() {\n    const { wellplate } = this.state;\n    wellplate.wells.forEach((well) => {\n      well.readouts.push({ value: '', unit: '' });\n    });\n    this.setState({ wellplate });\n  }\n\n  handleRemoveReadout(index) {\n    const { wellplate } = this.state;\n    wellplate.wells.forEach((well) => {\n      well.readouts.splice(index, 1);\n    });\n    this.setState({ wellplate });\n  }\n\n  handleChangeProperties(change = {}) {\n    const { wellplate } = this.state;\n    const { type, value } = change;\n    switch (type) {\n      case 'name':\n        wellplate.name = value === '' ? 'New Wellplate' : value;\n        break;\n      case 'description':\n        wellplate.description = value;\n        break;\n      case 'readoutTitles':\n        wellplate.readout_titles = value;\n        break;\n      default:\n        break;\n    }\n    this.setState({ wellplate });\n  }\n\n  handleTabChange(eventKey) {\n    const showWellplate = (eventKey === 0);\n    this.setState((previousState) => ({ ...previousState, activeTab: eventKey, showWellplate }));\n    UIActions.selectTab({ tabKey: eventKey, type: 'wellplate' });\n  }\n\n  // handle attachment actions\n  handleAttachmentDrop(files) {\n    this.setState((prevState) => {\n      const newAttachments = files.map((file) => Attachment.fromFile(file));\n\n      prevState.wellplate.attachments = [\n        ...prevState.wellplate.attachments || [],\n        ...newAttachments\n      ];\n\n      prevState.wellplate.changed = true;\n\n      return { wellplate: prevState.wellplate };\n    });\n  }\n\n  handleAttachmentDelete(attachment) {\n    const { wellplate } = this.state;\n    const index = wellplate.attachments.indexOf(attachment);\n    wellplate.changed = true;\n    wellplate.attachments[index].is_deleted = true;\n    this.setState({ wellplate });\n  }\n\n  handleAttachmentImport(attachment) {\n    LoadingActions.start();\n    const { wellplate } = this.state;\n    const wellplateId = wellplate.id;\n    const attachmentId = attachment.id;\n\n    ElementActions.importWellplateSpreadsheet(wellplateId, attachmentId);\n  }\n\n  handleAttachmentUndoDelete(attachment) {\n    const { wellplate } = this.state;\n    const index = wellplate.attachments.indexOf(attachment);\n    wellplate.attachments[index].is_deleted = false;\n    this.setState({ wellplate });\n  }\n\n  handleAttachmentDownload(attachment) { // eslint-disable-line class-methods-use-this\n    Utils.downloadFile({ contents: `/api/v1/attachments/${attachment.id}`, name: attachment.filename });\n  }\n\n  handleAttachmentEdit(attachment) {\n    const { wellplate } = this.state;\n    wellplate.changed = true;\n    // update only this attachment\n    wellplate.attachments.map((currentAttachment) => {\n      if (currentAttachment.id === attachment.id) {\n        return attachment;\n      }\n      return currentAttachment;\n    });\n    this.setState({ wellplate });\n    this.forceUpdate();\n  }\n\n  onTabPositionChanged(visible) {\n    this.setState({ visible });\n  }\n\n  onUIStoreChange(state) {\n    if (state.wellplate.activeTab !== this.state.activeTab) {\n      this.setState({\n        activeTab: state.wellplate.activeTab\n      });\n    }\n  }\n\n  wellplateHeader(wellplate) {\n    const saveBtnDisplay = wellplate.isEdited || wellplate.isNew ? '' : 'none';\n    const datetp = formatTimeStampsOfElement(wellplate || {});\n\n    return (\n      <div>\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"screenDatesx\">{datetp}</Tooltip>}>\n          <span>\n            <i className=\"icon-wellplate\" />\n            &nbsp;&nbsp;\n            <span>{wellplate.name}</span>\n            &nbsp;&nbsp;\n          </span>\n        </OverlayTrigger>\n        <ElementCollectionLabels element={wellplate} placement=\"right\" />\n        <HeaderCommentSection element={wellplate} />\n        <ConfirmClose el={wellplate} />\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"saveWellplate\">Save Wellplate</Tooltip>}>\n          <Button\n            bsStyle=\"warning\"\n            bsSize=\"xsmall\"\n            className=\"button-right\"\n            onClick={() => this.handleSubmit()}\n            style={{ display: saveBtnDisplay }}\n          >\n            <i className=\"fa fa-floppy-o \" />\n          </Button>\n        </OverlayTrigger>\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"fullSample\">FullScreen</Tooltip>}>\n          <Button bsStyle=\"info\" bsSize=\"xsmall\" className=\"button-right\" onClick={() => this.props.toggleFullScreen()}>\n            <i className=\"fa fa-expand\" />\n          </Button>\n        </OverlayTrigger>\n        <PrintCodeButton element={wellplate} />\n      </div>\n    );\n  }\n\n  renderAttachmentsTab(wellplate) { /* eslint-disable react/jsx-no-bind */\n    return (\n      <ListGroup fill=\"true\">\n        <ListGroupItem>\n          <WellplateDetailsAttachments\n            wellplate={wellplate}\n            attachments={wellplate.attachments}\n            onDrop={this.handleAttachmentDrop.bind(this)}\n            onDelete={this.handleAttachmentDelete.bind(this)}\n            onUndoDelete={this.handleAttachmentUndoDelete.bind(this)}\n            onDownload={this.handleAttachmentDownload.bind(this)}\n            onImport={this.handleAttachmentImport.bind(this)}\n            onEdit={this.handleAttachmentEdit.bind(this)}\n            readOnly={false}\n          />\n        </ListGroupItem>\n      </ListGroup>\n    );\n  } /* eslint-enable */\n\n  render() {\n    const {\n      wellplate, showWellplate, visible\n    } = this.state;\n    const printButtonDisabled = wellplate.width > 12;\n    const readoutTitles = wellplate.readout_titles;\n    const exportButton = (wellplate && wellplate.isNew)\n      ? null : <ExportSamplesBtn type=\"wellplate\" id={wellplate.id} />;\n\n    const tabContentsMap = {\n      designer: (\n        <Tab eventKey=\"designer\" title=\"Designer\" key={`designer_${wellplate.id}`}>\n          {\n            !wellplate.isNew && <CommentSection section=\"wellplate_designer\" element={wellplate} />\n          }\n          <Well id=\"wellplate-designer\" style={{ overflow: 'scroll' }}>\n            <Wellplate\n              show={showWellplate}\n              size={wellplate.size}\n              readoutTitles={readoutTitles}\n              wells={wellplate.wells}\n              handleWellsChange={(w) => this.handleWellsChange(w)}\n              cols={wellplate.width}\n              width={60}\n            />\n          </Well>\n        </Tab>\n      ),\n      list: (\n        <Tab eventKey=\"list\" title=\"List\" key={`list_${wellplate.id}`}>\n          {\n            !wellplate.isNew && <CommentSection section=\"wellplate_list\" element={wellplate} />\n          }\n          <Well style={{ overflow: 'scroll', height: '100%', maxHeight: 'calc(100vh - 375px)' }}>\n            <WellplateList\n              wells={wellplate.wells}\n              readoutTitles={readoutTitles}\n              handleWellsChange={(w) => this.handleWellsChange(w)}\n            />\n          </Well>\n        </Tab>\n      ),\n      properties: (\n        <Tab eventKey=\"properties\" title=\"Properties\" key={`properties_${wellplate.id}`}>\n          {\n            !wellplate.isNew && <CommentSection section=\"wellplate_properties\" element={wellplate} />\n          }\n          <WellplateProperties\n            readoutTitles={readoutTitles}\n            wellplate={wellplate}\n            changeProperties={(c) => this.handleChangeProperties(c)}\n            handleAddReadout={(c) => this.handleAddReadout(c)}\n            handleRemoveReadout={(c) => this.handleRemoveReadout(c)}\n          />\n          <PrivateNoteElement element={wellplate} disabled={wellplate.can_update} />\n          {' '}\n          {/* For samples and reactions (<element>): disabled={!<element>.can_update} */}\n        </Tab>\n      ),\n      analyses: (\n        <Tab eventKey=\"analyses\" title=\"Analyses\" key={`analyses_${wellplate.id}`}>\n          {\n            !wellplate.isNew && <CommentSection section=\"wellplate_analyses\" element={wellplate} />\n          }\n          <ListGroupItem style={{ paddingBottom: 20 }}>\n            <WellplateDetailsContainers\n              wellplate={wellplate}\n              parent={this}\n            />\n          </ListGroupItem>\n        </Tab>\n      ),\n      attachments: (\n        <Tab eventKey=\"attachments\" title=\"Attachments\" key={`attachments_${wellplate.id}`}>\n          {this.renderAttachmentsTab(wellplate)}\n        </Tab>\n      ),\n\n    };\n\n    const tabTitlesMap = {};\n    addSegmentTabs(wellplate, this.handleSegmentsChange, tabContentsMap);\n\n    const tabContents = [];\n    visible.forEach((value) => {\n      const tabContent = tabContentsMap[value];\n      if (tabContent) { tabContents.push(tabContent); }\n    });\n\n    // eslint-disable-next-line react/destructuring-assignment\n    const activeTab = (this.state.activeTab !== 0 && this.state.activeTab) || visible[0];\n\n    return (\n      <Panel bsStyle={wellplate.isPendingToSave ? 'info' : 'primary'} className=\"eln-panel-detail\">\n        <Panel.Heading>{this.wellplateHeader(wellplate)}</Panel.Heading>\n        <Panel.Body>\n          <ElementDetailSortTab\n            type=\"wellplate\"\n            availableTabs={Object.keys(tabContentsMap)}\n            tabTitles={tabTitlesMap}\n            onTabPositionChanged={this.onTabPositionChanged}\n          />\n          <Tabs activeKey={activeTab} onSelect={(event) => this.handleTabChange(event)} id=\"wellplateDetailsTab\">\n            {tabContents}\n          </Tabs>\n          <ButtonToolbar>\n            <Button bsStyle=\"primary\" onClick={() => DetailActions.close(wellplate)}>Close</Button>\n            {\n              wellplate.changed ? (\n                <Button bsStyle=\"warning\" onClick={() => this.handleSubmit()}>\n                  {wellplate.isNew ? 'Create' : 'Save'}\n                </Button>\n              ) : <div />\n            }\n            {exportButton}\n            <Button\n              bsStyle=\"primary\"\n              onClick={() => this.handlePrint()}\n              disabled={printButtonDisabled}\n            >\n              Print Wells\n            </Button>\n          </ButtonToolbar>\n          <CommentModal element={wellplate} />\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nWellplateDetails.propTypes = {\n  wellplate: PropTypes.instanceOf(WellplateModel).isRequired,\n  toggleFullScreen: PropTypes.func.isRequired,\n};\n","export default class CollectionUtils {\n  static isReadOnly(currentCollection, userId, isSync) {\n    if (currentCollection.permission_level > 0) { return false; }\n\n    const isShared = currentCollection.is_shared\n            && currentCollection.shared_by_id !== userId;\n\n    const isSynced = isSync\n            && currentCollection.shared_by_id !== userId;\n\n    return isSynced || isShared;\n  }\n}\n","import React from 'react';\nimport CellLinesFetcher from 'src/fetchers/CellLinesFetcher';\nimport PropTypes from 'prop-types';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport {\n  Col, Row, ControlLabel, FormControl\n} from 'react-bootstrap';\nimport Creatable from 'react-select3/creatable';\n\nexport default class CellLineName extends React.Component {\n  // eslint-disable-next-line react/static-property-placement\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      nameSuggestions: []\n    };\n  }\n\n  componentDidMount() {\n    CellLinesFetcher.getAllCellLineNames()\n      .then((data) => data.map((x) => ({ value: x.id, label: x.name, name: x.name })))\n      .then((data) => {\n        this.setState({ nameSuggestions: data });\n      });\n  }\n\n  static renderNameSuggestion(name, src) {\n    return (\n      <span style={{ display: 'block', textAlign: 'left' }}>\n        {name}\n        {' '}\n        (\n        {src}\n        )\n      </span>\n    );\n  }\n\n  render() {\n    const { cellLineDetailsStore } = this.context;\n    const { nameSuggestions } = this.state;\n    const { id, name, readOnly } = this.props;\n    const className = cellLineDetailsStore.cellLines(id).cellLineName\n      ? 'cell-line-name-autocomplete'\n      : 'cell-line-name-autocomplete invalid';\n    if (readOnly) {\n      return (\n        <Row>\n          <Col componentClass={ControlLabel} sm={3}>Cell line name *</Col>\n          <Col sm={9}>\n            <FormControl\n              disabled\n              className=\"\"\n              type=\"text\"\n              value={cellLineDetailsStore.cellLines(id).cellLineName}\n              onChange={() => {}}\n            />\n          </Col>\n        </Row>\n      );\n    }\n\n    return (\n      <div className=\"cell-line-name\">\n        <Row>\n          <Col componentClass={ControlLabel} sm={3}>Cell line name *</Col>\n          <Col sm={9}>\n            <Creatable\n              className={className}\n              onChange={(e) => {\n                if (typeof e.value === 'number') {\n                  const currentEntry = nameSuggestions.filter((x) => x.value === e.value);\n                  if (currentEntry.length > 0) {\n                    cellLineDetailsStore.changeCellLineName(id, currentEntry[0].name);\n                    CellLinesFetcher.getCellLineMaterialById(e.value)\n                      .then((result) => {\n                        cellLineDetailsStore.setMaterialProperties(id, result);\n                      });\n                  }\n                } else {\n                  cellLineDetailsStore.changeCellLineName(id, e.value);\n                }\n              }}\n              onInputChange={(e, action) => {\n                if (action.action === 'input-change') {\n                  cellLineDetailsStore.changeCellLineName(id, e);\n                }\n              }}\n              options={nameSuggestions}\n              placeholder=\"enter new cell line name or choose from existing ones \"\n              defaultInputValue={name}\n            />\n          </Col>\n        </Row>\n      </div>\n    );\n  }\n}\n\nCellLineName.propTypes = {\n  id: PropTypes.string.isRequired,\n  readOnly: PropTypes.bool.isRequired,\n  name: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport {\n  Button, OverlayTrigger, Tooltip,\n  FormControl\n} from 'react-bootstrap';\n\nclass Amount extends React.Component {\n  // eslint-disable-next-line react/static-property-placement\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n    const { initialValue } = this.props;\n    this.state = {\n      currentValue: initialValue,\n      invalidInput: false\n    };\n  }\n\n  getStyleClass(cellLineItem) {\n    const { invalidInput } = this.state;\n    return cellLineItem.isAmountValid() && !invalidInput ? '' : 'invalid-input';\n  }\n\n  renderDecimalRepresentation() {\n    const { cellLineDetailsStore } = this.context;\n    const { cellLineId, readOnly } = this.props;\n    const { currentValue } = this.state;\n    const cellLineItem = cellLineDetailsStore.cellLines(cellLineId);\n\n    return (\n      <FormControl\n        disabled={readOnly}\n        className={this.getStyleClass(cellLineItem)}\n        value={currentValue}\n        onChange={(e) => {\n          const { value } = e.target;\n          this.setState({\n            currentValue: e.target.value,\n            invalidInput: Number.isNaN(value)\n          });\n\n          if (!Number.isNaN(value)) {\n            cellLineDetailsStore.changeAmount(cellLineId, Number(e.target.value));\n          }\n        }}\n      />\n    );\n  }\n\n  renderScienceViewButton() {\n    const { currentValue } = this.state;\n\n    return (\n      <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"detailed-info-button\">Switch representation mode</Tooltip>}>\n        <Button\n          className=\"button-right\"\n          bsSize=\"xsmall\"\n          onClick={(event) => {\n            event.stopPropagation();\n            const isScientific = String(currentValue).toUpperCase().includes('E');\n            const formattedValue = isScientific\n              ? Number(currentValue)\n              : Number(currentValue).toExponential();\n            this.setState({ currentValue: formattedValue });\n          }}\n        >\n          <i className=\"fa fa-calculator\" aria-hidden=\"true\" />\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n\n  render() {\n    const { cellLineDetailsStore } = this.context;\n    const { invalidInput } = this.state;\n    const { cellLineId } = this.props;\n    const cellLineItem = cellLineDetailsStore.cellLines(cellLineId);\n    const scienceViewButton = cellLineItem.isAmountValid(cellLineItem) && !invalidInput\n      ? this.renderScienceViewButton()\n      : null;\n\n    return (\n      <div>\n        <div className=\"floating amount\">\n          {this.renderDecimalRepresentation()}\n        </div>\n        <div className=\"scientific-button\">\n          {scienceViewButton}\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default observer(Amount);\n\nAmount.propTypes = {\n  cellLineId: PropTypes.string.isRequired,\n  readOnly: PropTypes.bool.isRequired,\n  initialValue: PropTypes.number.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nexport default class InvalidPropertyWarning extends React.Component {\n  // eslint-disable-next-line react/static-property-placement\n  static contextType = StoreContext;\n\n  render() {\n    const { item, propsToCheck } = this.props;\n    const { cellLineDetailsStore } = this.context;\n    const cellLineItem = cellLineDetailsStore.cellLines(item.id);\n    const validationInfo = cellLineDetailsStore.checkInputValidity(cellLineItem.id);\n    const icon = propsToCheck.every((property) => !validationInfo.includes(property))\n      ? null\n      : (\n        <div className=\"floating missing-property\">\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"missing-property\">Required attributes are missing</Tooltip>}>\n            <i className=\"fa fa-exclamation-triangle\" />\n          </OverlayTrigger>\n        </div>\n      );\n    return icon;\n  }\n}\nInvalidPropertyWarning.propTypes = {\n  item: PropTypes.shape({\n    id: PropTypes.string.isRequired\n  }).isRequired,\n  propsToCheck: PropTypes.arrayOf(PropTypes.string).isRequired\n};\n","import React from 'react';\nimport {\n  Col, Row, PanelGroup, Panel, FormControl, ControlLabel,\n} from 'react-bootstrap';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport Creatable from 'react-select3/creatable';\nimport { observer } from 'mobx-react';\nimport PropTypes from 'prop-types';\nimport Select from 'react-select';\nimport CellLineName from 'src/apps/mydb/elements/details/cellLines/propertiesTab/CellLineName';\nimport Amount from 'src/apps/mydb/elements/details/cellLines/propertiesTab/Amount';\nimport InvalidPropertyWarning from 'src/apps/mydb/elements/details/cellLines/propertiesTab/InvalidPropertyWarning';\n\nclass GeneralProperties extends React.Component {\n  // eslint-disable-next-line react/static-property-placement\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      openPanel: 'common-properties',\n    };\n  }\n\n  renderOptionalAttribute(attributeName, defaultValue, onChangeCallBack) {\n    return this.renderAttribute(attributeName, defaultValue, onChangeCallBack, true);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  renderAttribute(\n    attributeName,\n    defaultValue,\n    onChangeCallBack,\n    optional = false,\n    numeric = false\n  ) {\n    const { readOnly } = this.props;\n\n    let styleClass = '';\n    if (!optional) {\n      if (numeric) {\n        const integerPositiveInput = Number.isInteger(defaultValue) && defaultValue > 0;\n        styleClass = integerPositiveInput ? '' : 'invalid-input';\n      } else {\n        const noInput = defaultValue.trim() === '';\n        styleClass = noInput ? 'invalid-input' : '';\n      }\n    }\n    return (\n      <div>\n        <Row className={\"property-row\"}>\n          <Col componentClass={ControlLabel} sm={3}>{attributeName}</Col>\n          <Col sm={9}>\n            <FormControl\n              disabled={readOnly}\n              className={styleClass}\n              type=\"text\"\n              value={defaultValue}\n              onChange={onChangeCallBack}\n            />\n          </Col>\n        </Row>\n      </div>\n    );\n  }\n\n  renderBiosafetyLevel(item) {\n    const { readOnly } = this.props;\n\n    const { cellLineDetailsStore } = this.context;\n    const options = [\n      { value: 'S0', label: 'Biosafety level 0' },\n      { value: 'S1', label: 'Biosafety level 1' },\n      { value: 'S2', label: 'Biosafety level 2' },\n      { value: 'S3', label: 'Biosafety level 3' }\n    ];\n    return (\n      <div>\n        <Row className={\"property-row\"}>\n          <Col componentClass={ControlLabel} sm={3}>Biosafety level</Col>\n          <Col sm={9}>\n            <Select\n              disabled={readOnly}\n              options={options}\n              clearable={false}\n              value={item.bioSafetyLevel}\n              onChange={(e) => { cellLineDetailsStore.changeBioSafetyLevel(item.id, e.value); }}\n            />\n          </Col>\n        </Row>\n      </div>\n    );\n  }\n\n  renderAmount(item) {\n    const { cellLineDetailsStore } = this.context;\n    const { readOnly } = this.props;\n    const styleClassUnit = item.unit === '' ? 'invalid-input' : '';\n    const options = [\n      { value: 'g', label: 'g' },\n      { value: 'units/cm²', label: 'units/cm²' },\n    ];\n\n    const unitComponent = readOnly ? (\n      <FormControl\n        disabled\n        className=\"\"\n        type=\"text\"\n        value={item.unit}\n        onChange={() => {}}\n      />\n    ) : (\n      <Creatable\n        className={styleClassUnit}\n        onChange={(e) => { cellLineDetailsStore.changeUnit(item.id, e.value); }}\n        onInputChange={(e, action) => {\n          if (action.action === 'input-change') { cellLineDetailsStore.changeUnit(item.id, e); }\n        }}\n        options={options}\n        placeholder=\"choose/enter unit\"\n        defaultInputValue={item.unit}\n      />\n    );\n\n    return (\n      <div>\n        <Row>\n          <Col componentClass={ControlLabel} sm={3}>Amount *</Col>\n          <Col sm={6}>\n            <Amount\n              cellLineId={item.id}\n              initialValue={item.amount}\n              readOnly={readOnly}\n            />\n          </Col>\n          <Col sm={3} className=\"amount-unit\">\n            {unitComponent}\n          </Col>\n        </Row>\n      </div>\n    );\n  }\n\n  renderPanelHeaderIcon(panelName) {\n    const { openPanel } = this.state;\n    const arrowType = openPanel === panelName\n      ? 'fa fa-angle-double-down'\n      : 'fa fa-angle-double-right';\n    return (\n      <div className=\"floating-right\">\n        <i className={arrowType} aria-hidden=\"true\" />\n      </div>\n    );\n  }\n\n  render() {\n    const { item, readOnly } = this.props;\n    const { cellLineDetailsStore } = this.context;\n    const cellLineItem = cellLineDetailsStore.cellLines(item.id);\n    const cellLineId = item.id;\n    const { openPanel } = this.state;\n    return (\n      <div>\n        <div />\n        <PanelGroup\n          class=\"cell-line-properties\"\n          id={`cellLinePropertyPanelGroupOf:${cellLineItem.id}`}\n          activeKey={openPanel}\n          accordion\n          onSelect={() => {}}\n        >\n          <Panel\n            eventKey=\"common-properties\"\n            key=\"common-properties\"\n          >\n            <Panel.Heading onClick={() => { this.setState({ openPanel: 'common-properties' }); }}>\n              <InvalidPropertyWarning item={item} propsToCheck={['cellLineName', 'source']} />\n              Common Properties\n              {this.renderPanelHeaderIcon('common-properties')}\n            </Panel.Heading>\n            <Panel.Body collapsible>\n\n              <CellLineName\n                id={cellLineId}\n                name={cellLineItem.cellLineName}\n                readOnly={readOnly}\n              />\n              {this.renderAttribute('Source *', cellLineItem.source, (e) => {\n                cellLineDetailsStore.changeSource(cellLineId, e.target.value);\n              })}\n\n              {this.renderOptionalAttribute('Disease', cellLineItem.disease, (e) => {\n                cellLineDetailsStore.changeDisease(cellLineId, e.target.value);\n              })}\n              {this.renderOptionalAttribute('Organism', cellLineItem.organism, (e) => {\n                cellLineDetailsStore.changeOrganism(cellLineId, e.target.value);\n              })}\n              {this.renderOptionalAttribute('Tissue', cellLineItem.tissue, (e) => {\n                cellLineDetailsStore.changeTissue(cellLineId, e.target.value);\n              })}\n              {this.renderOptionalAttribute('Growth medium', cellLineItem.growthMedium, (e) => {\n                cellLineDetailsStore.changeGrowthMedium(cellLineId, e.target.value);\n              })}\n              {this.renderOptionalAttribute('Mutation', cellLineItem.mutation, (e) => {\n                cellLineDetailsStore.changeMutation(cellLineId, e.target.value);\n              })}\n              {this.renderOptionalAttribute('Variant', cellLineItem.variant, (e) => {\n                cellLineDetailsStore.changeVariant(cellLineId, e.target.value);\n              })}\n              {this.renderBiosafetyLevel(cellLineItem)}\n              {this.renderOptionalAttribute(\n                'Cryopreservation medium',\n                cellLineItem.cryopreservationMedium,\n                (e) => { cellLineDetailsStore.changeCryoMedium(cellLineId, e.target.value); }\n              )}\n              {this.renderOptionalAttribute('Opt. growth temperature', cellLineItem.optimalGrowthTemperature, (e) => {\n                cellLineDetailsStore.changeOptimalGrowthTemp(cellLineId, Number(e.target.value));\n              })}\n              {this.renderOptionalAttribute('Gender', cellLineItem.gender, (e) => {\n                cellLineDetailsStore.changeGender(cellLineId, e.target.value);\n              })}\n              {this.renderOptionalAttribute('Cell type', cellLineItem.cellType, (e) => {\n                cellLineDetailsStore.changeCellType(cellLineId, e.target.value);\n              })}\n              {this.renderOptionalAttribute('Description', cellLineItem.materialDescription, (e) => {\n                cellLineDetailsStore.changeMaterialDescription(cellLineId, e.target.value);\n              })}\n            </Panel.Body>\n          </Panel>\n\n          <Panel\n            eventKey=\"specific-properties\"\n            key=\"specific-properties\"\n          >\n            <Panel.Heading onClick={() => { this.setState({ openPanel: 'specific-properties' }); }}>\n              <InvalidPropertyWarning item={item} propsToCheck={['passage', 'amount', 'unit']} />\n              Item specific properties\n              {this.renderPanelHeaderIcon('specific-properties')}\n            </Panel.Heading>\n            <Panel.Body collapsible>\n              {this.renderAmount(cellLineItem)}\n              {this.renderAttribute('Passage *', cellLineItem.passage, (e) => {\n                cellLineDetailsStore.changePassage(cellLineId, Number(e.target.value));\n              }, false, true)}\n              {this.renderOptionalAttribute('Contamination', cellLineItem.contamination, (e) => {\n                cellLineDetailsStore.changeContamination(cellLineId, e.target.value);\n              })}\n              {this.renderOptionalAttribute('Name of specific probe', cellLineItem.itemName, (e) => {\n                cellLineDetailsStore.changeItemName(cellLineId, e.target.value);\n              })}\n              {this.renderOptionalAttribute('Description', cellLineItem.itemDescription, (e) => {\n                cellLineDetailsStore.changeItemDescription(cellLineId, e.target.value);\n              })}\n            </Panel.Body>\n          </Panel>\n        </PanelGroup>\n\n      </div>\n    );\n  }\n}\n\nexport default observer(GeneralProperties);\n\nGeneralProperties.propTypes = {\n  readOnly: PropTypes.bool.isRequired,\n  item: PropTypes.shape({\n    id: PropTypes.string.isRequired\n  }).isRequired\n};\n","import React from 'react';\nimport QuillViewer from 'src/components/QuillViewer';\nimport PropTypes from 'prop-types';\nimport { previewContainerImage } from 'src/utilities/imageHelper';\nimport ImageModal from 'src/components/common/ImageModal';\n\nexport default class OrderModeHeader extends React.Component {\n  renderDeletedContainer() {\n    const { container } = this.props;\n    const kind = container.extended_metadata.kind && container.extended_metadata.kind !== '';\n    const titleKind = kind ? (` - Type: ${(container.extended_metadata.kind.split('|')[1] || container.extended_metadata.kind).trim()}`) : '';\n\n    const status = container.extended_metadata.status && container.extended_metadata.status !== '';\n    const titleStatus = status ? (` - Status: ${container.extended_metadata.status}`) : '';\n\n    return (\n      <div style={{ width: '100%' }}>\n        <strike>\n          {container.name}\n          {titleKind}\n          {titleStatus}\n        </strike>\n      </div>\n    );\n  }\n\n  renderNotDeletedContainer() {\n    const { container } = this.props;\n    const content = container.extended_metadata.content || { ops: [{ insert: '' }] };\n    const kind = container.extended_metadata.kind && container.extended_metadata.kind !== '';\n    const titleKind = kind ? (` - Type: ${(container.extended_metadata.kind.split('|')[1] || container.extended_metadata.kind).trim()}`) : '';\n    const contentOneLine = {\n      ops: content.ops.map((x) => {\n        const c = { ...x };\n        if (c.insert) c.insert = c.insert.replace(/\\n/g, ' ');\n        return c;\n      }),\n    };\n\n    return (\n      <div className=\"analysis-header\">\n        <div className=\"preview\">{this.renderImagePreview(container)}</div>\n        <div className=\"abstract\">\n          <div className=\"lower-text\">\n            <div className=\"main-title\">{container.name}</div>\n            <div className=\"sub-title\">\n              Type:\n              {' '}\n              {titleKind}\n            </div>\n            <div className=\"sub-title\">\n              Status:\n              {' '}\n              {container.extended_metadata.status || ''}\n            </div>\n            <div className=\"desc sub-title\">\n              <span style={{ float: 'left', marginRight: '5px' }}>\n                Content:\n              </span>\n              <QuillViewer value={contentOneLine} preview />\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  // eslint-disable-next-line  class-methods-use-this\n  renderImagePreview(container) {\n    const previewImg = previewContainerImage(container);\n    const fetchNeeded = false;\n    const fetchId = 1;\n\n    return (\n      <div className=\"preview\">\n        <ImageModal\n          hasPop={false}\n          previewObject={{\n            src: previewImg\n          }}\n          popObject={{\n            title: container.name,\n            src: previewImg,\n            fetchNeeded,\n            fetchId\n          }}\n        />\n      </div>\n    );\n  }\n\n  render() {\n    const { container } = this.props;\n    if (container.is_deleted) {\n      return this.renderDeletedContainer();\n    }\n    return this.renderNotDeletedContainer();\n  }\n}\n\nOrderModeHeader.propTypes = {\n  container: PropTypes.shape({\n    extended_metadata: PropTypes.shape({\n      status: PropTypes.string,\n      kind: PropTypes.string,\n      report: PropTypes.bool,\n      // eslint-disable-next-line react/forbid-prop-types\n      content: PropTypes.object,\n    }),\n    name: PropTypes.string,\n    is_deleted: PropTypes.bool,\n    id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n\n  }).isRequired\n};\n","import React, { Component } from 'react';\nimport { Panel } from 'react-bootstrap';\nimport OrderModeHeader from 'src/apps/mydb/elements/details/cellLines/analysesTab/OrderModeHeader';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport { compose } from 'redux';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport PropTypes from 'prop-types';\nimport Container from 'src/models/Container';\n\nconst dragHooks = {\n\n  beginDrag(props) {\n    props.startDragFunction();\n    return {\n      id: props.container.id,\n      updateFunction: props.updateFunction\n    };\n  },\n  endDrag(props, monitor) {\n    props.endDragFunction();\n    if (monitor.getDropResult() == null) {\n      return;\n    }\n    const currentAnalysisContainer = ElementStore.getState().currentElement.container.children[0];\n    Container.switchPositionOfChildContainer(\n      currentAnalysisContainer.children,\n      props.container.id,\n      monitor.getDropResult().id\n    );\n    props.updateFunction(true);\n  }\n\n};\n\nconst dragCollectHooks = (connect, monitor) => ({\n\n  connectDragSource: connect.dragSource(),\n  isDragging: monitor.isDragging(),\n});\n\nconst dropHooks = {\n  drop(targetProps) {\n    return { id: targetProps.container.id };\n  },\n  hover(props, monitor, component) {\n    props.hoverOverItem(component.props.container.id);\n  }\n};\n\nconst dropCollectHooks = (connect, monitor) => (\n  {\n    connectDropTarget: connect.dropTarget(),\n    isOver: monitor.isOver(),\n    canDrop: monitor.canDrop(),\n  }\n);\n\nclass OrderModeRow extends Component {\n  render() {\n    const { connectDragSource, connectDropTarget, container } = this.props;\n\n    return (\n      compose(connectDragSource, connectDropTarget)(\n        <div>\n          <Panel>\n            <Panel.Heading>\n              <OrderModeHeader container={container} />\n            </Panel.Heading>\n            <Panel.Body collapsible />\n          </Panel>\n        </div>\n      )\n    );\n  }\n}\n\nexport default compose(\n  DragSource(DragDropItemTypes.CONTAINER, dragHooks, dragCollectHooks),\n  DropTarget(DragDropItemTypes.CONTAINER, dropHooks, dropCollectHooks)\n)(OrderModeRow);\n\nOrderModeRow.propTypes = {\n  container: PropTypes.shape({\n    id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n  }).isRequired,\n  // eslint-disable-next-line  react/forbid-prop-types\n  connectDragSource: PropTypes.any.isRequired,\n  // eslint-disable-next-line  react/forbid-prop-types\n  connectDropTarget: PropTypes.any.isRequired\n};\n","import React from 'react';\nimport QuillViewer from 'src/components/QuillViewer';\nimport PropTypes from 'prop-types';\nimport { previewContainerImage } from 'src/utilities/imageHelper';\nimport ImageModal from 'src/components/common/ImageModal';\nimport { Button } from 'react-bootstrap';\n\nexport default class EditModeHeader extends React.Component {\n  handleUndoDeletionOfContainer(container, e) {\n    const { parent } = this.props;\n    e.stopPropagation();\n    // eslint-disable-next-line   no-param-reassign\n    container.is_deleted = false;\n    parent.handleChange(container);\n  }\n\n  handleDeleteContainer(container, e) {\n    const { parent } = this.props;\n    e.stopPropagation();\n\n    // eslint-disable-next-line no-restricted-globals, no-alert\n    if (confirm('Delete the analysis?')) {\n      // eslint-disable-next-line no-param-reassign\n      container.is_deleted = true;\n      parent.handleChange(container);\n    }\n  }\n\n  renderDeletedContainer() {\n    const { container } = this.props;\n    const kind = container.extended_metadata.kind && container.extended_metadata.kind !== '';\n    const titleKind = kind\n      ? (` - Type: ${(container.extended_metadata.kind.split('|')[1] || container.extended_metadata.kind).trim()}`)\n      : '';\n\n    const status = container.extended_metadata.status && container.extended_metadata.status !== '';\n    const titleStatus = status ? (` - Status: ${container.extended_metadata.status}`) : '';\n\n    return (\n      <div style={{ width: '100%' }}>\n        <strike>\n          {container.name}\n          {titleKind}\n          {titleStatus}\n        </strike>\n        <Button\n          className=\"pull-right\"\n          bsSize=\"xsmall\"\n          bsStyle=\"danger\"\n          onClick={(e) => this.handleUndoDeletionOfContainer(container, e)}\n        >\n          <i className=\"fa fa-undo\" />\n        </Button>\n      </div>\n    );\n  }\n\n  renderNotDeletedContainer() {\n    const { container, readOnly } = this.props;\n    const content = container.extended_metadata.content || { ops: [{ insert: '' }] };\n\n    const kind = container.extended_metadata.kind?.split('|')[1] || '';\n\n    const contentOneLine = {\n      ops: content.ops.map((x) => {\n        const c = { ...x };\n        if (c.insert) c.insert = c.insert.replace(/\\n/g, ' ');\n        return c;\n      }),\n    };\n\n    return (\n      <div className=\"analysis-header\">\n        <div className=\"preview\">{this.renderImagePreview(container)}</div>\n        <div className=\"abstract\">\n          <Button\n            disabled={readOnly}\n            bsSize=\"xsmall\"\n            bsStyle=\"danger\"\n            className=\"button-right\"\n            onClick={(e) => { this.handleDeleteContainer(container, e); }}\n          >\n            <i className=\"fa fa-trash\" />\n          </Button>\n          <div className=\"lower-text\">\n            <div className=\"main-title\">{container.name}</div>\n            <div className=\"sub-title\">\n              Type:\n              {' '}\n              {kind}\n            </div>\n            <div className=\"sub-title\">\n              Status:\n              {' '}\n              {container.extended_metadata.status || ''}\n            </div>\n            <div className=\"desc sub-title\">\n              <span style={{ float: 'left', marginRight: '5px' }}>\n                Content:\n              </span>\n              <QuillViewer value={contentOneLine} preview />\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  renderImagePreview() {\n    const { container } = this.props;\n    const previewImg = previewContainerImage(container);\n    const fetchNeeded = false;\n    const fetchId = 1;\n\n    return (\n      <div className=\"preview\">\n        \n        <ImageModal\n          hasPop={true}\n          disableClick={false}\n          previewObject={{\n            src: previewImg\n          }}\n          popObject={{\n            title: container.name,\n            src: previewImg,\n            fetchNeeded,\n            fetchId\n          }}\n        />\n      </div>\n    );\n  }\n\n  render() {\n    const { container } = this.props;\n    if (container.is_deleted) {\n      return this.renderDeletedContainer();\n    }\n    return this.renderNotDeletedContainer();\n  }\n}\n\nEditModeHeader.propTypes = {\n  container: PropTypes.shape({\n    extended_metadata: PropTypes.shape({\n      status: PropTypes.string,\n      kind: PropTypes.string,\n      report: PropTypes.bool,\n      // eslint-disable-next-line react/forbid-prop-types\n      content: PropTypes.object,\n    }),\n    name: PropTypes.string,\n    is_deleted: PropTypes.bool,\n    id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n\n  }).isRequired,\n  readOnly: PropTypes.bool.isRequired,\n  parent: PropTypes.shape({\n    handleChange: PropTypes.func.isRequired\n  }).isRequired,\n  element: PropTypes.shape({\n    id: PropTypes.string.isRequired,\n    type: PropTypes.string.isRequired,\n    isNew: PropTypes.bool.isRequired,\n  }).isRequired\n};\n","import React, { Component } from 'react';\nimport EditModeHeader from 'src/apps/mydb/elements/details/cellLines/analysesTab/EditModeHeader';\nimport { Panel } from 'react-bootstrap';\nimport ContainerComponent from 'src/components/container/ContainerComponent';\nimport PropTypes from 'prop-types';\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport default class EditModeRow extends Component {\n  \n  render() {\n    const { container, parent, element,readOnly } = this.props;\n    return (\n      <Panel\n        eventKey={container.id}\n        key={container.id}\n      >\n        <Panel.Heading\n          onClick={() => parent.handleClickOnPanelHeader(container.id)}\n        >\n          <EditModeHeader \n            element={element} \n            container={container}\n            parent={parent} \n            readOnly={readOnly}/>\n        </Panel.Heading>\n        <Panel.Body collapsible>\n          <ContainerComponent\n            analysisMethodTitle=\"Type (BioAssay Ontology)\"\n            ontologyName=\"bao\"\n            templateType=\"researchPlan\"\n            readOnly={readOnly}\n            disabled={false}\n            container={container}\n            onChange={() => parent.handleChange(container)}\n          />\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nEditModeRow.propTypes = {\n  container: PropTypes.shape({\n    id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n  }).isRequired,\n  parent: PropTypes.shape({\n    handleClickOnPanelHeader: PropTypes.func.isRequired,\n    handleChange: PropTypes.func.isRequired\n  }).isRequired,\n  // eslint-disable-next-line react/forbid-prop-types\n  element: PropTypes.object.isRequired,\n  readOnly: PropTypes.bool.isRequired\n};\n","import React, { Component } from 'react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport { observer } from 'mobx-react';\nimport { PanelGroup, Button } from 'react-bootstrap';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport OrderModeRow from 'src/apps/mydb/elements/details/cellLines/analysesTab/OrderModeRow';\nimport EditModeRow from 'src/apps/mydb/elements/details/cellLines/analysesTab/EditModeRow';\nimport PropTypes from 'prop-types';\n\nclass AnalysesContainer extends Component {\n  // eslint-disable-next-line react/static-property-placement\n  static contextType = StoreContext;\n\n  constructor() {\n    super();\n    this.state = {\n      openPanel: 'none',\n      mode: 'edit'\n    };\n    this.handleChange.bind(this);\n    this.handleHoverOver.bind(this);\n  }\n\n  handleAdd() {\n    const { item } = this.props;\n    const { cellLineDetailsStore } = this.context;\n    const newContainer = cellLineDetailsStore.addEmptyContainer(item.id);\n    const { currentElement } = ElementStore.getState();\n    currentElement.container.children[0].children.push(newContainer);\n    this.handleChange(true);\n  }\n\n  // eslint-disable-next-line react/no-unused-class-component-methods\n  handleClickOnPanelHeader(containerId) {\n    const { openPanel } = this.state;\n    if (openPanel === containerId) {\n      this.setState({ openPanel: 'none' });\n    } else {\n      this.setState({ openPanel: containerId });\n    }\n  }\n\n  handleStartDrag(container) {\n    this.setState({ draggingContainer: container.id });\n  }\n\n  handleEndDrag() {\n    this.setState({\n      draggingContainer: '',\n      lastHoveredContainer: ''\n    });\n  }\n\n  handleModeToggle() {\n    const { mode } = this.state;\n    if (mode === 'edit') {\n      this.setState({ mode: 'order' });\n    } else {\n      this.setState({ mode: 'edit' });\n    }\n  }\n\n  handleHoverOver(containerId) {\n    const { lastHoveredContainer } = this.state;\n    if (lastHoveredContainer !== undefined\n       && lastHoveredContainer === containerId) {\n      return;\n    }\n\n    this.setState({ lastHoveredContainer: containerId });\n  }\n\n  handleChange(changed = false) {\n    const { item } = this.props;\n    if (changed) {\n      const { cellLineDetailsStore } = this.context;\n      cellLineDetailsStore.cellLines(item.id).setChanged(true);\n    }\n    this.forceUpdate();\n  }\n\n  renderAddButton() {\n    const { readOnly } = this.props;\n\n    return (\n      <div className=\"add-button\">\n        <Button\n          bsSize=\"xsmall\"\n          bsStyle=\"success\"\n          onClick={() => this.handleAdd()}\n          disabled={readOnly}\n        >\n          Add analysis\n        </Button>\n      </div>\n    );\n  }\n\n  renderOrderModeButton() {\n    const { mode } = this.state;\n    const { readOnly } = this.props;\n    const buttonText = mode === 'order' ? 'Order mode' : 'Edit mode';\n    const buttonIcon = mode === 'order' ? 'fa fa-reorder' : 'fa fa-edit';\n    const styleClass = mode === 'order' ? 'orderMode' : 'editMode';\n    return (\n      <div className=\"order-mode-button\">\n        <Button\n          disabled={readOnly}\n          bsSize=\"xsmall\"\n          className=\"\"\n          bsStyle={styleClass}\n          onClick={() => this.handleModeToggle()}\n        >\n          <i className={buttonIcon} aria-hidden=\"true\" />\n          {buttonText}\n        </Button>\n      </div>\n    );\n  }\n\n  renderContainerPanel() {\n    const { currentElement } = ElementStore.getState();\n    const { draggingContainer, lastHoveredContainer } = this.state;\n    const containers = currentElement.container.children[0].children;\n\n    const { mode } = this.state;\n    const { readOnly } = this.props;\n\n    const analysisRows = mode === 'edit'\n      ? containers.map((container) => (\n        <EditModeRow\n          key={container.id}\n          parent={this}\n          element={currentElement}\n          container={container}\n          readOnly={readOnly}\n        />\n      ), this)\n      : containers.map(\n        (container) => {\n          const chosenElementClass = container.id === draggingContainer ? 'chosen-element' : '';\n          const lastHoveredClass = lastHoveredContainer === container.id ? ' last-hovered-element' : '';\n          const styleClass = chosenElementClass + lastHoveredClass;\n          return (\n            <div className={styleClass} key={container.id}>\n              <OrderModeRow\n                updateFunction={(e) => { this.handleChange(e); }}\n                startDragFunction={() => { this.handleStartDrag(container); }}\n                endDragFunction={() => { this.handleEndDrag(container); }}\n                hoverOverItem={(e) => { this.handleHoverOver(e); }}\n                container={container}\n              />\n            </div>\n          );\n        },\n\n        this\n      );\n\n    const { openPanel } = this.state;\n    if (containers.length > 0) {\n      return (\n        <div className=\"analyses\">\n          <PanelGroup\n            id={`cellLineAnalysisPanelGroupOf:${currentElement.id}`}\n            defaultActiveKey=\"none\"\n            activeKey={openPanel}\n            accordion\n            onSelect={() => {}}\n          >\n            {analysisRows}\n          </PanelGroup>\n        </div>\n      );\n    }\n    return <div className=\"no-analyses-panel\">There are currently no analyses</div>;\n  }\n\n  render() {\n    return (\n      <div className=\"analysis-container\">\n        <div>\n          {this.renderOrderModeButton()}\n          {this.renderAddButton()}\n        </div>\n        { this.renderContainerPanel()}\n      </div>\n    );\n  }\n}\nexport default observer(AnalysesContainer);\n\nAnalysesContainer.propTypes = {\n  readOnly: PropTypes.bool.isRequired,\n  item: PropTypes.shape({\n    id: PropTypes.string.isRequired,\n  }).isRequired\n};\n","import React from 'react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport ElementCollectionLabels from 'src/apps/mydb/elements/labels/ElementCollectionLabels';\nimport { observer } from 'mobx-react';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport PropTypes from 'prop-types';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport CollectionUtils from 'src/models/collection/CollectionUtils';\n\nimport {\n  Panel, ButtonToolbar, Button,\n  Tabs, Tab, OverlayTrigger, Tooltip\n} from 'react-bootstrap';\nimport GeneralProperties from 'src/apps/mydb/elements/details/cellLines/propertiesTab/GeneralProperties';\nimport AnalysesContainer from 'src/apps/mydb/elements/details/cellLines/analysesTab/AnalysesContainer';\nimport DetailsTabLiteratures from 'src/apps/mydb/elements/details/literature/DetailsTabLiteratures';\n\nclass CellLineDetails extends React.Component {\n  // eslint-disable-next-line react/static-property-placement\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      activeTab: 'tab1',\n      readOnly: this.isReadOnly()\n    };\n    this.onTabPositionChanged = this.onTabPositionChanged.bind(this);\n  }\n\n  handleSubmit(cellLineItem) {\n    // eslint-disable-next-line react/destructuring-assignment\n    const mobXItem = this.context.cellLineDetailsStore.cellLines(this.props.cellLineItem.id);\n    cellLineItem.adoptPropsFromMobXModel(mobXItem);\n\n    if (cellLineItem.is_new) {\n      DetailActions.close(cellLineItem, true);\n      ElementActions.createCellLine(cellLineItem);\n    } else {\n      ElementActions.updateCellLine(cellLineItem);\n    }\n    mobXItem.setChanged(false);\n  }\n\n  handleClose(cellLineItem) {\n    const { cellLineDetailsStore } = this.context;\n    const mobXItem = cellLineDetailsStore.cellLines(cellLineItem.id);\n    // eslint-disable-next-line no-alert\n    if (!mobXItem.changed || window.confirm('Unsaved data will be lost.Close sample?')) {\n      cellLineDetailsStore.removeCellLineFromStore(cellLineItem.id);\n      DetailActions.close(cellLineItem, true);\n    }\n  }\n\n  handleTabChange(eventKey) {\n    this.setState({ activeTab: eventKey });\n  }\n\n  onTabPositionChanged(visible) {\n    // eslint-disable-next-line react/no-unused-state\n    this.setState({ visible });\n  }\n\n  isReadOnly() {\n    const { currentCollection, isSync } = UIStore.getState();\n    const { currentUser } = UserStore.getState();\n\n    return CollectionUtils.isReadOnly(\n      currentCollection,\n      currentUser.id,\n      isSync\n    );\n  }\n\n  renderHeaderContent() {\n    const { cellLineItem } = this.props;\n\n    return (\n      <div>\n\n        <ElementCollectionLabels\n          class=\"collection-label floating\"\n          element={cellLineItem}\n          key={cellLineItem.id}\n          placement=\"right\"\n        />\n        <div className=\"floating header\">\n          {' '}\n          <i className=\"icon-cell_line\" />\n          {cellLineItem.short_label}\n        </div>\n\n        {this.renderCloseHeaderButton()}\n        {this.renderEnlargenButton()}\n        {this.renderSaveButton()}\n        {this.renderSaveButton(true)}\n      </div>\n    );\n  }\n\n  renderEnlargenButton() {\n    const { toggleFullScreen } = this.props;\n    return (\n      <Button\n        bsStyle=\"info\"\n        bsSize=\"xsmall\"\n        className=\"button-right\"\n        onClick={toggleFullScreen}\n      >\n        <i className=\"fa fa-expand\" />\n      </Button>\n    );\n  }\n\n  renderSaveButton(closeAfterClick = false) {\n    const { cellLineItem } = this.props;\n    const { cellLineDetailsStore } = this.context;\n    const mobXItem = cellLineDetailsStore.cellLines(cellLineItem.id);\n    const validationInfo = cellLineDetailsStore.checkInputValidity(cellLineItem.id);\n    const disabled = validationInfo.length > 0 || !mobXItem.changed;\n    if (disabled) { return null; }\n\n    const action = closeAfterClick\n      ? () => { this.handleSubmit(cellLineItem); DetailActions.close(cellLineItem, true); }\n      : () => { this.handleSubmit(cellLineItem); };\n\n    const toolTipMessage = closeAfterClick ? 'save and close' : 'save';\n    const icons = closeAfterClick\n      ? (\n        <div>\n          <i className=\"fa fa-floppy-o\" />\n          <i className=\"fa fa-times\" />\n        </div>\n      )\n      : <i className=\"fa fa-floppy-o\" />;\n\n    return (\n      <OverlayTrigger\n        placement=\"bottom\"\n        overlay={<Tooltip>{toolTipMessage}</Tooltip>}\n      >\n        <Button disabled={disabled} bsStyle=\"warning\" bsSize=\"xsmall\" className=\"button-right\" onClick={action}>\n          {icons}\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n\n  renderCloseHeaderButton() {\n    const { cellLineItem } = this.props;\n\n    return (\n      <Button\n        bsStyle=\"danger\"\n        bsSize=\"xsmall\"\n        className=\"button-right\"\n        onClick={() => { this.handleClose(cellLineItem); }}\n      >\n        <i className=\"fa fa-times\" />\n      </Button>\n    );\n  }\n\n  renderSubmitButton() {\n    const { cellLineItem } = this.props;\n    const { cellLineDetailsStore } = this.context;\n    const mobXItem = cellLineDetailsStore.cellLines(cellLineItem.id);\n    const validationInfo = cellLineDetailsStore.checkInputValidity(cellLineItem.id);\n    const disabled = validationInfo.length > 0 || !mobXItem.changed;\n    const buttonText = cellLineItem.is_new ? 'Create' : 'Save';\n    const disabledButton = (\n      <Button\n        bsStyle=\"warning\"\n        disabled\n        onClick={() => { this.handleSubmit(cellLineItem); }}\n      >\n        {buttonText}\n      </Button>\n    );\n    const enabledButton = (\n      <Button\n        bsStyle=\"warning\"\n        onClick={() => { this.handleSubmit(cellLineItem); }}\n      >\n        {buttonText}\n      </Button>\n    );\n\n    return disabled ? disabledButton : enabledButton;\n  }\n\n  render() {\n    const { cellLineItem } = this.props;\n\n    if (!cellLineItem) { return (null); }\n    // eslint-disable-next-line react/destructuring-assignment\n    this.context.cellLineDetailsStore.convertCellLineToModel(cellLineItem);\n    const { readOnly } = this.state;\n    const { activeTab } = this.state;\n    return (\n      <Panel\n        className=\"eln-panel-detail\"\n      >\n        <Panel.Heading className=\"blue-background\">{this.renderHeaderContent()}</Panel.Heading>\n        <Panel.Body>\n          <Tabs activeKey={activeTab} onSelect={(event) => this.handleTabChange(event)} id=\"cell-line-details-tab\">\n            <Tab eventKey=\"tab1\" title=\"Properties\" key=\"tab1\">\n              <GeneralProperties\n                item={cellLineItem}\n                readOnly={readOnly}\n              />\n            </Tab>\n            <Tab eventKey=\"tab2\" title=\"Analyses\" key=\"tab2\">\n              <AnalysesContainer\n                item={cellLineItem}\n                readOnly={readOnly}\n              />\n            </Tab>\n            <Tab eventKey=\"tab3\" title=\"References\" key=\"tab3\" disabled={cellLineItem.is_new}>\n              <DetailsTabLiteratures\n                readOnly={readOnly}\n                element={cellLineItem}\n                literatures={cellLineItem.is_new === true ? cellLineItem.literatures : null}\n              />\n            </Tab>\n          </Tabs>\n          <ButtonToolbar>\n            <Button bsStyle=\"primary\" onClick={() => { this.handleClose(cellLineItem); }}>\n              Close\n            </Button>\n            {this.renderSubmitButton()}\n\n          </ButtonToolbar>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nexport default observer(CellLineDetails);\n\nCellLineDetails.propTypes = {\n  cellLineItem: PropTypes.shape({\n    id: PropTypes.string.isRequired,\n    itemName: PropTypes.string.isRequired,\n    cellLineName: PropTypes.string.isRequired,\n    short_label: PropTypes.string.isRequired,\n    is_new: PropTypes.bool.isRequired,\n    // eslint-disable-next-line react/forbid-prop-types\n    literatures: PropTypes.arrayOf(PropTypes.object),\n    disease: PropTypes.string.isRequired\n  }).isRequired,\n  toggleFullScreen: PropTypes.func.isRequired\n};\n","/* eslint-disable react/destructuring-assignment */\nimport ComputeTaskContainer from 'src/apps/mydb/elements/details/computeTasks/ComputeTaskContainer';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport DeviceDetails from 'src/apps/mydb/elements/details/devices/DeviceDetails';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport FormatContainer from 'src/apps/mydb/elements/details/formats/FormatContainer';\nimport GenericElDetails from 'src/components/generic/GenericElDetails';\nimport GraphContainer from 'src/apps/mydb/elements/details/GraphContainer';\nimport LiteratureDetails from 'src/apps/mydb/elements/details/LiteratureDetails';\nimport MetadataContainer from 'src/components/metadata/MetadataContainer';\nimport PredictionContainer from 'src/apps/mydb/elements/details/predictions/PredictionContainer';\nimport React, { Component } from 'react';\nimport ReactionDetails from 'src/apps/mydb/elements/details/reactions/ReactionDetails';\nimport ReportContainer from 'src/apps/mydb/elements/details/reports/ReportContainer';\nimport ResearchPlanDetails from 'src/apps/mydb/elements/details/researchPlans/ResearchPlanDetails';\nimport SampleDetails from 'src/apps/mydb/elements/details/samples/SampleDetails';\nimport ScreenDetails from 'src/apps/mydb/elements/details/screens/ScreenDetails';\nimport StickyDiv from 'react-stickydiv';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport WellplateDetails from 'src/apps/mydb/elements/details/wellplates/WellplateDetails';\nimport CellLineDetails from 'src/apps/mydb/elements/details/cellLines/CellLineDetails';\nimport {\n  Tabs, Tab, Label, Button\n} from 'react-bootstrap';\n\nimport { getPublicationId } from 'src/components/chemrepo/publication-utils';\n\nconst tabInfoHash = {\n  metadata: {\n    title: 'Metadata',\n    iconEl: (\n      <span>\n        <i className=\"fa fa-file-text-o\" />\n        &nbsp;&nbsp;\n        <i className=\"fa fa-book\" />\n      </span>\n    )\n  },\n  report: {\n    title: 'Report',\n    iconEl: (\n      <span>\n        <i className=\"fa fa-file-text-o\" />\n        &nbsp;&nbsp;\n        <i className=\"fa fa-pencil\" />\n      </span>\n    )\n  },\n  prediction: {\n    title: 'Synthesis Prediction',\n    iconEl: (\n      <span>\n        <i className=\"fa fa-percent\" />\n      </span>\n    )\n  },\n  deviceCtrl: {\n    title: 'Measurement',\n    iconEl: (\n      <span>\n        <i className=\"fa fa-bar-chart\" />\n        <i className=\"fa fa-cogs\" />\n      </span>\n    )\n  },\n  format: {\n    title: 'Format',\n    iconEl: (\n      <span>\n        <i className=\"fa fa-magic\" />\n      </span>\n    )\n  },\n  graph: {\n    title: 'Graph',\n    iconEl: (\n      <span>\n        <i className=\"fa fa-area-chart\" />\n      </span>\n    )\n  },\n  task: {\n    title: 'Task',\n    iconEl: (\n      <span>\n        <i className=\"fa fa-wrench\" />\n      </span>\n    )\n  },\n  literature_map: {\n    title: 'Literature',\n    iconEl: (\n      <span>\n        <i className=\"fa fa-book\" aria-hidden=\"true\" />\n      </span>\n    )\n  }\n};\n\nexport default class ElementDetails extends Component {\n  constructor(props) {\n    super(props);\n    const { selecteds, activeKey, deletingElement } = ElementStore.getState();\n    this.state = {\n      offsetTop: 70,\n      fullScreen: false,\n      selecteds,\n      activeKey,\n      deletingElement,\n      showTooltip: false,\n      genericEls: UserStore.getState().genericEls || [],\n    };\n\n    this.handleResize = this.handleResize.bind(this);\n    this.toggleFullScreen = this.toggleFullScreen.bind(this);\n    this.toggleCommentScreen = this.toggleCommentScreen.bind(this);\n    this.onDetailChange = this.onDetailChange.bind(this);\n    this.checkSpectraMessage = this.checkSpectraMessage.bind(this);\n  }\n\n  componentDidMount() {\n    window.addEventListener('resize', this.handleResize);\n    window.scrollTo(window.scrollX, window.scrollY + 1);\n    // imitate scroll event to make StickyDiv element visible in current area\n    ElementStore.listen(this.onDetailChange);\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    return true;\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener('resize', this.handleResize);\n    ElementStore.unlisten(this.onDetailChange);\n  }\n\n  toggleCommentScreen(t) {\n    this.setState({ fullScreen: t });\n  }\n\n  handleResize() {\n    const windowHeight = window.innerHeight || 1;\n    if (this.state.fullScreen || windowHeight < 500) {\n      this.setState({ offsetTop: 0 });\n    } else {\n      this.setState({ offsetTop: 70 });\n    }\n  }\n\n  onDetailChange(state) {\n    const {\n      selecteds, activeKey, deletingElement, spectraMsg\n    } = state;\n    this.setState((prevState) => ({\n      ...prevState, selecteds, activeKey, deletingElement\n    }));\n    this.checkSpectraMessage(spectraMsg);\n  }\n\n  toggleFullScreen() {\n    const { fullScreen } = this.state;\n    this.setState({ fullScreen: !fullScreen });\n  }\n\n  checkSpectraMessage(spectraMsg) {\n    if (spectraMsg) {\n      const { showedSpcMsgID } = this.state;\n      if (!showedSpcMsgID || showedSpcMsgID !== spectraMsg.message_id) {\n        this.setState({ showedSpcMsgID: spectraMsg.message_id });\n        alert(spectraMsg.content.data);\n      }\n    }\n  }\n\n  content(_el) {\n    const el = _el;\n    const isPending = el?.tag?.taggable_data?.publish_pending;\n\n    el.sealed = isPending || !!getPublicationId(el);\n\n    if (el && el.klassType === 'GenericEl' && el.type != null) {\n      return (\n        <GenericElDetails\n          genericEl={el}\n          toggleFullScreen={this.toggleFullScreen}\n        />\n      );\n    }\n\n    switch (el.type) {\n      case 'sample':\n        return (\n          <SampleDetails\n            sample={el}\n            toggleFullScreen={this.toggleFullScreen}\n            toggleCommentScreen={this.toggleCommentScreen}\n            fullScreen={this.state.fullScreen}\n          />\n        );\n      case 'reaction':\n        return (\n          <ReactionDetails\n            reaction={el}\n            toggleFullScreen={this.toggleFullScreen}\n            toggleCommentScreen={this.toggleCommentScreen}\n            fullScreen={this.state.fullScreen}\n          />\n        );\n      case 'wellplate':\n        return (\n          <WellplateDetails\n            wellplate={el}\n            toggleFullScreen={this.toggleFullScreen}\n          />\n        );\n      case 'screen':\n        return (\n          <ScreenDetails\n            screen={el}\n            toggleFullScreen={this.toggleFullScreen}\n          />\n        );\n      case 'deviceCtrl':\n        return (\n          <DeviceDetails\n            device={el}\n            toggleFullScreen={this.toggleFullScreen}\n          />\n        );\n      case 'research_plan':\n        return (\n          <ResearchPlanDetails\n            researchPlan={el}\n            toggleFullScreen={this.toggleFullScreen}\n          />\n        );\n      case 'metadata':\n        return <MetadataContainer metadata={el} />;\n      case 'report':\n        return <ReportContainer report={el} />;\n      case 'prediction':\n        return <PredictionContainer prediction={el} />;\n      case 'format':\n        return <FormatContainer format={el} />;\n      case 'graph':\n        return <GraphContainer graph={el} />;\n      case 'task':\n        return <ComputeTaskContainer task={el} />;\n      case 'literature_map':\n        return <LiteratureDetails literatureMap={el} />;\n      case 'cell_line':\n        return <CellLineDetails cellLineItem={el}  toggleFullScreen={this.toggleFullScreen}/>;\n      default:\n        return (\n          <div style={{ textAlign: 'center' }}>\n            <br />\n            <h1>{el.id.substring(el.id.indexOf('error:') + 6)}</h1>\n            <h3><i className=\"fa fa-eye-slash fa-5x\" /></h3>\n            <Button\n              bsStyle=\"danger\"\n              onClick={() => DetailActions.close(el, true)}\n            >\n              Close this window\n            </Button>\n          </div>\n        );\n    }\n  }\n\n  tabTitle(el, elKey) {\n    const bsStyle = el.isPendingToSave ? 'info' : 'primary';\n    const focusing = elKey === this.state.activeKey;\n\n    let iconElement = (<i className={`icon-${el.type}`} />);\n\n    const tab = tabInfoHash[el.type] || {};\n    const title = tab.title || el.title();\n    if (tab.iconEl) { iconElement = tab.iconEl; }\n    if (el.element_klass) { iconElement = (<i className={`${el.element_klass.icon_name}`} />); }\n    const icon = focusing ? (iconElement) : (<Label bsStyle={bsStyle || ''}>{iconElement}</Label>);\n    return (\n      <div>\n        {icon}\n        &nbsp;&nbsp;&nbsp;\n        {title}\n        &nbsp;\n      </div>\n    );\n  }\n\n  render() {\n    const {\n      fullScreen, selecteds, activeKey, offsetTop\n    } = this.state;\n    const fScrnClass = fullScreen ? 'full-screen' : 'normal-screen';\n\n    const selectedElements = selecteds.map((el, i) => {\n      if (!el) return (<span />);\n      const key = `${el.type}-${el.id}`;\n      return (\n        <Tab\n          key={key}\n          eventKey={i}\n          unmountOnExit\n          title={this.tabTitle(el, i)}\n        >\n          {this.content(el)}\n        </Tab>\n      );\n    });\n\n    return (\n      <div>\n        <StickyDiv zIndex={fullScreen ? 9 : 2} offsetTop={offsetTop}>\n          <div className={fScrnClass}>\n            <Tabs\n              id=\"elements-tabs\"\n              activeKey={activeKey}\n              onSelect={DetailActions.select}\n            >\n              {selectedElements}\n            </Tabs>\n          </div>\n        </StickyDiv>\n      </div>\n    );\n  }\n}\n","import React, { Component } from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport ElementsList from 'src/apps/mydb/elements/list/ElementsList';\nimport ElementDetails from 'src/apps/mydb/elements/details/ElementDetails';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\n\nexport default class Elements extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentElement: null\n    };\n\n    this.handleOnChange = this.handleOnChange.bind(this);\n  }\n\n  componentDidMount() {\n    ElementStore.listen(this.handleOnChange);\n  }\n\n  componentWillUnmount() {\n    ElementStore.unlisten(this.handleOnChange);\n  }\n\n  handleOnChange(state) {\n    const { currentElement } = state;\n    this.setState({ currentElement });\n  }\n\n  render() {\n    const { currentElement } = this.state;\n    const showReport = (currentElement || []).type === 'report';\n\n    let md = 12;\n    const overview = !(currentElement);\n    let page = null;\n\n    if (currentElement) {\n      md = 5;\n      page = (\n        <Col md={7} className=\"small-col\">\n          <ElementDetails currentElement={currentElement} />\n        </Col>\n      );\n    }\n\n    return (\n      <div>\n        <Col md={md} className=\"small-col\">\n          <ElementsList overview={overview} showReport={showReport} />\n        </Col>\n        {page}\n      </div>\n    );\n  }\n}\n\n","import _ from 'lodash';\nimport alt from 'src/stores/alt/alt';\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nclass InboxStore {\n  constructor() {\n    this.state = {\n      inbox: {},\n      cache: [],\n      deleteEl: null,\n      numberOfAttachments: 0,\n      checkedIds: [],\n      checkedAll: false,\n      checkedDeviceIds: [],\n      checkedDeviceAll: false,\n      inboxModalVisible: false,\n      inboxVisible: false,\n      currentPage: 1,\n      itemsPerPage: 20,\n      currentContainerPage: 1,\n      currentUnsortedBoxPage: 1,\n      currentDeviceBoxPage: 1,\n      dataItemsPerPage: 35,\n      totalPages: null,\n      activeDeviceBoxId: null,\n      inboxSize: 'Medium',\n    };\n\n    this.bindListeners({\n      handleToggleInboxModal: InboxActions.toggleInboxModal,\n      handleShowInboxModal: InboxActions.showInboxModal,\n      handleFetchInbox: InboxActions.fetchInbox,\n      handleFetchInboxCount: InboxActions.fetchInboxCount,\n      handleFetchInboxContainer: InboxActions.fetchInboxContainer,\n      handleRemoveAttachmentFromList: InboxActions.removeAttachmentFromList,\n      handleRemoveUnlinkedAttachmentFromList: InboxActions.removeUnlinkedAttachmentFromList,\n      handleRemoveDatasetFromList: InboxActions.removeDatasetFromList,\n      handleDeleteAttachment: InboxActions.deleteAttachment,\n      handleBulkDeleteAttachment: InboxActions.bulkDeleteAttachments,\n      handleDeleteContainer: InboxActions.deleteContainer,\n      handleBackToInbox: InboxActions.backToInbox,\n      handleDeleteContainerLink: InboxActions.deleteContainerLink,\n      handleCheckedAll: InboxActions.checkedAll,\n      handleCheckedIds: InboxActions.checkedIds,\n      handleCheckDeviceAttachments: InboxActions.checkDeviceAttachments,\n      handleCheckedDeviceIds: InboxActions.checkedDeviceIds,\n      handleCheckedDeviceAll: InboxActions.checkedDeviceAll,\n      handlePrevClick: InboxActions.prevClick,\n      handleNextClick: InboxActions.nextClick,\n\n      handleUpdateCreateElementDict: [\n        ElementActions.createSample,\n        ElementActions.updateSample,\n        ElementActions.createReaction,\n      ],\n      handleUpdateCreateElement: [\n        ElementActions.updateReaction,\n        ElementActions.createWellplate,\n        ElementActions.updateWellplate,\n        ElementActions.createScreen,\n        ElementActions.updateScreen,\n      ],\n      handleClose: DetailActions.close,\n      handleConfirmDelete: DetailActions.confirmDelete,\n      handleDeleteElement: ElementActions.deleteElementsByUIState,\n      handleSetPagination: InboxActions.setInboxPagination,\n      setInboxVisible: InboxActions.setInboxVisible,\n      setActiveDeviceBoxId: InboxActions.setActiveDeviceBoxId,\n      handleFetchInboxUnsorted: InboxActions.fetchInboxUnsorted,\n      handleChangeInboxFilter: InboxActions.changeInboxFilter,\n      handleChangeInboxSize: InboxActions.changeInboxSize,\n    });\n  }\n\n  handleToggleInboxModal() {\n    const { inboxModalVisible } = this.state;\n    this.setState({ inboxModalVisible: !inboxModalVisible });\n    this.emitChange();\n  }\n\n  handleShowInboxModal() {\n    const { inboxModalVisible } = this.state;\n    if (!inboxModalVisible) {\n      this.setState({ inboxModalVisible: true, inboxVisible: true });\n      this.emitChange();\n    }\n  }\n\n  handleFetchInbox(payload) {\n    const { itemsPerPage, currentDeviceBoxPage } = this.state;\n    this.state.inbox = payload.inbox;\n    this.state.totalPages = Math.ceil(this.state.inbox.count / itemsPerPage);\n    this.state.activeDeviceBoxId = payload.activeDeviceBoxId ? payload.activeDeviceBoxId : null;\n\n    if (this.state.activeDeviceBoxId) {\n      InboxActions.fetchInboxContainer(this.state.activeDeviceBoxId, currentDeviceBoxPage);\n    }\n\n    this.sync();\n    this.countAttachments();\n  }\n\n  handleFetchInboxUnsorted(payload) {\n    this.setState((prevState) => ({\n      inbox: {\n        ...prevState.inbox,\n        unlinked_attachments: payload.unlinked_attachments,\n        inbox_count: payload.inbox_count,\n      },\n      currentUnsortedBoxPage: 1,\n    }));\n  }\n\n  handleChangeInboxFilter(filter) {\n    const userState = UserStore.getState();\n    if (!userState.profile.filters) {\n      userState.profile.data.filters = {};\n    }\n    userState.profile.data.filters[filter.name] = {\n      sort: filter.sort,\n    };\n\n    const { currentPage, itemsPerPage, activeDeviceBoxId } = this.state;\n    InboxActions.fetchInbox({ currentPage, itemsPerPage, activeDeviceBoxId });\n  }\n\n  handleChangeInboxSize(inboxSize) {\n    this.state.inboxSize = inboxSize;\n  }\n\n  handleFetchInboxCount(result) {\n    this.state.numberOfAttachments = result.inbox_count;\n  }\n\n  handleFetchInboxContainer(payload) {\n    const { inbox } = this.state;\n    const updatedChildren = inbox.children.map((child) => {\n      if (child.id === payload.inbox.id) {\n        return {\n          ...child,\n          children_count: payload.inbox.children_count,\n          children: payload.inbox.children,\n        };\n      }\n      return child;\n    });\n\n    this.setState((prevState) => ({\n      inbox: {\n        ...prevState.inbox,\n        inbox_count: payload.inbox.inbox_count,\n        children: updatedChildren,\n      },\n      currentContainerPage: payload.currentContainerPage,\n      activeDeviceBoxId: payload.containerId\n    }));\n\n    this.sync();\n    this.countAttachments();\n  }\n\n  handleRemoveAttachmentFromList(attachment) {\n    const { inbox } = this.state;\n\n    inbox.children.forEach((deviceBox) => {\n      deviceBox.children.forEach((dataset) => {\n        const index = dataset.attachments.indexOf(attachment);\n        if (index !== -1) {\n          dataset.attachments.splice(index, 1);\n          this.state.cache.push(attachment);\n        }\n      });\n    });\n    this.setState(inbox);\n    this.countAttachments();\n  }\n\n  handlePrevClick() {\n    this.setState((prevState) => ({\n      currentUnsortedBoxPage: prevState.currentUnsortedBoxPage - 1,\n      checkedAll: false,\n      checkedIds: [],\n    }));\n  }\n\n  handleNextClick = () => {\n    this.setState((prevState) => ({\n      currentUnsortedBoxPage: prevState.currentUnsortedBoxPage + 1,\n      checkedAll: false,\n      checkedIds: [],\n    }));\n  };\n\n  handleRemoveUnlinkedAttachmentFromList(attachment) {\n    const { inbox } = this.state;\n\n    const index = inbox.unlinked_attachments.indexOf(attachment);\n    if (index !== -1) {\n      inbox.unlinked_attachments.splice(index, 1);\n      this.state.cache.push(attachment);\n    }\n\n    this.setState(inbox);\n    this.countAttachments();\n  }\n\n  handleRemoveDatasetFromList(dataset) {\n    let inbox = this.state.inbox;\n\n    inbox.children.forEach(device_box => {\n      var index = device_box.children.indexOf(dataset)\n      if (index != -1) {\n        device_box.children[index].attachments.forEach(attachment => {\n          this.state.cache.push(attachment)\n        })\n        device_box.children[index].attachments = []\n      }\n    })\n\n    this.setState(inbox)\n    this.countAttachments();\n  }\n\n  handleDeleteAttachment(payload) {\n    if (payload?.fromUnsorted) {\n      const { inbox } = this.state;\n\n      const updatedAttachments = inbox.unlinked_attachments.filter(\n        (attachment) => attachment.id !== payload?.result.id\n      );\n\n      this.setState({\n        inbox: {\n          ...inbox,\n          unlinked_attachments: updatedAttachments,\n        },\n      });\n      this.countAttachments();\n    } else {\n      const { activeDeviceBoxId, currentContainerPage } = this.state;\n\n      InboxActions.fetchInboxContainer(activeDeviceBoxId, currentContainerPage);\n    }\n  }\n\n  handleBulkDeleteAttachment(payload) {\n    if (payload?.fromUnsorted) {\n      const { inbox } = this.state;\n\n      const updatedAttachments = inbox.unlinked_attachments.filter(\n        (attachment) => attachment.id !== payload?.result.id\n      );\n\n      this.setState({\n        inbox: {\n          ...inbox,\n          unlinked_attachments: updatedAttachments,\n        },\n      });\n      this.countAttachments();\n    } else {\n      const { activeDeviceBoxId, currentContainerPage } = this.state;\n\n      InboxActions.fetchInboxContainer(activeDeviceBoxId, currentContainerPage);\n    }\n  }\n\n  handleDeleteContainerLink(result) {\n    const { currentPage, itemsPerPage } = this.state;\n    InboxActions.fetchInbox({ currentPage, itemsPerPage });\n  }\n\n  handleDeleteContainer(result) {\n    const { inbox, activeDeviceBoxId, currentContainerPage } = this.state;\n\n    const parentIndex = inbox.children.findIndex((inboxItem) => inboxItem.id === result.id);\n\n    if (parentIndex >= 0) {\n      const newInbox = { ...this.state.inbox };\n      newInbox.children.splice(parentIndex, 1);\n      this.setState({ inbox: newInbox });\n    } else {\n      const updatedChildren = inbox.children.map((parent) => {\n        if (parent.children && parent.children.length > 0) {\n          const newParent = { ...parent };\n          newParent.children = parent.children.filter((child) => child.id !== result.id);\n          return newParent;\n        }\n        return parent;\n      });\n\n      const updatedInbox = { ...inbox, children: updatedChildren };\n      this.setState({ inbox: updatedInbox });\n    }\n  }\n\n  handleBackToInbox(attachment) {\n    var attachments = this.state.cache.filter(function (item) {\n      if (item.id == attachment.id) {\n        return item\n      }\n    })\n\n    if (attachments.length == 1) {\n      var index = this.state.cache.indexOf(attachments[0])\n      this.state.cache.splice(index, 1)\n      const { currentPage, itemsPerPage } = this.state;\n      InboxActions.fetchInbox({ currentPage, itemsPerPage });\n    } else {\n      InboxActions.deleteContainerLink(attachment)\n    }\n  }\n\n  getAttachments(containers, all_attachments) {\n    if (containers) {\n      containers.forEach(container => {\n        all_attachments.push.apply(all_attachments, container.attachments)\n        this.getAttachments(container.children, all_attachments)\n      })\n    }\n    return all_attachments\n  }\n\n  updateCache(attachments) {\n    this.state.cache = _.differenceBy(this.state.cache, attachments, 'id')\n  }\n\n  handleUpdateCreateElementDict({ element, closeView }) {\n    this.handleUpdateCreateElement(element);\n  }\n\n  handleUpdateCreateElement(element) {\n    if (element && element.isEdited && element.container) {\n      const all_attachments = this.getAttachments(element.container.children, [])\n      this.updateCache(all_attachments);\n      const { currentPage, itemsPerPage } = this.state;\n      InboxActions.fetchInbox({ currentPage, itemsPerPage });\n    }\n  }\n\n  handleClose({ deleteEl, force }) {\n    this.state.deleteEl = deleteEl\n  }\n\n  handleConfirmDelete(confirm) {\n    if (confirm) {\n      this.handleUpdateCreateElement(this.state.deleteEl)\n    }\n    this.state.deleteEl = null\n  }\n\n  handleDeleteElement(result) {\n    // if (!result || !result.selecteds) { return null; }\n    this.waitFor(ElementStore.dispatchToken);\n    const { selecteds } = ElementStore.getState();\n    selecteds.forEach(element => this.handleUpdateCreateElement(element));\n  }\n\n  handleSetPagination(pagination) {\n    const { currentPage } = pagination;\n    this.state.currentPage = currentPage;\n  }\n\n  setInboxVisible(params) {\n    const { inboxVisible } = params;\n    this.state.inboxVisible = inboxVisible;\n  }\n\n  setActiveDeviceBoxId(deviceBoxId) {\n    this.state.activeDeviceBoxId = deviceBoxId;\n  }\n\n  sync() {\n    let inbox = this.state.inbox\n\n    inbox.children.forEach(device_box => {\n      device_box.children.forEach(dataset => {\n        dataset.attachments = _.differenceBy(dataset.attachments, this.state.cache, 'id')\n      })\n    })\n    inbox.unlinked_attachments = _.differenceBy(inbox.unlinked_attachments, this.state.cache, 'id')\n\n    this.setState(inbox)\n  }\n\n  countAttachments() {\n    const { inbox } = this.state;\n    this.state.numberOfAttachments = inbox.inbox_count + inbox.unlinked_attachments.length;\n  }\n\n  handleCheckedAll(params) {\n    const { checkedAll } = this.state;\n    this.setState(({ checkedAll: params.type }));\n    return checkedAll;\n  }\n\n  handleCheckedIds(params) {\n    const {\n      inbox, checkedIds, currentUnsortedBoxPage, dataItemsPerPage,\n    } = this.state;\n    const unlinkedAttachments = inbox.unlinked_attachments;\n    const startIndex = (currentUnsortedBoxPage - 1) * dataItemsPerPage;\n    const endIndex = startIndex + dataItemsPerPage;\n    const currentAttachments = unlinkedAttachments.slice(startIndex, endIndex);\n\n    if (params.type && params.range === 'child') {\n      ArrayUtils.pushUniq(checkedIds, params.ids);\n    } else if (params.type === false && params.range === 'child') {\n      ArrayUtils.removeFromListByValue(checkedIds || [], params.ids);\n    } else if (params.range === 'all' && params.type === true) {\n      currentAttachments.forEach((attachment) => ArrayUtils.pushUniq(checkedIds, attachment.id));\n\n      this.handleCheckedAll(params);\n    } else if (params.range === 'all' && params.type === false) {\n      currentAttachments.forEach((attachment) => ArrayUtils.removeFromListByValue(checkedIds || [], attachment.id));\n      this.handleCheckedAll(params);\n    }\n\n    // If unsortedBox, remove devicebox attachments from checkedIds\n    if (this.state.activeDeviceBoxId === -1) {\n      for (let i = checkedIds.length - 1; i >= 0; i--) {\n        const checkedId = checkedIds[i];\n        const hasCorrespondingAttachment = currentAttachments.some((attachment) => attachment.id === checkedId);\n        if (!hasCorrespondingAttachment) {\n          checkedIds.splice(i, 1);\n        }\n      }\n    }\n  }\n\n  handleCheckedDeviceAll(params) {\n    const { checkedDeviceAll, inbox, activeDeviceBoxId } = this.state;\n\n    if (params.range === 'all') {\n      if (params.type) {\n        const currentDeviceBox = inbox.children.find((deviceBox) => deviceBox.id === activeDeviceBoxId);\n        if (currentDeviceBox) {\n          const allDatasetIdsFlat = currentDeviceBox.children.map((dataset) => dataset.id);\n          const allAttachments = currentDeviceBox.children.reduce((acc, dataset) => {\n            acc.push(...dataset.attachments);\n            return acc;\n          }, []);\n          const allAttachmentsFlat = _.flatten(allAttachments).map((attachment) => attachment.id);\n\n          this.setState({\n            checkedDeviceIds: allDatasetIdsFlat,\n            checkedIds: allAttachmentsFlat,\n          });\n        }\n      } else {\n        this.setState({\n          checkedDeviceIds: [],\n          checkedIds: [],\n        });\n      }\n    }\n\n    this.setState({ checkedDeviceAll: !checkedDeviceAll });\n  }\n\n  handleCheckedDeviceIds(params) {\n    this.setState({\n      checkedDeviceIds: params.checkedDeviceIds,\n      checkedIds: params.checkedIds\n    });\n  }\n\n  handleCheckDeviceAttachments(params) {\n    const { checkedIds } = this.state;\n\n    const newCheckedIds = (params.isSelected)\n      ? checkedIds.filter((checkedId) => checkedId !== params.ids)\n      : [...checkedIds, params.ids];\n\n    this.setState({ checkedIds: newCheckedIds });\n  }\n}\n\nexport default alt.createStore(InboxStore, 'InboxStore');\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Tooltip } from 'react-bootstrap';\nimport InboxFetcher from 'src/fetchers/InboxFetcher';\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\n\nexport default class MoveToAnalysisButton extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showTooltip: false,\n      loading: false,\n      matchingAnalyses: []\n    };\n  }\n\n  fetchMatchingSamples() {\n    this.setState({ loading: true });\n    const { attachment } = this.props;\n\n    InboxFetcher.fetchMatchingSamples(attachment.filename)\n      .then((result) => {\n        this.setState({ matchingAnalyses: result.samples, loading: false });\n      }).catch((errorMessage) => {\n        this.setState({ loading: false });\n        console.log(errorMessage);\n      });\n  }\n\n  toggleTooltip() {\n    const { showTooltip } = this.state;\n    if (showTooltip === false && this.matchingAnalysesCount() === 0) {\n      this.fetchMatchingSamples();\n    }\n\n    this.setState(prevState => ({ ...prevState, showTooltip: !prevState.showTooltip }));\n  }\n\n  matchingAnalysesCount() {\n    return (this.state.matchingAnalyses && this.state.matchingAnalyses.length) || 0;\n  }\n\n  removeAttachment() {\n    const { attachment, sourceType } = this.props;\n\n    switch (sourceType) {\n      default:\n        return false;\n      case DragDropItemTypes.DATA:\n        InboxActions.removeAttachmentFromList(attachment);\n        break;\n      case DragDropItemTypes.UNLINKED_DATA:\n        InboxActions.removeUnlinkedAttachmentFromList(attachment);\n        break;\n    }\n\n    return true;\n  }\n\n\n  moveToAnalysis(sampleId, attachmentId) {\n    InboxFetcher.assignToAnalysis(sampleId, attachmentId)\n      .then(() => {\n        this.removeAttachment();\n      }).catch((errorMessage) => {\n        this.setState({ loading: false });\n        console.log(errorMessage);\n      });\n    this.toggleTooltip();\n  }\n\n  renderAnalysesButtons() {\n    const { loading, matchingAnalyses } = this.state;\n    const { attachment } = this.props;\n\n    if (this.matchingAnalysesCount() === 0) {\n      if (loading === true) {\n        return (<div><i className=\"fa fa-refresh fa-spin\" />&nbsp;loading...<br /></div>);\n      }\n      return (<div>No matching Samples found.<br /></div>);\n    }\n\n    return (\n      <div>\n        Move to Sample:<br />\n        {matchingAnalyses.map(sample => (\n          this.renderMoveButton(attachment, sample)\n        ))}\n      </div>\n    );\n  }\n\n  renderMoveButton(attachment, sample) {\n    return (\n      <div align=\"left\" key={`btn_${sample.id}`}>\n        <Button\n          bsStyle=\"success\"\n          bsSize=\"small\"\n          onClick={() => this.moveToAnalysis(sample.id, attachment.id)}\n        >\n          <i className=\"fa fa-arrow-circle-right\" aria-hidden=\"true\" />&nbsp;\n          {sample.short_label} {sample.name} {sample.type}\n        </Button>\n        <br />\n      </div>\n    );\n  }\n\n  render() {\n    const { showTooltip } = this.state;\n\n    const abortButton = (\n      <div align=\"right\">\n        <Button\n          bsStyle=\"warning\"\n          bsSize=\"small\"\n          onClick={() => this.toggleTooltip()}\n        >\n          <i className=\"fa fa-times-circle\" aria-hidden=\"true\" />&nbsp;\n          Abort\n        </Button>\n      </div>\n    );\n\n    return (\n      <span>\n        <i className=\"icon-sample\" onClick={() => this.toggleTooltip()} style={{ cursor: \"pointer\" }}>&nbsp;</i>\n        {showTooltip ? (\n          <Tooltip placement=\"bottom\" className=\"in\" id=\"tooltip-bottom\">\n            {this.renderAnalysesButtons()}\n            {abortButton}\n          </Tooltip>\n        ) : null}\n      </span>\n    );\n  }\n}\n\nMoveToAnalysisButton.propTypes = {\n  attachment: PropTypes.object.isRequired,\n  sourceType: PropTypes.string\n};\n\nMoveToAnalysisButton.defaultProps = {\n  sourceType: ''\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DragSource } from 'react-dnd';\nimport { Button, ButtonGroup, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport Utils from 'src/utilities/Functions';\n\nimport MoveToAnalysisButton from 'src/apps/mydb/inbox/MoveToAnalysisButton';\nimport InboxStore from 'src/stores/alt/stores/InboxStore';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport { formatDate } from 'src/utilities/timezoneHelper';\n\nconst dataSource = {\n  beginDrag(props) {\n    return props;\n  }\n};\n\nconst collectSource = (connect, monitor) => ({\n  connectDragSource: connect.dragSource(),\n  isDragging: monitor.isDragging()\n});\n\nconst handleAttachmentDownload = attachment => Utils.downloadFile({\n  contents: `/api/v1/attachments/${attachment && attachment.id}`, name: attachment && attachment.filename\n});\n\nclass AttachmentContainer extends Component {\n  constructor(props) {\n    super(props);\n    const inboxState = InboxStore.getState();\n    this.state = {\n      deletingTooltip: false,\n      checkedIds: inboxState.checkedIds\n\n    };\n    this.toggleAttachmentsCheckbox = this.toggleAttachmentsCheckbox.bind(this);\n    this.isAttachmentChecked = this.isAttachmentChecked.bind(this);\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    InboxStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    InboxStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState(state);\n  }\n\n  toggleTooltip() {\n    this.setState(prevState => ({ ...prevState, deletingTooltip: !prevState.deletingTooltip }));\n  }\n\n  toggleAttachmentsCheckbox(id) {\n    const { checkedIds } = this.state;\n    const { isSelected, attachment, sourceType } = this.props;\n    const attachmentId = attachment && attachment.id;\n    const params = {\n      type: false,\n      ids: id,\n      range: 'child',\n      isSelected,\n    };\n\n    if (ArrayUtils.isValNotInArray(checkedIds || [], params.ids)) {\n      params.type = true;\n    }\n\n    if (sourceType === DragDropItemTypes.DATA && attachmentId) {\n      InboxActions.checkDeviceAttachments(params);\n    } else {\n      InboxActions.checkedIds(params);\n      InboxActions.checkedAll(params);\n    }\n  }\n\n  isAttachmentChecked(attachment) {\n    const { isSelected } = this.props;\n    const { checkedIds } = this.state;\n    return (isSelected || ArrayUtils.isValInArray(checkedIds || [], attachment.id));\n  }\n\n\n  render() {\n    const {\n      connectDragSource,\n      sourceType,\n      attachment,\n      largerInbox,\n      fromUnsorted,\n    } = this.props;\n    if (sourceType !== DragDropItemTypes.DATA && sourceType !== DragDropItemTypes.UNLINKED_DATA) {\n      return null;\n    }\n    const { inboxSize } = InboxStore.getState();\n\n    const textStyle = {\n      display: 'block',\n      whiteSpace: 'nowrap',\n      overflow: 'hidden',\n      textOverflow: 'clip',\n      maxWidth: '100%',\n      cursor: 'move'\n    };\n\n    if (largerInbox === true) {\n      textStyle.marginTop = '6px';\n      textStyle.marginBottom = '6px';\n    }\n\n    const trash = (\n      <span>\n        <i className=\"fa fa-trash-o\" onClick={() => this.toggleTooltip()} style={{ cursor: \"pointer\" }}>&nbsp;</i>\n        {this.state.deletingTooltip ? (\n          <Tooltip placement=\"bottom\" className=\"in\" id=\"tooltip-bottom\">\n            Delete this attachment?\n            <ButtonGroup>\n              <Button\n                bsStyle=\"danger\"\n                bsSize=\"xsmall\"\n                onClick={() => InboxActions.deleteAttachment(attachment, fromUnsorted)}\n              >\n                Yes\n              </Button>\n              <Button\n                bsStyle=\"warning\"\n                bsSize=\"xsmall\"\n                onClick={() => this.toggleTooltip()}\n              >\n                No\n              </Button>\n            </ButtonGroup>\n          </Tooltip>\n        ) : null}\n      </span>\n    );\n\n    const attachmentId = attachment.id;\n    const checkBox = (\n      <input\n        type=\"checkbox\"\n        checked={this.props.isSelected}\n        onChange={() => this.toggleAttachmentsCheckbox(attachmentId)}\n      />\n    );\n\n    const filenameTooltip = (\n      <Tooltip\n        id=\"filename_tooltip\"\n        className=\"tooltip\"\n        style={{ maxWidth: '100%' }}\n      >\n        <p>\n          {attachment.filename}\n        </p>\n      </Tooltip>);\n\n    return connectDragSource(\n      <div style={textStyle}>\n        {checkBox}\n        &nbsp;&nbsp;{trash}&nbsp;\n        <i className=\"fa fa-download\" onClick={() => handleAttachmentDownload(attachment)} style={{ cursor: 'pointer' }} />\n        &nbsp;&nbsp;\n        {largerInbox ? (\n          <MoveToAnalysisButton\n            attachment={attachment}\n            largerInbox={largerInbox}\n            sourceType={sourceType}\n          />\n        ) : null}\n        <OverlayTrigger placement=\"top\" overlay={filenameTooltip} >\n          <span>\n            <span\n              className=\"text-info fa fa-arrows\"\n              style={{ maxWidth: '100%', marginRight: '8px' }}\n            />\n            {attachment.filename}\n          </span>\n        </OverlayTrigger>\n        {\n          inboxSize && inboxSize !== 'Small'\n          && (\n            <span className=\"text-info\" style={{ float: 'right', display: largerInbox ? '' : 'none' }}>\n              {formatDate(attachment.created_at)}\n            </span>\n          )\n        }\n      </div>,\n      { dropEffect: 'move' }\n    );\n  }\n}\n\nexport default DragSource(\n  props => props.sourceType,\n  dataSource,\n  collectSource\n)(AttachmentContainer);\n\nAttachmentContainer.propTypes = {\n  attachment: PropTypes.object.isRequired,\n  connectDragSource: PropTypes.func.isRequired,\n  isDragging: PropTypes.bool.isRequired,\n  largerInbox: PropTypes.bool,\n  sourceType: PropTypes.string,\n  fromUnsorted: PropTypes.bool,\n  isSelected: PropTypes.bool.isRequired,\n};\n\nAttachmentContainer.defaultProps = {\n  largerInbox: false,\n  sourceType: '',\n  fromUnsorted: false\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DragSource } from 'react-dnd';\nimport { Button, ButtonGroup, Tooltip } from 'react-bootstrap';\nimport AttachmentContainer from 'src/apps/mydb/inbox/AttachmentContainer';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport { formatDate } from 'src/utilities/timezoneHelper';\nimport InboxStore from 'src/stores/alt/stores/InboxStore';\n\nconst dataSource = {\n  beginDrag(props) {\n    return props;\n  }\n};\n\nconst collectSource = (connect, monitor) => ({\n  connectDragSource: connect.dragSource(),\n  isDragging: monitor.isDragging()\n});\n\nclass DatasetContainer extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      visible: false,\n      deletingTooltip: false,\n    }\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    InboxStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    InboxStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState(state);\n  }\n\n  attachmentCount() {\n    return (this.props.dataset && this.props.dataset.attachments &&\n      this.props.dataset.attachments.length) || 0;\n  }\n\n  deleteDataset() {\n    if (this.attachmentCount() === 0) {\n      InboxActions.deleteContainerLinkUnselected(this.props.dataset);\n      InboxActions.deleteContainer(this.props.dataset);\n    } else {\n      this.toggleTooltip();\n    }\n  }\n\n  confirmDeleteDataset() {\n    InboxActions.deleteContainerLinkUnselected(this.props.dataset);\n    InboxActions.deleteContainer(this.props.dataset);\n    this.toggleTooltip();\n  }\n\n  confirmDeleteAttachments() {\n    this.toggleTooltip();\n  }\n\n  toggleTooltip() {\n    this.setState(prevState => ({ ...prevState, deletingTooltip: !prevState.deletingTooltip }));\n  }\n\n  render() {\n    const { connectDragSource, sourceType, dataset, largerInbox, isSelected, onDatasetSelect, checkedIds } = this.props;\n    const { inboxSize } = InboxStore.getState();\n\n    if (sourceType === DragDropItemTypes.DATASET) {\n      const { visible, deletingTooltip } = this.state;\n      const attachments = dataset.attachments.map(attachment => (\n        <AttachmentContainer\n          key={`attach_${attachment.id}`}\n          sourceType={DragDropItemTypes.DATA}\n          attachment={attachment}\n          largerInbox={largerInbox}\n          isSelected={checkedIds.includes(attachment.id)}\n          checked={isSelected}\n        />\n      ));\n      const attCount = this.attachmentCount();\n      const textStyle = {\n        display: 'block',\n        whiteSpace: 'nowrap',\n        overflow: 'hidden',\n        textOverflow: 'clip',\n        maxWidth: '100%',\n        cursor: 'move'\n      };\n\n      if (largerInbox === true) {\n        textStyle.marginTop = '6px';\n        textStyle.marginBottom = '6px';\n      }\n\n      const trash = this.props.cache.length === this.props.cache.length // Set it as always show\n        ? (\n          <span>\n            <i className=\"fa fa-trash-o\" onClick={() => this.deleteDataset()} style={{ cursor: \"pointer\" }}>&nbsp;</i>\n            {deletingTooltip ? (\n              <Tooltip placement=\"bottom\" className=\"in\" id=\"tooltip-bottom\">\n                {`Delete ${attCount} attachment${attCount > 1 ? 's' : ''}?`}\n                <ButtonGroup\n                  style={{ marginLeft: '5px' }}\n                >\n                  <Button\n                    bsStyle=\"danger\"\n                    bsSize=\"xsmall\"\n                    onClick={() => this.confirmDeleteDataset()}\n                  >\n                    Yes\n                  </Button>\n                  <Button\n                    bsStyle=\"warning\"\n                    bsSize=\"xsmall\"\n                    onClick={() => this.toggleTooltip()}\n                  >\n                    No\n                  </Button>\n                </ButtonGroup>\n              </Tooltip>\n            ) : null}\n          </span>\n        ) : null;\n      const datasetCheckbox = (\n        <input\n          type=\"checkbox\"\n          checked={isSelected}\n          onChange={() => onDatasetSelect(dataset.id)}\n        />\n      );\n\n      return connectDragSource(\n        <div>\n          <div style={textStyle}>\n            {datasetCheckbox}\n            &nbsp;{trash}&nbsp;\n            <button\n              type=\"button\"\n              className=\"btn-inbox\"\n              onClick={() => this.setState(prevState => ({ ...prevState, visible: !visible }))}\n            >\n              <i\n                className={`fa fa-folder${visible ? '-open' : ''}`}\n                style={{ cursor: 'pointer' }}\n              >\n                <span className=\"text-info fa fa-arrows\" style={{ marginLeft: '5px', cursor: 'pointer' }} />\n              </i>\n              <span style={{ marginLeft: '8px' }}>{dataset.name}</span>\n            </button>\n            {\n              inboxSize && inboxSize !== 'Small'\n              && (\n                <span className=\"text-info\" style={{ float: 'right', display: largerInbox ? '' : 'none' }}>\n                  {formatDate(dataset.created_at)}\n                </span>\n              )\n            }\n          </div>\n          <div>{visible ? attachments : null}</div>\n        </div>,\n        { dropEffect: 'move' }\n      );\n    }\n\n    return null;\n  }\n}\n\nexport default DragSource(props => props.sourceType, dataSource, collectSource)(DatasetContainer);\n\nDatasetContainer.propTypes = {\n  connectDragSource: PropTypes.func.isRequired,\n  isDragging: PropTypes.bool.isRequired,\n  sourceType: PropTypes.string.isRequired,\n  largerInbox: PropTypes.bool,\n  isSelected: PropTypes.bool.isRequired,\n  onDatasetSelect: PropTypes.func.isRequired,\n};\n\nDatasetContainer.defaultProps = {\n  largerInbox: false\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction Pagination({\n  currentDataSetPage, totalPages, handlePrevClick, handleNextClick\n}) {\n  return (\n    <div className=\"dataset-pagination\">\n      <button\n        onClick={handlePrevClick}\n        disabled={currentDataSetPage === 1}\n        type=\"button\"\n      >\n        &#8249;\n      </button>\n      <button\n        onClick={handleNextClick}\n        disabled={currentDataSetPage === totalPages}\n        type=\"button\"\n      >\n        &#8250;\n      </button>\n      <span className=\"page-count\">\n        Page\n        {' '}\n        <span className=\"current-page\">{currentDataSetPage}</span>\n        {' '}\n        of\n        {' '}\n        {totalPages}\n      </span>\n    </div>\n  );\n}\nPagination.propTypes = {\n  currentDataSetPage: PropTypes.number.isRequired,\n  totalPages: PropTypes.number.isRequired,\n  handlePrevClick: PropTypes.func.isRequired,\n  handleNextClick: PropTypes.func.isRequired,\n};\n\nexport default Pagination;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Tooltip, ButtonGroup } from 'react-bootstrap';\n\nimport DatasetContainer from 'src/apps/mydb/inbox/DatasetContainer';\nimport Pagination from 'src/apps/mydb/inbox/Pagination';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport InboxStore from 'src/stores/alt/stores/InboxStore';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nexport default class DeviceBox extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const inboxState = InboxStore.getState();\n\n    this.state = {\n      visible: false,\n      checkedDeviceAll: inboxState.checkedDeviceAll,\n      checkedDeviceIds: inboxState.checkedDeviceIds,\n      checkedIds: inboxState.checkedIds,\n      deletingTooltip: false,\n      currentDeviceBoxPage: inboxState.currentDeviceBoxPage,\n      dataItemsPerPage: inboxState.dataItemsPerPage,\n    };\n\n    this.handleDatasetSelect = this.handleDatasetSelect.bind(this);\n    this.toggleSelectAllFiles = this.toggleSelectAllFiles.bind(this);\n    this.deleteCheckedDataset = this.deleteCheckedDataset.bind(this);\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    const { device_box, deviceBoxVisible } = this.props;\n    const { currentDeviceBoxPage } = this.state;\n    if (deviceBoxVisible) {\n      if (Array.isArray(device_box.children) && !device_box.children.length) {\n        LoadingActions.start();\n        InboxActions.fetchInboxContainer(device_box.id, currentDeviceBoxPage);\n      }\n    }\n    this.setState({ visible: deviceBoxVisible });\n    InboxStore.listen(this.onChange);\n  }\n\n  componentDidUpdate(prevProps) {\n    const { deviceBoxVisible, device_box } = this.props;\n    const { currentDeviceBoxPage } = this.state;\n\n    if (deviceBoxVisible !== prevProps.deviceBoxVisible) {\n      this.setState({ visible: deviceBoxVisible });\n    }\n  }\n\n  componentWillUnmount() {\n    InboxStore.unlisten(this.onChange);\n  }\n\n  handleDeviceBoxClick(deviceBox) {\n    const { visible, currentDeviceBoxPage } = this.state;\n\n    if (!visible) {\n      if (Array.isArray(deviceBox.children) && !deviceBox.children.length) {\n        LoadingActions.start();\n        InboxActions.fetchInboxContainer(deviceBox.id, currentDeviceBoxPage);\n      }\n    }\n    this.setState({\n      visible: !visible,\n      checkedDeviceAll: false,\n      checkedDeviceIds: [],\n      checkedIds: [],\n    });\n  }\n\n  handleDatasetSelect(datasetId) {\n    const { checkedDeviceIds, checkedIds } = this.state;\n    const newCheckedIds = [...checkedIds];\n    const datasetIndex = checkedDeviceIds.indexOf(datasetId);\n    const datasetSelected = datasetIndex !== -1;\n\n    if (datasetSelected) {\n      const newCheckedDeviceIds = checkedDeviceIds.filter((id) => id !== datasetId);\n      const currentDeviceBox = this.props.device_box;\n      const dataset = currentDeviceBox.children.find((d) => d.id === datasetId);\n      dataset.attachments.forEach((attachment) => {\n        const attachmentIndex = newCheckedIds.indexOf(attachment.id);\n        if (attachmentIndex !== -1) {\n          newCheckedIds.splice(attachmentIndex, 1);\n        }\n      });\n\n      const params = {\n        checkedDeviceIds: newCheckedDeviceIds,\n        checkedIds: newCheckedIds,\n      };\n\n      InboxActions.checkedDeviceIds(params);\n    } else {\n      const newCheckedDeviceIds = [...checkedDeviceIds, datasetId];\n      const currentDeviceBox = this.props.device_box;\n      const dataset = currentDeviceBox.children.find((d) => d.id === datasetId);\n      dataset.attachments.forEach((attachment) => {\n        if (!newCheckedIds.includes(attachment.id)) {\n          newCheckedIds.push(attachment.id);\n        }\n      });\n\n      const params = {\n        checkedDeviceIds: newCheckedDeviceIds,\n        checkedIds: newCheckedIds,\n      };\n      InboxActions.checkedDeviceIds(params);\n    }\n  }\n\n  onChange(state) {\n    const { checkedDeviceAll, checkedDeviceIds, checkedIds } = state;\n    this.setState({\n      checkedDeviceAll,\n      checkedDeviceIds,\n      checkedIds,\n    });\n  }\n\n  handlePrevClick = (deviceBox) => {\n    const { currentDeviceBoxPage } = this.state;\n    const updatedPage = currentDeviceBoxPage - 1;\n    this.setState({ currentDeviceBoxPage: updatedPage });\n    const params = {\n      checkedDeviceIds: [],\n      checkedIds: [],\n    };\n    InboxActions.checkedDeviceIds(params);\n    LoadingActions.start();\n    InboxActions.fetchInboxContainer(deviceBox.id, updatedPage);\n  };\n\n  handleNextClick = (deviceBox) => {\n    const { currentDeviceBoxPage } = this.state;\n    const updatedPage = currentDeviceBoxPage + 1;\n    this.setState({ currentDeviceBoxPage: updatedPage });\n    const params = {\n      checkedDeviceIds: [],\n      checkedIds: [],\n    };\n    InboxActions.checkedDeviceIds(params);\n    LoadingActions.start();\n    InboxActions.fetchInboxContainer(deviceBox.id, updatedPage);\n  };\n\n  toggleSelectAllFiles() {\n    const { checkedDeviceAll } = this.state;\n\n    const params = {\n      type: false,\n      range: 'all'\n    };\n\n    if (!checkedDeviceAll) {\n      params.type = true;\n    }\n\n    this.setState((prevState) => ({\n      ...prevState.inboxState,\n      checkedDeviceAll: !this.state.checkedDeviceAll\n    }));\n\n    InboxActions.checkedDeviceAll(params);\n  }\n\n  toggleTooltip() {\n    this.setState((prevState) => ({ ...prevState, deletingTooltip: !prevState.deletingTooltip }));\n  }\n\n  deleteCheckedDataset(device_box) {\n    const { checkedDeviceIds, currentDeviceBoxPage, checkedIds } = this.state;\n\n    const currentItemsCount = device_box.children.length;\n    const itemsDeleted = checkedDeviceIds.length;\n\n    const attachmentIdsToDelete = [];\n\n    checkedDeviceIds.forEach((checkedDeviceId) => {\n      const datasetToDelete = device_box.children.find((dataset) => dataset.id === checkedDeviceId);\n      if (datasetToDelete) {\n        InboxActions.deleteContainer(datasetToDelete, true);\n      }\n    });\n\n    checkedIds.forEach((checkedId) => {\n      device_box.children.forEach((dataset) => {\n        const attachmentToDelete = dataset.attachments.find((attachment) => attachment.id === checkedId);\n        if (attachmentToDelete) {\n          attachmentIdsToDelete.push(checkedId);\n        }\n      });\n    });\n\n    if (attachmentIdsToDelete.length > 0) {\n      InboxActions.bulkDeleteAttachments(attachmentIdsToDelete, false);\n    }\n\n    const params = {\n      checkedDeviceIds: [],\n      checkedIds: [],\n    };\n    InboxActions.checkedDeviceIds(params);\n\n    if (currentDeviceBoxPage > 1 && itemsDeleted === currentItemsCount) {\n      this.handlePrevClick(device_box);\n    }\n\n    this.toggleTooltip();\n  }\n\n  deleteDeviceBox(deviceBox) {\n    InboxActions.deleteContainer(deviceBox);\n  }\n\n  render() {\n    const { device_box, largerInbox } = this.props;\n    const {\n      visible, checkedDeviceAll, checkedDeviceIds, checkedIds, currentDeviceBoxPage, dataItemsPerPage,\n    } = this.state;\n    const cache = InboxStore.getState().cache;\n\n    // device_box.children_count gives the total number of children of each DeviceBox\n    // while device_box.children contains only the paginated entries\n\n    const totalPages = Math.ceil(device_box.children_count / dataItemsPerPage);\n    const currentItemsCount = device_box.children.length;\n\n    const renderCheckAll = (\n      <div>\n        <input\n          type=\"checkbox\"\n          checked={checkedDeviceIds.length === currentItemsCount && currentItemsCount !== 0}\n          onChange={this.toggleSelectAllFiles}\n        />\n        <span className=\"g-marginLeft--10\" style={{ fontWeight: 'bold' }}>\n          {checkedDeviceIds.length === currentItemsCount\n          && currentItemsCount !== 0 ? 'Deselect all' : 'Select all'}\n        </span>\n      </div>\n    );\n\n    const trash = (\n      <span>\n        <i\n          className=\"fa fa-trash-o\"\n          aria-hidden=\"true\"\n          onClick={() => this.toggleTooltip()}\n          style={{ cursor: 'pointer' }}\n        >\n          &nbsp;\n        </i>\n        {this.state.deletingTooltip ? (\n          <Tooltip placement=\"bottom\" className=\"in\" id=\"tooltip-bottom\">\n            Delete this item(s)?\n            <ButtonGroup>\n              <Button\n                bsStyle=\"danger\"\n                bsSize=\"xsmall\"\n                onClick={() => this.deleteCheckedDataset(device_box)}\n              >\n                Yes\n              </Button>\n              <Button bsStyle=\"warning\" bsSize=\"xsmall\" onClick={() => this.toggleTooltip()}>\n                No\n              </Button>\n            </ButtonGroup>\n          </Tooltip>\n        ) : null}\n      </span>\n    );\n\n    const datasets = device_box.children.map((dataset) => (\n      <DatasetContainer\n        key={`dataset_${dataset.id}`}\n        sourceType={DragDropItemTypes.DATASET}\n        dataset={dataset}\n        cache={cache}\n        largerInbox={largerInbox}\n        isSelected={checkedDeviceIds.includes(dataset.id)}\n        onDatasetSelect={this.handleDatasetSelect}\n        checkedIds={checkedIds}\n      />\n    ));\n\n    const textStyle = {\n      display: 'block',\n      whiteSpace: 'nowrap',\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      maxWidth: '100%',\n      cursor: 'move'\n    };\n\n    return (\n      <div className=\"tree-view\">\n        <div\n          className=\"title\"\n          style={textStyle}\n          onClick={() => this.handleDeviceBoxClick(device_box)}\n          role=\"button\"\n          tabIndex={0}\n          onKeyDown={() => {}}\n        >\n          {\n            device_box?.children_count === 0\n              ? (\n                <i\n                  className=\"fa fa-trash-o\"\n                  onClick={() => this.deleteDeviceBox(device_box)}\n                  style={{ cursor: 'pointer' }}\n                >\n                  &nbsp;&nbsp;\n                </i>\n              ) : null\n          }\n          <button\n            type=\"button\"\n            className=\"btn-inbox\"\n            onClick={() => this.setState({ visible: !visible })}\n            tabIndex={0}\n            onKeyDown={(e) => {\n              if (e.key === 'Enter' || e.key === ' ') {\n                InboxActions.showInboxModal();\n              }\n            }}\n          >\n            <i\n              className={`fa fa-folder${visible ? '-open' : ''}`}\n              aria-hidden=\"true\"\n              style={{ marginRight: '5px' }}\n            />\n            {device_box.name}\n          </button>\n        </div>\n        {\n          visible && device_box?.children_count > dataItemsPerPage ? (\n            <Pagination\n              currentDataSetPage={currentDeviceBoxPage}\n              totalPages={totalPages}\n              handlePrevClick={() => this.handlePrevClick(device_box)}\n              handleNextClick={() => this.handleNextClick(device_box)}\n            />\n          ) : null\n        }\n        <table>\n          <tbody>\n            <tr>\n              <td style={{ width: '80%', paddingRight: '30px' }}>\n                <div>{visible ? renderCheckAll : null}</div>\n              </td>\n              <td style={{ width: '20%' }}>\n                <div>{visible ? trash : null}</div>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n        <div>{visible ? datasets : null}</div>\n      </div>\n    );\n  }\n}\n\nDeviceBox.propTypes = {\n  device_box: PropTypes.object.isRequired,\n  largerInbox: PropTypes.bool,\n  deviceBoxVisible: PropTypes.bool,\n};\n\nDeviceBox.defaultProps = {\n  largerInbox: false,\n  deviceBoxVisible: false,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col, Table, ListGroup, ListGroupItem, Button, ButtonToolbar } from 'react-bootstrap';\nimport Dropzone from 'react-dropzone';\nimport Utils from 'src/utilities/Functions';\n\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport Attachment from 'src/models/Attachment';\nimport Container from 'src/models/Container';\nimport InboxStore from 'src/stores/alt/stores/InboxStore';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nexport default class UnsortedDataset extends React.Component {\n  constructor(props) {\n    super();\n    const datasetContainer = Object.assign({}, props.datasetContainer);\n    this.state = {\n      datasetContainer\n    };\n  }\n\n  handleFileDrop(files) {\n    const { datasetContainer } = this.state;\n\n    const attachments = files.map(f => Attachment.fromFile(f));\n    const firstAttach = datasetContainer.attachments.length === 0;\n    datasetContainer.attachments = datasetContainer.attachments.concat(attachments);\n\n    if (firstAttach) {\n      const attachmentList = datasetContainer.attachments;\n      let attachName = attachmentList[attachmentList.length - 1].filename;\n      const splitted = attachName.split('.');\n      if (splitted.length > 1) {\n        splitted.splice(-1, 1);\n        attachName = splitted.join('.');\n      }\n      datasetContainer.name = attachName;\n    }\n\n    this.setState({ datasetContainer });\n  }\n\n  handleAttachmentDownload(attachment) {\n    Utils.downloadFile({ contents: `/api/v1/attachments/${attachment.id}`, name: attachment.filename });\n  }\n\n  handleAttachmentRemove(attachment) {\n    const { datasetContainer } = this.state;\n    const index = datasetContainer.attachments.indexOf(attachment);\n\n    datasetContainer.attachments[index].is_deleted = true;\n    this.setState({ datasetContainer });\n  }\n\n  handleUndo(attachment) {\n    const { datasetContainer } = this.state;\n    const index = datasetContainer.attachments.indexOf(attachment);\n\n    datasetContainer.attachments[index].is_deleted = false;\n    this.setState({ datasetContainer });\n  }\n\n  handleSave() {\n    const { datasetContainer } = this.state;\n    const { onModalHide } = this.props;\n    LoadingActions.start();\n    return AttachmentFetcher.uploadToInbox(datasetContainer.attachments\n      .filter(f => f.is_new && !f.is_deleted))()\n      .then(() => { onModalHide(); InboxActions.fetchInboxUnsorted(); });\n  }\n\n  listGroupItem(attachment) {\n    if (attachment.is_deleted) {\n      return (\n        <Table className=\"borderless\">\n          <tbody>\n            <tr>\n              <td>\n                <strike>{attachment.filename}</strike>\n              </td>\n            </tr>\n            <tr>\n              <td>\n                <Button\n                  bsSize=\"xsmall\"\n                  bsStyle=\"danger\"\n                  onClick={() => this.handleUndo(attachment)}\n                >\n                  <i className=\"fa fa-undo\" />\n                </Button>\n              </td>\n            </tr>\n          </tbody>\n        </Table>\n      );\n    }\n\n    return (\n      <Table className=\"borderless\">\n        <tbody>\n          <tr>\n            <td>\n              <a onClick={() => this.handleAttachmentDownload(attachment)} style={{ cursor: 'pointer' }}>{attachment.filename}</a>\n            </td>\n          </tr>\n          <tr>\n            <td>\n              {this.removeAttachmentButton(attachment)} &nbsp;\n            </td>\n          </tr>\n        </tbody>\n      </Table>\n    );\n  }\n\n  attachments() {\n    const { datasetContainer } = this.state;\n    if (datasetContainer.attachments && datasetContainer.attachments.length > 0) {\n      return (\n        <ListGroup>\n          {datasetContainer.attachments.map((attachment) => {\n            return (\n              <ListGroupItem key={attachment.id}>\n                {this.listGroupItem(attachment)}\n              </ListGroupItem>\n            );\n          })}\n        </ListGroup>\n      );\n    }\n    return (\n      <div />\n    );\n  }\n\n  removeAttachmentButton(attachment) {\n    return (\n      <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.handleAttachmentRemove(attachment)}>\n        <i className=\"fa fa-trash-o\" />\n      </Button>\n    );\n  }\n\n  dropzone() {\n    return (\n      <Dropzone\n        onDrop={files => this.handleFileDrop(files)}\n        style={{ height: 50, width: '100%', border: '3px dashed lightgray' }}\n      >\n        <div style={{ textAlign: 'center', paddingTop: 12, color: 'gray' }}>\n          Drop Files, or Click to Select.\n        </div>\n      </Dropzone>\n    );\n  }\n\n  render() {\n    const { onModalHide } = this.props;\n\n    return (\n      <Row>\n        <Col md={12}>\n          {this.attachments()}\n          {this.dropzone()}\n          <br />\n        </Col>\n        <Col md={12}>\n          <ButtonToolbar>\n            <Button bsStyle=\"primary\" onClick={() => onModalHide()}>Close</Button>\n            <Button\n              bsStyle=\"warning\"\n              onClick={() => this.handleSave()}\n            >\n              Save\n            </Button>\n          </ButtonToolbar>\n        </Col>\n      </Row>\n    );\n  }\n}\n\nUnsortedDataset.propTypes = {\n  onModalHide: PropTypes.func.isRequired,\n  datasetContainer: PropTypes.instanceOf(Container),\n};\n\nUnsortedDataset.defaultProps = {\n  datasetContainer: null,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from 'react-bootstrap';\nimport UnsortedDataset from 'src/apps/mydb/inbox/UnsortedDataset';\nimport Container from 'src/models/Container';\n\nexport default class UnsortedDatasetModal extends React.Component {\n  render() {\n    const { show, datasetContainer, onHide } = this.props;\n    if (show) {\n      return (\n        <div>\n          <Modal animation show={show} bsSize=\"large\" onHide={() => onHide()}>\n            <Modal.Header closeButton>\n              <Modal.Title>\n                Upload files to Inbox\n              </Modal.Title>\n            </Modal.Header>\n            <Modal.Body>\n              <UnsortedDataset\n                datasetContainer={datasetContainer}\n                onModalHide={() => onHide()}\n              />\n            </Modal.Body>\n          </Modal>\n        </div>\n      )\n    } else {\n      return <div></div>\n    }\n  }\n}\n\nUnsortedDatasetModal.propTypes = {\n  onHide: PropTypes.func.isRequired,\n  datasetContainer: PropTypes.instanceOf(Container),\n  show: PropTypes.bool.isRequired,\n};\nUnsortedDatasetModal.defaultProps = {\n  datasetContainer: null,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Tooltip, ButtonGroup } from 'react-bootstrap';\n\nimport AttachmentContainer from 'src/apps/mydb/inbox/AttachmentContainer';\nimport Pagination from 'src/apps/mydb/inbox/Pagination';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\n\nimport Container from 'src/models/Container';\nimport UnsortedDatasetModal from 'src/apps/mydb/inbox/UnsortedDatasetModal';\nimport InboxStore from 'src/stores/alt/stores/InboxStore';\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nexport default class UnsortedBox extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const inboxState = InboxStore.getState();\n\n    this.state = {\n      visible: false,\n      checkedAll: inboxState.checkedAll,\n      checkedIds: inboxState.checkedIds,\n      deletingTooltip: false,\n      modal: {\n        show: false,\n        datasetContainer: null\n      },\n      currentUnsortedBoxPage: inboxState.currentUnsortedBoxPage,\n      dataItemsPerPage: inboxState.dataItemsPerPage,\n    };\n    this.toggleSelectAllCheckbox = this.toggleSelectAllCheckbox.bind(this);\n    this.deleteCheckedAttachment = this.deleteCheckedAttachment.bind(this);\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    const { unsortedVisible } = this.props;\n    this.setState({ visible: unsortedVisible });\n    InboxStore.listen(this.onChange);\n  }\n\n  componentDidUpdate(prevProps) {\n    const { unsortedVisible } = this.props;\n    if (unsortedVisible !== prevProps.unsortedVisible) {\n      this.setState({ visible: unsortedVisible });\n    }\n  }\n\n  componentWillUnmount() {\n    InboxStore.unlisten(this.onChange);\n  }\n\n  handleClick() {\n    const { visible } = this.state;\n\n    InboxActions.setActiveDeviceBoxId(-1);\n\n    this.setState({ visible: !visible });\n  }\n\n  handleFileModalOpen(datasetContainer) {\n    const { modal } = this.state;\n    modal.datasetContainer = datasetContainer;\n    modal.show = true;\n    this.setState({ modal });\n  }\n\n  handleFileModalHide() {\n    const { modal } = this.state;\n    modal.datasetContainer = null;\n    modal.show = false;\n    this.setState({ modal });\n    document.body.className = document.body.className.replace('modal-open', '');\n  }\n\n  handlePrevClick = () => {\n    InboxActions.prevClick();\n  };\n\n  handleNextClick = () => {\n    InboxActions.nextClick();\n  };\n\n  handleUploadButton() {\n    const datasetContainer = Container.buildEmpty();\n    datasetContainer.container_type = 'dataset';\n    this.handleFileModalOpen(datasetContainer);\n  }\n\n  onChange(state) {\n    this.setState(state);\n  }\n\n  sortUnsortedItem = (currentItems) => {\n    const type = 'inbox';\n    const userState = UserStore.getState();\n    const filters = userState?.profile?.data?.filters || {};\n    const sortColumn = filters[type]?.sort || 'created_at';\n\n    switch (sortColumn) {\n      case 'created_at':\n        return currentItems.slice().sort((a, b) => {\n          const dateA = new Date(a.created_at).getTime();\n          const dateB = new Date(b.created_at).getTime();\n\n          // Sort in descending order\n          return dateB - dateA;\n        });\n\n      case 'name':\n        return currentItems.slice().sort((a, b) => {\n          if (a.filename > b.filename) {\n            return 1;\n          }\n          if (a.filename < b.filename) {\n            return -1;\n          }\n          return 0;\n        });\n\n      default:\n        // Default case: return currentItems as they are\n        return currentItems.slice();\n    }\n  };\n\n  toggleSelectAllCheckbox() {\n    const { checkedAll } = this.state;\n    const params = {\n      type: false,\n      range: 'all'\n    };\n    if (!checkedAll) {\n      params.type = true;\n    }\n    this.setState((prevState) => ({ ...prevState.inboxState, checkedAll: !checkedAll }));\n    InboxActions.checkedAll(params);\n    InboxActions.checkedIds(params);\n  }\n\n  toggleTooltip() {\n    this.setState((prevState) => ({ ...prevState, deletingTooltip: !prevState.deletingTooltip }));\n  }\n\n  deleteCheckedAttachment(unsortedBox) {\n    const { checkedIds, currentUnsortedBoxPage, dataItemsPerPage } = this.state;\n    const startIndex = (currentUnsortedBoxPage - 1) * dataItemsPerPage;\n    const endIndex = startIndex + dataItemsPerPage;\n    const currentItems = unsortedBox.slice(startIndex, endIndex);\n    const currentItemsCount = currentItems.length;\n    const itemsDeleted = checkedIds.length;\n\n    checkedIds.forEach((checkedId) => {\n      // eslint-disable-next-line array-callback-return\n      unsortedBox.map((attachment) => {\n        if (checkedId === attachment.id) {\n          InboxActions.deleteAttachment(attachment, true);\n        }\n      });\n    });\n    if (currentUnsortedBoxPage > 1 && itemsDeleted === currentItemsCount) {\n      InboxActions.prevClick();\n    } else {\n      InboxActions.fetchInboxUnsorted();\n    }\n    checkedIds.length = 0;\n    this.toggleTooltip();\n    this.setState({ checkedAll: false });\n  }\n\n  render() {\n    const { unsorted_box, largerInbox } = this.props;\n    const {\n      visible, modal, checkedAll, checkedIds, currentUnsortedBoxPage, dataItemsPerPage, deletingTooltip\n    } = this.state;\n    const startIndex = (currentUnsortedBoxPage - 1) * dataItemsPerPage;\n    const endIndex = startIndex + dataItemsPerPage;\n    const totalPages = Math.ceil(unsorted_box.length / dataItemsPerPage);\n    const currentItems = this.sortUnsortedItem(unsorted_box.slice(startIndex, endIndex));\n\n    const renderCheckAll = (\n      <div>\n        <input\n          type=\"checkbox\"\n          checked={checkedAll && checkedIds.length === currentItems.length}\n          onChange={this.toggleSelectAllCheckbox}\n        />\n        <span\n          className=\"g-marginLeft--10\"\n          style={{ fontWeight: 'bold' }}\n        >\n          {checkedAll && checkedIds.length === currentItems.length ? 'Deselect all' : 'Select all'}\n        </span>\n      </div>\n    );\n\n    const trash = (\n      <span>\n        <i\n          className=\"fa fa-trash-o\"\n          aria-hidden=\"true\"\n          onClick={() => this.toggleTooltip()}\n          style={{ cursor: 'pointer' }}\n        >\n          &nbsp;\n        </i>\n        {deletingTooltip ? (\n          <Tooltip placement=\"bottom\" className=\"in\" id=\"tooltip-bottom\">\n            {`Delete ${checkedIds.length} attachment${checkedIds.length > 1 ? 's' : ''}?`}\n            <ButtonGroup\n              style={{ marginLeft: '5px' }}\n            >\n              <Button\n                bsStyle=\"danger\"\n                bsSize=\"xsmall\"\n                onClick={() => this.deleteCheckedAttachment(unsorted_box)}\n              >\n                Yes\n              </Button>\n              <Button\n                bsStyle=\"warning\"\n                bsSize=\"xsmall\"\n                onClick={() => this.toggleTooltip()}\n              >\n                No\n              </Button>\n            </ButtonGroup>\n          </Tooltip>\n        ) : null}\n      </span>\n    );\n\n    const attachments = visible ? currentItems.map((attachment) => (\n      <AttachmentContainer\n        key={`attach_${attachment.id}`}\n        sourceType={DragDropItemTypes.UNLINKED_DATA}\n        attachment={attachment}\n        largerInbox={largerInbox}\n        fromUnsorted\n        isSelected={checkedIds.includes(attachment.id)}\n      />\n    )) : <div />;\n\n    const folderClass = `fa fa-folder${visible ? '-open' : ''}`;\n\n    const uploadModal = (\n      <UnsortedDatasetModal\n        onHide={() => this.handleFileModalHide()}\n        show={modal.show}\n        datasetContainer={modal.datasetContainer}\n      />\n    );\n\n    const uploadButton = (\n      <Button\n        style={{ position: 'absolute', right: 0 }}\n        bsSize=\"xsmall\"\n        onClick={(e) => {\n          e.stopPropagation();\n          this.handleUploadButton();\n        }}\n      >\n        <i className=\"fa fa-upload\" aria-hidden=\"true\" />\n      </Button>\n    );\n\n    return (\n      <div className=\"tree-view\">\n        <div\n          className=\"title\"\n          onClick={() => this.handleClick()}\n          role=\"button\"\n          tabIndex={0}\n          onKeyDown={() => {}}\n        >\n          <button\n            type=\"button\"\n            className=\"btn-inbox\"\n            onClick={InboxActions.showInboxModal}\n            tabIndex={0}\n            onKeyDown={(e) => {\n              if (e.key === 'Enter' || e.key === ' ') {\n                InboxActions.showInboxModal();\n              }\n            }}\n          >\n            <i\n              className={folderClass}\n              aria-hidden=\"true\"\n              style={{ marginRight: '5px' }}\n            />\n            Unsorted\n          </button>\n          {' '}\n          {uploadButton}\n        </div>\n        {\n          visible && unsorted_box.length > dataItemsPerPage ? (\n            <Pagination\n              currentDataSetPage={currentUnsortedBoxPage}\n              totalPages={totalPages}\n              handlePrevClick={this.handlePrevClick}\n              handleNextClick={this.handleNextClick}\n            />\n          ) : null\n        }\n        <table>\n          <tbody>\n            <tr>\n              <td style={{ width: '80%', paddingRight: '30px' }}>\n                <div>{visible ? renderCheckAll : null}</div>\n              </td>\n              <td style={{ width: '20%' }}>\n                <div>{visible ? trash : null}</div>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n        <div> {attachments} </div>\n        {uploadModal}\n      </div>\n    );\n  }\n}\n\nUnsortedBox.propTypes = {\n  unsorted_box: PropTypes.array.isRequired,\n  largerInbox: PropTypes.bool,\n  unsortedVisible: PropTypes.bool,\n};\n\nUnsortedBox.defaultProps = {\n  largerInbox: false,\n  unsortedVisible: false,\n};\n","/* eslint-disable react/destructuring-assignment */\nimport React from 'react';\nimport Draggable from 'react-draggable';\nimport {\n  Badge, Button, Panel, Pagination, OverlayTrigger, Tooltip, DropdownButton, MenuItem\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport InboxStore from 'src/stores/alt/stores/InboxStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nimport DeviceBox from 'src/apps/mydb/inbox/DeviceBox';\nimport UnsortedBox from 'src/apps/mydb/inbox/UnsortedBox';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UserActions from 'src/stores/alt/actions/UserActions';\n\nexport default class InboxModal extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const inboxState = InboxStore.getState();\n\n    this.state = {\n      inbox: inboxState.inbox,\n      inboxVisible: inboxState.inboxVisible,\n      numberOfAttachments: inboxState.numberOfAttachments,\n      visible: inboxState.inboxModalVisible,\n\n      currentPage: inboxState.currentPage,\n      itemsPerPage: inboxState.itemsPerPage,\n      totalPages: inboxState.totalPages,\n      activeDeviceBoxId: inboxState.activeDeviceBoxId,\n      sortColumn: 'name',\n      colMdValue: 4,\n    };\n\n    this.onChange = this.onChange.bind(this);\n    this.onUIStoreChange = this.onUIStoreChange.bind(this);\n    this.onClickInbox = this.onClickInbox.bind(this);\n    this.handleMouseDown = this.handleMouseDown.bind(this);\n    this.handleMouseMove = this.handleMouseMove.bind(this);\n    this.handleMouseUp = this.handleMouseUp.bind(this);\n  }\n\n  componentDidMount() {\n    InboxStore.listen(this.onChange);\n    UIStore.listen(this.onUIStoreChange);\n    InboxActions.fetchInboxCount();\n    this.initState();\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    const { currentPage, itemsPerPage } = this.state;\n    if (prevState.currentPage !== currentPage\n        || prevState.itemsPerPage !== itemsPerPage) {\n      InboxActions.fetchInbox({ currentPage, itemsPerPage });\n    }\n  }\n\n  componentWillUnmount() {\n    InboxStore.unlisten(this.onChange);\n  }\n\n  handlePageChange(pageNumber) {\n    const { totalPages } = this.state;\n    if (pageNumber > 0 && pageNumber <= totalPages) {\n      this.setState({\n        currentPage: pageNumber\n      }, () => InboxActions.setInboxPagination({ currentPage: this.state.currentPage }));\n    }\n  }\n\n  onChange(state) {\n    this.setState(state);\n    this.setState({ visible: state.inboxModalVisible });\n  }\n\n  onUIStoreChange(state) {\n    const { collectorAddress } = state;\n    if (collectorAddress !== this.state.collectorAddress) {\n      this.setState({ collectorAddress });\n    }\n  }\n\n  onClickInbox() {\n    const {\n      inboxVisible, inbox, currentPage, itemsPerPage\n    } = this.state;\n    InboxActions.setInboxVisible({ inboxVisible: !inboxVisible });\n    if (!inbox.children) {\n      LoadingActions.start();\n      InboxActions.fetchInbox({ currentPage, itemsPerPage });\n    }\n  }\n\n  handleSizingIconClick = (size) => {\n    let newColMdValue;\n    switch (size) {\n      case 'Small':\n        newColMdValue = 2;\n        break;\n      case 'Medium':\n        newColMdValue = 4;\n        break;\n      case 'Large':\n        newColMdValue = 5;\n        break;\n      default:\n        newColMdValue = 4;\n    }\n    this.setState({ colMdValue: newColMdValue });\n\n    InboxActions.changeInboxSize(size);\n  };\n\n  getSizeLabel = () => {\n    const { colMdValue } = this.state;\n    switch (colMdValue) {\n      case 2:\n        return 'Small';\n      case 4:\n        return 'Medium';\n      case 5:\n        return 'Large';\n      default:\n        return 'Unknown';\n    }\n  };\n\n  initState = () => {\n    const type = 'inbox';\n    const userState = UserStore.getState();\n    const filters = userState?.profile?.data?.filters || {};\n\n    // you are not able to use this.setState because this would rerender it again and again ...\n\n    // eslint-disable-next-line react/no-direct-mutation-state\n    this.state.sortColumn = filters[type]?.sort || 'name';\n  };\n\n  updateFilterAndUserProfile = (type, sort) => {\n    InboxActions.changeInboxFilter({\n      name: type,\n      sort,\n    });\n\n    UserActions.updateUserProfile({\n      data: {\n        filters: {\n          [type]: {\n            sort,\n          },\n        },\n      },\n    });\n  };\n\n  changeSortColumn = () => {\n    const type = 'inbox';\n    const { sortColumn } = this.state;\n    const sort = sortColumn === 'created_at' ? 'name' : 'created_at';\n\n    this.setState({\n      sortColumn: sort,\n    }, () => {\n      this.updateFilterAndUserProfile(type, sort);\n    });\n  };\n\n  handleMouseDown = (e) => {\n    e.preventDefault();\n\n    document.addEventListener('mousemove', this.handleMouseMove);\n    document.addEventListener('mouseup', this.handleMouseUp);\n  };\n\n  handleMouseMove = (e) => {\n    // Update the position of the div based on the mouse movement\n    const div = document.getElementById('draggableInbox');\n    div.style.left = `${e.clientX}px`;\n    div.style.top = `${e.clientY}px`;\n  };\n\n  handleMouseUp = () => {\n    // Remove the event listeners when the dragging is finished\n    document.removeEventListener('mousemove', this.handleMouseMove);\n    document.removeEventListener('mouseup', this.handleMouseUp);\n  };\n\n  refreshInbox() {\n    const { currentPage, itemsPerPage } = this.state;\n    LoadingActions.start();\n    InboxActions.fetchInbox({ currentPage, itemsPerPage });\n  }\n\n  renderPagination = () => {\n    const { currentPage, totalPages } = this.state;\n\n    if (totalPages <= 1) {\n      return null;\n    }\n\n    const pageNumbers = [];\n    const minPage = Math.max(currentPage - 4, 1);\n    const maxPage = Math.min(minPage + 4, totalPages);\n\n    for (let i = minPage; i <= maxPage; i += 1) {\n      pageNumbers.push(\n        <Pagination.Item\n          key={i}\n          active={i === currentPage}\n          onClick={() => this.handlePageChange(i)}\n        >\n          {i}\n        </Pagination.Item>\n      );\n    }\n\n    if (totalPages > maxPage) {\n      pageNumbers.push(<Pagination.Ellipsis key=\"Ell\" />);\n    }\n\n    return (\n      <div className=\"list-pagination\">\n        <Pagination>\n          <Pagination.First disabled={currentPage === 1} key=\"First\" onClick={() => this.handlePageChange(1)} />\n          <Pagination.Prev\n            disabled={currentPage === 1}\n            key=\"Prev\"\n            onClick={() => this.handlePageChange(currentPage - 1)}\n          />\n          {pageNumbers}\n          <Pagination.Next\n            disabled={currentPage === totalPages}\n            key=\"Next\"\n            onClick={() => this.handlePageChange(currentPage + 1)}\n          />\n          <Pagination.Last\n            disabled={currentPage === totalPages}\n            key=\"Last\"\n            onClick={() => this.handlePageChange(totalPages)}\n          />\n        </Pagination>\n      </div>\n    );\n  };\n\n  inboxSubtrees() {\n    const { inbox, activeDeviceBoxId } = this.state;\n\n    let boxes = '';\n    if (inbox.children) {\n      inbox.children.sort((a, b) => {\n        if (a.name > b.name) { return 1; } if (a.name < b.name) { return -1; } return 0;\n      });\n      boxes = inbox.children.map((deviceBox) => (\n        <DeviceBox\n          key={`box_${deviceBox.id}`}\n          device_box={deviceBox}\n          largerInbox\n          deviceBoxVisible={deviceBox.id === activeDeviceBoxId}\n        />\n      ));\n    }\n\n    return (\n      <div className=\"tree-view\">\n        {boxes}\n        {this.renderPagination()}\n        {inbox.unlinked_attachments ? (\n          <UnsortedBox\n            key=\"unsorted_box\"\n            unsorted_box={inbox.unlinked_attachments}\n            unsortedVisible={activeDeviceBoxId === -1}\n            largerInbox\n          />\n        ) : ''}\n      </div>\n    );\n  }\n\n  infoMessage() {\n    const { collectorAddress } = this.state;\n    return (\n      <Tooltip id=\"assignButton\">\n        You can send yourself files to your inbox by emailing them\n        <br />\n        from your registered email to the following email address:&nbsp;\n        {collectorAddress}\n        .\n        <br />\n        Click to copy the address to your clipboard.\n      </Tooltip>\n    );\n  }\n\n  renderSizingIcon = () => {\n    const tooltipText = `Change inbox size (Currently: ${this.getSizeLabel()})`;\n    const sizes = ['Small', 'Medium', 'Large'];\n\n    return (\n      <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"inbox_size_tooltip\">{tooltipText}</Tooltip>}>\n        <DropdownButton\n          title=\"Size\"\n          className=\"header-button\"\n          id=\"dropdown-size-button\"\n          bsStyle=\"info\"\n          bsSize=\"xs\"\n          style={{ marginLeft: '10px' }}\n\n        >\n          {sizes.map((size) => (\n            <MenuItem key={size} eventKey={size} onSelect={this.handleSizingIconClick}>\n              {size}\n            </MenuItem>\n          ))}\n        </DropdownButton>\n      </OverlayTrigger>\n    );\n  };\n\n  collectorAddressInfoButton() {\n    const { collectorAddress } = this.state;\n\n    return (\n      <CopyToClipboard text={collectorAddress}>\n        <OverlayTrigger placement=\"bottom\" overlay={this.infoMessage()}>\n          <Button\n            bsSize=\"xsmall\"\n            className=\"header-button\"\n          >\n            <i className=\"fa fa-info\" />\n          </Button>\n        </OverlayTrigger>\n      </CopyToClipboard>\n    );\n  }\n\n  renderSortButton() {\n    this.initState();\n\n    const sortTitle = this.state.sortColumn === 'name'\n      ? 'click to sort datasets and attachments by creation date (descending) - currently sorted alphabetically'\n      : 'click to sort datasets and attachments alphabetically - currently sorted by creation date (descending)';\n    const sortTooltip = <Tooltip id=\"inbox_sort_tooltip\">{sortTitle}</Tooltip>;\n    const sortIconClass = this.state.sortColumn === 'name' ? 'fa-sort-alpha-asc' : 'fa-clock-o';\n    const sortIcon = <i className={`fa ${sortIconClass}`} />;\n    return (\n      <OverlayTrigger placement=\"bottom\" overlay={sortTooltip}>\n        <Button\n          bsStyle=\"success\"\n          bsSize=\"xs\"\n          className=\"header-button\"\n          onClick={this.changeSortColumn}\n        >\n          {sortIcon}\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n\n  render() {\n    const { showCollectionTree } = this.props;\n    const {\n      visible, inboxVisible, numberOfAttachments, collectorAddress, colMdValue\n    } = this.state;\n\n    const panelClass = showCollectionTree ? `small-col col-md-${colMdValue}` : 'small-col col-md-5';\n    const inboxDisplay = inboxVisible ? '' : 'none';\n\n    if (visible) {\n      return (\n        <Draggable\n          handle=\".handle\"\n          bounds=\"body\"\n        >\n          <div\n            className={panelClass}\n            style={{\n              zIndex: 10, position: 'absolute', top: '70px', left: '10px'\n            }}\n          >\n            <Panel bsStyle=\"primary\" className=\"eln-panel-detail research-plan-details cursor\">\n              <Panel.Heading\n                className=\"cursor handle draggable\"\n                id=\"draggableInbox\"\n                onMouseDown={this.handleMouseDown}\n              >\n                <div style={{\n                  display: 'flex', justifyContent: 'space-between', alignItems: 'center', width: '100%'\n                }}\n                >\n                  <div>\n                    <button\n                      type=\"button\"\n                      className=\"btn-inbox\"\n                      onClick={() => this.onClickInbox()}\n                    >\n                      <i className=\"fa fa-inbox\" />\n                      <span style={{ marginLeft: '10px', marginRight: '5px', fontWeight: 'bold' }}>Inbox</span>\n                    </button>\n                    {\n                      numberOfAttachments > 0 ? (\n                        <Badge>\n                          &nbsp;\n                          {numberOfAttachments}\n                          &nbsp;\n                        </Badge>\n                      ) : ''\n                    }\n                  </div>\n                  <div>\n                    {this.renderSortButton()}\n                    {collectorAddress ? this.collectorAddressInfoButton() : null}\n                    {this.renderSizingIcon()}\n                    <Button\n                      bsStyle=\"success\"\n                      bsSize=\"xs\"\n                      className=\"header-button\"\n                      onClick={() => this.refreshInbox()}\n                    >\n                      <i className=\"fa fa-refresh\" />\n                    </Button>\n                    <Button\n                      bsStyle=\"danger\"\n                      bsSize=\"xs\"\n                      className=\"header-button\"\n                      onClick={InboxActions.toggleInboxModal}\n                    >\n                      <i className=\"fa fa-close\" />\n                    </Button>\n                  </div>\n                </div>\n              </Panel.Heading>\n              <Panel.Body>\n                <div>\n                  <div className=\"tree-view\">\n                    <div className=\"title\" style={{ backgroundColor: 'white', display: inboxVisible ? 'none' : '' }}>\n                      <button\n                        type=\"button\"\n                        className=\"btn-inbox\"\n                        onClick={() => this.onClickInbox()}\n                      >\n                        <i className=\"fa fa-inbox\" />\n                        <span style={{ marginLeft: '10px' }}>Fetch Inbox</span>\n                      </button>\n                    </div>\n\n                  </div>\n                  <div className=\"tree-wrapper\" style={{ display: inboxDisplay }}>\n                    {this.inboxSubtrees()}\n                  </div>\n                </div>\n              </Panel.Body>\n            </Panel>\n          </div>\n        </Draggable>\n\n      );\n    }\n    return null;\n  }\n}\n\nInboxModal.propTypes = {\n  showCollectionTree: PropTypes.bool.isRequired\n};\n","import React from 'react';\nimport DateTimePicker from 'react-datetime-picker/dist/entry.nostyle';\nimport {\n  Form,\n  ControlLabel,\n  FormControl,\n  FormGroup,\n  Button,\n  ButtonToolbar,\n  Alert\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport CalendarStore, { CalendarTypes } from 'src/stores/alt/stores/CalendarStore';\nimport { elementShowOrNew } from 'src/utilities/routesUtils';\nimport PropTypes from 'prop-types';\n\nfunction capitalize(s) {\n  return s && s[0].toUpperCase() + s.slice(1);\n}\n\nexport default class CalendarEntryEditor extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.onClickBackground = this.onClickBackground.bind(this);\n    this.showDetails = this.showDetails.bind(this);\n    this.navigationLink = this.navigationLink.bind(this);\n  }\n\n  componentDidUpdate(prevProps) {\n    const { show } = this.props;\n    if (show && (prevProps.show !== show)) {\n      this.titleInput?.focus();\n    }\n  }\n\n  onClickBackground(ev) {\n    const { closeModal } = this.props;\n    if (ev.target.className === 'calendarElementModal') closeModal();\n  }\n\n  showDetails(entry) {\n    const { eventableId } = entry;\n    let { eventableType } = entry;\n    eventableType = eventableType.toLowerCase();\n\n    const e = { type: eventableType, params: {} };\n    e.params[`${eventableType}ID`] = eventableId;\n    if (/\\blabimotion\\b/.test(eventableType)) {\n      e.klassType = 'GenericEl';\n    }\n\n    const { onShowLink } = this.props;\n    onShowLink();\n    elementShowOrNew(e);\n  }\n\n  navigationLink(entry, accessible) {\n    if (entry.eventableType && accessible) {\n      return (\n        <div style={{ display: 'flex', justifyContent: 'flex-end', marginBottom: 8 }}>\n          <button\n            type=\"button\"\n            className=\"btn-link\"\n            style={{ marginLeft: '8px' }}\n            onClick={() => this.showDetails(entry)}\n          >\n            {entry.element_name}\n          </button>\n        </div>\n      );\n    }\n\n    if (entry.eventableType) {\n      return (\n        <div\n          style={{\n            fontStyle: 'italic',\n            textAlign: 'end'\n          }}\n        >\n          {entry.element_name}\n        </div>\n      );\n    }\n\n    return <div />;\n  }\n\n  render() {\n    const {\n      show,\n      entry,\n      closeModal,\n      updateEntry,\n      saveEntry,\n      deleteEntry,\n      editable\n    } = this.props;\n    const { eventableType, collectionUsers } = CalendarStore.getState();\n    const currentCalendarTypes = CalendarTypes[eventableType] || CalendarTypes.default;\n    const calendarTypes = currentCalendarTypes.map((type) => (\n      { label: capitalize(type), value: type }\n    ));\n    const notifyUserList = collectionUsers?.map((user) => (\n      { label: user.label, value: user.id }\n    )) || [];\n    const accessible = entry?.accessible === true;\n    const notAccessible = !accessible;\n\n    function createdBy() {\n      return (\n        <>\n          { `created by ${entry.user_name_abbreviation} ` }\n          <span>\n            (\n            {entry.user_email}\n            )\n          </span>\n        </>\n      );\n    }\n\n    return entry ? (\n      <div\n        role=\"button\"\n        tabIndex=\"-1\"\n        onKeyUp={() => { }}\n        className=\"calendarElementModal\"\n        style={{ display: (show ? 'block' : 'none') }}\n        onClick={this.onClickBackground}\n      >\n        <section\n          className=\"calendarElementModalBox\"\n          role=\"document\"\n        >\n          { entry.user_name_abbreviation ? (\n            <div\n              style={{\n                fontStyle: 'italic',\n                textAlign: 'end'\n              }}\n            >\n              {createdBy()}\n            </div>\n          ) : null }\n          {this.navigationLink(entry, accessible)}\n          <Form className=\"entryForm\">\n            <FormGroup className=\"entryGroup\" controlId=\"calendarTitle\">\n              <ControlLabel>Title*</ControlLabel>\n              <FormControl\n                disabled={!editable || notAccessible}\n                inputRef={(ref) => { this.titleInput = ref; }}\n                type=\"text\"\n                value={entry.title || ''}\n                onChange={(ev) => updateEntry('title', ev.target.value)}\n                autoComplete=\"off\"\n              />\n            </FormGroup>\n            <FormGroup className=\"entryGroup\" controlId=\"calendarDescription\">\n              <ControlLabel>Description</ControlLabel>\n              <FormControl\n                disabled={!editable || notAccessible}\n                type=\"text\"\n                componentClass=\"textarea\"\n                value={entry.description || ''}\n                onChange={(ev) => updateEntry('description', ev.target.value)}\n                style={{\n                  height: 100,\n                  resize: 'none'\n                }}\n              />\n            </FormGroup>\n\n            <FormGroup className=\"entryGroup\" controlId=\"calendarEntryType\">\n              <ControlLabel>Type</ControlLabel>\n              <Select\n                disabled={!editable || notAccessible}\n                // key={entry.kind || \"\"}\n                value={entry.kind || ''}\n                onChange={(ev) => updateEntry('kind', ev?.value || '')}\n                options={calendarTypes}\n              />\n            </FormGroup>\n\n            <FormGroup\n              className=\"entryGroup\"\n              controlId=\"calendarEntryEmailNotification\"\n              style={{ display: (notifyUserList.length > 0 ? 'block' : 'none') }}\n            >\n              <ControlLabel>Notify Users</ControlLabel>\n              <Select\n                disabled={!editable || notAccessible}\n                clearable\n                searchable\n                multi\n                value={entry.notifyUsers || ''}\n                onChange={(list) => updateEntry('notifyUsers', list || '')}\n                options={notifyUserList}\n              />\n            </FormGroup>\n\n            <FormGroup\n              className=\"entryGroup\"\n              controlId=\"calendarEntryNotifiedUsers\"\n              style={{ display: (entry.notified_users ? 'block' : 'none') }}\n            >\n              <ControlLabel>Notified Users</ControlLabel>\n              <FormControl\n                disabled\n                type=\"text\"\n                componentClass=\"textarea\"\n                value={entry.notified_users}\n                style={{\n                  height: 100,\n                }}\n              />\n            </FormGroup>\n\n            <FormGroup className=\"entryGroup\" controlId=\"calendarStartEntry\">\n              <ControlLabel>Start*</ControlLabel>\n              <DateTimePicker\n                disabled={!editable || notAccessible}\n                clearIcon={null}\n                value={entry.start}\n                onChange={(date) => updateEntry('start', date)}\n                format=\"dd-MM-y H:mm\"\n                style={{\n                  alignItems: 'baseline',\n                }}\n              />\n            </FormGroup>\n\n            <FormGroup className=\"entryGroup\" controlId=\"calendarEndEntry\">\n              <ControlLabel>End*</ControlLabel>\n              {/* https://www.npmjs.com/package/react-datetime-picker */}\n              <DateTimePicker\n                disabled={!editable || notAccessible}\n                clearIcon={null}\n                value={entry.end}\n                onChange={(date) => updateEntry('end', date)}\n                format=\"dd-MM-y H:mm\"\n              />\n            </FormGroup>\n            {notAccessible ? (\n              <Alert bsStyle=\"danger\">\n                Your access to\n                &nbsp;\n                {entry.element_name}\n                &nbsp;\n                was removed.\n              </Alert>\n            ) : null}\n            <ButtonToolbar\n              style={{\n                display: 'flex',\n                alignItems: 'center',\n              }}\n            >\n              <div style={{ flexGrow: 20 }}>\n                { (entry.eventableType && accessible && entry.id !== undefined) ? (\n                  <div>\n                    <a\n                      href={`/api/v1/calendar_entries/ical?id=${entry.id}`}\n                      onClick={() => window.open(`/api/v1/calendar_entries/ical?id=${entry.id}`)}\n                      style={{ marginLeft: '8px' }}\n                      target=\"_blank\"\n                      rel=\"noreferrer\"\n                    >\n                      ical - download\n                    </a>\n                  </div>\n                ) : null }\n              </div>\n              <Button bsStyle=\"primary\" onClick={closeModal}>Cancel</Button>\n              { entry.id !== undefined && editable ? (\n                <Button\n                  bsStyle=\"danger\"\n                  onClick={() => {\n                    // eslint-disable-next-line no-restricted-globals, no-alert\n                    if (confirm('Are you sure you want to delete the calendar entry?')) {\n                      deleteEntry();\n                    }\n                  }}\n                >\n                  Delete\n                </Button>\n              ) : null }\n              { (editable && accessible) ? <Button bsStyle=\"warning\" onClick={saveEntry}>Save</Button> : null }\n            </ButtonToolbar>\n          </Form>\n        </section>\n      </div>\n    ) : null;\n  }\n}\n\nCalendarEntryEditor.defaultProps = {\n  entry: undefined,\n};\n\nCalendarEntryEditor.propTypes = {\n  show: PropTypes.bool.isRequired,\n  closeModal: PropTypes.func.isRequired,\n  onShowLink: PropTypes.func.isRequired,\n  updateEntry: PropTypes.func.isRequired,\n  saveEntry: PropTypes.func.isRequired,\n  deleteEntry: PropTypes.func.isRequired,\n  editable: PropTypes.bool.isRequired,\n  entry: PropTypes.shape({\n    accessible: PropTypes.bool,\n    id: PropTypes.number,\n    eventableType: PropTypes.string,\n    user_email: PropTypes.string,\n    user_name_abbreviation: PropTypes.string,\n    title: PropTypes.string,\n    description: PropTypes.string,\n    kind: PropTypes.string,\n    notified_users: PropTypes.string,\n    element_name: PropTypes.string,\n    notifyUsers: PropTypes.arrayOf(PropTypes.string),\n    start: PropTypes.instanceOf(Date),\n    end: PropTypes.instanceOf(Date),\n  }),\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nlet currentView = '';\n\nexport function setCurrentViewForEventRenderer(view) {\n  currentView = view;\n}\n\nfunction capitalize(s) {\n  return s[0].toUpperCase() + s.slice(1);\n}\n\nexport function getEventableIcon(entry) {\n  if (entry.element_klass_icon) return entry.element_klass_icon;\n  return null;\n}\n\nexport default function CalendarEvent(props) {\n  const { event } = props;\n  const shortTitle = currentView === 'month';\n\n  return (\n    <div>\n      <div style={{ marginBottom: !shortTitle ? 6 : 0, marginTop: !shortTitle ? 6 : 0 }}>\n        {event.title}\n      </div>\n      { !shortTitle ? (\n        <div>\n          <div style={{ fontStyle: 'italic', marginBottom: !shortTitle ? 6 : 0 }}>\n            {event.element_klass_name ? (\n              <span>\n                <span className={getEventableIcon(event)}>\n                  &nbsp;\n                  {event.element_klass_name}\n                </span>\n                <span>\n                  {event.kind ? ` - ${capitalize(event.kind)}` : null}\n                </span>\n              </span>\n            ) : (\n              <span>\n                {event.kind ? capitalize(event.kind) : null}\n              </span>\n            )}\n          </div>\n          <div>\n            {event.element_short_label}\n          </div>\n        </div>\n      ) : null }\n    </div>\n  );\n}\n\nCalendarEvent.propTypes = {\n  event: PropTypes.shape({\n    title: PropTypes.string,\n    kind: PropTypes.string,\n    element_klass_name: PropTypes.string,\n    element_short_label: PropTypes.string,\n  }).isRequired,\n};\n","import React from 'react';\nimport { Calendar as BaseCalendar, Views, momentLocalizer } from 'react-big-calendar';\nimport withDragAndDrop from 'react-big-calendar/lib/addons/dragAndDrop';\nimport { OverlayTrigger, Button, Tooltip } from 'react-bootstrap';\nimport moment from 'moment';\n\nimport CalendarStore from 'src/stores/alt/stores/CalendarStore';\nimport CalendarActions from 'src/stores/alt/actions/CalendarActions';\nimport CalendarEntryEditor from 'src/components/calendar/CalendarEntryEditor';\nimport Draggable from 'react-draggable';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport CalendarEvent, { setCurrentViewForEventRenderer } from 'src/components/calendar/CalendarEvent';\n\nconst AllViews = Object.keys(Views).map((k) => Views[k]);\n\nconst formats = {\n  agendaHeaderFormat: ({ start, end }, culture, localizer) => `${localizer.format(start, 'DD MMMM', culture)} - ${localizer.format(end, 'DD MMMM YYYY', culture)}`,\n  agendaDateFormat: 'ddd DD MMMM YYYY',\n  dayFormat: 'dddd DD',\n  dayRangeHeaderFormat: ({ start, end }, culture, localizer) => `${localizer.format(start, 'DD MMMM', culture)} - ${localizer.format(end, 'DD MMMM YYYY', culture)}`,\n  monthHeaderFormat: 'MMMM YYYY',\n  dayHeaderFormat: 'dddd DD MMMM YYYY',\n  weekdayFormat: 'dddd',\n};\n\nconst localizer = momentLocalizer(moment);\nconst DragAndDropCalendar = withDragAndDrop(BaseCalendar);\n\nconst ModalWidth = 900;\nconst ModalHeight = 700;\nconst ColorCache = {};\nconst DragThreshold = 25;\n\n// cached vars\nlet currentUserId;\n\nconst WindowPreviewNone = 0;\nconst WindowPreviewRight = 1;\nconst WindowPreviewLeft = 2;\nconst WindowPreviewFullScreen = 3;\n\nfunction getPreviewStyleArgs(state) {\n  switch (state) {\n    case WindowPreviewNone:\n      return {\n        width: 0,\n        height: 0,\n        left: window.innerWidth / 2,\n        top: window.innerHeight / 2\n      };\n    case WindowPreviewRight:\n      return {\n        width: ModalWidth,\n        height: window.innerHeight,\n        left: window.innerWidth - ModalWidth,\n        top: 0\n      };\n    case WindowPreviewLeft:\n      return {\n        width: ModalWidth,\n        height: window.innerHeight,\n        left: 0,\n        top: 0\n      };\n    case WindowPreviewFullScreen:\n      return {\n        width: window.innerWidth,\n        height: window.innerHeight,\n        left: 0,\n        top: 0\n      };\n    default:\n      throw new Error('Not implemented');\n  }\n}\n\nfunction getWindowStyleOffsets(state) {\n  switch (state) {\n    case WindowPreviewNone:\n      return null;\n    case WindowPreviewRight:\n      return {\n        x: window.innerWidth - ModalWidth,\n        y: 0,\n      };\n    case WindowPreviewLeft:\n      return {\n        x: 0,\n        y: 0,\n      };\n    case WindowPreviewFullScreen:\n      return {\n        x: (window.innerWidth - ModalWidth) / 2,\n        y: 0,\n      };\n    default:\n      throw new Error('Not implemented');\n  }\n}\n\nconst allDayAccessor = (event) => {\n  if ((event.start && event.start.getHours() === 0 && event.start.getMinutes() === 0)\n  && (event.end && event.end.getHours() === 0 && event.end.getMinutes() === 0) &&\n  moment(event.start).format() !== moment(event.end).format()) {\n    return true;\n  }\n  return false;\n};\n\n// see:\n//  https://react-bootstrap-v3.netlify.app/components/modal/\n//  https://jquense.github.io/react-big-calendar/examples/?path=/docs/props-full-prop-list--page\n\nfunction idToColorComponent(id) {\n  return (50 + (id % 19) * 10);\n}\n\nfunction getRed(id) {\n  return `rgb(${idToColorComponent(id)},0,0)`;\n}\n\nfunction getGreen(id) {\n  return `rgb(0,${idToColorComponent(id)},0)`;\n}\n\nfunction getRedGreen(id) {\n  const tmp = idToColorComponent(id);\n  return `rgb(${tmp},${tmp},0)`;\n}\n\nfunction getRedBlue(id) {\n  const tmp = idToColorComponent(id);\n  return `rgb(${tmp},0,${tmp})`;\n}\n\nfunction getGreenBlue(id) {\n  const tmp = idToColorComponent(id);\n  return `rgb(0,${tmp},${tmp})`;\n}\n\nfunction getEntryColor(entry) {\n  let color;\n\n  if (entry.eventableType) {\n    color = ColorCache[entry.eventableId];\n    if (!color) {\n      if (entry.eventableType === 'Sample') {\n        color = getRed(entry.eventableId);\n      } else if (entry.eventableType === 'Reaction') {\n        color = getGreen(entry.eventableId);\n      } else if (entry.eventableType === 'ResearchPlan') {\n        color = getGreenBlue(entry.eventableId);\n      } else if (entry.eventableType === 'Screen') {\n        color = getRedGreen(entry.eventableId);\n      } else if (entry.eventableType === 'Element') {\n        color = getRedBlue(entry.eventableId);\n      }\n      ColorCache[entry.eventableId] = color;\n    }\n  } else {\n    color = '#265985'; // getRandomBlue();\n  }\n  return color;\n}\n\nfunction getEntryOpacity(entry, userId) {\n  return entry.created_by === userId ? 1 : 0.3;\n}\n\nfunction canEditEntry(entry) {\n  const { currentUser } = UserStore.getState();\n  return !entry.created_by || entry.created_by === currentUser.id;\n}\n\nfunction buildNewEntry(entry) {\n  const { eventableType, eventableId } = CalendarStore.getState();\n  const customEntry = {\n    ...entry,\n    title: '',\n    description: '',\n    kind: '',\n    eventableId,\n    eventableType,\n    accessible: true,\n  };\n\n  return customEntry;\n}\n\nfunction onHandleTimeUpdate(ev) {\n  const entry = ev.event;\n  if (!entry || !canEditEntry(entry)) return;\n\n  entry.start = ev.start;\n  entry.end = ev.end;\n\n  CalendarActions.updateEntry(entry);\n}\n\nfunction getEventableIcon(type) {\n  let icon;\n\n  if (type === 'Sample') {\n    icon = 'icon-sample';\n  } else if (type === 'Reaction') {\n    icon = 'icon-reaction';\n  } else if (type === 'Wellplate') {\n    icon = 'icon-wellplate';\n  } else if (type === 'Research Plan') {\n    icon = 'icon-research_plan';\n  } else if (type === 'Screen') {\n    icon = 'icon-screen';\n  }\n\n  return icon;\n}\n\nfunction onSwitchShowSharedCollectionEntries(val) {\n  const {\n    start,\n    end,\n    eventableType,\n    eventableId\n  } = CalendarStore.getState();\n\n  const params = {\n    start,\n    end,\n    eventableType,\n    eventableId,\n    showSharedCollectionEntries: val\n  };\n\n  CalendarActions.setViewParams(params);\n}\n\nfunction eventStyleGetter(event) {\n  const style = {\n    backgroundColor: getEntryColor(event),\n    opacity: getEntryOpacity(event, currentUserId),\n  };\n  return { style };\n}\n\nexport default class Calendar extends React.Component {\n  constructor(props) {\n    super(props);\n    const scrollTime = new Date();\n    scrollTime.setHours(5);\n    scrollTime.setMinutes(55);\n\n    this.state = {\n      showTimeSlotEditor: false,\n      currentEntry: null,\n      currentEntryEditable: false,\n      bounds: {\n        left: 0,\n        top: 0,\n        bottom: 0,\n        right: 0\n      },\n      backgroundClickToClose: true,\n      startDrag: false,\n      dragging: false,\n      dragDisabled: false,\n\n      windowPreviewState: WindowPreviewNone,\n      windowPreviewStateLast: WindowPreviewNone,\n      windowPreviewArgs: {},\n      windowStyleArgs: {\n        width: ModalWidth,\n        height: ModalHeight\n      },\n      windowOffsets: {\n        x: 0,\n        y: 0\n      },\n      scrollTime,\n      isFullScreen: false,\n      showOwnEntries: false,\n      currentView: null,\n    };\n    this.onRangeChange = this.onRangeChange.bind(this);\n    this.onChange = this.onChange.bind(this);\n    this.closeCalendar = this.closeCalendar.bind(this);\n    this.selectEntry = this.selectEntry.bind(this);\n    this.selectSlotEvent = this.selectSlotEvent.bind(this);\n    this.closeItemEditor = this.closeItemEditor.bind(this);\n    this.handleEntryKeyUpdate = this.handleEntryKeyUpdate.bind(this);\n    this.saveEntry = this.saveEntry.bind(this);\n    this.deleteEntry = this.deleteEntry.bind(this);\n    this.onStartDrag = this.onStartDrag.bind(this);\n    this.onClickBackground = this.onClickBackground.bind(this);\n    this.onLockBackgroundClose = this.onLockBackgroundClose.bind(this);\n    this.handleResize = this.handleResize.bind(this);\n    this.onFullScreen = this.onFullScreen.bind(this);\n    this.onShowOwnEntries = this.onShowOwnEntries.bind(this);\n    this.onDrag = this.onDrag.bind(this);\n    this.onDragStop = this.onDragStop.bind(this);\n    this.enableDrag = this.enableDrag.bind(this);\n    this.disableDrag = this.disableDrag.bind(this);\n    this.draggleHtmlRef = null;\n  }\n\n  componentDidMount() {\n    CalendarStore.listen(this.onChange);\n    window.addEventListener('resize', this.handleResize);\n  }\n\n  componentWillUnmount() {\n    CalendarStore.unlisten(this.onChange);\n    window.removeEventListener('resize', this.handleResize);\n  }\n\n  handleResize() {\n    this.onStartDrag();\n  }\n\n  handleEntryKeyUpdate(key, value) {\n    let { currentEntry } = this.state;\n    currentEntry = currentEntry || {};\n    currentEntry[key] = value;\n    this.setState({ currentEntry });\n  }\n\n  onChange() {\n    this.setState(CalendarStore.getState());\n  }\n\n  onDragStop(ev) {\n    if (!ev.target) return;\n\n    const evType = ev.target.tagName;\n    if (evType === 'BUTTON' || evType === 'I') {\n      ev.stopPropagation();\n      ev.preventDefault();\n      return;\n    }\n\n    const { dragging } = this.state;\n    if (!dragging) {\n      ev.stopPropagation();\n      ev.preventDefault();\n      return;\n    }\n\n    if (ev.x < DragThreshold) {\n      this.setState({\n        startDrag: false,\n        dragging: false,\n        partialWindow: true,\n        windowPreviewState: WindowPreviewNone,\n        windowPreviewStateLast: WindowPreviewLeft,\n        windowPreviewArgs: getPreviewStyleArgs(WindowPreviewNone),\n        windowStyleArgs: getPreviewStyleArgs(WindowPreviewLeft),\n        windowOffsets: { x: 0, y: 0 }\n      });\n    } else if (window.document.documentElement.clientWidth - ev.x < DragThreshold) {\n      this.setState({\n        startDrag: false,\n        dragging: false,\n        partialWindow: true,\n        windowPreviewState: WindowPreviewNone,\n        windowPreviewStateLast: WindowPreviewRight,\n        windowPreviewArgs: getPreviewStyleArgs(WindowPreviewNone),\n        windowStyleArgs: getPreviewStyleArgs(WindowPreviewRight),\n        windowOffsets: { x: 0, y: 0 }\n      });\n    } else if (ev.y < DragThreshold) {\n      this.setState({\n        startDrag: false,\n        dragging: false,\n        partialWindow: true,\n        windowPreviewState: WindowPreviewNone,\n        windowPreviewStateLast: WindowPreviewFullScreen,\n        windowPreviewArgs: getPreviewStyleArgs(WindowPreviewNone),\n        windowStyleArgs: getPreviewStyleArgs(WindowPreviewFullScreen),\n        windowOffsets: { x: 0, y: 0 }\n      });\n    } else {\n      this.setState({\n        startDrag: false,\n        dragging: false,\n        windowPreviewStateLast: WindowPreviewNone,\n        windowOffsets: { x: 0, y: 0 }\n      });\n    }\n  }\n\n  onDrag(ev) {\n    if (!ev.target) return;\n\n    const evType = ev.target.tagName;\n    if (evType === 'BUTTON' || evType === 'I') {\n      ev.stopPropagation();\n      ev.preventDefault();\n      return;\n    }\n\n    const { windowPreviewState, startDrag, dragging } = this.state;\n    if (!dragging) {\n      ev.stopPropagation();\n      ev.preventDefault();\n      return;\n    }\n\n    const { clientWidth, clientHeight } = window.document.documentElement;\n    const smallScreen = ModalWidth >= clientWidth || ModalHeight >= clientHeight;\n    if (smallScreen) return;\n\n    if (ev.x < DragThreshold) {\n      if (windowPreviewState !== WindowPreviewLeft) {\n        this.setState({\n          windowPreviewState: WindowPreviewLeft,\n          windowPreviewArgs: getPreviewStyleArgs(WindowPreviewLeft)\n        });\n      }\n    } else if (clientWidth - ev.x < DragThreshold) {\n      if (windowPreviewState !== WindowPreviewRight) {\n        this.setState({\n          windowPreviewState: WindowPreviewRight,\n          windowPreviewArgs: getPreviewStyleArgs(WindowPreviewRight)\n        });\n      }\n    } else if (ev.y < DragThreshold) {\n      if (windowPreviewState !== WindowPreviewFullScreen) {\n        this.setState({\n          windowPreviewState: WindowPreviewFullScreen,\n          windowPreviewArgs: getPreviewStyleArgs(WindowPreviewFullScreen)\n        });\n      }\n    } else if (windowPreviewState !== WindowPreviewNone) {\n      this.setState({\n        windowPreviewState: WindowPreviewNone,\n        windowPreviewArgs: getPreviewStyleArgs(WindowPreviewNone)\n      });\n    }\n\n    if (startDrag) {\n      this.setState({\n        startDrag: false\n      });\n    }\n  }\n\n  onStartDrag(event) {\n    if (!event?.target) return;\n\n    const evType = event.target.tagName;\n    if (evType === 'BUTTON' || evType === 'I') {\n      event.stopPropagation();\n      event.preventDefault();\n      return;\n    }\n\n    this.setState({\n      dragging: true,\n    });\n\n    if (!this.draggleHtmlRef) {\n      this.draggleHtmlRef = document.querySelector('.calendarModal');\n    }\n\n    const { clientWidth, clientHeight } = document.documentElement;\n    const targetRect = this.draggleHtmlRef.getBoundingClientRect();\n    const SmallScreen = ModalWidth >= clientWidth || ModalHeight >= clientHeight;\n    const { windowPreviewStateLast } = this.state;\n\n    const hideFactor = 1 / 3;\n    const bounds = {\n      left: -targetRect.width * (1 - hideFactor),\n      right: clientWidth - targetRect.width * hideFactor,\n      top: 0,\n      bottom: clientHeight - (targetRect.height * hideFactor)\n    };\n\n    if (SmallScreen) {\n      this.setState({\n        partialWindow: false,\n        isFullScreen: true,\n        bounds,\n        windowStyleArgs: {\n          width: clientWidth,\n          height: clientHeight,\n        }\n      });\n    } else {\n      this.setState({\n        startDrag: true,\n        partialWindow: false,\n        isFullScreen: false,\n        bounds,\n        windowStyleArgs: {\n          width: ModalWidth,\n          height: ModalHeight,\n        },\n        windowOffsets: getWindowStyleOffsets(windowPreviewStateLast),\n      });\n    }\n  }\n\n  onClickBackground(ev) {\n    const { backgroundClickToClose } = this.state;\n    if (backgroundClickToClose) {\n      this.closeCalendar();\n      ev.stopPropagation();\n      ev.preventDefault();\n    }\n  }\n\n  onShowOwnEntries(val) {\n    this.setState({ showOwnEntries: val });\n  }\n\n  onFullScreen(val) {\n    if (val) {\n      this.setState({\n        isFullScreen: true,\n        windowStyleArgs: {\n          width: window.innerWidth,\n          height: window.innerHeight,\n          left: 0,\n          top: 0,\n        },\n        windowPreviewStateLast: WindowPreviewFullScreen,\n      });\n    } else {\n      this.setState({\n        isFullScreen: false,\n        windowStyleArgs: {\n          width: ModalWidth,\n          height: ModalHeight,\n          left: 'initial',\n          top: 'initial',\n        },\n        windowPreviewStateLast: WindowPreviewNone,\n      });\n    }\n  }\n\n  onLockBackgroundClose(val) {\n    this.setState({ backgroundClickToClose: val });\n  }\n\n  onRangeChange(range, view) {\n    let newRange = range;\n\n    if (Array.isArray(range)) {\n      if (range.length === 1) {\n        newRange = {\n          start: range[0],\n          end: new Date((new Date(range[0])).setDate(range[0].getDate() + 1))\n        };\n      } else {\n        const lastDate = range[range.length - 1];\n        newRange = {\n          start: range[0],\n          end: new Date((new Date(lastDate)).setDate(lastDate.getDate() + 1))\n        };\n      }\n    }\n\n    const {\n      start,\n      end,\n      eventableType,\n      eventableId,\n      showSharedCollectionEntries\n    } = CalendarStore.getState();\n\n    if (view) {\n      this.setState({ currentView: view });\n    }\n\n    if (start <= newRange.start && end >= newRange.end) return;\n\n    const params = {\n      ...newRange,\n      eventableType,\n      eventableId,\n      showSharedCollectionEntries\n    };\n\n    CalendarActions.setViewParams(params);\n  }\n\n  enableDrag() {\n    this.setState({ dragDisabled: false });\n  }\n\n  disableDrag() {\n    this.setState({ dragDisabled: true });\n  }\n\n  closeItemEditor() {\n    this.setState({\n      currentEntry: {},\n      showTimeSlotEditor: false,\n      currentEntryEditable: false,\n    });\n  }\n\n  selectEntry(entry) {\n    if (entry.eventableType) {\n      CalendarActions.getEventableUsers({\n        eventable_type: entry.eventableType,\n        eventable_id: entry.eventableId\n      });\n    } else {\n      CalendarActions.clearEventableUsers();\n    }\n\n    this.setState({\n      currentEntry: entry,\n      showTimeSlotEditor: true,\n      currentEntryEditable: canEditEntry(entry)\n    });\n  }\n\n  selectSlotEvent(entry) {\n    const { eventableType, eventableId } = CalendarStore.getState();\n\n    if (eventableType) {\n      CalendarActions.getEventableUsers({\n        eventable_type: eventableType,\n        eventable_id: eventableId\n      });\n    } else {\n      CalendarActions.clearEventableUsers();\n    }\n\n    this.setState({\n      currentEntry: buildNewEntry(entry),\n      showTimeSlotEditor: true,\n      currentEntryEditable: canEditEntry(entry)\n    });\n  }\n\n  saveEntry() {\n    const { currentEntry } = this.state;\n    const { title } = currentEntry;\n    if (!title) {\n      // eslint-disable-next-line no-alert\n      alert('Please enter a title.');\n      return;\n    }\n    if (currentEntry.id) {\n      CalendarActions.updateEntry(currentEntry);\n    } else {\n      CalendarActions.createEntry(currentEntry);\n    }\n    this.closeItemEditor();\n  }\n\n  deleteEntry() {\n    const { currentEntry } = this.state;\n    CalendarActions.deleteEntry(currentEntry.id);\n    this.closeItemEditor();\n  }\n\n  closeCalendar() {\n    this.setState({\n      currentEntry: null,\n      showTimeSlotEditor: false\n    });\n\n    CalendarActions.hideCalendar();\n  }\n\n  filterEntries(entries, options) {\n    if (options.eventableType) {\n      // eventable calendar\n      const { showOwnEntries } = this.state;\n      if (showOwnEntries) {\n        return entries;\n      }\n\n      return entries.filter((e) => (\n        e.eventableId === options.eventableId && e.eventableType === options.eventableType\n      ));\n    }\n\n    // privat calendar\n    return entries;\n  }\n\n  render() {\n    const {\n      show,\n      entries,\n      eventableType,\n      eventableId,\n      showSharedCollectionEntries\n    } = CalendarStore.getState();\n    const {\n      showTimeSlotEditor,\n      currentEntry,\n      currentEntryEditable,\n      bounds,\n      showOwnEntries,\n      backgroundClickToClose,\n      isFullScreen,\n      partialWindow,\n      windowPreviewArgs,\n      windowStyleArgs,\n      windowOffsets,\n      startDrag,\n      dragDisabled,\n      windowPreviewState,\n      scrollTime,\n      currentView\n    } = this.state;\n    const { currentUser } = UserStore.getState();\n    const { clientWidth, clientHeight } = window.document.documentElement;\n    const smallScreen = ModalWidth >= clientWidth || ModalHeight >= clientHeight;\n    const defaultPosition = {\n      x: (clientWidth - ModalWidth) / 2,\n      y: (clientHeight - ModalHeight) / 2\n    };\n\n    currentUserId = currentUser?.id;\n\n    const filteredEntries = this.filterEntries(entries, {\n      eventableType,\n      eventableId,\n      showSharedCollectionEntries\n    });\n\n    if (show && !currentView) {\n      setTimeout(() => {\n        this.setState({ currentView: 'week' });\n      }, 10);\n    }\n\n    setCurrentViewForEventRenderer(currentView);\n    let dragPosition = null;\n    if (smallScreen || isFullScreen) {\n      dragPosition = { x: 0, y: 0 };\n    } else if ((partialWindow || startDrag)) {\n      dragPosition = windowOffsets;\n    }\n\n    function headerDescription() {\n      return ` ${eventableType} - Calendar`;\n    }\n\n    return (\n      <div\n        role=\"button\"\n        tabIndex=\"-1\"\n        onKeyUp={() => { }}\n        onClick={this.onClickBackground}\n        className=\"calendarModalBackground\"\n        style={{\n          display: show ? 'initial' : 'none',\n          pointerEvents: backgroundClickToClose ? 'initial' : 'none',\n          backgroundColor: backgroundClickToClose ? '#50505050' : 'transparent'\n        }}\n      >\n        <div\n          className=\"calendarDragPreview\"\n          style={{\n            ...windowPreviewArgs,\n            opacity: (windowPreviewState === WindowPreviewNone ? 0 : 1)\n          }}\n        />\n        <Draggable\n          handle=\".handle\"\n          bounds={bounds}\n          disabled={smallScreen || dragDisabled}\n          defaultPosition={defaultPosition}\n          position={dragPosition}\n          onStart={this.onStartDrag}\n          onDrag={this.onDrag}\n          onStop={this.onDragStop}\n        >\n          <div\n            role=\"button\"\n            tabIndex=\"0\"\n            onKeyUp={() => { }}\n            onKeyDown={() => { }}\n            style={windowStyleArgs}\n            className=\"calendarModal\"\n            onClick={(ev) => {\n              ev.stopPropagation();\n              ev.preventDefault();\n            }}\n          >\n            <div className=\"calendarHeader handle\">\n              <header>\n                { eventableType ? (\n                  <span>\n                    <i className={getEventableIcon(eventableType)} />\n                    {headerDescription()}\n                  </span>\n                ) : 'Calendar' }\n              </header>\n              <div className=\"calendarHeaderActions\">\n                { eventableType ? (\n                  <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"showMyEntries\">Show my entries</Tooltip>}>\n                    <Button\n                      bsSize=\"small\"\n                      type=\"button\"\n                      bsStyle={showOwnEntries ? 'success' : 'default'}\n                      onKeyUp={() => { }}\n                      onMouseEnter={this.disableDrag}\n                      onMouseLeave={this.enableDrag}\n                      onClick={(e) => {\n                        this.onShowOwnEntries(!showOwnEntries);\n                        e.stopPropagation();\n                        e.preventDefault();\n                      }}\n                    >\n                      <i className=\"fa fa-user-plus\" />\n                      &nbsp;\n                    </Button>\n                  </OverlayTrigger>\n                ) : (\n                  <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"showSharedCollectionEntries\">Show shared collection entries</Tooltip>}>\n                    <Button\n                      bsSize=\"small\"\n                      type=\"button\"\n                      bsStyle={showSharedCollectionEntries ? 'success' : 'default'}\n                      onMouseEnter={this.disableDrag}\n                      onMouseLeave={this.enableDrag}\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        e.preventDefault();\n                        onSwitchShowSharedCollectionEntries(!showSharedCollectionEntries);\n                      }}\n                    >\n                      <i className=\"fa fa-files-o\" />\n                      &nbsp;\n                    </Button>\n                  </OverlayTrigger>\n                )}\n                { smallScreen ? null : (\n                  <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"fullscreenCalendar\">FullScreen</Tooltip>}>\n                    <Button\n                      bsSize=\"small\"\n                      type=\"button\"\n                      bsStyle={isFullScreen ? 'success' : 'default'}\n                      onMouseEnter={this.disableDrag}\n                      onMouseLeave={this.enableDrag}\n                      onClick={(e) => {\n                        this.onFullScreen(!isFullScreen);\n                        e.stopPropagation();\n                        e.preventDefault();\n                      }}\n                    >\n                      <i className=\"fa fa-expand\" />\n                      &nbsp;\n                    </Button>\n                  </OverlayTrigger>\n                )}\n                { smallScreen ? null : (\n                  <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"calendarBackgroundClickDescription\">Click in background without closing Calendar</Tooltip>}>\n                    <Button\n                      bsSize=\"small\"\n                      type=\"button\"\n                      bsStyle={backgroundClickToClose ? 'default' : 'info'}\n                      onMouseEnter={this.disableDrag}\n                      onMouseLeave={this.enableDrag}\n                      onClick={(e) => {\n                        this.onLockBackgroundClose(!backgroundClickToClose);\n                        e.stopPropagation();\n                        e.preventDefault();\n                      }}\n                    >\n                      { backgroundClickToClose ? <i className=\"fa fa-unlock\" /> : <i className=\"fa fa-lock\" /> }\n                      &nbsp;\n                    </Button>\n                  </OverlayTrigger>\n                )}\n                <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"closeCalendarButtonDescription\">Close Calendar</Tooltip>}>\n                  <Button bsSize=\"small\" type=\"button\" bsStyle=\"danger\" onClick={this.closeCalendar}>\n                    <i className=\"fa fa-close\" />\n                    &nbsp;\n                  </Button>\n                </OverlayTrigger>\n              </div>\n\n            </div>\n            <div className=\"calendarBody\">\n              <DragAndDropCalendar\n                components={{\n                  event: CalendarEvent\n                }}\n                localizer={localizer}\n                events={filteredEntries}\n                views={AllViews}\n                view={currentView || 'month'}\n                startAccessor=\"start\"\n                endAccessor=\"end\"\n                className=\"calendar\"\n                selectable\n                resizable\n                onRangeChange={this.onRangeChange}\n                onView={() => { }} // prevent warning message in browser\n                onSelectEvent={this.selectEntry}\n                onSelectSlot={this.selectSlotEvent}\n                onEventDrop={onHandleTimeUpdate}\n                onEventResize={onHandleTimeUpdate}\n                step={15}\n                scrollToTime={scrollTime}\n                eventPropGetter={(eventStyleGetter)}\n                showMultiDayTimes={false}\n                formats={formats}\n                allDayAccessor={allDayAccessor}\n                // enableAutoScroll={true}\n              />\n\n              <CalendarEntryEditor\n                show={showTimeSlotEditor}\n                closeModal={this.closeItemEditor}\n                entry={currentEntry}\n                updateEntry={this.handleEntryKeyUpdate}\n                saveEntry={this.saveEntry}\n                deleteEntry={this.deleteEntry}\n                editable={currentEntryEditable}\n                onShowLink={() => {\n                  this.onLockBackgroundClose(false);\n                  this.setState({\n                    startDrag: false,\n                    partialWindow: true,\n                    windowPreviewState: WindowPreviewNone,\n                    windowPreviewStateLast: WindowPreviewLeft,\n                    windowPreviewArgs: getPreviewStyleArgs(WindowPreviewNone),\n                    windowStyleArgs: getPreviewStyleArgs(WindowPreviewLeft),\n                    windowOffsets: { x: 0, y: 0 }\n                  });\n                }}\n              />\n            </div>\n          </div>\n        </Draggable>\n      </div>\n    );\n  }\n}\n","import React, { Component } from 'react';\nimport { Modal, ProgressBar } from 'react-bootstrap';\nimport LoadingStore from 'src/stores/alt/stores/LoadingStore';\n\nexport default class ProgressModal extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      ...LoadingStore.getState(),\n    };\n\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    LoadingStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    LoadingStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState({ ...state });\n  }\n\n  render() {\n    const { loadingWithProgress, filePool } = this.state;\n\n    const progressValue = [];\n    if (filePool) {\n      filePool.forEach((file) => {\n        const item = (<div>\n          <i key={file.filename}>Uploading {file.filename}</i>\n          <ProgressBar animated now={file.progress*100} />\n        </div>);\n        progressValue.push(item);\n      });\n    }\n\n    return (\n      <Modal className='loading-progress-modal' animation show={loadingWithProgress}>\n        {progressValue}\n      </Modal>\n    );\n  }\n}\n","import React from 'react';\nimport { Alert } from 'react-bootstrap';\n\nconst togglePanel = (store) => () => {\n  if (store.searchResultsCount > 0) {\n    store.toggleSearch();\n    store.toggleSearchResults();\n    store.clearTabCurrentPage();\n  }\n}\n\nconst handleClear = (store) => {\n  store.clearSearchResults();\n}\n\nconst showErrorMessage = (store) => {\n  if (store.errorMessages.length >= 1) {\n    return <Alert bsStyle=\"danger\">{store.errorMessages.join(', ')}</Alert>;\n  }\n}\n\nconst filterSearchValues = (store) => {\n  let filteredOptions = [];\n\n  if (store.detail_search_values.length >= 1) {\n    store.detailSearchValues.map((f, i) => {\n      let values = { ...Object.values(f)[0] };\n      if (values.value != '') {\n        filteredOptions.push(values);\n      }\n    });\n    if (filteredOptions[0]) {\n      filteredOptions[0].link = '';\n    }\n  } else {\n    let searchValues =\n      store.searchModalSelectedForm.value == 'publication' ? store.publicationSearchValues : store.advancedSearchValues;\n    filteredOptions = searchValues.filter((f, id) => {\n      return (f.field && f.link && f.value) ||\n        (id == 0 && f.field && f.value)\n    });\n  }\n  store.changeSearchFilter(filteredOptions);\n  const storedFilter = store.searchFilters;\n  return storedFilter.length == 0 ? [] : storedFilter[0].filters;\n}\n\nconst handleSearch = (store, uiState) => {\n  const { currentCollection } = uiState;\n  const collectionId = currentCollection ? currentCollection.id : null;\n  const filters = filterSearchValues(store);\n  let message = 'Please fill out all needed fields';\n  store.addErrorMessage(message);\n\n  if (filters.length > 0 && store.errorMessages.length == 1) {\n    store.showSearchResults();\n    store.removeErrorMessage(message);\n\n    const selection = {\n      elementType: 'advanced',\n      advanced_params: filters,\n      search_by_method: 'advanced',\n      page_size: uiState.number_of_results\n    };\n\n    store.loadSearchResults({\n      selection,\n      collectionId: collectionId,\n      isSync: uiState.isSync,\n      moleculeSort: true,\n    });\n    store.clearSearchAndTabResults();\n    searchValuesByFilters(store);\n  }\n}\n\nconst searchValuesBySubFields = (val, table) => {\n  let label = '';\n  let value = '';\n  let unit = '';\n  let match = val.match;\n  let searchValues = [];\n\n  val.field.sub_fields.map((sub) => {\n    if (sub.type == 'label') {\n      label = sub.value;\n    } else if (val.sub_values[0][sub.id]) {\n      let subContent = val.sub_values[0][sub.id];\n      if (subContent.value !== undefined) {\n        value = subContent.value;\n        unit = subContent.value_system;\n        label = sub.col_name;\n        match = '>=';\n      } else {\n        value = subContent;\n        label = label === '' ? sub.col_name : label;\n      }\n      searchValues.push([val.link, table, `${val.field.label.toLowerCase()}: ${label.toLowerCase()}`, match, value, unit].join(\" \"));\n    } else if (val.sub_values[0][sub.key]) {\n      value = val.sub_values[0][sub.key];\n      searchValues.push([val.link, table, `${val.field.label.toLowerCase()}: ${sub.label.toLowerCase()}`, val.match, value, unit].join(\" \"));\n    }\n  });\n  return searchValues;\n}\n\nconst searchValuesByFilters = (store) => {\n  const storedFilter = store.searchFilters;\n  const filters = storedFilter.length == 0 ? [] : storedFilter[0].filters;\n  let searchValues = [];\n\n  if (store.searchResultVisible && filters.length > 0) {\n    filters.map((val) => {\n      let table = val.field.table || val.table;\n      let value = val.value;\n      table = table.charAt(0).toUpperCase() + table.slice(1, -1).replace('_', ' ');\n      value = value != true ? value.replace(/[\\n\\r]/g, ' OR ') : value;\n\n      if (val.field.sub_fields && val.field.sub_fields.length >= 1 && val.sub_values.length >= 1) {\n        let values = searchValuesBySubFields(val, table);\n        searchValues.push(...values);\n      } else {\n        searchValues.push([val.link, table, val.field.label.toLowerCase(), val.match, value, val.unit].join(\" \"));\n      }\n    });\n  }\n  store.changeSearchValues(searchValues);\n}\n\nconst panelVariables = (store) => {\n  let variables = [\n    {\n      defaultClassName: 'collapsible-search-result',\n      invisibleClassName: (store.search_result_panel_visible ? '' : ' inactive'),\n      inactiveSearchClass: (!store.searchVisible ? 'inactive' : ''),\n      inactiveResultClass: (!store.searchResultVisible ? 'inactive' : ''),\n      searchIcon: `fa fa-chevron-${store.search_icon} icon-right`,\n      resultIcon: `fa fa-chevron-${store.result_icon} icon-right`,\n      searchTitle: (store.searchVisible ? 'Search' : 'Refine search'),\n      resultTitle: (store.searchResultVisible ? 'Result' : 'Back to result'),\n    }\n  ];\n  return variables[0];\n}\n\nexport { togglePanel, handleClear, showErrorMessage, handleSearch, panelVariables }\n","export default {\n  fields: {\n    samples: [\n      {\n        value: {\n          column: 'iupac_name',\n          label: 'Molecule',\n          type: 'text',\n          advanced: false,\n          table: 'molecules',\n        },\n        label: 'Molecule'\n      },\n      {\n        value: {\n          column: 'stereo',\n          opt: 'abs',\n          label: 'Stereo Abs',\n          type: 'select',\n          option_layers: \"stereoAbsOptions\",\n          advanced: false,\n        },\n        label: 'Stereo Abs'\n      },\n      {\n        value: {\n          column: 'stereo',\n          opt: 'rel',\n          label: 'Stereo Rel',\n          type: 'select',\n          option_layers: \"stereoRelOptions\",\n          advanced: false,\n        },\n        label: 'Stereo Rel'\n      },\n      {\n        value: {\n          column: 'decoupled',\n          label: 'Decoupled',\n          type: 'checkbox',\n          advanced: false,\n        },\n        label: 'Decoupled'\n      },\n      {\n        value: {\n          column: 'name',\n          label: 'Sample name',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Sample name'\n      },\n      {\n        value: {\n          column: 'short_label',\n          label: 'Short Label',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Short Label'\n      },\n      {\n        value: {\n          column: 'external_label',\n          label: 'External Label',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'External Label'\n      },\n      {\n        value: {\n          column: 'xref',\n          opt: 'inventory_label',\n          label: 'Inventory Label',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Inventory Label'\n      },\n      {\n        value: {\n          column: 'target_amount_value',\n          label: 'Amount',\n          type: 'system-defined',\n          option_layers: 'amount',\n          info: 'Works only with the correct unit. Only numbers are allowed',\n          advanced: false,\n        },\n        label: 'Amount'\n      },\n      {\n        value: {\n          column: 'density',\n          label: 'Density',\n          type: 'textWithAddOn',\n          addon: 'g/ml',\n          info: 'Only numbers are allowed',\n          advanced: false,\n        },\n        label: 'Density'\n      },\n      {\n        value: {\n          column: 'molarity_value',\n          label: 'Molarity',\n          type: 'textWithAddOn',\n          addon: 'M',\n          info: 'Only numbers are allowed',\n          advanced: false,\n        },\n        label: 'Molarity'\n      },\n      {\n        value: {\n          column: 'purity',\n          label: 'Purity / Concentration',\n          type: 'text',\n          info: 'Only numbers are allowed',\n          advanced: false,\n        },\n        label: 'Purity / Concentration'\n      },\n      {\n        value: {\n          column: 'inventory_sample',\n          label: 'Inventory',\n          type: 'checkbox',\n          advanced: false,\n        },\n        label: 'Inventory'\n      },\n      {\n        value: {\n          column: 'xref',\n          opt: 'cas',\n          label: 'CAS',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'CAS'\n      },\n      {\n        value: {\n          column: 'molecular_mass',\n          label: 'Molecular mass',\n          type: 'textWithAddOn',\n          addon: 'g/mol',\n          advanced: false,\n        },\n        label: 'Molecular mass'\n      },\n      {\n        value: {\n          column: 'sum_formula',\n          label: 'Sum formula',\n          type: 'text',\n          advanced: false,\n        },\n        label: 'Sum formula'\n      },\n      {\n        value: {\n          type: 'headline',\n          label: 'Properties',\n        },\n        label: 'Properties',\n      },\n      {\n        value: {\n          column: 'melting_point',\n          label: 'Melting point',\n          type: 'textWithAddOn',\n          addon: '°C',\n          info: 'Numbers within a range: input of 2 numbers, e.g. 100 - 200. Only numbers are allowed',\n          advanced: false,\n        },\n        label: 'Melting point'\n      },\n      {\n        value: {\n          column: 'boiling_point',\n          label: 'Boiling point',\n          type: 'textWithAddOn',\n          addon: '°C',\n          info: 'Numbers within a range: input of 2 numbers, e.g. 100 - 200. Only numbers are allowed',\n          advanced: false,\n        },\n        label: 'Boiling point'\n      },\n      {\n        value: {\n          column: 'xref',\n          opt: 'flash_point',\n          label: 'Flash Point',\n          type: 'system-defined',\n          option_layers: 'temperature',\n          info: 'Works only with the correct temperature unit. Only numbers are allowed',\n          advanced: false,\n        },\n        label: 'Flash Point'\n      },\n      {\n        value: {\n          column: 'xref',\n          opt: 'refractive_index',\n          label: 'Refractive Index',\n          type: 'text',\n          advanced: false,\n        },\n        label: 'Refractive Index'\n      },\n      {\n        value: {\n          column: 'xref',\n          opt: 'form',\n          label: 'Form',\n          type: 'text',\n          advanced: false,\n        },\n        label: 'Form'\n      },\n      {\n        value: {\n          column: 'xref',\n          opt: 'color',\n          label: 'Color',\n          type: 'text',\n          advanced: false,\n        },\n        label: 'Color'\n      },\n      {\n        value: {\n          column: 'xref',\n          opt: 'solubility',\n          label: 'Solubility',\n          type: 'text',\n          advanced: false,\n        },\n        label: 'Solubility'\n      },\n      {\n        value: {\n          type: 'headline',\n          label: 'Solvents',\n        },\n        label: 'Solvents',\n      },\n      {\n        value: {\n          column: 'dry_solvent',\n          label: 'Dry solvent',\n          type: 'checkbox',\n          advanced: false,\n        },\n        label: 'Dry solvent'\n      },\n      {\n        value: {\n          column: 'solvent',\n          opt: 'smiles',\n          label: 'Label',\n          type: 'solventSelect',\n          option_layers: 'ionic_liquids',\n          advanced: false,\n        },\n        label: 'Label'\n      },\n      {\n        value: {\n          column: 'solvent',\n          opt: 'ratio',\n          label: 'Ratio',\n          type: 'text',\n          info: 'Only numbers are allowed',\n          advanced: false,\n        },\n        label: 'Ratio'\n      },\n      {\n        value: {\n          type: 'spacer',\n        },\n        label: '',\n      },\n      {\n        value: {\n          type: 'hr',\n        },\n        label: '',\n      },\n      {\n        value: {\n          column: 'description',\n          label: 'Description',\n          type: 'text',\n          advanced: false,\n        },\n        label: 'Description'\n      },\n      {\n        value: {\n          column: 'location',\n          label: 'Location',\n          type: 'text',\n          advanced: false,\n        },\n        label: 'Location'\n      },\n      {\n        value: {\n          column: 'content',\n          label: 'Private Note',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Private Note'\n      },\n    ],\n    reactions: [\n      {\n        value: {\n          column: 'name',\n          label: 'Name',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Name'\n      },\n      {\n        value: {\n          column: 'short_label',\n          label: 'Short Label',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Short Label'\n      },\n      {\n        value: {\n          column: 'status',\n          label: 'Status',\n          type: 'select',\n          option_layers: 'statusOptions',\n          advanced: true,\n        },\n        label: 'Status'\n      },\n      {\n        value: {\n          column: 'conditions',\n          label: 'Conditions',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Conditions'\n      },\n      {\n        value: {\n          column: 'temperature',\n          label: 'Temperature',\n          type: 'system-defined',\n          option_layers: 'temperature',\n          info: 'Only numbers are allowed',\n          advanced: true,\n        },\n        label: 'Temperature'\n      },\n      {\n        value: {\n          column: 'duration',\n          label: 'Duration',\n          type: 'system-defined',\n          option_layers: 'duration',\n          info: 'Only numbers are allowed',\n          advanced: true,\n        },\n        label: 'Duration'\n      },\n      {\n        value: {\n          column: 'rxno',\n          label: 'Type',\n          type: 'rxnos',\n          advanced: true,\n        },\n        label: 'Type'\n      },\n      {\n        value: {\n          column: 'role',\n          label: 'Role',\n          type: 'select',\n          option_layers: 'rolesOptions',\n          advanced: false,\n        },\n        label: 'Role'\n      },\n      {\n        value: {\n          column: 'plain_text_description',\n          label: 'Description',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Description'\n      },\n      {\n        value: {\n          column: 'purification',\n          label: 'Purification',\n          type: 'select',\n          option_layers: 'purificationOptions',\n          advanced: false,\n        },\n        label: 'Purification'\n      },\n      {\n        value: {\n          column: 'plain_text_observation',\n          label: 'Additional Information',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Additional Information'\n      },\n      {\n        value: {\n          column: 'dangerous_products',\n          label: 'Dangerous Products',\n          type: 'select',\n          option_layers: 'dangerousProductsOptions',\n          advanced: false,\n        },\n        label: 'Dangerous Products'\n      },\n      {\n        value: {\n          column: 'tlc_solvents',\n          label: 'TLC Solvents (parts)',\n          type: 'text',\n          advanced: false,\n        },\n        label: 'TLC Solvents (parts)'\n      },\n      {\n        value: {\n          column: 'rf_value',\n          label: 'Rf-Value',\n          type: 'text',\n          advanced: false,\n        },\n        label: 'Rf-Value'\n      },\n      {\n        value: {\n          column: 'tlc_description',\n          label: 'TLC-Description',\n          type: 'text',\n          advanced: false,\n        },\n        label: 'TLC-Description'\n      },\n      {\n        value: {\n          column: 'content',\n          label: 'Private Note',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Private Note'\n      },\n    ],\n    wellplates: [\n      {\n        value: {\n          column: 'name',\n          label: 'Name',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Name'\n      },\n      {\n        value: {\n          column: 'short_label',\n          label: 'Short Label',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Short Label'\n      },\n      {\n        value: {\n          column: 'readout_titles',\n          label: 'Readout Titles',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Readout Titles'\n      },\n      {\n        value: {\n          column: 'plain_text_description',\n          label: 'Description',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Description'\n      },\n      {\n        value: {\n          column: 'content',\n          label: 'Private Note',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Private Note'\n      },\n    ],\n    screens: [\n      {\n        value: {\n          column: 'name',\n          label: 'Name',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Name'\n      },\n      {\n        value: {\n          column: 'collaborator',\n          label: 'Collaborator',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Collaborator'\n      },\n      {\n        value: {\n          column: 'requirements',\n          label: 'Requirements',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Requirements'\n      },\n      {\n        value: {\n          column: 'conditions',\n          label: 'Conditions',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Conditions'\n      },\n      {\n        value: {\n          column: 'result',\n          label: 'Result',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Result'\n      },\n      {\n        value: {\n          column: 'plain_text_description',\n          label: 'Description',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Description'\n      },\n      {\n        value: {\n          column: 'content',\n          label: 'Private Note',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Private Note'\n      },\n    ],\n    research_plans: [\n      {\n        value: {\n          column: 'name',\n          label: 'Name',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Name'\n      },\n      {\n        value: {\n          column: 'body',\n          opt: 'ops',\n          label: 'Text',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Text'\n      },\n      {\n        value: {\n          column: 'body',\n          opt: 'rows',\n          label: 'Table',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Table'\n      },\n      {\n        value: {\n          column: 'content',\n          label: 'Private Note',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Private Note'\n      },\n    ],\n    elements: [\n      {\n        value: {\n          column: 'name',\n          label: 'Name',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Name'\n      },\n      {\n        value: {\n          column: 'short_label',\n          label: 'Short Label',\n          type: 'text',\n          advanced: true,\n        },\n        label: 'Short Label'\n      },\n    ],\n  }\n}\n","const mapperFields = [\n  {\n    value: \"=\",\n    label: \"EXACT\"\n  },\n  {\n    value: \"ILIKE\",\n    label: \"LIKE\"\n  },\n  {\n    value: \"NOT ILIKE\",\n    label: \"NOT LIKE\"\n  }\n]\n\nconst unitMapperFields = [\n  {\n    value: '=',\n    label: 'EXACT',\n  },\n  {\n    value: '<',\n    label: 'LESS THAN',\n  },\n  {\n    value: '>',\n    label: 'BIGGER THAN',\n  },\n]\n\nexport { mapperFields, unitMapperFields };\n","import React, { useContext } from 'react';\nimport { FormControl } from 'react-bootstrap'\nimport Select from 'react-select3';\nimport TreeSelect from 'antd/lib/tree-select';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nimport SelectFieldData from './SelectFieldData';\nimport { mapperFields, unitMapperFields } from './SelectMapperData';\nimport { statusOptions, temperatureOptions, durationOptions } from 'src/components/staticDropdownOptions/options';\n\nconst AdvancedSearchRow = ({ idx }) => {\n  const searchStore = useContext(StoreContext).search;\n  let selection = searchStore.advancedSearchValues[idx];\n  let searchElement = searchStore.searchElement;\n  let mapperOptions = mapperFields;\n  let fieldOptions = SelectFieldData.fields[searchElement.table];\n  fieldOptions = fieldOptions.filter(f => {\n    return f.value.advanced === true && f.value.advanced !== undefined\n  });\n\n  const specialMatcherFields = ['temperature', 'duration'];\n  if (specialMatcherFields.includes(selection.field.column)) {\n    mapperOptions = unitMapperFields;\n  }\n\n  let display = selection.link == '' ? 'none' : 'table';\n  let selectedFieldOption = selection.field.label == 'Name' && selection.table == 'samples' ? fieldOptions[0].value : selection.field;\n\n  const logicalOperators = [\n    { value: \"AND\", label: \"AND\" },\n    { value: \"OR\", label: \"OR\" }\n  ];\n\n  const { rxnos } = UserStore.getState();\n\n  const formElementValue = (formElement, e) => {\n    switch (formElement) {\n      case 'value':\n        const value = typeof e.target !== 'undefined' ? e.target.value : (typeof e.value !== 'undefined' ? e.value : e);\n        return value;\n      case 'field':\n      case 'link':\n      case 'match':\n      case 'unit':\n        return e.value;\n      default:\n        return e;\n    }\n  }\n\n  const temperatureConditions = (searchValues, column) => {\n    if (searchValues['unit'] == '' || column == 'temperature') {\n      searchValues['unit'] = '°C';\n    }\n    if (searchValues['match'] != '=') {\n      searchValues['match'] = '=';\n    }\n    return searchValues;\n  }\n\n  const durationConditions = (searchValues, column) => {\n    if (searchValues['unit'] == '' || column == 'duration') {\n      searchValues['unit'] = 'Hour(s)';\n    }\n    if (searchValues['match'] != '=') {\n      searchValues['match'] = '=';\n    }\n    return searchValues;\n  }\n\n  const checkValueForNumber = (value) => {\n    let message = 'Only numbers are allowed';\n    searchStore.removeErrorMessage(message);\n\n    if (isNaN(Number(value))) {\n      searchStore.addErrorMessage(message);\n    }\n  }\n\n  const onChange = (formElement) => (e) => {\n    let searchValues = { ...searchStore.advancedSearchValues[idx] };\n\n    if (e === undefined) {\n      searchValues[formElement] = '';\n      searchStore.addAdvancedSearchValue(idx, searchValues);\n      return;\n    }\n\n    let value = formElementValue(formElement, e, e.currentTarget);\n    searchValues[formElement] = value;\n    searchValues['table'] = searchElement.table;\n    searchValues['element_id'] = searchElement.element_id\n\n    const fieldColumn = searchValues.field.column;\n    if (value.column == 'temperature') { searchValues = temperatureConditions(searchValues, value.column) }\n    if (value.column == 'duration') { searchValues = durationConditions(searchValues, value.column) }\n    if (specialMatcherFields.includes(fieldColumn) && formElement == 'value') { checkValueForNumber(value) }\n    if (!specialMatcherFields.includes(fieldColumn) && formElement != 'unit' && !specialMatcherFields.includes(value.column)) {\n      searchValues['unit'] = '';\n    }\n    if (!specialMatcherFields.includes(fieldColumn) && ['>', '<'].includes(searchValues['match']) && formElement != 'match') {\n      searchValues['match'] = '=';\n    }\n    if (value.opt == 'rows' && searchValues['match'] !== 'ILIKE') { searchValues['match'] = 'ILIKE' }\n    searchStore.addAdvancedSearchValue(idx, searchValues);\n  }\n\n  const filterTreeNode = (input, child) => {\n    return String(child.props.search && child.props.search.toLowerCase()).indexOf(input && input.toLowerCase()) !== -1;\n  };\n\n  const defaultValueField = (\n    <FormControl\n      type=\"text\"\n      value={selection.value}\n      componentClass=\"textarea\"\n      rows={1}\n      className=\"value-select\"\n      placeholder=\"Search value\"\n      onChange={onChange('value')}\n    />\n  );\n\n  const valueField = () => {\n    if (selection.field == '') { return defaultValueField }\n\n    switch (selection.field.column) {\n      case 'status':\n        return (\n          <div className=\"value-field-select\">\n            <Select\n              options={statusOptions}\n              placeholder=\"Select status\"\n              value={statusOptions.filter(({ value }) => value == selection.value)}\n              isClearable={false}\n              onChange={onChange('value')}\n            />\n          </div>\n        );\n        break;\n      case 'rxno':\n        return (\n          <div className=\"value-field-select\">\n            <TreeSelect\n              value={selection.value}\n              treeData={rxnos}\n              allowClear\n              placeholder=\"Select type\"\n              dropdownStyle={{ maxHeight: '250px', zIndex: '500000' }}\n              onChange={onChange('value')}\n              filterTreeNode={filterTreeNode}\n            />\n          </div>\n        );\n        break;\n      case 'temperature':\n        return (\n          <>\n            <div className=\"value-field-select\">\n              <Select\n                options={temperatureOptions}\n                placeholder=\"Select unit\"\n                value={temperatureOptions.filter(({ value }) => value == selection.unit)}\n                isClearable={false}\n                onChange={onChange('unit')}\n              />\n            </div>\n            <div className=\"value-field-select\">\n              <FormControl\n                type=\"text\"\n                value={selection.value}\n                componentClass=\"textarea\"\n                rows={1}\n                className=\"value-select-unit\"\n                placeholder=\"Search value\"\n                onChange={onChange('value')}\n              />\n            </div>\n          </>\n        );\n        break;\n      case 'duration':\n        return (\n          <>\n            <div className=\"value-field-select\">\n              <Select\n                options={durationOptions}\n                placeholder=\"Select unit\"\n                value={durationOptions.filter(({ value }) => value == selection.unit)}\n                isClearable={false}\n                onChange={onChange('unit')}\n              />\n            </div>\n            <div className=\"value-field-select\">\n              <FormControl\n                type=\"text\"\n                value={selection.value}\n                componentClass=\"textarea\"\n                rows={1}\n                className=\"value-select-unit\"\n                placeholder=\"Search value\"\n                onChange={onChange('value')}\n              />\n            </div>\n          </>\n        );\n        break;\n      default:\n        return defaultValueField;\n    }\n  }\n\n  return (\n    <div className=\"adv-search-row\">\n      <div className=\"link-select\" style={{ flex: \"0 0 127px\" }}>\n        <div style={{ display: display, width: '100%' }}>\n          <Select\n            options={logicalOperators}\n            value={logicalOperators.filter(({ value }) => value == selection.link)}\n            isClearable={false}\n            onChange={onChange('link')}\n          />\n        </div>\n      </div>\n      <div className=\"match-select\">\n        <Select\n          options={mapperOptions}\n          placeholder=\"Select search mapper\"\n          value={mapperOptions.filter(({ value }) => value == selection.match)}\n          isClearable={false}\n          className=\"match-select-options\"\n          onChange={onChange('match')} />\n      </div>\n      <div className=\"field-select\">\n        <Select\n          options={fieldOptions}\n          isClearable={false}\n          placeholder=\"Select search field\"\n          value={selectedFieldOption}\n          className=\"field-select-options\"\n          onChange={onChange('field')} />\n      </div>\n      {valueField()}\n    </div>\n  )\n}\n\nexport default AdvancedSearchRow;\n","export default {\n  chemicals: [\n    {\n      label: 'Inventory',\n      value: [\n        {\n          label: 'Inventory Information',\n          value: [\n            {\n              column: 'status',\n              label: 'Status',\n              key: 'information',\n              table: 'chemicals',\n              type: 'select',\n              option_layers: \"chemicalStatusOptions\",\n            },\n            {\n              column: 'vendor',\n              label: 'Vendor',\n              key: 'information',\n              table: 'chemicals',\n              type: 'text',\n            },\n            {\n              column: 'order_number',\n              label: 'Order number',\n              key: 'information',\n              table: 'chemicals',\n              type: 'text',\n            },\n            {\n              column: 'amount',\n              label: 'Amount',\n              key: 'information',\n              table: 'chemicals',\n              type: 'system-defined',\n              option_layers: \"mass\",\n              info: 'Works only with the correct unit. Only numbers are allowed'\n            },\n            {\n              column: 'price',\n              label: 'Price',\n              key: 'information',\n              table: 'chemicals',\n              type: 'text',\n            },\n            {\n              column: 'person',\n              label: 'Person',\n              key: 'information',\n              table: 'chemicals',\n              type: 'text',\n            },\n            {\n              column: 'required_date',\n              label: 'Required date',\n              key: 'information',\n              table: 'chemicals',\n              type: 'text',\n            },\n            {\n              column: 'ordered_date',\n              label: 'Ordered date',\n              key: 'information',\n              table: 'chemicals',\n              type: 'text',\n            },\n            {\n              column: 'required_by',\n              label: 'Required by',\n              key: 'information',\n              table: 'chemicals',\n              type: 'text',\n            },\n          ],\n        },\n        {\n          label: 'Location and Information',\n          value: [\n            {\n              label: 'Host location',\n              column: 'host_location',\n              key: 'location',\n              table: 'chemicals',\n              type: 'subGroupWithAddOn',\n              sub_fields: [\n                {\n                  key: 'host_building',\n                  type: 'textWithAddOn',\n                  addon: 'building',\n                  label: 'building',\n                },\n                {\n                  key: 'host_room',\n                  type: 'textWithAddOn',\n                  addon: 'room',\n                  label: 'room',\n                },\n                {\n                  key: 'host_cabinet',\n                  type: 'textWithAddOn',\n                  addon: 'cabinet',\n                  label: 'cabinet',\n                },\n              ],\n            },\n            {\n              label: 'Host group',\n              column: 'host_group',\n              key: 'location',\n              table: 'chemicals',\n              type: 'subGroupWithAddOn',\n              sub_fields: [\n                {\n                  key: 'host_group',\n                  type: 'textWithAddOn',\n                  addon: 'group',\n                  label: 'group',\n                },\n                {\n                  key: 'host_owner',\n                  type: 'textWithAddOn',\n                  addon: 'owner',\n                  label: 'owner',\n                },\n              ],\n            },\n            {\n              label: 'Current location',\n              column: 'current_location',\n              key: 'location',\n              table: 'chemicals',\n              type: 'subGroupWithAddOn',\n              sub_fields: [\n                {\n                  key: 'current_building',\n                  type: 'textWithAddOn',\n                  addon: 'building',\n                  label: 'building',\n                },\n                {\n                  key: 'current_room',\n                  type: 'textWithAddOn',\n                  addon: 'room',\n                  label: 'room',\n                },\n                {\n                  key: 'current_cabinet',\n                  type: 'textWithAddOn',\n                  addon: 'cabinet',\n                  label: 'cabinet',\n                },\n              ],\n            },\n            {\n              label: 'Current group',\n              column: 'current_group',\n              key: 'location',\n              table: 'chemicals',\n              type: 'subGroupWithAddOn',\n              sub_fields: [\n                {\n                  key: 'current_group',\n                  type: 'textWithAddOn',\n                  addon: 'group',\n                  label: 'group',\n                },\n                {\n                  key: 'borrowed_by',\n                  type: 'textWithAddOn',\n                  addon: 'by',\n                  label: 'by',\n                },\n              ],\n            },\n            {\n              column: 'disposal_info',\n              label: 'Disposal information',\n              key: 'location',\n              type: 'text',\n              table: 'chemicals',\n            },\n            {\n              column: 'important_notes',\n              label: 'Important notes',\n              key: 'location',\n              type: 'text',\n              table: 'chemicals',\n            },\n          ],\n        }\n      ],\n    },\n  ],\n}\n","export default {\n  containers: [\n    {\n      label: 'Analyses',\n      value: [\n        {\n          label: '',\n          value: [\n            {\n              column: 'name',\n              label: 'Name',\n              key: 'analyses',\n              table: 'containers',\n              type: 'text',\n            },\n            {\n              column: 'status',\n              label: 'Status',\n              key: 'analyses',\n              table: 'containers',\n              type: 'select',\n              option_layers: 'confirmOptions',\n            },\n            {\n              column: 'kind',\n              label: 'Type (Chemical Methods Ontology)',\n              key: 'analyses',\n              table: 'containers',\n              type: 'chmos',\n            },\n            {\n              column: 'plain_text_content',\n              label: 'Content',\n              key: 'analyses',\n              table: 'containers',\n              type: 'text',\n            },\n            {\n              column: 'instrument',\n              label: 'Instrument',\n              key: 'analyses',\n              table: 'containers',\n              type: 'text',\n            },\n            {\n              column: 'description',\n              label: 'Description',\n              key: 'analyses',\n              table: 'containers',\n              type: 'text',\n            },\n          ],\n        },\n      ],\n    },\n  ]\n}\n","export default {\n  measurements: [\n    {\n      label: 'Measurements',\n      value: [\n        {\n          label: '',\n          value: [\n            {\n              column: 'description',\n              label: 'Description',\n              key: 'measurement',\n              table: 'measurements',\n              type: 'text',\n            },\n            {\n              column: 'value',\n              label: 'Value',\n              key: 'measurement',\n              table: 'measurements',\n              info: 'Only numbers are allowed',\n              type: 'text',\n            },\n            {\n              column: 'unit',\n              label: 'Unit',\n              key: 'measurement',\n              table: 'measurements',\n              type: 'text',\n            },\n          ],\n        },\n      ],\n    },\n  ]\n}\n","import React, { useContext } from 'react';\nimport { Button, Checkbox, FormControl, FormGroup, ControlLabel, InputGroup, Tabs, Tab, OverlayTrigger, Tooltip } from 'react-bootstrap'\nimport Select from 'react-select3';\nimport TreeSelect from 'antd/lib/tree-select';\nimport { getGenSI } from 'chem-generic-ui';\nimport SelectFieldData from './SelectFieldData';\nimport SampleInventoryFieldData from './SampleInventoryFieldData';\nimport AnalysesFieldData from './AnalysesFieldData';\nimport MeasurementFieldData from './MeasurementFieldData';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport { ionic_liquids } from 'src/components/staticDropdownOptions/ionic_liquids';\nimport * as FieldOptions from 'src/components/staticDropdownOptions/options';\n\nconst DetailSearch = () => {\n  const searchStore = useContext(StoreContext).search;\n  let selection = searchStore.searchElement;\n  let fieldOptions = SelectFieldData.fields[selection.table];\n  const { rxnos, chmos, segmentKlasses, genericEls, dsKlasses, profile } = UserStore.getState();\n  const layoutTabs = profile.data[`layout_detail_${selection.table.slice(0, -1)}`];\n  const currentCollection = UIStore.getState().currentCollection;\n  let tabSegment = currentCollection?.tabs_segment;\n  let tabs = tabSegment && tabSegment[selection.table.slice(0, -1)] ? tabSegment[selection.table.slice(0, -1)] : layoutTabs;\n  let genericFields = [];\n  let genericSelectOptions = [];\n  let fieldsByTab = [];\n  let datasetOptions = [];\n  let datasetSelectOptions = [];\n  let inventoryData = SampleInventoryFieldData.chemicals;\n  let analysesData = AnalysesFieldData.containers;\n  let measurementData = MeasurementFieldData.measurements;\n  let validFieldTypes = ['text', 'select', 'checkbox', 'system-defined', 'textarea', 'input-group', 'formula-field', 'table'];\n\n  const defaultDetailSearchValues = [{\n    link: 'AND',\n    match: 'ILIKE',\n    table: selection.table,\n    element_id: selection.element_id,\n    field: {\n      column: '',\n      label: '',\n    },\n    value: '',\n    smiles: '',\n    sub_values: [],\n    unit: '',\n    validationState: null\n  }];\n\n  const addGenericFieldsByLayers = (layers, fields, segment) => {\n    Object.entries(layers)\n      .sort((a, b) => a[1].position - b[1].position)\n      .map((value) => {\n        let label = value[1].label || '';\n        let values = value[1].fields.filter((f) => { return validFieldTypes.includes(f.type) });\n        let mappedValues = [];\n        if (values.length >= 1) {\n          values.map((v) => {\n            if (segment.id != undefined && v.table == undefined) {\n              Object.assign(v, { table: 'segments', element_id: segment.id });\n            }\n            if (v.key == undefined) {\n              Object.assign(v, { key: value[1].key });\n            }\n            mappedValues.push(v);\n          });\n          fields.push({ label: label, value: mappedValues });\n        }\n      });\n  }\n\n  const addGenericDatasetFieldsByLayers = (layers, fields, dataset) => {\n    Object.entries(layers)\n      .sort((a, b) => a[1].position - b[1].position)\n      .map((value) => {\n        let label = value[1].label || '';\n        let values = value[1].fields.filter((f) => { return validFieldTypes.includes(f.type) });\n        let mappedValues = [];\n        if (values.length >= 1) {\n          values.map((v) => {\n            if (v.key == undefined) {\n              Object.assign(v, { key: value[1].key });\n            }\n            if (v.table === undefined) {\n              Object.assign(v, { table: 'datasets', column: `datasets_${v.field}`, term_id: dataset.ols_term_id });\n            }\n            mappedValues.push(v);\n          });\n\n          const valueExists = fields.filter((f) => {\n            return f.value.length === mappedValues.length && f.label === label && f.term_id === dataset.ols_term_id\n          });\n\n          if (valueExists.length < 1) {\n            fields.push(\n              {\n                label: label, value: mappedValues, term_id: dataset.ols_term_id,\n                cond_fields: [{ field: 'datasets_type', value: dataset.ols_term_id }],\n              }\n            );\n          }\n        }\n      });\n  }\n\n  const pushSegmentToSegmentField = (segment) => {\n    let layers = segment.properties_template.layers;\n    let options = segment.properties_template.select_options;\n    if (options) {\n      Object.assign(genericSelectOptions, options);\n    }\n    if (layers) {\n      let segments = [];\n      addGenericFieldsByLayers(layers, segments, segment);\n      fieldsByTab.push({ label: segment.label, value: segments });\n    }\n  }\n\n  const pushDatasetsToAnalysesFields = () => {\n    if (!dsKlasses) { return; }\n\n    let analysesTab = fieldsByTab.find((tabs) => tabs.label === 'Analyses');\n    const headlineExists = analysesTab.value.filter((t) => { return t.value.type === 'headline' })\n\n    if (headlineExists.length < 1) {\n      analysesTab.value.push(\n        {\n          value: {\n            type: 'headline',\n            label: 'Dataset metadata',\n          },\n          label: 'Dataset metadata',\n        },\n        {\n          label: 'Datasets',\n          value: {\n            column: 'datasets_type',\n            label: 'Dataset type',\n            type: 'select',\n            option_layers: 'datasets',\n            table: 'datasets',\n          },\n        }\n      );\n    }\n\n    dsKlasses.forEach((dataset) => {\n      addGenericDatasetFieldsByLayers(dataset.properties_template.layers, analysesTab.value, dataset);\n    });\n  }\n\n  if (dsKlasses) {\n    dsKlasses.forEach((dataset) => {\n      datasetOptions.push({ key: dataset.ols_term_id, label: dataset.label, value: dataset.ols_term_id });\n      if (dataset.properties_template.select_options) {\n        Object.entries(dataset.properties_template.select_options).map((options) => {\n          datasetSelectOptions[`${options[0]}_${dataset.ols_term_id.replace(':', '_')}`] = options[1];\n        });\n      }\n    });\n    Object.assign(\n      genericSelectOptions,\n      {\n        datasets: { options: datasetOptions },\n        dataset_select: { options: datasetSelectOptions }\n      }\n    );\n  }\n\n  if (genericEls) {\n    let currentGenericElement = genericEls.find((e) => { return e.name === selection.element_table.slice(0, -1) });\n    if (currentGenericElement) {\n      let layers = currentGenericElement.properties_template.layers;\n      let options = currentGenericElement.properties_template.select_options;\n      if (options) {\n        Object.assign(genericSelectOptions, options);\n      }\n\n      fieldOptions.map((o) => { genericFields.push(o) });\n      addGenericFieldsByLayers(layers, genericFields, {});\n      fieldsByTab.push({ label: 'Properties', value: genericFields });\n      fieldsByTab.push(...analysesData);\n    }\n  }\n\n  if (tabs) {\n    Object.entries(tabs)\n      .filter((value) => { return value[1] > 0 })\n      .sort((a, b) => a[1] - b[1])\n      .map((value) => {\n        if (['properties', 'research_plan'].includes(value[0])) {\n          fieldsByTab.push({ label: 'Properties', value: fieldOptions });\n        }\n        if (value[0] === 'analyses') {\n          fieldsByTab.push(...analysesData);\n          // pushDatasetsToAnalysesFields();\n        }\n        if (value[0] === 'inventory') {\n          fieldsByTab.push(...inventoryData);\n        }\n        if (value[0] === 'measurements') {\n          fieldsByTab.push(...measurementData);\n        }\n        if (segmentKlasses) {\n          segmentKlasses.filter((s) => {\n            if (s.element_klass.name == selection.table.slice(0, -1) && s.label == value[0]) {\n              pushSegmentToSegmentField(s);\n            }\n          });\n        }\n      });\n  }\n\n  const labelWithInfo = (option) => {\n    let infoButton = ''\n    if (option.info) {\n      infoButton = (\n        <OverlayTrigger\n          placement=\"top\"\n          overlay={\n            <Tooltip id={option.column}>{option.info}</Tooltip>\n          }\n        >\n          <span className=\"glyphicon glyphicon-info-sign search-info-button\" />\n        </OverlayTrigger>\n      );\n    }\n\n    return (\n      <ControlLabel>{option.label}{infoButton}</ControlLabel>\n    );\n  }\n\n  const textInput = (option, type, selectedValue, column, keyLabel) => {\n    let validationState = selectedValue !== undefined ? selectedValue[column].validationState : null;\n    return (\n      <FormGroup key={`${column}-${keyLabel}-${type}`} validationState={validationState}>\n        {labelWithInfo(option)}\n        <FormControl\n          id={`input_${column}`}\n          type=\"text\"\n          key={`${column}-${keyLabel}`}\n          value={selectedValue ? selectedValue[column].value : ''}\n          onChange={handleFieldChanged(option, column, type)}\n        />\n      </FormGroup>\n    );\n  }\n\n  const checkboxInput = (option, type, selectedValue, column, keyLabel) => {\n    return (\n      <Checkbox\n        key={`${column}-${keyLabel}`}\n        checked={selectedValue ? selectedValue[column].value : false}\n        onChange={handleFieldChanged(option, column, type)}\n      >\n        {option.label}\n      </Checkbox>\n    );\n  }\n\n  const optionsForSelect = (option) => {\n    let options = [];\n    let genericOptions = [];\n    let optionKey = '';\n    let datasetOptionsByKey = [];\n\n    if (option.field !== undefined) {\n      genericOptions = genericFields.length >= 1 ? genericFields : fieldsByTab;\n    }\n    if (option.term_id && genericSelectOptions['dataset_select']) {\n      optionKey = `${option.option_layers}_${option.term_id.replace(':', '_')}`;\n      datasetOptionsByKey = genericSelectOptions['dataset_select'].options[optionKey];\n    }\n\n    if (option.type == 'system-defined') {\n      if (option.column && option.column == 'duration') {\n        options = FieldOptions.durationOptions;\n      } else if (option.column && option.column == 'target_amount_value') {\n        options = FieldOptions.amountSearchOptions;\n      } else {\n        options = getGenSI(option.option_layers);\n      }\n    } else if (option.term_id && optionKey && datasetOptionsByKey) {\n      Object.values(datasetOptionsByKey.options).forEach((selectOption) => {\n        selectOption.value = selectOption.value ? selectOption.value : selectOption.label;\n        options.push(selectOption);\n      });\n    } else if ((genericOptions.length >= 1 || option.column === 'datasets_type')\n      && genericSelectOptions[option.option_layers]) {\n      Object.values(genericSelectOptions[option.option_layers].options).forEach((selectOption) => {\n        selectOption.value = selectOption.value ? selectOption.value : selectOption.label;\n        options.push(selectOption);\n      });\n    } else {\n      options = FieldOptions[option.option_layers];\n    }\n    if (options && options[0] && options[0].value !== '' && option.type !== 'system-defined') {\n      options.unshift({ label: '', value: '' });\n    }\n    return options;\n  }\n\n  const selectInput = (option, type, selectedValue, columnName, keyLabel) => {\n    let options = optionsForSelect(option);\n    return (\n      <FormGroup key={`${columnName}-${keyLabel}-${type}`}>\n        {labelWithInfo(option)}\n        <Select\n          name={columnName}\n          key={`${columnName}-${keyLabel}`}\n          options={options}\n          onChange={handleFieldChanged(option, columnName, type)}\n          value={selectedValue ? options.filter((f) => { return f.value == selectedValue[columnName].value }) : ''}\n        />\n      </FormGroup>\n    );\n  }\n\n  const solventOptions = Object.keys(ionic_liquids).reduce(\n    (solvents, ionicLiquid) => solvents.concat({\n      label: ionicLiquid,\n      value: {\n        external_label: ionicLiquid,\n        smiles: ionic_liquids[ionicLiquid],\n        density: 1.0\n      }\n    }), FieldOptions.defaultMultiSolventsSmilesOptions\n  );\n\n  const solventSelect = (option, type, selectedValue, columnName, keyLabel) => {\n    let options = solventOptions;\n    options.unshift({ label: '', value: '' });\n    return (\n      <FormGroup key={`${columnName}-${keyLabel}-${type}`}>\n        {labelWithInfo(option)}\n        <Select\n          name={columnName}\n          key={`${columnName}-${keyLabel}`}\n          options={solventOptions}\n          onChange={handleFieldChanged(option, columnName, type)}\n          value={selectedValue ? solventOptions.filter((f) => { return f.label == selectedValue[columnName].value }) : ''}\n        />\n      </FormGroup>\n    );\n  }\n\n  const filterTreeNode = (input, child) => {\n    return String(child.props.search && child.props.search.toLowerCase()).indexOf(input && input.toLowerCase()) !== -1;\n  };\n\n  const rxnoChmosInput = (option, type, selectedValue, column) => {\n    let options = type == 'chmos' ? chmos : rxnos;\n    return (\n      <FormGroup key={`${option.column}-${option.label}-${type}`}>\n        {labelWithInfo(option)}\n        <TreeSelect\n          key={option.column}\n          value={selectedValue ? selectedValue[column].value : ''}\n          treeData={options}\n          placeholder=\"Select type\"\n          dropdownStyle={{ maxHeight: '250px', zIndex: '800000' }}\n          allowClear\n          onChange={handleFieldChanged(option, column, type)}\n          filterTreeNode={filterTreeNode}\n        />\n      </FormGroup>\n    );\n  }\n\n  const textWithAddOnInput = (option, type, selectedValue, keyLabel) => {\n    let column = option.column || option.field;\n    let validationState = selectedValue !== undefined ? selectedValue[column].validationState : null;\n    return (\n      <FormGroup key={`${column}-${keyLabel}-${type}`} validationState={validationState}>\n        {labelWithInfo(option)}\n        <InputGroup>\n          <FormControl\n            id={`input_${column}`}\n            type=\"text\"\n            key={`${column}-${keyLabel}`}\n            value={selectedValue ? selectedValue[column].value : ''}\n            onChange={handleFieldChanged(option, column, type)}\n          />\n          <InputGroup.Addon>{option.addon}</InputGroup.Addon>\n        </InputGroup>\n      </FormGroup>\n    );\n  }\n\n  const ButtonOrAddOn = (units, value, column, option, subFieldId) => {\n    if (units.length > 1) {\n      return (\n        <InputGroup.Button>\n          <Button key={units} bsStyle=\"success\"\n            dangerouslySetInnerHTML={{ __html: value }}\n            onClick={changeUnit(units, value, column, option, subFieldId)} />\n        </InputGroup.Button>\n      );\n    } else {\n      return (\n        <InputGroup.Addon dangerouslySetInnerHTML={{ __html: value }} />\n      );\n    }\n  }\n\n  const systemDefinedInput = (option, type, selectedValue, column, keyLabel) => {\n    let units = optionsForSelect(option);\n    let value = selectedValue ? selectedValue[column].unit : units[0].label;\n    let validationState = selectedValue !== undefined ? selectedValue[column].validationState : null;\n    return (\n      <FormGroup key={`${column}-${keyLabel}-${type}`} validationState={validationState}>\n        {labelWithInfo(option)}\n        <InputGroup>\n          <FormControl\n            id={`input_${column}`}\n            type=\"text\"\n            key={`${column}-${keyLabel}`}\n            value={selectedValue ? selectedValue[column].value : ''}\n            onChange={handleFieldChanged(option, column, type)}\n          />\n          {ButtonOrAddOn(units, value, column, option, '')}\n        </InputGroup>\n      </FormGroup>\n    );\n  }\n\n  const inputGroupInput = (option, type, selectedValue, column, keyLabel) => {\n    let subFields = [];\n    option.sub_fields.map((field) => {\n      if (field.type == 'label') {\n        subFields.push(<span key={field.id} className=\"form-control g_input_group_label\">{field.value}</span>);\n      }\n      if (field.type == 'text') {\n        let subValue = selectedValue && selectedValue[column].sub_values[0][field.id] !== undefined ? selectedValue[column].sub_values[0][field.id] : '';\n        subFields.push(\n          <FormControl\n            className=\"g_input_group\"\n            key={field.id}\n            type={field.type}\n            name={field.id}\n            value={subValue}\n            onChange={handleSubFieldChanged(field.id, option, column, type)}\n          />\n        );\n      }\n    });\n\n    return (\n      <FormGroup key={`${column}-${keyLabel}-${type}`}>\n        {labelWithInfo(option)}\n        <InputGroup style={{ display: 'flex' }}>\n          {subFields}\n        </InputGroup>\n      </FormGroup>\n    );\n  }\n\n  const tableInputFields = (option, type, selectedValue, column, keyLabel) => {\n    let subFields = [];\n\n    option.sub_fields.map((field) => {\n      let condition =\n        selectedValue && selectedValue[column].sub_values !== undefined\n        && selectedValue[column].sub_values[0][field.id] !== undefined;\n      let selectedFieldValue = condition ? selectedValue[column].sub_values[0][field.id] : '';\n      let selectedUnitValue = typeof selectedFieldValue === 'object' ? selectedFieldValue.value_system : field.value_system;\n      selectedFieldValue = typeof selectedFieldValue === 'object' ? selectedFieldValue.value : selectedFieldValue;\n      let validationState = selectedValue !== undefined ? selectedValue[column].validationState : null;\n      let units = optionsForSelect(field);\n      let formElement = '';\n\n      if (field.type == 'text') {\n        formElement = (\n          <FormControl\n            id={field.id}\n            type=\"text\"\n            key={field.id}\n            value={selectedFieldValue}\n            onChange={handleTableFieldChanged(field.id, option, column, type)}\n          />\n        );\n      }\n      if (field.type == 'system-defined') {\n        formElement = (\n          <InputGroup>\n            <FormControl\n              id={field.id}\n              type=\"text\"\n              key={field.id}\n              value={selectedFieldValue}\n              onChange={handleTableFieldChanged(field.id, option, column, type)}\n            />\n            {ButtonOrAddOn(units, selectedUnitValue, column, option, field.id)}\n          </InputGroup>\n        );\n      }\n      if (formElement) {\n        subFields.push(\n          <FormGroup key={`${column}-${keyLabel}-${type}-${field.id}`} validationState={validationState}>\n            <ControlLabel>{field.col_name}</ControlLabel>\n            {formElement}\n          </FormGroup>\n        );\n      }\n    });\n    return subFields;\n  }\n\n  const subGroupWithAddOnFields = (option, type, selectedValue, column, keyLabel) => {\n    let subFields = [];\n\n    option.sub_fields.map((field) => {\n      let subValue = selectedValue && selectedValue[column].sub_values[0][field.key] !== undefined ? selectedValue[column].sub_values[0][field.key] : '';\n      let validationState = selectedValue !== undefined ? selectedValue[column].validationState : null;\n      subFields.push(\n        <FormGroup\n          key={`${column}-${keyLabel}-${field.key}`}\n          className={`subfields-with-addon-left-${option.sub_fields.length}`}\n          validationState={validationState}\n        >\n          <InputGroup>\n            <InputGroup.Addon>{field.addon}</InputGroup.Addon>\n            <FormControl\n              id={`input_${column}_${field.key}`}\n              type=\"text\"\n              key={`${column}-${keyLabel}-${field.key}`}\n              value={subValue}\n              onChange={handleSubFieldChanged(field.key, option, column, type)}\n            />\n          </InputGroup>\n        </FormGroup>\n      );\n    });\n\n    return (\n      <FormGroup key={`${column}-${keyLabel}-${type}`} className=\"sub-group-with-addon-2col\">\n        {labelWithInfo(option)}\n        <FormGroup className=\"grouped-sub-fields\">\n          {subFields}\n        </FormGroup>\n      </FormGroup>\n    );\n  }\n\n  const componentHeadline = (label, i, className) => {\n    if (label === '') { return '' }\n\n    return (\n      <div className={className} key={`${label}-${i}`}>{label}</div>\n    );\n  }\n\n  const valueByType = (type, e) => {\n    switch (type) {\n      case 'text':\n      case 'textarea':\n      case 'textWithAddOn':\n      case 'system-defined':\n      case 'formula-field':\n      case 'subGroupWithAddOn':\n        return e.target.value;\n      case 'checkbox':\n        return e.target.checked;\n      case 'select':\n        return e.value ? e.value : e.label;\n      case 'solventSelect':\n        return e.label;\n      default:\n        return e;\n    }\n  }\n\n  const matchByField = (field, type) => {\n    switch (field) {\n      case 'boiling_point':\n      case 'melting_point':\n        return '<@';\n      case 'density':\n      case 'molarity_value':\n      case 'target_amount_value':\n      case 'temperature':\n      case 'duration':\n      case 'purity':\n      case 'value_measurement':\n      case 'solvent_ratio':\n      case 'molecular_mass':\n        return '>=';\n      case 'unit_measurement':\n      case 'solvent_smiles':\n        return '=';\n      default:\n        return type == 'system-defined' ? '>=' : 'ILIKE';\n    }\n  }\n\n  const checkValueForNumber = (label, value) => {\n    if (value === '') { return null; }\n\n    let validationState = null;\n    let message = `${label}: Only numbers are allowed`;\n    searchStore.removeErrorMessage(message);\n\n    const regex = /^[0-9\\s\\-]+$/;\n    let numericCheck = label.includes('point') ? !regex.test(value) : isNaN(Number(value));\n\n    if (numericCheck) {\n      searchStore.addErrorMessage(message);\n      validationState = 'error';\n    }\n\n    return validationState;\n  }\n\n  const searchValueByStoreOrDefaultValue = (column) => {\n    let index = searchStore.detailSearchValues.findIndex((f) => { return Object.keys(f).indexOf(column) != -1; });\n    return (index !== -1 ? { ...searchStore.detailSearchValues[index][column] } : defaultDetailSearchValues[0]);\n  }\n\n  const handleSubFieldChanged = (id, option, column, type) => (e) => {\n    let sub_values = { id: id, value: e.target.value };\n    setSearchStoreValues(e.target.value, option, column, type, sub_values, '');\n  }\n\n  const handleTableFieldChanged = (id, option, column, type) => (e) => {\n    let value = e.target.value;\n    let subValue = {};\n    let optionField = option.sub_fields.find((f) => { return f.id == id });\n    let searchValue = searchValueByStoreOrDefaultValue(column);\n\n    if (optionField.value_system) {\n      let valueSystem =\n        searchValue.sub_values.length >= 1 && searchValue.sub_values[0][id] ? searchValue.sub_values[0][id].value_system : optionField.value_system;\n      subValue = { id: id, value: { value: value, value_system: valueSystem } };\n    } else {\n      subValue = { id: id, value: value };\n    }\n    setSearchStoreValues(e.target.value, option, column, type, subValue, '');\n  }\n\n  const handleFieldChanged = (option, column, type) => (e) => {\n    let value = valueByType(type, e);\n    let smiles = column == 'solvent_smiles' ? e.value.smiles : '';\n\n    if (column === 'datasets_type') {\n      let datasetValues = searchStore.detailSearchValues.filter((f) => {\n        return Object.keys(f)[0].startsWith('datasets_') && Object.keys(f)[0] !== 'datasets_type'\n      });\n      datasetValues.map((d) => {\n        searchStore.removeDetailSearchValue(Object.keys(d)[0]);\n      });\n    }\n\n    setSearchStoreValues(value, option, column, type, {}, smiles);\n  }\n\n  const setSearchStoreValues = (value, option, column, type, subValue, smiles) => {\n    let searchValue = searchValueByStoreOrDefaultValue(column);\n    let cleanedValue = ['>=', '<@'].includes(searchValue.match) ? value.replace(/,/g, '.') : value;\n    searchValue.field = option;\n    searchValue.value = cleanedValue;\n    searchValue.sub_values = subValuesForSearchValue(searchValue, subValue, cleanedValue);\n    searchValue.match = matchByField(column, type);\n    searchValue.smiles = smiles;\n\n    if (['>=', '<@'].includes(searchValue.match)) {\n      searchValue.validationState = checkValueForNumber(option.label, cleanedValue);\n    }\n\n    if (type == 'system-defined' && searchValue.unit === '') {\n      let units = optionsForSelect(option);\n      searchValue.unit = units[0].label;\n    }\n    let searchSubValuesLength = searchValue.sub_values.length >= 1 ? Object.keys(searchValue.sub_values[0]).length : 0;\n    let typesWithSubValues = ['input-group', 'table'];\n\n    if (((value === '' || value === false) && !typesWithSubValues.includes(type)) || (searchSubValuesLength === 0 && typesWithSubValues.includes(type) && value === '')) {\n      searchStore.removeDetailSearchValue(column);\n    } else {\n      searchStore.addDetailSearchValue(column, searchValue);\n    }\n  }\n\n  const subValuesForSearchValue = (searchValue, subValue, value) => {\n    let subValues = searchValue.sub_values;\n    if (Object.keys(subValue).length === 0) { return subValues; }\n\n    if (subValues.length == 0) {\n      subValues.push({ [subValue.id]: subValue.value })\n    } else {\n      subValues[0][subValue.id] = subValue.value;\n    }\n\n    if (subValues[0][subValue.id] == '' && value == '') {\n      delete subValues[0][subValue.id];\n    }\n\n    return subValues;\n  }\n\n  const changeUnit = (units, value, column, option, subFieldId) => (e) => {\n    let activeUnitIndex = units.findIndex((f) => { return f.label.replace('°', '') === value || f.label === value });\n    let nextUnitIndex = activeUnitIndex === units.length - 1 ? 0 : activeUnitIndex + 1;\n    let newUnit = units[nextUnitIndex].label;\n    let searchValue = searchValueByStoreOrDefaultValue(column);\n\n    if (option.sub_fields && subFieldId) {\n      if (searchValue.sub_values.length >= 1 && searchValue.sub_values[0][subFieldId]) {\n        searchValue.sub_values[0][subFieldId].value_system = newUnit;\n      } else if (searchValue.sub_values.length >= 1 && !searchValue.sub_values[0][subFieldId]) {\n        searchValue.sub_values[0][subFieldId] = { value: '', value_system: newUnit };\n      } else {\n        searchValue.sub_values.push({ [subFieldId]: { value: '', value_system: newUnit } });\n      }\n    }\n\n    searchValue.unit = newUnit;\n    searchStore.addDetailSearchValue(column, searchValue);\n  }\n\n  const fieldsByType = (option, fields, keyLabel, i) => {\n    let multi_fields = ['stereo', 'xref', 'solvent', 'body'];\n    let column = multi_fields.includes(option.column) ? `${option.column}_${option.opt}` : (option.column || option.field);\n    column = option.key !== undefined ? `${column}_${option.key}` : column;\n    const selectedValue = searchStore.detailSearchValues.find((f) => { return Object.keys(f).indexOf(column) != -1 });\n\n    switch (option.type) {\n      case 'text':\n      case 'textarea':\n      case 'formula-field':\n        fields.push(textInput(option, 'text', selectedValue, column, keyLabel));\n        break;\n      case 'checkbox':\n        fields.push(checkboxInput(option, 'checkbox', selectedValue, column, keyLabel));\n        break;\n      case 'select':\n        fields.push(selectInput(option, 'select', selectedValue, column, keyLabel));\n        break;\n      case 'textWithAddOn':\n        fields.push(textWithAddOnInput(option, 'textWithAddOn', selectedValue, keyLabel));\n        break;\n      case 'rxnos':\n      case 'chmos':\n        fields.push(rxnoChmosInput(option, option.type, selectedValue, column));\n        break;\n      case 'system-defined':\n        fields.push(systemDefinedInput(option, 'system-defined', selectedValue, column, keyLabel));\n        break;\n      case 'input-group':\n        fields.push(inputGroupInput(option, 'input-group', selectedValue, column, keyLabel));\n        break;\n      case 'table':\n        fields.push(componentHeadline(option.label, 'table', 'detail-search-headline'));\n        fields.push(tableInputFields(option, 'table', selectedValue, column, keyLabel));\n        break;\n      case 'subGroupWithAddOn':\n        fields.push(subGroupWithAddOnFields(option, 'subGroupWithAddOn', selectedValue, column, keyLabel));\n        break;\n      case 'solventSelect':\n        fields.push(solventSelect(option, 'solventSelect', selectedValue, column, keyLabel));\n        break;\n      case 'spacer':\n        fields.push(<div className=\"form-group\" key={`empty-column-${i}`}></div>);\n        break;\n      case 'headline':\n        fields.push(componentHeadline(option.label, 'headline', 'detail-search-headline'));\n        break;\n      case 'hr':\n        fields.push(<hr className='generic-spacer' key={`spacer-${i}`} />);\n        break;\n    }\n    return fields;\n  }\n\n  const mapOptions = (options, fields) => {\n    options.map((field, i) => {\n      if (field.cond_fields && field.cond_fields.length >= 1) {\n        let key = field.cond_fields[0].field;\n        const valueFulfilled = searchStore.detailSearchValues.filter((value) => {\n          return value[key] && value[key].value === field.cond_fields[0].value;\n        });\n        if (valueFulfilled.length === 0) { return }\n      }\n\n      if (Array.isArray(field.value)) {\n        if (field.label) {\n          fields.push(componentHeadline(field.label, i, 'detail-search-headline'));\n        } else if (i != 0 && field.value[0].type !== 'table') {\n          fields.push(<hr className='generic-spacer' key={`spacer-${i}`} />);\n        }\n\n        field.value.map((option) => {\n          fields = fieldsByType(option, fields, field.label, i);\n        });\n      } else {\n        fields = fieldsByType(field.value, fields, selection.table, i);\n      }\n    });\n    return fields;\n  }\n\n  const handleSelectTab = (e) => {\n    searchStore.changeActiveTabKey(e);\n  }\n\n  const addTabToTabFields = (title, value, i, tabFields) => {\n    tabFields.push(\n      <Tab\n        eventKey={i}\n        title={title}\n        key={`tab-${title.toLowerCase().replace(' ', '-')}-${i}`}\n      >\n        {mapOptions(value, [])}\n      </Tab>\n    );\n    return tabFields;\n  }\n\n  const FormElementTabs = () => {\n    let tabFields = [];\n\n    if (fieldsByTab.length >= 1) {\n      fieldsByTab.map((field, i) => {\n        addTabToTabFields(field.label, field.value, i, tabFields)\n      });\n    }\n\n    return (\n      <Tabs\n        activeKey={searchStore.activeTabKey}\n        animation={false}\n        onSelect={handleSelectTab}\n        id=\"detail-search-form-element-tabs\"\n        key=\"form-element-tabs\"\n      >\n        {tabFields}\n      </Tabs >\n    );\n  }\n\n  return (\n    <div className='detail-search'>\n      {FormElementTabs()}\n    </div>\n  );\n}\nexport default observer(DetailSearch);\n","import React, { useContext, useEffect } from 'react';\nimport { Tab, Pagination, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport { observer } from 'mobx-react';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport SampleName from 'src/components/common/SampleName';\nimport SvgWithPopover from 'src/components/common/SvgWithPopover';\n\nconst SearchResultTabContent = ({ list, tabResult, openDetail }) => {\n  const searchStore = useContext(StoreContext).search;\n  let currentPage = searchStore.tabCurrentPage.length >= 1 ? searchStore.tab_current_page[list.index] : undefined;\n  let currentPageNumber = currentPage === undefined ? 1 : currentPage[list.key];\n\n  useEffect(() => {\n    if (currentPage === undefined) {\n      searchStore.changeTabCurrentPage(list.key, 1, list.index);\n    }\n  }, []);\n\n  const handlePaginationSelect = (index, ids, key) => {\n    searchStore.changeTabCurrentPage(key, index, list.index);\n\n    const search_result = searchStore.tabSearchResultValues.find(val => val.id == `${key}s-${index}`);\n    if (search_result === undefined) {\n      searchByIds(index, ids, key);\n    }\n  }\n\n  const searchByIds = (index, ids, key) => {\n    const uiState = UIStore.getState();\n    const { currentCollection } = uiState;\n    const collectionId = currentCollection ? currentCollection.id : null;\n    const isSync = currentCollection ? currentCollection.is_sync_to_me : false;\n\n    const selection = {\n      elementType: 'by_ids',\n      id_params: {\n        model_name: key,\n        ids: ids,\n        total_elements: tabResult.total_elements,\n        with_filter: false,\n      },\n      list_filter_params: {},\n      search_by_method: 'search_by_ids',\n      page_size: tabResult.per_page\n    };\n\n    searchStore.loadSearchResultTab({\n      selection,\n      collectionId: collectionId,\n      isSync: isSync,\n      page_size: tabResult.per_page,\n      page: index,\n      moleculeSort: true,\n    });\n  }\n\n  const pagination = (tabResult, key) => {\n    if (tabResult.pages === 1) { return; }\n    if (tabResult.total_elements == 0) { return; }\n\n    let splittedIds = [];\n    let items = [];\n    for (let i = 0; i < tabResult.ids.length; i += tabResult.per_page) {\n      splittedIds.push(tabResult.ids.slice(i, i + tabResult.per_page));\n    }\n\n    const minPage = Math.max(currentPageNumber - 2, 1);\n    const maxPage = Math.min(minPage + 4, tabResult.pages);\n    items.push(<Pagination.First key=\"First\" onClick={() => handlePaginationSelect(1, splittedIds[0], key)} />);\n    if (currentPageNumber > 1) {\n      items.push(<Pagination.Prev key=\"Prev\" onClick={() => handlePaginationSelect(currentPageNumber - 1, splittedIds[currentPageNumber - 1], key)} />);\n    }\n    if (minPage > 1) {\n      items.push(<Pagination.Ellipsis key=\"Ell1\" />);\n    }\n    for (let number = minPage; number <= maxPage; number++) {\n      items.push(\n        <Pagination.Item\n          key={number}\n          active={number === currentPageNumber}\n          onClick={() => handlePaginationSelect(number, splittedIds[number - 1], key)}\n        >\n          {number}\n        </Pagination.Item>\n      )\n    }\n    if (tabResult.pages > maxPage) {\n      items.push(<Pagination.Ellipsis key=\"Ell2\" />);\n    }\n    if (currentPageNumber < tabResult.pages) {\n      items.push(<Pagination.Next key=\"Next\" onClick={() => handlePaginationSelect(currentPageNumber + 1, splittedIds[currentPageNumber], key)} />);\n      items.push(<Pagination.Last key=\"Last\" onClick={() => handlePaginationSelect(tabResult.pages, splittedIds[tabResult.pages - 1], key)} />);\n    }\n\n    return (\n      <div className=\"search-result-pagination\">\n        <Pagination>\n          {items}\n        </Pagination>\n      </div>\n    );\n  }\n\n  const svgPreview = (object) => {\n    if (!['sample', 'reaction'].includes(object.type)) { return null; }\n\n    const title = object.type == 'sample' ? object.molecule_iupac_name : object.short_label; \n    return (\n      <SvgWithPopover\n        hasPop\n        previewObject={{\n          txtOnly: '',\n          isSVG: true,\n          src: object.svgPath\n        }}\n        popObject={{\n          title: title,\n          src: object.svgPath,\n          height: '26vh',\n          width: '52vw',\n        }}\n      />\n    );\n  }\n\n  const copyToClipboard = (element) => {\n    if (element.target.dataset.clipboardText) {\n      navigator.clipboard.writeText(element.target.dataset.clipboardText);\n    }\n  }\n\n  const shortLabelWithMoreInfos = (object) => {\n    let names;\n    const tooltip = <Tooltip id=\"detailTip\">Open detail</Tooltip>;\n\n    if (['screen', 'research_plan'].includes(object.type) || object.short_label === undefined) { \n      names = object.name;\n    } else if (object.type == 'sample') {\n      let infos = [];\n      if (object.external_label) { infos.push(object.external_label) }\n      if (object.xref && object.xref.inventory_label) { infos.push(object.xref.inventory_label) }\n      if (object.xref && object.xref.cas) { infos.push(object.xref.cas) }\n      names = [object.short_label, object.name].concat(infos).join(\" | \");\n    } else {\n      names = [object.short_label, object.name].join(\" | \");\n    }\n\n    return (\n      <OverlayTrigger placement=\"top\" overlay={tooltip}>\n        <span onClick={() => openDetail(object)}>\n          {names}\n        </span>\n      </OverlayTrigger>\n    );\n  }\n\n  const tabContentList = () => {\n    let contentList = <div key={list.index} className=\"search-result-tab-content-list-white\">No results</div>;\n    let resultsByPage = searchStore.tabSearchResultValues.find(val => val.id == `${list.key}s-${currentPageNumber}`);\n    let tabResultByPage = resultsByPage != undefined ? resultsByPage.results : { elements: [] };\n\n    if (tabResultByPage.elements.length > 0) {\n      contentList = tabResultByPage.elements.map((object, i, elements) => {\n        let previous = elements[i - 1];\n        let previousMolecule = previous ? previous.molecule_formula : '';\n        let moleculeName = previous && previousMolecule == object.molecule_formula ? '' : <SampleName sample={object} />;\n\n        if (['sample', 'reaction'].includes(object.type)) {\n          return (\n            <div key={`${list.key}-${i}`} className=\"search-result-tab-content-list\" onClick={copyToClipboard}>\n              <div key={moleculeName} className={`search-result-molecule ${object.type}`}>\n                {moleculeName || object.type == 'reaction' ? svgPreview(object) : ''}\n                {moleculeName}\n              </div>\n              <span className=\"search-result-tab-content-list-name\">\n                {shortLabelWithMoreInfos(object)}\n              </span>\n            </div>\n          )\n        } else {\n          return (\n            <div key={`${list.key}-${i}`} className=\"search-result-tab-content-list-white\">\n              <div key={object.type}>\n                {shortLabelWithMoreInfos(object)}\n              </div>\n            </div>\n          )\n        }\n      });\n    } else if (tabResult.total_elements != 0) {\n      contentList = <div className=\"tab-spinner\"><i className=\"fa fa-spinner fa-pulse fa-3x fa-fw\" /></div>;\n    }\n    return contentList;\n  }\n\n  return (\n    <Tab.Pane eventKey={list.index} key={`${list.key}_tabPanel`}>\n      <div className=\"search-result-tab-content-container\">\n        {tabContentList()}\n      </div>\n      {pagination(tabResult, list.key)}\n    </Tab.Pane>\n  );\n}\n\nexport default observer(SearchResultTabContent);\n","import React, { useContext, useState, useEffect } from 'react';\nimport { Col, Navbar, Nav, NavItem, Row, Tab, OverlayTrigger, Tooltip, ButtonToolbar, Button, Alert } from 'react-bootstrap';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport { elementShowOrNew } from 'src/utilities/routesUtils';\n\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport SearchResultTabContent from './SearchResultTabContent';\nimport Aviator from 'aviator';\n\nconst SearchResult = ({ handleClear }) => {\n  const searchStore = useContext(StoreContext).search;\n  const results = searchStore.searchResultValues;\n  const userState = UserStore.getState();\n  const profile = userState.profile || {};\n  const genericElements = userState.genericEls || [];\n  const [visibleTabs, setVisibleTabs] = useState([]);\n  const [currentTabIndex, setCurrentTabIndex] = useState(0);\n\n  useEffect(() => {\n    if (typeof (profile) !== 'undefined' && profile &&\n      typeof (profile.data) !== 'undefined' && profile.data) {\n      const visible = [];\n\n      Object.entries(profile.data.layout).filter((value) => {\n        return value[1] > 0;\n      })\n        .sort((a, b) => a[1] - b[1])\n        .map((value, i) => {\n          let tab = results.find(val => val.id.indexOf(value[0]) !== -1);\n          let totalElements = tab === undefined ? 0 : tab.results.total_elements;\n          if (value[1] > 0 && tab !== undefined) {\n            visible.push({ key: value[0], index: i, totalElements: totalElements });\n          }\n        });\n      setVisibleTabs(visible);\n      let activeTab = visible.find((v) => { return v.totalElements != 0 });\n      activeTab = activeTab !== undefined ? activeTab.index : 0;\n      setCurrentTabIndex(activeTab);\n    }\n  }, [results]);\n\n  const handleTabSelect = (e) => {\n    setCurrentTabIndex(e);\n  }\n\n  const handleAdoptResult = () => {\n    const preparedResult = prepareResultForDispatch();\n    UIActions.setSearchById(preparedResult);\n    ElementActions.changeSorting(true);\n    ElementActions.dispatchSearchResult(preparedResult);\n    searchStore.handleAdopt();\n  }\n\n  const adoptResultAndOpenDetail = (element) => {\n    const { currentCollection, isSync } = UIStore.getState();\n    const { id, type } = element;\n    const uri = isSync\n      ? `/scollection/${currentCollection.id}/${type}/${id}`\n      : `/collection/${currentCollection.id}/${type}/${id}`;\n    Aviator.navigate(uri, { silent: true });\n\n    const e = { type, params: { collectionID: currentCollection.id } };\n    e.params[`${type}ID`] = id;\n\n    const genericEls = (UserStore.getState() && UserStore.getState().genericEls) || [];\n    if (genericEls.find((el) => el.name === type)) {\n      e.klassType = 'GenericEl';\n    }\n\n    elementShowOrNew(e);\n    handleAdoptResult();\n\n    return null;\n  }\n\n  const prepareResultForDispatch = () => {\n    let resultObject = {};\n    results.map((val, i) => {\n      let firstElements = searchStore.tabSearchResultValues.find(tab => tab.id == `${val.id}-1`);\n      resultObject[val.id] = {\n        elements: firstElements.results.elements,\n        ids: val.results.ids,\n        page: val.results.page,\n        pages: val.results.pages,\n        perPage: val.results.per_page,\n        totalElements: val.results.total_elements\n      }\n    });\n    return resultObject;\n  }\n\n  const showResultErrorMessage = () => {\n    if (searchStore.resultErrorMessage.length >= 1) {\n      return <Alert bsStyle=\"danger\" className=\"result-error-message\">{searchStore.resultErrorMessage.join(', ')}</Alert>;\n    }\n  }\n\n  const SearchValuesList = () => {\n    if (searchStore.searchResultVisible && searchStore.searchValues.length > 0) {\n      return (\n        <div className=\"search-value-list\">\n          <h4>Your Search</h4>\n          {\n            searchStore.searchValues.map((val, i) => {\n              return <div key={i}>{val.replace('ILIKE', 'LIKE')}</div>\n            })\n          }\n          {\n            searchStore.searchResultsCount > 0 ? null : (\n              <div className=\"search-spinner\"><i className=\"fa fa-spinner fa-pulse fa-4x fa-fw\" /></div>\n            )\n          }\n          {showResultErrorMessage()}\n        </div>\n      );\n    } else {\n      return null;\n    }\n  }\n\n  const ResultsCount = () => {\n    if (searchStore.searchResultsCount === 0) { return null }\n\n    const counts = results.map((val) => {\n      if (val.id == 'literatures') { return 0; }\n\n      return val.results.total_elements;\n    });\n    const sum = counts.reduce((a, b) => a + b, 0);\n\n    return (\n      <div><h4 className=\"search-result-number-of-results\">{sum} results</h4></div>\n    );\n  }\n\n  const searchResultNavItem = (list, tabResult) => {\n    if (searchStore.searchResultsCount === 0) { return null }\n\n    const elnElements = ['cell_line', 'sample', 'reaction', 'screen', 'wellplate', 'research_plan'];\n    let iconClass = `icon-${list.key}`;\n    let tooltipText = list.key && (list.key.replace('_', ' ').replace(/(^\\w|\\s\\w)/g, m => m.toUpperCase()));\n    \n    if (!elnElements.includes(list.key)) {\n      const genericElement = (genericElements && genericElements.find(el => el.name === list.key)) || {};\n      iconClass = `${genericElement.icon_name} icon_generic_nav`;\n      tooltipText = `${genericElement.label}<br />${genericElement.desc}`;\n    }\n    let tooltip = (\n      <Tooltip id=\"_tooltip_history\" className=\"left_tooltip\">\n        {tooltipText}\n      </Tooltip>\n    );\n    let itemClass = tabResult.total_elements == 0 ? ' no-result' : '';\n\n    return (\n      <NavItem eventKey={list.index} key={`${list.key}_navItem`} className={`elements-list-tab${itemClass}`}>\n        <OverlayTrigger delayShow={500} placement=\"top\" overlay={tooltip}>\n          <div style={{ display: 'flex' }}>\n            <i className={iconClass} />\n            <span style={{ paddingLeft: 5 }}>\n              ({tabResult.total_elements})\n            </span>\n          </div>\n        </OverlayTrigger>\n      </NavItem>\n    );\n  }\n\n  const SearchResultTabContainer = () => {\n    if (searchStore.searchResultsCount === 0) { return null }\n\n    const navItems = [];\n    const tabContents = [];\n\n    visibleTabs.map((list) => {\n      const tab = results.find(val => val.id.indexOf(list.key) !== -1);\n      if (tab === undefined) { return; }\n      const tabResult = tab.results;\n\n      const navItem = searchResultNavItem(list, tabResult);\n      const tabContent =\n        <SearchResultTabContent\n          key={`${list.key}-result-tab`}\n          list={list}\n          tabResult={tabResult}\n          openDetail={adoptResultAndOpenDetail}\n        />\n\n      navItems.push(navItem);\n      tabContents.push(tabContent);\n    });\n\n    return (\n      <Tab.Container\n        id=\"tabList\"\n        defaultActiveKey={0}\n        activeKey={currentTabIndex}\n        onSelect={handleTabSelect}\n      >\n        <Row className=\"clearfix\">\n          <Col sm={12}>\n            <Navbar className=\"search-result-tab-navbar\">\n              <Nav bsStyle=\"tabs\">\n                {navItems}\n              </Nav>\n            </Navbar>\n          </Col>\n          <Col sm={12}>\n            <Tab.Content className=\"search-result-tab-content\" animation>\n              {tabContents}\n            </Tab.Content>\n          </Col>\n        </Row>\n      </Tab.Container>\n    );\n  }\n\n  const ResultButtons = () => {\n    if (searchStore.searchResultsCount === 0) { return null }\n\n    return (\n      <ButtonToolbar className=\"result-button-toolbar\">\n        <Button bsStyle=\"warning\" onClick={() => searchStore.handleCancel()}>\n          Cancel\n        </Button>\n        <Button bsStyle=\"info\" onClick={handleClear}>\n          Reset\n        </Button>\n        <Button bsStyle=\"primary\" onClick={handleAdoptResult} style={{ marginRight: '20px' }} >\n          Adopt Result\n        </Button>\n      </ButtonToolbar>\n    );\n  }\n\n  return (\n    <>\n      <SearchValuesList />\n      <ResultsCount />\n      <SearchResultTabContainer />\n      <ResultButtons />\n    </>\n  );\n}\n\nexport default observer(SearchResult);\n","import React, { useEffect, useContext } from 'react';\nimport { Button, ButtonToolbar, ToggleButtonGroup, ToggleButton, Panel, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport { togglePanel, handleClear, showErrorMessage, handleSearch, panelVariables } from './SearchModalFunctions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport AdvancedSearchRow from './AdvancedSearchRow';\nimport DetailSearch from './DetailSearch';\nimport SearchResult from './SearchResult';\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nconst TextSearch = () => {\n  const elnElements = ['cell_line', 'samples', 'reactions', 'wellplates', 'screens', 'research_plans'];\n  const genericElements = UserStore.getState().genericEls || [];\n  const searchStore = useContext(StoreContext).search;\n  const panelVars = panelVariables(searchStore);\n\n  useEffect(() => {\n    let advancedValues = searchStore.advancedSearchValues;\n    const length = advancedValues.length - 1;\n    const lastInputRow = searchStore.advancedSearchValues[length];\n    \n    const checkSelectedElements =\n      (lastInputRow.field && lastInputRow.value && lastInputRow.link) ||\n      (length == 0 && lastInputRow.field && lastInputRow.value);\n    \n    if (checkSelectedElements) {\n      let searchValues = {\n        link: 'OR', match: 'ILIKE',\n        table: advancedValues[0].table,\n        element_id: advancedValues[0].element_id,\n        field: '', value: '', smiles: '', sub_values: [],\n        unit: '', validationState: null\n      };\n      searchStore.addAdvancedSearchValue(length + 1, searchValues);\n    }\n  }, [searchStore.advancedSearchValues]);\n\n  const handleChangeElement = (element) => {\n    const table = elnElements.includes(element) ? element : 'elements';\n    const genericElement = (!elnElements.includes(element) && genericElements.find(el => el.name + 's' === element)) || {};\n\n    searchStore.changeSearchElement({\n      table: table,\n      element_id: (genericElement.id || 0),\n      element_table: element\n    });\n    let searchValues = { ...searchStore.advancedSearchValues[0] };\n    searchValues.table = table;\n    searchValues.element_id = (genericElement.id || 0);\n    searchStore.addAdvancedSearchValue(0, searchValues);\n  }\n\n  const SelectSearchTable = () => {\n    const layout = UserStore.getState().profile.data.layout;\n\n    const elnElements = ['cell_line', 'sample', 'reaction', 'screen', 'wellplate', 'research_plan'];\n\n    const buttons = Object.entries(layout).filter((value) => {\n      return value[1] > 0\n    })\n      .sort((a, b) => a[1] - b[1])\n      .map((value) => {\n        const genericElement = (genericElements && genericElements.find(el => el.name === value[0])) || {};\n        if (genericElement.id === undefined && !elnElements.includes(value[0])) { return }\n\n        let iconClass = `icon-${value[0]}`;\n        if (!elnElements.includes(value[0])) {\n          iconClass = `${genericElement.icon_name} icon_generic_nav`;\n        }\n        let tooltip = (\n          <Tooltip id=\"_tooltip_history\" className=\"left_tooltip\">\n            {value[0].charAt(0).toUpperCase() + value[0].slice(1).replace('_', ' ')}\n          </Tooltip>\n        );\n\n        return (\n          <ToggleButton\n            key={value[0]}\n            value={`${value[0]}s`}>\n            <OverlayTrigger delayShow={500} placement=\"top\" overlay={tooltip}>\n              <i className={iconClass} />\n            </OverlayTrigger>\n          </ToggleButton>\n        );\n      });\n\n    return (\n      <ToggleButtonGroup\n        type=\"radio\"\n        name=\"options\"\n        key=\"element-options\"\n        value={searchStore.searchElement.element_table}\n        onChange={handleChangeElement}\n        defaultValue={0}\n        className=\"toggle-elements\">\n        {buttons}\n      </ToggleButtonGroup>\n    );\n  }\n\n  const SwitchToAdvancedOrDetailSearch = () => {\n    let advancedOrDetail = searchStore.searchType == 'advanced' ? false : true;\n    let activeClass = advancedOrDetail == true ? ' active' : '';\n    return (\n      <>\n        <input\n          checked={advancedOrDetail}\n          className=\"advanced-detail-switch\"\n          onChange={(e) => searchStore.changeSearchType(e)}\n          id={`advanced-detail-switch-new`}\n          type=\"checkbox\"\n        />\n        <label\n          className={`advanced-detail-switch-label${activeClass}`}\n          htmlFor={`advanced-detail-switch-new`}\n        >\n          {searchStore.searchType.charAt(0).toUpperCase() + searchStore.searchType.slice(1)}\n          <span className=\"advanced-detail-switch-button\" />\n        </label>\n      </>\n    );\n  }\n\n  const renderDynamicRow = () => {\n    let dynamicRow = (<span />);\n\n    if (searchStore.advancedSearchValues.length > 1) {\n      let addedSelections = searchStore.advancedSearchValues.filter((val, idx) => idx > 0);\n\n      dynamicRow = addedSelections.map((_, idx) => {\n        let id = idx + 1;\n        return (\n          <AdvancedSearchRow idx={id} key={`selection_${id}`} />\n        );\n      });\n    }\n\n    return dynamicRow;\n  };\n\n  return (\n    <>\n      <Panel\n        id=\"collapsible-search\"\n        className={panelVars.defaultClassName}\n        onToggle={togglePanel(searchStore)}\n        expanded={searchStore.searchVisible}\n      >\n        <Panel.Heading className={panelVars.inactiveSearchClass}>\n          <Panel.Title toggle>\n            {panelVars.searchTitle}\n            <i className={panelVars.searchIcon} />\n          </Panel.Title>\n        </Panel.Heading>\n        <Panel.Collapse>\n          <Panel.Body>\n            <div className=\"advanced-search\">\n              <SelectSearchTable />\n              <SwitchToAdvancedOrDetailSearch />\n              <div className=\"scrollable-content\">\n                {showErrorMessage(searchStore)}\n                {\n                  searchStore.searchType == 'advanced' ? (\n                    <>\n                      <AdvancedSearchRow idx={0} key={\"selection_0\"} />\n                      {renderDynamicRow()}\n                    </>\n                  ) : (\n                    <DetailSearch\n                      key={searchStore.searchElement.element_table}\n                    />\n                  )\n                }\n              </div>\n            </div>\n            <ButtonToolbar>\n              <Button bsStyle=\"warning\" id=\"advanced-cancel-button\" onClick={() => searchStore.handleCancel()}>\n                Cancel\n              </Button>\n              <Button bsStyle=\"info\" onClick={() => handleClear(searchStore)}>\n                Reset\n              </Button>\n              <Button bsStyle=\"primary\" id=\"advanced-search-button\"\n                onClick={() => handleSearch(searchStore, UIStore.getState())} style={{ marginRight: '20px' }} >\n                Search\n              </Button>\n            </ButtonToolbar>\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n      <Panel\n        id=\"collapsible-result\"\n        className={panelVars.defaultClassName + panelVars.invisibleClassName}\n        onToggle={togglePanel(searchStore)}\n        expanded={searchStore.searchResultVisible}\n      >\n        <Panel.Heading className={panelVars.inactiveResultClass}>\n          <Panel.Title toggle>\n            {panelVars.resultTitle}\n            <i className={panelVars.resultIcon} />\n          </Panel.Title>\n        </Panel.Heading>\n        <Panel.Collapse>\n          <Panel.Body style={{ minHeight: '120px' }}>\n            <SearchResult\n              handleClear={() => handleClear(searchStore)}\n            />\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    </>\n  );\n}\n\nexport default observer(TextSearch);\n","import React, { useEffect, useContext } from 'react';\nimport { Button, ButtonToolbar, Form, FormControl, Radio, Grid, Row, Col, Panel } from 'react-bootstrap';\nimport { togglePanel, showErrorMessage, panelVariables } from './SearchModalFunctions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport StructureEditor from 'src/models/StructureEditor';\nimport SearchResult from './SearchResult';\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nconst KetcherRailsform = () => {\n  const ketcherStructure = {\n    structure: {\n      path: 'ketcher',\n      setMolfileInFrame: false,\n      setMfFuncName: 'setMolecule',\n      getMfFuncName: 'getMolfile',\n      getMfWithCallback: false,\n      getSVGFuncName: 'getSVG',\n      getSVGWithCallback: false\n    }\n  }\n  const editor = new StructureEditor({ ...ketcherStructure, id: 'ketcher' });\n\n  const searchStore = useContext(StoreContext).search;\n  const panelVars = panelVariables(searchStore);\n  let iframe;\n  \n  useEffect(() => {\n    iframe = document.getElementById('ketcher');\n    iframe.onload = () => {\n      if (searchStore.ketcherRailsValues.queryMolfile && editor && searchStore.searchModalVisible) {\n        editor.structureDef.molfile = searchStore.ketcherRailsValues.queryMolfile;\n      }\n    }\n  }, [iframe]);\n \n  const handleSearchTypeChange = (e) => {\n    searchStore.changeKetcherRailsValue('searchType', e.target.value);\n  }\n\n  const handleTanimotoChange = (e) => {\n    const val = e.target && e.target.value;\n    if (!isNaN(val - val)) {\n      searchStore.changeKetcherRailsValue('tanimotoThreshold', e.target.value);\n    }\n  }\n\n  const handleSearch = () => {\n    const structure = editor.structureDef;\n    const { molfile } = structure;\n    handleStructureEditorSave(molfile);\n  }\n\n  const handleStructureEditorSave = (molfile) => {\n    if (molfile) {\n      searchStore.changeKetcherRailsValue('queryMolfile', molfile);\n    }\n    let message = 'Please add a drawing. The drawing is empty';\n    searchStore.addErrorMessage(message);\n\n    //// Check if blank molfile\n    const molfileLines = molfile.match(/[^\\r\\n]+/g);\n    //// If the first character ~ num of atoms is 0, we will not search\n    if (molfileLines[1].trim()[0] != 0) {\n      searchStore.showSearchResults();\n      searchStore.removeErrorMessage(message);\n      structureSearch(molfile);\n    }\n  }\n\n  const structureSearch = (molfile) => {\n    const uiState = UIStore.getState();\n    const { currentCollection } = uiState;\n    const collectionId = currentCollection ? currentCollection.id : null;\n    const isSync = currentCollection ? currentCollection.is_sync_to_me : false;\n    let tanimoto = searchStore.ketcherRailsValues.tanimotoThreshold;\n    if (tanimoto <= 0 || tanimoto > 1) { tanimoto = 0.3; }\n\n    const selection = {\n      elementType: 'structure',\n      molfile,\n      search_type: searchStore.ketcherRailsValues.searchType,\n      tanimoto_threshold: tanimoto,\n      page_size: uiState.number_of_results,\n      search_by_method: 'structure',\n      structure_search: true\n    };\n    searchStore.loadSearchResults({\n      selection, collectionId, isSync, moleculeSort: true\n    });\n    searchStore.clearSearchAndTabResults();\n    searchValuesByMolfile();\n  }\n\n  const handleClear = () => {\n    searchStore.clearSearchResults();\n\n    const iframe = document.querySelector('#ketcher').contentWindow;\n    iframe.document.querySelector('#new').click();\n  }\n\n  const searchValuesByMolfile = () => {\n    searchStore.changeSearchValues([searchStore.ketcherRailsValues.queryMolfile]);\n  }\n\n  return (\n    <>\n      <Panel\n        id=\"collapsible-search\"\n        className={panelVars.defaultClassName}\n        onToggle={togglePanel(searchStore)}\n        expanded={searchStore.searchVisible}\n      >\n        <Panel.Heading className={panelVars.inactiveSearchClass}>\n          <Panel.Title toggle>\n            {panelVars.searchTitle}\n            <i className={panelVars.searchIcon} />\n          </Panel.Title>\n        </Panel.Heading>\n        <Panel.Collapse>\n          <Panel.Body>\n            {showErrorMessage(searchStore)}\n            <iframe\n              id=\"ketcher\"\n              src=\"/ketcher\"\n              title=\"Ketcher Rails\"\n              width=\"100%\"\n              style={{ border: 'none', minHeight: '53.9vh' }}\n            />\n            <Grid style={{ margin: 0, paddingLeft: 0 }}>\n              <Row style={{ marginTop: '20px' }}>\n                <Col sm={4} md={3}>\n                  <ButtonToolbar>\n                    <Button bsStyle=\"warning\" onClick={() => searchStore.handleCancel()}>\n                      Cancel\n                    </Button>\n                    <Button bsStyle=\"primary\" onClick={handleSearch} style={{ marginRight: '20px' }} >\n                      Search\n                    </Button>\n                  </ButtonToolbar>\n                </Col>\n                <Col sm={6} md={4}>\n                  <Form inline>\n                    <Radio\n                      value=\"similar\"\n                      checked={searchStore.ketcherRailsValues.searchType === 'similar'}\n                      onChange={handleSearchTypeChange}\n                    >\n                      &nbsp; Similarity Search &nbsp;\n                    </Radio>\n                    &nbsp;&nbsp;\n                    <FormControl\n                      style={{ width: '40%' }}\n                      type=\"text\"\n                      value={searchStore.ketcherRailsValues.tanimotoThreshold}\n                      onChange={handleTanimotoChange}\n                    />\n                  </Form>\n                </Col>\n                <Col sm={4} md={2}>\n                  <Radio\n                    value=\"sub\"\n                    checked={searchStore.ketcherRailsValues.searchType === 'sub'}\n                    onChange={handleSearchTypeChange}\n                  >\n                    Substructure Search\n                  </Radio>\n                </Col>\n              </Row>\n            </Grid>\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n      <Panel\n        id=\"collapsible-result\"\n        className={panelVars.defaultClassName + panelVars.invisibleClassName}\n        onToggle={togglePanel(searchStore)}\n        expanded={searchStore.searchResultVisible}\n      >\n        <Panel.Heading className={panelVars.inactiveResultClass}>\n          <Panel.Title toggle>\n            {panelVars.resultTitle}\n            <i className={panelVars.resultIcon} />\n          </Panel.Title>\n        </Panel.Heading>\n        <Panel.Collapse>\n          <Panel.Body style={{ minHeight: '120px' }}>\n            <SearchResult\n              handleClear={handleClear}\n            />\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    </>\n  );\n}\n\nexport default observer(KetcherRailsform);\n","export default {\n  references: [\n    {\n      value: {\n        column: 'doi',\n        label: 'DOI',\n        type: 'text',\n        table: 'literatures',\n      },\n      label: 'DOI',\n    },\n    {\n      value: {\n        column: 'litype',\n        label: 'Type',\n        type: 'select',\n        option_layers: \"CitationTypeMap\",\n        table: 'literals',\n      },\n      label: 'Type',\n    },\n    {\n      value: {\n        column: 'title',\n        label: 'Title',\n        type: 'text',\n        table: 'literatures',\n      },\n      label: 'Title',\n    },\n    {\n      value: {\n        column: 'url',\n        label: 'URL',\n        type: 'text',\n        table: 'literatures',\n      },\n      label: 'URL',\n    },\n  ]\n}\n","import React, { useContext } from 'react';\nimport { FormControl } from 'react-bootstrap'\nimport Select from 'react-select3';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nimport PublicationFieldData from './PublicationFieldData';\nimport { mapperFields } from './SelectMapperData';\nimport { CitationTypeMap } from 'src/apps/mydb/elements/details/literature/CitationType';\n\n\nconst PublicationSearchRow = ({ idx }) => {\n  const searchStore = useContext(StoreContext).search;\n  let selection = searchStore.publicationSearchValues[idx];\n  let mapperOptions = mapperFields;\n  let fieldOptions = PublicationFieldData.references;\n\n  const logicalOperators = [\n    { value: \"AND\", label: \"AND\" },\n    { value: \"OR\", label: \"OR\" }\n  ];\n\n  let citationOptions = [];\n  Object.entries(CitationTypeMap).forEach(([key, value]) => {\n    if (key == 'uncategorized') { return; }\n    citationOptions.push({ value: key, label: value.short, def: value.def });\n  });\n\n  const formElementValue = (formElement, e) => {\n    switch (formElement) {\n      case 'value':\n        const value = typeof e.target !== 'undefined' ? e.target.value : (typeof e.value !== 'undefined' ? e.value : e);\n        return value;\n      case 'field':\n      case 'link':\n      case 'match':\n      case 'unit':\n        return e.value;\n      default:\n        return e;\n    }\n  }\n\n  const onChange = (formElement) => (e) => {\n    let searchValues = { ...searchStore.publicationSearchValues[idx] };\n\n    if (e === undefined) {\n      searchValues[formElement] = '';\n      searchStore.addPublicationSearchValue(idx, searchValues);\n      return;\n    }\n\n    let value = formElementValue(formElement, e, e.currentTarget);\n    searchValues[formElement] = value;\n    searchStore.addPublicationSearchValue(idx, searchValues);\n  }\n\n  const defaultValueField = (\n    <FormControl\n      type=\"text\"\n      value={selection.value}\n      componentClass=\"textarea\"\n      rows={1}\n      className=\"value-select\"\n      placeholder=\"Search value\"\n      onChange={onChange('value')}\n    />\n  );\n\n  const valueField = () => {\n    if (selection.field == '' || selection.field.column != 'litype') {\n      return defaultValueField;\n    }\n\n    return (\n      <div className=\"value-field-select\">\n        <Select\n          options={citationOptions}\n          placeholder=\"Select citation\"\n          value={citationOptions.filter(({ value }) => value == selection.value)}\n          isClearable={false}\n          onChange={onChange('value')}\n        />\n      </div>\n    );\n  }\n\n  let display = selection.link == '' ? 'none' : 'table';\n\n  return (\n    <div className=\"adv-search-row\">\n      <div className=\"link-select\" style={{ flex: \"0 0 127px\" }}>\n        <div style={{ display: display, width: '100%' }}>\n          <Select\n            options={logicalOperators}\n            value={logicalOperators.filter(({ value }) => value == selection.link)}\n            isClearable={false}\n            onChange={onChange('link')}\n          />\n        </div>\n      </div>\n      <div className=\"match-select\">\n        <Select\n          options={mapperOptions}\n          placeholder=\"Select search mapper\"\n          value={mapperOptions.filter(({ value }) => value == selection.match)}\n          isClearable={false}\n          className=\"match-select-options\"\n          onChange={onChange('match')} />\n      </div>\n      <div className=\"field-select\">\n        <Select\n          options={fieldOptions}\n          isClearable={false}\n          placeholder=\"Select search field\"\n          value={selection.field}\n          className=\"field-select-options\"\n          onChange={onChange('field')} />\n      </div>\n      {valueField()}\n    </div>\n  )\n}\n\nexport default PublicationSearchRow;\n","import React, { useContext } from 'react';\nimport { Button, ButtonGroup, Modal } from 'react-bootstrap';\nimport Draggable from \"react-draggable\";\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nimport TextSearch from './forms/TextSearch';\nimport KetcherRailsForm from './forms/KetcherRailsForm';\nimport PublicationSearch from './forms/PublicationSearch';\nimport NoFormSelected from './forms/NoFormSelected';\n\nconst Components = {\n  advanced: TextSearch,\n  ketcher: KetcherRailsForm,\n  publication: PublicationSearch,\n  empty: NoFormSelected\n}\n\nconst SearchModal = () => {\n  const searchStore = useContext(StoreContext).search;\n\n  let FormData = [\n    {\n      value: 'advanced',\n      label: 'Text search',\n      id: 0,\n    },\n    {\n      value: 'ketcher',\n      label: 'Structure search',\n      id: 1,\n    },\n    {\n      value: 'publication',\n      label: 'PublicationSearch',\n      id: 2,\n    },\n  ];\n\n  const FormComponent = (block) => {\n    let value = block.value.includes('generic') ? 'generic' : block.value;\n    if (typeof Components[value] !== \"undefined\") {\n      return React.createElement(Components[value], {\n        key: `${block.id}-${value}`\n      });\n    }\n    return React.createElement(Components['empty'], {\n      key: 'empty'\n    });\n  };\n\n  const Spinner = () => {\n    return (\n      <i className=\"fa fa-spinner fa-pulse fa-3x fa-fw\" />\n    );\n  }\n\n  let minimizedClass = searchStore.searchModalMinimized ? ' minimized' : '';\n  let searchTypeTextClass = searchStore.searchModalSelectedForm.value === 'advanced' ? 'active' : '';\n  let searchTypePublicationClass = searchStore.searchModalSelectedForm.value === 'publication' ? 'active' : '';\n  let searchTypeStructureClass = searchStore.searchModalSelectedForm.value === 'ketcher' ? 'active' : '';\n\n  return (\n    <Draggable handle=\".handle\">\n      <Modal\n        show={searchStore.searchModalVisible}\n        onHide={() => searchStore.handleCancel()}\n        backdrop={false}\n        dialogas=\"full-search\"\n        dialogClassName=\"searching\"\n      >\n        <Modal.Header className=\"handle\" closeButton>\n          <div className=\"col-md-4 col-sm-11\">\n            <Modal.Title>\n              <i className=\"fa fa-arrows move\" />\n              Please select your search criteria\n            </Modal.Title>\n          </div>\n          <div className=\"col-md-7 col-sm-11\">\n            <ButtonGroup className=\"search-selection\">\n              <Button\n                onClick={(e) => searchStore.changeSearchModalSelectedForm(FormData[0])}\n                className={searchTypeTextClass}\n              >\n                <span className=\"search-icon\">\n                  <i className=\"fa fa-align-justify\" />\n                </span>\n                Text search\n              </Button>\n              <Button\n                onClick={(e) => searchStore.changeSearchModalSelectedForm(FormData[2])}\n                className={searchTypePublicationClass}\n              >\n                <span className=\"search-icon\">\n                  <i className=\"fa fa-newspaper-o\" />\n                </span>\n                Publication search\n              </Button>\n              <Button\n                onClick={(e) => searchStore.changeSearchModalSelectedForm(FormData[1])}\n                className={searchTypeStructureClass}\n              >\n                <span className=\"search-icon\">\n                  <img src=\"/images/wild_card/pubchem.svg\" className=\"pubchem-logo\" />\n                </span>\n                Structure search\n              </Button>\n            </ButtonGroup>\n          </div>\n          <div className=\"col-md-1 col-sm-1\">\n            <i\n              className=\"fa fa-window-minimize window-minimize\"\n              onClick={() => searchStore.toggleSearchModalMinimized()} />\n          </div>\n        </Modal.Header>\n        <Modal.Body>\n          <React.Suspense fallback={<Spinner />}>\n            <div className={`form-container${minimizedClass}`}>\n              {FormComponent(searchStore.searchModalSelectedForm)}\n            </div>\n          </React.Suspense>\n        </Modal.Body>\n      </Modal>\n    </Draggable>\n  );\n}\n\nexport default observer(SearchModal);\n","import React, { useEffect, useContext } from 'react';\nimport { Button, ButtonToolbar, Form, FormControl, Radio, Grid, Row, Col, Panel } from 'react-bootstrap';\nimport { togglePanel, handleClear, showErrorMessage, handleSearch, panelVariables } from './SearchModalFunctions';\nimport SearchResult from './SearchResult';\nimport PublicationSearchRow from './PublicationSearchRow';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nconst PublicationSearch = () => {\n  const searchStore = useContext(StoreContext).search;\n  const panelVars = panelVariables(searchStore);\n\n  useEffect(() => {\n    let referenceValues = searchStore.publicationSearchValues;\n    const length = referenceValues.length - 1;\n    const lastInputRow = searchStore.publicationSearchValues[length];\n    \n    const checkSelectedElements =\n      (lastInputRow.field && lastInputRow.value && lastInputRow.link) ||\n      (length == 0 && lastInputRow.field && lastInputRow.value);\n    \n    if (checkSelectedElements) {\n      let searchValues = {\n        link: 'OR', match: 'ILIKE',\n        table: referenceValues[0].table,\n        field: '', value: ''\n      };\n      searchStore.addPublicationSearchValue(length + 1, searchValues);\n    }\n  }, [searchStore.publicationSearchValues]);\n\n  const renderDynamicRow = () => {\n    let dynamicRow = (<span />);\n\n    if (searchStore.publicationSearchValues.length > 1) {\n      let addedSelections = searchStore.publicationSearchValues.filter((val, idx) => idx > 0);\n\n      dynamicRow = addedSelections.map((_, idx) => {\n        let id = idx + 1;\n        return (\n          <PublicationSearchRow idx={id} key={`selection_${id}`} />\n        );\n      });\n    }\n\n    return dynamicRow;\n  }\n\n  return (\n    <>\n      <Panel\n        id=\"collapsible-search\"\n        className={panelVars.defaultClassName}\n        onToggle={togglePanel(searchStore)}\n        expanded={searchStore.searchVisible}\n      >\n        <Panel.Heading className={panelVars.inactiveSearchClass}>\n          <Panel.Title toggle>\n            {panelVars.searchTitle}\n            <i className={panelVars.searchIcon} />\n          </Panel.Title>\n        </Panel.Heading>\n        <Panel.Collapse>\n          <Panel.Body>\n            <div className=\"advanced-search\">\n              <div className=\"scrollable-content\">\n                {showErrorMessage(searchStore)}\n                <PublicationSearchRow idx={0} key={\"selection_0\"} />\n                {renderDynamicRow()}\n              </div>\n            </div>\n            <ButtonToolbar>\n              <Button bsStyle=\"warning\" id=\"advanced-cancel-button\" onClick={() => searchStore.handleCancel()}>\n                Cancel\n              </Button>\n              <Button bsStyle=\"info\" onClick={() => handleClear(searchStore)}>\n                Reset\n              </Button>\n              <Button bsStyle=\"primary\" id=\"advanced-search-button\" onClick={() => handleSearch(searchStore, UIStore.getState())} style={{ marginRight: '20px' }} >\n                Search\n              </Button>\n            </ButtonToolbar>\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n      <Panel\n        id=\"collapsible-result\"\n        className={panelVars.defaultClassName + panelVars.invisibleClassName}\n        onToggle={togglePanel(searchStore)}\n        expanded={searchStore.searchResultVisible}\n      >\n        <Panel.Heading className={panelVars.inactiveResultClass}>\n          <Panel.Title toggle>\n            {panelVars.resultTitle}\n            <i className={panelVars.resultIcon} />\n          </Panel.Title>\n        </Panel.Heading>\n        <Panel.Collapse>\n          <Panel.Body style={{ minHeight: '120px' }}>\n            <SearchResult\n              handleClear={() => handleClear(searchStore)}\n            />\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    </>\n  );\n}\n\nexport default observer(PublicationSearch);\n","import React from 'react';\n\nexport default () => (\n  <div className=\"no-selected-search\">\n    Please select a search.\n  </div>\n);\n","import React from 'react';\nimport { ButtonGroup, Button, DropdownButton, MenuItem } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport AutoCompleteInput from 'src/components/navigation/search/AutoCompleteInput';\nimport SearchModal from 'src/components/searchModal/SearchModal';\nimport SuggestionsFetcher from 'src/fetchers/SuggestionsFetcher';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nexport default class Search extends React.Component {\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      elementType: 'all',\n      queryMolfile: null,\n      searchType: 'sub',\n      tanimotoThreshold: 0.7,\n    };\n    this.handleClearSearchSelection = this.handleClearSearchSelection.bind(this);\n  }\n\n  handleSelectionChange(selection) {\n    const uiState = UIStore.getState();\n    const { currentCollection } = uiState;\n    const collectionId = currentCollection ? currentCollection.id : null;\n    const isPublic = this.props.isPublic;\n    const isSync = currentCollection ? currentCollection.is_sync_to_me : false;\n    selection.elementType = this.state.elementType;\n    UIActions.setSearchSelection(selection);\n    selection.page_size = uiState.number_of_results;\n    ElementActions.fetchBasedOnSearchSelectionAndCollection(\n      { selection, collectionId, isSync, isPublic });\n  }\n\n  search(query) {\n    const { currentCollection } = UIStore.getState();\n    const id = currentCollection ? currentCollection.id : null;\n    const isSync = currentCollection ? currentCollection.is_sync_to_me : false;\n    return SuggestionsFetcher.fetchSuggestionsForCurrentUser(\n      this.state.elementType.toLowerCase(), query, id, isSync\n    );\n  }\n\n  handleClearSearchSelection() {\n    const { currentCollection, isSync } = UIStore.getState();\n    this.setState({ elementType: 'all' })\n    currentCollection['clearSearch'] = true;\n    isSync ? UIActions.selectSyncCollection(currentCollection)\n      : UIActions.selectCollection(currentCollection);\n  }\n\n  handleElementSelection(event, element = null) {\n    if (event.startsWith('elements-')) {\n      this.showGenericElCriteria();\n      this.setState({ elementType: 'elements', genericEl: element });\n    } else if (event === 'SampleAdvanced') {\n      this.showGenericElCriteria();\n      this.setState({ elementType: 'sample' });\n    } else {\n      this.setState({ elementType: event });\n    }\n  }\n\n  renderMenuItems() {\n    const elements = [\n      'All',\n      'Samples', 'Reactions',\n      // 'Wellplates', 'Screens','Cell lines'\n    ];\n\n    const menu = elements.map(element => (\n      <MenuItem key={element} onSelect={() => this.handleElementSelection(element.toLowerCase())}>\n        {element}\n      </MenuItem>\n    ));\n\n    // For REPO only\n    menu.push(<MenuItem key=\"divider\" divider />);\n    menu.push(\n      <MenuItem key=\"embargo\" onSelect={() => this.handleElementSelection('embargo')}>\n        Embargo Bundle#\n      </MenuItem>\n    );\n\n    return menu;\n  }\n\n  render() {\n    const { profile } = UserStore.getState();\n    // const { customClass } = (profile && profile.data) || {};\n    const customClass = '.btn-unified';\n\n    const buttonAfter = (\n      <ButtonGroup>\n        <Button bsStyle={customClass ? null : 'info'} className={customClass} id=\"open-search-modal\" onClick={() => this.context.search.showSearchModal()}>\n          <i className=\"fa fa-search\" />\n        </Button>\n        <Button bsStyle={customClass ? null : 'danger'} className={customClass} onClick={this.handleClearSearchSelection}>\n          <i className=\"fa fa-times\" />\n        </Button>\n      </ButtonGroup>\n    );\n\n    const inputAttributes = {\n      placeholder: 'IUPAC, InChI, SMILES, RInChI...',\n      style: { minWidth: 200, maxWidth: 300 }\n    };\n\n    const suggestionsAttributes = {\n      style: {\n        marginTop: 15,\n        width: 398,\n        maxHeight: 400\n      }\n    };\n\n    const searchIcon = (elementType) => {\n      if (elementType === 'all') return 'All';\n      // console.log(elementType);\n      if (this.state.elementType === 'embargo') return (<i className=\"fa fa-object-group\" />);\n      if (['samples', 'reactions', 'screens', 'wellplates'].includes(elementType.toLowerCase())) return (<i className={`icon-${elementType.toLowerCase().slice(0, -1)}`} />);\n      if(elementType == 'cell lines'){\n        return (<i className={`icon-cell_line`} />);\n      }\n      if (this.state.genericEl) return (<i className={this.state.genericEl.icon_name} />);\n      return elementType;\n    }\n\n    const innerDropdown = (\n      <DropdownButton\n        className={customClass}\n        id=\"search-inner-dropdown\"\n        title={searchIcon(this.state.elementType)}\n        style={{ width: '50px' }}\n      >\n        {this.renderMenuItems()}\n      </DropdownButton>\n    );\n\n    return (\n      <div className=\"chemotion-search\">\n        <div className=\"search-modal-draw\">\n          <SearchModal />\n        </div>\n        <div className=\"search-autocomplete\">\n          <AutoCompleteInput\n            inputAttributes={inputAttributes}\n            suggestionsAttributes={suggestionsAttributes}\n            suggestions={input => this.search(input)}\n            ref={(input) => { this.autoComplete = input; }}\n            onSelectionChange={selection => this.handleSelectionChange(selection)}\n            buttonBefore={innerDropdown}\n            buttonAfter={buttonAfter}\n          />\n        </div>\n      </div>\n    );\n  }\n}\n\nSearch.propTypes = {\n  noSubmit: PropTypes.bool\n};\n\nSearch.defaultProps = {\n  noSubmit: false,\n};\n","import React from 'react';\nimport { DropdownButton, MenuItem, Button } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nconst MoveOrAssignButton = ({ assignDisabled, moveDisabled, onClick, customClass }) => (\n  <DropdownButton\n    bsStyle={customClass ? null : 'success'}\n    className={customClass}\n    title={<i className=\"fa fa-arrow-right\" />}\n    id=\"move-or-assign-btn\"\n    disabled={assignDisabled && moveDisabled}\n  >\n    <MenuItem onSelect={() => onClick('move')} disabled={moveDisabled}>\n      Move to Collection\n    </MenuItem>\n    <MenuItem onSelect={() => onClick('assign')} disabled={assignDisabled}>\n      Assign to Collection\n    </MenuItem>\n  </DropdownButton>\n);\n\nMoveOrAssignButton.propTypes = {\n  assignDisabled: PropTypes.bool,\n  moveDisabled: PropTypes.bool,\n  onClick: PropTypes.func,\n  customClass: PropTypes.string,\n};\n\nMoveOrAssignButton.defaultProps = {\n  assignDisabled: false,\n  moveDisabled: false,\n  customClass: null,\n  onClick: () => null,\n};\n\nconst RemoveOrDeleteButton = ({ removeDisabled, deleteDisabled, onClick, customClass }) => (\n  <DropdownButton\n    bsStyle={customClass ? null : 'warning'}\n    className={customClass}\n    title={<i className=\"fa fa-minus-square\" />}\n    id=\"remove-or-delete-btn\"\n    disabled={removeDisabled && deleteDisabled}\n  >\n    <MenuItem onSelect={() => onClick('remove')} disabled={removeDisabled}>\n      Remove from current Collection\n    </MenuItem>\n    <MenuItem onSelect={() => onClick('delete')} disabled={deleteDisabled}>\n      Remove from all Collections\n    </MenuItem>\n  </DropdownButton>\n);\n\nRemoveOrDeleteButton.propTypes = {\n  removeDisabled: PropTypes.bool,\n  deleteDisabled: PropTypes.bool,\n  onClick: PropTypes.func,\n  customClass: PropTypes.string,\n};\n\nRemoveOrDeleteButton.defaultProps = {\n  deleteDisabled: false,\n  removeDisabled: false,\n  customClass: null,\n  onClick: () => null,\n};\n\nconst ShareButton = ({ isDisabled, customClass, onClick }) => (\n  <Button\n    bsStyle={customClass ? null : 'info'}\n    id=\"share-btn\"\n    disabled={isDisabled}\n    onClick={() => onClick('share')}\n    className={customClass}\n  >\n    <i className=\"fa fa-share-alt\" />\n  </Button>\n);\n\nShareButton.propTypes = {\n  isDisabled: PropTypes.bool,\n  onClick: PropTypes.func,\n  customClass: PropTypes.string,\n};\n\nShareButton.defaultProps = {\n  isDisabled: false,\n  customClass: null,\n  onClick: () => null,\n};\n\nexport { MoveOrAssignButton, ShareButton, RemoveOrDeleteButton };\n","import 'whatwg-fetch';\n\nexport default class PermissionsFetcher {\n  static fetchPermissionStatus(params) {\n    return fetch('/api/v1/permissions/status/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","import alt from 'src/stores/alt/alt';\nimport PermissionsFetcher from 'src/fetchers/PermissionsFetcher';\n\nclass PermissionActions {\n  fetchPermissionStatus(params) {\n    return (dispatch) => {\n      PermissionsFetcher.fetchPermissionStatus(params)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n}\n\nexport default alt.createActions(PermissionActions);\n","import alt from 'src/stores/alt/alt';\nimport PermissionActions from 'src/stores/alt/actions/PermissionActions';\n\nclass PermissionStore {\n  constructor() {\n    this.state = {\n      is_top_secret: false,\n      sharing_allowed: false,\n      deletion_allowed: false,\n      remove_allowed: false,\n    };\n\n    this.bindListeners({\n      handleFetchPermissionStatus: PermissionActions.fetchPermissionStatus\n    })\n  }\n\n\n  handleFetchPermissionStatus(result) {\n    if (result.is_top_secret != null) {this.state.is_top_secret = result.is_top_secret}\n    if (result.sharing_allowed !=null) {this.state.sharing_allowed = result.sharing_allowed}\n    if (result.deletion_allowed !=null) {this.state.deletion_allowed = result.deletion_allowed}\n    if (result.remove_allowed !=null) {this.state.remove_allowed = result.remove_allowed}\n  }\n}\n\nexport default alt.createStore(PermissionStore, 'PermissionStore');\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, FormGroup, FormControl, ControlLabel } from 'react-bootstrap';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport CollectionStore from 'src/stores/alt/stores/CollectionStore';\nimport Select from 'react-select'\n\nexport default class ManagingModalCollectionActions extends React.Component {\n  constructor(props) {\n    super(props);\n    const options = this.collectionOptions();\n    this.state = {\n      newLabel: null,\n      options: options,\n      selected: null,\n    }\n    this.onSelectChange = this.onSelectChange.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  onSelectChange(e) {\n    let selected = e && e.value\n    this.setState((previousProps, previousState) => {\n      return { ...previousState, selected: selected }\n    });\n  }\n\n  writableColls(colls) {\n    return colls.map(coll => {\n      return coll.permission_level >= 1 ? coll : null;\n    }).filter(r => r != null);\n  }\n\n  collectionEntries() {\n    const cState = CollectionStore.getState();\n    const cUnshared = [...cState.lockedRoots, ...cState.unsharedRoots];\n    let cShared = [];\n    let cSynced = [];\n    if (this.props.listSharedCollections) {\n      cState.sharedRoots.map(sharedR => cShared = [...cShared, ...sharedR.children]);\n      cState.syncInRoots.map(syncInR => cSynced = [...cSynced, ...syncInR.children]);\n      cSynced = this.writableColls(cSynced);\n    }\n\n    if (cShared.length > 0) { cShared[0] = Object.assign(cShared[0], { first: true }); }\n    if (cSynced.length > 0) { cSynced[0] = Object.assign(cSynced[0], { first: true }); }\n\n    const cAll = [...cUnshared, ...cShared, ...cSynced];\n    let cAllTree = [];\n    this.makeTree(cAllTree, cAll, 0);\n    return cAllTree;\n  }\n\n  makeTree(tree, collections, depth) {\n    collections.forEach((collection, index) => {\n      tree.push({\n        id: collection.id,\n        label: collection.label,\n        depth: depth,\n        first: collection.first,\n        is_shared: collection.is_shared,\n        is_sync_to_me: collection.is_sync_to_me\n      });\n      if (collection.children && collection.children.length > 0) {\n        this.makeTree(tree, collection.children, depth + 1)\n      }\n    });\n  }\n\n  collectionOptions() {\n    const cAllTree = this.collectionEntries();\n    if (cAllTree.length === 0) return [];\n    const options = cAllTree.map(leaf => {\n      const indent = \"\\u00A0\".repeat(leaf.depth * 3 + 1);\n      const className = leaf.first ? \"separator\" : \"\";\n      return {\n        value: `${leaf.id}-${leaf.is_sync_to_me ? \"is_sync_to_me\" : \"\"}`,\n        label: indent + leaf.label,\n        className: className\n      };\n    });\n    return options;\n  }\n\n  handleSubmit() {\n    const { selected, newLabel } = this.state;\n    const collection_id = selected && parseInt(selected.split(\"-\")[0]);\n    const is_sync_to_me = selected && selected.split(\"-\")[1] == \"is_sync_to_me\";\n    const ui_state = UIStore.getState();\n\n    this.props.action({\n      ui_state, collection_id, is_sync_to_me, newLabel\n    });\n    this.props.onHide();\n  }\n\n  submitButton() {\n    const { newLabel, selected } = this.state\n    const l = newLabel && newLabel.length\n    return l && l > 0 ? (\n      <Button bsStyle=\"warning\" onClick={this.handleSubmit}>\n        Create collection &lsquo;{newLabel}&rsquo; and Submit\n      </Button>\n    ) : (\n      <Button bsStyle=\"warning\" onClick={this.handleSubmit} disabled={!selected}>\n        Submit\n      </Button>\n    );\n  }\n\n  render() {\n    const { options, selected } = this.state;\n    const onChange = (e) => {\n      const val = e.target && e.target.value\n      this.setState((previousState) => {\n        return { ...previousState, newLabel: val }\n      });\n    }\n    return (\n      <div>\n        <FormGroup>\n          <ControlLabel>Select a Collection</ControlLabel>\n          <Select\n            options={options}\n            value={selected}\n            onChange={this.onSelectChange}\n            className=\"select-assign-collection\"\n          />\n        </FormGroup>\n        <FormGroup style={{ display: 'none'}} >\n          <ControlLabel>or Create a new Collection</ControlLabel>\n          <FormControl\n            type=\"text\"\n            placeholder=\"-- Please insert collection name --\"\n            onChange={onChange}\n          />\n        </FormGroup>\n        {this.submitButton()}\n      </div>\n    )\n  }\n}\n\nManagingModalCollectionActions.propTypes = {\n  action: PropTypes.func,\n  onHide: PropTypes.func,\n  listSharedCollections: PropTypes.bool,\n}\n","import React from 'react';\nimport { Button, ButtonToolbar, Checkbox, OverlayTrigger, Tooltip, Label } from 'react-bootstrap';\n\nexport default class ManagingModalDelete extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      deleteSubsamples: false,\n    };\n\n    this.handleCheck = this.handleCheck.bind(this);\n    this.handleClick = this.handleClick.bind(this);\n    this.onHide = this.onHide.bind(this);\n  }\n\n  onHide() {\n    this.props.onHide();\n  }\n\n  handleClick() {\n    const { onHide, action } = this.props;\n    action(this.state);\n    onHide();\n  }\n\n  handleCheck() {\n    const { deleteSubsamples } = this.state;\n\n    this.setState({\n      deleteSubsamples: !deleteSubsamples,\n    });\n  }\n\n  render() {\n    return (\n      <div>\n        <Checkbox\n          onChange={this.handleCheck}\n          checked={this.state.deleteSubsamples}\n        >\n          Also delete reaction associated samples&nbsp;\n          <OverlayTrigger\n            placement=\"bottom\"\n            overlay={<Tooltip id=\"delete_reaction_samples_info\">if left unchecked, only the solvent and reactant samples of the selected reactions will be deleted</Tooltip>}\n          >\n            <Label>?</Label>\n          </OverlayTrigger>\n        </Checkbox>\n        <ButtonToolbar>\n          <Button bsStyle=\"primary\" onClick={this.onHide}>Cancel</Button>\n          <Button bsStyle=\"warning\" onClick={this.handleClick}>Delete</Button>\n        </ButtonToolbar>\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ButtonToolbar } from 'react-bootstrap';\n\nimport UIStore from 'src/stores/alt/stores/UIStore';\n\nconst ManagingModalRemove = ({ onHide, action }) => {\n  const ui_state = UIStore.getState();\n  return (\n    <ButtonToolbar>\n      <Button bsStyle=\"primary\" onClick={() => onHide()}>Cancel</Button>\n      <Button\n        bsStyle=\"warning\"\n        onClick={() => { action({ ui_state }); onHide(); }}\n      >\n        Remove\n      </Button>\n    </ButtonToolbar>\n  );\n};\n\nManagingModalRemove.propTypes = {\n  onHide: PropTypes.func.isRequired,\n  action: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.func\n  ]).isRequired\n};\n\nexport default ManagingModalRemove;\n","import React from 'react';\n\nexport default class ManagingModalTopSecret extends React.Component {\n  constructor(props) {\n    super(props);\n  }\n\n  render() {\n    return (\n      <div>\n        One of the selected elements contains one or several samples marked as top secret.\n      </div>\n    )\n  }\n}\n","import React from 'react';\nimport { ButtonGroup } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport { List } from 'immutable';\nimport { ShareButton, MoveOrAssignButton, RemoveOrDeleteButton } from 'src/components/managingActions/ManagingActionButtons';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport PermissionStore from 'src/stores/alt/stores/PermissionStore';\nimport PermissionActions from 'src/stores/alt/actions/PermissionActions';\nimport ManagingModalSharing from 'src/components/managingActions/ManagingModalSharing';\nimport ManagingModalCollectionActions from 'src/components/managingActions/ManagingModalCollectionActions';\nimport ManagingModalDelete from 'src/components/managingActions/ManagingModalDelete';\nimport ManagingModalRemove from 'src/components/managingActions/ManagingModalRemove';\nimport ManagingModalTopSecret from 'src/components/managingActions/ManagingModalTopSecret';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport { elementNames } from 'src/apps/generic/Utils';\n\nconst upState = async (state) => {\n  const { sample, reaction, screen, wellplate, research_plan, cell_line } = state;\n  const stateObj = {\n    sample: {\n      checkedAll: sample ? sample.checkedAll : false,\n      checkedIds: sample ? sample.checkedIds : List(),\n      uncheckedIds: sample ? sample.uncheckedIds : List(),\n    },\n    reaction: {\n      checkedAll: reaction ? reaction.checkedAll : false,\n      checkedIds: reaction ? reaction.checkedIds : List(),\n      uncheckedIds: reaction ? reaction.uncheckedIds : List(),\n    },\n    wellplate: {\n      checkedAll: wellplate ? wellplate.checkedAll : false,\n      checkedIds: wellplate ? wellplate.checkedIds : List(),\n      uncheckedIds: wellplate ? wellplate.uncheckedIds : List(),\n    },\n    screen: {\n      checkedAll: screen ? screen.checkedAll : false,\n      checkedIds: screen ? screen.checkedIds : List(),\n      uncheckedIds: screen ? screen.uncheckedIds : List(),\n    },\n    research_plan: {\n      checkedAll: research_plan ? research_plan.checkedAll : false,\n      checkedIds: research_plan ? research_plan.checkedIds : List(),\n      uncheckedIds: research_plan ? research_plan.uncheckedIds : List(),\n    },\n    cell_line: {\n      checkedAll: cell_line ? cell_line.checkedAll : false,\n      checkedIds: cell_line ? cell_line.checkedIds : List(),\n      uncheckedIds: cell_line ? cell_line.uncheckedIds : List(),\n    }\n  };\n\n  // eslint-disable-next-line no-unused-expressions\n  const klassArray = await elementNames(false);\n  klassArray.forEach((klass) => {\n    stateObj[`${klass}`] = {\n      checkedAll: state[`${klass}`] ? state[`${klass}`].checkedAll : false,\n      checkedIds: state[`${klass}`] ? state[`${klass}`].checkedIds : List(),\n      uncheckedIds: state[`${klass}`] ? state[`${klass}`].uncheckedIds : List(),\n    };\n  });\n  //  }\n  return (stateObj);\n};\n\nexport default class ManagingActions extends React.Component {\n  constructor(props) {\n    super(props);\n    const { currentUser, genericEls } = UserStore.getState();\n    this.state = {\n      currentUser,\n      currentCollection: { id: 0 },\n      sharing_allowed: false,\n      deletion_allowed: false,\n      remove_allowed: false,\n      is_top_secret: false,\n      genericEls: []\n    };\n\n    this.handleButtonClick = this.handleButtonClick.bind(this);\n    this.onChange = this.onChange.bind(this);\n\n    this.onUserChange = this.onUserChange.bind(this);\n    this.onPermissionChange = this.onPermissionChange.bind(this);\n\n    this.initializeAsyncState();\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onUserChange);\n    UIStore.listen(this.onChange);\n    PermissionStore.listen(this.onPermissionChange);\n    UserActions.fetchCurrentUser();\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onUserChange);\n    UIStore.unlisten(this.onChange);\n    PermissionStore.unlisten(this.onPermissionChange);\n  }\n\n  async onChange(state) {\n    const {\n       currentCollection\n    } = state;\n    if (this.collectionChanged(state)) {\n      this.setState({\n        sharing_allowed: false,\n        deletion_allowed: false,\n        remove_allowed: false,\n        is_top_secret: false,\n        hasSel: false,\n        currentCollection\n      });\n    }\n    else if (this.checkUIState(state)) {\n      let hasSel = false;\n      const klassArray = await elementNames(true);\n      hasSel = klassArray.find((el) => (state[el] && (state[el].checkedIds.size > 0 || state[el].checkedAll)));\n      PermissionActions.fetchPermissionStatus(state);\n      const upStateResult = await upState(state);\n      this.setState({\n        ...upStateResult, hasSel\n      });\n    }\n  }\n\n  onUserChange(state) {\n    const newId = state.currentUser ? state.currentUser.id : null;\n    const oldId = this.state.currentUser ? this.state.currentUser.id : null;\n    if (newId !== oldId) {\n      this.setState({\n        currentUser: state.currentUser,\n      });\n    }\n    if (typeof state.genericEls !== 'undefined' && state.genericEls !== null) {\n      this.setState({\n        genericEls: state.genericEls\n      });\n    }\n  }\n\n  onPermissionChange(state) {\n    this.setState({ ...state });\n  }\n\n  async initializeAsyncState() {\n    const upStateResult = await upState({});\n    this.setState({ ...upStateResult });\n  }\n\n  collectionChanged(state) {\n    const { currentCollection } = state;\n    if (typeof this.state.currentCollection === 'undefined' || this.state.currentCollection == null\n    || typeof currentCollection === 'undefined' || currentCollection == null) return false;\n\n    return this.state.currentCollection.id !== currentCollection.id ||\n      this.state.currentCollection.is_sync_to_me !== currentCollection.is_sync_to_me;\n  }\n\n  checkUIState(state) {\n    const genericNames = (this.state.genericEls && this.state.genericEls.map(el => el.name)) || [];\n    const elNames = ['sample', 'reaction', 'screen', 'wellplate', 'research_plan','cell_line'].concat(genericNames);\n    const result = elNames.find(el => (this.state[el] && state[el] && (\n      state[el].checkedIds !== this.state[el].checkedIds ||\n      state[el].checkedAll !== this.state[el].checkedAll ||\n      state[el].uncheckedIds !== this.state[el].uncheckedIds\n    )));\n    return result;\n  }\n\n  handleButtonClick(type) {\n    const modalProps = { show: true, action: '', listSharedCollections: false };\n    switch (type) {\n      case 'share':\n        if (!this.state.is_top_secret) {\n          modalProps.title = \"Sharing\";\n          modalProps.component = ManagingModalSharing;\n        } else {\n          modalProps.title = \"Sharing not allowed\";\n          modalProps.component = ManagingModalTopSecret;\n        }\n        break;\n      case 'move':\n        modalProps.title = \"Move to Collection\";\n        modalProps.component = ManagingModalCollectionActions;\n        modalProps.action = ElementActions.updateElementsCollection;\n        modalProps.listSharedCollections = true;\n        break;\n      case 'remove':\n        modalProps.title = \"Remove selected elements from this Collection?\";\n        modalProps.component = ManagingModalRemove;\n        modalProps.action = ElementActions.removeElementsCollection;\n        break;\n      case 'assign':\n        modalProps.title = \"Assign to Collection\";\n        modalProps.component = ManagingModalCollectionActions;\n        modalProps.action = ElementActions.assignElementsCollection;\n        modalProps.listSharedCollections = false;\n        break;\n      case 'delete':\n        modalProps.title = \"Delete from all Collections?\";\n        modalProps.component = ManagingModalDelete;\n        modalProps.action = ElementActions.deleteElements;\n        break;\n    };\n\n    this.props.updateModalProps(modalProps);\n  }\n\n  render() {\n    const {\n      currentCollection, sharing_allowed, deletion_allowed, remove_allowed, is_top_secret, hasSel\n    } = this.state;\n    const { is_locked, is_shared, sharer, is_sync_to_me, label } = currentCollection;\n    const isAll = is_locked && label === 'All';\n    const noSel = !hasSel\n\n    const moveDisabled = noSel || isAll;\n    const assignDisabled = noSel;\n    const removeDisabled = noSel || isAll || !deletion_allowed; //!remove_allowed\n    const deleteDisabled = noSel || !deletion_allowed;\n    const shareDisabled = noSel || !sharing_allowed;\n\n    return (\n      <div style={{ display: 'inline', float: 'left', marginRight: 10 }}>\n        <ButtonGroup>\n          <MoveOrAssignButton\n            assignDisabled={assignDisabled}\n            moveDisabled={moveDisabled}\n            onClick={this.handleButtonClick}\n            customClass={this.props.customClass}\n          />\n          <RemoveOrDeleteButton\n            removeDisabled={removeDisabled}\n            deleteDisabled={deleteDisabled}\n            onClick={this.handleButtonClick}\n            customClass={this.props.customClass}\n          />\n          {/*\n          <ShareButton\n            isDisabled={shareDisabled}\n            onClick={this.handleButtonClick}\n            customClass={this.props.customClass}\n          />\n          */}\n        </ButtonGroup>\n      </div>\n    );\n  }\n}\n\nManagingActions.propTypes = {\n  updateModalProps: PropTypes.func.isRequired,\n  customClass: PropTypes.string,\n  genericEls: PropTypes.array\n};\n\nManagingActions.defaultProps = {\n  customClass: null,\n  genericEls: []\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  SplitButton, Button, ButtonToolbar, FormControl,\n  FormGroup, ControlLabel, Modal, MenuItem\n} from 'react-bootstrap';\nimport Aviator from 'aviator';\nimport { filter } from 'lodash';\nimport { elementShowOrNew } from 'src/utilities/routesUtils';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport ClipboardActions from 'src/stores/alt/actions/ClipboardActions';\nimport SamplesFetcher from 'src/fetchers/SamplesFetcher';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\n\nconst elementList = () => {\n  const elements = [\n    { name: 'sample', label: 'Sample' },\n    { name: 'reaction', label: 'Reaction' },\n    { name: 'wellplate', label: 'Wellplate' },\n    { name: 'screen', label: 'Screen' },\n    { name: 'research_plan', label: 'Research Plan' },\n    { name: 'cell_line', label: 'Cell Line' }\n  ];\n  let genericEls = [];\n  const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n\n  if (MatrixCheck(currentUser.matrix, 'genericElement')) {\n    genericEls = UserStore.getState().genericEls || [];\n  }\n  const itemTables = [];\n\n  return { elements, genericEls, itemTables };\n};\n\nexport default class CreateButton extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      samples: [],\n      collectionId: null,\n      layout: UserStore.getState().profile?.data?.layout || {},\n      modalProps: {\n        show: false,\n        sampleCount: 0,\n        wellplateCount: 0\n      }\n    };\n    this.createBtn = this.createBtn.bind(this);\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    const layout = state.profile?.data?.layout;\n    // eslint-disable-next-line react/destructuring-assignment\n    if (typeof layout !== 'undefined' && layout !== null && layout !== this.state.layout) {\n      this.setState({ layout });\n    }\n  }\n\n  getSampleFilter() {\n    let uiState = UIStore.getState();\n    return this.filterParamsFromUIStateByElementType(uiState, \"sample\");\n  }\n\n  getReactionId() {\n    let uiState = UIStore.getState();\n    return uiState.reaction.checkedIds.first();\n  }\n\n  getCellLineId(){\n    let uiState = UIStore.getState();\n    return uiState.cell_line.checkedIds.first();\n  }\n\n  isCopySampleDisabled() {\n    let sampleFilter = this.getSampleFilter();\n    return !sampleFilter.all && sampleFilter.included_ids.size == 0;\n  }\n\n  copySample() {\n    let sampleFilter = this.getSampleFilter();\n\n    // Set limit to 1 because we are only interested in one sample\n    let params = {\n      sample: sampleFilter,\n      limit: 1\n    }\n\n    ClipboardActions.fetchSamplesByUIStateAndLimit(params, 'copy_sample');\n  }\n\n  isCopyReactionDisabled() {\n    let reactionId = this.getReactionId();\n    return !reactionId;\n  }\n\n  copyReaction() {\n    let reactionId = this.getReactionId();\n    ElementActions.copyReactionFromId(reactionId);\n  }\n\n  isCopyCellLineDisabled() {\n    let cellLineId = this.getCellLineId();\n    return !cellLineId;\n  }\n\n  copyCellLine() {\n    let uiState = UIStore.getState();\n    let cellLineId = this.getCellLineId();\n    ElementActions.copyCellLineFromId(parseInt(cellLineId),uiState.currentCollection.id);\n  }\n\n  createWellplateFromSamples() {\n    let uiState = UIStore.getState();\n    let sampleFilter = this.filterParamsFromUIStateByElementType(uiState, \"sample\");\n\n    let params = {\n      sample: sampleFilter\n    }\n\n    SamplesFetcher.fetchSamplesByUIStateAndLimit(params).then((result) => {\n      const samples = result;\n      const sampleCount = samples.length;\n      if (sampleCount <= 96) {\n        ClipboardActions.fetchSamplesByUIStateAndLimit(params, 'template_wellplate');\n      } else {\n        const wellplateCount = Math.ceil(sampleCount / 96);\n\n        this.setState({\n          samples: samples,\n          collectionId: sampleFilter.collection_id,\n          modalProps: {\n            show: true,\n            sampleCount: sampleCount,\n            wellplateCount: wellplateCount\n          }\n        });\n      }\n    });\n  }\n\n  handleModalHide() {\n    this.setState({\n      modalProps: {\n        show: false\n      }\n    });\n    // https://github.com/react-bootstrap/react-bootstrap/issues/1137\n    document.body.className = document.body.className.replace('modal-open', '');\n  }\n\n  bulkCreateWellplates() {\n    const wellplateCount = this.wellplateInput.value;\n    const { collectionId, samples } = this.state;\n\n    ElementActions.bulkCreateWellplatesFromSamples({\n      collection_id: collectionId,\n      samples: samples,\n      wellplateCount: wellplateCount\n    });\n    this.handleModalHide();\n  }\n\n  createWellplateModal() {\n    const { modalProps } = this.state;\n\n    return (\n      <Modal animation={false} show={modalProps.show} onHide={() => this.handleModalHide()}>\n        <Modal.Header closeButton>\n          <Modal.Title>Create Wellplates from Samples</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          You have selected {modalProps.sampleCount} samples. Please fill in the number of wellplates you would like to create.\n          <p />\n          <FormGroup controlId=\"wellplateInput\">\n            <ControlLabel>Number of wellplates</ControlLabel>\n            <FormControl\n              type=\"text\"\n              inputRef={(input) => { this.wellplateInput = input; }}\n              defaultValue={modalProps.wellplateCount || ''}\n            />\n          </FormGroup>\n\n          <ButtonToolbar>\n            <Button bsStyle=\"primary\" onClick={() => this.handleModalHide()}>Cancel</Button>\n            <Button bsStyle=\"warning\" onClick={() => this.bulkCreateWellplates()}>Submit</Button>\n          </ButtonToolbar>\n        </Modal.Body>\n      </Modal>\n    )\n  }\n\n\n\n  createScreenFromWellplates() {\n    let uiState = UIStore.getState();\n    let wellplateFilter = this.filterParamsFromUIStateByElementType(uiState, \"wellplate\");\n    let params = {\n      wellplate: wellplateFilter\n    }\n    ClipboardActions.fetchWellplatesByUIState(params, 'template_screen');\n  }\n\n  filterParamsFromUIStateByElementType(uiState, elementType) {\n    let collectionId = uiState.currentCollection && uiState.currentCollection.id;\n\n    return {\n      all: uiState[elementType].checkedAll,\n      included_ids: uiState[elementType].checkedIds,\n      excluded_ids: uiState[elementType].uncheckedIds,\n      collection_id: collectionId\n    }\n  }\n\n  createElementOfType(type) {\n    const { currentCollection, isSync } = UIStore.getState();\n    const uri = isSync\n      ? `/scollection/${currentCollection.id}/${type}/new`\n      : `/collection/${currentCollection.id}/${type}/new`;\n    Aviator.navigate(uri, { silent: true });\n    const e = { type, params: { collectionID: currentCollection.id } };\n    e.params[`${type}ID`] = 'new'\n    const genericEls = (UserStore.getState() && UserStore.getState().genericEls) || [];\n    if (genericEls.find(el => el.name == type)) {\n      e.klassType = 'GenericEl';\n    }\n    elementShowOrNew(e);\n  }\n\n  createBtn(type) {\n    let iconClass = `icon-${type}`;\n    const genericEls = UserStore.getState().genericEls || [];\n    const constEls = ['sample', 'reaction', 'screen', 'wellplate', 'research_plan'];\n    if (!constEls.includes(type) && typeof genericEls !== 'undefined' && genericEls !== null && genericEls.length > 0) {\n      const genericEl = (genericEls && genericEls.find(el => el.name == type)) || {};\n      iconClass = `${genericEl.icon_name}`;\n    }\n    return (\n      <div>\n        <i className={`${iconClass}`}></i> &nbsp; <i className=\"fa fa-plus\"></i>\n      </div>\n    )\n  }\n\n  noWellplateSelected() {\n    const { wellplate } = UIStore.getState();\n    return wellplate.checkedIds.size == 0 && wellplate.checkedAll == false;\n  }\n\n  render() {\n    const { isDisabled, customClass } = this.props;\n    const { layout } = this.state;\n    const type = UserStore.getState().currentType;\n    const { elements, genericEls, itemTables } = elementList();\n    const sortedLayout = filter(Object.entries(layout), (o) => o[1] && o[1] > 0).sort((a, b) => a[1] - b[1]);\n\n    sortedLayout?.forEach(([sl]) => {\n      const el = elements.concat(genericEls).find((ael) => ael.name === sl);\n      if (el) itemTables.push(<MenuItem id={`create-${el.name}-button`} key={el.name} onSelect={() => this.createElementOfType(`${el.name}`)}>Create {el.label}</MenuItem>);\n    });\n\n    return (\n\n        <SplitButton\n          id='create-split-button'\n          bsStyle={customClass ? null : 'primary'}\n          className={customClass}\n          title={this.createBtn(type)}\n          disabled={isDisabled}\n          onClick={() => this.createElementOfType(type)}\n        >\n          {/* {this.createWellplateModal()} */}\n          {itemTables}\n          {/* <MenuItem divider />\n          <MenuItem onSelect={() => this.createWellplateFromSamples()}>Create Wellplate from Samples</MenuItem>\n          <MenuItem onSelect={() => this.createScreenFromWellplates()}>Create Screen from Wellplates</MenuItem> */}\n          <MenuItem divider />\n          <MenuItem onSelect={() => this.copySample()} disabled={this.isCopySampleDisabled()}>Copy Sample</MenuItem>\n          <MenuItem onSelect={() => this.copyReaction()} disabled={this.isCopyReactionDisabled()}>Copy Reaction</MenuItem>\n          <MenuItem onSelect={() => this.copyCellLine()} disabled={this.isCopyCellLineDisabled()}>Copy Cell line</MenuItem>\n        </SplitButton>\n    )\n  }\n}\n\nCreateButton.propTypes = {\n  customClass: PropTypes.string,\n};\n\nCreateButton.defaultProps = {\n  customClass: null,\n};\n\nexport { elementList };\n","/* eslint-disable class-methods-use-this */\nimport React from 'react';\nimport { DropdownButton, MenuItem } from 'react-bootstrap';\nimport { filter } from 'lodash';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\n\nexport default class SplitElementBtn extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      layout: UserStore.getState().profile?.data?.layout || {},\n    };\n\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    const layout = state.profile?.data?.layout;\n    // eslint-disable-next-line react/destructuring-assignment\n    if (typeof layout !== 'undefined' && layout !== null && layout !== this.state.layout) {\n      this.setState({ layout });\n    }\n  }\n\n  splitSelectionAsSubsamples() {\n    ElementActions.splitAsSubsamples(UIStore.getState());\n  }\n\n  splitElements(name) {\n    ElementActions.splitElements(UIStore.getState(), name);\n  }\n\n  noSelected(name) {\n    const state = UIStore.getState() || {};\n    return state[name]?.checkedIds?.size === 0 && state[name]?.checkedAll === false;\n  }\n\n  isAllCollection() {\n    const { currentCollection } = UIStore.getState();\n    return currentCollection && currentCollection.label === 'All';\n  }\n\n  splitSelectionAsSubwellplates() {\n    ElementActions.splitAsSubwellplates(UIStore.getState());\n  }\n\n  render() {\n    const { layout } = this.state;\n    let genericEls = [];\n    const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n    if (MatrixCheck(currentUser.matrix, 'genericElement')) {\n      genericEls = UserStore.getState().genericEls || [];\n    }\n    const itemTables = [];\n    const sortedLayout = filter(Object.entries(layout), (o) => o[1] && o[1] > 0).sort((a, b) => a[1] - b[1]);\n\n    sortedLayout?.forEach(([k]) => {\n      const el = genericEls.find((ael) => ael.name === k);\n      // eslint-disable-next-line max-len\n      if (el) itemTables.push(<MenuItem id={`split-${el.name}-button`} key={el.name} onSelect={() => this.splitElements(`${el.name}`)} disabled={this.noSelected(`${el.name}`) || this.isAllCollection()}>Split {el.label}</MenuItem>);\n    });\n\n    return (\n      <DropdownButton bsStyle=\"primary\" title={<i className=\"fa fa-code-fork\" />}>\n        <MenuItem\n          onSelect={() => this.splitSelectionAsSubsamples()}\n          disabled={this.noSelected('sample') || this.isAllCollection()}\n        >\n          Split Sample\n        </MenuItem>\n        <MenuItem\n          onSelect={() => this.splitSelectionAsSubwellplates()}\n          disabled={this.noSelected('wellplate') || this.isAllCollection()}\n        >\n          Split Wellplate\n        </MenuItem>\n        <MenuItem\n          onSelect={() => ElementActions.splitAsSubCellLines(UIStore.getState())}\n          disabled={this.noSelected('cell_line') || this.isAllCollection()}\n        >\n          Split Cell line\n        </MenuItem>\n        {itemTables}\n      </DropdownButton>\n    );\n  }\n}\n","import React from 'react';\nimport _ from 'lodash';\nimport PropTypes from 'prop-types';\nimport { Dropdown, MenuItem } from 'react-bootstrap';\n\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\n\nconst showReportContainer = () => {\n  ElementActions.showReportContainer();\n};\n\nconst showFormatContainer = () => {\n  ElementActions.showFormatContainer();\n};\n\nconst showPredictionContainer = () => {\n  ElementActions.showPredictionContainer();\n};\n\nconst showComputedPropsGraph = () => {\n  ElementActions.showComputedPropsGraph();\n};\n\nconst showComputedPropsTasks = () => {\n  ElementActions.showComputedPropsTasks();\n};\n\nconst ReportUtilButton = ({ customClass, isDisabled=false  }) => {\n  const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n  const enableComputedProps = MatrixCheck(currentUser.matrix, 'computedProp');\n  const enableReactionPredict = MatrixCheck(currentUser.matrix, 'reactionPrediction');\n\n  let graph = <span />;\n  let task = <span />;\n  if (enableComputedProps) {\n    graph = (\n      <MenuItem onSelect={showComputedPropsGraph} title=\"Graph\">\n        Computed Props Graph\n      </MenuItem>\n    );\n    task = (\n      <MenuItem onSelect={showComputedPropsTasks} title=\"Graph\">\n        Computed Props Tasks\n      </MenuItem>\n    );\n  }\n\n  let predDiv = <span />;\n  let divider = <span />;\n  if (enableReactionPredict) {\n    divider = <MenuItem divider />;\n    predDiv = (\n      <MenuItem onSelect={showPredictionContainer} title=\"Predict\">\n        Synthesis Prediction\n      </MenuItem>\n    );\n  }\n\n  return (\n    <Dropdown id=\"format-dropdown\">\n      <Dropdown.Toggle className={customClass || 'btn-success'}>\n        <i className=\"fa fa-file-text-o\" style={{ marginRight: 4 }} />\n        <i className=\"fa fa-pencil\" style={{ marginRight: 4 }} />\n        <i className=\"fa fa-percent\" />\n      </Dropdown.Toggle>\n      <Dropdown.Menu>\n        <MenuItem onSelect={showReportContainer} title=\"Report\">\n          Report\n        </MenuItem>\n        <MenuItem divider />\n        <MenuItem onSelect={showFormatContainer} disabled={isDisabled} title=\"Analyses Formatting\">\n          Format Analyses\n        </MenuItem>\n        <MenuItem onSelect={ElementActions.showLiteratureDetail} title=\"Reference Manager\">\n          Reference Manager\n        </MenuItem>\n        {/* {graph}\n        {task} */}\n        {divider}\n        {predDiv}\n      </Dropdown.Menu>\n    </Dropdown>\n  );\n};\n\nReportUtilButton.propTypes = {\n  customClass: PropTypes.string,\n  isDisabled: PropTypes.bool,\n};\n\nReportUtilButton.defaultProps = {\n  customClass: null,\n  isDisabled: false,\n};\n\nexport default ReportUtilButton;\n","import React from 'react';\nimport { Button, ButtonToolbar } from 'react-bootstrap';\nimport Dropzone from 'react-dropzone';\nimport UIStore from 'src/stores/alt/stores/UIStore';\n\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nexport default class ModalImport extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      file: null\n    };\n  }\n\n  handleClick() {\n    const { onHide, action } = this.props;\n    const { file } = this.state;\n    const uiState = UIStore.getState();\n    const importSampleAs = uiState.modalParams.title === 'Import Chemicals from File' ? 'chemical' : 'sample';\n    const params = {\n      file,\n      currentCollectionId: uiState.currentCollection.id,\n      type: importSampleAs\n    };\n    action(params);\n    onHide();\n\n    const notification = {\n      title: 'Uploading',\n      message: 'The file is being processed. Please wait...',\n      level: 'warning',\n      dismissible: false,\n      uid: 'import_samples_upload',\n      position: 'bl'\n    };\n\n    NotificationActions.add(notification);\n  }\n\n  handleFileDrop(attachmentFile) {\n    this.setState({ file: attachmentFile[0] });\n  }\n\n  handleAttachmentRemove() {\n    this.setState({ file: null });\n  }\n\n  dropzoneOrfilePreview() {\n    const { file } = this.state;\n    if (file) {\n      return (\n        <div>\n          {file.name}\n          <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.handleAttachmentRemove()} className=\"pull-right\">\n            <i className=\"fa fa-trash-o\"></i>\n          </Button>\n        </div>\n      );\n    } else {\n      return (\n        <Dropzone\n          onDrop={attachment_file => this.handleFileDrop(attachment_file)}\n          style={{ height: 50, width: '100%', border: '3px dashed lightgray' }}\n        >\n          <div style={{ textAlign: 'center', paddingTop: 12, color: 'gray' }}>\n            Drop File, or Click to Select.\n          </div>\n        </Dropzone>\n      );\n    }\n  }\n\n  isDisabled() {\n    const { file } = this.state;\n    return file == null;\n  }\n\n  render() {\n    const { onHide } = this.props;\n    return (\n      <div>\n        {this.dropzoneOrfilePreview()}\n        &nbsp;\n        <ButtonToolbar>\n          <Button bsStyle=\"primary\" onClick={() => onHide()}>Cancel</Button>\n          <Button bsStyle=\"warning\" onClick={() => this.handleClick()} disabled={this.isDisabled()}>Import</Button>\n        </ButtonToolbar>\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport {\n  Button, ButtonToolbar, DropdownButton, MenuItem\n} from 'react-bootstrap';\nimport CheckBoxs from 'src/components/common/CheckBoxs';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport ReportsFetcher from 'src/fetchers/ReportsFetcher';\n\nconst filterUIState = (uiState) => {\n  const {\n    currentCollection, sample, reaction, wellplate, isSync\n  } = uiState;\n  return {\n    sample: {\n      checkedIds: sample.checkedIds.toArray(),\n      uncheckedIds: sample.uncheckedIds.toArray(),\n      checkedAll: sample.checkedAll,\n    },\n    reaction: {\n      checkedIds: reaction.checkedIds.toArray(),\n      uncheckedIds: reaction.uncheckedIds.toArray(),\n      checkedAll: reaction.checkedAll,\n    },\n    wellplate: {\n      checkedIds: wellplate.checkedIds.toArray(),\n      uncheckedIds: wellplate.uncheckedIds.toArray(),\n      checkedAll: wellplate.checkedAll,\n    },\n    currentCollection: currentCollection.id,\n    isSync,\n  };\n};\n\nconst exportSelections = (uiState, userState, columns, e) => {\n  ReportsFetcher.createDownloadFile({ exportType: e, uiState: filterUIState(uiState), columns });\n};\n\nexport default class ModalExport extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      columns: {\n        sample: [\n          { value: 'cas', text: 'cas', checked: true },\n          { value: ['sample_svg_file', 'molecule_svg_file'], text: 'image', checked: false },\n          { value: 'name', text: 'name', checked: true },\n          { value: 'molecule_name', text: 'molecule name', checked: false },\n          { value: 'external_label', text: 'external label', checked: true },\n          { value: 'short_label', text: 'short label', checked: false },\n          { value: 'description', text: 'description', checked: false },\n          { value: ['real_amount_value', 'real_amount_unit'], text: 'real amount', checked: true },\n          { value: ['target_amount_value', 'target_amount_unit'], text: 'target amount', checked: false },\n          { value: ['molarity_value', 'molarity_unit'], text: 'molarity', checked: false },\n          { value: 'density', text: 'density', checked: false },\n          { value: 'molfile', text: 'molfile', checked: false },\n          //  {value: \"purity\", text: \"purity\", checked: false},\n          { value: \"solvent\", text: \"solvent\", checked: false },\n          { value: \"location\", text: \"location\", checked: false },\n          { value: \"is_top_secret\", text: \"is top secret?\", checked: false },\n          { value: \"dry_solvent\", text: \"dry solvent\", checked: false },\n          //  {value: \"ancestry\", text: \"ancestry\", checked: false},\n          { value: 'imported_readout', text: 'imported readout', checked: false },\n          //  {value: \"identifier\", text: \"identifier\", checked: false},\n          { value: 'melting_point', text: 'melting point', checked: false },\n          { value: 'boiling_point', text: 'boiling point', checked: false },\n          { value: 'created_at', text: 'created at', checked: true },\n          { value: 'updated_at', text: 'updated at', checked: false },\n          { value: 'user_labels', text: 'user labels', checked: false },\n          { value: 'literature', text: 'literature', checked: false },\n        ],\n        molecule: [\n          { value: 'cano_smiles', text: 'canonical smiles', checked: true },\n          { value: 'inchistring', text: 'InChIstring', checked: false },\n          { value: 'inchikey', text: 'InChIkey', checked: false },\n          { value: 'sum_formular', text: 'sum formula', checked: false },\n          { value: 'molecular_weight', text: 'molecular weight', checked: false },\n        ],\n        reaction: [\n          { value: 'name', text: 'reaction name', checked: true },\n          { value: 'short_label', text: 'r short label', checked: true },\n          { value: 'reference', text: 'reference', checked: false },\n          { value: 'equivalent', text: 'equivalent', checked: false },\n        ],\n        wellplate: [\n          { value: 'name', text: 'wellplate name', checked: false },\n          { value: 'position_x', text: 'well x', checked: false },\n          { value: 'position_y', text: 'well y', checked: false },\n        ],\n        analyses: [\n          { value: 'name', text: 'analysis name', checked: false },\n          { value: 'description', text: 'analysis description', checked: false },\n          { value: 'kind', text: 'analysis type', checked: false },\n          { value: 'content', text: 'analysis content', checked: false },\n          { value: 'status', text: 'analysis status', checked: false },\n          { value: 'uuid', text: 'uuid', checked: false },\n          { value: 'dataset name', text: 'dataset name', checked: false },\n          { value: 'dataset description', text: 'dataset description', checked: false },\n          { value: 'instrument', text: 'instrument', checked: false },\n          { value: 'filename', text: 'file name', checked: false },\n          { value: 'checksum', text: 'file checksum', checked: false },\n        ],\n        chemicals: [\n          { value: 'status', text: 'status', checked: false },\n          { value: 'vendor', text: 'vendor', checked: false },\n          { value: 'order_number', text: 'order number', checked: false },\n          { value: 'amount', text: 'amount', checked: false },\n          { value: 'price', text: 'price', checked: false },\n          { value: 'person', text: 'person', checked: false },\n          { value: 'required_date', text: 'required date', checked: false },\n          { value: 'ordered_date', text: 'ordered date', checked: false },\n          { value: 'required_by', text: 'required by', checked: false },\n          { value: ['safety_sheet_link_merck', 'safety_sheet_link_thermofischer'], text: 'safety sheet link', checked: false },\n          { value: ['product_link_merck', 'product_link_thermofischer'], text: 'product link', checked: false },\n          { value: 'pictograms', text: 'pictograms', checked: false },\n          { value: 'h_statements', text: 'h statements', checked: false },\n          { value: 'p_statements', text: 'p statements', checked: false },\n          { value: 'host_building', text: 'host building', checked: false },\n          { value: 'host_room', text: 'host room', checked: false },\n          { value: 'host_cabinet', text: 'host cabinet', checked: false },\n          { value: 'host_group', text: 'host group', checked: false },\n          { value: 'owner', text: 'owner', checked: false },\n          { value: 'current_building', text: 'current building', checked: false },\n          { value: 'current_room', text: 'current room', checked: false },\n          { value: 'current_cabinet', text: 'current cabinet', checked: false },\n          { value: 'current_group', text: 'current group', checked: false },\n          { value: 'borrowed_by', text: 'borrowed by', checked: false },\n          { value: 'disposal_info', text: 'disposal info', checked: false },\n          { value: 'important_notes', text: 'important notes', checked: false },\n        ],\n      },\n      checkedAllColumns: {\n        sample: true,\n        molecule: true,\n        wellplate: false,\n        reaction: false,\n        analysis: false,\n      },\n    };\n    this.handleClick = this.handleClick.bind(this);\n  }\n\n  toggleColumns(text, checked, section) {\n    this.setState((prevState) => {\n      const { columns } = prevState;\n      columns[section] = columns[section].map((col) => {\n        if (col.text === text) {\n          return Object.assign({}, col, { checked: !checked })\n        }\n        return col\n      })\n      return { ...prevState, columns }\n    })\n  }\n\n  toggleColumnsSample(text, checked) {\n    this.toggleColumns(text, checked, 'sample');\n  }\n\n  toggleColumnsReaction(text, checked) {\n    this.toggleColumns(text, checked, 'reaction');\n  }\n\n  toggleColumnsMolecule(text, checked) {\n    this.toggleColumns(text, checked, 'molecule');\n  }\n\n  toggleColumnsWellplate(text, checked) {\n    this.toggleColumns(text, checked, 'wellplate');\n  }\n\n  toggleColumnsAnalyses(text, checked) {\n    this.toggleColumns(text, checked, 'analyses');\n  }\n\n  toggleColumnsChemicals(text, checked) {\n    this.toggleColumns(text, checked, 'chemicals');\n  }\n\n  toggleColumnsAll(section) {\n    this.setState((prevState) => {\n      const { columns, checkedAllColumns } = prevState;\n      checkedAllColumns[section] = !checkedAllColumns[section]\n      columns[section] = columns[section].map(\n        col => Object.assign({}, col, { checked: checkedAllColumns[section] })\n      );\n      return { columns, checkedAllColumns };\n    })\n  }\n\n  toggleColumnsAllSample(text, checked) {\n    this.toggleColumnsAll('sample');\n  }\n\n  toggleColumnsAllReaction(text, checked) {\n    this.toggleColumnsAll('reaction');\n  }\n\n  toggleColumnsAllMolecule(text, checked) {\n    this.toggleColumnsAll('molecule');\n  }\n\n  toggleColumnsAllWellplate(text, checked) {\n    this.toggleColumnsAll('wellplate');\n  }\n\n  toggleColumnsAllAnalyses(text, checked) {\n    this.toggleColumnsAll('analyses');\n  }\n\n  toggleColumnsAllChemicals(text, checked) {\n    this.toggleColumnsAll('chemicals');\n  }\n\n  buttonBar() {\n    const { onHide } = this.props;\n    const chemicalColumns = this.filteredColumns();\n    const sdfChemicalExport = chemicalColumns.chemicals.length !== 0;\n    return (\n      <ButtonToolbar>\n        <div className=\"pull-right\">\n          <ButtonToolbar>\n            <Button bsStyle=\"primary\" onClick={onHide}>Cancel</Button>\n            <DropdownButton\n              dropup\n              bsStyle=\"warning\"\n              id=\"md-export-dropdown\"\n              title=\"XLSX/SD Export\"\n              onSelect={this.handleClick}\n            >\n              <MenuItem eventKey=\"1\">XLSX Export</MenuItem>\n              <MenuItem eventKey=\"2\" disabled={sdfChemicalExport}>SDF Export</MenuItem>\n            </DropdownButton>\n          </ButtonToolbar>\n        </div>\n      </ButtonToolbar>\n    );\n  }\n\n  handleClick(e) {\n    const uiState = UIStore.getState();\n    const userState = UserStore.getState();\n    const { onHide } = this.props;\n    onHide();\n    exportSelections(uiState, userState, this.filteredColumns(), e);\n  }\n\n  filteredColumns() {\n    const { columns } = this.state;\n    const tables = Object.keys(columns);\n    return tables.reduce((filteredtables, table) => {\n      filteredtables[table] = (columns[table] || []).reduce(\n        (cols, column) => (column && column.checked ? cols.concat(column.value) : cols),\n        []\n      );\n      return filteredtables;\n    }, {});\n  }\n\n  chainedItems(items) {\n    return items.map(item => {\n      return !item.checked\n        ? item.value\n        : null\n    }).filter(r => r != null);\n  }\n\n  render() {\n    const uiState = UIStore.getState();\n    return (\n      <div>\n        <div className='export-container'>\n          <h4>Sample properties</h4>\n          <CheckBoxs items={this.state.columns.sample}\n            toggleCheckbox={this.toggleColumnsSample.bind(this)}\n            toggleCheckAll={this.toggleColumnsAllSample.bind(this)}\n            checkedAll={this.state.checkedAllColumns.sample}\n          />\n          <h4>Molecule properties</h4>\n          <CheckBoxs items={this.state.columns.molecule}\n            toggleCheckbox={this.toggleColumnsMolecule.bind(this)}\n            toggleCheckAll={this.toggleColumnsAllMolecule.bind(this)}\n            checkedAll={this.state.checkedAllColumns.molecule}\n          />\n          <h4>Reaction properties</h4>\n          <CheckBoxs items={this.state.columns.reaction}\n            toggleCheckbox={this.toggleColumnsReaction.bind(this)}\n            toggleCheckAll={this.toggleColumnsAllReaction.bind(this)}\n            checkedAll={this.state.checkedAllColumns.reaction}\n          />\n          <h4>Wellplate and well properties</h4>\n          <CheckBoxs items={this.state.columns.wellplate}\n            toggleCheckbox={this.toggleColumnsWellplate.bind(this)}\n            toggleCheckAll={this.toggleColumnsAllWellplate.bind(this)}\n            checkedAll={this.state.checkedAllColumns.wellplate}\n          />\n          <h4>Analyses</h4>\n          <CheckBoxs items={this.state.columns.analyses}\n            toggleCheckbox={this.toggleColumnsAnalyses.bind(this)}\n            toggleCheckAll={this.toggleColumnsAllAnalyses.bind(this)}\n            checkedAll={this.state.checkedAllColumns.analyses}\n          />\n          <h4>Chemicals</h4>\n          <CheckBoxs items={this.state.columns.chemicals}\n            toggleCheckbox={this.toggleColumnsChemicals.bind(this)}\n            toggleCheckAll={this.toggleColumnsAllChemicals.bind(this)}\n            checkedAll={this.state.checkedAllColumns.chemicals}\n          />\n        </div>\n        {this.buttonBar()}\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport { Button, ButtonToolbar, Radio, FormGroup } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport ReportsFetcher from 'src/fetchers/ReportsFetcher';\n\nexport default class ModalReactionExport extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      value: 3\n    }\n    this.handleClick = this.handleClick.bind(this)\n  }\n\n  buttonBar() {\n    const { onHide } = this.props;\n    return (\n      <ButtonToolbar>\n        <div className=\"pull-right\">\n          <ButtonToolbar>\n            <Button bsStyle=\"primary\" onClick={onHide}>Cancel</Button>\n            <Button bsStyle=\"warning\" id=\"md-export-dropdown\"\n              title=\"Reaction Smiles CSV Export\" onClick={this.handleClick}>\n              Smiles Export\n            </Button>\n          </ButtonToolbar>\n        </div>\n      </ButtonToolbar>\n\n    )\n  }\n\n  handleClick() {\n    const uiState = UIStore.getState();\n    const userState = UserStore.getState();\n    const { onHide } = this.props;\n    onHide();\n    exportSelections(uiState, userState, this.state.value);\n  }\n\n  render() {\n    const onChange = (v) => this.setState(\n      previousState => { return { ...previousState, value: v } }\n    )\n    return (\n      <div>\n        <div className='export-container'>\n          <FormGroup name=\"options\" value={this.state.value} >\n            <Radio onChange={() => onChange(0)} checked={this.state.value == 0} value={0}>starting_materials &gt;&gt; products</Radio>\n            <Radio onChange={() => onChange(1)} checked={this.state.value == 1} value={1}>starting_materials.reactants &gt;&gt; products</Radio>\n            <Radio onChange={() => onChange(2)} checked={this.state.value == 2} value={2}>starting_materials.reactants.solvents &gt;&gt; products</Radio>\n            <Radio onChange={() => onChange(3)} checked={this.state.value == 3} value={3}>starting_materials &gt; reactants &gt; products</Radio>\n            <Radio onChange={() => onChange(4)} checked={this.state.value == 4} value={4}>starting_materials &gt; reactants.solvents &gt; products</Radio>\n            <Radio onChange={() => onChange(5)} checked={this.state.value == 5} value={5}>starting_materials &gt; reactants &gt; solvents &gt; products</Radio>\n            <Radio onChange={() => onChange(6)} checked={this.state.value == 6} value={6}>starting_materials , reactants , solvents , products</Radio>\n          </FormGroup>\n        </div>\n        {this.buttonBar()}\n      </div>\n    )\n  }\n}\n\nModalReactionExport.propTypes = {\n  onHide: PropTypes.func,\n}\n\nconst exportSelections = (uiState, userState, e) => {\n  ReportsFetcher.createDownloadFile({\n    exportType: e,\n    uiState: filterUIState(uiState),\n    columns: {}\n  }, '', 'export_reactions_from_selections');\n}\n\nconst filterUIState = (uiState) => {\n  const { currentCollection, sample, reaction, wellplate, isSync } = uiState;\n  return {\n    sample: {\n      checkedIds: sample.checkedIds.toArray(),\n      uncheckedIds: sample.uncheckedIds.toArray(),\n      checkedAll: sample.checkedAll,\n    },\n    reaction: {\n      checkedIds: reaction.checkedIds.toArray(),\n      uncheckedIds: reaction.uncheckedIds.toArray(),\n      checkedAll: reaction.checkedAll,\n    },\n    wellplate: {\n      checkedIds: wellplate.checkedIds.toArray(),\n      uncheckedIds: wellplate.uncheckedIds.toArray(),\n      checkedAll: wellplate.checkedAll,\n    },\n    currentCollection: currentCollection.id,\n    isSync: isSync,\n  }\n}\n","import React from 'react';\nimport { Button, ButtonToolbar } from 'react-bootstrap';\nimport CollectionStore from 'src/stores/alt/stores/CollectionStore';\n\nexport default class ModalExportCollection extends React.Component {\n  constructor(props) {\n    super(props);\n\n    let collecState = CollectionStore.getState()\n\n    let checkboxes = {}\n    // this.gatherCheckboxes(collecState.unsharedRoots, checkboxes)\n    // this.gatherCheckboxes(collecState.sharedRoots, checkboxes)\n    // this.gatherCheckboxes(collecState.remoteRoots, checkboxes)\n    collecState.lockedRoots = collecState.lockedRoots.filter(c => c.label !== 'All');\n\n    let embargoRoots = [];\n    // eslint-disable-next-line no-unused-expressions\n    collecState.syncInRoots && collecState.syncInRoots.forEach((root) => {\n      const cols = root.children.filter(c => c.label == 'My Published Elements' || c.label == 'Embargoed Publications');\n      embargoRoots = embargoRoots.concat(cols);\n    });\n\n    collecState.syncInRoots = embargoRoots;\n    this.gatherCheckboxes(collecState.lockedRoots, checkboxes);\n    this.gatherCheckboxes(collecState.syncInRoots, checkboxes, true);\n\n    this.state = {\n      processing: false,\n      // unsharedRoots: collecState.unsharedRoots,\n      // sharedRoots: collecState.sharedRoots,\n      // remoteRoots: collecState.remoteRoots,\n      lockedRoots: collecState.lockedRoots,\n      syncInRoots: collecState.syncInRoots,\n      checkboxes: checkboxes\n    }\n\n    this.handleCheckAll = this.handleCheckAll.bind(this)\n    this.handleCheckboxChange = this.handleCheckboxChange.bind(this)\n    this.handleClick = this.handleClick.bind(this)\n  }\n\n  gatherCheckboxes(roots, checkboxes, isSync = false) {\n    if (Array.isArray(roots) && roots.length > 0) {\n      roots.map((root, index) => {\n        const rootId = isSync === true ? `S_${root.id}` : root.id;\n        checkboxes[rootId] = false;\n        this.gatherCheckboxes(root.children, checkboxes)\n      })\n    }\n  }\n\n  hasChecked() {\n    let checkboxes = this.state.checkboxes\n    if (Object.keys(checkboxes).every(key => checkboxes[key] === false)) {\n      // all checkboxes are unchecked\n      return false\n    } else {\n      return true\n    }\n  }\n\n  isChecked(id) {\n    return this.state.checkboxes[id]\n  }\n\n  handleCheckAll() {\n    const { checkboxes } = this.state;\n    const hasChecked = this.hasChecked();\n\n    Object.keys(checkboxes).forEach((key) => { checkboxes[key] = !hasChecked; });\n\n    this.setState({ checkboxes });\n  }\n\n  handleCheckboxChange(e) {\n    const { checkboxes } = this.state;\n    checkboxes[e.target.value] = e.target.checked;\n    this.setState({ checkboxes });\n  }\n\n  handleClick() {\n    const { onHide, action } = this.props;\n    this.setState({ processing: true });\n\n    const collections = [];\n    const sync_collections = [];\n    Object.keys(this.state.checkboxes).map((key) => {\n      // eslint-disable-next-line no-restricted-globals\n      if (!isNaN(key) && this.state.checkboxes[key]) { collections.push(key); }\n      if (isNaN(key) && key.startsWith('S_') && this.state.checkboxes[key]) { sync_collections.push(key.substr(2)); }\n    });\n\n    const params = {\n      collections,\n      sync_collections,\n      isSync: false,\n      format: 'zip',\n      nested: false\n    };\n\n    action(params);\n\n    setTimeout(() => {\n      this.setState({ processing: false });\n      onHide();\n    }, 1000);\n  }\n\n  renderCheckAll() {\n    return (\n      <div>\n        <input type=\"checkbox\" id=\"export-collection-check-all\"\n          checked={this.hasChecked()} onChange={this.handleCheckAll} className=\"common-checkbox\" />\n        <label className=\"g-marginLeft--10\" htmlFor=\"export-collection-check-all\">\n          {this.hasChecked() ? \"Deselect all\" : \"Select all\"}\n        </label>\n      </div>\n    )\n  }\n\n  renderCollections(label, key) {\n    let roots = this.state[key]\n\n    if (Array.isArray(roots) && roots.length > 0) {\n      return (\n        <div>\n          <h4>{label}</h4>\n          {this.renderSubtrees(roots)}\n        </div>\n      )\n    }\n  }\n\n  renderEmbargoCollections(label, key) {\n    let roots = this.state[key];\n\n    if (Array.isArray(roots) && roots.length > 0) {\n      return (\n        <div>\n          <h4>{label}</h4>\n          {this.renderUserSubtrees(roots, true)}\n        </div>\n      )\n    }\n  }\n\n  renderSharedCollections(label, key) {\n    let roots = this.state[key]\n\n    if (Array.isArray(roots) && roots.length > 0) {\n      return (\n        <div>\n          <h4>{label}</h4>\n          {this.renderUserSubtrees(roots)}\n        </div>\n      )\n    }\n  }\n\n  renderUserSubtrees(roots, isSync= false) {\n    if (Array.isArray(roots) && roots.length > 0) {\n\n      let nodes = roots.map((root, index) => {\n\n        let label\n        if (root.shared_by) {\n          label = 'by ' + root.shared_by.initials\n        } else if (root.shared_to) {\n          label = 'with ' + root.shared_to.initials\n        } else {\n          label = root.label\n        }\n\n        return (\n          <li key={index}>\n            <h6>{label}</h6>\n            {this.renderSubtrees(root.children, isSync)}\n          </li>\n        )\n      })\n\n      return (\n        <ul className=\"list-unstyled\">\n          {nodes}\n        </ul>\n      )\n    }\n  }\n\n  renderSubtrees(roots, isSync=false) {\n    if (Array.isArray(roots) && roots.length > 0) {\n      let nodes = roots.map((root, index) => {\n        const rootId = isSync==true ? `S_${root.id}` : root.id;\n        return (\n          <li key={index}>\n            <input className=\"common-checkbox\" type=\"checkbox\"\n                   id={\"export-collection-\" + root.id}\n                   value={rootId}\n                   onChange={this.handleCheckboxChange}\n                   checked={this.isChecked(rootId)} />\n            <label className=\"g-marginLeft--10\" htmlFor={\"export-collection-\" + root.id}>\n              {root.label}\n            </label>\n\n            {this.renderSubtrees(root.children)}\n          </li>\n        )\n      })\n\n      return (\n        <ul className=\"list-unstyled\">\n          {nodes}\n        </ul>\n      )\n    }\n  }\n\n  renderButtonBar() {\n    const { onHide } = this.props;\n    const { processing } = this.state;\n    const bStyle = processing === true ? 'danger' : 'warning';\n    const bClass = processing === true ? 'fa fa-spinner fa-pulse fa-fw' : 'fa fa-file-text-o';\n    const bTitle = processing === true ? 'Exporting' : 'Export ZIP';\n    return (\n      <ButtonToolbar>\n        <div className=\"pull-right\">\n          <ButtonToolbar>\n            <Button bsStyle=\"primary\" onClick={onHide}>Cancel</Button>\n            <Button\n              bsStyle={bStyle}\n              id=\"md-export-dropdown\"\n              disabled={this.isDisabled()}\n              title=\"Export as ZIP file (incl. attachments)\"\n              onClick={this.handleClick}\n            >\n              <span><i className={bClass} />&nbsp;{bTitle}</span>\n            </Button>\n          </ButtonToolbar>\n        </div>\n      </ButtonToolbar>\n    );\n  }\n\n  isDisabled() {\n    const { processing } = this.state;\n    return processing === true;\n  }\n\n  render() {\n    const onChange = (v) => this.setState(\n      previousState => { return { ...previousState, value: v } }\n    )\n    const { full } = this.props;\n    return (\n      <div className=\"export-collections-modal\">\n        {this.renderCollections('Global collections', 'lockedRoots')}\n        {this.renderEmbargoCollections('Embargo collections', 'syncInRoots')}\n        {/* {this.renderCollections('My collections', 'unsharedRoots')} */}\n        {/* {this.renderSharedCollections('My shared collections', 'sharedRoots')} */}\n        {/* {this.renderSharedCollections('Shared with me', 'remoteRoots')} */}\n        {this.renderCheckAll()}\n        {this.renderButtonBar()}\n      </div>\n    )\n  }\n}\n","import React from 'react';\nimport {Button, ButtonToolbar} from 'react-bootstrap';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport MetadataFetcher from 'src/fetchers/MetadataFetcher';\nimport { elementShowOrNew } from 'src/utilities/routesUtils'\nimport { subjectAreas } from 'src/components/staticDropdownOptions/radar/subjectAreas'\nimport { contributorTypes } from 'src/components/staticDropdownOptions/radar/contributorTypes'\nimport { relatedIdentifierTypes } from 'src/components/staticDropdownOptions/radar/relatedIdentifierTypes'\nimport { relationTypes } from 'src/components/staticDropdownOptions/radar/relationTypes'\nimport { controlledRightsList } from 'src/components/staticDropdownOptions/radar/controlledRightsList'\nimport { funderIdentifierTypes } from 'src/components/staticDropdownOptions/radar/funderIdentifierTypes'\n\nexport default class ModalExportRadarCollection extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      processing: false,\n      metadata: null\n    }\n\n    this.handleEdit = this.handleEdit.bind(this)\n  }\n\n  componentDidMount() {\n    const { currentCollection } = UIStore.getState()\n\n    MetadataFetcher.fetch(currentCollection.id)\n      .then((result) => {\n        this.setState({ metadata: result.metadata })\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  handleEdit() {\n    const { onHide, editAction } = this.props;\n\n    editAction()\n\n    setTimeout(() => {\n      this.setState({ processing: false });\n      onHide();\n    }, 1000);\n  }\n\n  renderMetadata() {\n    const { metadata } = this.state\n    return (\n      <div>\n        {metadata.datasetUrl && <div>\n          <p>\n            <strong>This collection has already been transferred to RADAR. You can transfer the collection again, but you may need to remove the existing dataset in RADAR first.</strong>\n          </p>\n          <dl>\n            <dt>RADAR Dataset URL</dt>\n            <dd>\n              <a target=\"_blank\" href={metadata.datasetUrl}>{metadata.datasetUrl}</a>\n            </dd>\n            <dt>RADAR File URL</dt>\n            <dd>\n              <a target=\"_blank\" href={metadata.fileUrl}>{metadata.fileUrl}</a>\n            </dd>\n          </dl>\n        </div>}\n        <dl>\n          <dt>Title</dt>\n          <dd>\n            {metadata.title || <p className=\"text-danger\">Please provide a title.</p>}\n          </dd>\n          <dt>Description</dt>\n          <dd>{metadata.description}</dd>\n          <dt>Subjects</dt>\n          <dd>\n            {\n              metadata.subjectAreas ? <ul>\n              {\n                metadata.subjectAreas.map((subjectArea, index) => {\n                  const controlledSubjectAreaName = subjectAreas.find(el => el.value == subjectArea.controlledSubjectAreaName)\n                  return (\n                    <li key={index}>{controlledSubjectAreaName.label}</li>\n                  )\n                })\n              }\n              </ul> : <p className=\"text-danger\">Please provide at least one subject area.</p>\n            }\n          </dd>\n          <dt>Keywords</dt>\n          <dd>\n            {\n              metadata.keywords ? <ul>\n              {\n                metadata.keywords.map((keyword, index) => (\n                  <li key={index}>{keyword}</li>\n                ))\n              }\n              </ul> : <p>---</p>\n            }\n          </dd>\n          <dt>Creators</dt>\n          <dd>\n            {\n              metadata.creators ? <ul>\n              {\n                metadata.creators.map((creator, index) => (\n                  <li key={index}>\n                    {creator.givenName} {creator.familyName}\n                    {creator.orcid && `, ${creator.orcid}`}\n                    {creator.affiliations.length > 0 && `, ${creator.affiliations.map(\n                      affiliation => affiliation.affiliation\n                    ).join(', ')}`}\n                  </li>\n                ))\n              }\n              </ul> : <p className=\"text-danger\">Please provide at least one creator.</p>\n            }\n          </dd>\n          <dt>Contributors</dt>\n          <dd>\n            {\n              metadata.contributors ? <ul>\n              {\n                metadata.contributors.map((contributor, index) => {\n                  const contributorType = contributorTypes.find(el => el.value == contributor.contributorType)\n\n                  return (\n                    <li key={index}>\n                      {contributor.givenName} {contributor.familyName}, {contributorType?.label}\n                      {contributor.orcid && `, ${contributor.orcid}`}\n                      {contributor.affiliations.length > 0 && `, ${contributor.affiliations.map(\n                        affiliation => affiliation.affiliation\n                      ).join(', ')}`}\n                    </li>\n                  )\n                })\n              }\n              </ul> : <p>---</p>\n            }\n          </dd>\n          <dt>Releated identifiers</dt>\n          <dd>\n            {\n              metadata.relatedIdentifiers ? <ul>\n              {\n                metadata.relatedIdentifiers.map((relatedIdentifier, index) => {\n                  const relatedIdentifierType = relatedIdentifierTypes.find(el => el.value == relatedIdentifier.relatedIdentifierType)\n                  const relationType = relationTypes.find(el => el.value == relatedIdentifier.relationType)\n\n                  return (\n                    <li key={index}>\n                      {relatedIdentifier.relatedIdentifier}{', '}{relatedIdentifierType.label}{', '}{relationType.label}\n                    </li>\n                  )\n                })\n              }\n              </ul> : <p>---</p>\n            }\n          </dd>\n          <dt>Alternative identifiers</dt>\n          <dd>\n            {\n              metadata.alternateIdentifiers ? <ul>\n              {\n                metadata.alternateIdentifiers.map((alternateIdentifier, index) => (\n                  <li key={index}>\n                    {alternateIdentifier.alternateIdentifier}{', '}{alternateIdentifier.alternateIdentifierType}\n                  </li>\n                ))\n              }\n              </ul> : <p>---</p>\n            }\n          </dd>\n          <dt>Rights holder</dt>\n          <dd>\n            {\n              metadata.rightsHolders ? <ul>\n              {\n                metadata.rightsHolders.map((rightsHolder, index) => (\n                  <li key={index}>{rightsHolder}</li>\n                ))\n              }\n              </ul> : <p className=\"text-danger\">Please provide at least one rights holder.</p>\n            }\n          </dd>\n          <dt>Rights</dt>\n          <dd>\n            {\n              metadata.rights ? <ul>\n              {\n                metadata.rights.map((rights, index) => {\n                  const controlledRights = controlledRightsList.find(el => el.value == rights.controlledRights)\n                  return (\n                    <li key={index}>\n                      {controlledRights.label}\n                      {rights.additionalRights && `, ${rights.additionalRights}`}\n                    </li>\n                  )\n                })\n              }\n              </ul> : <p className=\"text-danger\">Please provide usage rights.</p>\n            }\n          </dd>\n          <dt>Funding references</dt>\n          <dd>\n            {\n              metadata.fundingReferences ? <ul>\n              {\n                metadata.fundingReferences.map((fundingReference, index) => {\n                  const funderIdentifierType = funderIdentifierTypes.find(el => el.value == fundingReference.funderIdentifierType)\n\n                  return (\n                    <li key={index}>\n                      {fundingReference.funderName}\n                      {fundingReference.funderIdentifier && `, ${fundingReference.funderIdentifier}`}\n                      {funderIdentifierType && `, ${funderIdentifierType.label}`}\n                      {fundingReference.awardTitle && `, ${fundingReference.awardTitle}`}\n                      {fundingReference.awardNumber && `, ${fundingReference.awardNumber}`}\n                      {fundingReference.awardURI && `, ${fundingReference.awardURI}`}\n                    </li>\n                  )\n                })\n              }\n              </ul> : <p>---</p>\n            }\n          </dd>\n        </dl>\n      </div>\n    )\n  }\n\n  renderButtonBar() {\n    const { onHide } = this.props;\n    const { metadata } = this.state;\n    const { currentCollection } = UIStore.getState()\n    const archiveUrl = `/oauth/radar/archive?collection_id=${currentCollection.id}`\n\n    return (\n      <ButtonToolbar>\n        <div className=\"pull-right\">\n          <ButtonToolbar>\n            <Button bsStyle=\"primary\" onClick={onHide}>Cancel</Button>\n            <Button onClick={this.handleEdit}>Edit collection metadata</Button>\n            <a href={archiveUrl} target=\"_blank\"\n               className=\"btn btn-danger\"\n               disabled={this.isDisabled()}\n               title=\"Publish in RADAR\"\n               onClick={onHide}>\n              <span><i className=\"fa fa-file-text-o\" />&nbsp;Publish in RADAR</span>\n            </a>\n          </ButtonToolbar>\n        </div>\n      </ButtonToolbar>\n    );\n  }\n\n  isDisabled() {\n    const { processing, metadata } = this.state;\n    return processing === true || metadata === null || (\n      metadata.title === undefined || metadata.title.length < 1 ||\n      metadata.subjectAreas === undefined || metadata.subjectAreas.length < 1 ||\n      metadata.creators === undefined || metadata.creators.length < 1 ||\n      metadata.rightsHolders === undefined || metadata.rightsHolders.length < 1 ||\n      metadata.rights === undefined || metadata.rights.length < 1\n    );\n  }\n\n  render() {\n    const { full } = this.props\n    const { metadata } = this.state\n    const onChange = (v) => this.setState(\n      previousState => {return { ...previousState, value: v }}\n    )\n\n    if (metadata) {\n      return (\n        <div className=\"export-collections-modal\">\n          {this.renderMetadata()}\n          {this.renderButtonBar()}\n        </div>\n      )\n    } else {\n      return <p className=\"text-center\"><i className=\"fa fa-refresh fa-spin fa-fw\" /></p>\n    }\n  }\n}\n","import React from 'react';\nimport { Button, ButtonToolbar } from 'react-bootstrap';\nimport Dropzone from 'react-dropzone';\nimport UIStore from 'src/stores/alt/stores/UIStore';\n\nexport default class ModalImportCollection extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      file: null,\n      processing: false\n    };\n  }\n\n  handleClick() {\n    const { onHide, action } = this.props;\n    const { file } = this.state;\n    const ui_state = UIStore.getState();\n    this.setState({ processing: true });\n    let params = {\n      file: file\n    }\n    action(params);\n    setTimeout(() => {\n      this.setState({ processing: false });\n      onHide();\n    }, 1800);\n  }\n\n  handleFileDrop(attachment_file) {\n    this.setState({ file: attachment_file[0] });\n  }\n\n  handleAttachmentRemove() {\n    this.setState({ file: null });\n  }\n\n  dropzoneOrfilePreview() {\n    const { file } = this.state;\n    if (file) {\n      return (\n        <div>\n          {file.name}\n          <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.handleAttachmentRemove()} className=\"pull-right\">\n            <i className=\"fa fa-trash-o\"></i>\n          </Button>\n        </div>\n      );\n    } else {\n      return (\n        <Dropzone\n          onDrop={attachment_file => this.handleFileDrop(attachment_file)}\n          style={{ height: 50, width: '100%', border: '3px dashed lightgray' }}\n        >\n          <div style={{ textAlign: 'center', paddingTop: 12, color: 'gray' }}>\n            Drop File, or Click to Select.\n          </div>\n        </Dropzone>\n      );\n    }\n  }\n\n  isDisabled() {\n    const { file, processing } = this.state;\n    return file == null || processing === true;\n  }\n\n  render() {\n    const { onHide } = this.props;\n    const { processing } = this.state;\n    const bStyle = processing === true ? 'danger' : 'warning';\n    const bClass = processing === true ? 'fa fa-spinner fa-pulse fa-fw' : 'fa fa-file-text-o';\n    const bTitle = processing === true ? 'Importing' : 'Import';\n\n    return (\n      <div>\n        {this.dropzoneOrfilePreview()}\n        &nbsp;\n        <ButtonToolbar>\n          <Button bsStyle=\"primary\" onClick={() => onHide()}>Cancel</Button>\n          <Button bsStyle={bStyle} onClick={() => this.handleClick()} disabled={this.isDisabled()}>\n            <span><i className={bClass} />&nbsp;{bTitle}</span>\n          </Button>\n        </ButtonToolbar>\n      </div>\n    )\n  }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown, MenuItem, Glyphicon } from 'react-bootstrap';\n\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport ModalImport from 'src/components/contextActions/ModalImport';\nimport ModalExport from 'src/components/contextActions/ModalExport';\nimport ModalReactionExport from 'src/components/contextActions/ModalReactionExport';\nimport ModalExportCollection from 'src/components/contextActions/ModalExportCollection';\nimport ModalExportRadarCollection from 'src/components/contextActions/ModalExportRadarCollection';\nimport ModalImportCollection from 'src/components/contextActions/ModalImportCollection';\nimport { elementShowOrNew } from 'src/utilities/routesUtils.js';\n\nfunction ExportImportButton({ isDisabled, updateModalProps, customClass }) {\n  const showRadar = UIStore.getState().hasRadar ? (\n    <>\n      <MenuItem divider />\n      <MenuItem\n        onSelect={() => editMetadataFunction()}\n        disabled={isDisabled}\n        title=\"Edit metadata\"\n      >\n        Edit collection metadata\n      </MenuItem>\n      <MenuItem\n        onSelect={() => exportCollectionToRadarFunction(updateModalProps)}\n        disabled={isDisabled}\n        title=\"Export to RADAR\"\n      >\n        Publish current collection via RADAR\n      </MenuItem>\n    </>\n  ) : <span />;\n\n  return (\n    <Dropdown id=\"export-dropdown\">\n      <Dropdown.Toggle className={customClass}>\n        <Glyphicon glyph=\"import\" />\n        <Glyphicon glyph=\"export\" />\n      </Dropdown.Toggle>\n      <Dropdown.Menu>\n        <MenuItem\n          onSelect={() => exportFunction(updateModalProps)}\n          title=\"Export to spreadsheet\"\n        >\n          Export samples from selection\n        </MenuItem>\n        <MenuItem\n          onSelect={() => exportReactionFunction(updateModalProps)}\n          title=\"Export reaction smiles to csv\"\n        >\n          Export reactions from selection\n        </MenuItem>\n        <MenuItem divider />\n        <MenuItem\n          onSelect={() => importSampleFunction(updateModalProps, false)}\n          disabled={isDisabled}\n          title=\"Import from spreadsheet or sdf\"\n        >\n          Import samples to collection\n        </MenuItem>\n        <MenuItem\n          onSelect={() => importSampleFunction(updateModalProps, true)}\n          disabled={isDisabled}\n          title=\"Import chemicals from spreadsheet\"\n        >\n          Import chemicals to collection\n        </MenuItem>\n        <MenuItem divider />\n        <MenuItem\n          onSelect={() => exportCollectionFunction(updateModalProps)}\n          title=\"Export as ZIP archive\"\n        >\n          Export collections\n        </MenuItem>\n        <MenuItem\n          onSelect={() => importCollectionFunction(updateModalProps)}\n          title=\"Import collections from ZIP archive\"\n        >\n          Import collections\n        </MenuItem>\n\n        {showRadar}\n      </Dropdown.Menu>\n    </Dropdown>\n  );\n}\n\nExportImportButton.propTypes = {\n  isDisabled: PropTypes.bool,\n  customClass: PropTypes.string,\n};\n\nExportImportButton.defaultProps = {\n  isDisabled: false,\n  customClass: null,\n};\nconst importSampleFunction = (updateModalProps, importAsChemical) => {\n  const title = importAsChemical ? 'Import Chemicals from File' : 'Import Samples from File';\n  const component = ModalImport;\n  const action = ElementActions.importSamplesFromFile;\n  const listSharedCollections = false;\n  const modalProps = {\n    show: true,\n    title,\n    component,\n    action,\n    listSharedCollections,\n  };\n  updateModalProps(modalProps);\n};\n\nconst exportFunction = (updateModalProps) => {\n  const title = 'Select Data to Export';\n  const component = ModalExport;\n  const modalProps = {\n    show: true,\n    title,\n    component,\n    customModal: 'exportModal'\n  };\n  updateModalProps(modalProps);\n};\n\nconst exportReactionFunction = (updateModalProps) => {\n  const component = ModalReactionExport;\n  const modalProps = {\n    show: true,\n    title: 'Reaction Smiles Export',\n    component,\n    customModal: 'exportModal'\n  };\n  updateModalProps(modalProps);\n};\n\nconst exportCollectionFunction = (updateModalProps) => {\n  const title = 'Export Collections as ZIP archive';\n  const component = ModalExportCollection;\n  const action = CollectionActions.exportCollectionsToFile;\n  const full = false;\n  const listSharedCollections = false;\n\n  const modalProps = {\n    show: true,\n    title,\n    component,\n    action,\n    full,\n    listSharedCollections,\n  };\n\n  updateModalProps(modalProps);\n};\n\nconst importCollectionFunction = (updateModalProps) => {\n  const title = 'Import Collections from ZIP archive';\n  const component = ModalImportCollection;\n  const action = CollectionActions.importCollectionsFromFile;\n  const listSharedCollections = false;\n\n  const modalProps = {\n    show: true,\n    title,\n    component,\n    action,\n    listSharedCollections,\n  };\n\n  updateModalProps(modalProps);\n};\n\nconst editMetadataFunction = () => {\n  const { currentCollection, isSync } = UIStore.getState();\n  const uri = isSync\n    ? `/scollection/${currentCollection.id}/metadata`\n    : `/collection/${currentCollection.id}/metadata`;\n  Aviator.navigate(uri, { silent: true });\n\n  elementShowOrNew({\n    type: 'metadata',\n    params: { collectionID: currentCollection.id }\n  });\n};\n\nconst exportCollectionToRadarFunction = (updateModalProps) => {\n  const title = \"Publish current collection via RADAR\";\n  const component = ModalExportRadarCollection;\n  const action = CollectionActions.exportCollectionToRadar;\n\n  const modalProps = {\n    show: true,\n    title,\n    component,\n    action,\n    editAction: editMetadataFunction\n  };\n\n  updateModalProps(modalProps);\n};\n\nexport default ExportImportButton;\n","import PropTypes from 'prop-types';\nimport Quagga from 'quagga';\nimport React from 'react';\nimport {\n  Alert, Button,\n  FormControl,\n  FormGroup,\n  MenuItem,\n  Modal, SplitButton\n} from 'react-bootstrap';\nimport QrReader from 'react-qr-reader';\nimport PrintCodeFetcher from 'src/fetchers/PrintCodeFetcher';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport { PDFDocument } from 'pdf-lib'; // <-- Added import\nimport Utils from 'src/utilities/Functions';\nimport 'whatwg-fetch';\n\nexport default class ScanCodeButton extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showModal: false,\n      showQrReader: false,\n      scanError: null,\n      scanInfo: null,\n      checkedIds: UIStore.getState().sample.checkedIds,\n      json: {}\n    };\n\n    this.onUIStoreChange = this.onUIStoreChange.bind(this);\n    this.open = this.open.bind(this);\n    this.close = this.close.bind(this);\n    this.startBarcodeScan = this.startBarcodeScan.bind(this);\n    this.startQrCodeScan = this.startQrCodeScan.bind(this);\n    this.handleKeyPress = this.handleKeyPress.bind(this);\n    this.downloadPrintCodesPDF = this.downloadPrintCodesPDF.bind(this);\n  }\n\n  async componentDidMount() {\n    UIStore.listen(this.onUIStoreChange);\n    // Import the file when the component mounts\n    try {\n      const response = await fetch('/json/printingConfig/defaultConfig.json');\n      if (!response.ok) {\n        throw new Error('Network response was not ok');\n      }\n      const tmpJson = await response.json();\n      this.setState({ json: tmpJson });\n    } catch (err) {\n      console.error('Failed to fetch JSON', err);\n    }\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onUIStoreChange);\n  }\n\n  onUIStoreChange(state) {\n    if (state.sample.checkedIds !== this.state.checkedIds) {\n      this.setState({\n        checkedIds: state.sample.checkedIds\n      });\n    }\n  }\n\n  open() {\n    this.setState({ showModal: true });\n  }\n\n  close() {\n    this.setState({ showModal: false, showQrReader: false, scanError: null });\n  }\n\n  initializeBarcodeScan() {\n    Quagga.init({\n      inputStream: {\n        name: \"Live\",\n        type: \"LiveStream\",\n        target: document.querySelector('#barcode-scanner'),\n      },\n      decoder: {\n        readers: [\"code_128_reader\"],\n      }\n    }, function(err) {\n      if (err) {\n        console.log(err);\n        return;\n      }\n      console.log(\"Initialization finished. Ready to start\");\n      Quagga.start();\n    });\n  }\n\n  startBarcodeScan() {\n    this.initializeBarcodeScan();\n\n    Quagga.onDetected((data) => {\n      const barcode = data.codeResult.code;\n      this.handleScan(barcode, true);\n      Quagga.stop();\n    });\n\n    this.setState({ showQrReader: false });\n  }\n\n  startQrCodeScan() {\n    this.setState({ showQrReader: true });\n  }\n\n  qrReader(state) {\n    if (state.showQrReader === true) {\n      return (\n        <QrReader\n          previewStyle={{ width: 550 }}\n          onScan={this.handleScan.bind(this)}\n          onError={this.handleError}\n        />\n      );\n    }\n    return '';\n  }\n\n  checkJSONResponse(json) {\n    if (json.error) {\n      var error = new Error(json.error);\n      error.response = json;\n      throw error;\n    } else {\n      return json;\n    }\n  }\n\n  handleScan(data, stopQuagga = false) {\n    let codeInput = this.codeInput.value;\n    let code_log = {};\n    if (codeInput) {\n      data = codeInput;\n    }\n\n    if (!data) {\n      return;\n    }\n\n    stopQuagga && Quagga.stop();\n    fetch(`/api/v1/code_logs/generic?code=${data}`, {\n      credentials: 'same-origin'\n    })\n      .then(response => response.json())\n      .then(this.checkJSONResponse)\n      .then((json) => {\n        code_log = json.code_log;\n        if (code_log.source === 'container') {\n          // open active analysis\n          UIActions.selectTab({ tabKey: 1, type: code_log.root_code.source });\n          UIActions.selectActiveAnalysis({ type: 'sample', analysisIndex: code_log.source_id });\n          Aviator.navigate(`/collection/all/${code_log.root_code.source}/${code_log.root_code.source_id}`);\n          this.close();\n        } else {\n          UIActions.selectTab({ tabKey: 0, type: code_log.root_code.source });\n          Aviator.navigate(`/collection/all/${code_log.source}/${code_log.source_id}`);\n          this.close();\n        }\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage.message);\n        this.setState({ scanError: errorMessage.message });\n      });\n  }\n\n  handleKeyPress(e) {\n    const code = e.keyCode || e.which;\n    if (code === 13) {\n      e.preventDefault();\n      this.scanInput.click();\n    }\n  }\n\n  handleError(err) {\n    console.error(err);\n  }\n\n  scanModal() {\n    if (this.state.showModal === true) {\n      return (\n        <Modal show={this.state.showModal} onHide={this.close}>\n          <Modal.Header closeButton>\n            <Modal.Title>Scan barcode or QR code</Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <div id=\"code-scanner\" style={{ maxHeight: '600px', overflow: 'hidden' }}>\n              <FormGroup>\n                <FormControl\n                  autoFocus\n                  type=\"text\"\n                  inputRef={(m) => { this.codeInput = m; }}\n                  onKeyPress={this.handleKeyPress}\n                />\n              </FormGroup>\n              <input\n                type=\"button\"\n                style={{ display: 'none' }}\n                ref={(scanInput) => { this.scanInput = scanInput; }}\n                onClick={() => this.handleScan()}\n              />\n\n              <div id=\"barcode-scanner\" {...this.state.showQrReader && { style: { display: 'none' } }}></div>\n              {this.qrReader(this.state)}\n            </div>\n            <br />\n            {this.scanAlert()}\n          </Modal.Body>\n          <Modal.Footer>\n            <Button onClick={this.startBarcodeScan}>Start barcode scan</Button>\n            <Button onClick={this.startQrCodeScan}>Start QR code scan</Button>\n          </Modal.Footer>\n        </Modal>\n      );\n    }\n    return '';\n  }\n\n  scanAlert() {\n    if (this.state.scanError) {\n      return (\n        <div>\n          {this.state.scanInfo\n            ? <Alert bsStyle=\"info\">{this.state.scanInfo}</Alert>\n            : null\n          }\n          <Alert bsStyle=\"danger\">\n            {this.state.scanError}\n          </Alert>\n        </div>\n      );\n    }\n    return null;\n  }\n\n  /**\n   * Downloads a PDF file with the print codes for the given element\n   */\n  async downloadPrintCodesPDF(ids, selectedConfig) {\n    // Create a new PDFDocument to merge PDFs into\n    const mergedPdf = await PDFDocument.create();\n\n    const { json } = this.state;\n\n    // Fetch PDFs and merge them\n    const pdfPromises = ids.map(async (id) => {\n      let newUrl = `/api/v1/code_logs/print_codes?element_type=sample&ids[]=${id}`;\n\n      // Append the selected config parameters to the URL\n      if (selectedConfig in json) {\n        const configValue = json[selectedConfig];\n        Object.entries(configValue).forEach(([key, value]) => {\n          newUrl += `&${key}=${value}`;\n        });\n      }\n\n      // Fetch and load the PDF\n      const pdfBytes = await PrintCodeFetcher.fetchMergedPrintCodes(newUrl);\n      const pdfToMerge = await PDFDocument.load(pdfBytes);\n      const copiedPages = await mergedPdf.copyPages(pdfToMerge, pdfToMerge.getPageIndices());\n\n      // Add the pages to the merged PDF\n      copiedPages.forEach((page) => mergedPdf.addPage(page));\n    });\n\n    // Wait for all PDFs to be processed\n    await Promise.all(pdfPromises);\n\n    // Serialize the merged PDF to bytes\n    const mergedPdfBytes = await mergedPdf.save();\n    // Create a Blob from the bytes\n    const blob = new Blob([mergedPdfBytes], { type: 'application/pdf' });\n    const url = URL.createObjectURL(blob);\n\n    // Download the merged PDF\n    Utils.downloadFile({ contents: url, name: 'print_codes_merged.pdf' });\n  }\n\n  render() {\n    const { json } = this.state;\n    const ids = this.state.checkedIds.toArray();\n    const disabledPrint = !(ids.length > 0);\n    const menuItems = Object.entries(json).map(([key]) => ({ key, name: key }));\n\n    const title = (\n      <span className=\"fa-stack\" style={{ top: -4 }} >\n        <i className=\"fa fa-barcode fa-stack-1x\" />\n        <i className=\"fa fa-search fa-stack-1x\" style={{ left: 7 }} />\n      </span>\n    );\n\n    const { customClass } = this.props;\n    return (\n      <div>\n        <SplitButton\n          id=\"search-code-split-button\"\n          bsStyle={customClass ? null : 'default'}\n          className={customClass}\n          title={title}\n          onClick={this.open}\n          style={{ height: '34px' }}\n        >\n          {menuItems.map((e) => (\n            <MenuItem\n              key={e.key}\n              disabled={disabledPrint}\n              onSelect={(eventKey, event) => {\n                event.stopPropagation();\n                this.downloadPrintCodesPDF(ids, e.name);\n\n              }}\n            >\n              {e.name}\n            </MenuItem>\n          ))}\n        </SplitButton>\n\n        {this.scanModal()}\n      </div>\n    );\n  }\n}\n\nScanCodeButton.propTypes = {\n  customClass: PropTypes.string,\n};\n\nScanCodeButton.defaultProps = {\n  customClass: null,\n};\n","import React from 'react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport {\n  PanelGroup, Panel, Button, Modal, Table\n} from 'react-bootstrap';\nimport 'whatwg-fetch';\nimport _ from 'lodash';\nimport MessagesFetcher from 'src/fetchers/MessagesFetcher';\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport CalendarActions from 'src/stores/alt/actions/CalendarActions';\nimport InboxStore from 'src/stores/alt/stores/InboxStore';\nimport { formatDate } from 'src/utilities/timezoneHelper';\n\nconst changeUrl = (url, urlTitle) => (url ? (\n  <a href={url} target=\"_blank\" rel=\"noopener noreferrer\">\n    {urlTitle || url}\n  </a>\n) : (\n  <span />\n));\n\nconst handleNotification = (nots, act, needCallback = true) => {\n  nots.forEach((n) => {\n    if (act === 'rem') {\n      NotificationActions.removeByUid(n.id);\n    }\n    if (act === 'add') {\n      const infoTimeString = formatDate(n.created_at);\n\n      const newText = n.content.data\n        .split('\\n')\n        .map((i) => <p key={`${infoTimeString}-${i}`}>{i}</p>);\n      const { url, urlTitle } = n.content;\n      if (url) {\n        newText[newText.length] = (\n          <p key={`${infoTimeString}-${url}`}>{changeUrl(url, urlTitle)}</p>\n        );\n      }\n\n      const notification = {\n        title: `From ${n.sender_name} on ${infoTimeString}`,\n        message: newText,\n        level: n.content.level || 'warning',\n        dismissible: 'button',\n        autoDismiss: n.content.autoDismiss || 5,\n        position: n.content.position || 'tr',\n        uid: n.id,\n        action: {\n          label: (\n            <span>\n              <i className=\"fa fa-check\" aria-hidden=\"true\" />\n              &nbsp;&nbsp;Got it\n            </span>\n          ),\n          callback() {\n            if (needCallback) {\n              const params = { ids: [] };\n              params.ids[0] = n.id;\n              MessagesFetcher.acknowledgedMessage(params);\n            }\n          },\n        },\n      };\n      NotificationActions.add(notification);\n\n      const { currentPage, itemsPerPage } = InboxStore.getState();\n\n      switch (n.content.action) {\n        case 'CollectionActions.fetchRemoteCollectionRoots':\n          CollectionActions.fetchRemoteCollectionRoots();\n          break;\n        case 'CollectionActions.fetchSyncInCollectionRoots':\n          CollectionActions.fetchSyncInCollectionRoots();\n          break;\n        case 'Repository_ReviewRequest':\n        case 'Repository_Published':\n          // CollectionActions.fetchSyncInCollectionRoots();\n          break;\n        case 'Submission':\n          CollectionActions.fetchSyncInCollectionRoots();\n          break;\n        case 'InboxActions.fetchInbox':\n          InboxActions.fetchInbox({ currentPage, itemsPerPage });\n          break;\n        case 'ReportActions.updateProcessQueue':\n          ReportActions.updateProcessQueue([parseInt(n.content.report_id, 10)]);\n          break;\n        case 'ElementActions.refreshComputedProp':\n          ElementActions.refreshComputedProp(n.content.cprop);\n          break;\n        case 'RefreshChemotionCollection':\n          CollectionActions.fetchUnsharedCollectionRoots();\n          break;\n        case 'CollectionActions.fetchUnsharedCollectionRoots':\n          CollectionActions.fetchUnsharedCollectionRoots();\n          CollectionActions.fetchSyncInCollectionRoots();\n          break;\n        case 'ElementActions.fetchResearchPlanById':\n          ElementActions.fetchResearchPlanById(\n            parseInt(n.content.research_plan_id, 10)\n          );\n          break;\n        case 'CalendarActions.navigateToElement':\n          CalendarActions.navigateToElement(\n            n.content.eventable_type,\n            n.content.eventable_id\n          );\n          break;\n        default:\n        //\n      }\n    }\n  });\n};\n\nconst createUpgradeNotification = (serverVersion, localVersion) => {\n  const content = [\n    'Dear ELNer,',\n    'A new version has been released. Please reload this page to enjoy the latest updates.',\n    'Thank you and have a nice day  :)',\n    '--------------------------',\n    `Your version: ${localVersion}`,\n    `Current version: ${serverVersion}`,\n    '--------------------------',\n  ].join('\\n');\n  const contentJson = { data: content };\n  const options = {\n    year: 'numeric',\n    month: 'long',\n    day: 'numeric',\n    hour: '2-digit',\n    minute: '2-digit'\n  };\n  const infoTimeString = new Date().toLocaleDateString('de-DE', options);\n  const not = {\n    id: -1,\n    sender_name: 'System Administrator',\n    updated_at: infoTimeString,\n    content: contentJson,\n  };\n  handleNotification([not], 'add', false);\n};\n\nexport default class NoticeButton extends React.Component {\n  static contextType = StoreContext;\n  constructor(props) {\n    super(props);\n    this.state = {\n      showModal: false,\n      dbNotices: [],\n      messageEnable: true,\n      messageAutoInterval: 6000,\n      lastActivityTime: new Date(),\n      idleTimeout: 12,\n      serverVersion: '',\n      localVersion: '',\n    };\n    this.envConfiguration = this.envConfiguration.bind(this);\n    this.handleShow = this.handleShow.bind(this);\n    this.handleHide = this.handleHide.bind(this);\n    this.messageAck = this.messageAck.bind(this);\n    this.detectActivity = this.detectActivity.bind(this);\n  }\n\n  componentDidMount() {\n    this.envConfiguration();\n    this.startActivityDetection();\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    const nots = this.state.dbNotices;\n    const nextNots = nextState.dbNotices;\n\n    const notIds = _.map(nots, 'id');\n    const nextNotIds = _.map(nextNots, 'id');\n    const newMessages = _.filter(nextNots, (o) => !_.includes(notIds, o.id));\n    const remMessages = _.filter(nots, (o) => !_.includes(nextNotIds, o.id));\n\n    if (Object.keys(newMessages).length > 0) {\n      handleNotification(newMessages, 'add');\n    }\n    if (Object.keys(remMessages).length > 0) {\n      handleNotification(remMessages, 'rem');\n    }\n    if (\n      nextState.serverVersion\n      && nextState.localVersion\n      && nextState.serverVersion !== this.state.serverVersion\n      && nextState.serverVersion !== nextState.localVersion\n    ) {\n      const serverVer = nextState.serverVersion.substring(\n        nextState.serverVersion.indexOf('-') + 1,\n        nextState.serverVersion.indexOf('.js')\n      );\n      const localVer = nextState.localVersion.substring(\n        nextState.localVersion.indexOf('-') + 1,\n        nextState.localVersion.indexOf('.js')\n      );\n      if (serverVer !== localVer) {\n        // createUpgradeNotification(serverVer, localVer);\n      }\n    }\n\n    return true;\n  }\n\n  componentWillUnmount() {\n    this.stopActivityDetection();\n  }\n\n  handleShow() {\n    MessagesFetcher.fetchMessages(0).then((result) => {\n      if (result?.messages?.length > 0) {\n        result.messages.sort((a, b) => a.id - b.id);\n        this.setState({ showModal: true, dbNotices: result.messages });\n      }\n    });\n  }\n\n  handleHide() {\n    this.setState({ showModal: false });\n  }\n\n  startActivityDetection() {\n    const { messageEnable } = this.state;\n    if (messageEnable === true) {\n      this.interval = setInterval(this.messageFetch.bind(this), this.state.messageAutoInterval);\n      document.addEventListener('mousemove', this.detectActivity);\n      document.addEventListener('click', this.detectActivity);\n    }\n  }\n\n  stopActivityDetection() {\n    const { messageEnable } = this.state;\n    if (messageEnable === true) {\n      document.removeEventListener('mousemove', this.detectActivity, false);\n      document.removeEventListener('click', this.detectActivity, false);\n      clearInterval(this.interval);\n    }\n  }\n\n  envConfiguration() {\n    // use 'application' (not 'application-') as keyword because there is a\n    // difference between production and development environment\n    const documentIndex = 'application';\n    const applicationTag = _.filter(\n      document.scripts,\n      (s) => s.src.indexOf(documentIndex) > -1\n    );\n    const applicationTagValue = applicationTag[0].src.substr(\n      applicationTag[0].src.indexOf(documentIndex)\n    );\n    MessagesFetcher.configuration().then((result) => {\n      this.setState({\n        messageEnable: result.messageEnable === 'true',\n        messageAutoInterval: result.messageAutoInterval,\n        idleTimeout: result.idleTimeout,\n        localVersion: applicationTagValue,\n      });\n      const { messageEnable, messageAutoInterval } = this.state;\n\n      if (messageEnable === true) {\n        this.interval = setInterval(\n          () => this.messageFetch(),\n          messageAutoInterval\n        );\n        document.addEventListener('mousemove', this.detectActivity);\n        document.addEventListener('click', this.detectActivity);\n      } else {\n        this.messageFetch();\n      }\n    });\n  }\n\n  detectActivity() {\n    this.setState({ lastActivityTime: new Date() });\n  }\n\n  messageAck(idx, ackAll) {\n    let { dbNotices } = this.state;\n    const params = {\n      ids: [],\n    };\n    if (ackAll) {\n      params.ids = _.map(dbNotices, 'id');\n    } else {\n      params.ids[0] = idx;\n    }\n    MessagesFetcher.acknowledgedMessage(params).then((result) => {\n      const ackIds = _.map(result.ack, 'id');\n      dbNotices = _.filter(\n        this.state.dbNotices,\n        (o) => !_.includes(ackIds, o.id)\n      );\n      dbNotices.sort((a, b) => a.id - b.id);\n      this.setState({\n        dbNotices,\n      });\n    });\n  }\n\n  messageFetch() {\n    const { lastActivityTime, idleTimeout } = this.state;\n    const clientLastActivityTime = new Date(lastActivityTime).getTime();\n    const currentTime = new Date().getTime();\n    const remainTime = Math.floor(\n      (currentTime - clientLastActivityTime) / 1000\n    );\n    if (remainTime < idleTimeout) {\n      MessagesFetcher.fetchMessages(0).then((result) => {\n        if (result?.messages?.length > 0) {\n          result.messages?.forEach((message) => {\n            if (message.subject === 'Send TPA attachment arrival notification')\n              this.context.attachmentNotificationStore.addMessage(message);\n          });\n          result.messages.sort((a, b) => a.id - b.id);\n          this.setState({\n            dbNotices: result.messages,\n            serverVersion: result.version,\n          });\n        }\n      });\n    }\n  }\n\n  renderBody() {\n    const { dbNotices } = this.state;\n\n    let bMessages = (\n      <Panel\n        id=\"panel-modal-body-allread\"\n        key=\"panel-modal-body-allread\"\n        eventKey=\"0\"\n        collapsible=\"true\"\n        defaultExpanded\n        style={{ border: '0px' }}\n      >\n        <Table>\n          <tbody>\n            <tr>\n              <td\n                style={{ border: '0px', width: '100vw', textAlign: 'center' }}\n              >\n                No new notifications.\n              </td>\n            </tr>\n          </tbody>\n        </Table>\n      </Panel>\n    );\n\n    if (dbNotices?.length > 0) {\n      bMessages = dbNotices.map((not, index) => {\n        const infoTimeString = formatDate(not.created_at);\n\n        const newText = not.content.data\n          .split('\\n')\n          .map((i) => <p key={`${infoTimeString}-${i}`}>{i}</p>);\n\n        const { url, urlTitle } = not.content;\n        if (url) {\n          newText.push(\n            <p key={`${infoTimeString}-${url}`}>{changeUrl(url, urlTitle)}</p>\n          );\n        }\n\n        return (\n          <Panel\n            key={`panel-modal-body-${not.id}`}\n            eventKey={index}\n            collapsible=\"true\"\n            defaultExpanded\n            ref={(pl) => {\n              this[`myPl${index}`] = pl;\n            }}\n          >\n            <Panel.Heading>\n              <i className=\"fa fa-commenting-o\" aria-hidden=\"true\" />\n              &nbsp;\n              {not.subject}\n              &nbsp;&nbsp;\n              <span>\n                <strong>From: </strong>\n                {not.sender_name}\n              </span>\n              &nbsp;&nbsp;\n              <span>\n                <strong>Created On: </strong>\n                {formatDate(not.created_at)}\n              </span>\n            </Panel.Heading>\n            <Panel.Body>\n              <Table>\n                <tbody>\n                  <tr>\n                    <td width=\"10%\">\n                      <Button\n                        id={`notice-button-ack-${not.id}`}\n                        key={`notice-button-ack-${not.id}`}\n                        onClick={() => this.messageAck(not.id, false)}\n                      >\n                        <i className=\"fa fa-check\" aria-hidden=\"true\" />\n                        &nbsp;Got it\n                      </Button>\n                    </td>\n                    <td width=\"90%\">{newText}</td>\n                  </tr>\n                </tbody>\n              </Table>\n            </Panel.Body>\n          </Panel>\n        );\n      });\n    }\n\n    return <PanelGroup id=\"panel-group-modal-body\">{bMessages}</PanelGroup>;\n  }\n\n  renderModal() {\n    if (this.state.showModal) {\n      return (\n        <Modal\n          show={this.state.showModal}\n          onHide={this.handleHide}\n          dialogClassName=\"noticeModal\"\n        >\n          <Modal.Header closeButton>\n            <Modal.Title>Unread Notifications</Modal.Title>\n          </Modal.Header>\n          <Modal.Body style={{ overflow: 'auto' }}>\n            {this.renderBody()}\n          </Modal.Body>\n          <Modal.Footer>\n            <Button\n              id=\"notice-button-ack-all\"\n              key=\"notice-button-ack-all\"\n              onClick={() => this.messageAck(0, true)}\n            >\n              <i className=\"fa fa-check\" aria-hidden=\"true\" />\n              &nbsp;Mark all notifications as read\n            </Button>\n          </Modal.Footer>\n        </Modal>\n      );\n    }\n    return <div />;\n  }\n\n  render() {\n    const noticeNum = (this.state.dbNotices || []).length;\n    let btnStyle = 'default';\n    let btnClass = 'fa fa-bell-o fa-lg';\n\n    if (noticeNum > 0) {\n      btnStyle = 'warning';\n      btnClass = 'fa fa-bell fa-lg';\n    }\n\n    return (\n      <div style={{ position: 'relative', marginLeft: '-10px' }}>\n        <Button\n          id=\"notice-button\"\n          bsStyle={btnStyle}\n          onClick={this.handleShow}\n          style={{\n            height: '34px',\n            width: '40px',\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'center',\n            marginBottom: '.04px',\n          }}\n        >\n          <i\n            className={btnClass}\n            style={{\n              left: '20px'\n            }}\n          />\n          {noticeNum > 0 && (\n            <span\n              className=\"badge badge-pill\"\n              style={{\n                top: '25px',\n                left: '25px',\n                fontSize: '8px',\n                position: 'absolute'\n              }}\n            >\n              {noticeNum}\n            </span>\n          )}\n        </Button>\n        {this.renderModal()}\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport { Button, Badge } from 'react-bootstrap';\nimport 'whatwg-fetch';\n\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport InboxStore from 'src/stores/alt/stores/InboxStore';\n\nexport default class InboxButton extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const inboxState = InboxStore.getState();\n\n    this.state = {\n      numberOfAttachments: inboxState.numberOfAttachments,\n    };\n\n    this.onChange = this.onChange.bind(this);\n    this.render = this.render.bind(this);\n  }\n\n  componentDidMount() {\n    InboxStore.listen(this.onChange);\n    InboxActions.fetchInboxCount();\n  }\n\n  componentWillUnmount() {\n    InboxStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState(state);\n  }\n\n  render() {\n    const { numberOfAttachments } = this.state;\n    let btnStyle = 'default';\n    let btnClass = 'fa fa-inbox fa-lg';\n\n    if (numberOfAttachments > 0) {\n      btnStyle = 'warning';\n      btnClass = 'fa fa-inbox fa-lg';\n    }\n\n    return (\n      <div style={{ position: 'relative', display: 'inline-block' }}>\n        <Button\n          id=\"inbox-button\"\n          bsStyle={btnStyle}\n          onClick={InboxActions.toggleInboxModal}\n          style={{\n            height: '34px',\n            width: '40px',\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'center'\n          }}\n        >\n          <i className={btnClass} />\n          {numberOfAttachments > 0 && (\n            <span\n              className=\"badge badge-pill\"\n              style={{\n                top: '25px',\n                left: '25px',\n                fontSize: '8px',\n                position: 'absolute',\n                display: 'flex',\n              }}\n            >\n              {numberOfAttachments}\n            </span>\n          )}\n        </Button>\n      </div>\n    );\n  }\n}\n","export const PermissionConst = {\n  Read: 0,\n  Write: 1,\n  Share: 2,\n  Delete: 3,\n  ImportElements: 4,\n  PassOwnerShip: 5\n};\n","import React, { useContext, useEffect } from 'react';\nimport { observer } from 'mobx-react';\nimport { Button } from 'react-bootstrap';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\n\nconst SampleTaskNavigationElement = ({}) => {\n  const sampleTasksStore = useContext(StoreContext).sampleTasks;\n\n  const loadSampleTasks = () => {\n    sampleTasksStore.load();\n  }\n\n  useEffect(loadSampleTasks, []) // do this once at the creation of the component\n\n  const title = `${sampleTasksStore.openSampleTaskCount} open Sample Tasks`\n\n  return (\n    <div style={{ position: 'relative', display: 'inline-block' }}>\n      <Button\n        id=\"inbox-button\"\n        title={title}\n        bsStyle=\"default\"\n        onClick={sampleTasksStore.showSampleTaskInbox}\n        style={{\n          height: '34px',\n          width: '40px',\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'center'\n        }}\n      >\n        <i className=\"fa fa-image fa-lg\" />\n        {sampleTasksStore.openSampleTaskCount > 0 && (\n          <span\n            className=\"badge badge-pill\"\n            style={{\n              top: '25px',\n              left: '25px',\n              fontSize: '8px',\n              position: 'absolute',\n              display: 'flex',\n            }}\n          >\n            {sampleTasksStore.openSampleTaskCount}\n          </span>\n        )}\n      </Button>\n    </div>\n  );\n}\n\nexport default observer(SampleTaskNavigationElement);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ButtonGroup } from 'react-bootstrap';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport CreateButton from 'src/components/contextActions/CreateButton';\nimport SplitElementBtn from 'src/components/contextActions/SplitElementBtn';\nimport ReportUtilButton from 'src/components/contextActions/ReportUtilButton';\nimport ExportImportButton from 'src/components/contextActions/ExportImportButton';\nimport ScanCodeButton from 'src/components/contextActions/ScanCodeButton';\nimport NoticeButton from 'src/components/contextActions/NoticeButton';\nimport InboxButton from 'src/components/contextActions/InboxButton';\nimport { PermissionConst } from 'src/utilities/PermissionConst';\nimport SampleTaskNavigationElement from 'src/components/sampleTaskInbox/SampleTaskNavigationElement';\n\nexport default class ContextActions extends React.Component {\n  constructor(props) {\n    super(props);\n    const uiState = UIStore.getState();\n    this.state = {\n      uiState\n    };\n  }\n\n  componentDidMount() {\n    UIStore.listen((state) => this.onChange(state));\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten((state) => this.onChange(state));\n  }\n\n  onChange(state) {\n    const uiState = state;\n    this.setState({\n      uiState\n    });\n  }\n\n  isCreateDisabled() {\n    const { currentCollection } = this.state.uiState;\n    return currentCollection && ((currentCollection.label == 'All' && currentCollection.is_locked)\n      || (currentCollection.is_shared && currentCollection.is_synchronized == false) || (currentCollection.is_sync_to_me && currentCollection.permission_level < PermissionConst.Write));\n  }\n\n  isDisabled() {\n    const { currentCollection } = this.state.uiState;\n\n    if (currentCollection) {\n      if ((currentCollection.label == 'All' && currentCollection.is_locked)\n        || (currentCollection.is_shared == true && currentCollection.permission_level < PermissionConst.ImportElements)) { return true; }\n    }\n\n    return false;\n  }\n\n  render() {\n    const { updateModalProps, customClass } = this.props;\n    return (\n      <div style={{ display: 'inline', float: 'left', marginRight: 10 }}>\n        <ButtonGroup>\n          <ExportImportButton\n            isDisabled={this.isDisabled()}\n            updateModalProps={updateModalProps}\n            customClass={customClass}\n          />\n          <ReportUtilButton isDisabled={this.isDisabled()} customClass={customClass} />\n        </ButtonGroup>\n        <ButtonGroup style={{ marginLeft: '10px' }}>\n          <CreateButton isDisabled={this.isCreateDisabled()} customClass={customClass} />\n        </ButtonGroup>\n        {/* <ButtonGroup style={{ marginLeft: '10px' }}>\n          <ScanCodeButton customClass={customClass} />\n        </ButtonGroup> */}\n        {/* <ButtonGroup style={{ marginLeft: '10px' }}>\n          <InboxButton />\n        </ButtonGroup> */}\n        {/* <ButtonGroup style={{ marginLeft: '10px' }}>\n          <SampleTaskNavigationElement />\n        </ButtonGroup> */}\n        <ButtonGroup style={{ marginLeft: '20px' }}>\n          <NoticeButton />\n        </ButtonGroup>\n      </div>\n    );\n  }\n}\n\nContextActions.propTypes = {\n  updateModalProps: PropTypes.func.isRequired,\n  customClass: PropTypes.string,\n};\n\nContextActions.defaultProps = {\n  customClass: null,\n};\n","import React from 'react';\nimport { NavDropdown, Navbar, MenuItem } from 'react-bootstrap';\n\nconst Title = (\n  <span>\n    <img alt=\"chemotion-\" src=\"/images/repo/Repository_logo.png\" style={{ width: '20%' }} />\n    {' '}\n    Repository\n  </span>\n);\n\nfunction NavHead() {\n  return (\n    <Navbar.Brand>\n      <NavDropdown title={Title} className=\"navig-brand navig-smaller-font\" id=\"bg-nested-dropdown-brand\">\n        <MenuItem eventKey=\"21\" href=\"/home/welcome/\">\n          Home\n        </MenuItem>\n        <MenuItem eventKey=\"22\" href=\"/home/publications\">\n          Publications\n        </MenuItem>\n        <MenuItem eventKey=\"23\" href=\"/home/about\">\n          About\n        </MenuItem>\n        <MenuItem eventKey=\"24\" href=\"/home/directive\">\n          Directive\n        </MenuItem>\n        <MenuItem eventKey=\"25\" href=\"/home/preservation\">\n          Preservation Strategy\n        </MenuItem>\n        <MenuItem eventKey=\"26\" href=\"/home/imprint\">\n          Imprint\n        </MenuItem>\n      </NavDropdown>\n    </Navbar.Brand>\n  );\n}\n\nNavHead.propTypes = {\n};\n\nexport default NavHead;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from 'react-bootstrap';\nimport UIActions from 'src/stores/alt/actions/UIActions';\n\nfunction NavigationModal({\n  show, title, component, customModal, ...props\n}) {\n  const Component = component;\n  if (!show) return (<span />);\n\n  return (\n    <Modal\n      dialogClassName={customModal}\n      animation={false}\n      show={show}\n      onHide={() => UIActions.hideModal()}\n    >\n      <Modal.Header closeButton>\n        <Modal.Title>\n          {title}\n        </Modal.Title>\n      </Modal.Header>\n      <Modal.Body>\n        <Component onHide={() => UIActions.hideModal()} {...props} />\n      </Modal.Body>\n    </Modal>\n  );\n}\n\nNavigationModal.propTypes = {\n  show: PropTypes.bool,\n  customModal: PropTypes.string,\n  component: PropTypes.func,\n  title: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.element\n  ]),\n};\n\nNavigationModal.defaultProps = {\n  show: false,\n  customModal: '',\n  component: null,\n  title: '',\n};\n\nexport default NavigationModal;\n","import React from 'react';\nimport { Nav, Navbar, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport UserAuth from 'src/components/navigation/UserAuth';\nimport Search from 'src/components/navigation/search/Search';\nimport ManagingActions from 'src/components/managingActions/ManagingActions';\nimport ContextActions from 'src/components/contextActions/ContextActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport NavNewSession from 'src/components/navigation/NavNewSession'\nimport NavHead from 'src/components/navigation/RepoNavHead';\nimport DocumentHelper from 'src/utilities/DocumentHelper';\nimport NavigationModal from 'src/components/navigation/NavigationModal';\nimport PropTypes from 'prop-types';\nimport OpenCalendarButton from 'src/components/calendar/OpenCalendarButton';\n\nconst colMenuTooltip = <Tooltip id=\"col_menu_tooltip\">Toggle sidebar</Tooltip>;\n\nexport default class Navigation extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentUser: null,\n      genericEls: null,\n      modalProps: {\n        show: false,\n        title: \"\",\n        component: \"\",\n        action: null,\n        listSharedCollections: false,\n      },\n      omniauthProviders: []\n    }\n    this.onChange = this.onChange.bind(this);\n    this.onUIChange = this.onUIChange.bind(this);\n    this.toggleCollectionTree = this.toggleCollectionTree.bind(this);\n    this.updateModalProps = this.updateModalProps.bind(this);\n  }\n\n  componentDidMount() {\n    UIStore.listen(this.onUIChange)\n    UserStore.listen(this.onChange);\n    UserActions.fetchCurrentUser();\n    UserActions.fetchGenericEls();\n    UserActions.fetchOmniauthProviders();\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onUIChange)\n    UserStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    let newId = state.currentUser ? state.currentUser.id : null\n    let oldId = this.state.currentUser ? this.state.currentUser.id : null\n    if (newId !== oldId) {\n      this.setState({\n        currentUser: state.currentUser\n      });\n    }\n    if (this.state.genericEls === null) {\n      this.setState({\n        genericEls: state.genericEls\n      });\n    }\n    if (state.omniauthProviders !== this.state.omniauthProviders) {\n      this.setState({\n        omniauthProviders: state.omniauthProviders\n      });\n    }\n\n    if (state.extraRules !== this.state.extraRules) {\n      this.setState({\n        extraRules: state.extraRules\n      });\n    }\n  }\n\n  onUIChange(state) {\n    this.setState({\n      modalProps: state.modalParams\n    });\n  }\n\n  toggleCollectionTree() {\n    this.props.toggleCollectionTree();\n  }\n\n  token() {\n    return DocumentHelper.getMetaContent(\"csrf-token\")\n  }\n\n  updateModalProps(modalProps) {\n    this.setState({ modalProps });\n    UIActions.updateModalProps(modalProps);\n  }\n\n  navHeader() {\n    return (\n      <Navbar.Header className=\"collec-tree\">\n        <Navbar.Text style={{ cursor: \"pointer\" }}>\n          <OverlayTrigger placement=\"right\" delayShow={1000} overlay={colMenuTooltip}>\n            <i\n              className=\"fa fa-list\"\n              style={{ fontStyle: \"normal\", visibility: this.props.isHidden ? 'hidden' : 'visible' }}\n              onClick={this.toggleCollectionTree}\n            />\n          </OverlayTrigger>\n        </Navbar.Text>\n        <Navbar.Text />\n        <NavHead />\n      </Navbar.Header>\n    )\n  }\n\n  render() {\n    const { modalProps, genericEls, omniauthProviders, extraRules } = this.state;\n    const { profile } = UserStore.getState();\n    // const { customClass } = (profile && profile.data) || {};\n    const customClass = 'btn-unified'\n\n    return (this.state.currentUser\n      ? <Navbar fluid className='navbar-custom'>\n        {this.navHeader()}\n        <Nav navbar className='navbar-form' style={{ visibility: this.props.isHidden ? 'hidden' : 'visible' }}>\n          <Search />\n          <ManagingActions updateModalProps={this.updateModalProps} customClass={customClass} genericEls={genericEls} />\n          <ContextActions updateModalProps={this.updateModalProps} customClass={customClass} />\n          <NavigationModal {...modalProps} />\n        </Nav>\n        <UserAuth />\n        <OpenCalendarButton />\n        <div style={{ clear: \"both\" }} />\n      </Navbar>\n      : <Navbar fluid className='navbar-custom'>\n        {this.navHeader()}\n        <Nav navbar className='navbar-form' style={{ visibility: this.props.isHidden ? 'hidden' : 'visible' }}>\n          <Search noSubmit={true} />\n        </Nav>\n        <NavNewSession authenticityToken={this.token()} omniauthProviders={omniauthProviders} extraRules={extraRules} />\n        <div style={{ clear: \"both\" }} />\n      </Navbar>\n    )\n  }\n}\n\nNavigation.propTypes = {\n  isHidden: PropTypes.bool,\n};\n\nNavigation.defaultProps = {\n  isHidden: false,\n};\n","import React, { useContext, useState } from 'react';\nimport { useDrop } from 'react-dnd';\nimport { Button, Panel } from 'react-bootstrap';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport { ConfirmModal } from 'src/components/common/ConfirmModal';\n\nconst SampleTaskCard = ({ sampleTask }) => {\n  const sampleTasksStore = useContext(StoreContext).sampleTasks;\n  const [sample, setSample] = useState(null);\n  const [showDeletionConfirmationDialog, setShowDeletionConfirmationDialog] = useState(false);\n  const [_spec, dropRef] = useDrop({\n    accept: [\n      DragDropItemTypes.SAMPLE,\n      DragDropItemTypes.MATERIAL\n    ],\n    drop: (item, monitor) => {\n      if (monitor.getItemType() === 'sample') {\n        setSample(item.element);\n      }\n      if (monitor.getItemType() === 'material') {\n        setSample(item.material);\n      }\n    }\n  });\n\n  const removeSample = () => { setSample(null) };\n  const saveSampleTask = () => { sampleTasksStore.assignSample(sample, sampleTask); }\n  const panelHeading = () => {\n    if (sampleTask.short_label && sampleTask.display_name) {\n      return `${sampleTask.short_label} ${sampleTask.display_name}`\n    } else {\n      return sampleTask.description\n    }\n  }\n  const sampleImage = () => {\n    return sampleTask.sample_svg_file\n      ? <img src={\"/images/samples/\" + sampleTask.sample_svg_file} />\n      : 'no image available'\n  }\n  const sampleDropzone = () => {\n    const style = {\n      padding: 10,\n      borderStyle: 'dashed',\n      textAlign: 'center',\n      color: 'gray',\n      marginTop: '12px',\n      marginBottom: '8px'\n    };\n\n    return (\n      <div style={style} ref={dropRef}>\n        Drop Sample here to write scanned data into it.\n      </div>\n    );\n  };\n  const contentForSampleTask = () => {\n    if (sampleTask.scan_results.length > 0) {\n      const scan_results = sampleTask.scan_results.map(scan_result => {\n        return (\n          <li key={`scanResult-${scan_result.id}`}>\n            <a href={`/api/v1/attachments/image/${scan_result.attachment_id}`} target=\"_blank\">\n              {scan_result.title}: {scan_result.measurement_value}{scan_result.measurement_unit}\n            </a>\n          </li>\n        )\n      })\n      const sample_task_result = sampleTask.result_value\n        ? (<li><strong>Result:</strong> {sampleTask.result_value}{sampleTask.result_unit}</li>)\n        : ''\n\n      return (\n        <ul>\n          {scan_results}\n          {sample_task_result}\n        </ul>\n      )\n    } else {\n      return \"No scan data available\";\n    }\n  }\n  const droppedSample = () => {\n    if (!sample) { return null; }\n\n    return (\n      <div>\n        <div>\n          {sample.short_label}: {sample.showed_name}\n        </div>\n        <button className=\"btn btn-danger\" type=\"button\" onClick={removeSample}>clear Sample</button>\n        <button className=\"btn btn-success pull-right\" type=\"button\" onClick={saveSampleTask}>save data to Sample</button>\n      </div>\n    );\n  };\n\n  const contentForSample = () => {\n    if (sampleTask.sample_id) { return sampleImage() }\n    else if (sample) { return droppedSample() }\n    else { return sampleDropzone() }\n  }\n\n  const deleteButton = () => {\n    return (\n      <Button bsStyle=\"danger\" className=\"pull-right\" bsSize=\"xsmall\" onClick={() => setShowDeletionConfirmationDialog(true)}>\n        <i className=\"fa fa-trash-o\" />\n      </Button>\n    );\n  }\n\n  const deleteSampleTask = (confirmationResult) => {\n    setShowDeletionConfirmationDialog(false);\n    if (confirmationResult != true) return;\n\n    sampleTasksStore\n      .deleteSampleTask(sampleTask)\n      .then(result => {\n        let level = 'success'\n        let message = 'Sample task successfully deleted'\n\n        if (result.error) {\n          level = 'error'\n          message = result.error\n        }\n\n        const notification = {\n          title: message,\n          message: message,\n          level: level,\n          dismissible: 'button',\n          autoDismiss: 5,\n          position: 'tr',\n          uid: 'SampleTaskInbox'\n        };\n        NotificationActions.add(notification);\n      });\n  }\n\n  const sampleTaskStillOpenReasons = () => {\n    let reasons = [];\n    if (sampleTask.sample_id == null) reasons.push('The task has no sample assigned');\n    if (sampleTask.required_scan_results > sampleTask.scan_results.length) {\n      let missing_scan_results = sampleTask.required_scan_results - sampleTask.scan_results.length;\n      if (missing_scan_results == 1) reasons.push('The task needs one more scan result');\n      if (missing_scan_results > 1) reasons.push(`The tasks needs ${missing_scan_results} more scan results`);\n    }\n\n    return reasons;\n  }\n\n  const deletionConfirmationContent = () => {\n    return (\n      <div>\n        <p>Deletion of a Scan Task cannot be undone. Please check carefully</p>\n        <p>The task is missing the following to be completed:</p>\n        <ul>\n          {sampleTaskStillOpenReasons().map((reason) => (<li>{reason}</li>))}\n        </ul>\n      </div>\n    );\n  }\n\n  return (\n    <Panel bsStyle=\"info\">\n      <Panel.Heading>\n        {panelHeading()}\n        {deleteButton()}\n      </Panel.Heading>\n      <Panel.Body>\n        <div className=\"row\">\n          <div className=\"col-sm-6\">\n            {contentForSample(sampleTask, dropRef)}\n          </div>\n          <div className=\"col-sm-6\">\n            {contentForSampleTask(sampleTask)}\n          </div>\n        </div>\n      </Panel.Body>\n      <ConfirmModal\n        showModal={showDeletionConfirmationDialog}\n        title=\"Are you sure?\"\n        content={deletionConfirmationContent()}\n        onClick={deleteSampleTask}\n      />\n    </Panel>\n  )\n}\nexport default SampleTaskCard;\n","import React, { useContext } from 'react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport { Glyphicon } from 'react-bootstrap';\nimport { observer } from 'mobx-react';\n\nconst SampleTaskReloadButton = ({}) => {\n  const sampleTasksStore = useContext(StoreContext).sampleTasks;\n\n  return (\n    <Glyphicon\n      bsSize=\"small\"\n      style={{ cursor: 'Pointer' }}\n      glyph=\"refresh\"\n      title=\"Reload sample tasks\"\n      onClick={sampleTasksStore.load}\n    />\n  );\n}\nexport default observer(SampleTaskReloadButton);\n","import { DragDropItemTypes } from 'src/utilities/DndConst';\nimport Draggable from 'react-draggable';\nimport React, { useContext } from 'react';\nimport SampleTaskCard from 'src/components/sampleTaskInbox/SampleTaskCard';\nimport SampleTaskReloadButton from 'src/components/sampleTaskInbox/SampleTaskReloadButton';\nimport { Button, Panel } from 'react-bootstrap';\nimport { observer } from 'mobx-react';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport { useDrop } from 'react-dnd';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nconst SampleTaskInbox = ({}) => {\n  const sampleTasksStore = useContext(StoreContext).sampleTasks;\n\n  const getSampleFromItem = (item, itemType) => {\n    if (itemType === 'sample') {\n      return item.element;\n    }\n    if (itemType === 'material') {\n      return item.material;\n    }\n  }\n  const dropConfig = (required_scan_results = 1) => {\n    return {\n      accept: [\n        DragDropItemTypes.SAMPLE,\n        DragDropItemTypes.MATERIAL\n      ],\n      drop: (item, monitor) => {\n        let sample = getSampleFromItem(item, monitor.getItemType())\n        let sampleTaskForSampleAlreadyExists = sampleTasksStore.sampleTaskForSample(sample.id);\n        if (sampleTaskForSampleAlreadyExists) {\n          // create notification\n          sendErrorNotification(`SampleTask for sample id ${sample.id} already exists`);\n        } else {\n          sampleTasksStore.createSampleTask(sample.id, required_scan_results);\n        }\n      },\n    }\n  };\n  const [_colProps1, singleScanDropRef] = useDrop(dropConfig(1));\n  const [_colProps2, doubleScanDropRef] = useDrop(dropConfig(2));\n  const sendErrorNotification = (message) => {\n    const notification = {\n      title: message,\n      message: message,\n      level: 'error',\n      dismissible: 'button',\n      autoDismiss: 5,\n      position: 'tr',\n      uid: 'SampleTaskInbox'\n    };\n    NotificationActions.add(notification);\n  }\n\n  const openSampleTaskCount = () => {\n    let count = sampleTasksStore.openSampleTaskCount;\n    if (count === 0) { return 'no'; }\n    return count;\n  }\n\n  const openSampleTasks = () => {\n    return sampleTasksStore.sortedSampleTasks.map(\n      sampleTask => (<SampleTaskCard sampleTask={sampleTask} key={`sampleTask_${sampleTask.id}`} />)\n    );\n  }\n\n  const sampleDropzone = (dropRef, text) => {\n    const style = {\n      padding: 10,\n      borderStyle: 'dashed',\n      textAlign: 'center',\n      color: 'gray',\n      marginTop: '12px',\n      marginBottom: '8px'\n    };\n\n    return (\n      <Panel>\n        <Panel.Footer>\n          <div style={style} ref={dropRef}>\n            {text}\n          </div>\n        </Panel.Footer>\n      </Panel>\n    );\n  };\n\n  let display_value = sampleTasksStore.inboxVisible ? 'block' : 'none';\n\n  return (\n    <Draggable\n      handle=\".handle\"\n      bounds=\"body\"\n    >\n      <Panel\n        bsStyle=\"primary\"\n        className=\"sampleTaskInbox small-col col-md-6\"\n        style={{\n          zIndex: 10, position: 'absolute', top: '70px', left: '10px', display: display_value,\n          maxHeight: '80%'\n        }}\n      >\n        <Panel.Heading className=\"handle\">\n          <div className=\"row\">\n            <div className=\"col-md-1\">\n              <SampleTaskReloadButton />\n            </div>\n            <div className=\"col-md-10\">{openSampleTaskCount()} open SampleTasks</div>\n            <div className=\"col-md-1\">\n              <Button\n                bsStyle=\"danger\"\n                bsSize=\"xsmall\"\n                className=\"button-right\"\n                onClick={sampleTasksStore.hideSampleTaskInbox}\n              >\n                <i className=\"fa fa-times\" />\n              </Button>\n            </div>\n          </div>\n        </Panel.Heading>\n        <Panel.Body>\n          <div className=\"row sampleTaskCreationDropzones\">\n            <div className=\"col-sm-6\">\n              {sampleDropzone(singleScanDropRef, 'Single Scan (weighing only compound)')}\n            </div>\n            <div className=\"col-sm-6\">\n              {sampleDropzone(doubleScanDropRef, 'Double Scan (weighing vessel and vessel+compound to calculate difference')}\n            </div>\n          </div>\n          <div className=\"openSampleTasks\" style={{ maxHeight: '500px', overflow: 'scroll' }}>\n            {openSampleTasks()}\n          </div>\n        </Panel.Body>\n      </Panel>\n    </Draggable>\n  );\n}\n\nexport default observer(SampleTaskInbox);\n","import 'whatwg-fetch';\n\nexport default class ProfilesFetcher {\n  static uploadUserTemplates(prms) {\n    return fetch('/api/v1/profiles', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(prms)\n    }).then((response) => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static deleteUserTemplate(prms) {\n    return fetch('/api/v1/profiles', {\n      credentials: 'same-origin',\n      method: 'delete',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(prms)\n    }).then((response) => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}","import ProfilesFetcher from 'src/fetchers/ProfilesFetcher';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nconst key = 'ketcher-tmpls';\n\nconst createAddAttachmentidToNewUserTemplate = async (newValue, newItem, deleteIdx) => {\n  const res = await ProfilesFetcher.uploadUserTemplates({\n    content: JSON.stringify(newItem),\n  }).catch(err => console.log(\"err in create\"));\n  const attachment_id = res?.template_details?.filename;\n  newItem['props']['path'] = attachment_id;\n  newValue[newValue.length - 1] = newItem;\n  if (deleteIdx) newValue.splice(deleteIdx, 1);\n  window.removeEventListener('storage', null);\n  localStorage.setItem(key, JSON.stringify(newValue));\n};\n\nconst removeUserTemplate = async (listOfLocalid, oldValue) => {\n  for (let i = 0; i < oldValue.length; i++) {\n    const localItem = oldValue[i];\n    const itemIndexShouldBeRemoved = listOfLocalid.indexOf(\n      localItem.props.path\n    );\n    if (itemIndexShouldBeRemoved === -1) {\n      ProfilesFetcher.deleteUserTemplate({\n        path: localItem?.props.path,\n      });\n      break;\n    }\n  }\n};\n\nconst updateUserTemplateDetails = async (oldValue, newValue) => {\n  const listOfLocalNames = newValue.map(\n    (item) => JSON.parse(item.struct).header.moleculeName\n  );\n  for (let i = 0; i < oldValue.length; i++) {\n    const localItem = JSON.parse(oldValue[i].struct);\n    const exists = listOfLocalNames.indexOf(localItem.header.moleculeName) !== -1;\n    if (!exists) {\n      await ProfilesFetcher.deleteUserTemplate({\n        path: oldValue[i].props.path,\n      }).catch(() =>\n        console.log('ISSUE WITH DELETE', localItem?.props?.path)\n      );\n      createAddAttachmentidToNewUserTemplate(newValue, newValue[i], i);\n      break;\n    }\n  }\n};\n\nconst onEventListen = async (event) => {\n  let { newValue, oldValue } = event;\n  if (newValue.length && oldValue.length) {\n    newValue = JSON.parse(newValue);\n    oldValue = JSON.parse(oldValue);\n    if (event.key === key) { // matching key && deleteAllowed\n      if (newValue.length > oldValue.length) { // when a new template is added\n        let newItem = newValue[newValue.length - 1];\n        createAddAttachmentidToNewUserTemplate(newValue, newItem);\n      } else if (newValue.length < oldValue.length) { // when a template is deleted\n        const listOfLocalid = newValue.map((item) => item.props.path);\n        removeUserTemplate(listOfLocalid, oldValue);\n      } else if (newValue.length == oldValue.length) { // when a template is update atom id, bond id\n        updateUserTemplateDetails(oldValue, newValue);\n      }\n    } else if (event.key === 'ketcher-opts') {\n      UsersFetcher.updateUserKetcher2Options(event.newValue);\n    }\n  }\n};\n\nexport default onEventListen;","import { FlowViewerModal } from 'chem-generic-ui';\nimport React, { Component } from 'react';\nimport { Button, Col, Grid, Row } from 'react-bootstrap';\nimport CollectionManagement from 'src/apps/mydb/collections/CollectionManagement';\nimport CollectionTree from 'src/apps/mydb/collections/CollectionTree';\nimport Elements from 'src/apps/mydb/elements/Elements';\nimport InboxModal from 'src/apps/mydb/inbox/InboxModal';\nimport Calendar from 'src/components/calendar/Calendar';\nimport LoadingModal from 'src/components/common/LoadingModal';\nimport ProgressModal from 'src/components/common/ProgressModal';\nimport Navigation from 'src/components/navigation/Navigation';\nimport Notifications from 'src/components/Notifications';\nimport SampleTaskInbox from 'src/components/sampleTaskInbox/SampleTaskInbox';\nimport KeyboardActions from 'src/stores/alt/actions/KeyboardActions';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport OnEventListen from 'src/utilities/UserTemplatesHelpers';\n\n\n// For REPO\nimport { RepoReviewModal, RepoCommentModal } from 'repo-review-ui';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\nimport ReviewStore from 'src/stores/alt/repo/stores/ReviewStore';\nimport ContactEmail from 'src/components/chemrepo/core/ContactEmail';\n\n\nclass App extends Component {\n  constructor(_props) {\n    super();\n    this.state = {\n      showGenericWorkflow: false,\n      propGenericWorkflow: false,\n      showCollectionManagement: false,\n      indicatorClassName: 'fa fa-chevron-circle-left',\n      showCollectionTree: true,\n      mainContentClassName: 'small-col main-content',\n    };\n    this.handleUiStoreChange = this.handleUiStoreChange.bind(this);\n    this.documentKeyDown = this.documentKeyDown.bind(this);\n    this.toggleCollectionTree = this.toggleCollectionTree.bind(this);\n    this.handleReviewStoreChange = this.handleReviewStoreChange.bind(this);\n    this.handleSubmitReview = this.handleSubmitReview.bind(this);\n    this.handleReviewUpdate = this.handleReviewUpdate.bind(this);\n\n  }\n\n  componentDidMount() {\n    UIStore.listen(this.handleReviewStoreChange);\n    ReviewStore.listen(this.handleReviewStoreChange);\n    UserActions.fetchOlsRxno();\n    UserActions.fetchOlsChmo();\n    UserActions.fetchOlsBao();\n    UserActions.fetchProfile();\n    UserActions.setUsertemplates();\n    UserActions.fetchUserLabels();\n    UserActions.fetchGenericEls();\n    UserActions.fetchSegmentKlasses();\n    UserActions.fetchDatasetKlasses();\n    UserActions.fetchEditors();\n    UserActions.fetchKetcher2Options();\n    UIActions.initialize.defer();\n    this.patchExternalLibraries();\n\n    document.addEventListener('keydown', this.documentKeyDown);\n    window.addEventListener('storage', this.handleStorageChange);\n\n    // user templates\n    this.removeLocalStorageEventListener();\n    this.storageListener();\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.handleUiStoreChange);\n    document.removeEventListener('keydown', this.documentKeyDown);\n    this.removeLocalStorageEventListener();\n  }\n\n  removeLocalStorageEventListener() {\n    window.removeEventListener('storage', this.storageListener);\n  }\n\n  storageListener() {\n    window.addEventListener(\n      'storage',\n      OnEventListen,\n      false\n    );\n  }\n\n  handleUiStoreChange(state) {\n    if (this.state.showCollectionManagement !== state.showCollectionManagement) {\n      this.setState({ showCollectionManagement: state.showCollectionManagement });\n    }\n\n    if (this.state.klasses !== state.klasses) {\n      this.setState({ klasses: state.klasses });\n    }\n    if (this.state.showGenericWorkflow !== state.showGenericWorkflow ||\n      this.state.propGenericWorkflow !== state.propGenericWorkflow) {\n      this.setState({ showGenericWorkflow: state.showGenericWorkflow, propGenericWorkflow: state.propGenericWorkflow });\n    }\n  }\n  handleReviewStoreChange(state) {\n    this.setState(prevState => ({ ...prevState, ...state }));\n  }\n\n  handleSubmitReview(elementId, elementType, comment, btnAction, checklist, reviewComments){\n    // LoadingActions.start();\n    ReviewActions.reviewPublish(elementId, elementType, comment, btnAction, checklist, reviewComments);\n    this.setState({ showReviewModal: false });\n  }\n\n  handleCommentUpdate(elementId, elementType, field, commentInput, origInfo) {\n    const cinfo = {};\n    if (typeof (cinfo[field]) === 'undefined') {\n      cinfo[field] = {};\n    }\n    cinfo[field].comment = commentInput;\n    cinfo[field].origInfo = origInfo;\n    ReviewActions.updateComment(elementId, elementType, cinfo);\n  }\n\n  handleReviewUpdate(e, col, rr) {\n    const { review } = this.state;\n    const checklist = rr.checklist || {};\n    if (typeof (checklist[col]) === 'undefined') checklist[col] = {};\n    checklist[col].status = e.target.checked;\n    review.checklist = checklist;\n    ReviewActions.updateReview(review);\n  }\n\n  documentKeyDown(event) {\n    // Only trigger arrow and Enter keys ON BODY\n    // Ignore on other element\n    if (event.target.tagName.toUpperCase() === 'BODY' && [13, 38, 39, 40].includes(event.keyCode)) {\n      KeyboardActions.documentKeyDown(event.keyCode);\n    }\n  }\n\n  patchExternalLibraries() {\n    const { plugins } = require('@citation-js/core');\n    plugins.input.add('@doi/api', {\n      parseType: {\n        dataType: 'String',\n        predicate: /\\b(https?:\\/\\/(?:dx\\.)?doi\\.org\\/(10[.][0-9]{4,}(?:[.][0-9]+)*\\/(?:(?![\"&\\'])\\S)+))\\b/i,\n        extends: '@else/url'\n      }\n    });\n\n    plugins.input.add('@doi/id', {\n      parseType: {\n        dataType: 'String',\n        predicate: /\\b(10[.][0-9]{4,}(?:[.][0-9]+)*\\/(?:(?![\"&\\'])\\S)+)\\b/\n      }\n    });\n  }\n\n  toggleCollectionTree() {\n    const { showCollectionTree } = this.state;\n    this.setState({\n      showCollectionTree: !showCollectionTree,\n      indicatorClassName: showCollectionTree ? 'fa fa-chevron-circle-right' : 'fa fa-chevron-circle-left',\n      mainContentClassName: showCollectionTree ? 'small-col full-main' : 'small-col main-content'\n    });\n  }\n\n  collectionTree() {\n    const { showCollectionTree } = this.state;\n    if (!showCollectionTree) {\n      return <div />;\n    }\n\n    return (\n      <Col className=\"small-col collec-tree\">\n        <CollectionTree />\n        <div className=\"news-box\">\n          <p>New to the Repository? Explore the <a href=\"https://chemotion.net/docs/repo/settings_preparation\" target=\"_blank\" rel=\"noreferrer\">Preparation</a> & <a href=\"https://chemotion.net/docs/repo/workflow\" target=\"_blank\" rel=\"noreferrer\">Workflow</a> guide.</p>\n          <p>Guidelines: Discover <a href=\"https://chemotion.net/docs/repo/details_standards/reactions\" target=\"_blank\" rel=\"noreferrer\">Details and Standards</a></p>\n          <p>Learn More: Refer to our <a href=\"https://chemotion.net/docs/repo/references\" target=\"_blank\" rel=\"noreferrer\">Documentation</a></p>\n          <div>\n            {'Questions? Contact us via '}\n            <Button bsSize=\"small\" onClick={() => window.open('https://github.com/ComPlat/chemotion_REPO', '_blank')}>\n              <img\n                src=\"/images/repo/github-mark.svg\"\n                className=\"pubchem-logo\"\n                alt=\"Chemotion Repository at GitHub\"\n                title=\"Chemotion Repository at GitHub\"\n              />\n            </Button>\n            {' or '}\n            <ContactEmail label=\"\" />\n          </div>\n        </div>\n      </Col>\n    );\n  }\n\n  mainContent() {\n    const { showCollectionManagement, mainContentClassName } = this.state;\n    return (\n      <Col className={mainContentClassName}>\n        {showCollectionManagement ? <CollectionManagement /> : <Elements />}\n      </Col>\n    );\n  }\n\n  renderReviewModal() {\n    const { showReviewModal, review_info, review, currentElement, elementType, btnAction } = this.state;\n    const obj = {};\n    obj.review_info = review_info;\n    obj.review = review;\n    obj.btnAction = btnAction;\n    obj.elementType = elementType;\n    obj.elementId = elementType === 'sample' ? currentElement?.sample?.id : currentElement?.reaction?.id;\n    return (\n      <RepoReviewModal\n        show={showReviewModal}\n        data={obj}\n        onSubmit={this.handleSubmitReview}\n        onUpdate={this.handleReviewUpdate}\n        onHide={() => this.setState({ showReviewModal: false })}\n      />\n    );\n  }\n\n\n  renderCommentModal() {\n    const { showCommentModal, review_info, review, currentElement, elementType, btnAction, field, orgInfo } = this.state;\n    const obj = {};\n    obj['review_info'] = review_info;\n    obj['field'] = field;\n    obj['orgInfo'] = orgInfo;\n    obj['review'] = review;\n    obj['btnAction'] = btnAction;\n    obj['elementType'] = elementType;\n    if (elementType === 'sample') {\n      obj['elementId'] = currentElement?.sample?.id;\n    } else {\n      obj['elementId'] = currentElement?.reaction?.id;\n    }\n\n    return (\n      <RepoCommentModal\n        show={showCommentModal}\n        data={obj}\n        onUpdate={this.handleCommentUpdate}\n        onHide={() => this.setState({ showCommentModal: false })}\n      />\n    );\n  }\n\n  render() {\n    const { showCollectionTree, showGenericWorkflow, propGenericWorkflow } = this.state;\n    return (\n      <Grid fluid>\n        <Row className=\"card-navigation\">\n          <Navigation toggleCollectionTree={this.toggleCollectionTree} />\n          <SampleTaskInbox />\n        </Row>\n        <Row className=\"card-content container-fluid\">\n          {this.collectionTree()}\n          {this.mainContent()}\n        </Row>\n        <Row>\n          <Notifications />\n          <LoadingModal />\n          <ProgressModal />\n        </Row>\n        <FlowViewerModal\n          show={showGenericWorkflow || false}\n          data={propGenericWorkflow || {}}\n          fnHide={() => UIActions.showGenericWorkflowModal(false)}\n        />\n        <InboxModal showCollectionTree={showCollectionTree} />\n        <Calendar />\n        {this.renderReviewModal()}\n        {this.renderCommentModal()}\n      </Grid>\n    );\n  }\n}\n\nexport default App;\n","import Aviator from 'aviator';\nimport * as routesUtils from 'src/utilities/routesUtils';\nimport { loadEls } from 'src/apps/generic/Utils';\n\nconst routes = {\n  '/': 'root',\n  target: {\n    root() { Aviator.navigate('/collection/all'); }\n  },\n\n  '/collection': {\n    target: {\n      show: routesUtils.collectionShow,\n      showCollectionManagement: routesUtils.collectionShowCollectionManagement\n    },\n    '/management': 'showCollectionManagement',\n    '/:collectionID': 'show'\n  },\n\n  '/scollection': {\n    target: {\n      show: routesUtils.scollectionShow,\n      showCollectionManagement: routesUtils.collectionShowCollectionManagement\n    },\n    '/management': 'showCollectionManagement',\n    '/:collectionID': 'show'\n  },\n\n  '/metadata': {\n    target: {\n      showMetadata: routesUtils.metadataShowOrNew\n    },\n    '/': 'showMetadata'\n  },\n\n  '/report': {\n    target: {\n      showReport: routesUtils.reportShowReport\n    },\n    '/': 'showReport'\n  },\n\n  '/sample': {\n    target: {\n      showOrNew: routesUtils.sampleShowOrNew\n    },\n    '/:sampleID': 'showOrNew'\n  },\n\n  '/reaction': {\n    target: {\n      show: routesUtils.reactionShow,\n      showSample: routesUtils.reactionShowSample\n    },\n    '/:reactionID': 'show',\n    '/sample/:sampleID': 'showSample',\n  },\n  '/wellplate': {\n    target: {\n      showOrNew: routesUtils.wellplateShowOrNew,\n      showSample: routesUtils.wellplateShowSample\n    },\n    '/:wellplateID': 'showOrNew',\n    '/sample/:sampleID': 'showSample',\n  },\n  '/screen': {\n    target: {\n      showOrNew: routesUtils.screenShowOrNew\n    },\n    '/:screenID': 'showOrNew'\n  },\n  '/cell_line': {\n    target: {\n      showOrNew: routesUtils.cellLineShowOrNew\n    },\n    '/:cellLineID': 'showOrNew'\n  },\n  '/devicesAnalysis': {\n    target: {\n      create: routesUtils.devicesAnalysisCreate,\n      show: routesUtils.devicesAnalysisShow\n    },\n    '/new/:deviceId/:analysisType': 'create',\n    '/:analysisId': 'show',\n  },\n  '/device': {\n    target: {\n      show: routesUtils.deviceShow,\n      showDeviceManagement: routesUtils.deviceShowDeviceManagement,\n    },\n    '/management': 'showDeviceManagement',\n    '/:deviceId': 'show',\n  },\n  '/research_plan': {\n    target: {\n      showOrNew: routesUtils.researchPlanShowOrNew\n    },\n    '/:research_planID': 'showOrNew'\n  },\n  '/fwdRxnPrediction': {\n    target: {\n      showFwdRxnPrediction: routesUtils.predictionShowFwdRxn\n    },\n    '/': 'showFwdRxnPrediction'\n  },\n  '/genericEl': {\n    target: {\n      showOrNew: routesUtils.genericElShowOrNew\n    },\n    '/:genericElID': 'showOrNew'\n  }\n};\n\nfunction setRoutes() {\n  return loadEls().then((klassArray) => {\n    klassArray.forEach((klass) => {\n      if (!routes[`/${klass}`]) {\n        const item = {};\n        item.target = { showOrNew: routesUtils.genericElShowOrNew };\n        item[`/:${klass}ID`] = 'showOrNew';\n        routes[`/${klass}`] = item;\n      }\n    });\n  }).catch((error) => {\n    console.error('Error loading routes:', error);\n  }).finally(() => {\n    Aviator.root = '/mydb';\n    Aviator.pushStateEnabled = true;\n    Aviator.setRoutes(routes);\n  });\n}\n\nexport default function appRoutes() {\n  return setRoutes();\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport * as Sentry from '@sentry/react';\nimport { Integrations } from '@sentry/tracing';\nimport Aviator from 'aviator';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport App from 'src/apps/mydb/App';\nimport appRoutes from 'src/apps/mydb/routes';\nimport { RootStore, StoreContext } from 'src/stores/mobx/RootStore';\n\nSentry.init({\n  sendClientReports: false,\n  dsn: process.env.SENTRY_FRONTEND_DSN,\n  integrations: [new Integrations.BrowserTracing()],\n\n  // Set tracesSampleRate to 1.0 to capture 100%\n  // of transactions for performance monitoring.\n  // We recommend adjusting this value in production\n  tracesSampleRate: process.env.SENTRY_FRONTEND_SAMPLE_RATE,\n});\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('app');\n  if (domElement) {\n    ReactDOM.render(\n      <StoreContext.Provider value={RootStore.create({})}>\n        <DndProvider backend={HTML5Backend}>\n          <App />\n        </DndProvider>\n      </StoreContext.Provider>,\n      domElement\n    );\n    appRoutes().then(() => { Aviator.dispatch(); });\n  }\n});\n","import React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n  Row,\n  Col,\n  Grid,\n  Button\n} from 'react-bootstrap';\nimport uuid from 'uuid';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UserActions from 'src/stores/alt/actions/UserActions';\n\nfunction omniauthLabel(icon, name) {\n  if (icon) {\n    return (\n      <img src={`/images/providers/${icon}`} alt={name} title={name} />\n    );\n  }\n  return name;\n}\n\nexport default class LoginOptions extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      omniauthProviders: []\n    };\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n    UserActions.fetchOmniauthProviders();\n  }\n\n  onChange(state) {\n    const { omniauthProviders } = this.state;\n    if (state?.omniauthProviders !== omniauthProviders) {\n      this.setState({\n        omniauthProviders: state.omniauthProviders\n      });\n    }\n  }\n\n  render() {\n    const { omniauthProviders } = this.state;\n    const keys = Object.keys(omniauthProviders);\n    if (keys.length === 0) return (<span />);\n    const items = keys.map((key) => (\n      <Col key={uuid.v1()} md={12 / keys.length} className=\"login-options\">\n        <Button href={`/users/auth/${key}`}>\n          Login with &nbsp;\n          {omniauthLabel(omniauthProviders[key].icon, omniauthProviders[key].label || key)}\n        </Button>\n      </Col>\n    ));\n\n    return (\n      <Grid>\n        <Row>\n          {items}\n        </Row>\n      </Grid>\n    );\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('LoginOptions');\n  if (domElement) { ReactDOM.render(<LoginOptions />, domElement); }\n});\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport { Panel, Row, Col } from 'react-bootstrap';\nimport uuid from 'uuid';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nfunction OmniauthCredential() {\n  const notify = (_params) => {\n    NotificationActions.add({\n      title: _params.title, message: _params.msg, level: _params.lvl, position: 'tc', dismissible: 'button', uid: uuid.v4()\n    });\n  };\n\n  const [providers, setProviders] = useState(() => {\n    UsersFetcher.fetchUserOmniauthProviders().then((json) => {\n      const userProviders = (json?.current_user?.providers) || {};\n\n      setProviders(userProviders);\n    }).catch((err) => notify({ title: 'Fetch User Providers Error', lvl: 'error', msg: err }));\n    return (providers);\n  });\n\n  let omniauthProviders = (<span />);\n\n  if (typeof omniauthProviders !== 'undefined' && omniauthProviders !== null) {\n    omniauthProviders = providers && Object.keys(providers).map((key) => (\n      <Row key={uuid.v1()}>\n        <Col key={uuid.v1()} md={2} />\n        <Col key={uuid.v1()} md={5}>{key === 'orcid' ? 'ORCID iD': key}</Col>\n        <Col key={uuid.v1()} md={5}>{providers[key]}</Col>\n      </Row>\n    ));\n  }\n\n  return (\n    <Panel>\n      <Panel.Heading><Panel.Title>3rd-Party Credential</Panel.Title></Panel.Heading>\n      <Panel.Body>\n        {omniauthProviders}\n        <br />\n      </Panel.Body>\n    </Panel>\n  );\n}\n\nexport default OmniauthCredential;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport OmniauthCredential from 'src/apps/omniauthCredential/OmniauthCredential';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('OmniauthCredential');\n  if (domElement) { ReactDOM.render(<OmniauthCredential />, domElement); }\n});\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState, useEffect } from 'react';\nimport { Button, Panel, Row, Col } from 'react-bootstrap';\nimport moment from 'moment';\nimport uuid from 'uuid';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nconst ScifinderCredential = () => {\n  const [credential, setCredential] = useState({});\n  const notify = (_params) => {\n    NotificationActions.add({\n      title: _params.title, message: _params.msg, level: _params.lvl, position: 'tc', dismissible: 'button', uid: uuid.v4()\n    });\n  };\n\n  useEffect(() => {\n    UsersFetcher.scifinderCredential().then((json) => {\n      setCredential(json);\n    }).catch(err => notify({ title: 'SciFinder-n Error', lvl: 'error', msg: err }));\n  }, [credential.access_token]);\n\n  return (\n    <Panel>\n      <Panel.Heading><Panel.Title>SciFinder-n Credential</Panel.Title></Panel.Heading>\n      <Panel.Body>\n        <Row>\n          <Col sm={4}><b style={{ float: 'right' }}>Current token will expire at</b></Col>\n          <Col sm={4}>\n            {credential.expires_at ? `${moment(credential.expires_at).format('YYYY-MM-DD HH:mm:ss')} UTC` : ''}\n          </Col>\n          <Col sm={4}><Button bsStyle=\"primary\" href={`${window.location.origin}/users/auth/oauth2`}>Get token</Button></Col>\n        </Row>\n      </Panel.Body>\n    </Panel>\n  );\n};\n\nexport default ScifinderCredential;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport ScifinderCredential from 'src/apps/scifinderCredential/ScifinderCredential';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('ScifinderCredential');\n  if (domElement) { ReactDOM.render(<ScifinderCredential />, domElement); }\n});\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState, useEffect } from 'react';\nimport ReactDOM from 'react-dom';\nimport TreeSelect from 'antd/lib/tree-select';\nimport {\n  Button, Panel, Row, Col, FormGroup, FormControl\n} from 'react-bootstrap';\nimport InventoryFetcher from 'src/fetchers/InventoryFetcher';\nimport { find } from 'lodash';\n\nconst textInput = (label, value, onChange) => (\n  <FormGroup>\n    <FormControl\n      id={`input_${label}`}\n      type=\"text\"\n      value={value}\n      onChange={onChange}\n      disabled={false}\n      readOnly={false}\n    />\n  </FormGroup>\n);\n\nfunction InventoryLabelSettings() {\n  const [prefixValue, setPrefixValue] = useState('');\n  const [nameValue, setNameValue] = useState('');\n  const [counterValue, setCounterValue] = useState('');\n  const [options, setOptions] = useState([]);\n  const [selectedCollections, setSelectedValue] = useState(null);\n  const [currentInventoryCollection, setInventoryLabels] = useState(null);\n  const [spinner, setSpinner] = useState(false);\n  const [errorMessage, setErrorMessage] = useState(null);\n\n  const assignOptions = (inventoryCollections) => {\n    const assignedOptions = [];\n    let groupCounter = 0;\n\n    inventoryCollections.forEach((group) => {\n      const { collections, inventory } = group;\n\n      // If the group has an inventory, create a group label\n      if (inventory?.id) {\n        const groupLabel = `Collections in inventory: ${inventory.name}`;\n        const groupObject = { value: groupLabel, title: groupLabel, children: [] };\n\n        assignedOptions.push(groupObject);\n        groupObject.children = collections.map((collection) => ({\n          value: collection.id,\n          title: collection.label,\n        }));\n        groupCounter += 1;\n      } else {\n        // If there's no inventory, treat each collection individually\n        collections.forEach((collection) => {\n          assignedOptions.push({ value: collection.id, title: collection.label });\n        });\n      }\n    });\n\n    return assignedOptions;\n  };\n\n  useEffect(() => {\n    const fetchData = async () => {\n      try {\n        const combinedData = await InventoryFetcher.fetchLabelsAndCollections();\n        const [inventoryCollections] = [\n          combinedData.inventory_collections,\n        ];\n        if (inventoryCollections) {\n          const optionsArray = assignOptions(inventoryCollections);\n          setOptions(optionsArray);\n          setInventoryLabels(inventoryCollections);\n        }\n      } catch (error) {\n        console.error(error);\n      }\n    };\n    fetchData();\n  }, []);\n\n  const handlePrefixChange = (event) => {\n    const prefixString = event.target.value;\n    const regex = /^[A-Za-z]+$/;\n    if (regex.test(prefixString)) {\n      setPrefixValue(prefixString);\n      setErrorMessage(null);\n    } else {\n      setPrefixValue('');\n      setErrorMessage('prefix must be alphabetic');\n    }\n  };\n\n  const handleNameChange = (event) => {\n    setNameValue(event.target.value);\n    setErrorMessage(null);\n  };\n\n  const handleCounterChange = (event) => {\n    const inputValue = event.target.value;\n    const parsedValue = parseInt(inputValue, 10);\n    if (Number.isInteger(parsedValue) && !Number.isNaN(parsedValue)) {\n      setCounterValue(parsedValue);\n    } else {\n      setCounterValue('');\n    }\n  };\n\n  const updateInventoryLabelsArray = (collectionIds, updatedCollectionInventories) => {\n    const updateInventoryLabels = [...currentInventoryCollection];\n\n    updateInventoryLabels.forEach((obj) => {\n      if (collectionIds.includes(obj.id)) {\n        // eslint-disable-next-line no-param-reassign\n        obj.inventory = updatedCollectionInventories;\n      }\n      return obj;\n    });\n    const [inventoryCollections] = [\n      updatedCollectionInventories.inventory_collections,\n    ];\n    if (inventoryCollections) {\n      const optionsArray = assignOptions(inventoryCollections);\n      setOptions(optionsArray);\n      setInventoryLabels(inventoryCollections);\n    }\n  };\n\n  const findCollectionIds = (selectedOptions) => {\n    // find collections of Group\n    let collectionsIds = [];\n    if (typeof selectedOptions[0] === 'string') {\n      options.map((object) => {\n        if (object.title === selectedOptions[0]) {\n          collectionsIds = object.children.map((child) => child.value);\n        }\n        return null;\n      });\n    } else {\n      collectionsIds = selectedOptions;\n    }\n    return collectionsIds;\n  };\n\n  const collectCollectionIds = (selectedOptions) => {\n    // find collections of Group\n    const collectionsIds = selectedOptions;\n    selectedOptions?.map((group, index) => {\n      if (typeof group === 'string') {\n        const groupObject = find(options, { title: group });\n        collectionsIds[index] = groupObject.children.map((child) => child.value);\n      }\n      return collectionsIds;\n    });\n    return [].concat(...collectionsIds);\n  };\n\n  const updateUserSettings = () => {\n    setSpinner(true);\n    const collectionIds = collectCollectionIds(selectedCollections);\n    const prefixCondition = prefixValue !== undefined && prefixValue !== null && prefixValue !== '';\n    const nameCondition = nameValue !== undefined && nameValue !== null && nameValue !== '';\n    const counterCondition = counterValue !== undefined && counterValue !== null && counterValue !== '';\n    if (prefixCondition && nameCondition && counterCondition && collectionIds.length !== 0) {\n      setErrorMessage(null);\n      InventoryFetcher.updateInventoryLabel({\n        prefix: prefixValue,\n        name: nameValue,\n        counter: counterValue,\n        collection_ids: collectionIds\n      }).then((result) => {\n        setSpinner(false);\n        if (result.error_message) {\n          if (result.error_type === 'ActiveRecord::RecordNotUnique') {\n            setErrorMessage('Entered Prefix is not available. Please use a different prefix');\n          } else {\n            setErrorMessage('Please enter a valid name, prefix, and counter inputs before updating user settings');\n          }\n          setPrefixValue('');\n        } else {\n          updateInventoryLabelsArray(collectionIds, result);\n        }\n      });\n    } else {\n      const message = 'Please select the desired collection(s) and enter a valid name, prefix,'\n      + 'and counter inputs before updating user settings';\n      setErrorMessage(message);\n      setSpinner(false);\n    }\n  };\n\n  const findInventory = (selectedOption, selectedIds) => {\n    let inventoryArray = [];\n    let inventory = [];\n    if (selectedOption.length > 1 && selectedOption.some((item) => typeof item === 'string')) {\n      return null;\n    }\n    if ((selectedIds || typeof selectedOption[0] === 'string') && selectedOption.length === 1) {\n      inventoryArray = currentInventoryCollection.map((object) => (\n        object.collections.map((obj) => (obj.id === selectedIds[0] ? object.inventory : null))\n      ).filter((item) => item !== null));\n      inventory = inventoryArray?.flat()?.[0];\n    } else if (selectedIds && selectedIds.length > 1) {\n      const collectionGroup = currentInventoryCollection.map((object) => (\n        object.collections.map((obj) => obj.id))).filter((ids) => selectedIds.every((id) => ids.includes(id))).flat();\n      const index = currentInventoryCollection.map((object, i) => object.collections.map(\n        (obj) => (obj.id === collectionGroup[0] ? i : null)\n      )).flat().filter((item) => item !== null);\n      inventory = currentInventoryCollection[index]?.inventory;\n    }\n    return inventory;\n  };\n\n  const handleSelectOptionChange = (selectedOptions) => {\n    setSelectedValue(selectedOptions);\n    setErrorMessage(null);\n\n    const selectedIds = selectedOptions.length !== 0 ? findCollectionIds(selectedOptions) : null;\n    const inventory = selectedIds ? findInventory(selectedOptions, selectedIds) : null;\n    if (inventory) {\n      setCounterValue(inventory.counter);\n      setPrefixValue(inventory.prefix);\n      setNameValue(inventory.name);\n    } else {\n      setCounterValue(counterValue);\n      setPrefixValue(prefixValue);\n      setNameValue(nameValue);\n    }\n  };\n\n  const nextValue = counterValue !== '' && counterValue !== null ? `-${parseInt(counterValue + 1, 10)}` : '';\n  const prefixCondition = prefixValue !== undefined && prefixValue !== null && prefixValue !== '';\n  const nameCondition = nameValue !== undefined && nameValue !== null && nameValue !== '';\n  const nextInventoryLabel = prefixCondition && nameCondition ? `${prefixValue}${nextValue}` : null;\n  const message = (\n    <div className=\"text-danger\">\n      { errorMessage }\n    </div>\n  );\n\n  return (\n    <Panel className=\"inventory-label-settings\">\n      <Panel.Heading><Panel.Title>Sample Inventory Label</Panel.Title></Panel.Heading>\n      <Panel.Body>\n        <Row className=\"select-collection-id\">\n          <Col sm={2} className=\"select-collection-name\"><b>Select Collection:</b></Col>\n          <Col sm={3}>\n            <TreeSelect\n              name=\"names of collections\"\n              className=\"md:w-20rem w-full\"\n              selectionMode=\"multiple\"\n              style={{ width: '100%' }}\n              multiple\n              treeData={options}\n              onChange={(selectedOptions) => handleSelectOptionChange(selectedOptions)}\n              value={selectedCollections}\n            />\n          </Col>\n          <Col sm={1} className=\"inventory-counter-prefix-name\">\n            <b>name</b>\n          </Col>\n          <Col>{textInput('name', nameValue, handleNameChange)}</Col>\n          <Col sm={1} className=\"inventory-counter-prefix-name\">\n            <b>prefix</b>\n          </Col>\n          <Col>{textInput('prefix', prefixValue, handlePrefixChange)}</Col>\n          <Col sm={2} className=\"inventory-counter-starts-at\"><b>Counter starts at</b></Col>\n          <Col>{textInput('counter', counterValue, handleCounterChange)}</Col>\n        </Row>\n        <Row className=\"update-user-button\">\n          <Col sm={8} className=\"inventory-label-next-counter\">\n            <b>Next sample inventory label will be: </b>\n            {nextInventoryLabel}\n          </Col>\n          <Col sm={4} className=\"update-inventory-user-button\">\n            <Button\n              bsStyle=\"primary\"\n              className=\"text-center\"\n              onClick={() => { updateUserSettings(); }}\n            >\n              <div>\n                {spinner ? (\n                  <i className=\"fa fa-spinner fa-pulse\" aria-hidden=\"true\" />\n                ) : (\n                  'Update user settings'\n                )}\n              </div>\n            </Button>\n          </Col>\n        </Row>\n        { errorMessage !== null ? message : null }\n      </Panel.Body>\n    </Panel>\n  );\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('InventoryLabelSettings');\n  if (domElement) { ReactDOM.render(<InventoryLabelSettings />, domElement); }\n});\n","import React, { Component } from 'react';\nimport uuid from 'uuid';\nimport { Row, Col, Panel, Button, FormControl } from 'react-bootstrap';\n\nimport GenericElsFetcher from 'src/fetchers/GenericElsFetcher';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nclass UserCounter extends Component {\n  constructor(props) {\n    super(props);\n    this.state = { currentUser: null, klasses: [] };\n    this.onChange = this.onChange.bind(this);\n    this.fetchKlasses = this.fetchKlasses.bind(this);\n    this.handleCounterChange = this.handleCounterChange.bind(this);\n    this.handleUpdate = this.handleUpdate.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n    UserActions.fetchCurrentUser();\n    this.fetchKlasses();\n  }\n\n  onChange(state) {\n    const newId = state.currentUser ? state.currentUser.id : null;\n    const oldId = this.state.currentUser ? this.state.currentUser.id : null;\n    if (newId !== oldId) {\n      this.setState({ currentUser: state.currentUser });\n      this.fetchKlasses();\n    }\n  }\n\n  handleCounterChange(key, value) {\n    const { currentUser } = this.state;\n    const counters = (currentUser && currentUser.counters) || {};\n    counters[key] = value;\n    currentUser.counters = counters;\n    this.setState({ currentUser });\n  }\n\n  handleUpdate(type) {\n    const { currentUser } = this.state;\n    const counters = (currentUser && currentUser.counters) || {};\n    UsersFetcher.updateUserCounter({\n      type,\n      counter: counters[type] || 0,\n    })\n      .then(() => {\n        document.location.href = '/';\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  fetchKlasses() {\n    GenericElsFetcher.fetchElementKlasses().then(result => {\n      const genericEntities =\n        result && result.klass.filter(u => u.is_generic === true);\n      this.setState({ klasses: genericEntities || [] });\n    });\n  }\n\n  render() {\n    const { currentUser, klasses } = this.state;\n    const counterBody = (klasses || [])\n      .filter(k => k.is_active === true)\n      .map(klass => {\n        const counter = parseInt(\n          (currentUser && currentUser.counters[klass.name]) || 0,\n          10\n        );\n        const nextNum = `${currentUser && currentUser.initials}-${\n          klass.klass_prefix\n        }${counter + 1}`;\n        return (\n          <div key={uuid.v1()} style={{ marginTop: 10 }}>\n            <Row key={uuid.v1()}>\n              <Col sm={2}>{klass.label}</Col>\n              <Col sm={1}>{klass.klass_prefix}</Col>\n              <Col sm={3}>\n                <FormControl\n                  type=\"number\"\n                  value={counter}\n                  onChange={e =>\n                    this.handleCounterChange(klass.name, e.target.value)\n                  }\n                  min={0}\n                />\n              </Col>\n              <Col sm={2}>{nextNum}</Col>\n              <Col sm={4}>\n                <Button\n                  bsStyle=\"primary\"\n                  onClick={() => this.handleUpdate(klass.name)}\n                >\n                  Update counter\n                </Button>\n              </Col>\n            </Row>\n          </div>\n        );\n      });\n    if (klasses && klasses.length === 0) return <span />;\n    return (\n      <Panel>\n        <Panel.Heading>\n          <Panel.Title>Element Counter</Panel.Title>\n        </Panel.Heading>\n        <Panel.Body>\n          <Row>\n            <Col sm={2}>\n              <b>\n                <u>Element Label</u>\n              </b>\n            </Col>\n            <Col sm={1}>\n              <b>\n                <u>Prefix</u>\n              </b>\n            </Col>\n            <Col sm={3}>\n              <b>\n                <u>Counter starts at</u>\n              </b>\n            </Col>\n            <Col sm={2}>\n              <b>\n                <u>Next Label</u>\n              </b>\n            </Col>\n            <Col sm={4}>&nbsp;</Col>\n          </Row>\n          {counterBody}\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nexport default UserCounter;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport UserCounter from 'src/apps/userCounter/UserCounter';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('UserCounter');\n  if (domElement) { ReactDOM.render(<UserCounter />, domElement); }\n});\n","const CitationTypeMap = {\n  citedOwn: {\n    def: 'cited own work - reference describing exactly this experiment/same authors',\n    short: 'cited own work',\n    datacite: ['IsCitedBy']\n  },\n  citedRef: {\n    def: 'cited reference - reference describing the experiment done by others',\n    short: 'cited reference',\n    dataCite: ['Continues']\n  },\n  referTo: {\n    def: 'referring to - reference similar experiments or related literature',\n    short: 'referring to',\n    dataCite: ['References']\n  },\n  uncategorized: {\n    def: 'uncategorized - no citation type has been set',\n    short: 'uncategorized',\n    dataCite: []\n  }\n};\n\nconst CitationType = Object.keys(CitationTypeMap).filter(e => e !== 'uncategorized');\nconst CitationTypeEOL = ['cited', 'citing', null, ''];\n\nexport { CitationTypeMap, CitationType, CitationTypeEOL };\n","import alt from 'src/stores/alt/alt';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\n\n\nclass NotificationStore {\n  constructor() {\n    this.state = {\n      notificationSystem: null\n    }\n\n    this.bindListeners({\n      handleAdd: NotificationActions.add,\n      handleRemove: NotificationActions.remove,\n      handleRemoveByUid: NotificationActions.removeByUid,\n      handleNotificationImportSamplesFromFile: ElementActions.importSamplesFromFile,\n      handleUploadErrorNotify: NotificationActions.uploadErrorNotify,\n      handleSetComponentReference: NotificationActions.setComponentReference\n    })\n  }\n\n  handleAdd(notification) {\n    this.state.notificationSystem?.addNotification(notification);\n  }\n\n  handleRemove(notification) {\n    this.state.notificationSystem?.removeNotification(notification);\n  }\n\n  handleRemoveByUid(uid) {\n    this.state.notificationSystem?.removeNotification(uid);\n  }\n\n  handleClearNotifications() {\n    this.state.notificationSystem?.clearNotifications();\n  }\n\n  handleNotificationImportSamplesFromFile(result) {\n    const num = result.data?.length ?? 0;\n    const { status, sdf, message } = result;\n    this.handleRemoveByUid('import_samples_upload');\n    let notification = {\n      title: 'Oops!',\n      message: `${message}\\n Please check the file and try again.`,\n      level: 'error',\n      position: 'bl',\n      autoDismiss: 0\n    };\n    if (sdf) {\n      if (status === 'ok') {\n        notification = {\n          title: 'Success',\n          message,\n          level: 'success',\n          position: 'bl',\n          autoDismiss: 10\n        };\n      } else if (status === 'invalid') {\n        notification.message = message;\n      }\n    } else if (status === 'ok') {\n      notification = {\n        title: 'Success',\n        message: `The ${num} samples have been imported successfully`,\n        level: 'success',\n        position: 'bl',\n        autoDismiss: 10\n      };\n    } else if (status === 'invalid') {\n      notification.message = message;\n    } else if (status === 'in progress') {\n      notification.message = message;\n      notification.title = 'Status';\n      notification.level = 'success';\n    } else if (status === 'warning') {\n      notification = {\n        title: 'Status',\n        message: `The ${num} samples have been imported successfully but ${message}`,\n        level: 'success',\n        position: 'bl',\n        autoDismiss: 10\n      };\n    }\n    this.handleAdd(notification);\n  }\n\n  handleSetComponentReference(ref) {\n    this.state.notificationSystem = ref;\n  }\n\n  handleUploadErrorNotify(message) {\n    // this.handleRemoveByUid('import_samples_upload');\n    this.handleClearNotifications();\n\n    const notification = {\n      title: 'Error',\n      message,\n      level: 'error',\n      uid: 'import_reactions_upload',\n      position: 'bl'\n    };\n    this.handleAdd(notification);\n  }\n}\n\nexport default alt.createStore(NotificationStore, 'NotificationStore');\n","import React, { Component } from 'react';\nimport NotificationSystem from 'react-notification-system';\nimport connectToStores from 'alt-utils/lib/connectToStores';\n\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport NotificationStore from 'src/stores/alt/stores/NotificationStore';\nimport uuid from 'uuid';\n\nclass Notifications extends Component {\n  componentDidMount() {\n    NotificationActions.setComponentReference(this.notificationSystem);\n  }\n\n  render() {\n    return (\n      <div>\n        <NotificationSystem ref={(notification) => { this.notificationSystem = notification; }} />\n      </div>\n    );\n  }\n}\n\nconst getStores = () => [NotificationStore];\nconst getPropsFromStores = () => NotificationStore.getState();\nexport default connectToStores({ getStores, getPropsFromStores }, Notifications);\n","import React, { Component } from 'react';\nimport TreeSelect from 'antd/lib/tree-select';\nimport PropTypes from 'prop-types';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nconst filterTreeNode = (input, child) => String(child.props.search && child.props.search.toLowerCase())\n  .indexOf(input && input.toLowerCase()) !== -1;\nexport default class OlsTreeSelect extends Component {\n  constructor(props) {\n    super(props);\n    this.OnSelectChange = this.OnSelectChange.bind(this);\n  }\n\n  OnSelectChange(e) {\n    const cleanedOlsEntry = this.removeArtificalId(e || '');\n    this.props.onSelectChange(\n      cleanedOlsEntry,\n      this.props.selectName\n    );\n  }\n\n  removeArtificalId(value) {\n    const uuidCheckRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/gi;\n    const parts = value.split('$');\n    if (parts.length === 1) { return value.trim(); }\n\n    if (!uuidCheckRegex.test(parts.slice(-1))) { return value.trim(); }\n\n    return parts\n      .slice(0, -1)\n      .join('$')\n      .trim();\n  }\n\n  render() {\n    const { rxnos, chmos, bao } = UserStore.getState();\n    let treeData = [];\n    const height = this.props.selectName === 'rxno' ? '35px' : null;\n    switch (this.props.selectName) {\n      case 'rxno':\n        treeData = rxnos;\n        break;\n      case 'chmo':\n        treeData = chmos;\n        break;\n      case 'bao':\n        treeData = bao;\n        break;\n      default:\n        break;\n    }\n\n    return (\n      <TreeSelect\n        treeDefaultExpandedKeys={[this.props.selectName]}\n        name={this.props.selectName}\n        showSearch\n        style={{ width: '100%', height }}\n        value={this.props.selectedValue}\n        dropdownStyle={{ maxHeight: 300, overflow: 'auto' }}\n        treeData={treeData}\n        placeholder=\"Select...\"\n        allowClear\n        onChange={(e) => this.OnSelectChange(e)}\n        disabled={this.props.selectedDisable}\n        filterTreeNode={filterTreeNode}\n      />\n    );\n  }\n}\n\nOlsTreeSelect.propTypes = {\n  selectName: PropTypes.string.isRequired,\n  selectedValue: PropTypes.string.isRequired,\n  onSelectChange: PropTypes.func.isRequired,\n  selectedDisable: PropTypes.bool.isRequired,\n};\n\nexport const chmoConversions = {\n  nmr_1h: {\n    label: '1H nuclear magnetic resonance spectroscopy (1H NMR)',\n    termId: 'CHMO:0000593',\n    value: 'CHMO:0000593 | 1H nuclear magnetic resonance spectroscopy (1H NMR)',\n  },\n  nmr_13c: {\n    label: '13C nuclear magnetic resonance spectroscopy (13C NMR)',\n    termId: 'CHMO:0000595',\n    value: 'CHMO:0000595 | 13C nuclear magnetic resonance spectroscopy (13C NMR)',\n  },\n  mass: {\n    label: 'mass spectrometry (MS)',\n    termId: 'CHMO:0000470',\n    value: 'CHMO:0000470 | mass spectrometry (MS)',\n  },\n  ea: {\n    label: 'elemental analysis (EA)',\n    termId: 'CHMO:0001075',\n    value: 'CHMO:0001075 | elemental analysis (EA)',\n  },\n  gcms: {\n    label: 'gas chromatography-mass spectrometry (GCMS)',\n    termId: 'CHMO:0000497',\n    value: 'CHMO:0000497 | gas chromatography-mass spectrometry (GCMS)',\n  },\n  hplc: {\n    label: 'high-performance liquid chromatography (HPLC)',\n    termId: 'CHMO:0001009',\n    value: 'CHMO:0001009 | high-performance liquid chromatography (HPLC)',\n  },\n  ir: {\n    label: 'infrared absorption spectroscopy (IR)',\n    termId: 'CHMO:0000630',\n    value: 'CHMO:0000630 | infrared absorption spectroscopy (IR)',\n  },\n  tlc: {\n    label: 'thin-layer chromatography (TLC)',\n    termId: 'CHMO:0001007',\n    value: 'CHMO:0001007 | thin-layer chromatography (TLC)',\n  },\n  crystal_structure: {\n    label: 'X-ray diffraction (XRD)',\n    termId: 'CHMO:0000156',\n    value: 'CHMO:0000156 | X-ray diffraction (XRD)',\n  },\n  others: {\n    label: 'process',\n    termId: 'BFO:0000015',\n    value: 'BFO:0000015 | process',\n  }\n};\n","import React, { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Quill from 'quill2';\nimport { isEqual } from 'lodash';\nimport { keepSupSub } from 'src/utilities/quillFormat';\n\nfunction Quill2Viewer({ value, preview }) {\n  const quillViewerRef = useRef(null);\n  const viewerRef = useRef(null);\n\n  useEffect(() => {\n    if (!viewerRef.current) {\n      const defaultOptions = {\n        theme: 'bubble',\n        readOnly: true,\n        modules: {\n          toolbar: null,\n        },\n      };\n      viewerRef.current = new Quill(quillViewerRef.current, defaultOptions);\n      const oriValue = value;\n      const initialValue = preview ? keepSupSub(oriValue) : oriValue;\n      viewerRef.current.setContents(initialValue);\n    }\n  }, []);\n\n  useEffect(() => {\n    if (viewerRef.current && !isEqual(viewerRef.current.getContents(), value)) {\n      viewerRef.current.setContents(value);\n    }\n  }, [value]);\n\n  return preview ? (\n    <div className=\"quill-viewer\">\n      <div ref={quillViewerRef} />\n    </div>\n  ) : (\n    <span ref={quillViewerRef} />\n  );\n}\n\nQuill2Viewer.propTypes = {\n  value: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n  preview: PropTypes.bool,\n};\n\nQuill2Viewer.defaultProps = {\n  value: [],\n  preview: false,\n};\n\nexport default Quill2Viewer;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\n\nimport Quill from 'quill';\nimport Delta from 'quill-delta';\n\nimport _ from 'lodash';\nimport { ButtonToolbar, DropdownButton, MenuItem, OverlayTrigger, Popover, Button } from 'react-bootstrap';\n\nconst toolbarOptions = [\n  ['bold', 'italic', 'underline'],\n  [{ list: 'ordered' }, { list: 'bullet' }],\n  [{ script: 'sub' }, { script: 'super' }],\n  [{ header: [1, 2, 3, 4, 5, 6, false] }],\n  [{ specialCharacters: ['→', '⇌', '⇐', '⇒', '⇑', ' ⇓', '⇠', '⇢', '⇡', '⇣', '⇤', '⇥', '⤒', '⤓', '↨', '∆', 'α', 'β', 'δ', 'Κ', '°C', '°F', '☉', '⬤', 'Ⓤ', '🜚', 'Ω', 'Ā', 'ā', 'Ă', 'ă', '<', '>', '≤', '≥', '–', '—', '¯', '‾', '°', '−', '±', '÷', '⁄', '×', '≈', '≠', '≡', '≅', '∫', '∑', 'φ', '∞', '√', '∼', '∃', '∀', '∗', '∝', '∠'] }],\n  // [{ 'color': [] }, { 'background': [] }],\n  // [{ 'font': [] }],\n  // ['α', 'β', 'π'],\n  // ['blockquote', 'code-block'],\n  // [{ 'header': 1 }, { 'header': 2 }],\n  // [{ 'indent': '-1'}, { 'indent': '+1' }],\n  // [{ 'direction': 'rtl' }],\n  // [{ 'size': ['small', false, 'large', 'huge'] }],\n  // [{ 'align': [] }],\n  // ['clean'],\n];\n\nexport default class QuillEditor extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      // Editor contents\n      value: props.value,\n    };\n\n    this.theme = props.theme;\n    if (!props.theme || props.theme === '') this.theme = 'snow';\n\n    this.readOnly = true;\n    if (!props.disabled || props.disabled === false) this.readOnly = false;\n\n    this.height = props.height;\n    if (!props.height || props.height === '') this.height = '230px';\n\n    this.toolbar = (props.toolbarSymbol || []).map(x => ({\n      name: x.name,\n      render: x.render,\n    }));\n\n    this.editor = false;\n    this.id = _.uniqueId('quill-editor-');\n\n    this.getContents = this.getContents.bind(this);\n    this.updateEditorValue = this.updateEditorValue.bind(this);\n    this.specialCharacters = this.specialCharacters.bind(this);\n    this.handleEditorValue = this.handleEditorValue.bind(this);\n    this.renderCharacters = this.renderCharacters.bind(this);\n    this.debouncedOnChange = _.debounce(this.props.onChange.bind(this), 300);\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    this.initQuill();\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    const nextVal = nextProps.value;\n    const oldContents = this.editor ? this.getContents() : null;\n\n    if (oldContents && nextVal &&\n      !_.isEqual(nextVal.ops, oldContents.ops)) {\n      this.setState({ value: nextVal });\n      const sel = this.editor.getSelection();\n      this.editor.setContents(nextVal);\n      if (sel) this.editor.setSelection(sel);\n    }\n  }\n\n  // eslint-disable-next-line camelcase\n  UNSAFE_componentWillUpdate() {\n    this.componentWillUnmount();\n  }\n\n  componentDidUpdate() {\n    this.componentDidMount();\n  }\n\n  componentWillUnmount() {\n    // Don't set the state to null, it would generate a loop.\n  }\n\n  onChange(val) {\n    this.props.onChange(val);\n  }\n\n  getContents() {\n    if (this.editor) return this.editor.getContents();\n\n    return null;\n  }\n\n  updateEditorValue(contents, bounce = true) {\n    this.setState({\n      value: contents,\n    }, bounce ? this.debouncedOnChange(contents) : this.onChange(contents));\n  }\n\n  handleEditorValue(toolbarItems, item) {\n    const { editor } = this;\n    const range = editor.getSelection();\n    if (range) {\n      let contents = editor.getContents();\n      let elementOps = toolbarItems.find(x => x.name === item.name).ops;\n      const insertDelta = new Delta(elementOps);\n      if (range.index > 0) {\n        elementOps = [{ retain: range.index }].concat(elementOps);\n      }\n      const elementDelta = new Delta(elementOps);\n      contents = contents.compose(elementDelta);\n      editor.setContents(contents);\n      range.length = 0;\n      range.index += insertDelta.length();\n      editor.setSelection(range);\n      this.updateEditorValue(contents, false);\n    }\n  }\n\n  specialCharacters(args) {\n    this.editor.focus();\n    const cursorPosition = this.editor.getSelection().index;\n    this.editor.setSelection(cursorPosition + args.length);\n    this.editor.insertText(cursorPosition, args);\n    const contents = this.getContents();\n    this.updateEditorValue(contents);\n  }\n\n  initQuill() {\n    if (!this.editor) {\n      const quillEditor = ReactDOM.findDOMNode(this.refs[this.id]);\n\n      const quillOptions = {\n        modules: {\n          toolbar: {\n            container: `#toolbar-${this.id}`,\n            handlers: {\n              specialCharacters: this.specialCharacters,\n            }\n          },\n        },\n        theme: this.theme,\n        readOnly: this.readOnly,\n      };\n\n      // init Quill\n      this.editor = new Quill(quillEditor, quillOptions);\n      const { value } = this.state;\n      if (value) this.editor.setContents(value);\n\n      // Resolve compability with Grammarly Chrome add-on\n      // Fromm https://github.com/quilljs/quill/issues/574\n      // let GrammarlyInline = Quill.import('blots/inline');\n      // GrammarlyInline.tagName = 'G';\n      // GrammarlyInline.blotName = 'grammarly-inline';\n      // GrammarlyInline.className = 'gr_';\n      // Quill.register({'formats/grammarly-inline': GrammarlyInline})\n\n      this.editor.on('text-change', (delta, oldDelta, source) => {\n        if (source === 'user' && this.props.onChange) {\n          const contents = this.getContents();\n          this.updateEditorValue(contents);\n        }\n      });\n\n      const { id } = this;\n\n      this.toolbar.forEach((element) => {\n        const selector = `#toolbar-${id} #${element.name}_id`;\n        const btn = document.querySelector(selector);\n\n        btn.addEventListener('click', () => {\n          this.handleEditorValue(this.props.toolbarSymbol, element);\n        });\n      });\n    }\n  }\n\n  renderQuillToolbarGroup() {\n    if (this.theme !== 'snow') return (<span />);\n    let fToolbarOptions = _.uniq(toolbarOptions);\n    if (this.props.extraToolbarOptions) {\n      fToolbarOptions = _.union(fToolbarOptions, this.props.extraToolbarOptions);\n    }\n\n    const quillToolbar = fToolbarOptions.map((formatGroup, index) => {\n      const groupElement = formatGroup.map((element) => {\n        if (typeof element === 'string') {\n          return (\n            <button className={`ql-${element}`} key={`btnKey_${element}`} />\n          );\n        } else if (typeof element === 'object') {\n          const elementName = Object.getOwnPropertyNames(element)[0];\n          const elementValue = element[elementName];\n\n          if (typeof elementValue === 'string') {\n            return (\n              <button\n                className={`ql-${elementName}`}\n                key={`btnKey_${elementValue}`}\n                value={elementValue}\n              />\n            );\n          } else if (Array.isArray(elementValue)) {\n            const options = elementValue.map(function(e) {\n              if(e == false){\n                return <option value=\"\" key=\"\" />\n              }\n              return <option value={e} key={`opt_${e}`} />\n            });\n\n            const character = elementValue.map(e => this.renderCharacters(e));\n            const templateCreatorPopover = (\n              <Popover\n                id=\"popover-positioned-bottom\"\n                title=\"special characters\"\n                // className=\"analyses-template-creator\"\n              >\n                <span className=\"ql-spec-group\">\n                  {character}\n                </span>\n              </Popover>\n            );\n\n            /* eslint-disable eqeqeq */\n            if (Object.keys(element) == 'specialCharacters') {\n              return (\n                <OverlayTrigger\n                  key={`element_overlay_${element}`}\n                  trigger=\"click\"\n                  placement=\"bottom\"\n                  rootClose\n                  overlay={templateCreatorPopover}\n                >\n                  <span className=\"ql-formats\">\n                    <button>\n                      <span> &#937; </span>\n                    </button>\n                  </span>\n                </OverlayTrigger>\n              );\n            }\n\n            return (\n              <select\n                className={`ql-${elementName}`}\n                key={`btnKey_${elementName}`}\n              >\n                {options}\n              </select>\n            );\n          }\n        }\n        return (<span key={`span_empty_${index}`}/>);\n      });\n\n      return (\n        <span className=\"ql-formats\" key={`sp_${index}`} >\n          {groupElement}\n        </span>\n      );\n    });\n    return quillToolbar;\n  }\n\n  renderCharacters(e) {\n    return (\n      <Button\n        className=\"ql-spec-Charac\"\n        key={`btnKey_${e}`}\n        value={e}\n        // eslint-disable-next-line no-shadow\n        onClick={e => this.specialCharacters(e.target.value)}\n      >\n        {e}\n      </Button>\n    );\n  }\n\n  renderCustomToolbar() {\n    if (this.theme !== 'snow' || !this.toolbar || this.toolbar.length === 0) {\n      return (<span />);\n    }\n\n    const customToolbarElement = this.toolbar.map(element => {\n      if (element.render) {\n        return element.render(element.name);\n      }\n\n      return (\n        <span\n          key={`${element.name}_key`}\n          id={`${element.name}_id`}\n          style={{ marginRight: '10px', cursor: 'pointer' }}\n        >\n          <i className={`icon-${element.name}`} />\n        </span>\n      )\n    });\n\n    return (\n      <span className=\"ql-formats custom-toolbar\" >\n        { customToolbarElement }\n      </span>\n    );\n  }\n\n  renderCustomDropdown() {\n    if (this.theme !== 'snow' || !this.toolbar || this.toolbar.length === 0 || this.props.toolbarDropdown.length === 0) {\n      return null;\n    }\n    return (\n      <span className=\"ql-formats custom-toolbar\">\n        <ButtonToolbar>\n          <DropdownButton\n            title=\"MS\"\n            id=\"quill-cuz-dropdown\"\n            className=\"quill-cuz-dropdown\"\n          >\n            {this.props.toolbarDropdown.map(t => <MenuItem key={`mi_${t.name}`} eventKey={t.name} onSelect={() => this.handleEditorValue(this.props.toolbarDropdown, t)}>{t.name.toUpperCase()}</MenuItem>)}\n          </DropdownButton>\n        </ButtonToolbar>\n      </span>\n    );\n  }\n\n  render() {\n    return (\n      <div>\n        <div id={`toolbar-${this.id}`}>\n          {this.renderQuillToolbarGroup()}\n          <span className=\"ql-formats custom-toolbar\">\n            { this.props.customToolbar }\n          </span>\n          {this.renderCustomToolbar()}\n          {this.renderCustomDropdown()}\n        </div>\n        <div\n          ref={this.id}\n          style={{ height: this.height }}\n        />\n      </div>\n    );\n  }\n}\n\nQuillEditor.propTypes = {\n  value: PropTypes.object,\n  customToolbar: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n  toolbarSymbol: PropTypes.array,\n  toolbarDropdown: PropTypes.arrayOf(PropTypes.object),\n  theme: PropTypes.string,\n  height: PropTypes.string,\n  disabled: PropTypes.bool,\n  onChange: PropTypes.func,\n  extraToolbarOptions: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.string]))),\n};\n\nQuillEditor.defaultProps = {\n  value: {},\n  customToolbar: '',\n  toolbarSymbol: [],\n  toolbarDropdown: [],\n  theme: 'snow',\n  height: '230px',\n  disabled: false,\n  onChange: null,\n  extraToolbarOptions: null,\n};\n","/* eslint-disable react/destructuring-assignment */\n/* eslint-disable max-classes-per-file */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Modal,\n  Table,\n  Col,\n  Badge,\n  Panel,\n  ButtonGroup,\n  Button,\n  Form,\n  FormGroup,\n  FormControl,\n  ControlLabel,\n  InputGroup,\n} from 'react-bootstrap';\nimport { CirclePicker } from 'react-color';\nimport Select from 'react-select';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nclass UserLabelModal extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      labels: [],\n      label: {},\n      showDetails: false,\n      defaultColor: '#428BCA',\n    };\n    this.onChange = this.onChange.bind(this);\n    this.handelNewLabel = this.handelNewLabel.bind(this);\n    this.handleSaveLabel = this.handleSaveLabel.bind(this);\n    this.handleBackButton = this.handleBackButton.bind(this);\n    this.handleAcessChange = this.handleAcessChange.bind(this);\n    this.handleColorPicker = this.handleColorPicker.bind(this);\n    this.handleEditLabelClick = this.handleEditLabelClick.bind(this);\n  }\n\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChange);\n  }\n\n  handleEditLabelClick(e, label) {\n    this.setState({ showDetails: true, label });\n  }\n\n  handleColorPicker(color, event) {\n    const { label } = this.state;\n    label.color = color.hex;\n    this.setState({\n      label\n    });\n  }\n\n  handleAcessChange(val, e) {\n    const { label } = this.state;\n    label.access_level = e?.value || 0;\n    this.setState({\n      label\n    });\n  }\n\n  handleBackButton() {\n    this.setState({\n      showDetails: false\n    });\n  }\n\n  handleSaveLabel() {\n    const { label } = this.state;\n    if (typeof (this.titleInput) !== 'undefined' && this.titleInput) {\n      label.title = this.titleInput.value;\n    }\n    if (typeof (this.descInput) !== 'undefined' && this.descInput) {\n      label.description = this.descInput.value;\n    }\n    if (typeof (this.colorInput) !== 'undefined' && this.colorInput) {\n      label.color = this.colorInput.value;\n    }\n\n    if (label.title != null && label.title.trim().length !== 0) {\n      UsersFetcher.updateUserLabel({\n        id: label.id,\n        title: label.title,\n        access_level: label.access_level || 0,\n        description: label.description,\n        color: label.color\n      }).then(() => {\n        UserActions.fetchUserLabels();\n        this.setState({\n          showDetails: false\n        });\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    } else {\n      NotificationActions.removeByUid('createUserLabel');\n      const notification = {\n        title: 'Create User Label',\n        message: 'Title is empty',\n        level: 'error',\n        dismissible: 'button',\n        autoDismiss: 5,\n        position: 'tr',\n        uid: 'createUserLabel'\n      };\n      NotificationActions.add(notification);\n    }\n  }\n\n  onChange(state) {\n    const { currentUser, labels } = state;\n    const list =\n      (labels || []).filter(\n        r =>\n          r.access_level === 2 || r.user_id === (currentUser && currentUser.id)\n      ) || [];\n\n    this.setState({\n      labels: list,\n    });\n  }\n\n  handelNewLabel() {\n    this.setState({\n      label: {},\n      showDetails: true,\n    });\n  }\n\n  renderUserLabels() {\n    const { labels } = this.state;\n    if (labels == null || labels.length === 0) {\n      return <div />;\n    }\n\n    return (labels || []).map(g => {\n      const badgeStyle = {\n        backgroundColor: g.color || this.state.defaultColor,\n      };\n      let accessLabel = '';\n      switch (g.access_level) {\n        case 0:\n          accessLabel = 'Private';\n          break;\n        case 1:\n          accessLabel = 'Public';\n          break;\n        case 2:\n          accessLabel = 'Global';\n          break;\n        case 3:\n          accessLabel = 'Review';\n          break;\n        default:\n          accessLabel = '';\n      }\n\n      return (\n        <tr key={`row_${g.id}`}>\n          <td md={3}><Badge style={badgeStyle}>{g.title}</Badge></td>\n          <td md={3}>{accessLabel}</td>\n          <td md={3}>{g.description}</td>\n          <td md={3}>{g.color}</td>\n          <td md={3}>\n            <Button\n              bsSize=\"xs\"\n              disabled={g.access_level === 2}\n              bsStyle={g.access_level === 2 ? 'default' : 'success'}\n              onClick={(e) => this.handleEditLabelClick(e, g)}\n            >\n              {g.access_level === 2 ? 'Global' : 'Edit'}\n            </Button>\n          </td>\n        </tr>\n      );\n    });\n  }\n\n  renderLabels() {\n    const { showDetails } = this.state;\n    if (showDetails === true) {\n      return this.renderLabel();\n    }\n    return (\n      <div>\n        <Panel bsStyle=\"success\">\n          <Panel.Heading>\n            <div>\n              <ButtonGroup>\n                <Button bsStyle=\"primary\" onClick={() => this.handelNewLabel()}>\n                  Create&nbsp;\n                  <i className=\"fa fa-plus\" />\n                </Button>\n              </ButtonGroup>\n            </div>\n          </Panel.Heading>\n          <Table striped bordered condensed hover>\n            <thead>\n              <tr>\n                <th>Label</th>\n                <th>Access</th>\n                <th>Description</th>\n                <th>Color</th>\n                <th>Action</th>\n              </tr>\n            </thead>\n            <tbody>\n              {this.renderUserLabels()}\n            </tbody>\n          </Table>\n        </Panel>\n      </div>\n    );\n  }\n\n  renderLabel() {\n    const { label } = this.state;\n    const bcStyle = {\n      backgroundColor: label.color || this.state.defaultColor\n    };\n    const accessList = [\n      { label: 'Private - Exclusive access for you', value: 0 },\n      { label: 'Public - Shareable before publication, Visible to all after', value: 1 }\n    ];\n\n    const currentUser = UserStore.getState()?.currentUser;\n    const isReviewer = (currentUser?.is_reviewer) || false;\n\n    if (isReviewer) {\n      accessList.unshift({ label: 'Review - Reviewer only', value: 3 });\n      accessList.unshift({ label: 'Global - Open to everyone', value: 2 });\n    }\n\n    return (\n      <Form horizontal>\n        <FormGroup controlId=\"accessLevelInput\">\n          <Col componentClass={ControlLabel} sm={2}>\n            Public?\n          </Col>\n          <Col sm={10}>\n            <Select\n              style={{ zIndex: 2000 }}\n              name=\"userLabel\"\n              clearable={false}\n              options={accessList}\n              onChange={e => this.handleAcessChange(!label.access_level, e)}\n              value={label.access_level}\n            />\n          </Col>\n        </FormGroup>\n        <FormGroup controlId=\"titleInput\">\n          <Col componentClass={ControlLabel} sm={2}>\n            Title\n          </Col>\n          <Col sm={10}>\n            <FormControl\n              type=\"text\"\n              style={{ height: '40px' }}\n              inputRef={(m) => { this.titleInput = m; }}\n              defaultValue={label.title || ''}\n            />\n          </Col>\n        </FormGroup>\n\n        <FormGroup controlId=\"descInput\">\n          <Col componentClass={ControlLabel} sm={2}>\n            Description\n          </Col>\n          <Col sm={10}>\n            <FormControl\n              type=\"text\"\n              style={{ height: '40px' }}\n              inputRef={(m) => { this.descInput = m; }}\n              defaultValue={label.description || ''}\n            />\n          </Col>\n        </FormGroup>\n\n        <FormGroup controlId=\"colorInput\">\n          <Col componentClass={ControlLabel} sm={2}>\n            Background Color\n          </Col>\n          <Col sm={10}>\n            <InputGroup>\n              <InputGroup.Addon style={bcStyle} />\n              <FormControl\n                type=\"text\"\n                readOnly\n                inputRef={(m) => { this.colorInput = m; }}\n                value={label.color || this.state.defaultColor}\n              />\n            </InputGroup>\n          </Col>\n        </FormGroup>\n        <FormGroup controlId=\"formHorizontalPicker\">\n          <Col sm={12}>\n            <CirclePicker width=\"90%\" onChangeComplete={this.handleColorPicker} />\n          </Col>\n        </FormGroup>\n\n        <ButtonGroup>\n          <Button onClick={this.handleBackButton}>Back</Button>\n          <Button onClick={this.handleSaveLabel}>Save</Button>\n        </ButtonGroup>\n      </Form>\n    );\n  }\n\n  render() {\n    const { showLabelModal } = this.props;\n    return (\n      <Modal\n        show={showLabelModal}\n        onHide={this.props.onHide}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>My Labels</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          {this.renderLabels()}\n        </Modal.Body>\n      </Modal>\n    );\n  }\n}\n\n// eslint-disable-next-line react/no-multi-comp\nclass EditUserLabels extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentUser: (UserStore.getState() && UserStore.getState().currentUser) || {},\n      labels: this.props.labels || (UserStore.getState() && UserStore.getState().labels) || [],\n      selectedLabels: null\n    };\n    this.onChange = this.onChange.bind(this);\n    this.handleSelectChange = this.handleSelectChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChange);\n  }\n\n  handleSelectChange(val) {\n    const { element, fnCb } = this.props;\n    if (val) {\n      const ids = val.map((v) => v.value);\n      if (ids != null) {\n        element.setUserLabels(ids);\n        fnCb(element);\n      }\n      this.setState({ selectedLabels: val });\n        }\n  }\n\n  onChange(state) {\n    const { currentUser, labels } = state;\n    this.setState({\n      currentUser,\n      labels\n    });\n  }\n\n  render() {\n    let { selectedLabels } = this.state;\n    const { currentUser, labels } = this.state;\n\n    const { element } = this.props;\n    const curLableIds = element.tag && element.tag.taggable_data\n          ? element.tag.taggable_data.user_labels\n          : [];\n\n    const defaultLabels = (labels || [])\n      .filter(\n        (r) => (curLableIds || []).includes(r.id)\n          && (r.access_level > 0 || r.user_id === currentUser.id)\n      )\n      .map((ll) => ({\n        value: ll.id,\n        label: (\n          <Badge\n            style={{\n              backgroundColor: ll.color,\n              borderRadius: ll.access_level === 2 ? '0.25em' : '10px',\n            }}\n          >\n            {ll.title}\n          </Badge>\n        ),\n      }));\n\n    if (selectedLabels == null) {\n      selectedLabels = defaultLabels;\n    }\n\n    const labelOptions =\n      (this.state.labels || [])\n        .filter(r => r.access_level === 2 || r.user_id === currentUser.id)\n        .map(ll => ({\n          value: ll.id,\n          label: (\n            <Badge\n              style={{\n                backgroundColor: ll.color,\n                borderRadius: ll.access_level === 2 ? '0.25em' : '10px',\n              }}\n            >\n              {ll.title}\n            </Badge>\n          ),\n        })) || [];\n\n    return (\n      <div>\n        <FormGroup>\n          <ControlLabel>My Labels</ControlLabel>\n          <Select\n            className=\"status-select\"\n            name=\"sampleUserLabels\"\n            clearable={false}\n            multi\n            options={labelOptions}\n            value={selectedLabels}\n            onChange={(e) => this.handleSelectChange(e)}\n          />\n        </FormGroup>\n      </div>\n    );\n  }\n}\n\nclass ReviewUserLabels extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentUser: (UserStore.getState() && UserStore.getState().currentUser) || {},\n      labels: this.props.labels || (UserStore.getState() && UserStore.getState().labels) || [],\n      selectedLabels: this.props.element.user_labels || [],\n    };\n    this.onChange = this.onChange.bind(this);\n    this.handleSelectChange = this.handleSelectChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChange);\n  }\n\n  handleSelectChange(val) {\n    const { element } = this.props;\n    if (val) {\n      const ids = val.map(v => v.value);\n      if (ids != null) {\n        // element.setUserLabels(ids);\n        this.props.fnCb(element, ids);\n      }\n      this.setState({ selectedLabels: val });\n    }\n  }\n\n  onChange(state) {\n    const { currentUser, labels } = state;\n    this.setState({\n      currentUser,\n      labels\n    });\n  }\n\n  render() {\n    let { selectedLabels } = this.state;\n    const { currentUser, labels } = this.state;\n    const { element } = this.props;\n    const curLableIds = element.user_labels || [];\n\n    // const reviewLabel = labels.filter(l => l.access_level === 3);\n    const reviewLabel = labels;\n\n    const defaultLabels = (labels || [])\n      .filter(\n        (r) => (curLableIds || []).includes(r.id)\n          && (r.access_level > 0 || r.user_id === currentUser.id)\n      )\n      .map((ll) => ({\n        value: ll.id,\n        label: (\n          <Badge\n            style={{\n              backgroundColor: ll.color,\n              borderRadius: ll.access_level === 2 ? '0.25em' : '10px',\n            }}\n          >\n            {ll.title}\n          </Badge>\n        ),\n      }));\n\n    if (selectedLabels == null) {\n      selectedLabels = defaultLabels;\n    }\n\n    const labelOptions =\n      (reviewLabel || [])\n        .filter(r => r.access_level > 0 || r.user_id === currentUser.id)\n        .map(ll => ({\n          value: ll.id,\n          label: (\n            <Badge\n              style={{\n                backgroundColor: ll.color,\n                borderRadius: ll.access_level === 2 ? '0.25em' : '10px',\n              }}\n            >\n              {ll.title}\n            </Badge>\n          ),\n       })) || [];\n\n    return (\n      <div>\n        <FormGroup>\n          <Select\n            className=\"status-select\"\n            name=\"sampleUserLabels\"\n            clearable={false}\n            multi\n            options={labelOptions}\n            value={selectedLabels}\n            onChange={(e) => this.handleSelectChange(e)}\n          />\n        </FormGroup>\n      </div>\n    );\n  }\n}\n\n// eslint-disable-next-line react/no-multi-comp\nclass ShowUserLabels extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentUser: (UserStore.getState() && UserStore.getState().currentUser) || {},\n      labels: (UserStore.getState() && UserStore.getState().labels) || []\n    };\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    const { currentUser, labels } = state;\n    this.setState({\n      currentUser,\n      labels\n    });\n  }\n\n  render() {\n    const { element } = this.props;\n    const { currentUser, labels } = this.state;\n    let showLabels = null;\n\n    if (element.labels != null) {\n      showLabels = element.labels;\n    } else {\n      const curLableIds =\n        element.tag && element.tag.taggable_data\n          ? element.tag.taggable_data.user_labels\n          : [];\n\n      showLabels = (labels || []).filter(\n        r =>\n          (curLableIds || []).includes(r.id) &&\n          (r.access_level > 0 || r.user_id === currentUser.id)\n      );\n    }\n\n    const elementLabels = (showLabels || []).map((ll) => (\n      <Badge\n        key={`bg_${ll.id}`}\n        style={{\n          backgroundColor: ll.color,\n          color: 'white',\n          borderColor: 'white',\n          borderStyle: 'solid',\n          borderWidth: 'thin',\n          borderRadius: ll.access_level === 2 ? '0.25em' : '10px',\n        }}\n      >\n        {ll.title}\n      </Badge>\n    ));\n\n    return (\n      <span>\n        &nbsp;\n        {elementLabels}\n        &nbsp;\n      </span>\n    );\n  }\n}\n\nclass SearchUserLabels extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentUser:\n        (UserStore.getState() && UserStore.getState().currentUser) || {},\n      labels: (UserStore.getState() && UserStore.getState().labels) || [],\n    };\n    this.onChange = this.onChange.bind(this);\n    this.handleSelectChange = this.handleSelectChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChange);\n  }\n\n  handleSelectChange(val) {\n    this.props.fnCb(val || null);\n  }\n\n  onChange(state) {\n    const { currentUser, labels } = state;\n    this.setState({\n      currentUser,\n      labels\n    });\n  }\n\n  render() {\n    const { currentUser, labels } = this.state;\n    const { className, userLabel, isPublish } = this.props;\n\n    let labelList = [];\n    if (isPublish === true) {\n      labelList = (labels || []).filter(r => r.access_level === 2);\n    } else {\n      labelList = (labels || []);\n    }\n\n    const labelOptions =\n      labelList.map(ll => ({\n        value: ll.id,\n        label: (\n          <Badge\n            style={{\n              backgroundColor: ll.color,\n              borderRadius: ll.access_level === 2 ? '0.25em' : '10px',\n            }}\n          >\n            {ll.title}\n          </Badge>\n        ),\n      })) || [];\n\n    return (\n      <div>\n        <Select\n          simpleValue\n          clearable\n          style={{ minWidth: 120 }}\n          className={className}\n          name=\"sampleUserLabels\"\n          multi={false}\n          options={labelOptions}\n          value={userLabel}\n          onChange={(e) => this.handleSelectChange(e)}\n        />\n      </div>\n    );\n  }\n}\n\nUserLabelModal.propTypes = {\n  showLabelModal: PropTypes.bool.isRequired,\n  onHide: PropTypes.func.isRequired\n};\n\nEditUserLabels.propTypes = {\n  element: PropTypes.object.isRequired,\n  fnCb: PropTypes.func.isRequired,\n};\n\nReviewUserLabels.propTypes = {\n  element: PropTypes.object.isRequired,\n  fnCb: PropTypes.func.isRequired,\n};\n\nShowUserLabels.propTypes = {\n  element: PropTypes.object.isRequired\n};\n\nSearchUserLabels.propTypes = {\n  fnCb: PropTypes.func.isRequired,\n  // eslint-disable-next-line react/require-default-props\n  userLabel: PropTypes.number,\n  className: PropTypes.string,\n  isPublish: PropTypes.bool,\n};\n\nSearchUserLabels.defaultProps = {\n  className: 'header-group-select',\n  isPublish: false,\n};\n\nexport {\n  UserLabelModal,\n  EditUserLabels,\n  ReviewUserLabels,\n  ShowUserLabels,\n  SearchUserLabels,\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { getFormattedISODate, getFormattedISODateTime } from 'src/components/chemrepo/date-utils';\n\nconst DateInfo = (props) => {\n  const {\n    isPublished, preText, pubData, tagData\n  } = props;\n\n  const formattedPublishedDate =\n  getFormattedISODate((tagData?.published_at || tagData?.doi_reg_at));\n  const formattedSubmittedDate = getFormattedISODate(pubData?.created_at);\n  const formattedUpdatedDate = getFormattedISODateTime(pubData?.updated_at);\n\n  if (isPublished) {\n    return (<span><b>{preText} Published on </b> <i>{formattedPublishedDate}</i></span>);\n  }\n  return (<div className=\"date_info\"><div><b>{preText} Submitted on </b> <i>{formattedSubmittedDate}</i></div><div className=\"updated\">Updated on {formattedUpdatedDate}</div></div>);\n};\n\nDateInfo.propTypes = {\n  isPublished: PropTypes.bool.isRequired,\n  preText: PropTypes.string.isRequired,\n  pubData: PropTypes.object.isRequired,\n  tagData: PropTypes.object.isRequired,\n};\n\nexport default DateInfo;\n","/* eslint-disable react/destructuring-assignment */\nimport React from 'react';\nimport RepoConst from 'src/components/chemrepo/common/RepoConst';\n\nfunction FormatEM(em) {\n  if (em) {\n    return (\n      <span>\n        {em.toFixed(6)} g&sdot;mol<sup>-1</sup>\n      </span>\n    );\n  }\n  return null;\n}\n\nfunction ExactMass(sample, molecule) {\n  const { decoupled = false, molecular_mass: molecularMass } = sample ?? {};\n  const { inchikey = '', exact_molecular_weight: exactMolecularWeight } =\n    molecule ?? {};\n  const mass =\n    decoupled && inchikey !== RepoConst.INCHIKEY_DUMMY\n      ? molecularMass\n      : exactMolecularWeight;\n  return FormatEM(mass);\n}\n\nexport default ExactMass;\n","import React from 'react';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\n\nfunction getCollectionIcon(_collectionLabel) {\n  const uiExtension = UIStore.getState().u || PublicStore.getState().u;\n  const { collectionIcons } = uiExtension;\n  if (!_collectionLabel || !collectionIcons) return null;\n  return collectionIcons.find(c => c.label === _collectionLabel)?.icons[0];\n}\n\nfunction ExtIcon(_collectionLabel) {\n  const icon = getCollectionIcon(_collectionLabel);\n  if (!icon || !icon.filename) return null;\n  const { filename, title } = icon;\n\n  return (\n    <img\n      alt={filename}\n      src={`/images/repo/${filename}`}\n      className=\"ext-icon\"\n      title={title || filename}\n    />\n  );\n}\n\nfunction ExtInfo(_collectionLabel) {\n  const icon = getCollectionIcon(_collectionLabel);\n  if (!icon || !icon.info) return null;\n  const { info } = icon;\n\n  return (\n    <div>\n      <b>Additional Information:</b>\n      {info}\n    </div>\n  );\n}\n\nexport { ExtIcon, ExtInfo };\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction LicenseIcon(props) {\n  const { license, hasCoAuthors = false } = props;\n  const presentStyle = { height: '26px' };\n  let presentHref = 'http://creativecommons.org/licenses/by-sa/4.0/';\n  let presentAlt =\n    'This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.';\n  let presentPath = '/images/creative_common/cc-by-sa.svg';\n  const cc0Alt = [\n    'To the extent possible under law, the',\n    hasCoAuthors ? 'persons' : 'person',\n    'who associated CC0 with this work',\n    hasCoAuthors ? 'have' : 'has',\n    'waived all copyright and related or neighboring rights to this work.',\n  ].join(' ');\n\n  switch (license) {\n    case 'CC BY-SA':\n      presentHref = 'http://creativecommons.org/licenses/by-sa/4.0/';\n      presentAlt =\n        'This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.';\n      presentPath = '/images/creative_common/cc-by-sa.svg';\n      break;\n    case 'CC BY':\n      presentHref = 'http://creativecommons.org/licenses/by/4.0/';\n      presentAlt =\n        'This work is licensed under a Creative Commons Attribution 4.0 International License.';\n      presentPath = '/images/creative_common/cc-by.svg';\n      break;\n    case 'CC0':\n      presentHref = 'http://creativecommons.org/publicdomain/zero/1.0/';\n      presentAlt = cc0Alt;\n      presentPath = '/images/creative_common/cc-zero.svg';\n      break;\n    case 'No License':\n      presentHref = 'http://creativecommons.org/publicdomain/zero/1.0/';\n      presentAlt = 'No License';\n      presentPath = '/images/creative_common/cc-zero.svg';\n      break;\n    default:\n      break;\n  }\n  return presentHref === '' ? null : (\n    <a\n      className=\"repo-public-user-comment\"\n      rel=\"noreferrer noopener\"\n      target=\"_blank\"\n      href={presentHref}\n    >\n      <img\n        src={presentPath}\n        style={presentStyle}\n        alt={presentAlt}\n        title={presentAlt}\n      />\n    </a>\n  );\n}\n\nLicenseIcon.propTypes = {\n  hasCoAuthors: PropTypes.bool,\n  license: PropTypes.string,\n};\n\nLicenseIcon.defaultProps = { hasCoAuthors: false, license: '' };\n\nexport default LicenseIcon;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction PublicAnchor(props) {\n  const { doi, isPublished } = props;\n  if (!isPublished || typeof doi !== 'string') return null;\n  const anchorId = doi?.split('/').pop() || '';\n  return <span id={anchorId} />;\n}\n\nPublicAnchor.propTypes = {\n  doi: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n  isPublished: PropTypes.bool.isRequired,\n};\n\nexport default PublicAnchor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, Button, OverlayTrigger, ButtonToolbar, Tooltip, FormControl } from 'react-bootstrap';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\n\nexport default class PublicCommentModal extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      modalShow: false\n    };\n    this.updateComment = this.updateComment.bind(this);\n  }\n\n  updateComment() {\n    const {\n      id, type, pageType, pageId\n    } = this.props;\n    RepositoryFetcher.reviewerComment(id, type, this.commentInput.value)\n      .then(() => {\n        this.setState({ modalShow: false });\n        if (pageType === 'reactions') {\n          PublicActions.displayReaction(pageId || id);\n        } else {\n          PublicActions.displayMolecule(pageId);\n        }\n      });\n  }\n\n  render() {\n    const { modalShow } = this.state;\n    const { isReviewer, userInfo, title } = this.props;\n    const defaultAttrs = {\n      style: {\n        height: '400px', overflow: 'auto', whiteSpace: 'pre'\n      }\n    };\n\n    let btnTbl = (<span />);\n    let commentModal = (<span />);\n    const style = {\n      height: '20px', width: '20px', borderRadius: '50%', border: '1px'\n    };\n    const hasComment = userInfo !== '';\n\n    if (hasComment === true) {\n      btnTbl = (\n        <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"tt_metadata\">Important information about this data</Tooltip>}>\n          <Button bsSize=\"xsmall\" bsStyle=\"warning\" style={style} onClick={() => this.setState({ modalShow: true })}>\n            <i className=\"fa fa-info\" />\n          </Button>\n        </OverlayTrigger>\n      );\n    } else if (hasComment === false && isReviewer === true) {\n      btnTbl = (\n        <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"tt_metadata\">Important information about this data (edit)</Tooltip>}>\n          <Button bsSize=\"xsmall\" style={style} onClick={() => this.setState({ modalShow: true })}>\n            <i className=\"fa fa-info\" />\n          </Button>\n        </OverlayTrigger>\n      );\n    }\n\n    if (isReviewer === true) {\n      commentModal = (\n        <Modal\n          show={modalShow}\n          onHide={() => this.setState({ modalShow: false })}\n          dialogClassName=\"pub-info-dialog\"\n        >\n          <Modal.Header closeButton>\n            <Modal.Title>\n              Note for {title}\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body style={{ overflow: 'auto' }}>\n            <FormControl\n              componentClass=\"textarea\"\n              defaultValue={userInfo || ''}\n              {...defaultAttrs}\n              inputRef={(m) => { this.commentInput = m; }}\n            />\n            <ButtonToolbar>\n              <Button\n                bsStyle=\"warning\"\n                onClick={() => this.setState({ modalShow: false })}\n              > Close\n              </Button>\n              <Button\n                bsStyle=\"primary\"\n                onClick={() => this.updateComment()}\n              > Update\n              </Button>\n            </ButtonToolbar>\n          </Modal.Body>\n        </Modal>\n      );\n    } else {\n      commentModal = (\n        <Modal\n          show={modalShow}\n          onHide={() => this.setState({ modalShow: false })}\n          dialogClassName=\"pub-info-dialog\"\n        >\n          <Modal.Header closeButton>\n            <Modal.Title>\n              Note for {title}\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body style={{ overflow: 'auto', whiteSpace: 'pre-wrap' }}>\n            {userInfo}\n          </Modal.Body>\n        </Modal>\n      );\n    }\n    return (\n      <>{btnTbl}{commentModal}</>\n    );\n  }\n}\n\nPublicCommentModal.propTypes = {\n  id: PropTypes.number.isRequired,\n  userInfo: PropTypes.string,\n  isReviewer: PropTypes.bool,\n  type: PropTypes.string,\n  pageId: PropTypes.number,\n  pageType: PropTypes.string,\n  title: PropTypes.string\n};\n\nPublicCommentModal.defaultProps = {\n  isReviewer: false,\n  type: '',\n  pageId: null,\n  pageType: 'reactions',\n  userInfo: '',\n  title: ''\n};\n","import React from 'react';\nimport { Badge, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport uuid from 'uuid';\n\nfunction PublicLabels(_labels) {\n  // eslint-disable-next-line react/destructuring-assignment\n  if (!_labels || !Array.isArray(_labels) || _labels.length < 1) return null;\n\n  const renderTooltip = (description, title) => (\n    <Tooltip id=\"tooltip\">{description || title}</Tooltip>\n  );\n\n  // eslint-disable-next-line react/destructuring-assignment\n  const output = _labels.map(_label => (\n    <OverlayTrigger\n      key={uuid.v4()}\n      placement=\"top\"\n      overlay={renderTooltip(_label.description, _label.title)}\n    >\n      <Badge\n        style={{\n          backgroundColor: _label.color,\n          borderRadius: _label.access_level === 2 ? '0.25em' : '10px',\n        }}\n      >\n        {_label.title}\n      </Badge>\n    </OverlayTrigger>\n  ));\n  return <div className=\"repo-public-labels\">{output}</div>;\n}\n\nexport default PublicLabels;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Col, Panel, Row } from 'react-bootstrap';\nimport { CalcDuration, ToggleIndicator } from 'src/repoHome/RepoCommon';\n\nconst PublicReactionProperties = ({\n  reaction, toggle, show, isPublished\n}) => {\n  if (!reaction) return null;\n  const { status, temperature } = reaction;\n  const reactionStatus = status?.trim() || '';\n  const reactionTemperature = (temperature || {}).userText || '';\n  const reactionDuration = CalcDuration(reaction);\n  if (\n    isPublished &&\n    !reactionStatus &&\n    !reactionTemperature &&\n    !reactionDuration\n  ) { return null; }\n  return (\n    <span>\n      <ToggleIndicator\n        onClick={toggle}\n        name=\"Properties\"\n        indicatorStyle={show ? 'down' : 'right'}\n      />\n      <Panel\n        className=\"public-data-section\"\n        id=\"collapsible-panel-properties\"\n        expanded={show}\n        defaultExpanded={show}\n        onToggle={() => {}}\n      >\n        <Panel.Collapse>\n          <Panel.Body>\n            <Row>\n              <Col sm={4} md={4} lg={4}>\n                <b>Status: </b>\n                {reactionStatus}\n              </Col>\n              <Col sm={4} md={4} lg={4}>\n                {isPublished && !reactionTemperature ? '' : (<b>Temperature: </b>)}\n                {temperature?.userText !== ''\n                  ? `${temperature.userText} ${temperature.valueUnit}`\n                  : ''}\n              </Col>\n              <Col sm={4} md={4} lg={4}>\n                {isPublished && !reactionDuration ? '' : (\n                  <b>Duration: </b>\n                )}\n                {reactionDuration}\n              </Col>\n            </Row>\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    </span>\n  );\n};\n\nPublicReactionProperties.propTypes = {\n  reaction: PropTypes.any.isRequired,\n  toggle: PropTypes.func.isRequired,\n  show: PropTypes.bool.isRequired,\n  isPublished: PropTypes.bool.isRequired,\n};\n\nexport default PublicReactionProperties;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Col, Panel, Row } from 'react-bootstrap';\nimport { ToggleIndicator } from 'src/repoHome/RepoCommon';\n\nconst PublicReactionTlc = ({\n  reaction, toggle, show, isPublished\n}) => {\n  if (!reaction) return null;\n  let {\n    tlc_description: tlcDescription,\n    tlc_solvents: tlcSolvents,\n    rf_value: rfValue,\n  } = reaction;\n  tlcDescription = tlcDescription || '';\n  tlcSolvents = tlcSolvents || '';\n  if (isPublished && !tlcDescription && !tlcSolvents && !rfValue) return null;\n  return (\n    <span>\n      <ToggleIndicator\n        onClick={toggle}\n        name=\"TLC-Control\"\n        indicatorStyle={show ? 'down' : 'right'}\n      />\n      <Panel\n        className=\"public-data-section\"\n        id=\"collapsible-panel-tlc\"\n        expanded={show}\n        defaultExpanded={show}\n        onToggle={() => {}}\n      >\n        <Panel.Collapse>\n          <Panel.Body>\n            <Row>\n              <Col sm={2} md={2} lg={2}>\n                <b>Solvents (parts)</b>\n              </Col>\n              <Col sm={10} md={10} lg={10}>\n                {tlcSolvents}\n              </Col>\n            </Row>\n            <Row>\n              <Col sm={2} md={2} lg={2}>\n                <b>Rf-Value</b>\n              </Col>\n              <Col sm={10} md={10} lg={10}>\n                {rfValue}\n              </Col>\n            </Row>\n            <Row>\n              <Col sm={2} md={2} lg={2}>\n                <b>TLC-Description</b>\n              </Col>\n              <Col sm={10} md={10} lg={10}>\n                <div>{tlcDescription}</div>\n              </Col>\n            </Row>\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    </span>\n  );\n};\n\nPublicReactionTlc.propTypes = {\n  reaction: PropTypes.any.isRequired,\n  toggle: PropTypes.func.isRequired,\n  show: PropTypes.bool.isRequired,\n  isPublished: PropTypes.bool.isRequired,\n};\n\nexport default PublicReactionTlc;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport { permitOn } from 'src/components/common/uis';\nimport { getElementType } from 'src/components/chemrepo/publication-utils';\n\nconst UnsealBtn = (props) => {\n  const { element, fnUnseal } = props;\n  if (!element) return null;\n\n  return !permitOn(element) ? (\n    <>\n      <OverlayTrigger\n        placement=\"bottom\"\n        overlay={\n          <Tooltip\n            id=\"_tooltip_unseal_button\"\n            className=\"left_tooltip bs_tooltip\"\n          >\n            {`This ${getElementType(\n              element\n            )} has been submitted and is currently locked for\n          modifications. Click to 'Unseal' it for editing.`}\n          </Tooltip>\n        }\n      >\n        <Button bsSize=\"xsmall\" bsStyle=\"success\" onClick={fnUnseal}>\n          <i className=\"fa fa-lock\" aria-hidden=\"true\" />\n          &nbsp; Locked\n        </Button>\n      </OverlayTrigger>\n    </>\n  ) : null;\n};\n\nUnsealBtn.propTypes = {\n  element: PropTypes.object.isRequired,\n  fnUnseal: PropTypes.func,\n};\n\nUnsealBtn.defaultProps = { fnUnseal: () => {} };\n\nexport default UnsealBtn;\n","import React from 'react';\nimport { Button, ButtonGroup, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport Aviator from 'aviator';\nimport Sample from 'src/models/Sample';\n//import { sampleShowOrNew, reactionShow } from 'src/utilities/routesUtils'; // TODO: Paggy\nimport Reaction from 'src/models/Reaction';\nimport { isNmrPass, isDatasetPass } from 'src/utilities/ElementUtils';\nimport { getFormattedISODate } from 'src/components/chemrepo/date-utils';\nimport { getElementType, getPublicationId } from 'src/components/chemrepo/publication-utils';\nimport UnsealBtn from 'src/components/chemrepo/UnsealButton';\n\nconst labelStyle = {\n  display: 'inline-block',\n  marginLeft: '5px',\n  marginRight: '5px'\n};\n\nconst handleClick = (e, id, clickType) => {\n  e.preventDefault();\n  e.stopPropagation();\n  if (typeof id === 'undefined' || id === null) return;\n\n  const uri = Aviator.getCurrentURI();\n  const uriArray = uri.split(/\\//);\n  switch (clickType) {\n    case 'Reaction':\n      Aviator.navigate(`/${uriArray[1]}/${uriArray[2]}/reaction/${id}`, { silent: false });\n      // reactionShow({ params: { reactionID: id } });   // TODO: Paggy\n      break;\n\n    default:\n      Aviator.navigate(`/${uriArray[1]}/${uriArray[2]}/sample/${id}`, { silent: false });\n      // sampleShowOrNew({ params: { sampleID: id } });   // TODO: Paggy\n      break;\n  }\n};\nconst validateYield = (reaction) => {\n  const result = [];\n  const products = reaction.products || [];\n  products.forEach((product) => {\n    const val = ((product.equivalent || 0) * 100).toFixed(0);\n    if (val === '0') result.push({ name: 'product-yield', value: false, message: `[Product] ${product.molecule_iupac_name}: yield is 0` });\n  });\n  if (result.length !== 0 && result.length === products.length) return result;\n  return [];\n};\n\nconst validateMolecule = (element) => {\n  const validates = [];\n  const sample = element;\n  const analyses = sample.analysisArray();\n  analyses.forEach((al) => {\n    const status = al.extended_metadata.status || '';\n    const kind = al.extended_metadata.kind || '';\n    if (status !== 'Confirmed') {\n      validates.push({ name: `analysis [${al.name}]`, value: false, message: `[${sample.name || sample.short_label}] Analysis [${al.name}]: Status must be Confirmed.` });\n    }\n    if (kind === '' || (kind.split('|').length < 2)) {\n      validates.push({ name: `analysis [${al.name}]`, value: false, message: `[${sample.name || sample.short_label}] Analysis [${al.name}]: Type is invalid.` });\n    }\n    if (!isNmrPass(al, sample)) {\n      validates.push({ name: `analysis [${al.name}]`, value: false, message: `[${sample.name || sample.short_label}] Analysis [${al.name}]: Content is invalid, NMR check fails.` });\n    }\n    if (!isDatasetPass(al)) {\n      validates.push({ name: `analysis [${al.name}]`, value: false, message: `[${sample.name || sample.short_label}] Analysis [${al.name}]: Dataset is incomplete. Please check that: 1. for NMR, Mass, or IR analyses, at least one dataset has been attached with an image and a jcamp files. 2. the instrument field is not empty.` });\n    }\n  });\n  return validates;\n};\n\nconst PublishBtnReaction = ({ reaction, showModal }) => {\n  const tagData = (reaction.tag && reaction.tag.taggable_data) || {};\n  // NB set publishedId to true to hide it\n  const publishedId = tagData.public_reaction || (tagData.publication && tagData.publication.queued_at);\n  const notPublishable = reaction.notPublishable; // false or [samples]\n  const isDisabled = reaction.changed || reaction.isNew || !!notPublishable;\n  const btnTip = (reaction.changed || reaction.isNew) ? 'Publication panel cannot be open on unsaved reaction.' : 'Open the reaction publication panel';\n  const btnTipNotPub = notPublishable && `Product(s) ${notPublishable.map(s => s.short_label).join()} not publishable`;\n  return (\n    (!publishedId && !tagData.publication) ? (\n      <OverlayTrigger\n        placement=\"bottom\"\n        overlay={<Tooltip id=\"publishReaction\">{btnTipNotPub || btnTip}</Tooltip>}\n      >\n        <Button\n          // style={{ display: 'none' }}\n          bsStyle=\"success\"\n          bsSize=\"xsmall\"\n          className=\"button-right\"\n          // NB: props disabled will prevent displaying the OverlayTrigger. workaround by mocking disabled style\n          onClick={() => showModal(!isDisabled)}\n          style={isDisabled ? { cursor: 'not-allowed', opacity: '0.65' } : {} }\n        >\n          <i className=\"fa fa-paper-plane\" />\n        </Button>\n      </OverlayTrigger>\n    ) : <span />\n  );\n};\n\nPublishBtnReaction.propTypes = {\n  showModal: PropTypes.func.isRequired,\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n};\n\nconst PublishBtn = ({ sample, showModal }) => {\n  const tagData = (sample.tag && sample.tag.taggable_data) || {};\n\n  const publishedId = tagData.public_sample;\n  const isPoly = sample._contains_residues;\n\n  return (sample.can_publish && !sample.isEdited && !publishedId && !tagData.publication) ? (\n    <OverlayTrigger\n      placement=\"bottom\"\n      overlay={<Tooltip id=\"publishSample\">{isPoly ? 'Cannot publish polymer structure!' : 'Open the sample publication panel'}</Tooltip>}\n    >\n      <Button\n        bsStyle=\"success\"\n        bsSize=\"xsmall\"\n        className=\"button-right\"\n        // NB: disabled will prevent the OverlayTrigger. workaround by mocking disabled style\n        onClick={() => showModal(!isPoly)}\n        // disabled={isPoly}\n        style={isPoly ? { cursor: 'not-allowed', opacity: '0.65' } : {}}\n      >\n        <i className=\"fa fa-paper-plane\" />\n      </Button>\n    </OverlayTrigger>\n  ) : <span />;\n};\n\nPublishBtn.propTypes = {\n  showModal: PropTypes.func.isRequired,\n  sample: PropTypes.instanceOf(Sample).isRequired,\n};\n\nconst ReviewPublishBtn = ({ element, showComment, validation }) => {\n  const tagData = (element.tag && element.tag.taggable_data) || {};\n  const publishedId = tagData.public_sample || tagData.public_reaction;\n  const isDecline = (tagData && tagData.decline === true) || false;\n  const canPublish =  element.can_publish || (element.type === 'reaction' && !element.notPublishable && element.is_published === false)\n\n  const isEdit = element.type === 'reaction' ? element.changed : element.isEdited;\n  const reviewBtn = (canPublish && !isEdit && !publishedId && tagData.publication) ? (\n                    <OverlayTrigger\n                      placement=\"bottom\"\n                      overlay={<Tooltip id=\"reviewPublish\">Submit for Publication</Tooltip>}\n                    >\n                      <Button\n                        bsStyle=\"danger\"\n                        bsSize=\"xsmall\"\n                        className=\"button-right\"\n                        // NB: disabled will prevent the OverlayTrigger. workaround by mocking disabled style\n                        onClick={() => validation(element)}\n                      >\n                        <i className=\"fa fa-paper-plane\" />\n                      </Button>\n                    </OverlayTrigger>\n                    ) : (<span />);\n  const commentBtn = ((canPublish && !publishedId && tagData.publication) || isDecline) ? (\n                    <OverlayTrigger\n                      placement=\"bottom\"\n                      overlay={<Tooltip id=\"reviewerComment\">Reviewer&apos;s comment</Tooltip>}\n                    >\n                      <Button\n                        bsSize=\"xsmall\"\n                        bsStyle=\"success\"\n                        target=\"_blank\"\n                        className=\"button-right\"\n                        onClick={showComment}\n                      >\n                        <i className=\"fa fa-comments\" />\n                      </Button>\n                    </OverlayTrigger>\n                    ) : (<span />)\n  return (\n    <span>\n    {reviewBtn}\n    {commentBtn}\n    </span>\n  )\n};\n\nconst OrigElnTag = ({ element }) => {\n  const tag = (element && element.tag) || {};\n  const tagData = (tag && tag.taggable_data) || {};\n  const elnInfo = (tagData && tagData.eln_info) || {};\n  if (Object.keys(elnInfo).length === 0) return null;\n\n  const tip = `go to original ELN: ${elnInfo.short_label}`;\n\n  return (\n    <OverlayTrigger\n      placement=\"bottom\"\n      overlay={<Tooltip id=\"data public\">{tip}</Tooltip>}\n    >\n      <Button\n        bsSize=\"xsmall\"\n        style={labelStyle}\n        href={`${elnInfo.origin}mydb/collection/all/${element.type}/${elnInfo.id}`}\n        target=\"_blank\"\n      >\n        <i className=\"fa fa-link\" aria-hidden=\"true\" />\n      </Button>\n    </OverlayTrigger>\n  );\n};\n\nconst PublishedTag = ({ element, fnUnseal }) => {\n  const tag = (element && element.tag) || {};\n  const tagData = (tag && tag.taggable_data) || {};\n  const tagType = getElementType(element) || '';\n  const isPending =\n    (tagData && tagData.publish_pending && tagData.publish_pending === true) ||\n    false;\n  const tip = isPending\n    ? `${tagType} is being reviewed`\n    : `${tagType} has been published`;\n  const publishedId = getPublicationId(element);\n\n  const pubIdIcon =\n    isPending || publishedId ? (\n      <ButtonGroup bsSize=\"xsmall\">\n        <OverlayTrigger\n          placement=\"bottom\"\n          overlay={<Tooltip id=\"data public\">{tip}</Tooltip>}\n        >\n          <Button\n            bsSize=\"xsmall\"\n            bsStyle={isPending ? 'warning' : 'danger'}\n            onClick={event => handleClick(event, publishedId, tagType)}\n          >\n            <i className=\"fa fa-newspaper-o\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n        {fnUnseal ? <UnsealBtn element={element} fnUnseal={fnUnseal} /> : null}\n      </ButtonGroup>\n    ) : null;\n\n  return pubIdIcon;\n};\n\nPublishedTag.propTypes = {\n  element: PropTypes.object,\n  fnUnseal: PropTypes.func,\n};\n\nconst LabelPublication = ({ element }) => {\n  const publication = element.tag && element.tag.taggable_data &&\n    element.tag.taggable_data.publication;\n\n  if (!publication) { return null; }\n\n  const contributor = publication.contributors && publication.contributors.name;\n  const publishedBy = publication.creators && publication.creators[0] &&\n    publication.creators[0].name;\n  let tooltipText = `Published by ${contributor == null ? publishedBy : contributor} on ${getFormattedISODate(publication.published_at || publication.doi_reg_at)}`;\n  const schemeOnly = (element && element.publication && element.publication.taggable_data &&\n    element.publication.taggable_data.scheme_only === true) || false;\n  let openUrl = (element.type === 'reaction' && schemeOnly === true) ? `/home/publications/reactions/${element.id}` : `https://dx.doi.org/${publication.doi}`;\n  let btnStyle = 'default';\n  if (!publication.published_at && element.publication) {\n    const pub = element.publication;\n    let pubCreatedAt = new Date(pub.created_at);\n    pubCreatedAt = `${pubCreatedAt.getDate()}-${pubCreatedAt.getMonth() + 1}-${pubCreatedAt.getFullYear()} `;\n    tooltipText = `Submitted by ${contributor == null ? publishedBy : contributor} on ${pubCreatedAt}`;\n    openUrl = `/pid/${element.publication.id}`;\n    btnStyle = 'success';\n  }\n  if (publication.published_at || element.publication) {\n    return (\n      <OverlayTrigger\n        placement=\"bottom\"\n        overlay={<Tooltip id=\"printCode\">{tooltipText}</Tooltip>}\n        onClick={e => e.stopPropagation()}\n      >\n        <Button bsSize=\"xsmall\" bsStyle={btnStyle} style={labelStyle} onClick={() => { window.open(openUrl, '_blank'); }}>\n          <i className=\"fa fa-newspaper-o\" aria-hidden=\"true\" />\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n  return <span />;\n};\n\nLabelPublication.propTypes = {\n  element: PropTypes.object,\n};\n\n\nconst ChemotionTag = ({ tagData, firstOnly = false }) => {\n  const chemotionTag = tagData.chemotion;\n  if (!chemotionTag) { return null; }\n  const { chemotion_first, last_published_at, doi } = chemotionTag;\n  if (firstOnly && !chemotion_first) { return null; }\n  const formattedTime = getFormattedISODate(chemotion_first || last_published_at);\n  const tooltipText = chemotion_first ? `Published First Here on ${formattedTime}`\n    : `Last published on ${formattedTime}`;\n  const first = chemotion_first ? <span>1<sup>st</sup></span> : null;\n\n  return (\n    <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"printCode\">{tooltipText}</Tooltip>}>\n      <a\n        style={labelStyle}\n        target=\"_blank\"\n        href={`https://dx.doi.org/${doi}`}\n      >\n        <img alt=\"chemotion_first\" src=\"/favicon.ico\" className=\"pubchem-logo\" />\n        {first}\n      </a>\n    </OverlayTrigger>\n  );\n};\n\nChemotionTag.propTypes = {\n  tagData: PropTypes.object,\n};\nChemotionTag.defaultProps = {\n  tagData: {},\n};\n\nexport {\n  LabelPublication,\n  OrigElnTag,\n  PublishedTag,\n  ChemotionTag,\n  PublishBtn,\n  PublishBtnReaction,\n  ReviewPublishBtn,\n  validateMolecule,\n  validateYield,\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport SVG from 'react-inlinesvg';\n\nconst SvgPath = (svg, type) => {\n  if (svg && svg !== '***') {\n    return type === 'Reaction'\n      ? `/images/reactions/${svg}`\n      : `/images/samples/${svg}`;\n  }\n  return 'images/wild_card/no_image_180.svg';\n};\n\nfunction SVGView({ svg, type, className }) {\n  return <SVG src={SvgPath(svg, type)} className={className} key={svg} />;\n}\n\nSVGView.propTypes = {\n  className: PropTypes.string.isRequired,\n  svg: PropTypes.string.isRequired,\n  type: PropTypes.string.isRequired,\n};\n\nexport default SVGView;\n","import React, { useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, Button, OverlayTrigger, ButtonToolbar, Tooltip, FormControl } from 'react-bootstrap';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\n\nconst UserCommentModal = (props) => {\n  const {\n    id, isLogin, isPublished, title, type, pageType, pageId\n  } = props;\n  const [modalShow, setModalShow] = useState(false);\n  const commentInputRef = useRef(null);\n\n  const sendEmail = () => {\n    RepositoryFetcher.userComment(id, type, pageId || id, pageType, commentInputRef.current.value)\n      .then(() => setModalShow(false));\n  };\n\n  const defaultAttrs = {\n    style: {\n      height: '400px', overflow: 'auto', whiteSpace: 'pre'\n    }\n  };\n\n  if (isPublished && isLogin) {\n    return (\n      <>\n        <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"tt_metadata\">Leave a comment about this data to the reviewers </Tooltip>}>\n          <Button bsSize=\"xsmall\" onClick={() => setModalShow(true)}>\n            <i className=\"fa fa-envelope-o\" />\n          </Button>\n        </OverlayTrigger>\n        <Modal\n          show={modalShow}\n          onHide={() => setModalShow(false)}\n          dialogClassName=\"pub-info-dialog\"\n        >\n          <Modal.Header closeButton>\n            <Modal.Title>\n              Comments for the reviewers\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body style={{ overflow: 'auto' }}>\n            {title}\n            <FormControl\n              componentClass=\"textarea\"\n              {...defaultAttrs}\n              inputRef={commentInputRef}\n            />\n            <br />\n            <ButtonToolbar>\n              <Button\n                bsStyle=\"warning\"\n                onClick={() => setModalShow(false)}\n              > Close\n              </Button>\n              <Button\n                bsStyle=\"primary\"\n                onClick={sendEmail}\n              > Send to Chemotion Reviewers\n              </Button>\n            </ButtonToolbar>\n          </Modal.Body>\n        </Modal>\n      </>\n    );\n  }\n\n  return null;\n};\n\nUserCommentModal.propTypes = {\n  id: PropTypes.number.isRequired,\n  isLogin: PropTypes.bool,\n  isPublished: PropTypes.bool.isRequired,\n  type: PropTypes.string,\n  title: PropTypes.string,\n  pageType: PropTypes.string,\n  pageId: PropTypes.number\n};\n\nUserCommentModal.defaultProps = {\n  isLogin: false,\n  type: '',\n  title: '',\n  pageType: 'reactions',\n  pageId: null\n};\n\nexport default UserCommentModal;\n","export default Object.freeze({\n  INCHIKEY_DUMMY: 'DUMMY',\n  P_STATE: {\n    ACCEPTED: 'accepted',\n    PENDING: 'pending',\n    REVIEWED: 'reviewed',\n  },\n  U_TYPE: {\n    ANONYMOUS: 'Anonymous',\n  },\n});\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Modal,\n  Button,\n  ButtonToolbar,\n  OverlayTrigger,\n  Tooltip,\n  InputGroup,\n  Checkbox,\n  Table,\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport uuid from 'uuid';\nimport { findIndex, filter, uniq, flattenDeep } from 'lodash';\nimport { OrcidIcon } from 'src/repoHome/RepoCommon';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport SelectionField from 'src/components/common/SelectionField';\nimport PublicFetcher from 'src/repo/fetchers/PublicFetcher';\nimport CollaboratorFetcher from 'src/repo/fetchers/CollaboratorFetcher';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\nimport DeleteConfirmBtn from 'src/components/common/DeleteConfirmBtn';\n\nconst addAffTooltip = (\n  <Tooltip id=\"addAff_tooltip\">Add affiliation for this Publication</Tooltip>\n);\nconst removeAffTooltip = (\n  <Tooltip id=\"rmAff_tooltip\">\n    Remove this affiliation from this Publication\n  </Tooltip>\n);\n\nconst lineAff = (creator, aid, affs, onDeleteAff) => {\n  const removeBtn = (\n    <OverlayTrigger placement=\"right\" overlay={removeAffTooltip}>\n      <Button\n        bsSize=\"xsmall\"\n        bsStyle=\"danger\"\n        onClick={() => onDeleteAff(creator, aid)}\n      >\n        <i className=\"fa fa-trash-o\" />\n      </Button>\n    </OverlayTrigger>\n  );\n  return (\n    <tr key={uuid.v4()} style={{ lineHeight: '2em' }}>\n      <td colSpan=\"4\" width=\"90%\">\n        {affs[aid]}\n      </td>\n      <td align=\"right\" width=\"10%\">\n        {removeBtn}\n      </td>\n    </tr>\n  );\n};\n\nconst secAff = (fields, g, countries, organizations, departments, onAddAff, onDeleteAff, onInputChange) => {\n  return (\n    <tr className=\"aff-line\" style={{ lineHeight: '2em' }}>\n      <td width=\"30%\">\n        <SelectionField\n          options={departments}\n          value={(fields[`${g.id}@line_department`]) || ''}\n          field={`${g.id}@line_department`}\n          placeholder=\"e.g. Institute of Organic Chemistry\"\n          onChange={onInputChange}\n          isCreatable\n        />\n      </td>\n      <td width=\"40%\">\n        <SelectionField\n          options={organizations}\n          value={(fields[`${g.id}@line_organization`]) || ''}\n          field={`${g.id}@line_organization`}\n          placeholder=\"e.g. Karlsruhe Institute of Technology\"\n          onChange={onInputChange}\n          isCreatable\n        />\n      </td>\n      <td width=\"20%\">\n        <SelectionField\n          options={countries}\n          value={(fields[`${g.id}@line_country`]) || ''}\n          field={`${g.id}@line_country`}\n          onChange={onInputChange}\n          placeholder=\"e.g. Germany\"\n        />\n      </td>\n      <td width=\"10%\" align=\"right\">\n        <OverlayTrigger placement=\"right\" overlay={addAffTooltip}>\n          <Button bsSize=\"xsmall\" bsStyle=\"success\" onClick={() => onAddAff(g)}>\n            <i className=\"fa fa-plus\" aria-hidden=\"true\" />\n          </Button>\n        </OverlayTrigger>\n      </td>\n    </tr>\n  );\n};\n\nconst affbody = (taggData, creator, fields, countries, organizations, departments, onAddAff, onDeleteAff, onInputChange) => {\n  const affs = taggData.affiliations || {};\n  const mainAff = creator.affiliationIds && creator.affiliationIds.length > 0 ?\n    creator.affiliationIds.map(aid => lineAff(creator, aid, affs, onDeleteAff)) : '';\n    creator.affiliations = creator.affiliationIds.map(aid => affs[aid]);\n  const moreAff = secAff(fields, creator, countries, organizations, departments, onAddAff, onDeleteAff, onInputChange) || '';\n\n  return (\n    <span>\n      {mainAff}\n      {moreAff}\n    </span>\n  );\n};\n\nexport default class RepoReviewAuthorsModal extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      // eslint-disable-next-line react/destructuring-assignment\n      taggData: null,\n      leaders: null,\n      modalShow: false,\n      selectedAuthors: null,\n      collaborations: [],\n      countries: [],\n      fields: {},\n      organizations: [],\n      departments: [],\n    };\n\n    this.handleSelectAuthors = this.handleSelectAuthors.bind(this);\n    this.handleInputChange = this.handleInputChange.bind(this);\n    this.onAddAff = this.onAddAff.bind(this);\n    this.onDeleteAff = this.onDeleteAff.bind(this);\n    this.onAddNewAuthor = this.onAddNewAuthor.bind(this);\n    this.onAddNewReviewer = this.onAddNewReviewer.bind(this);\n    this.onSave = this.onSave.bind(this);\n    this.loadOrcid = this.loadOrcid.bind(this);\n    this.handleDeleteAuthor = this.handleDeleteAuthor.bind(this);\n    this.handleDeleteLeader = this.handleDeleteLeader.bind(this);\n    this.handleClose = this.handleClose.bind(this);\n  }\n\n  componentDidMount() {\n    Promise.all([\n      CollaboratorFetcher.fetchMyCollaborations(),\n      PublicFetcher.affiliations('countries'),\n      PublicFetcher.affiliations('organizations'),\n      PublicFetcher.affiliations('departments'),\n    ]).then(\n      ([\n        collaborationsResult,\n        countriesResult,\n        organizationsResult,\n        departmentsResult,\n      ]) => {\n        const collaborations = collaborationsResult?.authors || [];\n\n        const formatAffiliations = result => result?.map(a => ({ label: a, value: a }))\n            .filter(a => a.value && a.value.length > 1);\n        const countries = formatAffiliations(countriesResult);\n        const organizations = formatAffiliations(organizationsResult);\n        const departments = formatAffiliations(departmentsResult);\n        this.setState({\n          collaborations,\n          countries,\n          organizations,\n          departments,\n        });\n      }\n    );\n  }\n\n  componentWillUnmount() {\n    this.setState({\n      taggData: null,\n      leaders: null,\n    });\n  }\n\n  handleInputChange(type, ev) {\n    let { fields } = this.state;\n    switch (type) {\n      case 'country':\n        fields.country = ev && ev.value;\n        break;\n      case 'organization':\n        fields.organization = ev && ev.value;\n        break;\n      case 'department':\n        fields.department = ev && ev.value;\n        break;\n      default:\n        if (typeof fields === 'undefined') {\n          fields = {};\n        }\n        fields[type] = ev && ev.value;\n    }\n    this.setState({ fields });\n  }\n\n  handleSelectAuthors(val) {\n    if (val) {\n      this.setState({ selectedAuthors: val });\n    }\n  }\n\n  handleDeleteLeader(leader) {\n    const leaders = this.state.leaders || this.props.leaders;\n    const newLeaders = filter(leaders, o => o.id !== leader.id);\n    this.setState({ leaders: newLeaders });\n  }\n\n  handleDeleteAuthor(author) {\n    const taggData = this.state.taggData || this.props.taggData;\n    const { creators, author_ids } = taggData;\n    taggData.creators = filter(creators, o => o.id !== author.id);\n    taggData.author_ids = filter(author_ids, o => o !== author.id);\n    this.setState({\n      taggData,\n    });\n  }\n\n  handleClose() {\n    this.setState({ taggData: null, leaders: null, modalShow: false });\n  }\n\n  onAddNewAuthor() {\n    const { selectedAuthors, collaborations } = this.state;\n    const taggData = this.state.taggData || this.props.taggData;\n    const { affiliations, creators, affiliation_ids, author_ids } = taggData;\n\n    const coidx = findIndex(\n      collaborations,\n      o => o.id === selectedAuthors.value\n    );\n    const selCol = collaborations[coidx];\n    const affIds = selCol.current_affiliations.map(ca => ca.id);\n\n    // eslint-disable-next-line array-callback-return\n    selCol.current_affiliations.map(ca => {\n      affiliations[ca.id] = [ca.department, ca.organization, ca.country].join(\n        ', '\n      );\n    });\n\n    const newAuthor = {\n      id: selCol.id,\n      familyName: selCol.last_name,\n      givenName: selCol.first_name,\n      name: selCol.name,\n      ORCID: selCol.orcid,\n      affiliationIds: affIds,\n    };\n\n    creators.push(newAuthor);\n\n    taggData.creators = creators;\n    taggData.affiliation_ids = uniq(\n      flattenDeep(affiliation_ids.concat(affIds))\n    );\n    author_ids.push(newAuthor.id);\n    taggData.author_ids = author_ids;\n    taggData.affiliations = affiliations;\n    this.setState({ taggData, selectedAuthors: null });\n  }\n\n  onAddNewReviewer() {\n    const { selectedAuthors, collaborations } = this.state;\n    const leaders = this.state.leaders || this.props.leaders;\n\n    const coidx = findIndex(\n      collaborations,\n      o => o.id === selectedAuthors.value\n    );\n    const selCol = collaborations[coidx];\n\n    const newLeader = {\n      id: selCol.id,\n      name: selCol.name,\n    };\n\n    leaders.push(newLeader);\n    this.setState({ leaders, selectedAuthors: null });\n  }\n\n  onAddAff(g) {\n    const { fields } = this.state;\n    const taggData = this.state.taggData || this.props.taggData;\n    const department = fields[`${g.id}@line_department`];\n    const organization = fields[`${g.id}@line_organization`];\n    const country = fields[`${g.id}@line_country`];\n    const { affiliations, creators, affiliation_ids } = taggData;\n\n    const params = {\n      department,\n      organization,\n      country,\n    };\n\n    UsersFetcher.findAndCreateAff(params).then(result => {\n      if (result.error) {\n        alert(result.error);\n      } else {\n        affiliations[result.id] = result.aff_output;\n        g.affiliationIds.push(result.id);\n        const idx = findIndex(creators, o => o.id === g.id);\n        // authors.splice(idx, 1, result.user);\n        fields[`${g.id}@line_department`] = '';\n        fields[`${g.id}@line_organization`] = '';\n        fields[`${g.id}@line_country`] = '';\n        taggData.affiliations = affiliations;\n        // eslint-disable-next-line camelcase\n        affiliation_ids.push(result.id);\n        taggData.affiliation_ids = uniq(flattenDeep(affiliation_ids));\n        taggData.creators[idx] = g;\n\n        this.setState({ taggData, fields });\n      }\n    });\n  }\n\n  onDeleteAff(g, aid) {\n    // eslint-disable-next-line react/destructuring-assignment\n    const taggData = this.state.taggData || this.props.taggData;\n    const { creators } = taggData;\n\n    g.affiliationIds = g.affiliationIds.filter(id => id !== aid);\n    const cx = findIndex(creators, o => o.id === g.id);\n    taggData.creators[cx] = g;\n    this.setState({ taggData });\n  }\n\n  onSave() {\n    const { taggData, leaders, collaborations } = this.state;\n    const { element } = this.props;\n    const elementId = element.element_id || element.id;\n    const elementType = element.element_type || element.elementType;\n\n    if (taggData == null && leaders == null) {\n      alert('no changes!');\n      return true;\n    }\n\n    if (taggData != null) {\n      const { creators } = taggData;\n      const authorCount = (creators || []).length;\n\n      if (authorCount > 0 && !this.refBehalfAsAuthor.checked) {\n        alert(\n          `Please confirm you are contributing on behalf of the author${\n            authorCount > 0 ? 's' : ''\n          }.'`\n        );\n        return true;\n      }\n    }\n\n    if (leaders != null) {\n      const filterAcc = collaborations.filter(\n        ({ id, type }) =>\n          leaders.some(leader => leader.id === id) && type === 'Collaborator'\n      );\n      if (filterAcc.length > 0) {\n        alert(\n          'The selected collaborator does not have an account and cannot be a group lead reviewer.'\n        );\n        return true;\n      }\n    }\n    RepositoryFetcher.saveRepoAuthors({\n      taggData,\n      leaders,\n      elementId,\n      elementType,\n    }).then(result => {\n      if (result.error) {\n        // eslint-disable-next-line no-alert\n        alert(result.error);\n      } else {\n        if (elementType === 'Reaction') {\n          ReviewActions.displayReviewReaction(elementId);\n        } else if (elementType === 'Sample') {\n          ReviewActions.displayReviewSample(elementId);\n        }\n        this.setState({ taggData: null, modalShow: false });\n      }\n    });\n    return true;\n  }\n\n  loadOrcid() {\n    const taggData = this.state.taggData || this.props.taggData;\n    const { creators, contributors, author_ids } = taggData;\n    let ids = [];\n    ids.push(contributors.id);\n    ids = ids.concat(author_ids);\n    CollaboratorFetcher.loadOrcidByUserId({ ids }).then(result => {\n      const orcids = result.orcids || [];\n      const cx = findIndex(orcids, o => o.id === contributors.id);\n      if (cx > -1) {\n        contributors.ORCID = orcids[cx].orcid;\n      }\n\n      creators.forEach((creator, idx) => {\n        const cix = findIndex(orcids, o => o.id === creator.id);\n        if (cix > -1) {\n          creators[idx].ORCID = orcids[cix].orcid;\n        }\n      });\n      taggData.creators = creators;\n      taggData.contributors = contributors;\n      this.setState({ taggData });\n    });\n  }\n\n  contributor() {\n    const taggData = this.state.taggData || this.props.taggData;\n    const contributors = taggData?.contributors || {};\n\n    const orcid =\n      contributors.ORCID == null ? (\n        ''\n      ) : (\n        <OrcidIcon orcid={contributors.ORCID} />\n      );\n    const aff =\n      contributors.affiliations &&\n      Object.keys(contributors.affiliations).map(k => (\n        <div key={uuid.v4()}> -{contributors.affiliations[k]}</div>\n      ));\n    return (\n      <div>\n        <h5>\n          <b>Contributor:</b>\n        </h5>\n        {orcid}\n        {contributors.name} <br /> {aff}{' '}\n      </div>\n    );\n  }\n\n  selectUsers() {\n    const { selectedAuthors, collaborations } = this.state;\n    const { isEmbargo } = this.props;\n    // eslint-disable-next-line react/destructuring-assignment\n    const taggData = this.state.taggData || this.props.taggData || {};\n    const creators = taggData?.creators || [];\n    const authorIds = taggData?.author_ids || [];\n\n    const filterCol = collaborations?.filter(\n      ({ id }) => !(authorIds || []).includes(id)\n    );\n\n    const options = filterCol.map(c => ({\n      name: c.name,\n      label: c.name,\n      value: c.id,\n    }));\n\n    const authorCount = (creators || []).length;\n\n    const btnReviewer = isEmbargo ? (\n      <span />\n    ) : (\n      <Button\n        bsStyle=\"info\"\n        onClick={() => this.onAddNewReviewer()}\n        disabled={!selectedAuthors}\n      >\n        <i className=\"fa fa-plus\" />\n        Add to Reviewer List\n      </Button>\n    );\n\n    return (\n      <div>\n        <Checkbox\n          inputRef={ref => {\n            this.refBehalfAsAuthor = ref;\n          }}\n        >\n          I am contributing on behalf of the author{authorCount > 0 ? 's' : ''}\n        </Checkbox>\n        <InputGroup>\n          <InputGroup.Addon>My Collaboration(s)</InputGroup.Addon>\n          <Select\n            searchable\n            placeholder=\"Select authors from my collaboration\"\n            backspaceRemoves\n            value={selectedAuthors}\n            defaultValue={selectedAuthors}\n            valueKey=\"value\"\n            labelKey=\"label\"\n            matchProp=\"name\"\n            options={options}\n            onChange={this.handleSelectAuthors}\n          />\n          <InputGroup.Button>\n            <Button\n              bsStyle=\"success\"\n              onClick={() => this.onAddNewAuthor()}\n              disabled={!selectedAuthors}\n            >\n              <i className=\"fa fa-plus\" />\n              Add to Author List\n            </Button>\n            {btnReviewer}\n          </InputGroup.Button>\n        </InputGroup>\n      </div>\n    );\n  }\n\n  renderLeaders() {\n    const { disabled, isEmbargo } = this.props;\n    const leaders = this.state.leaders || this.props.leaders;\n    if (isEmbargo) {\n      return '';\n    }\n\n    const tbodyLeaders = leaders?.map(leader => (\n      <tbody key={`tbody_${uuid.v1()}`}>\n        <tr key={`tbody_${uuid.v1()}`}>\n          <td>\n            <DeleteConfirmBtn\n              label={leader.name}\n              onClickYes={() => this.handleDeleteLeader(leader)}\n            />\n            &nbsp;\n          </td>\n          <td>{leader.name}</td>\n        </tr>\n      </tbody>\n    ));\n\n    return (\n      <div>\n        <h4>Additional Reviewer List</h4>\n        <Table responsive condensed hover>\n          <thead>\n            <tr style={{ backgroundColor: '#ddd' }}>\n              <th width=\"5%\">Action</th>\n              <th width=\"95%\">Name</th>\n            </tr>\n          </thead>\n          {tbodyLeaders || ''}\n        </Table>\n      </div>\n    );\n  }\n\n  renderAuthors() {\n    const { countries, organizations, departments, fields } = this.state;\n    // eslint-disable-next-line react/destructuring-assignment\n    const taggData = this.state.taggData || this.props.taggData;\n    const creators = taggData?.creators || [];\n\n    const tbodyAuthors = creators.map(creator => (\n      <tbody key={`tbody_${uuid.v1()}`}>\n        <tr key={`tbody_${uuid.v1()}`}>\n          <td>\n            <DeleteConfirmBtn\n              label={creator.name}\n              onClickYes={() => this.handleDeleteAuthor(creator)}\n            />\n            &nbsp;\n          </td>\n          <td>{creator.name}</td>\n          <td>\n            <OrcidIcon orcid={creator.ORCID} />\n            {creator.ORCID}\n          </td>\n          <td>\n            {affbody(\n              taggData,\n              creator,\n              fields,\n              countries,\n              organizations,\n              departments,\n              this.onAddAff,\n              this.onDeleteAff,\n              this.handleInputChange\n            )}\n          </td>\n        </tr>\n      </tbody>\n    ));\n\n    return (\n      <div>\n        <h4>Author List</h4>\n        <Table responsive condensed hover style={{ height: '260px' }}>\n          <thead>\n            <tr style={{ backgroundColor: '#ddd' }}>\n              <th width=\"5%\">Action</th>\n              <th width=\"10%\">Name</th>\n              <th width=\"15%\">ORCID iD</th>\n              <th width=\"70%\">\n                <Table style={{ backgroundColor: 'unset', margin: 'unset' }}>\n                  <tbody>\n                    <tr>\n                      <td style={{ padding: 'unset' }} width=\"90%\">\n                        Affiliation\n                      </td>\n                      <td style={{ padding: 'unset' }} width=\"10%\">\n                        &nbsp;\n                      </td>\n                    </tr>\n                  </tbody>\n                </Table>\n              </th>\n            </tr>\n          </thead>\n          {tbodyAuthors || ''}\n        </Table>\n      </div>\n    );\n  }\n\n  renderButton() {\n    const { disabled, isEmbargo } = this.props;\n    let btn = (\n      <Button\n        style={{ marginLeft: '5px' }}\n        onClick={() => this.setState({ modalShow: true })}\n      >\n        <i className=\"fa fa-users\" />\n        &nbsp;Authors & Reviewers\n      </Button>\n    );\n    if (isEmbargo || disabled === true) {\n      btn = (\n        <Button\n          disabled={disabled}\n          onClick={() => this.setState({ modalShow: true })}\n        >\n          <i className=\"fa fa-plus\" />\n        </Button>\n      );\n    }\n    return (\n      <OverlayTrigger\n        placement=\"top\"\n        overlay={\n          <Tooltip id=\"tt_metadata\">Add/Remove Authors & Reviewers</Tooltip>\n        }\n      >\n        {btn}\n      </OverlayTrigger>\n    );\n  }\n\n  renderButtons() {\n    return (\n      <ButtonToolbar>\n        <Button bsStyle=\"warning\" onClick={() => this.handleClose()}>\n          Close\n        </Button>\n        <Button bsStyle=\"info\" onClick={() => this.loadOrcid()}>\n          get ORCID iD\n        </Button>\n        <Button bsStyle=\"success\" onClick={() => this.onSave()}>\n          Save\n        </Button>\n      </ButtonToolbar>\n    );\n  }\n\n  render() {\n    const { modalShow } = this.state;\n    const { schemeOnly } = this.props;\n    if (schemeOnly === true) {\n      return '';\n    }\n\n    return (\n      <span>\n        {this.renderButton()}\n        <Modal\n          show={modalShow}\n          onHide={this.handleClose}\n          dialogClassName=\"author-modal-dialog\"\n        >\n          <Modal.Body style={{ overflow: 'auto' }}>\n            <div>\n              {this.contributor()}\n              {this.selectUsers()}\n            </div>\n            <br />\n            <div>{this.renderAuthors()}</div>\n            <div>{this.renderLeaders()}</div>\n            {this.renderButtons()}\n          </Modal.Body>\n        </Modal>\n      </span>\n    );\n  }\n}\n\nRepoReviewAuthorsModal.propTypes = {\n  element: PropTypes.object.isRequired,\n  leaders: PropTypes.array,\n  disabled: PropTypes.bool,\n  isEmbargo: PropTypes.bool,\n  schemeOnly: PropTypes.bool,\n  taggData: PropTypes.object,\n};\n\nRepoReviewAuthorsModal.defaultProps = {\n  taggData: {},\n  leaders: [],\n  schemeOnly: false,\n  isEmbargo: false,\n  disabled: false,\n};\n","import React from 'react';\nimport { Label } from 'react-bootstrap';\nimport RepoConst from 'src/components/chemrepo/common/RepoConst';\n\nfunction StateLabel(state) {\n  const stateStyle =\n    {\n      [RepoConst.P_STATE.REVIEWED]: 'info',\n      [RepoConst.P_STATE.PENDING]: 'warning',\n      [RepoConst.P_STATE.ACCEPTED]: 'success',\n    }[state] || 'default';\n\n  return <Label bsStyle={stateStyle}>{state}</Label>;\n}\n\nexport default StateLabel;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { Button } from 'react-bootstrap';\n\nfunction ContactEmail(props) {\n  const { label, email, size } = props;\n  const handleSendEmail = () => {\n    window.location.href = `mailto:${email}`;\n  };\n\n  return (\n    <Button bsSize={size} onClick={handleSendEmail}>\n      <i className=\"fa fa-envelope-o\" aria-hidden=\"true\" />\n      {` ${label}`}\n    </Button>\n  );\n}\n\nContactEmail.propTypes = {\n  label: PropTypes.string,\n  email: PropTypes.string,\n  size: PropTypes.string,\n};\n\nContactEmail.defaultProps = {\n  label: 'Contact Us',\n  email: 'chemotion-repository@lists.kit.edu',\n  size: 'small',\n};\n\nexport default ContactEmail;\n","import moment from 'moment';\n\nexport const formatDateDMYTime = (params) => {\n  const dateTime = new Date(params);\n  const options = {\n    year: 'numeric', month: 'long', day: 'numeric', timeZone: 'UTC'\n  };\n  return dateTime.toLocaleDateString('en-GB', options);\n};\n\nexport const formatDateYMDLong = (dt) => {\n  if (dt == null || typeof dt === 'undefined') return '';\n  try {\n    const m = moment(dt, 'DD/MM/YYYY HH:mm:ss');\n    if (m.isValid()) {\n      return dt;\n    }\n    const dtJSON = new Date(dt).toJSON();\n    const dtISO = new Date(Date.parse(dt)).toISOString();\n    if (dtISO === dtJSON) {\n      return moment.parseZone(new Date(Date.parse(dt))).utc().format('DD/MM/YYYY HH:mm:ss').toString();\n    }\n    return '';\n  } catch (e) {\n    return '';\n  }\n};\n\nexport const getFormattedTime = date => (date ? moment(date).format('HH:mm') : '');\nexport const getFormattedISODateTime = date => (date ? moment(date).format('YYYY-MM-DD HH:mm') : '');\nexport const getFormattedISODate = (date) => {\n  if (date == null || typeof date === 'undefined') return '';\n  try {\n    const m = moment(date, 'YYYY-MM-DD');\n    if (m.isValid()) {\n      return m.format('YYYY-MM-DD');\n    }\n    return '';\n  } catch (e) {\n    return '';\n  }\n};\n","const capitalizeFirstLetter = str =>\n  str.replace(/^[a-z]/, match => match.toUpperCase());\nconst formatPercentage = (value, precision = 3, defaultValue = ' - ') => {\n  if (value == null) return defaultValue;\n\n  const numValue = Number(value);\n  if (Number.isNaN(numValue)) return defaultValue;\n\n  if (Number.isInteger(numValue)) {\n    return `${numValue}%`;\n  }\n\n  if (numValue >= 0.001) {\n    return `${Number(numValue.toFixed(precision))}%`;\n  }\n  return `${Number(numValue.toPrecision(precision))}%`;\n};\nexport { capitalizeFirstLetter, formatPercentage };\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { AgGridReact } from 'ag-grid-react';\n\nconst MAGrid = (props) => {\n  const { xvialCompounds, data, fnSelect } = props;\n  const [rowData] = useState(xvialCompounds.data || []);\n\n  const columnDefs = [\n    { headerName: 'X-Vial', field: 'x_data.xid', width: 100 },\n    { headerName: 'Name of origin Sample', field: 'x_data.origin_id' },\n    { headerName: 'Provided by', field: 'x_data.provided_by' },\n    {\n      headerName: 'Group',\n      field: 'x_data.group',\n      valueGetter: 'data.x_data.group || \"Stefan Bräse Group\"',\n    },\n    { headerName: 'Short label of Sample', field: 'x_short_label' },\n  ];\n\n  const getRowStyle = (params) => {\n    if (params.data.x_data.xid === data && data !== '') {\n      return { background: '#d1e7dd', color: '#0f5132' };\n    }\n    return null;\n  };\n\n  const handleRowSelection = (event) => {\n    const selectedRows = event.api.getSelectedRows();\n    if (selectedRows.length > 0) {\n      const selectedRow = selectedRows[0];\n      fnSelect(selectedRow.x_data.xid, selectedRow.x_short_label);\n    }\n  };\n\n  return (\n    <div style={{ width: '100%', height: '100%' }}>\n      <div\n        style={{ width: '100%', height: '100%' }}\n        className=\"ag-theme-balham\"\n      >\n        <AgGridReact\n          columnDefs={columnDefs}\n          defaultColDef={{\n            suppressMovable: true,\n            resizable: true,\n            sortable: true,\n          }}\n          domLayout=\"autoHeight\"\n          getRowStyle={getRowStyle}\n          onSelectionChanged={handleRowSelection}\n          rowSelection=\"single\"\n          rowData={rowData}\n        />\n      </div>\n    </div>\n  );\n};\n\nMAGrid.propTypes = {\n  xvialCompounds: PropTypes.object.isRequired,\n  data: PropTypes.string,\n  fnSelect: PropTypes.func.isRequired,\n};\n\nMAGrid.defaultProps = { data: null };\nexport default MAGrid;\n","/* eslint-disable react/forbid-prop-types */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Modal,\n  Button,\n  OverlayTrigger,\n  Tooltip,\n  FormControl,\n} from 'react-bootstrap';\nimport NotificationSystem from 'react-notification-system';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\nimport MAGrid from 'src/components/chemrepo/ma/MAGrid';\n\nexport const CompoundList = (xvialCom, data = '', selectXvial) => {\n  if (typeof xvialCom === 'undefined' || !xvialCom.allowed) return <br />;\n  if (!xvialCom.hasData) return <div>No Data found in Compound platform.</div>;\n  return (\n    <div>\n      <h4>\n        <i>Reference (data from Compound platform)</i>\n      </h4>\n      <MAGrid xvialCompounds={xvialCom} data={data} fnSelect={selectXvial} />\n    </div>\n  );\n};\n\nexport const MARequestModal = (props) => {\n  const { allowRequest, elementId, isLogin, data } = props;\n  const [requestModalShow, setRequestModalShow] = useState(false);\n  const [rInput, setRInput] = useState(null);\n  const notificationSystem = useRef(null);\n  const hasData = !!(data && data !== '');\n\n  if (!(allowRequest && hasData)) return null;\n\n  const checkRequest = () => {\n    if (isLogin) {\n      setRequestModalShow(true);\n    } else {\n      const notification = notificationSystem.current;\n      notification.addNotification({\n        title: 'Request to the Compound-Platform.eu',\n        message: 'Please log in to send the request.',\n        level: 'warning',\n        position: 'tc',\n      });\n    }\n  };\n\n  const request = () => {\n    RepositoryFetcher.compound(elementId, { xid: rInput.value }, 'request').then(() => {\n      setRequestModalShow(false);\n      const notification = notificationSystem.current;\n      notification.addNotification({\n        title: 'Request to the Compound-Platform.eu',\n        message: 'Your request has been emailed to the Compound-Platform.',\n        level: 'info',\n        position: 'tc',\n      });\n    });\n  };\n\n  return (\n    <>\n      <OverlayTrigger\n        placement=\"top\"\n        overlay={<Tooltip id=\"tt_request_xvial\">Request compound</Tooltip>}\n      >\n        <a onClick={() => checkRequest()} rel=\"noopener noreferrer\">\n          <i className=\"fa fa-envelope-o\" />\n        </a>\n      </OverlayTrigger>\n      <Modal\n        show={requestModalShow}\n        onHide={() => setRequestModalShow(false)}\n        backdrop=\"static\"\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>Request compound</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <FormControl\n            style={{ height: '300px' }}\n            componentClass=\"textarea\"\n            inputRef={(m) => {\n              setRInput(m);\n            }}\n            placeholder=\"Example: I would like to request the access to a certain amount of this sample for this reason: (please give reason). Please contact me per email.\"\n          />\n          <br />\n          <p style={{ fontSize: '12px', fontStyle: 'italic' }}>\n            <b>Data privacy statement</b> This contact form can be used to get\n            in contact to the team of the molecule archive. The information that\n            you enter into the form is sent - along with the email address and\n            your name that you entered with the registration to chemotion\n            repository - to the management team of the compound platform only.\n            The data is not stored, the information is available per email only.\n            People in the management team handle your request as confidential\n            information. No other services or third parties are included.\n          </p>\n          <Button bsStyle=\"warning\" onClick={() => setRequestModalShow(false)}>\n            Close\n          </Button>\n          &nbsp;\n          <Button bsStyle=\"primary\" onClick={() => request()}>\n            Send request to the Compound-Platform\n          </Button>\n        </Modal.Body>\n      </Modal>\n      <NotificationSystem ref={notificationSystem} />\n    </>\n  );\n};\n\nMARequestModal.propTypes = {\n  allowRequest: PropTypes.bool,\n  data: PropTypes.string,\n  elementId: PropTypes.number.isRequired,\n  isLogin: PropTypes.bool,\n};\n\nMARequestModal.defaultProps = {\n  allowRequest: false,\n  data: null,\n  isLogin: false,\n};\n\nexport const MADataModal = (props) => {\n  const { data, elementId, isEditable, saveCallback, xvialCom } = props;\n  const [dataModalShow, setDataModalShow] = useState(false);\n  const [newData, setNewData] = useState(data);\n  const [newComp, setNewComp] = useState(null);\n\n  if (!isEditable) return null;\n\n  useEffect(() => {\n    setNewData(data);\n  }, [dataModalShow, data]);\n\n  const selectXvial = (xid, xcomp) => {\n    setNewData(xid);\n    setNewComp(xcomp);\n  };\n\n  const save = () => {\n    RepositoryFetcher.compound(elementId, { xid: newData, xcomp: newComp }, 'update').then(() => {\n      setDataModalShow(false);\n      saveCallback(elementId, newData);\n    });\n  };\n\n  const remove = () => {\n    RepositoryFetcher.compound(elementId, {}, 'update').then(() => {\n      setDataModalShow(false);\n      saveCallback(elementId, '');\n    });\n  };\n\n  return (\n    <>\n      <OverlayTrigger\n        placement=\"top\"\n        overlay={\n          <Tooltip id=\"tt_xvial\">Click to input Compound X-Vial number</Tooltip>\n        }\n      >\n        <a onClick={() => setDataModalShow(true)} rel=\"noopener noreferrer\">\n          <i className=\"fa fa-pencil\" />\n        </a>\n      </OverlayTrigger>\n      <Modal\n        bsSize=\"large\"\n        show={dataModalShow}\n        onHide={() => setDataModalShow(false)}\n        backdrop=\"static\"\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>Compound X-Vial number</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <FormControl type=\"text\" defaultValue={newData} readOnly />\n          {CompoundList(xvialCom, newData, selectXvial)}\n          <div>\n            <i className=\"fa fa-info-circle\" aria-hidden=\"true\" />\n            &nbsp; The currently stored data:{' '}\n            <span style={{ background: '#d1e7dd', color: '#0f5132' }}>\n              highlighted with a color\n            </span>\n            .\n          </div>\n          <div>\n            <i className=\"fa fa-info-circle\" aria-hidden=\"true\" />\n            &nbsp; Click on a row to select the X-Vial. Remember to press the\n            &#39;Save&#39; button if you wish to save the selection.\n          </div>\n          <Button bsStyle=\"warning\" onClick={() => setDataModalShow(false)}>\n            Cancel\n          </Button>\n          &nbsp;\n          <Button bsStyle=\"primary\" onClick={() => save()}>\n            Save\n          </Button>\n          &nbsp;\n          <Button bsStyle=\"danger\" onClick={() => remove()}>\n            Remove X-Vial\n          </Button>\n        </Modal.Body>\n      </Modal>\n    </>\n  );\n};\n\nMADataModal.propTypes = {\n  data: PropTypes.string,\n  elementId: PropTypes.number.isRequired,\n  isEditable: PropTypes.bool.isRequired,\n  saveCallback: PropTypes.func,\n  xvialCom: PropTypes.object.isRequired,\n};\n\nMADataModal.defaultProps = { data: null, saveCallback: () => { } };\n","const getFormattedRange = (data) => {\n  if (!data || data === '-Infinity...Infinity') {\n    return '';\n  }\n  const result = _result => `${_result} °C`;\n  const rangeRegex = /^([^.\\s]+(?:\\.[^.\\s]+)?)\\.{2,3}([^.\\s]+(?:\\.[^.\\s]+)?)$/;\n  if (rangeRegex.test(data)) {\n    const [, startValue, endValue] = data.match(rangeRegex);\n    if (startValue === endValue || endValue === 'Infinity') {\n      return result(startValue);\n    } else if (startValue === '-Infinity') {\n      return result(endValue);\n    }\n    return result(`${startValue} - ${endValue}`);\n  }\n  return result(data);\n};\n\nexport default getFormattedRange;\n","import UIStore from 'src/stores/alt/stores/UIStore';\nimport getFormattedRange from 'src/components/chemrepo/range-utils';\n\nexport const getElementType = element => element?.tag?.taggable_type;\n\nexport const getPublicationId = (element) => {\n  const tag = element?.tag || {};\n  const tagData = tag.taggable_data || {};\n  const tagType = getElementType(element) || '';\n  const publishedId = tagData[`public_${tagType.toLowerCase()}`];\n  return publishedId;\n};\n\nexport const getAuthorLabel = (authorIds) => {\n  if (!authorIds) return '';\n  return authorIds.length > 1 ? 'Authors:' : 'Author:';\n};\n\nexport const formatPhysicalProps = (element) => {\n  const meltingPoint = getFormattedRange(element.melting_point);\n  const boilingPoint = getFormattedRange(element.boiling_point);\n  const showPhysicalProps = (!!meltingPoint || !!boilingPoint);\n  return { meltingPoint, boilingPoint, showPhysicalProps };\n};\n\nexport const doStValidation = element => {\n  const { x: submitException } = UIStore.getState();\n  const elementExceptions = submitException[element.type] || [];\n  if (\n    elementExceptions.length < 1 ||\n    (submitException?.rules.length || 0) < 1\n  ) {\n    // console.log('no exception or no rule, do the validation');\n    return true;\n  }\n  if (element.segments?.length < 1) {\n    // console.log('element has no segments, do the validation');\n    return true;\n  }\n\n  if (!Array.isArray(elementExceptions)) {\n    // console.log('elementExceptions is not array, do the validation');\n    return true;\n  }\n\n  const exceptions = elementExceptions.some(exception => {\n    const rule = submitException.rules.find(\n      r => r.id === exception.rule // && r.segment === exception.segment\n    );\n    if (!rule) {\n      // console.log('exception has no match rule, stop and do the validation');\n      return true;\n    }\n\n    const checkSegment = element.segments.find(\n      segment =>\n        segment.klass_label === exception.segment &&\n        segment.element_type.toLowerCase() === element.type\n    );\n    if (!checkSegment) {\n      // console.log('element has no match segment, continue to find the next segment rule');\n      return false;\n    }\n\n    // required check\n    const requiredLayers = rule.properties.required.layers;\n    const checkRequired = requiredLayers.some(layer => {\n      const checkLayer = checkSegment.properties.layers[layer.key];\n      if (!checkLayer) {\n        // console.log('no match layer, continue to find the next layer rule');\n        return false;\n      }\n\n      // check fields of the layer\n      const requiredFields = layer.fields;\n      const result = checkLayer.fields.filter(\n        rec => requiredFields.includes(rec.field) && !!rec.value\n      );\n      return result.length !== requiredFields.length;\n    });\n    return checkRequired;\n  });\n\n  return exceptions;\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction ColoredOverlay({ color }) {\n  console.log('Rendering ColoredOverlay');\n  return (\n    <div\n      style={{\n        position: 'absolute',\n        top: 0,\n        left: 0,\n        width: '100%',\n        height: '100%',\n        backgroundColor: color,\n        opacity: 0.5,\n      }}\n    />\n  );\n}\n\nColoredOverlay.defaultProps = {\n  color: 'green',\n};\n\nColoredOverlay.propTypes = {\n  color: PropTypes.string,\n};\n\nexport default ColoredOverlay;\n","import React from 'react';\nimport { Button, Modal, ButtonToolbar } from 'react-bootstrap';\n\nconst ConfirmModal = ({ showModal, title, content, onClick, dialogClassName }) => {\n  return (\n    <Modal animation show={showModal} dialogClassName={dialogClassName} onHide={() => onClick(false)}>\n      <Modal.Header closeButton>\n        <Modal.Title>{title}</Modal.Title>\n      </Modal.Header>\n      <Modal.Body>\n        {content}\n\n        <ButtonToolbar className=\"pull-right\">\n          <Button bsStyle=\"primary\" onClick={() => onClick(false)} className=\"pull-right\" >No</Button>\n          <Button bsStyle=\"danger\" onClick={() => onClick(true)} >Yes</Button>\n        </ButtonToolbar>\n        <br /><br />\n      </Modal.Body>\n    </Modal>\n  );\n}\n\nexport { ConfirmModal };\n","import React from 'react';\nimport {\n  Button,\n  ButtonGroup,\n  OverlayTrigger,\n  Popover\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nconst DeleteConfirmBtn = (props) => {\n  const popover = (\n    <Popover id=\"popover-positioned-scrolling-left\">\n      delete: <br /> {props.label} ?<br />\n      <ButtonGroup>\n        <Button bsStyle=\"danger\" bsSize=\"xsmall\" onClick={() => props.onClickYes()} >\n          Yes\n        </Button>&nbsp;\n        <Button bsStyle=\"warning\" bsSize=\"xsmall\" onClick={() => props.onClickNo()} >\n          No\n        </Button>\n      </ButtonGroup>\n    </Popover>\n  );\n  return (\n    <ButtonGroup className=\"actions\">\n      <OverlayTrigger\n        animation\n        placement={props.tipPlacement}\n        root\n        trigger=\"focus\"\n        overlay={popover}\n      >\n        <Button bsSize=\"xsmall\" bsStyle=\"danger\" >\n          <i className=\"fa fa-trash-o\" aria-hidden=\"true\" />\n        </Button>\n      </OverlayTrigger>\n    </ButtonGroup>\n  );\n};\n\nDeleteConfirmBtn.propTypes = {\n  label: PropTypes.string.isRequired,\n  onClickYes: PropTypes.func.isRequired,\n  onClickNo: PropTypes.func,\n  tipPlacement: PropTypes.oneOf(['top', 'bottom', 'right', 'left'])\n};\n\nDeleteConfirmBtn.defaultProps = {\n  onClickNo: () => { },\n  tipPlacement: 'right'\n};\n\nexport default DeleteConfirmBtn;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { compact } from 'lodash';\nimport RepoConst from 'src/components/chemrepo/common/RepoConst';\n\nconst Formula = ({ formula, customText }) => {\n  let content = '';\n  if (formula) {\n    const keys = formula.split(/([A-Za-z]{1}[a-z]{0,2})(\\+?)(-?)(\\d*)/);\n    content = compact(keys).map((item, i) => {\n      const key = `${item}-${i}`;\n      if (/\\d+/.test(item)) {\n        return <sub key={key}>{item}</sub>;\n      } else if (/[+-]/.test(item)) {\n        return <sup key={key}>{item}</sup>;\n      }\n      return item;\n    });\n  }\n  const custom = customText || '';\n  return (\n    <span>\n      {content}\n      {custom}\n    </span>\n  );\n};\n\nFormula.propTypes = {\n  formula: PropTypes.string,\n  customText: PropTypes.string,\n};\n\nFormula.defaultProps = {\n  formula: '',\n  customText: '',\n};\n\nconst ExactFormula = ({ sample, molecule }) => {\n  const { decoupled = false, sum_formula: sFormula } = sample ?? {};\n  const { inchikey = '', sum_formular: mFormula } = molecule ?? {};\n  const formula =\n    decoupled && inchikey !== RepoConst.INCHIKEY_DUMMY ? sFormula : mFormula;\n  return <Formula formula={formula} />;\n};\n\nexport default Formula;\nexport { ExactFormula };\n","import React from 'react';\n\nconst REQUIRED_TIP = (\n  <span>This field is required for publication</span>\n);\n\nconst CONTRIBUTOR_TIP = (\n  <span>\n    Contributions to the database can be made by anyone. The contributor should give an information\n    on the original publication if the reaction was retrieved or extracted from a foreign work.\n  </span>\n);\n\nconst SCHEME_TIP = (\n  <ul className=\"tooltip_list\">\n    <li>\n      Add the correct chemical name of the used or obtained compounds if the name is not\n      generated automatically\n    </li>\n    <li>\n      If you use a reagent in solution, add this information to the sample: click on\n      the name of the reagent -&gt; add information (solvent, molarity etc.) in the panel for\n      the sample -&gt; save changes\n    </li>\n    <li>\n      In the same way you can also add information on the density of used reagents or the obtained\n      melting point/boiling point of your products\n    </li>\n  </ul>\n);\n\nconst DESCRIPTION_TIP = (\n  <span className=\"tooltip_list_paragraph\">\n    <ul>\n      <li>\n        Add here a complete description for the given reaction in a clear and structured\n        way with all relevant information that helps other scientists to reproduce the experiment\n      </li>\n      <li>\n        Define all details as well as possible, e.g. avoid expressions such as\n        &quot;room temperature&quot; or &quot;over night/over the weekend&quot; rather\n        give the correct temperature and time\n      </li>\n      <li>\n        The description should contain the full names and amount of all chemicals that\n        were used or obtained, please don&apos;t give general descriptions\n      </li>\n      <li>\n        Check the consistency of the given amounts and values with the reaction table again\n      </li>\n      <li>\n        The description field contains information on the reaction itself including the workup but\n        without the measures to purify the compounds by chromatography or other methods.\n        as such information should be placed in &quot;additional information for publication and\n        purification details&quot;\n      </li>\n      <li>\n        If you describe a reaction that refers to two steps (e.g. intermediate was not purified and\n        used directly for the next step) then add information on the obtained intermediate\n        (chemical name, if possible obtained amount of the crude product)\n      </li>\n    </ul>\n    <p>\n       Hint: the information on the name and amount of the chemicals can be added to a defined\n       position in the text by click on the blue button labelled with &quot;A,B, ... P1, P2&quot;\n    </p>\n  </span>\n);\n\nconst ADDITIONAL_INFO_TIP = (\n  <ul className=\"tooltip_list\">\n    <li>\n      Add here the information on the purification of your crude product(s) including the\n      information on the obtained product(s) (name, amount, yield, color, physical condition)\n    </li>\n    <li>Add the type of purification and all necessary details to reproduce the process</li>\n    <li>\n      The Rf-value of the product(s) can be entered on the &quot;properties&quot; page\n    </li>\n  </ul>\n);\n\nconst helpDescs = Object.freeze({\n  requiredField: REQUIRED_TIP,\n  contributor: CONTRIBUTOR_TIP,\n  description: DESCRIPTION_TIP,\n  scheme: SCHEME_TIP,\n  additionalInformation: ADDITIONAL_INFO_TIP\n});\n\nexport default helpDescs;\n","import React from 'react';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport helpDescs from 'src/components/utils/helpDescs';\n\nconst HelpInfo = props => (\n  helpDescs[props.source] !== undefined ?\n    <span>\n      <OverlayTrigger container={this} trigger={['hover']} delayShow={600} placement={props.place} overlay={<Tooltip id=\"tooltip_content\" className=\"left_tooltip max_tooltip\">{helpDescs[props.source]}</Tooltip>}>\n        {props.optionalElement}\n      </OverlayTrigger>\n    </span> : null\n);\n\nHelpInfo.propTypes = {\n  source: PropTypes.string.isRequired,\n  place: PropTypes.oneOf(['top', 'bottom', 'right', 'left']),\n  optionalElement: PropTypes.element,\n};\n\nHelpInfo.defaultProps = {\n  place: 'top',\n  optionalElement: (<i className=\"fa fa-info-circle\" aria-hidden=\"true\" />)\n};\n\nexport default HelpInfo;\n","/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  FormGroup, FormControl, ListGroup, ListGroupItem, Button\n} from 'react-bootstrap';\n\nexport default class HyperLinksSection extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      link: null\n    };\n\n    this.handleAddLink = this.handleAddLink.bind(this);\n    this.handleLinkInputChange = this.handleLinkInputChange.bind(this);\n    this.handleRemoveLink = this.handleRemoveLink.bind(this);\n  }\n\n  handleLinkInputChange(event) {\n    const { value } = event.target;\n\n    this.setState({ link: value });\n  }\n\n  handleAddLink() {\n    const { link } = this.state;\n    this.props.onAddLink(link);\n    this.setState({ link: null });\n  }\n\n  handleRemoveLink(link) {\n    this.props.onRemoveLink(link);\n  }\n\n  removeLinkButton(link) {\n    const { readOnly, disabled } = this.props;\n    if (!readOnly && !disabled) {\n      return (\n        <Button bsSize=\"xsmall\" bsStyle=\"danger\" onClick={() => this.handleRemoveLink(link)}>\n          <i className=\"fa fa-trash-o\" />\n        </Button>\n      );\n    }\n    return null;\n  }\n\n  listLinkItem(link) {\n    return (\n      <div style={{\n        display: 'flex', justifyContent: 'space-between', alignItems: 'center', margin: '10px'\n      }}\n      >\n        <a href={link} style={{ cursor: 'pointer' }} target=\"_blank\" rel=\"noreferrer\">{link}</a>\n        {this.removeLinkButton(link)}\n      </div>\n    );\n  }\n\n  renderHyperLinkInput() {\n    const { link } = this.state;\n    const { disabled,readOnly } = this.props;\n\n    if (disabled) {\n      return <div />;\n    }\n\n    return (\n      <FormGroup controlId=\"hyperlink\" className=\"form-inline\">\n        <FormControl\n          type=\"text\"\n          value={link || ''}\n          onChange={(event) => this.handleLinkInputChange(event)}\n          bsClass=\"form-control\"\n          bsSize=\"small\"\n          disabled={disabled || readOnly}\n          style={{ width: '90%' }}\n        />\n        <Button\n          className=\"button-right\"\n          bsStyle=\"success\"\n          onClick={this.handleAddLink}\n          disabled={link == null || readOnly}\n          bsSize=\"small\"\n          style={{ width: '8%' }}\n        >\n          Add\n        </Button>\n      </FormGroup>\n    );\n  }\n\n  renderHyperLinkList() {\n    const { data } = this.props;\n    let hyperLinks = data;\n    if (typeof hyperLinks === 'string' || hyperLinks instanceof String) {\n      hyperLinks = JSON.parse(hyperLinks);\n    }\n\n    if (hyperLinks && hyperLinks.length > 0) {\n      return (\n        <div className=\"list\">\n          <ListGroup>\n            {\n              hyperLinks.map((link) => (\n                <ListGroupItem key={link} style={{ margin: 'unset', padding: 'unset' }}>\n                  {this.listLinkItem(link)}\n                </ListGroupItem>\n              ))\n            }\n          </ListGroup>\n        </div>\n      );\n    }\n    return null;\n  }\n\n  render() {\n    return (\n      <div>\n        {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n        <label>Hyperlinks</label>\n        {this.renderHyperLinkInput()}\n        {this.renderHyperLinkList()}\n      </div>\n    );\n  }\n}\n\nHyperLinksSection.propTypes = {\n  data: PropTypes.arrayOf(PropTypes.string),\n  onAddLink: PropTypes.func.isRequired,\n  onRemoveLink: PropTypes.func.isRequired,\n  disabled: PropTypes.bool,\n  readOnly: PropTypes.bool,\n};\n\nHyperLinksSection.defaultProps = {\n  disabled: false,\n  readOnly: false,\n  data: undefined\n};\n","/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport { stopEvent } from 'src/utilities/DomHelper';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\npdfjs.GlobalWorkerOptions.workerSrc = '/pdf.worker.min.js';\nconst defaultImageStyle = {\n  style: {\n    cursor: 'default'\n  }\n};\n\nexport default class ImageModal extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      fetchSrc: props.popObject.src,\n      showModal: false,\n      isPdf: false,\n      pageIndex: 1,\n      numOfPages: 0,\n    };\n\n    this.fetchImage = this.fetchImage.bind(this);\n    this.handleModalClose = this.handleModalClose.bind(this);\n    this.handleModalShow = this.handleModalShow.bind(this);\n    this.handleImageError = this.handleImageError.bind(this);\n    this.onDocumentLoadSuccess = this.onDocumentLoadSuccess.bind(this);\n    this.previousPage = this.previousPage.bind(this);\n    this.nextPage = this.nextPage.bind(this);\n    this.changePage = this.changePage.bind(this);\n  }\n\n  componentDidMount() {\n    if (this.props.popObject.fetchNeeded) {\n      this.fetchImage();\n    }\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    if (\n      this.state.numOfPages === nextState.numOfPages\n      && this.state.numOfPages !== 0\n      && this.state.pageIndex === nextState.pageIndex\n      && this.state.showModal === nextState.showModal\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  componentDidUpdate(prevProps) {\n    if (\n      this.props.popObject.fetchNeeded\n      && this.props.popObject.fetchId !== prevProps.popObject.fetchId\n    ) {\n      this.fetchImage();\n    }\n  }\n\n  handleModalClose(e) {\n    stopEvent(e);\n    this.setState({ showModal: false });\n  }\n\n  handleModalShow(e) {\n    if (!this.props.disableClick) {\n      stopEvent(e);\n      this.setState({ showModal: true });\n    }\n  }\n\n  handleImageError() {\n    this.setState({ fetchSrc: this.props.previewObject.src });\n  }\n\n  onDocumentLoadSuccess(numPages) {\n    this.setState({ numOfPages: numPages });\n  }\n\n  changePage(offset) {\n    this.setState((prevState) => ({ pageIndex: prevState.pageIndex + offset }));\n  }\n\n  previousPage() {\n    this.changePage(-1);\n  }\n\n  nextPage() {\n    this.changePage(1);\n  }\n\n  fetchImage() {\n    const { currentUser } = UserStore.getState();\n    // For REPO\n    if (!currentUser) {\n      const fileSrc = ['/images/publications', this.props.popObject.fetchId, this.props.popObject.fetchFilename].join('/');\n      this.setState({ fetchSrc: fileSrc });\n    } else {\n      AttachmentFetcher.fetchImageAttachment({ id: this.props.popObject.fetchId, annotated: true }).then(\n        (result) => {\n          if (result.data != null) {\n            this.setState({ fetchSrc: result.data, isPdf: result.type === 'application/pdf' });\n          }\n        }\n      );\n    }\n  }\n\n  render() {\n    const {\n      hasPop, previewObject, popObject, imageStyle, showPopImage\n    } = this.props;\n    const { pageIndex, numOfPages } = this.state;\n\n    if (!hasPop || this.props.disableClick) {\n      // For REPO\n      return (\n        <div className=\"preview-table\">\n          <img\n            src={previewObject.src}\n            alt=\"\"\n            style={{ cursor: 'default', ...imageStyle }}\n          />\n        </div>\n      );\n    }\n\n    return (\n      <div>\n        <div\n          className=\"preview-table\"\n          onClick={this.handleModalShow}\n          onKeyPress={this.handleModalShow}\n          role=\"button\"\n          tabIndex={0}\n        >\n          <img\n            src={showPopImage ? popObject.src : previewObject.src}\n            alt=\"\"\n            style={{ cursor: 'pointer', ...imageStyle }}\n          />\n        </div>\n        <Modal show={this.state.showModal} onHide={this.handleModalClose} dialogClassName=\"noticeModal\">\n          <Modal.Header closeButton>\n            <Modal.Title>{popObject.title}</Modal.Title>\n          </Modal.Header>\n          <Modal.Body style={{ overflow: 'auto', position: 'relative' }}>\n            {this.state.isPdf ? (\n              <div>\n                <Document\n                  options={{\n                    isEvalSupported: false,\n                  }}\n                  file={{ url: this.state.fetchSrc }}\n                  onLoadSuccess={(pdf) => this.onDocumentLoadSuccess(pdf.numPages)}\n                >\n                  <Page pageNumber={pageIndex} />\n                </Document>\n                <div>\n                  <p>\n                    Page\n                    {' '}\n                    {pageIndex || (numOfPages ? 1 : '--')}\n                    {' '}\n                    of\n                    {' '}\n                    {numOfPages || '--'}\n                  </p>\n                  <button\n                    type=\"button\"\n                    disabled={pageIndex <= 1}\n                    onClick={() => this.previousPage()}\n                  >\n                    Previous\n                  </button>\n                  <button\n                    type=\"button\"\n                    disabled={pageIndex >= numOfPages}\n                    onClick={() => this.nextPage()}\n                  >\n                    Next\n                  </button>\n                </div>\n              </div>\n            ) : (\n              <img\n                src={this.state.fetchSrc}\n                style={{ display: 'block', maxHeight: '100%', maxWidth: '100%' }}\n                alt=\"\"\n                onError={this.handleImageError}\n              />\n            )}\n          </Modal.Body>\n          <Modal.Footer>\n            <Button bsStyle=\"primary\" onClick={this.handleModalClose} className=\"pull-left\">\n              Close\n            </Button>\n          </Modal.Footer>\n        </Modal>\n      </div>\n    );\n  }\n}\n\nImageModal.propTypes = {\n  imageStyle: PropTypes.object,\n  hasPop: PropTypes.bool.isRequired,\n  previewObject: PropTypes.shape({\n    src: PropTypes.string,\n  }).isRequired,\n  popObject: PropTypes.shape({\n    title: PropTypes.string,\n    src: PropTypes.string,\n    fetchNeeded: PropTypes.bool,\n    fetchId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    fetchFilename: PropTypes.string,\n  }).isRequired,\n  disableClick: PropTypes.bool,\n  showPopImage: PropTypes.bool,\n};\n\nImageModal.defaultProps = {\n  imageStyle: {},\n  disableClick: false,\n  showPopImage: false\n};\n","import React, { Component } from 'react';\nimport { Modal } from 'react-bootstrap';\nimport LoadingStore from 'src/stores/alt/stores/LoadingStore';\n\nexport default class LoadingModal extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      ...LoadingStore.getState(),\n    };\n\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    LoadingStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    LoadingStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState({ ...state });\n  }\n\n  render() {\n    const { loading } = this.state;\n\n    return (\n      <Modal className=\"loading-modal\" animation show={loading}>\n        <i className=\"fa fa-refresh fa-spin fa-3x fa-fw\" />\n      </Modal>\n    );\n  }\n}\n","import PropTypes from 'prop-types';\nimport UIStore from 'src/stores/alt/stores/UIStore';\n\nconst UserMatrixCheck = (matrix = 0, id = 0) => {\n  if (matrix <= 0 || id <= 0) {\n    return false;\n  }\n  const CONFIG_ID = id;\n  // eslint-disable-next-line radix\n  const cx = parseInt(matrix).toString(2).slice(0, -1);\n  const onFlag = cx && cx.length > 0 && cx.length >= CONFIG_ID ? cx[cx.length - CONFIG_ID] : 0;\n  if (onFlag > 0) {\n    return true;\n  }\n  return false;\n};\n\nconst MatrixCheck = (matrix = 0, name = '') => {\n  const { matrices } = UIStore.getState();\n  if (typeof matrices === 'undefined' || matrices === null) {\n    return false;\n  }\n\n  const CONFIG_ID = matrices[name] || 0;\n  return UserMatrixCheck(matrix, CONFIG_ID);\n};\n\nMatrixCheck.propTypes = {\n  matrix: PropTypes.number.isRequired,\n  name: PropTypes.string.isRequired\n};\n\nexport default MatrixCheck;\n","import React from 'react';\nimport { Panel, Modal } from 'react-bootstrap';\nimport Quill2Viewer from 'src/components/Quill2Viewer';\n\nconst NewsPreviewModal = ({ showModal, article, onClick }) => {\n  return (\n    <Modal animation show={showModal} dialogClassName=\"news-preview-dialog\" onHide={() => onClick(false)}>\n      <Modal.Body>\n        <div>\n          <div className=\"ribbon ribbon-top-right\"><span>Preview</span></div>\n          <Panel className=\"newseditor_review\">\n            <Panel.Heading>\n              <span>{article.title}</span>\n              <div className=\"news_author\">\n                <img src=\"/images/logo.png\" alt=\"Preview\" />&nbsp;\n                &nbsp;Creator\n                &nbsp;&nbsp;&nbsp;<i className=\"fa fa-pencil\" aria-hidden=\"true\" />&nbsp;Created Date\n              </div>\n              <br />\n              <div className=\"heading_separator\" />\n            </Panel.Heading>\n            <Panel.Body>\n              <Quill2Viewer value={article.content} />\n            </Panel.Body>\n          </Panel>\n          <div className=\"ribbon ribbon-bottom-left\"><span>Preview</span></div>\n        </div>\n      </Modal.Body>\n    </Modal>\n  );\n};\n\nexport default NewsPreviewModal;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal } from 'react-bootstrap';\nimport Utils from 'src/utilities/Functions';\nimport PrintCodeFetcher from 'src/fetchers/PrintCodeFetcher';\n\n// Component that allows users to print a PDF.\nexport default function PrintCodeModal({ element, showModal, handleModalClose, selectedConfig, analyses }) {\n  // State for the modal and preview\n  const [preview, setPreview] = useState(null);\n  const [urlError, setUrlError] = useState([]);\n  const [json, setJson] = useState({});\n\n  useEffect(() => {\n    // Import the file when the component mounts\n    async function loadData() {\n      try {\n        const response = await fetch('/json/printingConfig/defaultConfig.json');\n        if (!response.ok) {\n          throw new Error('Network response was not ok');\n        }\n        const tmpJson = await response.json();\n        setJson(tmpJson);\n      } catch (err) {\n        console.error('Failed to fetch JSON', err);\n      }\n    }\n    loadData();\n  }, []); // Empty dependency array ensures this runs only once when the component mounts\n\n  // Handles errors in the URL.\n  const errorHandler = () => {\n    const tmpUrlError = [];\n    Object.entries(json).forEach(([key, value]) => {\n      if (value != null) {\n        if (key === 'code_type') {\n          if (value !== 'bar_code' && value !== 'qr_code' && value !== 'data_matrix_code') {\n            tmpUrlError.push('Invalid code type.'\n               + ' correct values: bar_code, qr_code, data_matrix_code. Value have been overwrite');\n          }\n        }\n        if (key === 'code_image_size') {\n          if (value < 0 || value > 100) {\n            tmpUrlError.push('Invalid code image size, correct values: 0-100. Value  have been overwrite');\n          }\n        }\n        if (key === 'text_position') {\n          if (value !== 'below' && value !== 'right') {\n            tmpUrlError.push('Invalid text position, correct values: below, right. Value have been overwrite');\n          }\n        }\n      }\n    });\n    setUrlError(tmpUrlError);\n  };\n\n  // Builds the URL for fetching the PDF.\n  const buildURL = async () => {\n    const ids = analyses.length > 0 ? analyses.map(e => e.id) : [];\n    let newUrl = analyses.length > 0\n      ? `/api/v1/code_logs/print_analyses_codes?element_type=${element.type}&id=${element.id}&analyses_ids[]=${ids}&size=${selectedConfig}`\n      : `/api/v1/code_logs/print_codes?element_type=${element.type}&ids[]=${element.id}`;\n\n    if (analyses.length === 0) {\n      Object.entries(json).forEach(([configKey, configValue]) => {\n        if (configKey === selectedConfig) {\n          Object.entries(configValue).forEach(([key, value]) => {\n            newUrl += `&${key}=${value}`;\n          });\n        }\n      });\n    }\n    errorHandler();\n    PrintCodeFetcher.fetchPrintCodes(newUrl).then((result) => {\n      if (result != null) {\n        setPreview(result);\n      }\n    });\n  };\n\n  // Build the URL when the state of the PDF params changes\n  useEffect(() => {\n    if (showModal) {\n      buildURL();\n    }\n  }, [showModal]);\n\n  // Display the errors in the URL\n  const displayUrlErrorMessage = () => {\n    if (urlError.length > 0) {\n      return (\n        <div style={{ color: 'red' }}>\n          {urlError.map((error) => (\n            <div key={error}>{error}</div>\n          ))}\n        </div>\n      );\n    }\n    return null;\n  };\n\n  // Render the component\n  return (\n    <>\n      {/* Modal for the PDF options */}\n      <Modal show={showModal} onHide={handleModalClose}>\n        <Modal.Header closeButton>\n          <Modal.Title>Print a QR Code/Bar Code</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <div>\n            <h3 style={{ marginLeft: '10px' }}>Preview</h3>\n            <div style={{ marginLeft: '10px' }}>{displayUrlErrorMessage()}</div>\n            <div style={{\n              flexDirection: 'column',\n              display: 'flex',\n              marginLeft: '10px',\n              paddingRight: '10px',\n              height: '400px'\n            }}\n            >\n              {preview && (\n                <embed src={`${preview}#view=FitV`} style={{ width: '100%', height: '100%' }} />\n              )}\n            </div>\n          </div>\n        </Modal.Body>\n        <Modal.Footer>\n          <Button bsStyle=\"primary\" onClick={handleModalClose} className=\"pull-left\">Close</Button>\n          <Button\n            id=\"submit-copy-element-btn\"\n            bsStyle=\"success\"\n            onClick={() => Utils.downloadFile({ contents: preview, name: `print_codes_${element.id}.pdf` })}\n            className=\"pull-left\"\n          >\n            Print\n          </Button>\n        </Modal.Footer>\n      </Modal>\n    </>\n  );\n}\n\nPrintCodeModal.propTypes = {\n  element: PropTypes.object.isRequired,\n  showModal: PropTypes.bool.isRequired,\n  handleModalClose: PropTypes.func.isRequired,\n  selectedConfig: PropTypes.string.isRequired,\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Tooltip, OverlayTrigger, MenuItem, DropdownButton, ButtonGroup } from 'react-bootstrap';\nimport PrintCodeModal from 'src/components/common/PrintCodeModal';\n\n// Component that allows users to print a PDF.\nexport default function PrintCodeButton({element, analyses}) {\n  // State for the modal and preview\n  const [showModal, setShowModal] = useState(false);\n  const [selectedConfig, setSelectedConfig] = useState('');\n  const [json, setJson] = useState({});\n\n  useEffect(() => {\n    // Import the file when the component mounts\n    async function loadData() {\n      try {\n        const response = await fetch('/json/printingConfig/defaultConfig.json');\n        if (!response.ok) {\n          throw new Error('Network response was not ok');\n        }\n        const tmpJson = await response.json();\n        setJson(tmpJson);\n      } catch (err) {\n        console.error('Failed to fetch JSON', err);\n      }\n    }\n    loadData();\n  }, []); // Empty dependency array ensures this runs only once when the component mounts\n\n  // Handles the show event for the modal.\n  const handleModalShow = () => {\n    setShowModal(true);\n  };\n\n  // Handles the close event for the modal.\n  const handleModalClose = () => {\n    setShowModal(false);\n  };\n\n  // Set the tooltip text for the button\n  const tooltipText = 'Print code Label';\n\n  // Create the menu items for the dropdown button\n  const menuItemsAnalyses = [\n    {\n      key: 'smallCode',\n      contents: 'small',\n      text: 'Small Label',\n    },\n    {\n      key: 'bigCode',\n      contents: 'big',\n      text: 'Large Label',\n    },\n  ];\n\n\n\n  // Create the menu items for the split button\n  const menuItems = analyses.length > 0\n    ? menuItemsAnalyses\n    : Object.entries(json).map(([key]) => ({\n      key,\n      text: key,\n      contents: key,\n    }));\n\n  // Render the component\n  return (\n    <>\n      {/* Overlay for the button */}\n      <OverlayTrigger\n        placement=\"top\"\n        delayShow={500}\n        overlay={(\n          <Tooltip id=\"printCode\">\n            {tooltipText}\n          </Tooltip>\n        )}\n      >\n        <ButtonGroup className=\"button-right\">\n          <DropdownButton\n            id=\"print-code\"\n            pullRight\n            bsStyle=\"default\"\n            disabled={element.isNew}\n            bsSize=\"xsmall\"\n            onToggle={(isOpen, event) => { if (event) { event.stopPropagation(); } }}\n            title={<i className=\"fa fa-barcode fa-lg\" />}\n          >\n            {menuItems.map((e) => (\n              <MenuItem\n                key={e.key}\n                onSelect={() => {\n                  setSelectedConfig(e.contents);\n                  handleModalShow();\n                }}\n              >\n                {e.text}\n              </MenuItem>\n            ))}\n          </DropdownButton>\n        </ButtonGroup>\n      </OverlayTrigger>\n\n      {/* Display the modal */}\n      <PrintCodeModal\n        showModal={showModal}\n        handleModalClose={handleModalClose}\n        element={element}\n        selectedConfig={selectedConfig}\n        analyses={analyses}\n      />\n    </>\n  );\n}\n\nPrintCodeButton.propTypes = {\n  element: PropTypes.object.isRequired,\n};\n\nPrintCodeButton.defaultProps = {\n  analyses: [],\n};","import React from 'react';\nimport {\n  FormGroup,\n  ControlLabel,\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport uuid from 'uuid';\nimport Select from 'react-select';\n\nconst SelectionField = (props) => {\n  const label = props.label && props.label !== '' ?\n    <ControlLabel>{props.label}</ControlLabel> : '';\n  if (props.isCreatable) {\n    return (\n      <FormGroup>\n        {label}\n        <Select.Creatable\n          name={`select-${uuid.v4()}`}\n          options={props.options}\n          placeholder={props.placeholder}\n          multi={false}\n          isClearable\n          value={props.value}\n          onChange={event => props.onChange(props.field, event)}\n          promptTextCreator={p => `Create new ${p} ${props.label}`}\n        />\n      </FormGroup>\n    );\n  }\n  return (\n    <FormGroup>\n      {label}\n      <Select\n        name={`select-${uuid.v4()}`}\n        options={props.options}\n        placeholder={props.placeholder}\n        multi={false}\n        isClearable\n        value={props.value}\n        onChange={event => props.onChange(props.field, event)}\n      />\n    </FormGroup>\n  );\n};\n\nSelectionField.propTypes = {\n  options: PropTypes.arrayOf(PropTypes.shape).isRequired,\n  value: PropTypes.string.isRequired,\n  field: PropTypes.string.isRequired,\n  onChange: PropTypes.func.isRequired,\n  label: PropTypes.string,\n  placeholder: PropTypes.string,\n  isCreatable: PropTypes.bool\n};\n\nSelectionField.defaultProps = {\n  label: '',\n  placeholder: 'Please select...',\n  isCreatable: false\n};\n\nexport default SelectionField;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SpinnerPencilIcon = ({ spinningLock }) => (\n  <span>\n    {spinningLock ? <i className=\"fa fa-spin fa-spinner\" /> : null}\n    <i className=\"fa fa-pencil\" />\n  </span>\n);\n\nSpinnerPencilIcon.propTypes = {\n  spinningLock: PropTypes.bool\n};\n\nSpinnerPencilIcon.defaultProps = {\n  spinningLock: false\n};\n\nexport default SpinnerPencilIcon;\n","const permitWrite = (element) => {\n  if (!!element.can_update && !element.sealed) return true;\n  return false;\n};\nexport const permitCls = (element) =>\n  permitWrite(element) ? '' : 'permission-r';\nexport const permitOn = (element) => permitWrite(element);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Button, ButtonToolbar, OverlayTrigger, Tooltip\n} from 'react-bootstrap';\nimport { DropTarget } from 'react-dnd';\nimport ColoredOverlay from 'src/components/common/ColoredOverlay';\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport { targetContainerDataField } from 'src/utilities/DndConst';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport { absOlsTermId } from 'chem-generic-ui';\nimport { GenericDSMisType } from 'src/apps/generic/Utils';\n\n// For REPO\nimport PublicFetcher from 'src/repo/fetchers/PublicFetcher';\n\n\nclass ContainerDatasetField extends Component {\n  removeButton(datasetContainer) {\n    const { readOnly, handleRemove, disabled } = this.props;\n    if (!readOnly) {\n      return (\n        <Button\n          bsSize=\"xsmall\"\n          bsStyle=\"danger\"\n          onClick={() => handleRemove(datasetContainer)}\n          disabled={disabled}\n        >\n          <i className=\"fa fa-trash-o\" />\n        </Button>\n      );\n    }\n    return null;\n  }\n\n  render() {\n    const { connectDropTarget, isOver, canDrop, datasetContainer, handleUndo, kind, isPublic,\n      handleModalOpen, disabled\n    } = this.props;\n\n    const downloadClick = isPublic ? () => PublicFetcher.downloadZip(datasetContainer.id) : () => AttachmentFetcher.downloadZip(datasetContainer.id);\n    const gdsClick = isPublic\n      ? () => PublicFetcher.downloadDataset(datasetContainer.id)\n      : () => AttachmentFetcher.downloadDataset(datasetContainer.id);\n\n    if (datasetContainer.is_deleted) {\n      return (\n        <div>\n          <strike>{datasetContainer.name}</strike>\n\n          <Button\n            className=\"pull-right\"\n            bsSize=\"xsmall\"\n            bsStyle=\"danger\"\n            onClick={() => handleUndo(datasetContainer)}\n            disabled={disabled}\n          >\n            <i className=\"fa fa-undo\" />\n          </Button>\n\n        </div>\n      );\n    }\n    const gdsDownload = (datasetContainer.dataset == null\n      || typeof datasetContainer.dataset === 'undefined') ? (<span />) : (\n        <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"download metadata\">download metadata</Tooltip>}>\n          <Button\n            bsSize=\"xsmall\"\n            bsStyle=\"success\"\n            onClick={gdsClick}\n          >\n            <i className=\"fa fa-download\" />\n          </Button>\n        </OverlayTrigger>\n      );\n    return connectDropTarget(\n      <div>\n        {datasetContainer.dataset && datasetContainer.dataset.klass_ols !== absOlsTermId(kind)\n          ? <GenericDSMisType /> : null}\n        {/* eslint-disable-next-line jsx-a11y/anchor-is-valid, jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n        <a style={{ cursor: 'pointer' }} onClick={() => handleModalOpen(datasetContainer)}>\n          {datasetContainer.name || 'new'}\n        </a>\n        <ButtonToolbar className=\"pull-right\">\n          {gdsDownload}\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"download data\">download data + metadata</Tooltip>}>\n            <Button bsSize=\"xsmall\" bsStyle=\"info\" onClick={downloadClick}>\n              <i className=\"fa fa-download\" />\n            </Button>\n          </OverlayTrigger>\n          {this.removeButton(datasetContainer)}\n        </ButtonToolbar>\n        {isOver && canDrop && ColoredOverlay({color: 'green'})}\n      </div>\n    );\n  }\n}\n\nContainerDatasetField.propTypes = {\n  isOver: PropTypes.bool.isRequired,\n  canDrop: PropTypes.bool.isRequired,\n  readOnly: PropTypes.bool,\n  handleRemove: PropTypes.func,\n  disabled: PropTypes.bool,\n  isPublic: PropTypes.bool,\n  connectDropTarget: PropTypes.func.isRequired,\n  datasetContainer: PropTypes.shape({\n    is_deleted: PropTypes.bool,\n    name: PropTypes.string,\n    dataset: PropTypes.object,\n    id: PropTypes.number,\n  }).isRequired,\n  handleUndo: PropTypes.func.isRequired,\n  kind: PropTypes.string.isRequired,\n  handleModalOpen: PropTypes.func.isRequired,\n};\n\nContainerDatasetField.defaultProps = {\n  readOnly: false,\n  isPublic: false,\n  handleRemove: () => {},\n  disabled: false,\n};\n\nexport default DropTarget(\n  targetContainerDataField.dropTargetTypes,\n  targetContainerDataField.dataTarget,\n  targetContainerDataField.collectTarget\n)(ContainerDatasetField);\n","import { cloneDeep } from 'lodash';\nimport Element from 'src/models/Element';\n\nexport default class GenericDS extends Element {\n  static buildEmpty(klass, containerId) {\n    const template = (klass && klass.properties_release) || {};\n    return new GenericDS({\n      dataset_klass_id: klass && klass.id,\n      element_type: 'Container',\n      element_id: containerId,\n      properties: template,\n      properties_release: cloneDeep(template),\n      klass_ols: klass.ols_term_id,\n      klass_label: klass.label,\n      changed: false,\n    });\n  }\n\n  serialize() {\n    return super.serialize({\n      dataset_klass_id: this.dataset_klass_id,\n      element_type: 'Container',\n      element_id: this.element_id,\n      properties: this.properties,\n      properties_release: this.properties_release,\n    });\n  }\n\n  get datasetKlassId() {\n    return this.dataset_klass_id;\n  }\n\n  /**\n   * @param {any} datasetKlassId\n   */\n  set datasetKlassId(datasetKlassId) {\n    this.dataset_klass_id = datasetKlassId;\n  }\n\n  get getProperties() {\n    return this.properties;\n  }\n\n  /**\n   * @param {any} properties\n   */\n  set setProperties(properties) {\n    this.properties = properties;\n  }\n\n  get klassOls() {\n    return this.klass_ols;\n  }\n\n  set klassOls(klassOls) {\n    this.klass_ols = klassOls;\n  }\n\n  get klassLabel() {\n    return this.klass_label;\n  }\n\n  set klassLabel(klassLabel) {\n    this.klass_label = klassLabel;\n  }\n}\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { GenInterface, GenButtonReload, absOlsTermLabel } from 'chem-generic-ui';\nimport { LayerPlain } from 'chem-generic-ui-viewer';\nimport { Panel, ButtonToolbar } from 'react-bootstrap';\n\nconst elementalPropertiesItem = (genericDS, onChange, readOnly = false, isPublic = false) => {\n  const { properties } = genericDS;\n  const layersLayout = readOnly ?\n    (<LayerPlain\n      layers={properties.layers}\n      options={properties.select_options || {}}\n      id={properties.uuid}\n      isPublic={isPublic}\n    />) : (\n      <GenInterface\n        generic={genericDS}\n        fnChange={onChange}\n        isPreview={false}\n        isActiveWF={false}\n        fnNavi={() => {}}\n      />\n    );\n  return (<div style={{ margin: '5px' }}>{layersLayout}</div>);\n};\n\nclass GenericDSDetails extends Component {\n  constructor(props) {\n    super(props);\n    this.handleReload = this.handleReload.bind(this);\n  }\n\n  handleReload(generic) {\n    const { klass, onChange } = this.props;\n    const genericDS = generic;\n    if (genericDS) {\n      genericDS.dataset_klass_id = klass.id;\n      genericDS.klass_ols = klass.ols_term_id;\n      genericDS.klass_label = klass.label;\n    }\n    onChange(genericDS);\n  }\n\n  render() {\n    const {\n      genericDS, kind, klass, onChange, readOnly, isPublic\n    } = this.props;\n    if (Object.keys(genericDS).length !== 0) {\n      return (\n        <Panel className=\"panel-detail generic-ds-panel\">\n          <Panel.Body>\n            {elementalPropertiesItem(genericDS, onChange, readOnly, isPublic)}\n            <span className=\"g-ds-note label\">\n              <span className=\"g-ds-title\">Note</span><br />\n              {readOnly ? null : (<>Selected analysis type: {absOlsTermLabel(kind)}<br /></>)}\n              Content is designed for: {genericDS.klass_label}\n            </span>\n            {readOnly ?\n              null : (\n                <ButtonToolbar className=\"pull-right\">\n                  <GenButtonReload\n                    klass={klass}\n                    generic={genericDS}\n                    fnReload={this.handleReload}\n                  />\n                </ButtonToolbar>\n              )}\n          </Panel.Body>\n        </Panel>\n      );\n    }\n    return null;\n  }\n}\n\nGenericDSDetails.propTypes = {\n  kind: PropTypes.string,\n  genericDS: PropTypes.object,\n  klass: PropTypes.object,\n  onChange: PropTypes.func.isRequired,\n  readOnly: PropTypes.bool.isRequired,\n  isPublic: PropTypes.bool,\n};\nGenericDSDetails.defaultProps = {\n  kind: '',\n  genericDS: {},\n  klass: {},\n  isPublic: false,\n};\n\nexport default GenericDSDetails;\n","import 'whatwg-fetch';\n\nexport default class InstrumentsFetcher {\n  static fetchInstrumentsForCurrentUser(query) {\n    return fetch(\n      `/api/v1/instruments/${encodeURIComponent(query)}`,\n      { credentials: 'same-origin' }\n    ).then(response => response.json())\n      .then(json => json.instruments)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","/* eslint-disable no-param-reassign */\n/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport {\n  FormGroup, FormControl, ControlLabel, ListGroup,\n  ListGroupItem, Button, Overlay\n} from 'react-bootstrap';\nimport Dropzone from 'react-dropzone';\nimport EditorFetcher from 'src/fetchers/EditorFetcher';\nimport SaveEditedImageWarning from 'src/apps/mydb/elements/details/researchPlans/SaveEditedImageWarning';\nimport debounce from 'es6-promise-debounce';\nimport {\n  findIndex, cloneDeep, last, findKey\n} from 'lodash';\nimport { absOlsTermId } from 'chem-generic-ui';\nimport Attachment from 'src/models/Attachment';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport GenericDS from 'src/models/GenericDS';\nimport GenericDSDetails from 'src/components/generic/GenericDSDetails';\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport InstrumentsFetcher from 'src/fetchers/InstrumentsFetcher';\nimport HyperLinksSection from 'src/components/common/HyperLinksSection';\nimport ImageAnnotationModalSVG from 'src/apps/mydb/elements/details/researchPlans/ImageAnnotationModalSVG';\nimport PropTypes from 'prop-types';\nimport {\n  downloadButton,\n  removeButton,\n  annotateButton,\n  editButton,\n  sortingAndFilteringUI,\n  formatFileSize,\n  moveBackButton,\n  attachmentThumbnail,\n  ThirdPartyAppButton\n} from 'src/apps/mydb/elements/list/AttachmentList';\nimport { formatDate } from 'src/utilities/timezoneHelper';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport { StoreContext } from 'src/stores/mobx/RootStore';\nimport { observer } from 'mobx-react';\n\n\n// For REPO\nimport PublicFetcher from 'src/repo/fetchers/PublicFetcher';\n\nexport class ContainerDatasetModalContent extends Component {\n  // eslint-disable-next-line react/static-property-placement\n  static contextType = StoreContext;\n\n  constructor(props) {\n    super(props);\n    const datasetContainer = { ...props.datasetContainer };\n    const {\n      onImport\n    } = props;\n    const { thirdPartyApps } = UIStore.getState() || [];\n    this.thirdPartyApps = thirdPartyApps;\n    this.state = {\n      datasetContainer,\n      instruments: null,\n      valueBeforeFocus: null,\n      timeoutReference: null,\n      attachmentEditor: false,\n      extension: null,\n      imageEditModalShown: false,\n      filteredAttachments: [...props.datasetContainer.attachments],\n      prevMessages: [],\n      newMessages:[],\n      filterText: '',\n      attachmentGroups: {\n        Original: [],\n        BagitZip: [],\n        Combined: [],\n        Processed: {},\n      }\n    };\n    this.timeout = 6e2; // 600ms timeout for input typing\n    this.doneInstrumentTyping = this.doneInstrumentTyping.bind(this);\n    this.handleInputChange = this.handleInputChange.bind(this);\n    this.handleAddLink = this.handleAddLink.bind(this);\n    this.handleRemoveLink = this.handleRemoveLink.bind(this);\n    this.handleDSChange = this.handleDSChange.bind(this);\n    this.editorInitial = this.editorInitial.bind(this);\n    this.createAttachmentPreviews = this.createAttachmentPreviews.bind(this);\n    this.handleEdit = this.handleEdit.bind(this);\n    this.handleFilterChange = this.handleFilterChange.bind(this);\n    this.handleAttachmentRemove = this.handleAttachmentRemove.bind(this);\n    this.handleAttachmentBackToInbox = this.handleAttachmentBackToInbox.bind(this);\n    this.classifyAttachments = this.classifyAttachments.bind(this);\n    this.state.attachmentGroups = this.classifyAttachments(props.datasetContainer.attachments);\n  }\n\n  componentDidMount() {\n    this.editorInitial();\n    this.createAttachmentPreviews();\n    this.setState({\n      attachmentGroups: this.classifyAttachments(this.props.datasetContainer.attachments)\n    });\n  }\n\n  componentDidUpdate(prevProps) {\n    const { prevMessages, newMessages } = this.state;\n    const { attachments } = this.props.datasetContainer;\n\n    const prevAttachments = [...attachments];\n\n    if (prevMessages.length !== newMessages.length) {\n      this.setState({\n        prevMessages: newMessages\n      });\n\n      this.updateAttachmentsFromContext();\n    }\n\n    if (prevAttachments.length !== prevProps.datasetContainer.attachments.length) {\n      this.setState({\n        filteredAttachments: [...attachments],\n        attachmentGroups: this.classifyAttachments(attachments)\n      }, () => {\n        this.props.onChange({ ...this.state.datasetContainer });\n        this.createAttachmentPreviews();\n        this.filterAttachments();\n      });\n    }\n  }\n\n  // eslint-disable-next-line react/sort-comp\n  updateAttachmentsFromContext = () => {\n    const { datasetContainer } = this.props;\n    const { filteredAttachments } = this.state;\n\n    let combinedAttachments = [...filteredAttachments];\n\n    if (this.context.attachmentNotificationStore) {\n      combinedAttachments = this.context.attachmentNotificationStore.getCombinedAttachments(\n        filteredAttachments, 'Container', datasetContainer);\n    }\n    return combinedAttachments;\n  };\n\n  handleInputChange(type, event) {\n    const { datasetContainer } = this.state;\n    const { value } = event.target;\n    switch (type) {\n      case 'name':\n        datasetContainer.name = value;\n        break;\n      case 'instrument':\n        datasetContainer.extended_metadata.instrument = value;\n        break;\n      case 'description':\n        datasetContainer.description = value;\n        break;\n      case 'dataset':\n        datasetContainer.dataset = value;\n        break;\n      default:\n        console.warn(`Unhandled input type: ${type}`);\n        break;\n    }\n    this.setState({ datasetContainer });\n  }\n\n  handleDSChange(ds) {\n    this.handleInputChange('dataset', { target: { value: ds } });\n  }\n\n  handleFileDrop(files) {\n    this.setState((prevState) => {\n      const newAttachments = files.map((f) => {\n        const newAttachment = Attachment.fromFile(f);\n        newAttachment.is_pending = true;\n        return newAttachment;\n      });\n\n      const updatedAttachments = [...prevState.datasetContainer.attachments, ...newAttachments];\n      const updatedDatasetContainer = { ...prevState.datasetContainer, attachments: updatedAttachments };\n\n      return {\n        datasetContainer: updatedDatasetContainer,\n        filteredAttachments: updatedAttachments,\n        attachmentGroups: this.classifyAttachments(updatedAttachments),\n      };\n    }, () => {\n      this.createAttachmentPreviews();\n    });\n  }\n\n  handleAttachmentRemove(attachment) {\n    const { datasetContainer } = this.state;\n    const index = datasetContainer.attachments.indexOf(attachment);\n    datasetContainer.attachments[index].is_deleted = true;\n    this.setState({ datasetContainer });\n  }\n\n  handleAttachmentBackToInbox(attachment) {\n    const { onChange } = this.props;\n    const { datasetContainer } = this.state;\n    const index = datasetContainer.attachments.indexOf(attachment);\n    if (index !== -1) {\n      InboxActions.backToInbox(attachment);\n      datasetContainer.attachments.splice(index, 1);\n      onChange(datasetContainer);\n    }\n  }\n\n  handleUndo(attachment) {\n    const { datasetContainer } = this.state;\n    const index = datasetContainer.attachments.indexOf(attachment);\n\n    datasetContainer.attachments[index].is_deleted = false;\n    this.setState({ datasetContainer });\n  }\n\n  // the next method is used in ContainerDatasetModal.js please ignore eslint warning\n  // eslint-disable-next-line react/no-unused-class-component-methods\n  handleSave() {\n    const { datasetContainer } = this.state;\n    const { onChange, onModalHide } = this.props;\n    this.context.attachmentNotificationStore.clearMessages();\n    onChange(datasetContainer);\n    onModalHide();\n  }\n\n  handleInstrumentValueChange(event, doneInstrumentTyping) {\n    const { value } = event.target;\n    const { timeoutReference } = this.state;\n    if (!value) {\n      this.resetInstrumentComponent();\n      return;\n    }\n    if (timeoutReference) {\n      clearTimeout(timeoutReference);\n    }\n    this.setState({\n      value,\n      timeoutReference: setTimeout(() => {\n        doneInstrumentTyping();\n      }, this.timeout),\n    });\n    this.handleInputChange('instrument', event);\n    this.props.onInstrumentChange(value);\n  }\n\n  handleAddLink(link) {\n    const { datasetContainer } = this.state;\n    if (datasetContainer.extended_metadata.hyperlinks == null) {\n      datasetContainer.extended_metadata.hyperlinks = [link];\n    } else {\n      datasetContainer.extended_metadata.hyperlinks.push(link);\n    }\n    this.setState({ datasetContainer });\n  }\n\n  handleRemoveLink(link) {\n    const { datasetContainer } = this.state;\n    const index = datasetContainer.extended_metadata.hyperlinks.indexOf(link);\n    if (index !== -1) {\n      datasetContainer.extended_metadata.hyperlinks.splice(index, 1);\n    }\n    this.setState({ datasetContainer });\n  }\n\n  handleEdit(attachment) {\n    const fileType = last(attachment.filename.split('.'));\n    const docType = this.documentType(attachment.filename);\n\n    EditorFetcher.startEditing({ attachment_id: attachment.id })\n      .then((result) => {\n        if (result.token) {\n          const url = `/editor?id=${attachment.id}&docType=${docType}\n          &fileType=${fileType}&title=${attachment.filename}&key=${result.token}\n          &only_office_token=${result.only_office_token}`;\n          window.open(url, '_blank');\n\n          attachment.aasm_state = 'oo_editing';\n          attachment.updated_at = new Date();\n\n          this.props.onChange(attachment);\n        } else {\n          alert('Unauthorized to edit this file.');\n        }\n      });\n  }\n\n  handleFilterChange = (e) => {\n    this.setState({ filterText: e.target.value }, this.filterAttachments);\n  };\n\n  filterAttachments() {\n    const filterTextLower = this.state.filterText.toLowerCase();\n    const filteredGroups = this.classifyAttachments(this.props.datasetContainer.attachments);\n\n    Object.keys(filteredGroups).forEach((group) => {\n      if (Array.isArray(filteredGroups[group])) {\n        filteredGroups[group] = filteredGroups[group]\n          .filter((attachment) => attachment.filename.toLowerCase().includes(filterTextLower));\n      } else {\n        Object.keys(filteredGroups[group]).forEach((subGroup) => {\n          filteredGroups[group][subGroup] = filteredGroups[group][subGroup]\n            .filter((attachment) => attachment.filename.toLowerCase().includes(filterTextLower));\n        });\n      }\n    });\n\n    this.setState({ attachmentGroups: filteredGroups });\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  classifyAttachments(attachments) {\n    const groups = {\n      Original: [],\n      BagitZip: [],\n      Combined: [],\n      Processed: {},\n      Pending: [],\n    };\n\n    attachments.forEach((attachment) => {\n      if (attachment.is_pending) {\n        groups.Pending.push(attachment);\n        return;\n      }\n\n      if (attachment.aasm_state === 'queueing' && attachment.content_type === 'application/zip') {\n        groups.BagitZip.push(attachment);\n      } else if (attachment.aasm_state === 'image'\n          && (attachment.filename.includes('.combined')\n          || attachment.filename.includes('.new_combined'))) {\n        groups.Combined.push(attachment);\n      } else if (attachment.filename.includes('bagit')) {\n        const baseName = attachment.filename.split('_bagit')[0].trim();\n        if (!groups.Processed[baseName]) {\n          groups.Processed[baseName] = [];\n        }\n        groups.Processed[baseName].push(attachment);\n      } else if (attachment.aasm_state === 'non_jcamp' && attachment.filename.includes('.new_combined')) {\n        groups.Combined.push(attachment);\n      } else {\n        groups.Original.push(attachment);\n      }\n    });\n\n    return groups;\n  }\n\n  resetInstrumentComponent() {\n    const { datasetContainer } = this.state;\n    this.setState({\n      value: '',\n      showInstruments: false,\n      instruments: null,\n      valueBeforeFocus: null,\n      error: '',\n    });\n    datasetContainer.extended_metadata.instrument = '';\n  }\n\n  doneInstrumentTyping() {\n    const { value } = this.state;\n    if (!value) {\n      this.resetInstrumentComponent();\n    } else {\n      this.fetchInstruments(value);\n    }\n  }\n\n  fetchInstruments(value, show = true) {\n    const debounced = debounce((query) => InstrumentsFetcher.fetchInstrumentsForCurrentUser(query), 200);\n    debounced(value)\n      .then((result) => {\n        const newState = {};\n        if (result.length > 0) {\n          newState.instruments = result;\n          newState.showInstruments = show;\n        } else {\n          newState.instruments = null;\n          newState.error = '';\n          newState.showInstruments = false;\n        }\n        this.setState(newState);\n      })\n      .catch((error) => console.log(error));\n  }\n\n  selectInstrument() {\n    const { datasetContainer, timeoutReference, value } = this.state;\n\n    this.setState({\n      showInstruments: false,\n      valueBeforeFocus: null,\n    });\n\n    if (!value || value.trim() === '') {\n      this.setState({ value: '' });\n      return 0;\n    }\n    datasetContainer.extended_metadata.instrument = value;\n    clearTimeout(timeoutReference);\n    return value;\n  }\n\n  focusInstrument(newFocus) {\n    const { instruments, valueBeforeFocus } = this.state;\n    const newState = {};\n    if (!valueBeforeFocus) {\n      newState.valueBeforeFocus = instruments[newFocus].name;\n    }\n    newState.value = instruments[newFocus].name;\n    this.setState(newState);\n  }\n\n  abortAutoSelection() {\n    const { valueBeforeFocus } = this.state;\n    this.setState({\n      value: valueBeforeFocus,\n      valueBeforeFocus: null,\n    });\n  }\n\n  createAttachmentPreviews() {\n    const { datasetContainer, isPublic } = this.props;\n    datasetContainer.attachments.map((attachment) => {\n      if (attachment.thumb) {\n        if (isPublic) {\n          PublicFetcher.fetchThumbnail(attachment.id).then(result => {\n            if (result != null) {\n              attachment.preview = `data:image/png;base64,${result}`;\n              this.forceUpdate();\n            }\n          });\n        } else {\n          AttachmentFetcher.fetchThumbnail({ id: attachment.id }).then(\n            (result) => {\n              if (result != null) {\n                attachment.preview = `data:image/png;base64,${result}`;\n                this.forceUpdate();\n              }\n            }\n          );\n        }\n      } else {\n        attachment.preview = '/images/wild_card/not_available.svg';\n        this.forceUpdate();\n      }\n      return attachment;\n    });\n  }\n\n  documentType(filename) {\n    const { extension } = this.state;\n\n    const ext = last(filename.split('.'));\n    const docType = findKey(extension, (o) => o.includes(ext));\n\n    if (typeof docType === 'undefined' || !docType) {\n      return null;\n    }\n\n    return docType;\n  }\n\n  editorInitial() {\n    EditorFetcher.initial().then((result) => {\n      this.setState({\n        attachmentEditor: result.installed,\n        extension: result.ext,\n      });\n    });\n  }\n\n  customDropzone() {\n    return (\n      <Dropzone\n        onDrop={(files) => this.handleFileDrop(files)}\n        className=\"attachment-dropzone\"\n      >\n        Drop files here, or click to upload.\n      </Dropzone>\n    );\n  }\n\n  renderImageEditModal() {\n    const { chosenAttachment, imageEditModalShown } = this.state;\n    const { onChange } = this.props;\n    return (\n      <ImageAnnotationModalSVG\n        attachment={chosenAttachment}\n        isShow={imageEditModalShown}\n        handleSave={\n          () => {\n            const newAnnotation = document.getElementById('svgEditId').contentWindow.svgEditor.svgCanvas.getSvgString();\n            chosenAttachment.updatedAnnotation = newAnnotation;\n            this.setState({ imageEditModalShown: false });\n            onChange(chosenAttachment);\n          }\n        }\n        handleOnClose={() => { this.setState({ imageEditModalShown: false }); }}\n      />\n    );\n  }\n\n  renderInstruments() {\n    const { instruments, error } = this.state;\n\n    if (instruments) {\n      return (\n        <div>\n          {instruments.map((instrument, index) => (\n            <ListGroupItem\n              onClick={() => this.selectInstrument()}\n              onMouseEnter={() => this.focusInstrument(index)}\n              // eslint-disable-next-line react/no-array-index-key\n              key={`instrument_${index}`}\n              ref={`instrument_${index}`}\n              header={instrument.name}\n            />\n          ))}\n        </div>\n      );\n    } if (error) {\n      return <ListGroupItem>{error}</ListGroupItem>;\n    }\n    return <div />;\n  }\n\n  renderAttachmentRow(attachment) {\n    const { extension, attachmentEditor } = this.state;\n    const { readOnly, isPublic } = this.props;\n    const pubSrc = isPublic\n      ? `/api/v1/public/download/annotated_image?id=${attachment.id}`\n      : '';\n    return (\n      <div className=\"attachment-row\" key={attachment.id}>\n        {attachmentThumbnail(attachment, pubSrc)}\n        <div className=\"attachment-row-text\" title={attachment.filename}>\n          {attachment.is_deleted ? (\n            <strike>{attachment.filename}</strike>\n          ) : (\n            attachment.filename\n          )}\n          <div className=\"attachment-row-subtext\">\n            <div>\n              Created:&nbsp;\n              {formatDate(attachment.created_at)}\n            </div>\n            &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;\n            <div>\n              Size:&nbsp;\n              <span style={{ fontWeight: 'bold', color: '#444' }}>\n                {formatFileSize(attachment.filesize)}\n              </span>\n            </div>\n          </div>\n        </div>\n        <div className=\"attachment-row-actions\" style={{ display: 'flex', alignItems: 'center', gap: '5px' }}>\n          {attachment.is_deleted ? (\n            <Button\n              bsSize=\"xs\"\n              bsStyle=\"danger\"\n              className=\"attachment-button-size\"\n              onClick={() => this.handleUndo(attachment)}\n            >\n              <i className=\"fa fa-undo\" aria-hidden=\"true\" />\n            </Button>\n          ) : (\n            <>\n              {downloadButton(attachment, isPublic)}\n              <ThirdPartyAppButton attachment={attachment} options={this.thirdPartyApps} />\n              {editButton(\n                attachment,\n                extension,\n                attachmentEditor,\n                attachment.aasm_state === 'oo_editing' && new Date().getTime()\n                  < (new Date(attachment.updated_at).getTime() + 15 * 60 * 1000),\n                !attachmentEditor || attachment.aasm_state === 'oo_editing'\n                  || attachment.is_new || this.documentType(attachment.filename) === null,\n                this.handleEdit\n              )}\n              {annotateButton(attachment, this, readOnly)}\n              {moveBackButton(attachment, this.handleAttachmentBackToInbox, readOnly)}\n              &nbsp;\n              {removeButton(attachment, this.handleAttachmentRemove, readOnly)}\n            </>\n          )}\n        </div>\n        {attachment.updatedAnnotation && <SaveEditedImageWarning visible />}\n      </div>\n    );\n  }\n\n  renderAttachments() {\n    const {\n      filteredAttachments, sortDirection, attachmentGroups\n    } = this.state;\n    const { datasetContainer, readOnly, disabled } = this.props;\n\n    const renderGroup = (attachments, title, key) => (\n      <div key={key} style={{ marginTop: '10px' }}>\n        <div style={{\n          backgroundColor: '#D3D3D3',\n          fontWeight: 'bold',\n          marginBottom: '5px',\n          borderRadius: '5px',\n          padding: '5px'\n        }}\n        >\n          {title}\n        </div>\n        {attachments.map((attachment) => this.renderAttachmentRow(attachment))}\n      </div>\n    );\n\n    const hasProcessedAttachments = Object.keys(attachmentGroups.Processed).some(\n      (groupName) => attachmentGroups.Processed[groupName].length > 0\n    );\n\n    return (\n      <div className=\"attachment-main-container\">\n        {this.renderImageEditModal()}\n        <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n          <div style={{ flex: '1', alignSelf: 'center' }}>\n            {readOnly || disabled ? <span /> : this.customDropzone()}\n          </div>\n          <div style={{ marginLeft: '20px', alignSelf: 'center' }}>\n            {datasetContainer.attachments.length > 0\n              && sortingAndFilteringUI(\n                sortDirection,\n                this.handleSortChange,\n                this.toggleSortDirection,\n                this.handleFilterChange,\n                false\n              )}\n          </div>\n        </div>\n        {filteredAttachments.length === 0 ? (\n          <div className=\"no-attachments-text\">\n            There are currently no attachments.\n          </div>\n        ) : (\n          <div style={{ marginBottom: '20px' }}>\n            {attachmentGroups.Pending && attachmentGroups.Pending.length > 0\n              && renderGroup(attachmentGroups.Pending, 'Pending')}\n            {attachmentGroups.Original.length > 0 && renderGroup(attachmentGroups.Original, 'Original')}\n            {attachmentGroups.BagitZip.length > 0 && renderGroup(attachmentGroups.BagitZip, 'Bagit / Zip')}\n            {hasProcessedAttachments && Object.keys(attachmentGroups.Processed)\n              .map((groupName) => attachmentGroups.Processed[groupName].length > 0\n                && renderGroup(attachmentGroups.Processed[groupName], `Processed: ${groupName}`, groupName))}\n            {attachmentGroups.Combined.length > 0 && renderGroup(attachmentGroups.Combined, 'Combined')}\n          </div>\n        )}\n        <HyperLinksSection\n          data={this.state.datasetContainer.extended_metadata.hyperlinks}\n          onAddLink={this.handleAddLink}\n          onRemoveLink={this.handleRemoveLink}\n          disabled={this.props.disabled}\n        />\n      </div>\n    );\n  }\n\n  renderMetadata() {\n    const { datasetContainer, showInstruments } = this.state;\n    const { readOnly, disabled, kind, isPublic } = this.props;\n    const termId = absOlsTermId(kind);\n    const klasses = (UserStore.getState() && UserStore.getState().dsKlasses) || [];\n    let klass = {};\n    const idx = findIndex(klasses, (o) => o.ols_term_id === termId);\n    if (idx > -1) {\n      klass = klasses[idx];\n    }\n\n    let genericDS = {};\n    if (datasetContainer?.dataset?.id) {\n      genericDS = datasetContainer.dataset;\n    } else if (klass.ols_term_id !== undefined) {\n      genericDS = GenericDS.buildEmpty(cloneDeep(klass), datasetContainer.id);\n    }\n    return (\n      <>\n        <FormGroup controlId=\"datasetInstrument\">\n          <ControlLabel>Instrument</ControlLabel>\n          <FormControl\n            type=\"text\"\n            value={datasetContainer.extended_metadata.instrument || ''}\n            disabled={readOnly || disabled}\n            onChange={(event) => this.handleInstrumentValueChange(\n              event,\n              this.doneInstrumentTyping\n            )}\n            ref={(form) => { this.instRef = form; }}\n            autoComplete=\"off\"\n          />\n          <Overlay\n            target={() => ReactDOM.findDOMNode(this.instRef)}\n            shouldUpdatePosition\n            placement=\"bottom\"\n            show={showInstruments}\n            container={this}\n            rootClose\n            onHide={() => this.abortAutoSelection()}\n          >\n            <ListGroup\n              style={{\n                position: 'absolute', marginLeft: 0, marginTop: 17, width: '95%'\n              }}\n            >\n              {this.renderInstruments()}\n            </ListGroup>\n          </Overlay>\n        </FormGroup>\n        <FormGroup controlId=\"datasetDescription\">\n          <ControlLabel>Description</ControlLabel>\n          <FormControl\n            componentClass=\"textarea\"\n            value={datasetContainer.description || ''}\n            disabled={readOnly || disabled}\n            onChange={(event) => this.handleInputChange('description', event)}\n            rows={4}\n          />\n        </FormGroup>\n        <GenericDSDetails\n          genericDS={genericDS}\n          klass={klass}\n          kind={kind}\n          onChange={this.handleDSChange}\n          readOnly={readOnly || disabled}\n          isPublic={isPublic}\n        />\n      </>\n    );\n  }\n\n  render() {\n    const { mode } = this.props;\n    const { prevMessages } = this.state;\n    const newMessages = this.context?.attachmentNotificationStore.getAttachmentsOfMessages();\n\n    if (prevMessages.length !== newMessages.length) {\n      this.setState({\n        newMessages\n      });\n    }\n    return (\n      <div>\n        {mode === 'attachments' && this.renderAttachments()}\n        {mode === 'metadata' && this.renderMetadata()}\n      </div>\n    );\n  }\n}\n\nContainerDatasetModalContent.propTypes = {\n  datasetContainer: PropTypes.shape({\n    name: PropTypes.string.isRequired,\n    attachments: PropTypes.arrayOf(PropTypes.shape({\n      id: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.number\n      ]).isRequired,\n      aasm_state: PropTypes.string.isRequired,\n      content_type: PropTypes.string.isRequired,\n      filename: PropTypes.string.isRequired,\n      filesize: PropTypes.number.isRequired,\n      identifier: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.number\n      ]).isRequired,\n      thumb: PropTypes.bool.isRequired\n    })),\n  }).isRequired,\n  onChange: PropTypes.func.isRequired,\n  onInstrumentChange: PropTypes.func,\n  onModalHide: PropTypes.func.isRequired,\n  readOnly: PropTypes.bool,\n  disabled: PropTypes.bool,\n  kind: PropTypes.string,\n  mode: PropTypes.oneOf(['attachments', 'metadata']),\n  attachments: PropTypes.arrayOf(PropTypes.shape({\n    id: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ]).isRequired,\n    aasm_state: PropTypes.string.isRequired,\n    content_type: PropTypes.string.isRequired,\n    filename: PropTypes.string.isRequired,\n    filesize: PropTypes.number.isRequired,\n    identifier: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ]).isRequired,\n    thumb: PropTypes.bool.isRequired\n  })),\n  isPublic: PropTypes.bool, // for REPO\n};\n\nContainerDatasetModalContent.defaultProps = {\n  isPublic: false, // for REPO\n  mode: 'attachments',\n  disabled: false,\n  readOnly: false,\n  attachments: [],\n  kind: null,\n  onInstrumentChange: () => {},\n};\n\nexport default observer(ContainerDatasetModalContent);\n","/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Modal, ButtonGroup, OverlayTrigger, Tooltip, Button,\n} from 'react-bootstrap';\nimport ContainerDatasetModalContent from 'src/components/container/ContainerDatasetModalContent';\n\nexport default class ContainerDatasetModal extends Component {\n  constructor(props) {\n    super(props);\n\n    this.datasetInput = React.createRef();\n    this.state = {\n      mode: 'attachments',\n      isNameEditing: false,\n      localName: props.datasetContainer?.name,\n      instrumentIsEmpty: !props.datasetContainer.extended_metadata?.instrument,\n    };\n\n    this.handleSave = this.handleSave.bind(this);\n    this.handleSwitchMode = this.handleSwitchMode.bind(this);\n    this.handleModalClose = this.handleModalClose.bind(this);\n  }\n\n  handleModalClose(event) {\n    if (event && event.type === 'keydown' && event.key === 'Escape') {\n      this.handleSave();\n    } else {\n      this.props.onHide();\n    }\n  }\n\n  handleSave() {\n    this.datasetInput.current.handleSave();\n    this.props.onChange({\n      ...this.props.datasetContainer,\n      ...this.datasetInput.current?.state?.datasetContainer,\n      name: this.state?.localName\n    });\n  }\n\n  handleNameChange(newName) {\n    this.setState({ localName: newName });\n  }\n\n  handleSwitchMode(mode) {\n    this.setState({ mode });\n  }\n\n  toggleNameEditing = () => {\n    this.setState((prevState) => ({\n      isNameEditing: !prevState.isNameEditing,\n    }));\n  };\n\n  render() {\n    const {\n      show, onHide, onChange, readOnly, disabled, kind, datasetContainer, isPublic\n    } = this.props;\n\n    const { mode, instrumentIsEmpty } = this.state;\n\n    const attachmentTooltip = (<Tooltip id=\"attachment-tooltip\">Click to view Attachments</Tooltip>);\n    const metadataTooltip = (<Tooltip id=\"metadata-tooltip\">Click to view Metadata</Tooltip>);\n\n    const AttachmentsButton = (\n      <Button\n        bsStyle={mode === 'attachments' ? 'info' : 'default'}\n        style={{\n          pointerEvents: 'none',\n          backgroundColor: mode !== 'attachments' ? '#E8E8E8' : undefined,\n          width: '120px'\n        }}\n        onClick={() => this.handleSwitchMode('attachments')}\n      >\n        Attachments&nbsp;&nbsp;\n        <i className=\"fa fa-paperclip\" aria-hidden=\"true\" />\n      </Button>\n    );\n\n    const MetadataButton = (\n      <Button\n        bsStyle={mode === 'metadata' ? 'info' : 'default'}\n        onClick={() => this.handleSwitchMode('metadata')}\n        style={{\n          pointerEvents: 'none',\n          backgroundColor: mode !== 'metadata' ? '#E8E8E8' : undefined,\n          width: '120px'\n        }}\n      >\n        Metadata&nbsp;&nbsp;\n        <i className=\"fa fa-address-card\" aria-hidden=\"true\" />\n\n      </Button>\n    );\n\n    const btnMode = (\n      <div\n        role=\"button\"\n        tabIndex={0}\n        style={{ cursor: 'pointer' }}\n        onClick={() => {\n          if (mode === 'attachments') {\n            this.handleSwitchMode('metadata');\n          } else {\n            this.handleSwitchMode('attachments');\n          }\n        }}\n        onKeyPress={() => {}}\n      >\n        <OverlayTrigger placement=\"top\" overlay={mode === 'metadata' ? attachmentTooltip : metadataTooltip}>\n          <ButtonGroup>\n            {AttachmentsButton}\n            {MetadataButton}\n          </ButtonGroup>\n        </OverlayTrigger>\n      </div>\n    );\n\n    if (show) {\n      return (\n        <Modal\n          show={show}\n          bsSize=\"large\"\n          dialogClassName=\"attachment-modal\"\n          onHide={() => (disabled ? onHide() : this.handleModalClose())}\n        >\n          <Modal.Header style={{ flexShrink: 0 }}>\n            <Modal.Title>\n              {this.state.isNameEditing ? (\n                <div className=\"attachment-name-input-div\">\n                  <input\n                    type=\"text\"\n                    value={this.state.localName}\n                    onBlur={this.toggleNameEditing}\n                    onKeyPress={(event) => {\n                      if (event.key === 'Enter') {\n                        this.handleNameChange(event.target.value);\n                        this.toggleNameEditing();\n                      }\n                    }}\n                    onChange={(e) => { this.handleNameChange(e.target.value); }}\n                    className=\"attachment-name-input\"\n                  />\n                </div>\n              ) : (\n                <div style={{\n                  display: 'flex', justifyContent: 'space-between', alignItems: 'center', width: '100%'\n                }}\n                >\n                  <div className=\"attachment-name-input-div\" style={{ display: 'flex', alignItems: 'center' }}>\n                    <span style={{ marginRight: '15px' }}>{this.state.localName}</span>\n                    {!readOnly && (\n                    <i\n                      className=\"fa fa-pencil\"\n                      aria-hidden=\"true\"\n                      onClick={this.toggleNameEditing}\n                      style={{ cursor: 'pointer', fontSize: '.8em', color: '#0275d8' }}\n                    />\n                    )}\n                  </div>\n                  <div style={{ display: 'flex', alignItems: 'center' }}>\n                    {mode === 'attachments' && instrumentIsEmpty && (\n                    <div style={{ marginRight: '15px', display: 'flex', alignItems: 'center' }}>\n                      <i\n                        className=\"fa fa-exclamation-triangle\"\n                        style={{ color: 'red', fontSize: '1em', marginRight: '5px' }}\n                      />\n                      <span style={{\n                        color: 'red', fontSize: '0.8em', fontWeight: 'bold', flexShrink: 0\n                      }}\n                      >\n                        Instrument missing, switch to Metadata.\n                      </span>\n                    </div>\n\n                    )}\n                    {btnMode}\n                  </div>\n                </div>\n              )}\n            </Modal.Title>\n\n          </Modal.Header>\n          <Modal.Body>\n            <ContainerDatasetModalContent\n              ref={this.datasetInput}\n              readOnly={readOnly}\n              disabled={disabled}\n              datasetContainer={datasetContainer}\n              kind={kind}\n              onModalHide={() => onHide()}\n              onChange={onChange}\n              mode={mode}\n              isPublic={isPublic}\n            />\n          </Modal.Body>\n          <Modal.Footer style={{\n            display: 'flex', justifyContent: 'space-between', alignItems: 'center', flexShrink: 0, width: '100%'\n          }}\n          >\n            <div>\n              <small style={{ alignSelf: 'center' }}>\n                Changes are kept for this session. Remember to save the element itself to persist changes.\n              </small>\n            </div>\n            <div style={{ alignSelf: 'right', marginLeft: 'auto' }}>\n              {/* <Button\n                style={{ marginRight: '10px' }}\n                onClick={this.handleModalClose}\n              >\n                Discard Changes\n              </Button> */}\n              <Button\n                bsStyle=\"primary\"\n                style={{ alignSelf: 'center', marginLeft: 'auto' }}\n                onClick={this.handleSave}\n              >\n                Keep Changes\n              </Button>\n            </div>\n          </Modal.Footer>\n        </Modal>\n      );\n    }\n    return <div />;\n  }\n}\n\nContainerDatasetModal.propTypes = {\n  show: PropTypes.bool.isRequired,\n  datasetContainer: PropTypes.shape({\n    name: PropTypes.string.isRequired,\n    extended_metadata: PropTypes.shape({\n      instrument: PropTypes.string,\n    }),\n  }).isRequired,\n  onHide: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  readOnly: PropTypes.bool,\n  disabled: PropTypes.bool,\n  kind: PropTypes.string,\n  isPublic: PropTypes.bool, // for REPO\n};\n\nContainerDatasetModal.defaultProps = {\n  readOnly: false,\n  disabled: false,\n  kind: null,\n  isPublic: false, // for REPO\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DropTarget } from 'react-dnd';\nimport { targetAttachmentDropzone } from 'src/utilities/DndConst';\nimport ColoredOverlay from 'src/components/common/ColoredOverlay'\n\nclass AttachmentDropzone extends Component {\n  render() {\n    const { connectDropTarget, isOver, canDrop } = this.props;\n\n    return connectDropTarget(\n      <div>\n        <i style={{ color: 'gray', padding: 2, textAlign: 'center' }}>\n          Drop File(s) from the inbox\n          {isOver && canDrop && ColoredOverlay({color: 'green'})}\n        </i>\n      </div>\n    );\n  }\n}\n\nexport default DropTarget(\n  targetAttachmentDropzone.dropTargetTypes,\n  targetAttachmentDropzone.dataTarget,\n  targetAttachmentDropzone.collectTarget\n)(AttachmentDropzone);\n\nAttachmentDropzone.propTypes = {\n  isOver: PropTypes.bool.isRequired,\n  canDrop: PropTypes.bool.isRequired,\n};\n","/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  ListGroup, ListGroupItem, Button, Well\n} from 'react-bootstrap';\nimport ContainerDatasetModal from 'src/components/container/ContainerDatasetModal';\nimport ContainerDatasetField from 'src/components/container/ContainerDatasetField';\nimport Container from 'src/models/Container';\nimport AttachmentDropzone from 'src/components/container/AttachmentDropzone';\n\nexport default class ContainerDatasets extends Component {\n  constructor(props) {\n    super(props);\n    const { container } = props;\n    this.state = {\n      container,\n      modal: {\n        show: false,\n        datasetContainer: null,\n      },\n    };\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.container !== prevProps.container) {\n      this.setState({\n        container: this.props.container,\n      });\n    }\n  }\n\n  handleModalOpen(datasetContainer) {\n    const { modal } = this.state;\n    modal.datasetContainer = datasetContainer || {};\n    modal.show = true;\n    this.setState({ modal });\n  }\n\n  handleAdd() {\n    const { container } = this.state;\n    const datasetContainer = Container.buildEmpty();\n    datasetContainer.container_type = 'dataset';\n\n    container.children.push(datasetContainer);\n\n    this.handleModalOpen(datasetContainer);\n    this.props.onChange(container);\n  }\n\n  handleAddWithAttachments(attachments) {\n    const { container } = this.state;\n    const datasetContainer = Container.buildEmpty();\n    datasetContainer.container_type = 'dataset';\n\n    attachments.forEach((attachment) => {\n      datasetContainer.attachments.push(attachment);\n    });\n    container.children.push(datasetContainer);\n\n    this.handleModalOpen(datasetContainer);\n    this.props.onChange(container);\n  }\n\n  handleRemove(datasetContainer) {\n    const { container } = this.state;\n\n    datasetContainer.is_deleted = true;\n    this.props.onChange(container);\n  }\n\n  handleUndo(datasetContainer) {\n    const { container } = this.state;\n\n    datasetContainer.is_deleted = false;\n    this.props.onChange(container);\n  }\n\n  handleChange(datasetContainer) {\n    const { container } = this.state;\n\n    container.children.find((dataset) => {\n      if (dataset.id === datasetContainer.id) {\n        const datasetId = container.children.indexOf(dataset);\n        container.children[datasetId] = datasetContainer;\n      }\n    });\n\n    this.props.onChange(container);\n  }\n\n  handleModalHide() {\n    const { modal } = this.state;\n    modal.show = false;\n    modal.datasetContainer = null;\n    this.setState({ modal });\n    // https://github.com/react-bootstrap/react-bootstrap/issues/1137\n    document.body.className = document.body.className.replace('modal-open', '');\n  }\n\n  addButton() {\n    const { readOnly, disabled } = this.props;\n    if (!readOnly && !disabled) {\n      return (\n        <div className=\"pull-right\" style={{ marginTop: 5, marginBottom: 5 }}>\n          <Button bsSize=\"xsmall\" bsStyle=\"success\" onClick={() => this.handleAdd()}>\n            <i className=\"fa fa-plus\" />\n          </Button>\n        </div>\n      );\n    }\n    return null;\n  }\n\n  render() {\n    const { container, modal } = this.state;\n    const { readOnly, disabled } = this.props;\n\n    if (container.children.length > 0) {\n      const kind = container.extended_metadata && container.extended_metadata.kind;\n      return (\n        <div>\n          <Well style={{ minHeight: 70, padding: 5, paddingBottom: 31 }}>\n            <ListGroup style={{ marginBottom: 0 }}>\n              {container.children.map((datasetContainer, key) => (\n                <ListGroupItem key={key}>\n                  <ContainerDatasetField\n                    kind={kind}\n                    datasetContainer={datasetContainer}\n                    onChange={() => this.handleChange(datasetContainer)}\n                    handleRemove={() => this.handleRemove(datasetContainer)}\n                    handleUndo={() => this.handleUndo(datasetContainer)}\n                    handleModalOpen={() => this.handleModalOpen(datasetContainer)}\n                    disabled={disabled}\n                    readOnly={readOnly}\n                  />\n                </ListGroupItem>\n              ))}\n              <ListGroupItem key=\"attachmentdropzone\" disabled>\n                {!readOnly && !disabled ? (\n                  <AttachmentDropzone\n                    handleAddWithAttachments={attachments =>\n                      this.handleAddWithAttachments(attachments)\n                    }\n                  />\n                ) : null}\n              </ListGroupItem>\n            </ListGroup>\n            {this.addButton()}\n          </Well>\n          {modal.show && modal.datasetContainer && (\n          <ContainerDatasetModal\n            onHide={() => this.handleModalHide()}\n            onChange={(datasetContainer) => this.handleChange(datasetContainer)}\n            kind={kind}\n            show={modal.show}\n            readOnly={this.props.readOnly}\n            datasetContainer={modal.datasetContainer}\n            analysisContainer={modal.analysisContainer}\n            disabled={disabled}\n          />\n          )}\n        </div>\n      );\n    }\n    return (\n      <div>\n        <Well style={{ minHeight: 70, padding: 5, paddingBottom: 31 }}>\n          <p>There are currently no Datasets.</p>\n          <ListGroup style={{ marginBottom: 0 }}>\n            <ListGroupItem key=\"attachmentdropzone\" disabled>\n              <AttachmentDropzone\n                handleAddWithAttachments={(attachments) => this.handleAddWithAttachments(attachments)}\n              />\n            </ListGroupItem>\n          </ListGroup>\n          {this.addButton()}\n        </Well>\n      </div>\n    );\n  }\n}\n\nContainerDatasets.propTypes = {\n  container: PropTypes.object.isRequired,\n  onChange: PropTypes.func.isRequired,\n  readOnly: PropTypes.bool,\n  disabled: PropTypes.bool,\n};\n\nContainerDatasets.defaultProps = {\n  readOnly: false,\n  disabled: false,\n};\n","/* eslint-disable react/prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport uuid from 'uuid';\nimport {\n  Button,\n  FormGroup,\n  FormControl,\n  Glyphicon,\n  Navbar,\n  NavItem,\n  Nav,\n  OverlayTrigger,\n  Tooltip\n} from 'react-bootstrap';\n\n\nfunction omniauthLabel(icon, name) {\n  if (icon) {\n    return (\n      <img src={`/images/providers/${icon}`} alt={name} title={name} />\n    );\n  }\n  return name;\n}\n\nfunction NewSession({ authenticityToken, omniauthProviders, extraRules={} }) {\n  const signUp = extraRules?.disable_signup === true ? null : (<NavItem href=\"/users/sign_up\"> or Sign Up </NavItem>);\n  const items = omniauthProviders && Object.keys(omniauthProviders).map((key) => (\n    <Button key={uuid.v4()} style={{ textAlign: 'left', marginRight: '10px' }} href={`/users/auth/${key}`}>\n      Login with &nbsp;\n      {omniauthLabel(omniauthProviders[key].icon, omniauthProviders[key].label || key)}\n    </Button>\n  ));\n\n  const signIn = extraRules && extraRules?.disable_db_login === true ? null : (\n    <Navbar.Form pullRight>\n      <form id=\"new_user\" className=\"new_user\" action=\"/users/sign_in\" acceptCharset=\"UTF-8\" method=\"post\">\n        <input name=\"utf8\" value=\"✓\" type=\"hidden\" />\n        <input name=\"authenticity_token\" value={authenticityToken} type=\"hidden\" />\n        <OverlayTrigger placement=\"left\" overlay={<Tooltip id=\"login_tooltip\">Log in with email or name abbreviation(case-senstive)</Tooltip>}>\n          <FormGroup>\n            <FormControl id=\"user_login\" type=\"text\" placeholder=\"Email or name abbreviation\" name=\"user[login]\" />\n          </FormGroup>\n        </OverlayTrigger>\n        <FormGroup>\n          <FormControl id=\"user_password\" type=\"password\" name=\"user[password]\" placeholder=\"password\" />\n        </FormGroup>\n        <Button type=\"submit\" bsStyle=\"primary\">\n          <Glyphicon glyph=\"log-in\" />\n        </Button>\n      </form>\n    </Navbar.Form>\n  );\n\n  return (\n    <div>\n      <Nav pullRight>{signUp}</Nav>\n      {signIn}\n      <Navbar.Form pullRight>{items}</Navbar.Form>\n    </div>\n  );\n}\n\nNewSession.propTypes = {\n  authenticityToken: PropTypes.string.isRequired,\n};\n\nexport default NewSession;\n","import React from 'react';\nimport {\n  ButtonGroup,\n  OverlayTrigger,\n  Popover,\n  Button,\n  Table,\n  Tooltip,\n  Overlay,\n} from 'react-bootstrap';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport Select from 'react-select';\nimport _ from 'lodash';\nimport { selectUserOptionFormater } from 'src/utilities/selectHelper';\n\nconst styles = {\n  button: {\n    width: '25px', height: '25px', marginRight: '10px', textAlign: 'center',\n  },\n  popover: {\n    display: 'flex', flexDirection: 'row', gap: '10px',\n  },\n  confirmButton: {\n    marginTop: '5px', textAlign: 'center', width: '35px', fontWeight: 'Bold',\n  },\n  gotItButton: {\n    marginTop: '5px', textAlign: 'center', fontWeight: 'Bold',\n  },\n  addUserButton: {\n    marginLeft: '10px', marginTop: '5px', textAlign: 'center', width: '25px', height: '25px',\n  },\n  select: {\n    marginTop: '5px', width: '300px',\n  },\n  flexRow: {\n    display: 'flex', flexDirection: 'row', alignItems: 'center'\n  },\n  lightRow: {\n    backgroundColor: '#e1edf2',\n  },\n  darkRow: {\n    backgroundColor: '#c8d6dc',\n  },\n  tableData: {\n    verticalAlign: 'middle'\n  }\n};\n\nexport default class GroupElement extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentUser: props.currentState.currentUser || { name: 'unknown' },\n      showUsers: false,\n      showRowAdd: false,\n      showAdminAlert: false,\n      adminPopoverTarget: null,\n      usersToggled: false,\n      rowAddToggled: false,\n    };\n\n    this.toggleUsers = this.toggleUsers.bind(this);\n    this.toggleRowAdd = this.toggleRowAdd.bind(this);\n    this.loadUserByName = this.loadUserByName.bind(this);\n    this.handleSelectUser = this.handleSelectUser.bind(this);\n    this.hideAdminAlert = this.hideAdminAlert.bind(this);\n    this.setGroupAdmin = this.setGroupAdmin.bind(this);\n  }\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  handleSelectUser(val) {\n    if (val && val.length > 0) { this.setState({ selectedUsers: val }); }\n    else { this.setState({ selectedUsers: null }); }\n  }\n\n  setGroupAdmin(groupRec, userRec, setAdmin = true) {\n    // if removing group admin and there is only one admin -> show warning\n    if (!setAdmin && groupRec.admins.length === 1) {\n      this.setState({ showAdminAlert: true, adminPopoverTarget: event.target });\n      return;\n    }\n\n    // const { groups } = this.state;\n    const params = {\n      id: groupRec.id,\n      add_admin: setAdmin ? [userRec.id] : [],\n      rm_admin: !setAdmin ? [userRec.id] : [],\n    };\n\n    UsersFetcher.updateGroup(params).then((group) => {\n      if (setAdmin) {\n        const usrIdx = _.findIndex(\n          group.group.admins,\n          (o) => o.id === userRec.id\n        );\n        // if user is not already admin\n        if (usrIdx === -1) {\n          group.group.admins.push(userRec);\n        }\n      } else {\n        const usrIdx = _.findIndex(\n          group.group.admins,\n          (o) => o.id === userRec.id\n        );\n        // if user is already  admin\n        if (usrIdx !== -1) {\n          group.group.admins.splice(usrIdx, 1);\n        }\n      }\n      const idx = _.findIndex(\n        this.props.currentGroup,\n        (o) => o.id === group.group.id\n      );\n      this.props.currentGroup.splice(idx, 1, group.group);\n      this.setState({ selectedUsers: null });\n      this.props.onChangeData(this.props.currentGroup);\n    });\n  }\n\n  hideAdminAlert = () => { this.setState({ showAdminAlert: false }); };\n\n  toggleUsers() {\n    this.setState((prevState) => ({\n      showUsers: !prevState.showUsers,\n      usersToggled: !prevState.usersToggled,\n    }));\n  }\n\n  toggleRowAdd() {\n    this.setState((prevState) => ({\n      showRowAdd: !prevState.showRowAdd,\n      rowAddToggled: !prevState.rowAddToggled,\n    }));\n  }\n\n  loadUserByName(input) {\n    if (!input) {\n      return Promise.resolve({ options: [] });\n    }\n\n    return UsersFetcher.fetchUsersByName(input, 'Person')\n      .then((res) => selectUserOptionFormater({ data: res }))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  // confirm action after pressing yes\n  // if type is group, call deleteGroup api, if type is user, call deleteUser api\n  confirmDelete(type, groupRec, userRec) {\n    switch (type) {\n      case 'group':\n        this.props.onDeleteGroup(groupRec.id);\n        break;\n      case 'user':\n        this.props.onDeleteUser(groupRec, userRec);\n\n        // check if the user being deleted is an admin.\n        const userIsAdmin = groupRec.admins.some((admin) => admin.id === userRec.id);\n\n        // if admin, remove admin status\n        if (userIsAdmin) {\n          this.setGroupAdmin(groupRec, userRec, false);\n        }\n        break;\n      default:\n        break;\n    }\n  }\n\n  // add multiple users\n  // replace with response result and then setState (with forceUpdate)\n  addUser(groupRec) {\n    const { selectedUsers } = this.state;\n    const userIds = [];\n\n    selectedUsers.forEach((g) => {\n      // check if user is already in group\n      const isUserInGroup = groupRec.users.some((user) => user.id === g.value);\n\n      // only add users not already in group\n      if (!isUserInGroup) { userIds.push(g.value); }\n    });\n\n    UsersFetcher.updateGroup({\n      id: groupRec.id,\n      destroy_group: false,\n      add_users: userIds,\n    }).then((group) => {\n      const idx = _.findIndex(\n        this.props.currentGroup,\n        (o) => o.id == group.group.id\n      );\n      this.props.currentGroup.splice(idx, 1, group.group);\n      this.setState({ selectedUsers: null });\n      this.props.onChangeData(this.props.currentGroup);\n    });\n  }\n\n  renderDeleteButton(type, groupRec, userRec) {\n    let msg = 'Leave this group?';\n    if (type === 'user') {\n      if (userRec.id === this.state.currentUser.id) {\n        msg = 'Leave this group?';\n      } else {\n        msg = `Remove ${userRec.name}?`;\n      }\n    } else {\n      msg = 'Remove group?';\n    }\n\n    const popover = (\n      <Popover id=\"popover-positioned-scrolling-left\">\n        {msg}\n        <div style={styles.popover}>\n          <Button\n            bsSize=\"xsmall\"\n            bsStyle=\"danger\"\n            onClick={() => this.confirmDelete(type, groupRec, userRec)}\n            style={styles.confirmButton}\n          >\n            Yes\n          </Button>\n          <Button\n            bsSize=\"xsmall\"\n            bsStyle=\"warning\"\n            onClick={this.handleClick}\n            style={styles.confirmButton}\n          >\n            No\n          </Button>\n        </div>\n      </Popover>\n    );\n\n    return (\n      <ButtonGroup className=\"actions\">\n        <OverlayTrigger\n          animation\n          placement=\"right\"\n          root\n          trigger=\"focus\"\n          overlay={popover}\n        >\n          <Button\n            bsSize=\"xsmall\"\n            style={styles.button}\n            type=\"button\"\n            bsStyle=\"danger\"\n            className=\"fa fa-trash-o\"\n            onClick={() => this.confirmDelete(groupRec, userRec)}\n          />\n        </OverlayTrigger>\n      </ButtonGroup>\n    );\n  }\n\n  renderAdminButtons(group) {\n    const { selectedUsers, showRowAdd } = this.state;\n    if (\n      group.admins\n      && group.admins.some((admin) => admin.id === this.state.currentUser.id)\n    ) {\n      return (\n        <td>\n          <OverlayTrigger\n            placement=\"top\"\n            overlay={<Tooltip>View users</Tooltip>}\n          >\n            <Button\n              bsSize=\"xsmall\"\n              style={styles.button}\n              type=\"button\"\n              bsStyle=\"info\"\n              className=\"fa fa-list\"\n              onClick={this.toggleUsers}\n            />\n          </OverlayTrigger>\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip>Add user</Tooltip>}>\n            <Button\n              bsSize=\"xsmall\"\n              style={styles.button}\n              type=\"button\"\n              bsStyle=\"success\"\n              className=\"fa fa-plus\"\n              onClick={this.toggleRowAdd}\n            />\n          </OverlayTrigger>\n          <OverlayTrigger\n            placement=\"top\"\n            overlay={<Tooltip>Remove group</Tooltip>}\n          >\n            {this.renderDeleteButton('group', group)}\n          </OverlayTrigger>\n          <span className={`collapse${showRowAdd ? 'in' : ''}`}>\n            <div style={styles.flexRow}>\n              {' '}\n              <Select.AsyncCreatable\n                multi\n                style={styles.select}\n                isLoading\n                backspaceRemoves\n                value={selectedUsers}\n                valueKey=\"value\"\n                labelKey=\"label\"\n                matchProp=\"name\"\n                placeholder=\"Select users\"\n                promptTextCreator={this.promptTextCreator}\n                loadOptions={this.loadUserByName}\n                onChange={this.handleSelectUser}\n                onKeyDown={(e) => {\n                  if (e.key === 'Enter' && this.state.selectedUsers) {\n                    this.addUser(group);\n                  }\n                }}\n              />\n              <Button\n                bsSize=\"xsmall\"\n                type=\"button\"\n                style={styles.addUserButton}\n                bsStyle=\"success\"\n                className=\"fa fa-user-plus\"\n                onClick={() => this.addUser(group)}\n                disabled={!this.state.selectedUsers}\n              />\n            </div>\n          </span>\n        </td>\n      );\n    }\n    return (\n      <td>\n        <Button\n          bsSize=\"xsmall\"\n          type=\"button\"\n          style={styles.button}\n          bsStyle=\"info\"\n          className=\"fa fa-list\"\n          onClick={this.toggleUsers}\n        />\n      </td>\n    );\n  }\n\n  renderUserButtons(groupRec, userRec = null) {\n    const isAdmin = groupRec.admins && groupRec.admins.some((a) => a.id === userRec.id);\n    const isCurrentUserAdmin = groupRec.admins\n      && groupRec.admins.some((a) => a.id === this.state.currentUser.id);\n    const canDelete = isCurrentUserAdmin || userRec.id === this.state.currentUser.id;\n\n    const adminButtonStyle = isAdmin ? 'warning' : 'default';\n    const adminTooltip = isAdmin ? 'Demote from Admin' : 'Promote to Admin';\n\n    return (\n      <span>\n        {isCurrentUserAdmin && (\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip>{adminTooltip}</Tooltip>}>\n            <Button\n              bsSize=\"xsmall\"\n              style={styles.button}\n              type=\"button\"\n              bsStyle={adminButtonStyle}\n              className=\"fa fa-key\"\n              onClick={() => this.setGroupAdmin(groupRec, userRec, !isAdmin)}\n            />\n          </OverlayTrigger>\n        )}\n        {canDelete && (\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip>Remove</Tooltip>}>\n            {this.renderDeleteButton('user', groupRec, userRec)}\n          </OverlayTrigger>\n        )}\n      </span>\n    );\n  }\n\n  render() {\n    const { groupElement } = this.props;\n    const { showUsers: showInfo } = this.state;\n    return (\n      <tbody key={`tbody_${groupElement.id}`}>\n        <tr key={`row_${groupElement.id}`} style={{ fontWeight: 'Bold' }}>\n          <td style={styles.tableData}>{groupElement.name}</td>\n          <td style={styles.tableData}>{groupElement.initials}</td>\n          <td style={styles.tableData}>\n            {groupElement.admins\n              && groupElement.admins.length > 0\n              && groupElement.admins.map((admin) => admin.name).join(', ')}\n          </td>\n          {this.renderAdminButtons(groupElement)}\n        </tr>\n        <tr className={`collapse${showInfo ? 'in' : ''}`}>\n          <td colSpan=\"4\">\n            <Table>\n              <tbody>\n                {groupElement.users.map((u, index) => (\n                  <tr\n                    key={`row_${groupElement.id}_${u.id}`}\n                    style={index % 2 === 0 ? styles.lightRow : styles.darkRow}\n                  >\n                    <td width=\"20%\" style={styles.tableData}>{u.name}</td>\n                    <td width=\"10%\" style={styles.tableData}>{u.initials}</td>\n                    <td width=\"20%\" style={styles.tableData} />\n                    <td width=\"50%\" style={styles.tableData}>{this.renderUserButtons(groupElement, u)}</td>\n                  </tr>\n                ))}\n              </tbody>\n            </Table>\n          </td>\n        </tr>\n        <Overlay\n          show={this.state.showAdminAlert}\n          target={this.state.adminPopoverTarget}\n          placement=\"left\"\n          containerPadding={20}\n        >\n          <Popover id=\"popover-contained\">\n            At least one admin is required.\n            <div style={styles.popover}>\n              <Button\n                bsSize=\"xsmall\"\n                bsStyle=\"primary\"\n                onClick={this.hideAdminAlert}\n                style={styles.gotItButton}\n              >\n                Got it!\n              </Button>\n            </div>\n          </Popover>\n        </Overlay>\n      </tbody>\n    );\n  }\n}\n","import 'whatwg-fetch';\n\nexport default class UserSettingsFetcher {\n  static getAutoCompleteSuggestions(type) {\n    return fetch(\n      `/api/v1/public/affiliations/${type}`\n    ).then((response) => response.json())\n      .then((data) => data)\n      .catch((error) => {\n        console.log(error);\n      });\n  }\n\n  static getAllAffiliations() {\n    return fetch(\n      '/api/v1/affiliations/'\n    ).then((response) => response.json())\n      .then((data) => data)\n      .catch((error) => {\n        console.log(error);\n      });\n  }\n\n  static createAffiliation(params) {\n    return fetch('/api/v1/affiliations/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    }).then((response) => response.json())\n      .then((data) => data)\n      .catch((error) => {\n        console.log(error);\n      });\n  }\n\n  static updateAffiliation(params) {\n    return fetch('/api/v1/affiliations/', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static deleteAffiliation(id) {\n    return fetch(`/api/v1/affiliations/${id}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n    });\n  }\n}\n","import React, { useState, useEffect } from 'react';\nimport CreatableSelect from 'react-select/lib/Creatable';\nimport { Button, Modal, Table } from 'react-bootstrap';\nimport DatePicker from 'react-datepicker';\nimport moment from 'moment';\nimport uuid from 'uuid';\n\nimport UserSettingsFetcher from 'src/fetchers/UserSettingsFetcher';\n\nfunction Affiliations({ show, onHide }) {\n  const [affiliations, setAffiliations] = useState([]);\n  const [countryOptions, setCountryOptions] = useState([]);\n  const [orgOptions, setOrgOptions] = useState([]);\n  const [deptOptions, setDeptOptions] = useState([]);\n  const [groupOptions, setGroupOptions] = useState([]);\n  const [inputError, setInputError] = useState({});\n  const [errorMsg, setErrorMsg] = useState('');\n\n  const currentEntries = affiliations.filter((entry) => entry.current);\n\n  const getAllAffiliations = () => {\n    UserSettingsFetcher.getAllAffiliations()\n      .then((data) => {\n        setAffiliations(data.map((item) => (\n          {\n            ...item,\n            disabled: true,\n            current: item.from !== null && item.to === null\n\n          }\n        )));\n      });\n    setErrorMsg('');\n    setInputError({});\n  };\n\n  useEffect(() => {\n    UserSettingsFetcher.getAutoCompleteSuggestions('countries')\n      .then((data) => {\n        data.map((item) => {\n          if (!countryOptions.map((option) => option.value).includes(item)) {\n            setCountryOptions((prevItems) => [...prevItems, { value: item, label: item }]);\n          }\n        });\n        setInputError({});\n      });\n\n    UserSettingsFetcher.getAutoCompleteSuggestions('organizations')\n      .then((data) => {\n        data.map((item) => {\n          if (!orgOptions.map((option) => option.value).includes(item)) {\n            setOrgOptions((prevItems) => [...prevItems, { value: item, label: item }]);\n          }\n        });\n      });\n\n    UserSettingsFetcher.getAutoCompleteSuggestions('departments')\n      .then((data) => {\n        data.map((item) => {\n          if (!deptOptions.map((option) => option.value).includes(item)) {\n            setDeptOptions((prevItems) => [...prevItems, { value: item, label: item }]);\n          }\n        });\n      });\n\n    UserSettingsFetcher.getAutoCompleteSuggestions('groups')\n      .then((data) => {\n        data.map((item) => {\n          if (!groupOptions.map((option) => option.value).includes(item)) {\n            setGroupOptions((prevItems) => [...prevItems, { value: item, label: item }]);\n          }\n        });\n      });\n    getAllAffiliations();\n  }, []);\n\n  const handleCreateOrUpdateAffiliation = (index) => {\n    const params = affiliations[index];\n    const callFunction = params.id ? UserSettingsFetcher.updateAffiliation : UserSettingsFetcher.createAffiliation;\n\n    callFunction(params)\n      .then(() => getAllAffiliations())\n      .catch((error) => {\n        console.error(error);\n      });\n  };\n\n  const handleDeleteAffiliation = (index) => {\n    const { id } = affiliations[index];\n    if (id) {\n      UserSettingsFetcher.deleteAffiliation(id)\n        .then((result) => {\n          if (result.error) {\n            console.error(result.error);\n            return false;\n          }\n          getAllAffiliations();\n        });\n    }\n  };\n\n  const onChangeHandler = (index, field, value) => {\n    const updatedAffiliations = [...affiliations];\n    updatedAffiliations[index][field] = value;\n    const newInputErrors = { ...inputError };\n    if (field === 'from' && (updatedAffiliations[index].from === null || updatedAffiliations[index].from === '')) {\n      newInputErrors[index] = { ...newInputErrors[index], from: true };\n      setErrorMsg('Required');\n    } else if (field === 'to' && updatedAffiliations[index].from > value) {\n      newInputErrors[index] = { ...newInputErrors[index], to: true };\n      setErrorMsg('Invalid date');\n    } else if (newInputErrors[index]) {\n      delete newInputErrors[index][field];\n      if (Object.keys(newInputErrors[index]).length === 0) {\n        delete newInputErrors[index];\n      }\n    }\n    setInputError(newInputErrors);\n    setAffiliations(updatedAffiliations);\n  };\n\n  const handleSaveButtonClick = (index) => {\n    const updatedAffiliations = [...affiliations];\n    const newInputErrors = { ...inputError };\n    if (!updatedAffiliations[index].from) {\n      newInputErrors[index] = { ...newInputErrors[index], from: true };\n      setInputError(newInputErrors);\n      setErrorMsg('Required');\n      return;\n    }\n\n    if (!newInputErrors[index] || !Object.keys(newInputErrors[index]).length) {\n      updatedAffiliations[index].disabled = true;\n      setAffiliations(updatedAffiliations);\n      handleCreateOrUpdateAffiliation(index);\n    }\n  };\n\n  return (\n    <Modal\n      bsSize=\"lg\"\n      dialogClassName=\"importChemDrawModal\"\n      show={show}\n      onHide={onHide}\n      backdrop=\"static\"\n    >\n      <Modal.Header closeButton onHide={onHide}>\n        <Modal.Title>\n          <h3>My affiliations </h3>\n        </Modal.Title>\n      </Modal.Header>\n\n      <Modal.Body>\n        <div className=\"current-container\">\n          <h4 className=\"align-title\"> Current affiliations</h4>\n          <div className=\"entry-container\">\n            {currentEntries.map((entry) => (\n              <div key={uuid.v4()} className=\"entry-box\">\n                <p>\n                  <strong>Country:</strong>\n                  {' '}\n                  {entry.country}\n                </p>\n                <p>\n                  <strong>Organization:</strong>\n                  {' '}\n                  {entry.organization}\n                </p>\n                <p>\n                  <strong>Department:</strong>\n                  {' '}\n                  {entry.department}\n                </p>\n                <p>\n                  <strong>Group:</strong>\n                  {' '}\n                  {entry.group}\n                </p>\n                <p>\n                  <strong>From:</strong>\n                  {' '}\n                  {entry.from}\n                </p>\n              </div>\n            ))}\n          </div>\n        </div>\n\n        <div style={{\n          display: 'flex', justifyContent: 'flex-end', marginBottom: '1rem', marginTop: '1rem'\n        }}\n        >\n          <Button\n            bsStyle=\"primary\"\n            onClick={() => {\n              setAffiliations((prev) => [...prev, {\n                country: '',\n                organization: '',\n                department: '',\n                group: '',\n                from: '',\n                to: '',\n                disabled: false,\n              }]);\n            }}\n          >\n            Add affiliation &nbsp;\n            <i className=\"fa fa-plus\" />\n          </Button>\n        </div>\n        <Table striped bordered hover>\n          <thead>\n            <tr>\n              <th>Country</th>\n              <th>Organization</th>\n              <th>Department</th>\n              <th>Working Group</th>\n              <th>From</th>\n              <th>To</th>\n              <th />\n            </tr>\n          </thead>\n          <tbody>\n\n            {affiliations.map((item, index) => (\n              <tr key={item.id}>\n                <td>\n                  {item.disabled ? item.country\n                    : (\n                      <CreatableSelect\n                        isCreatable\n                        disabled={item.disabled}\n                        placeholder=\"Select or enter a new option\"\n                        components={{ DropdownIndicator: () => null, IndicatorSeparator: () => null }}\n                        options={countryOptions}\n                        value={item.country || ''}\n                        isSearchable\n                        isClearable\n                        onChange={(choice) => onChangeHandler(index, 'country', !choice ? '' : choice.value)}\n                      />\n                    )}\n                </td>\n                <td>\n                  {item.disabled ? item.organization\n                    : (\n                      <CreatableSelect\n                        required\n                        components={{ DropdownIndicator: () => null }}\n                        disabled={item.disabled}\n                        placeholder=\"Select or enter a new option\"\n                        isCreatable\n                        options={orgOptions}\n                        value={item.organization}\n                        isClearable\n                        onChange={(choice) => onChangeHandler(index, 'organization', !choice ? '' : choice.value)}\n                      />\n                    )}\n                </td>\n                <td>\n                  {item.disabled ? item.department\n                    : (\n                      <CreatableSelect\n                        isCreatable\n                        components={{ DropdownIndicator: () => null, IndicatorSeparator: () => null }}\n                        disabled={item.disabled}\n                        placeholder=\"Select or enter a new option\"\n                        options={deptOptions}\n                        value={item.department}\n                        isSearchable\n                        clearable\n                        onChange={(choice) => onChangeHandler(index, 'department', !choice ? '' : choice.value)}\n                      />\n                    )}\n                </td>\n                <td>\n                  {item.disabled ? item.group\n                    : (\n                      <CreatableSelect\n                        isCreatable\n                        placeholder=\"Select or enter a new option\"\n                        components={{ DropdownIndicator: () => null, IndicatorSeparator: () => null }}\n                        disabled={item.disabled}\n                        allowCreate\n                        options={groupOptions}\n                        value={item.group}\n                        isSearchable\n                        closeMenuOnSelect\n                        isClearable\n                        onChange={(choice) => onChangeHandler(index, 'group', !choice ? '' : choice.value)}\n                      />\n                    )}\n                </td>\n                <td>\n                  <DatePicker\n                    placeholderText={inputError[index] ? inputError[index].from ? errorMsg : '' : 'Required'}\n                    isClearable\n                    clearButtonTitle=\"Clear\"\n                    className={inputError[index] && inputError[index].from ? 'error-control' : ''}\n                    showPopperArrow={false}\n                    disabled={item.disabled}\n                    showMonthYearPicker\n                    dateFormat=\"yyyy-MM\"\n                    value={item.from}\n                    onChange={(date) => onChangeHandler(index, 'from', moment(date).format('YYYY-MM'))}\n                  />\n                </td>\n                <td>\n                  <DatePicker\n                    placeholderText={inputError[index] && inputError[index].to ? errorMsg : ''}\n                    isClearable\n                    clearButtonTitle=\"Clear\"\n                    className={inputError[index] && inputError[index].to ? 'error-control' : ''}\n                    showPopperArrow={false}\n                    disabled={item.disabled}\n                    showMonthYearPicker\n                    dateFormat=\"yyyy-MM\"\n                    value={item.to}\n                    onChange={(date) => onChangeHandler(index, 'to', date ? moment(date).format('YYYY-MM') : date)}\n                  />\n                </td>\n                <td>\n                  <div className=\"pull-right\">\n                    {item.disabled\n                      ? (\n                        <Button\n                          bsSize=\"small\"\n                          bsStyle=\"primary\"\n                          onClick={() => {\n                            const updatedAffiliations = [...affiliations];\n                            updatedAffiliations[index].disabled = false;\n                            setAffiliations(updatedAffiliations);\n                          }}\n                        >\n                          <i className=\"fa fa-edit\" />\n                        </Button>\n                      )\n                      : (\n                        <Button\n                          bsSize=\"small\"\n                          bsStyle=\"warning\"\n                          onClick={() => handleSaveButtonClick(index)}\n                        >\n                          <i className=\"fa fa-save\" />\n                        </Button>\n                      )}\n                    <Button\n                      style={{ marginLeft: '1rem' }}\n                      bsSize=\"small\"\n                      bsStyle=\"danger\"\n                      onClick={() => handleDeleteAffiliation(index)}\n                    >\n                      <i className=\"fa fa-trash-o\" />\n                    </Button>\n                  </div>\n                </td>\n              </tr>\n            ))}\n          </tbody>\n        </Table>\n      </Modal.Body>\n    </Modal>\n  );\n}\n\nexport default Affiliations;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col, OverlayTrigger, Tooltip, Modal, Button, Table, Panel, Form, FormControl, FormGroup, InputGroup } from 'react-bootstrap';\nimport { findIndex, filter } from 'lodash';\nimport uuid from 'uuid';\nimport Select from 'react-select';\nimport CollaboratorFetcher from 'src/repo/fetchers/CollaboratorFetcher';\nimport PublicFetcher from 'src/repo/fetchers/PublicFetcher';\nimport SelectionField from 'src/components/common/SelectionField';\nimport DeleteConfirmBtn from 'src/components/common/DeleteConfirmBtn';\n\nconst sortList = data => data?.sort((a, b) => a?.name?.localeCompare(b.name));\nconst addUserTooltip = <Tooltip id=\"addUser_tooltip\">Save to my collaboration</Tooltip>;\nconst removeAffTooltip = <Tooltip id=\"rmAff_tooltip\">Remove this affiliation</Tooltip>;\nconst refreshOrcidTooltip = <Tooltip id=\"rmAff_tooltip\">Refresh affiliations from ORCID iD</Tooltip>;\nconst addAffTooltip = <Tooltip id=\"addAff_tooltip\">Add new affiliation</Tooltip>;\n\nconst refreshAffByOrcid = (g, onRefreshOrcidAff) => {\n  let orcidRefreshBtn = '';\n  if (g.type === 'Collaborator' && g.orcid != null) {\n    orcidRefreshBtn = (\n      <OverlayTrigger placement=\"right\" overlay={refreshOrcidTooltip} >\n        <Button\n          bsSize=\"xsmall\"\n          bsStyle=\"success\"\n          onClick={() => onRefreshOrcidAff(g)}\n        >\n          <i className=\"fa fa-refresh\" aria-hidden=\"true\" />\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n  return (\n    <span>\n      { orcidRefreshBtn }\n    </span>\n  );\n};\n\nconst lineAff = (g, aff, onDeleteAff) => {\n  let removeBtn = '';\n  if (g.type === 'Collaborator' && g.orcid == null) {\n    removeBtn = (\n      <OverlayTrigger placement=\"right\" overlay={removeAffTooltip} >\n        <Button\n          bsSize=\"xsmall\"\n          bsStyle=\"danger\"\n          onClick={() => onDeleteAff(aff, g)}\n        >\n          <i className=\"fa fa-times\" aria-hidden=\"true\" />\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n\n  return (\n    <tr key={uuid.v4()}>\n      <td width=\"30%\">{aff.department}</td>\n      <td width=\"40%\">{aff.organization}</td>\n      <td width=\"20%\">{aff.country}</td>\n      <td width=\"10%\">\n        { removeBtn }\n      </td>\n    </tr>\n  );\n};\n\nexport default class AuthorModal extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      countries: [],\n      organizations: [],\n      departments: [],\n      authors: [],\n      users: [],\n      fields: {},\n      showNewUser: false\n    };\n    this.handleInputChange = this.handleInputChange.bind(this);\n    this.findUsers = this.findUsers.bind(this);\n    this.findOrcid = this.findOrcid.bind(this);\n    this.handleAddUser = this.handleAddUser.bind(this);\n    this.handleHide = this.handleHide.bind(this);\n    this.onAddAff = this.onAddAff.bind(this);\n    this.onDeleteAff = this.onDeleteAff.bind(this);\n    this.onRefreshOrcidAff = this.onRefreshOrcidAff.bind(this);\n  }\n\n  componentDidMount() {\n    CollaboratorFetcher.fetchMyCollaborations()\n      .then((result) => {\n        if (result.authors && result.authors.length > 0) {\n          this.setState({ authors: sortList(result.authors) });\n        } else {\n          this.setState({\n            authors: [], users: [], fields: {}, showNewUser: false\n          });\n        }\n      });\n    PublicFetcher.affiliations('countries').then((result) => {\n      const affOption = result?.map(a => ({ label: a, value: a }))\n        .filter(a => a.value && a.value.length > 1);\n      this.setState({ countries: affOption });\n    });\n    PublicFetcher.affiliations('organizations').then((result) => {\n      const affOption = result?.map(a => ({ label: a, value: a }))\n        .filter(a => a.value && a.value.length > 1);\n      this.setState({ organizations: affOption });\n    });\n    PublicFetcher.affiliations('departments').then((result) => {\n      const affOption = result?.map(a => ({ label: a, value: a }))\n        .filter(a => a.value && a.value.length > 1);\n      this.setState({ departments: affOption });\n    });\n  }\n\n  onAddAff(g) {\n    const { authors, fields } = this.state;\n    const department = fields[`${g.id}@line_department`];\n    const organization = fields[`${g.id}@line_organization`];\n    const country = fields[`${g.id}@line_country`];\n    const params = {\n      id: g.id, department, organization, country\n    };\n    CollaboratorFetcher.addCollaboratorAff(params)\n      .then((result) => {\n        if (result.error) {\n          alert(result.error);\n        } else {\n          const idx = findIndex(authors, o => o.id === result.user.id);\n          authors.splice(idx, 1, result.user);\n          fields[`${g.id}@line_department`] = '';\n          fields[`${g.id}@line_organization`] = '';\n          fields[`${g.id}@line_country`] = '';\n          this.setState({ authors, fields });\n        }\n      });\n  }\n\n  onDeleteAff(a, g) {\n    const { authors } = this.state;\n    const params = { user_id: g.id, aff_id: a.id };\n    CollaboratorFetcher.deleteCollaboratorAff(params)\n      .then((result) => {\n        if (result.error) {\n          alert(result.error);\n        } else {\n          const idx = findIndex(authors, o => o.id === result.user.id);\n          authors.splice(idx, 1, result.user);\n          this.setState({ authors });\n        }\n      });\n  }\n\n  onRefreshOrcidAff(g) {\n    const params = { user_id: g.id };\n    CollaboratorFetcher.refreshOrcidAff(params)\n      .then((result) => {\n        if (result.error) {\n          alert(result.message);\n        } else {\n          this.setState({\n            authors: sortList(result.authors), users: [], fields: {}, showNewUser: false\n          });\n        }\n      });\n  }\n  handleHide() {\n    this.setState({ users: [], fields: {}, showNewUser: false });\n    this.props.onHide();\n  }\n\n  // inputs of create new group\n  handleInputChange(type, ev) {\n    let { fields } = this.state;\n    switch (type) {\n      case 'firstName':\n        fields.firstName = ev.currentTarget.value;\n        break;\n      case 'lastName':\n        fields.lastName = ev.currentTarget.value;\n        break;\n      case 'email':\n        fields.email = ev.currentTarget.value;\n        break;\n      case 'orcid':\n        fields.orcid = ev.currentTarget.value;\n        break;\n      case 'country':\n        fields.country = ev && ev.value;\n        break;\n      case 'organization':\n        fields.organization = ev && ev.value;\n        break;\n      case 'department':\n        fields.department = ev && ev.value;\n        break;\n      case 'search_key':\n        fields.search_key = ev.currentTarget.value;\n        break;\n      default:\n        if (typeof fields === 'undefined') {\n          fields = {};\n        }\n        fields[type] = ev && ev.value;\n    }\n    this.setState({ fields });\n  }\n\n  findUsers() {\n    const { fields } = this.state;\n    if ((!fields.firstName || fields.firstName.trim() === '') && (!fields.lastName || fields.lastName.trim() === '')\n    && (!fields.email || fields.email.trim() === '')\n    && (!fields.orcid || fields.orcid.trim() === '')) {\n      alert('Please input Email or first name or last name');\n      return false;\n    }\n    CollaboratorFetcher.fetchUsersByNameFirst(fields.lastName || '', fields.firstName || '', fields.email || '')\n      .then((result) => {\n        if (result.users && result.users.length > 0) {\n          this.setState({\n            users: sortList(result.users),\n            showNewUser: false,\n            fields: {}\n          });\n        } else {\n          this.setState({ showNewUser: true, users: [] });\n        }\n      });\n    return true;\n  }\n\n  findOrcid() {\n    const { fields, departments, organizations } = this.state;\n    if (!fields.orcid || fields.orcid.trim() === '') {\n      alert('Please input ORCID iD');\n      return false;\n    }\n\n    CollaboratorFetcher.fetchandAddCollaboratorByOrcid(fields.orcid)\n      .then((result) => {\n        if (result.error) {\n          alert(`[${fields.orcid.trim()}] \\n ${result.message}`);\n          return false;\n        }\n\n        if (result.users) {\n          const user = result.users || {};\n          if (user.id !== null) {\n            const users = [];\n            users.push(result.users);\n            this.setState({\n              users,\n              showNewUser: false,\n              fields: {}\n            });\n          } else {\n            fields.firstName = user.first_name;\n            fields.lastName = user.last_name;\n            fields.email = user.email;\n            const aff = (user.affiliations && user.affiliations[0]) || {};\n\n            fields.country = aff.country;\n            if (typeof (organizations.find(x => x.value === aff.organization)) === 'undefined') {\n              organizations.push({ label: aff.organization, value: aff.organization });\n            }\n            fields.organization = aff.organization;\n            if (typeof (departments.find(x => x.value === aff.department)) === 'undefined') {\n              departments.push({ label: aff.department, value: aff.department });\n            }\n            fields.department = aff.department;\n\n            this.setState({\n              showNewUser: true,\n              fields,\n              departments\n            });\n          }\n        } else {\n          this.setState({ showNewUser: true, users: [] });\n        }\n      });\n    return true;\n  }\n\n  handleAddUser(u) {\n    const { authors } = this.state;\n    CollaboratorFetcher.AddMyCollaboration({ id: u.id })\n      .then((result) => {\n        authors.push(result.user);\n        this.setState({\n          authors: sortList(authors), users: [], fields: {}, showNewUser: false\n        });\n      });\n  }\n\n  createAdd() {\n    const { fields, authors } = this.state;\n\n\n    const validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/;\n\n    if (!fields.email?.match(validRegex)) {\n      alert(`Invalid Email Address [${fields.email}]`);\n      return false;\n    }\n\n    const nilFields = [];\n    if (!fields.email || fields.email.trim() === '') {\n      nilFields.push('Email');\n    }\n    if (!fields.firstName || fields.firstName.trim() === '') {\n      nilFields.push('First Name');\n    }\n    if (!fields.lastName || fields.lastName.trim() === '') {\n      nilFields.push('Last Name');\n    }\n    if (!fields.country || fields.country.trim() === '') {\n      nilFields.push('Country');\n    }\n    if (!fields.organization || fields.organization.trim() === '') {\n      nilFields.push('Organization');\n    }\n    if (!fields.department || fields.department.trim() === '') {\n      nilFields.push('Department');\n    }\n    if (nilFields.length > 0) {\n      alert(`Please input ${nilFields.join()}!`);\n      return false;\n    }\n\n    CollaboratorFetcher.createAddMyCollaboration(fields)\n      .then((result) => {\n        if (result.error) {\n          alert(result.message);\n        } else {\n          authors.push(result.user);\n          this.setState({\n            authors: sortList(authors), users: [], fields: {}, showNewUser: false\n          });\n        }\n      });\n    return true;\n  }\n\n  handleDeleteCollaborator(c) {\n    const { authors } = this.state;\n    CollaboratorFetcher.deleteCollaboration({ id: c.id })\n      .then((result) => {\n        if (result.error) {\n          alert(result.error);\n        } else {\n          this.setState({\n            authors: filter(authors, o => o.id !== c.id)\n          });\n        }\n      });\n  }\n\n  render() {\n    const { authors, users, showNewUser } = this.state;\n    const modalStyle = { overflowY: 'auto' };\n    const searchTbody = (users || []).map(g => (\n      <tbody key={`tbody_${g.id}`}>\n        <tr key={`row_${g.id}`} id={`row_${g.id}`} style={{ fontWeight: 'bold' }}>\n          <td>\n            <OverlayTrigger placement=\"right\" overlay={addUserTooltip} >\n              <Button\n                bsSize=\"xsmall\"\n                bsStyle=\"warning\"\n                onClick={() => this.handleAddUser(g)}\n              >\n                <i className=\"fa fa-floppy-o\" aria-hidden=\"true\" />\n              </Button>\n            </OverlayTrigger>\n            &nbsp;\n          </td>\n          <td>{g.name}</td>\n          <td>{g.email}</td>\n          <td>{g.orcid}</td>\n          <td>{g.current_affiliations && g.current_affiliations.length > 0 ? g.current_affiliations[0].department : ''}</td>\n          <td>{g.current_affiliations && g.current_affiliations.length > 0 ? g.current_affiliations[0].organization : ''}</td>\n          <td>{g.current_affiliations && g.current_affiliations.length > 0 ? g.current_affiliations[0].country : ''}</td>\n        </tr>\n      </tbody>\n    ));\n    let tbody = '';\n    if (authors && Object.keys(authors).length <= 0) {\n      tbody = '';\n    } else {\n      tbody = authors?.map(g => (\n        <tbody key={`tbody_${g.id}`}>\n          <tr key={`row_${g.id}`} id={`row_${g.id}`} style={{ fontWeight: 'bold' }}>\n            <td>\n              <DeleteConfirmBtn\n                label={g.name}\n                onClickYes={() => this.handleDeleteCollaborator(g)}\n              />\n              &nbsp;\n            </td>\n            <td>{g.name}</td>\n            <td>{g.email}</td>\n            <td>{g.orcid} {refreshAffByOrcid(g, this.onRefreshOrcidAff)}</td>\n            <td>\n              <Table style={{ backgroundColor: 'unset', margin: 'unset' }}>\n                <tbody>\n                  {\n                    g.current_affiliations && g.current_affiliations.length > 0 ?\n                      g.current_affiliations.map(a =>\n                      lineAff(g, a, this.onDeleteAff, this.handleInputChange)) : null\n                  }\n                  {\n                    g.type === 'Collaborator' && g.orcid == null ?\n                      (\n                        <tr>\n                          <td width=\"30%\">\n                            <SelectionField\n                              options={this.state.departments}\n                              value={(this.state.fields && this.state.fields[`${g.id}@line_department`]) || 'a'}\n                              field={`${g.id}@line_department`}\n                              placeholder=\"e.g. Institute of Organic Chemistry\"\n                              onChange={this.handleInputChange}\n                              isCreatable\n                            />\n                          </td>\n                          <td width=\"40%\">\n                            <SelectionField\n                              options={this.state.organizations}\n                              value={(this.state.fields && this.state.fields[`${g.id}@line_organization`]) || 'b'}\n                              field={`${g.id}@line_organization`}\n                              placeholder=\"e.g. Karlsruhe Institute of Technology\"\n                              onChange={this.handleInputChange}\n                              isCreatable\n                            />\n                          </td>\n                          <td width=\"20%\">\n                            <SelectionField\n                              options={this.state.countries}\n                              value={(this.state.fields && this.state.fields[`${g.id}@line_country`]) || ''}\n                              field={`${g.id}@line_country`}\n                              placeholder=\"e.g. Germany\"\n                              onChange={this.handleInputChange}\n                            />\n                          </td>\n                          <td width=\"10%\">\n                            <OverlayTrigger placement=\"right\" overlay={addAffTooltip} >\n                              <Button\n                                bsSize=\"xsmall\"\n                                bsStyle=\"success\"\n                                onClick={() => this.onAddAff(g)}\n                              >\n                                <i className=\"fa fa-plus\" aria-hidden=\"true\" />\n                              </Button>\n                            </OverlayTrigger>\n                          </td>\n                        </tr>\n                      ) : null\n                  }\n                </tbody>\n              </Table>\n            </td>\n          </tr>\n        </tbody>\n      ));\n    }\n\n    let newAff = '';\n    if (showNewUser === true) {\n      newAff = (\n        <Form>\n          <FormGroup controlId=\"formInlineCountry\">\n            <InputGroup>\n              <InputGroup.Addon>Country</InputGroup.Addon>\n              <Select.Creatable\n                name={`select-${uuid.v4()}`}\n                options={this.state.countries}\n                placeholder=\"e.g. Germany\"\n                multi={false}\n                isClearable\n                value={this.state.fields.country || ''}\n                onChange={event => this.handleInputChange('country', event)}\n                promptTextCreator={p => `Create new country; ${p} `}\n              />\n            </InputGroup>\n          </FormGroup>\n          <FormGroup controlId=\"formInlineOrganization\">\n            <InputGroup>\n              <InputGroup.Addon>Organization</InputGroup.Addon>\n              <Select.Creatable\n                name={`select-${uuid.v4()}`}\n                options={this.state.organizations}\n                placeholder=\"e.g. Karlsruhe Institute of Technology\"\n                multi={false}\n                isClearable\n                value={this.state.fields.organization || ''}\n                onChange={event => this.handleInputChange('organization', event)}\n                promptTextCreator={p => `Create new organization; ${p} `}\n              />\n            </InputGroup>\n          </FormGroup>\n          <FormGroup controlId=\"formInlineOrganization\">\n            <InputGroup>\n              <InputGroup.Addon>Department</InputGroup.Addon>\n              <Select.Creatable\n                name={`select-${uuid.v4()}`}\n                options={this.state.departments}\n                placeholder=\"e.g. Institute of Organic Chemistry\"\n                multi={false}\n                isClearable\n                value={this.state.fields.department || ''}\n                onChange={event => this.handleInputChange('department', event)}\n                promptTextCreator={p => `Create new department; ${p} `}\n              />\n            </InputGroup>\n          </FormGroup>\n          <Button bsSize=\"small\" bsStyle=\"warning\" onClick={() => this.createAdd()}>\n            <i className=\"fa fa-file\" aria-hidden=\"true\" />&nbsp;\n            Create and Save to my collaboration\n          </Button>\n        </Form>\n      );\n    }\n\n    const newUserPanel = (\n      <Panel bsStyle=\"success\">\n        <Panel.Heading>\n          <Panel.Title>\n            Add new collaborator (by ORCID iD or By Name)\n          </Panel.Title>\n        </Panel.Heading>\n        <Panel.Body>\n          <Row>\n            <Col md={8}>\n              <FormGroup controlId=\"formInlineLastName\">\n                <InputGroup>\n                  <InputGroup.Addon>ORCID iD</InputGroup.Addon>\n                  <FormControl\n                    type=\"text\"\n                    placeholder=\"0000-0002-1234-5678\"\n                    value={this.state.fields.orcid || ''}\n                    onChange={e => this.handleInputChange('orcid', e)}\n                  />\n                  <InputGroup.Button>\n                    <Button bsStyle=\"success\" onClick={() => this.findOrcid()}><i className=\"fa fa-search\" aria-hidden=\"true\" />&nbsp;Find by ORCID iD</Button>\n                  </InputGroup.Button>\n                </InputGroup>\n              </FormGroup>\n            </Col>\n          </Row>\n          <Row>\n            <Col md={8}>\n              <Form>\n                <FormGroup controlId=\"formInlineFirstName\">\n                  <InputGroup>\n                  <InputGroup.Addon>Email</InputGroup.Addon>\n                    <FormControl\n                      type=\"text\"\n                      placeholder=\"eg: AK\"\n                      value={this.state.fields.email || ''}\n                      onChange={e => this.handleInputChange('email', e)}\n                    />\n                    <InputGroup.Addon>First Name</InputGroup.Addon>\n                    <FormControl\n                      type=\"text\"\n                      placeholder=\"eg: AK\"\n                      value={this.state.fields.firstName || ''}\n                      onChange={e => this.handleInputChange('firstName', e)}\n                    />\n                    <InputGroup.Addon>Last Name</InputGroup.Addon>\n                    <FormControl\n                      type=\"text\"\n                      placeholder=\"J. Moriarty\"\n                      value={this.state.fields.lastName || ''}\n                      onChange={e => this.handleInputChange('lastName', e)}\n                    />\n                    <InputGroup.Button>\n                        <Button bsStyle=\"success\" onClick={() => this.findUsers()}>\n                          <i className=\"fa fa-search\" aria-hidden=\"true\" />&nbsp;\n                          Find\n                        </Button>\n                      </InputGroup.Button>\n                  </InputGroup>\n                </FormGroup>\n              </Form>\n            </Col>\n          </Row>\n          <Row>\n            <Col md={8}>\n              {newAff}\n            </Col>\n          </Row>\n        </Panel.Body>\n      </Panel>\n    );\n\n    return (\n      <Modal\n        show={this.props.show}\n        dialogClassName=\"importChemDrawModal\"\n        onHide={this.handleHide}\n        backdrop=\"static\"\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>My Collaboration</Modal.Title>\n        </Modal.Header>\n        <Modal.Body style={modalStyle}>\n          <div>\n            { newUserPanel }\n            <Panel bsStyle=\"success\">\n              <Panel.Heading>\n                <Panel.Title>\n                  Search Result\n                </Panel.Title>\n              </Panel.Heading>\n              <Panel.Body>\n                <Table responsive condensed hover>\n                  <thead>\n                    <tr style={{ backgroundColor: '#ddd' }}>\n                      <th width=\"10%\">Action</th>\n                      <th width=\"10%\">Name</th>\n                      <th width=\"10%\">Email</th>\n                      <th width=\"10%\">ORCID iD</th>\n                      <th width=\"20%\">Department</th>\n                      <th width=\"15%\">Organization</th>\n                      <th width=\"15%\">Country</th>\n                    </tr>\n                  </thead>\n                  { searchTbody }\n                </Table>\n              </Panel.Body>\n            </Panel>\n            <Panel bsStyle=\"info\">\n              <Panel.Heading>\n                <Panel.Title>\n                  My Collaboration\n                </Panel.Title>\n              </Panel.Heading>\n              <Panel.Body>\n                <Table responsive condensed hover>\n                  <thead>\n                    <tr style={{ backgroundColor: '#ddd' }}>\n                      <th width=\"5%\">Action</th>\n                      <th width=\"10%\">Name</th>\n                      <th width=\"10%\">Email</th>\n                      <th width=\"15%\">ORCID iD</th>\n                      <th width=\"60%\">\n                        <Table style={{ backgroundColor: 'unset', margin: 'unset' }}>\n                          <tbody>\n                            <tr>\n                              <td style={{ padding: 'unset' }} width=\"20%\">Department</td>\n                              <td style={{ padding: 'unset' }} width=\"15%\">Organization</td>\n                              <td style={{ padding: 'unset' }} width=\"15%\">Country</td>\n                              <td style={{ padding: 'unset' }} width=\"10%\">&nbsp;</td>\n                            </tr>\n                          </tbody>\n                        </Table>\n                      </th>\n                    </tr>\n                  </thead>\n                  { tbody }\n                </Table>\n              </Panel.Body>\n            </Panel>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n}\n\nAuthorModal.propTypes = {\n  show: PropTypes.bool.isRequired,\n  onHide: PropTypes.func.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport 'whatwg-fetch';\nimport {\n  Nav,\n  NavDropdown,\n  NavItem,\n  MenuItem,\n  Glyphicon,\n  Modal,\n  Button,\n  Table,\n  Panel,\n  Form,\n  FormControl,\n  FormGroup,\n  ControlLabel,\n  Col,\n  Row,\n} from 'react-bootstrap';\nimport _ from 'lodash';\n\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport MessagesFetcher from 'src/fetchers/MessagesFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport { UserLabelModal } from 'src/components/UserLabels';\nimport GroupElement from 'src/components/navigation/GroupElement';\nimport { formatDate } from 'src/utilities/timezoneHelper';\nimport Affiliations from '../../apps/userSettings/Affiliations';\n\nimport Functions from 'src/utilities/Functions';\nimport AuthorModal from 'src/components/users/AuthorModal';\n\nexport default class UserAuth extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      currentUser: props.currentUser || { name: 'unknown' },\n      showModal: false,\n      showLabelModal: false,\n      showAuthorsModal: false,\n      currentGroups: [],\n      currentDevices: [],\n      selectedUsers: null,\n      showSubscription: false,\n      showAffiliations: false,\n      currentSubscriptions: [],\n      showDeviceMetadataModal: false,\n      device: {},\n      deviceMetadata: {\n        dates: [],\n      },\n    };\n\n    this.onChange = this.onChange.bind(this);\n    this.handleShow = this.handleShow.bind(this);\n    this.handleClose = this.handleClose.bind(this);\n    this.handleLabelShow = this.handleLabelShow.bind(this);\n    this.handleLabelClose = this.handleLabelClose.bind(this);\n    this.handleAuthorsShow = this.handleAuthorsShow.bind(this);\n    this.handleAuthorsClose = this.handleAuthorsClose.bind(this);\n    this.handleSubscriptionShow = this.handleSubscriptionShow.bind(this);\n    this.handleSubscriptionClose = this.handleSubscriptionClose.bind(this);\n    this.handleDeviceMetadataModalShow = this.handleDeviceMetadataModalShow.bind(this);\n    this.handleDeviceMetadataModalClose = this.handleDeviceMetadataModalClose.bind(this);\n    this.handleAffiliationsShow = this.handleAffiliationsShow.bind(this);\n    this.handleAffiliationsHide = this.handleAffiliationsHide.bind(this);\n    this.renderAffiliations = this.renderAffiliations.bind(this);\n\n    this.promptTextCreator = this.promptTextCreator.bind(this);\n\n    this.handleInputChange = this.handleInputChange.bind(this);\n    this.handleClick = this.handleClick.bind(this);\n    this.handleChange = this.handleChange.bind(this);\n  }\n\n  componentDidMount() {\n    UserStore.listen(this.onChange);\n    UserActions.fetchCurrentUser();\n  }\n\n  componentWillUnmount() {\n    UserStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    this.setState({\n      currentUser: state.currentUser,\n    });\n  }\n\n  logout() {\n    UserActions.logout();\n  }\n\n  promptTextCreator(label) {\n    return `Share with \"${label}\"`;\n  }\n\n  handlefetchDeviceMetadataByDeviceId(deviceID) {\n    UsersFetcher.fetchDeviceMetadataByDeviceId(deviceID).then((result) => {\n      if (result.device_metadata) {\n        this.setState({\n          deviceMetadata: result.device_metadata,\n        });\n      }\n    });\n  }\n\n  // show modal\n  handleShow() {\n    UsersFetcher.fetchCurrentGroup().then((result) => {\n      this.setState({\n        currentGroups: result.currentGroups,\n        showModal: true,\n        selectedUsers: null,\n      });\n    });\n    UsersFetcher.fetchCurrentDevices().then((result) => {\n      this.setState({\n        currentDevices: result.currentDevices,\n      });\n    });\n  }\n\n  // hide modal\n  handleClose() {\n    this.setState({ showModal: false, selectedUsers: null });\n  }\n\n  handleDeviceMetadataModalShow(device) {\n    this.setState({\n      showDeviceMetadataModal: true,\n      device,\n    });\n    this.handlefetchDeviceMetadataByDeviceId(device.id);\n  }\n\n  handleDeviceMetadataModalClose() {\n    this.setState({\n      showDeviceMetadataModal: false,\n      device: {},\n      deviceMetadata: {},\n    });\n  }\n\n  handleLabelShow() {\n    this.setState({\n      showLabelModal: true,\n    });\n  }\n\n  handleLabelClose() {\n    this.setState({ showLabelModal: false });\n  }\n\n  handleAuthorsShow() {\n    this.setState({\n      showAuthorsModal: true,\n    });\n  }\n\n  handleAuthorsClose() {\n    this.setState({ showAuthorsModal: false });\n  }\n  // show modal Subscription\n  handleSubscriptionShow() {\n    MessagesFetcher.fetchChannelWithUser().then((result) => {\n      this.setState({\n        showSubscription: true,\n        currentSubscriptions: result.channels,\n      });\n    });\n  }\n\n  // hide modal Subscription\n  handleSubscriptionClose() {\n    this.setState({ showSubscription: false });\n  }\n\n  // tooltip of yes/no confirmation\n  handleClick() {\n    this.setState({ show: !this.state.show });\n  }\n\n  // inputs of create new group\n  handleInputChange(type, ev) {\n    switch (type) {\n      case 'first':\n        this.setState({ groupFirstName: ev.currentTarget.value });\n        break;\n      case 'last':\n        this.setState({ groupLastName: ev.currentTarget.value });\n        break;\n      case 'abbr':\n        this.setState({ groupAbbreviation: ev.currentTarget.value });\n        break;\n      default:\n        break;\n    }\n  }\n\n  subscribe(node) {\n    const { currentSubscriptions } = this.state;\n\n    MessagesFetcher.subscribeChannel({\n      channel_id: node.id,\n      subscribe: node.user_id == null,\n    }).then((result) => {\n      if (result.error) {\n        // alert(result.error);\n        NotificationActions.add({\n          message: result.error,\n          level: 'error',\n        });\n      } else {\n        const actSubscription = _.filter(\n          this.state.currentSubscriptions,\n          (o) => o.id === result.channel_id\n        );\n        if (node.user_id != null) {\n          actSubscription[0].user_id = null;\n        } else {\n          actSubscription[0].user_id = result.user_id;\n        }\n        const idx = _.findIndex(\n          this.state.currentSubscriptions,\n          (o) => o.id === result.channel_id\n        );\n        currentSubscriptions.splice(idx, 1, actSubscription[0]);\n        this.setState({ currentSubscriptions });\n      }\n    });\n  }\n\n  // create new group\n  // need to use the wording 'group_param' because of the definition of current api\n  createGroup() {\n    const {\n      groupFirstName,\n      groupLastName,\n      groupAbbreviation,\n      currentUser,\n      currentGroups,\n    } = this.state;\n    const group_param = {\n      first_name: groupFirstName,\n      last_name: groupLastName,\n      name_abbreviation: groupAbbreviation,\n      users: [currentUser.id],\n    };\n\n    UsersFetcher.createGroup({ group_param }).then((result) => {\n      if (result.error) {\n        alert(result.error);\n      } else {\n        currentGroups.push(result.group);\n        this.setState({\n          currentGroups,\n        });\n      }\n    });\n  }\n\n  renderDeviceButtons(device) {\n    return (\n      <td>\n        <Button\n          bsSize=\"xsmall\"\n          type=\"button\"\n          bsStyle=\"info\"\n          className=\"fa fa-laptop\"\n          onClick={() => this.handleDeviceMetadataModalShow(device)}\n        />\n        &nbsp;&nbsp;\n      </td>\n    );\n  }\n\n  handleChange(currentGroups) {\n    this.setState({ currentGroups });\n  }\n\n  handleDeleteGroup = (currentGroupId) => {\n    const currentGroups = this.state.currentGroups.filter(\n      (cg) => cg.id !== currentGroupId\n    );\n    UsersFetcher.updateGroup({ id: currentGroupId, destroy_group: true });\n    this.setState({ currentGroups });\n  };\n\n  handleDeleteUser = (groupRec, userRec) => {\n    let { currentGroups, currentUser } = this.state;\n    UsersFetcher.updateGroup({\n      id: groupRec.id,\n      destroy_group: false,\n      rm_users: [userRec.id],\n    }).then((result) => {\n      const findIdx = _.findIndex(\n        result.group.users,\n        (o) => o.id == currentUser.id\n      );\n      const findAdmin = _.findIndex(\n        result.group.admins,\n        (o) => o.id == currentUser.id\n      );\n      if (findIdx == -1 && findAdmin == -1) {\n        currentGroups = _.filter(\n          this.state.currentGroups,\n          (o) => o.id != result.group.id\n        );\n      } else {\n        const idx = _.findIndex(currentGroups, (o) => o.id == result.group.id);\n        currentGroups.splice(idx, 1, result.group);\n      }\n      this.setState({ currentGroups });\n    });\n  };\n\n  handleAffiliationsShow() {\n    this.setState({ showAffiliations: true });\n  }\n  handleAffiliationsHide = () => {\n    this.setState({ showAffiliations: false });\n  };\n\n  renderAffiliations() {\n    return this.state.showAffiliations ? (\n      <Affiliations\n        show={this.state.showAffiliations}\n        onHide={this.handleAffiliationsHide} />\n    ) : null;\n\n  }\n\n  // render modal\n  renderModal() {\n    const { showModal, currentGroups, currentDevices } = this.state;\n\n    const modalStyle = {\n      justifyContent: 'center',\n      alignItems: 'center',\n      overflowY: 'auto',\n    };\n\n    let tBodyGroups = '';\n    let tBodyDevices = '';\n\n    if (Object.keys(currentGroups).length <= 0) {\n      tBodyGroups = '';\n    } else {\n      tBodyGroups = currentGroups\n        ? currentGroups.map((g) => (\n          <GroupElement\n            groupElement={g}\n            key={g.id}\n            currentState={this.state}\n            currentGroup={this.state.currentGroups}\n            onDeleteGroup={this.handleDeleteGroup}\n            onDeleteUser={this.handleDeleteUser}\n            onChangeData={this.handleChange}\n          />\n        ))\n        : '';\n    }\n\n    if (Object.keys(currentDevices).length <= 0) {\n      tBodyDevices = '';\n    } else {\n      tBodyDevices = currentDevices\n        ? currentDevices.map((g) => (\n          <tbody key={`tbody_${g.id}`}>\n            <tr\n              key={`row_${g.id}`}\n              id={`row_${g.id}`}\n              style={{ fontWeight: 'bold' }}\n            >\n              <td>{g.name}</td>\n              <td>{g.name_abbreviation}</td>\n              {this.renderDeviceButtons(g)}\n            </tr>\n          </tbody>\n        ))\n        : '';\n    }\n\n    return (\n      <Modal\n        show={showModal}\n        dialogClassName=\"importChemDrawModal\"\n        onHide={this.handleClose}\n        style={{\n          maxWidth: '80%',\n          maxHeight: '80%',\n          margin: 'auto',\n          overflowY: 'auto',\n        }}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>My Groups & Devices</Modal.Title>\n        </Modal.Header>\n        <Modal.Body style={modalStyle}>\n          <div>\n            <Panel bsStyle=\"success\">\n              <Panel.Heading>\n                <Panel.Title>Create new group</Panel.Title>\n              </Panel.Heading>\n              <Panel.Body>\n                <Form inline>\n                  <FormGroup controlId=\"formInlineFname\">\n                    <ControlLabel>Name:</ControlLabel>\n                    &nbsp;&nbsp;\n                    <FormControl\n                      type=\"text\"\n                      style={{\n                        marginRight: '5px',\n                      }}\n                      placeholder=\"eg: AK\"\n                      onChange={this.handleInputChange.bind(this, 'first')}\n                    />\n                  </FormGroup>\n                  <FormGroup controlId=\"formInlineLname\">\n                    <FormControl\n                      type=\"text\"\n                      placeholder=\"J. Moriarty\"\n                      style={{\n                        marginRight: '20px',\n                      }}\n                      onChange={this.handleInputChange.bind(this, 'last')}\n                    />\n                  </FormGroup>\n                  &nbsp;&nbsp;\n                  <FormGroup controlId=\"formInlineNameAbbr\">\n                    <ControlLabel>Name abbreviation:</ControlLabel>\n                    &nbsp;&nbsp;\n                    <FormControl\n                      type=\"text\"\n                      placeholder=\"AK-JM\"\n                      style={{\n                        marginRight: '10px',\n                      }}\n                      onChange={this.handleInputChange.bind(this, 'abbr')}\n                    />\n                  </FormGroup>\n                  &nbsp;&nbsp;\n                  <Button\n                    bsSize=\"small\"\n                    bsStyle=\"success\"\n                    onClick={() => this.createGroup()}\n                    style={{\n                      height: '32px',\n                      fontWeight: 'Bold',\n                      fontSize: '12px',\n                    }}\n                  >\n                    Create new group\n                  </Button>\n                </Form>\n              </Panel.Body>\n            </Panel>\n            <Panel bsStyle=\"info\">\n              <Panel.Heading>\n                <Panel.Title>My Groups</Panel.Title>\n              </Panel.Heading>\n              <Panel.Body>\n                <Table responsive condensed hover>\n                  <thead>\n                    <tr style={{ backgroundColor: '#ddd' }}>\n                      <th width=\"20%\">Name</th>\n                      <th width=\"10%\">Abbreviaton</th>\n                      <th width=\"20%\">Admin by</th>\n                      <th width=\"50%\">&nbsp;</th>\n                    </tr>\n                  </thead>\n                  {tBodyGroups}\n                </Table>\n              </Panel.Body>\n            </Panel>\n            <Panel bsStyle=\"info\">\n              <Panel.Heading>\n                <Panel.Title>My Devices</Panel.Title>\n              </Panel.Heading>\n              <Panel.Body>\n                <Table responsive condensed hover>\n                  <thead>\n                    <tr style={{ backgroundColor: '#ddd' }}>\n                      <th width=\"40%\">Name</th>\n                      <th width=\"10%\">Abbreviation</th>\n                      <th width=\"50%\">&nbsp;</th>\n                    </tr>\n                  </thead>\n                  {tBodyDevices}\n                </Table>\n              </Panel.Body>\n            </Panel>\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  // render modal\n  renderSubscribeModal() {\n    if (this.state.showSubscription) {\n      const tbody = this.state.currentSubscriptions.map((g) => (\n        <tr key={`row_${g.id}`} style={{ fontWeight: 'bold' }}>\n          <td width=\"10%\" style={{ border: 'none' }}>\n            <Button\n              bsSize=\"xsmall\"\n              bsStyle={g.user_id == null ? 'success' : 'default'}\n              onClick={() => this.subscribe(g)}\n            >\n              {g.user_id == null ? 'Subscribe' : 'Unsubscribe'}\n            </Button>\n          </td>\n          <td width=\"90%\" style={{ border: 'none' }}>\n            <div>{g.subject}</div>\n          </td>\n        </tr>\n      ));\n\n      return (\n        <Modal\n          show={this.state.showSubscription}\n          onHide={this.handleSubscriptionClose}\n        >\n          <Modal.Header closeButton>\n            <Modal.Title>My Subscription</Modal.Title>\n          </Modal.Header>\n          <Modal.Body style={{ overflow: 'auto' }}>\n            <div>\n              <Table>\n                <tbody>{tbody}</tbody>\n              </Table>\n            </div>\n          </Modal.Body>\n        </Modal>\n      );\n    }\n    return <div />;\n  }\n\n  renderDeviceMetadataModal() {\n    const { showDeviceMetadataModal, device, deviceMetadata } = this.state;\n    const title = 'Device Metadata';\n    return (\n      <Modal\n        show={showDeviceMetadataModal}\n        onHide={this.handleDeviceMetadataModalClose}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>\n            {device.name}\n            {' '}\n            Metadata\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <Panel bsStyle=\"success\">\n            <Panel.Heading>\n              <Panel.Title>{title}</Panel.Title>\n            </Panel.Heading>\n            <Panel.Body>\n              <Form>\n                <FormGroup controlId=\"metadataFormDOI\">\n                  <ControlLabel>DOI</ControlLabel>\n                  &nbsp;&nbsp;\n                  <FormControl\n                    type=\"text\"\n                    defaultValue={deviceMetadata.doi}\n                    readonly=\"true\"\n                  />\n                </FormGroup>\n                <FormGroup controlId=\"metadataFormState\">\n                  <ControlLabel>State</ControlLabel>\n                  <FormControl\n                    type=\"text\"\n                    defaultValue={deviceMetadata.data_cite_state}\n                    readonly=\"true\"\n                  />\n                </FormGroup>\n\n                <FormGroup controlId=\"metadataFormURL\">\n                  <ControlLabel>URL</ControlLabel>\n                  <FormControl\n                    type=\"text\"\n                    defaultValue={deviceMetadata.url}\n                    readonly=\"true\"\n                  />\n                </FormGroup>\n\n                <FormGroup controlId=\"metadataFormLandingPage\">\n                  <ControlLabel>Landing Page</ControlLabel>\n                  <FormControl\n                    type=\"text\"\n                    defaultValue={deviceMetadata.landing_page}\n                    readonly=\"true\"\n                  />\n                </FormGroup>\n                <FormGroup controlId=\"metadataFormName\">\n                  <ControlLabel>Name</ControlLabel>\n                  &nbsp;&nbsp;\n                  <FormControl\n                    type=\"text\"\n                    defaultValue={deviceMetadata.name}\n                    readonly=\"true\"\n                  />\n                </FormGroup>\n                <FormGroup controlId=\"metadataFormPublicationYear\">\n                  <ControlLabel>Publication Year</ControlLabel>\n                  <FormControl\n                    type=\"number\"\n                    defaultValue={deviceMetadata.publication_year}\n                    readonly=\"true\"\n                  />\n                </FormGroup>\n                <FormGroup controlId=\"metadataFormDescription\">\n                  <ControlLabel>Description</ControlLabel>\n                  <FormControl\n                    type=\"text\"\n                    defaultValue={deviceMetadata.description}\n                    readonly=\"true\"\n                  />\n                </FormGroup>\n\n                {deviceMetadata.dates\n                  && deviceMetadata.dates.map((dateItem, index) => (\n                    <div key={index}>\n                      <Col smOffset={0} sm={6}>\n                        <FormGroup>\n                          <ControlLabel>Date</ControlLabel>\n                          <FormControl\n                            type=\"text\"\n                            defaultValue={dateItem.date}\n                            readonly=\"true\"\n                          />\n                        </FormGroup>\n                      </Col>\n                      <Col smOffset={0} sm={6}>\n                        <FormGroup>\n                          <ControlLabel>DateType</ControlLabel>\n                          <FormControl\n                            type=\"text\"\n                            defaultValue={dateItem.dateType}\n                            readonly=\"true\"\n                          />\n                        </FormGroup>\n                      </Col>\n                    </div>\n                  ))}\n\n                <Row>\n                  <Col smOffset={0} sm={12}>\n                    <p className=\"text-right\">\n                      DataCiteVersion:\n                      {' '}\n                      {deviceMetadata.data_cite_version}\n                      <br />\n                      DataCiteUpdatedAt:\n                      {' '}\n                      {formatDate(deviceMetadata.data_cite_updated_at)}\n                      <br />\n                    </p>\n                  </Col>\n                </Row>\n              </Form>\n            </Panel.Body>\n          </Panel>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n\n  render() {\n    const templatesLink = (\n      <MenuItem eventKey=\"2\" href=\"/ketcher/common_templates\">\n        Template Management\n      </MenuItem>\n    );\n    const moderatorLink = (\n      <MenuItem eventKey=\"6\" href=\"/molecule_moderator\">\n        Molecule Moderator\n      </MenuItem>\n    );\n\n    return (\n      <div>\n        <Nav navbar pullRight>\n          <NavDropdown\n            title={`${this.state.currentUser.name}`}\n            id=\"bg-nested-dropdown\"\n          >\n            <MenuItem eventKey=\"1\" href=\"/pages/settings\">\n              Account &amp; Profile\n            </MenuItem>\n            {this.state.currentUser.is_templates_moderator\n              ? templatesLink\n              : null}\n            <MenuItem eventKey=\"3\" href=\"/users/edit\">\n              Change Password\n            </MenuItem>\n            {/* <MenuItem eventKey=\"5\" href=\"/pages/affiliations\">\n              My Affiliations\n            </MenuItem> */}\n            <MenuItem\n              onClick={this.handleAffiliationsShow}>\n              My Affiliations\n            </MenuItem>\n            <MenuItem onClick={this.handleShow}>My Groups & Devices</MenuItem>\n            <MenuItem onClick={this.handleLabelShow}>My Labels</MenuItem>\n            {\n              this.state.currentUser ?\n                <MenuItem eventKey=\"10\" onClick={this.handleAuthorsShow}>My Collaboration</MenuItem> : null\n            }\n            {/* <MenuItem onClick={this.handleShow}>My Groups</MenuItem> */}\n            {/* <MenuItem onClick={this.handleSubscriptionShow}>My Subscriptions</MenuItem>\n                Disable for now as there is no subsciption channel yet (Paggy) */}\n            <MenuItem eventKey=\"12\" href=\"/converter_admin\" >Converter Profile</MenuItem>\n            {/* <MenuItem eventKey=\"7\" href=\"/command_n_control\" >My Devices</MenuItem> */}\n            {this.state.currentUser.molecule_editor ? moderatorLink : null}\n            <MenuItem eventKey=\"8\" href=\"/generic_elements_admin\">Generic Designer</MenuItem>\n            {\n              this.state.currentUser && this.state.currentUser.is_article_editor ?\n                <MenuItem eventKey=\"8\" href=\"/home/newseditor/new\">News Editor</MenuItem> : null\n            }\n            {\n              this.state.currentUser && this.state.currentUser.is_howto_editor ?\n                <MenuItem eventKey=\"9\" href=\"/home/howtoeditor/ein\">How-To Editor</MenuItem> : null\n            }\n          </NavDropdown>\n          <NavItem\n            onClick={() => this.logout()}\n            style={{ marginRight: '5px' }}\n            className=\"\"\n            title=\"Log out\"\n          >\n            <Glyphicon glyph=\"log-out\" />\n          </NavItem>\n        </Nav>\n        <AuthorModal show={this.state.showAuthorsModal} currentUser={this.state.currentUser} onHide={this.handleAuthorsClose} />\n        {this.renderModal()}\n        {this.renderAffiliations()}\n        <UserLabelModal\n          showLabelModal={this.state.showLabelModal}\n          onHide={() => this.handleLabelClose()}\n        />\n        {this.renderSubscribeModal()}\n        {this.renderDeviceMetadataModal()}\n      </div>\n    );\n  }\n}\n\nUserAuth.propTypes = {\n  currentUser: PropTypes.object,\n  selectUsers: PropTypes.bool,\n};\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { FormGroup, InputGroup, FormControl, Overlay, ListGroup, ListGroupItem, OverlayTrigger, Tooltip }\n  from 'react-bootstrap';\nimport debounce from 'es6-promise-debounce';\nimport { isString } from 'lodash';\n\nimport KeyboardActions from 'src/stores/alt/actions/KeyboardActions';\nimport KeyboardStore from 'src/stores/alt/stores/KeyboardStore';\n\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\n\nexport default class AutoCompleteInput extends React.Component {\n\n  constructor(props) {\n    super(props)\n    this.state = {\n      value: '',\n      valueBeforeFocus: null,\n      showSuggestions: false,\n      suggestions: null,\n      suggestionFocus: null,\n      error: '',\n      inputWidth: 0,\n      inputDisabled: false,\n      timeoutReference: null,\n      keyboardContext: ''\n    }\n\n    this.onUIChange = this.onUIChange.bind(this)\n    this.overlayTarget = React.createRef();\n\n    this.timeout = 6e2 // 600ms timeout for input typing\n    this.doneTyping = this.doneTyping.bind(this)\n  }\n\n  componentDidMount() {\n    UIStore.listen(this.onUIChange)\n    this.initInputWidth()\n  }\n\n  componentWillUnmount() {\n    UIStore.unlisten(this.onUIChange);\n  }\n\n  onUIChange(state) {\n    let inputDisabled = false\n    let value = ''\n\n    if (state.currentSearchSelection) {\n      inputDisabled = true\n      let selection = state.currentSearchSelection\n\n      if (selection.search_by_method === \"substring\") {\n        value = selection.name\n      } else {\n        value = selection.search_by_method\n      }\n    }\n\n    this.setState({\n      value : value,\n      inputDisabled : inputDisabled\n    })\n  }\n\n  initInputWidth() {\n    const input = ReactDOM.findDOMNode(this.refs.input)\n    if (input) {\n      this.setState({ inputWidth: input.offsetWidth })\n    }\n  }\n\n  focusNewSuggestionIndex(direction=1) {\n    let {suggestions, suggestionFocus} = this.state\n    let length = suggestions.length\n    let sF = suggestionFocus == null ? length - 1 : suggestionFocus\n    let newSuggestionIndex = sF + direction\n    if (newSuggestionIndex >= length) {newSuggestionIndex = 0}\n    if (newSuggestionIndex < 0) {newSuggestionIndex = length - 1}\n    this.focusSuggestion(newSuggestionIndex)\n  }\n\n  focusSuggestion(newFocus) {\n    let {suggestions, suggestionFocus, value, valueBeforeFocus} = this.state\n    let newState = {}\n    let sF = !suggestionFocus ? 0 : suggestionFocus\n    if(!valueBeforeFocus) {\n      newState.valueBeforeFocus = value\n    }\n    newState.value = suggestions[newFocus].name\n\n    if (!isString(newState.value)) {\n      newState.value = suggestions[newFocus].name.name || suggestions[newFocus].name.value;\n    }\n\n    newState.suggestionFocus = newFocus\n    ReactDOM.findDOMNode(this.refs['suggestion_' + sF])\n            .classList.remove('active')\n    let newFocusDom = ReactDOM.findDOMNode(this.refs['suggestion_' + newFocus])\n    newFocusDom.classList.add('active')\n\n    this.setState(newState)\n\n    const listSuggestions = this.listSuggestions;\n\n    // Scroll to element\n    if (listSuggestions &&\n        (newFocusDom.offsetTop > (listSuggestions.scrollTop + listSuggestions.offsetHeight - 70) ||\n        (newFocusDom.offsetTop < listSuggestions.scrollTop))) {\n      listSuggestions.scrollTop = newFocusDom.offsetTop - (11 * listSuggestions.offsetTop);\n    }\n  }\n\n  resetComponent() {\n    this.setState({\n      value: '',\n      valueBeforeFocus: null,\n      showSuggestions: false,\n      suggestions: null,\n      suggestionFocus: null,\n      error: ''\n    })\n  }\n\n  // TODO implement continue fetching in the end of scroll\n  fetchSuggestions(value, show = true) {\n    let debounced = debounce(this.props.suggestions, 200)\n    debounced(value).then(result => {\n      let newState = {}\n      if(result?.length > 0) {\n        newState.suggestions = result\n        newState.showSuggestions = show\n      } else {\n        newState.suggestions = null\n        newState.error = \"Nothing was found.\"\n        newState.suggestionFocus = null\n        newState.showSuggestions = false\n      }\n      this.setState(newState)\n    }).catch(error => console.log(error))\n  }\n\n  doneTyping() {\n    let {value} = this.state\n    if(!value) {\n      this.resetComponent()\n    } else {\n      // From https://gist.github.com/lsauer/1312860\n      // TODO Validate if the input is InChi, InChiKey or SMILES\n      this.fetchSuggestions(value)\n    }\n  }\n\n  // Keep chaging the input value until user finish typing\n  handleValueChange(event, doneTyping) {\n    let {value} = event.target\n    let {timeoutReference} = this.state\n\n    if(!value) {\n      this.resetComponent()\n    } else {\n      if (timeoutReference) {\n        clearTimeout(timeoutReference)\n      }\n\n      this.setState({\n        value: value,\n        timeoutReference: setTimeout(function(){\n                                      doneTyping()\n                                    }, this.timeout)\n      })\n    }\n  }\n\n  handleFocus() {\n    let keyboardState = KeyboardStore.getState()\n    this.setState({\n      keyboardContext: keyboardState.context\n    })\n\n    KeyboardActions.contextChange(\"search\")\n  }\n\n  handleBlur() {\n    KeyboardActions.contextChange(this.state.keyboardContext)\n  }\n\n  handleKeyDown(event) {\n    let {value, valueBeforeFocus, showSuggestions, error, suggestions} =\n      this.state\n    let {onSelectionChange} = this.props\n    let newState = {}\n    switch(event.keyCode) {\n      case 13: // Enter\n        this.selectSuggestion()\n        event.preventDefault()\n        break\n      case 27: // ESC\n        this.abortAutoSelection()\n        event.preventDefault()\n        break\n      case 38: // Up\n        if(showSuggestions && !error) {\n          this.focusNewSuggestionIndex(-1)\n        }\n        event.preventDefault()\n        break\n      case 40: // Down\n        if(showSuggestions && !error) {\n          this.focusNewSuggestionIndex(+1)\n        } else if(suggestions) {\n          newState.showSuggestions = true\n        }\n        event.preventDefault()\n        break\n    }\n    this.setState(newState)\n  }\n\n  selectSuggestion() {\n    let {suggestions, suggestionFocus, timeoutReference, value} = this.state\n    let {onSelectionChange} = this.props\n    this.setState({\n      showSuggestions: false,\n      valueBeforeFocus: null\n    })\n    if (!isString(value) && value) {\n      value = value.name || value.value;\n      this.setState({ value })\n    }\n\n    if (!value || value.trim() === '') {\n      this.setState({\n        value: ''\n      })\n      let {currentCollection, isSync} = UIStore.getState();\n      currentCollection['clearSearch'] = true\n      isSync ? UIActions.selectSyncCollection(currentCollection)\n        : UIActions.selectCollection(currentCollection);\n\n      return 0\n    }\n\n    if (UIStore.getState().currentSearchByID) {\n      UIActions.clearSearchById();\n    }\n\n    let selection = {name: value, search_by_method: 'substring'}\n    if (suggestions && suggestionFocus != null && suggestions[suggestionFocus]) {\n      let selectedSuggestion = suggestions[suggestionFocus]\n      let selectedName = selectedSuggestion.name;\n\n      if (!isString(selectedName)) {\n        selectedName = selectedName.name;\n      }\n\n      if (selectedName && selectedName.trim() != '' && this.state.value == selectedName)\n        if (selectedSuggestion.search_by_method == 'element_short_label') {\n          selection = {name: selectedSuggestion.name.name, search_by_method: `element_short_label_${selectedSuggestion.name.klass}`}\n\n        } else {\n          selection = selectedSuggestion\n        }\n    }\n\n    clearTimeout(timeoutReference)\n    onSelectionChange(selection)\n  }\n\n  abortAutoSelection() {\n    let {valueBeforeFocus} = this.state\n    this.setState({\n      showSuggestions: false,\n      value: valueBeforeFocus,\n      valueBeforeFocus: null,\n      suggestionFocus: null\n    })\n  }\n\n  renderSuggestions() {\n    let {suggestions, error} = this.state\n    let types = {\n      chemotion_id: {icon: 'icon-sample', label: 'Chemotion Id'},\n      sample_name : {icon: 'icon-sample', label: 'Sample Name'},\n      sample_short_label : {icon: 'icon-sample', label: 'Sample Short Label'},\n      sample_external_label : {icon: 'icon-sample', label: 'Sample External Label'},\n      polymer_type : {icon: 'icon-polymer', label: 'Polymer'},\n      reaction_name : {icon: 'icon-reaction', label: 'Reaction name'},\n      reaction_status : {icon: 'icon-reaction', label: 'Reaction status'},\n      reaction_short_label : {icon: 'icon-reaction', label: 'Reaction label'},\n      reaction_rinchi_string: { icon: 'icon-reaction', label: 'Reaction RInChI' },\n      wellplate_name : {icon: 'icon-wellplate', label: 'Wellplate'},\n      screen_name : {icon: 'icon-screen', label: 'Screen'},\n      iupac_name : {icon: 'icon-sample', label: 'Molecule'},\n      inchistring : {icon: 'icon-sample', label: 'InChI'},\n      inchikey: { icon: 'icon-sample', label: 'InChIKey'},\n      cano_smiles : {icon: 'icon-sample', label: 'Canonical Smiles'},\n      sum_formula : {icon: 'icon-sample', label: 'Sum Formula'},\n      cas: { icon: 'icon-sample', label: 'cas' },\n      requirements : {icon: 'icon-screen', label: 'Requirement'},\n      conditions : {icon: 'icon-screen', label: 'Condition'},\n      element_short_label: {icon: 'icon-element', label: 'Element Short Label'},\n      embargo : {icon: 'fa fa-object-group', label: 'Embargo Bundle Number'},\n      cell_line_material_name: {icon: 'icon-cell_line', label: 'Cell line name'},\n      cell_line_sample_name: {icon: 'icon-cell_line', label: 'Cell line sample name'}\n    }\n\n    if(suggestions) {\n      return (\n        <div>\n          { suggestions.map((suggestion, index) => {\n            let suggestionType = types[suggestion.search_by_method]\n            let icon = suggestionType ? suggestionType.icon : \"\";\n            if (suggestion.search_by_method == 'chemotion_id' && suggestion.name.startsWith('CRR-')) {\n              icon = 'icon-reaction';\n            }\n            let typeLabel = suggestionType ? suggestionType.label : \"\"\n            let name = '';\n\n            // Remove first \"InchI\" string in suggestion list\n            let inchiString = 'InChI=';\n            let inchiMatch = '';\n\n            if (suggestion.search_by_method === 'element_short_label') {\n              icon = suggestion.name.icon;\n              typeLabel = suggestion.name.label;\n              name = suggestion.name.name;\n            } else if (suggestion.search_by_method === 'cas') {\n              name = suggestion.name.value;\n            } else {\n              name = suggestion.name;\n              inchiMatch = suggestion.name.substring(0, inchiString.length)\n              if (inchiMatch === inchiString) {\n                suggestion.name = suggestion.name.replace(inchiString, \"\")\n              }\n            }\n\n\n            return (\n              <ListGroupItem\n                onClick={() => this.selectSuggestion()}\n                onMouseEnter={() => this.focusSuggestion(index)}\n                key={'suggestion_' + index}\n                ref={'suggestion_' + index}\n                header={name}\n                className=\"list-group-item-wrap\"\n              >\n                <i className={icon} style={{marginRight: 2}}></i>\n                {typeLabel}\n              </ListGroupItem>\n            )\n          })}\n        </div>\n      )\n    } else if (error) {\n      return <ListGroupItem>{error}</ListGroupItem>\n    }\n    return <div />;\n  }\n\n  render() {\n    const {\n      value, showSuggestions, inputWidth, suggestions\n    } = this.state;\n    if (suggestions && suggestions.length > 6) { // show scroll after 6 results\n      this.props.suggestionsAttributes.className = 'scroll';\n    } else {\n      this.props.suggestionsAttributes.className = '';// hide scroll\n    }\n    const containerStyle = {\n      position: 'absolute',\n      width: inputWidth,\n      marginTop: -15,\n      marginLeft: -15,\n      zIndex: 2\n    };\n\n    const searchTooltip = <Tooltip id=\"search_tooltip\">Search by IUPAC name, InChi, Smiles...</Tooltip>;\n\n    return (\n      <div style={{ position: 'relative' }} >\n        <FormGroup ref={this.overlayTarget}\n        >\n          <InputGroup >\n            <InputGroup.Button >\n              {this.props.buttonBefore}\n            </InputGroup.Button>\n              <OverlayTrigger placement=\"bottom\" delayShow={1000} overlay={searchTooltip}>\n                <FormControl\n                  {...this.props.inputAttributes}\n                  disabled={this.state.inputDisabled || this.props.inputDisabled}\n                  type=\"text\"\n                  value={this.props.defaultSearchValue || value || ''}\n                  autoComplete=\"off\"\n                  ref=\"input\"\n                  onFocus={() => this.handleFocus()}\n                  onBlur={() => this.handleBlur()}\n                  onChange={event => this.handleValueChange(event, this.doneTyping)}\n                  onKeyDown={event => this.handleKeyDown(event)}\n                />\n              </OverlayTrigger>\n            <InputGroup.Button>\n              {this.props.buttonAfter}\n            </InputGroup.Button>\n          </InputGroup>\n        </FormGroup>\n        <Overlay\n          show={showSuggestions}\n          onHide={() => this.abortAutoSelection()}\n          placement='bottom'\n          container={this}\n          rootClose={true}\n          target={this.overlayTarget.current}\n        >\n          <div style={{ ...containerStyle }} >\n            <ListGroup\n              {...this.props.suggestionsAttributes}\n              ref={(alist) => { this.listSuggestions = alist; }}\n            >\n              {this.renderSuggestions()}\n            </ListGroup>\n          </div>\n        </Overlay>\n      </div>\n    )\n  }\n}\n","import React from 'react';\nimport base64 from 'base-64';\nimport SpectraStore from 'src/stores/alt/stores/SpectraStore';\nimport SpectraActions from 'src/stores/alt/actions/SpectraActions';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport { Modal, Button } from 'react-bootstrap';\nimport UIFetcher from 'src/fetchers/UIFetcher';\nimport { parseBase64ToArrayBuffer } from 'src/utilities/FetcherHelper';\nimport Attachment from 'src/models/Attachment';\nimport { SpectraOps } from 'src/utilities/quillToolbarSymbol';\nimport { FN } from '@complat/react-spectra-editor';\nimport { cleaningNMRiumData } from 'src/utilities/SpectraHelper';\n\nexport default class NMRiumDisplayer extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      ...SpectraStore.getState(),\n      nmriumData: null,\n      is2D: false,\n    };\n\n    this.iframeRef = React.createRef();\n\n    this.onChange = this.onChange.bind(this);\n    this.receiveMessage = this.receiveMessage.bind(this);\n    this.handleNMRDisplayerLoaded = this.handleNMRDisplayerLoaded.bind(this);\n    this.sendJcampDataToNMRDisplayer = this.sendJcampDataToNMRDisplayer.bind(this);\n    this.loadNMRDisplayerHostInfo = this.loadNMRDisplayerHostInfo.bind(this);\n    this.requestDataToBeSaved = this.requestDataToBeSaved.bind(this);\n    this.requestPreviewImage = this.requestPreviewImage.bind(this);\n    this.savingNMRiumWrapperData = this.savingNMRiumWrapperData.bind(this);\n    this.saveOp = this.saveOp.bind(this);\n\n    this.findDisplayingSpectra = this.findDisplayingSpectra.bind(this);\n    this.findDisplayingSpectrumID = this.findDisplayingSpectrumID.bind(this);\n    this.buildPeaksBody = this.buildPeaksBody.bind(this);\n    this.readNMRiumData = this.readNMRiumData.bind(this);\n    this.onChangeElement = this.onChangeElement.bind(this);\n\n    this.loadNMRDisplayerHostInfo();\n  }\n\n  componentDidMount() {\n    SpectraStore.listen(this.onChange);\n\n    window.addEventListener('message', this.receiveMessage);\n  }\n\n  componentWillUnmount() {\n    SpectraStore.unlisten(this.onChange);\n  }\n\n  handleNMRDisplayerLoaded() {\n    const isIframeLoaded = true;\n    this.setState({\n      isIframeLoaded,\n    }, () => {\n      this.sendJcampDataToNMRDisplayer();\n    });\n  }\n\n  onChange(newState) {\n    const origState = this.state;\n    this.setState({ ...origState, ...newState });\n    const { showModalNMRDisplayer } = newState;\n    if (showModalNMRDisplayer) {\n      this.sendJcampDataToNMRDisplayer();\n    }\n  }\n\n  onChangeElement() {\n    const { sample } = this.props;\n    const { updatedElement } = this.state;\n    return updatedElement || sample;\n  }\n\n  getSpcInfo() {\n    const { spcInfos, spcIdx } = this.state;\n    const sis = spcInfos.filter((x) => x.idx === spcIdx);\n    const si = sis.length > 0 ? sis[0] : spcInfos[0];\n    return si;\n  }\n\n  loadNMRDisplayerHostInfo() {\n    UIFetcher.fetchNMRDisplayerHost().then((response) => {\n      const { nmrium_url } = response;\n      if (nmrium_url) {\n        const url = new URL(nmrium_url);\n        const nmriumOrigin = url.origin;\n        const nmriumWrapperHost = nmrium_url;\n        this.setState({ nmriumWrapperHost, nmriumOrigin });\n      }\n    });\n  }\n\n  receiveMessage(event) {\n    const { nmriumWrapperHost, nmriumOrigin } = this.state;\n    if (nmriumWrapperHost === undefined || nmriumWrapperHost === '') {\n      return;\n    }\n\n    const is2DNMR = (data) => {\n      const spectra = data?.spectra || [];\n      return spectra.some((spc) => spc.info?.dimension === 2);\n    };\n\n    if (event.origin === nmriumOrigin && event.data) {\n      const eventData = event.data;\n      const eventDataType = eventData.type;\n\n      if (eventDataType === 'nmr-wrapper:data-change') {\n        const nmrWrapperActionType = eventData.data.actionType;\n        if (nmrWrapperActionType !== '') {\n          let nmriumData = (eventData.data?.state || eventData.data) || null;\n          nmriumData = cleaningNMRiumData(nmriumData);\n          if (!nmriumData) {\n            return;\n          }\n          const { version } = nmriumData;\n          if (version > 3) {\n            const is2D = is2DNMR(nmriumData.data);\n            if (is2D) {\n              this.setState({ nmriumData, is2D });\n            } else {\n              this.setState({ nmriumData: nmriumData.data, is2D });\n            }\n          } else {\n            const is2D = is2DNMR(nmriumData);\n            this.setState({ nmriumData, is2D });\n          }\n        }\n      } else if (eventDataType === 'nmr-wrapper:action-response') {\n        const nmrWrapperDataType = eventData.data.type;\n        if (nmrWrapperDataType === 'exportSpectraViewerAsBlob') {\n          const blobData = eventData.data.data.blob;\n          this.savingNMRiumWrapperData(blobData);\n        }\n      }\n    }\n  }\n\n  requestDataToBeSaved() {\n    this.requestPreviewImage();\n  }\n\n  requestPreviewImage() {\n    const iframeCurrent = this.iframeRef.current;\n    if (!iframeCurrent) {\n      return;\n    }\n    const { contentWindow } = iframeCurrent;\n    const dataToBeSent = {\n      type: 'exportSpectraViewerAsBlob',\n    };\n    contentWindow.postMessage({ type: 'nmr-wrapper:action-request', data: dataToBeSent }, '*');\n  }\n\n  sendJcampDataToNMRDisplayer() {\n    LoadingActions.start.defer();\n    const { fetchedFiles, isIframeLoaded, spcInfos } = this.state;\n    if (isIframeLoaded && fetchedFiles && fetchedFiles.files && fetchedFiles.files.length > 0) {\n      LoadingActions.stop.defer();\n\n      const listFileContents = fetchedFiles.files;\n      if (this.iframeRef.current\n        && listFileContents.length > 0\n        && listFileContents.length === spcInfos.length) {\n        const dataToBeSent = this.buildDataToBeSent(listFileContents, spcInfos);\n        const { contentWindow } = this.iframeRef.current;\n        if (contentWindow) {\n          contentWindow.postMessage({ type: 'nmr-wrapper:load', data: dataToBeSent }, '*');\n        }\n      }\n    } else {\n      LoadingActions.stop.defer();\n    }\n  }\n\n  buildDataToBeSent(files, spectraInfos) {\n    const sample = this.onChangeElement(); // REPO multiple samples\n    const nmriumData = this.readNMRiumData(files, spectraInfos);\n    if (nmriumData) {\n      const data = { data: nmriumData, type: 'nmrium' };\n      return data;\n    }\n\n    const data = { data: [], type: 'file' };\n    for (let index = 0; index < files.length; index += 1) {\n      const fileToBeShowed = files[index].file;\n      const bufferData = parseBase64ToArrayBuffer(fileToBeShowed);\n      const spcInfo = spectraInfos[index];\n      const fileName = spcInfo.label;\n      const blobToBeSent = new Blob([bufferData]);\n      const dataItem = new File([blobToBeSent], fileName);\n      data.data.push(dataItem);\n    }\n    if (sample) {\n      const { molfile } = sample;\n      if (molfile) {\n        const fileName = `${sample.id}.mol`;\n        const blobToBeSent = new Blob([molfile]);\n        const dataItem = new File([blobToBeSent], fileName);\n        data.data.push(dataItem);\n      }\n    }\n    return data;\n  }\n\n  readNMRiumData(files, spectraInfos) {\n    const arrNMRiumSpecs = spectraInfos.filter((spc) => spc.label.includes('.nmrium'));\n    if (!arrNMRiumSpecs || arrNMRiumSpecs.length === 0) {\n      return false;\n    }\n\n    const nmriumSpec = arrNMRiumSpecs[0];\n\n    const arrNMRiumFiles = files.filter((file) => file.id === nmriumSpec.idx);\n    if (!arrNMRiumFiles || arrNMRiumFiles.length === 0) {\n      return false;\n    }\n\n    const nmriumDataEncoded = arrNMRiumFiles[0].file;\n    const decodedData = base64.decode(nmriumDataEncoded);\n    const nmriumData = JSON.parse(decodedData);\n    return nmriumData;\n  }\n\n  savingNMRiumWrapperData(imageBlobData = false) {\n    const { nmriumData, is2D } = this.state;\n    if (nmriumData === null || !imageBlobData) {\n      return;\n    }\n\n    const specInfo = this.getSpcInfo();\n    if (!specInfo) {\n      return;\n    }\n\n    const { label } = specInfo;\n    const specLabelParts = label.split('.');\n    const fileNameWithoutExt = specLabelParts[0];\n\n    const imageAttachment = this.prepareImageAttachment(imageBlobData, fileNameWithoutExt);\n    const nmriumAttachment = this.prepareNMRiunDataAttachment(nmriumData, fileNameWithoutExt);\n    const listFileNameToBeDeleted = [imageAttachment.filename, nmriumAttachment.filename];\n    const datasetToBeUpdated = this.prepareDatasets(listFileNameToBeDeleted);\n    if (!datasetToBeUpdated) {\n      return;\n    }\n\n    if (!is2D) {\n      this.prepareAnalysisMetadata(nmriumData);\n    }\n\n    const { handleSampleChanged } = this.props;\n    const sample = this.onChangeElement(); // REPO multiple samples\n\n    datasetToBeUpdated.attachments.push(imageAttachment);\n    datasetToBeUpdated.attachments.push(nmriumAttachment);\n\n    const cb = () => (\n      this.saveOp()\n    );\n    LoadingActions.start.defer();\n    handleSampleChanged(sample, cb);\n  }\n\n  prepareDatasets(fileNameToBeDeleted = []) {\n    const specInfo = this.getSpcInfo();\n    const sample = this.onChangeElement(); // REPO multiple samples\n\n    const datasetContainers = sample.datasetContainers();\n    const listDatasetFiltered = datasetContainers.filter((e) => specInfo.idDt === e.id);\n    if (listDatasetFiltered.length === 0) {\n      return false;\n    }\n\n    const datasetToBeUpdated = listDatasetFiltered[0];\n    const datasetAttachments = datasetToBeUpdated.attachments;\n    datasetAttachments.forEach((att) => {\n      if (fileNameToBeDeleted.includes(att.filename)) {\n        att.is_deleted = true;\n      }\n    });\n    datasetToBeUpdated.attachments = datasetAttachments;\n    return datasetToBeUpdated;\n  }\n\n  prepareNMRiunDataAttachment(nmriumData, fileNameNoExt) {\n    const spaceIndent = 0;\n    const dataAsJson = JSON.stringify(\n      nmriumData,\n      (key, value) => (ArrayBuffer.isView(value) ? Array.from(value) : value),\n      spaceIndent,\n    );\n    const blobData = new Blob([dataAsJson], { type: 'text/plain' });\n    const fileName = `${fileNameNoExt}.nmrium`;\n    blobData.name = fileName;\n    const dataAttachment = Attachment.fromFile(blobData);\n    return dataAttachment;\n  }\n\n  prepareImageAttachment(blobData, fileNameNoExt) {\n    const fileName = `${fileNameNoExt}.svg`;\n    const blobDataToBeSaved = blobData;\n    blobDataToBeSaved.name = fileName;\n    const imageAttachment = Attachment.fromFile(blobDataToBeSaved);\n    imageAttachment.thumb = true;\n    return imageAttachment;\n  }\n\n  prepareAnalysisMetadata(nmriumData) {\n    const buildPeaksBodyObject = this.buildPeaksBody(nmriumData);\n    const { peaksBody, layout } = buildPeaksBodyObject;\n\n    if (peaksBody === '' || layout === '') {\n      return '';\n    }\n\n    const layoutOpsObj = SpectraOps[layout];\n\n    if (!layoutOpsObj) {\n      return '';\n    }\n\n    const sample = this.onChangeElement(); // REPO multiple samples\n    const specInfo = this.getSpcInfo();\n\n    const analysesContainers = sample.analysesContainers();\n\n    const ops = [\n      ...layoutOpsObj.head(''),\n      { insert: peaksBody },\n      ...layoutOpsObj.tail(),\n    ];\n    analysesContainers.forEach((analyses) => {\n      if (analyses.id !== specInfo.idAe) return;\n      analyses.children.forEach((ai) => {\n        if (ai.id !== specInfo.idAi) return;\n        ai.extended_metadata.content.ops = [ // eslint-disable-line\n          ...ai.extended_metadata.content.ops,\n          ...ops,\n        ];\n      });\n    });\n  }\n\n  buildPeaksBody(nmriumData) {\n    const displayingSpectra = this.findDisplayingSpectra(nmriumData);\n    if (displayingSpectra.length <= 0) {\n      return { peaksBody: '', layout: '' };\n    }\n    const firstSpectrum = displayingSpectra[0];\n    let layout = firstSpectrum.nucleus;\n    const { info } = firstSpectrum;\n    if (info) {\n      const { dimension, nucleus } = info;\n      if (dimension === 2) {\n        return { peaksBody: '', layout: '' };\n      }\n      layout = nucleus;\n    }\n\n    const firstSpectrumPeaks = firstSpectrum.peaks;\n    const { values } = firstSpectrumPeaks;\n    const peaks = values;\n    const shift = { shifts: [{ enable: false, peak: false, ref: { label: false, name: '---', value: 0 } }] };\n    const decimal = 2;\n    const peaksBody = FN.peaksBody({\n      peaks, layout, decimal, shift\n    });\n    return { peaksBody, layout };\n  }\n\n  findDisplayingSpectra(nmriumData) {\n    const { spectra, correlations } = nmriumData;\n    const displayingSpectrumID = this.findDisplayingSpectrumID(correlations);\n    if (displayingSpectrumID) {\n      const displayingSpectra = spectra.filter((spectrum) => {\n        const { id } = spectrum;\n        return id === displayingSpectrumID;\n      });\n      return displayingSpectra;\n    }\n\n    const nonFIDSpectra = spectra.filter((spectrum) => {\n      const { info } = spectrum;\n      const { isFid } = info;\n      return isFid === false;\n    });\n    return nonFIDSpectra;\n  }\n\n  findDisplayingSpectrumID(correlations) {\n    if (!correlations) {\n      return false;\n    }\n\n    try {\n      const { values } = correlations;\n      if (values.length > 0) {\n        const firstValue = values[0];\n        const { link } = firstValue;\n        if (link.length > 0) {\n          const firstLink = link[0];\n          const { experimentID } = firstLink;\n          return experimentID;\n        }\n      }\n      return false;\n    } catch (error) {\n      return false;\n    }\n  }\n\n  saveOp() {\n    SpectraActions.ToggleModalNMRDisplayer.defer();\n    const { handleSubmit } = this.props;\n    handleSubmit();\n  }\n\n  renderNMRium(nmriumWrapperHost) {\n    return (\n      <Modal.Body>\n        <iframe\n          id=\"nmrium_wrapper\"\n          className=\"spectra-editor\"\n          src={nmriumWrapperHost}\n          allowFullScreen\n          ref={this.iframeRef}\n          onLoad={this.handleNMRDisplayerLoaded}\n        />\n      </Modal.Body>\n    );\n  }\n\n  renderModalTitle() {\n    const { nmriumData } = this.state;\n    const { readOnly: forecReadOnly = false } = this.props; // forecReadOnly for REPO\n    const sample = this.onChangeElement(); // REPO multiple samples\n    let readOnly = false;\n    if (sample.hasOwnProperty('can_update')) {\n      readOnly = !(sample.can_update);\n    }\n    // forecReadOnly for REPO\n    if (forecReadOnly) {\n      readOnly = true;\n    }\n    let hasSpectra = false;\n    if (nmriumData) {\n      const { version } = nmriumData;\n      if (version > 3) {\n        hasSpectra = nmriumData.data.spectra.length > 0;\n      } else {\n        hasSpectra = nmriumData.spectra.length > 0;\n      }\n    }\n\n    return (\n      <Modal.Header>\n        <Button\n          bsStyle=\"danger\"\n          bsSize=\"small\"\n          className=\"button-right\"\n          onClick={() => {\n            SpectraActions.ToggleModalNMRDisplayer.defer();\n          }}\n        >\n          <span>\n            <i className=\"fa fa-times\" />\n            {' '}\n            Close without Save\n          </span>\n        </Button>\n        {\n          hasSpectra && !readOnly ?\n          (\n            <Button\n              bsStyle=\"success\"\n              bsSize=\"small\"\n              className=\"button-right\"\n              onClick={() => {\n                this.requestDataToBeSaved();\n              }}\n            >\n              <span>\n                <i className=\"fa fa-floppy-o\" />\n                {' '}\n                Close with Save\n              </span>\n            </Button>\n          ) : null\n        }\n      </Modal.Header>\n    );\n  }\n\n  render() {\n    const { showModalNMRDisplayer, nmriumWrapperHost } = this.state;\n\n    return (\n      <div className=\"spectra-editor\">\n        <Modal\n          show={showModalNMRDisplayer}\n          dialogClassName=\"spectra-editor-dialog\"\n          animation\n          onHide={this.closeOp}\n        >\n          {this.renderModalTitle()}\n          {this.renderNMRium(nmriumWrapperHost)}\n        </Modal>\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst PubchemLabels = ({element}) =>{\n  let cid = element.pubchem_tag && element.pubchem_tag.pubchem_cid\n  let labelStyle = {\n    display: 'inline-block',\n    marginLeft: \"5px\",\n    marginRight: \"5px\"\n  };\n  if (!cid || isNaN(cid)) {labelStyle.WebkitFilter = \"grayscale(100%)\"}\n  const handleOnClick = (e) => {\n    if (cid && !isNaN(cid)){\n      window.open(\"https://pubchem.ncbi.nlm.nih.gov/compound/\" + cid, '_blank')\n    }\n    e.stopPropagation()\n  }\n  return (\n    <span style={labelStyle} onClick={handleOnClick}>\n      <img src=\"/images/wild_card/pubchem.svg\" className=\"pubchem-logo\" />\n    </span>\n  )\n}\n\nPubchemLabels.propTypes = {\n  element: PropTypes.object,\n}\n\nexport default PubchemLabels;\n","const EditorAttrs = {\n  ketcher: {\n    label: 'ketcher-rails',\n    src: '/ketcher',\n    structure: {\n      path: 'ketcher',\n      setMolfileInFrame: false,\n      setMfFuncName: 'setMolecule',\n      getMfFuncName: 'getMolfile',\n      getMfWithCallback: false,\n      getSVGFuncName: 'getSVG',\n      getSVGWithCallback: false,\n    },\n  },\n  ketcher2: {\n    structure: {\n      path: 'ketcher',\n      setMolfileInFrame: false,\n      setMfFuncName: 'setMolecule',\n      getMfFuncName: 'getMolfile',\n      getMfWithCallback: false,\n    },\n  },\n  chemdraw: {\n    structure: {\n      getMfFuncName: 'getMOL',\n      setMfFuncName: 'loadMOL',\n      getSVGFuncName: 'getSVG',\n      getMfWithCallback: true,\n      setMolfileInFrame: false,\n      getMolfileFunction: 'getMOL',\n      getSVGWithCallback: true,\n    },\n  },\n  marvinjs: {\n    structure: {\n      getMfWithCallback: true,\n      getSVGFuncName: 'render',\n      getSVGWithCallback: true,\n    },\n  },\n};\n\nexport default EditorAttrs;\n","const loadScript = (props) => {\n  const scriptId = `_sdjs_${props.id}`;\n  const obScript = document.getElementById(scriptId);\n  if (!obScript) {\n    const script = document.createElement('script');\n    script.src = props.src;\n    script.id = scriptId;\n    document.head.appendChild(script);\n    script.onload = () => {\n      if (props.loaded) props.loaded();\n    };\n    script.onerror = () => {\n      const rmScript = document.getElementById(scriptId);\n      rmScript.parentNode.removeChild(rmScript);\n      if (props.error) props.error();\n    };\n  }\n  if (obScript) {\n    if (obScript && props.loaded) props.loaded();\n  }\n};\n\nconst loadScripts = (props) => {\n  const {\n    es, id, cbError, cbLoaded\n  } = props;\n  const idx = props.idx || 0;\n  const loadId = `${id}_${idx}`;\n  const src = es[idx];\n  if (es.length === (idx + 1)) {\n    loadScript({\n      error: cbError, loaded: cbLoaded, src, id: loadId\n    });\n  } else {\n    const params = {\n      es, id, cbError, cbLoaded, idx: idx + 1\n    };\n    loadScript({\n      error: cbError, loaded: loadScripts(params), src, id: loadId\n    });\n  }\n};\n\nexport default loadScripts;\n","/* eslint-disable react/forbid-prop-types */\n/* eslint-disable no-undef */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport StructureEditor from 'src/models/StructureEditor';\nimport loadScripts from 'src/components/structureEditor/loadScripts';\n\nfunction LoadingModal(props) {\n  const { loading, message } = props;\n  return (\n    loading && (\n      <div className=\"structure-editor-loading\">\n        <div>\n          Initializing...\n          {message}\n        </div>\n        <i className=\"fa fa-spinner fa-pulse fa-3x fa-fw\" aria-hidden=\"true\" />\n      </div>\n    )\n  );\n}\n\nLoadingModal.propTypes = { loading: PropTypes.bool, message: PropTypes.node };\nLoadingModal.defaultProps = { loading: false, message: '' };\n\nclass ChemDrawEditor extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = { loading: true, message: '' };\n    this.cdAttached = this.cdAttached.bind(this);\n    this.cdFailed = this.cdFailed.bind(this);\n    this.loaded = this.loaded.bind(this);\n  }\n\n  componentDidMount() {\n    const { editor } = this.props;\n    const { extJs, id } = editor;\n    loadScripts({\n      es: extJs, id, cbError: () => loadError(id), cbLoaded: () => this.loaded()\n    });\n  }\n\n  cdAttached(cd) {\n    const { editor, molfile, fnCb } = this.props;\n    editor.structureDef.getEditorFunction = () => cd;\n    if (molfile) {\n      editor.structureDef.molfile = molfile;\n    }\n    this.setState({ loading: false, message: '' }, fnCb(editor));\n  }\n\n  cdFailed(e) {\n    this.setState({\n      loading: true,\n      message: (\n        <>\n          <div>{e.message}</div>\n          <div>Please contact your system administrator.</div>\n        </>\n      ),\n    });\n  }\n\n  loaded() {\n    const { editor } = this.props;\n    const { id, extConf = {}, license: licenseUrl = '' } = editor;\n    const config = {\n      ...extConf,\n      properties: extConf.properties || { StyleSheet: 'ACS Document 1996' },\n    };\n    const cdManager = window.RevvitySignals?.ChemdrawWebManager\n      || window.perkinelmer?.ChemdrawWebManager;\n    if (!cdManager) {\n      this.cdFailed({\n        message: 'ChemDraw JS is not available.',\n      });\n      return;\n    }\n    cdManager.attach({\n      id,\n      config,\n      callback: this.cdAttached,\n      errorCallback: this.cdFailed,\n      licenseUrl,\n    });\n  }\n\n  render() {\n    const { iH, editor } = this.props;\n    const { loading, message } = this.state;\n    return (\n      <div id={editor.id} style={{ height: iH }}>\n        <LoadingModal loading={loading} message={message} />\n      </div>\n    );\n  }\n}\n\nChemDrawEditor.propTypes = {\n  editor: PropTypes.instanceOf(StructureEditor).isRequired,\n  molfile: PropTypes.string,\n  iH: PropTypes.string.isRequired,\n  fnCb: PropTypes.func.isRequired,\n};\n\nChemDrawEditor.defaultProps = { molfile: '\\n  noname\\n\\n  0  0  0  0  0  0  0  0  0  0999 V2000\\nM  END\\n' };\nexport default ChemDrawEditor;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from 'react-bootstrap';\nimport StructureEditor from 'src/models/StructureEditor';\nimport loadScripts from 'src/components/structureEditor/loadScripts';\n\nconst LoadingModal = (props) => {\n  const { loading } = props;\n  return (\n    <Modal className=\"chemdraw-loading\" animation show={loading}>\n      <i className=\"fa fa-spinner fa-pulse fa-3x fa-fw\" />\n      <span className=\"sr-only\">Initializing...</span>\n    </Modal>\n  );\n};\n\nLoadingModal.propTypes = { loading: PropTypes.bool };\nLoadingModal.defaultProps = { loading: false };\n\nclass MarvinjsEditor extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = { loading: true };\n    this.attachEditor = this.attachEditor.bind(this);\n    this.loadError = this.loadError.bind(this);\n    this.attachError = this.attachError.bind(this);\n  }\n\n  componentDidMount() {\n    const { editor } = this.props;\n    const { extJs, id } = editor;\n    loadScripts({\n      es: extJs, id, cbError: () => this.loadError(), cbLoaded: () => this.attachEditor()\n    });\n  }\n\n  loadError() {\n    this.attachError('Internal Server Error!');\n  }\n\n  attached(mv) {\n    this.setState({ loading: false });\n    const { editor } = this.props;\n    const molfile = this.props.molfile || '\\n  noname\\n\\n  0  0  0  0  0  0  0  0  0  0999 V2000\\nM  END\\n';\n    mv.sketcherInstance.setDisplaySettings({ toolbars: 'reporting' });\n    mv.sketcherInstance.importStructure('mol', molfile).then(() => {}, (error) => { alert(error); }).catch((error) => { alert(error); });\n    editor.structureDef.getEditorFunction = () => mv;\n    this.props.parent.setState({ editor });\n  }\n\n  attachError(e) {\n    this.setState({ loading: false });\n    alert(`Marvin JS is failed to load or attach! Error: ${e}`);\n  }\n\n  attachEditor() {\n    // eslint-disable-next-line no-undef\n    MarvinJSUtil.getPackage('#mvs').then((mv) => {\n      mv.onReady(() => { this.attached(mv); });\n    }, (error) => { this.attachError(error); });\n  }\n\n  render() {\n    const { iH, editor } = this.props;\n    return (\n      <div>\n        <iframe title=\"Marvin JS\" id=\"mvs\" src={editor.extSrc} className=\"sketcher-frame\" height={iH} width=\"100%\" />\n        <LoadingModal loading={this.state.loading} />\n      </div>\n    );\n  }\n}\n\nMarvinjsEditor.propTypes = {\n  editor: PropTypes.instanceOf(StructureEditor).isRequired,\n  parent: PropTypes.object.isRequired,\n  molfile: PropTypes.string,\n  iH: PropTypes.string.isRequired\n};\n\nMarvinjsEditor.defaultProps = { molfile: '\\n  noname\\n\\n  0  0  0  0  0  0  0  0  0  0999 V2000\\nM  END\\n' };\nexport default MarvinjsEditor;\n","/* eslint-disable react/require-default-props */\n/* eslint-disable react/forbid-prop-types */\nimport React, { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\n\n\nfunction KetcherEditor(props) {\n  const iframeRef = useRef();\n  const {\n    editor, iH, iS, molfile\n  } = props;\n\n  const initMol = molfile\n    || '\\n  noname\\n\\n  0  0  0  0  0  0  0  0  0  0999 V2000\\nM  END\\n';\n\n  const loadContent = (event) => {\n    if (event.data.eventType === 'init') {\n      editor.structureDef.editor.setMolecule(initMol);\n    }\n  };\n\n  useEffect(() => {\n    window.addEventListener('message', loadContent);\n    return () => {\n      window.removeEventListener('message', loadContent);\n    };\n  }, []);\n\n  return (\n    <div>\n      <iframe\n        ref={iframeRef}\n        id={editor.id}\n        src={editor.extSrc}\n        title={editor.label}\n        height={iH}\n        width=\"100%\"\n        style={iS}\n      />\n    </div>\n  );\n}\n\nKetcherEditor.propTypes = {\n  molfile: PropTypes.string,\n  editor: PropTypes.object.isRequired,\n  iH: PropTypes.string.isRequired,\n  iS: PropTypes.object.isRequired,\n};\n\nexport default KetcherEditor;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nfunction CommonTemplateItem(props) {\n  const { item, onClickItem } = props;\n  return (\n    <div className=\"ketcher-template-item\" onClick={() => onClickItem(item)}>\n      <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"css-uwwqev\"><path d=\"M8.75 3.75h-5v5h1.5V6.312L9 10.063l1-1.124L6.312 5.25H8.75v-1.5zM15.25 3.75h5v5h-1.5V6.312L15 10.063l-1-1.124 3.688-3.688H15.25v-1.5zM15.25 20.25h5v-5h-1.5v2.438L15 13.938l-1 1.124 3.688 3.688H15.25v1.5zM8.75 20.25h-5v-5h1.5v2.438L9 13.938l1 1.124-3.688 3.688H8.75v1.5z\" fill=\"currentColor\"></path></svg>\n      <h4 style={{ marginLeft: 15 }}>\n        {item?.name}\n      </h4>\n    </div>\n  );\n}\n\nexport default CommonTemplateItem;\n\nCommonTemplateItem.propTypes = {\n  // eslint-disable-next-line react/forbid-prop-types\n  item: PropTypes.object.isRequired,\n  onClickItem: PropTypes.func.isRequired\n};\n","import PropTypes from 'prop-types';\nimport React, { memo, useCallback, useEffect, useState } from 'react';\nimport {\n  ControlLabel,\n  Modal,\n  OverlayTrigger,\n  Panel,\n  Tooltip,\n} from 'react-bootstrap';\nimport CommonTemplateItem from 'src/components/ketcher-templates/CommonTemplateItem';\n\nconst debounce = (func, delay) => {\n  let timeoutId;\n  return function(...args) {\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(() => func.apply(this, args), delay);\n  };\n};\n\nconst CommonTemplatesList = memo(({ options, onClickHandle, selectedItem }) => {\n  const [commonTemplateModal, setCommonTemplateModal] = useState(false);\n  const [searchQuery, setSearchQuery] = useState('');\n  const [filteredOptions, setFilteredOptions] = useState(options);\n  const toolTip = 'Select a template. Clicking inside the canvas and Press CTRL + v.';\n\n  const onSelectItem = (item) => {\n    onClickHandle(item);\n    setCommonTemplateModal(false);\n  };\n\n  const handleSearch = useCallback(\n    debounce((query) => {\n      const lowerCaseQuery = query.toLowerCase();\n      const filtered = options.filter((item) =>\n        item.name.toLowerCase().includes(lowerCaseQuery)\n      );\n      setFilteredOptions(filtered);\n    }, 300),\n    [options]\n  );\n\n  useEffect(() => {\n    handleSearch(searchQuery);\n  }, [searchQuery, handleSearch]);\n\n  return (\n    <div>\n      <div className=\"common-template-header\">\n        <div style={{ width: '95%' }}>\n          <ControlLabel>Common Templates:</ControlLabel>\n        </div>\n        <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"commontemplates\">{toolTip}</Tooltip>}>\n          <i className=\"fa fa-info\" />\n        </OverlayTrigger>\n      </div>\n      <div\n        className=\"ketcher-select-common-template\"\n        onClick={() => setCommonTemplateModal(true)}\n      >\n        {selectedItem ? selectedItem?.name : 'Select Template'}\n        <div className=\"select-template-badge\">\n          <i className=\"fa fa-caret-down\" />\n        </div>\n      </div>\n\n      <Modal show={commonTemplateModal} onHide={() => setCommonTemplateModal(false)}>\n        <Modal.Header closeButton >\n          {toolTip}\n        </Modal.Header>\n        <Modal.Body>\n          <Panel style={{ height: 300 }}>\n            <Panel.Heading>\n              <Panel.Title>\n                Common Template list:\n              </Panel.Title>\n            </Panel.Heading>\n            <Panel.Body style={{ height: '80%', overflow: 'auto' }}>\n              <div>\n                <input\n                  type=\"text\"\n                  placeholder=\"Search templates by Name...\"\n                  value={searchQuery}\n                  onChange={(e) => setSearchQuery(e.target.value)}\n                  className='common-template-search'\n                />\n                {filteredOptions.length != options.length &&\n                  <div style={{ marginVertical: '10px' }}>\n                    {filteredOptions.length} out of {options.length} templates found\n                  </div>\n                }\n                {filteredOptions.map((item, idx) => (\n                  <CommonTemplateItem key={idx} item={item} onClickItem={(value) => onSelectItem(value)} />\n                ))}\n              </div>\n            </Panel.Body>\n          </Panel>\n        </Modal.Body>\n      </Modal>\n    </div>\n  );\n});\n\nexport default CommonTemplatesList;\n\nCommonTemplatesList.propTypes = {\n  options: PropTypes.arrayOf(PropTypes.object).isRequired,\n  onClickHandle: PropTypes.func.isRequired,\n  selectedItem: PropTypes.string.isRequired,\n};\n","import 'whatwg-fetch';\n\nexport default class CommonTemplatesFetcher {\n  static fetchCommonTemplates() {\n    return fetch('/api/v1/ketcher/common_templates_list')\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => console.log(errorMessage));\n  }\n}\n","/* eslint-disable react/jsx-no-bind */\n/* eslint-disable max-len */\n/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Button,\n  ButtonToolbar,\n  Modal,\n  Panel,\n  FormGroup,\n  ControlLabel,\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport StructureEditor from 'src/models/StructureEditor';\nimport EditorAttrs from 'src/components/structureEditor/StructureEditorSet';\nimport ChemDrawEditor from 'src/components/structureEditor/ChemDrawEditor';\nimport MarvinjsEditor from 'src/components/structureEditor/MarvinjsEditor';\nimport KetcherEditor from 'src/components/structureEditor/KetcherEditor';\nimport loadScripts from 'src/components/structureEditor/loadScripts';\nimport CommonTemplatesList from 'src/components/ketcher-templates/CommonTemplatesList';\nimport CommonTemplatesFetcher from 'src/fetchers/CommonTemplateFetcher';\n\nconst notifyError = (message) => {\n  NotificationActions.add({\n    title: 'Structure Editor error',\n    message,\n    level: 'error',\n    position: 'tc',\n    dismissible: 'button',\n    autoDismiss: 10,\n  });\n};\n\nconst key = 'ketcher-tmpls';\n\nconst loadEditor = (editor, scripts) => {\n  if (scripts?.length > 0) {\n    loadScripts({\n      es: scripts,\n      id: editor,\n      cbError: () => notifyError(\n        `The ${editor} failed to initialize! Please contact your system administrator!`\n      ),\n      cbLoaded: () => { },\n    });\n  }\n};\n\nconst createEditorInstance = (editor, available, configs) => ({\n  [editor]: new StructureEditor({\n    ...EditorAttrs[editor],\n    ...available,\n    ...configs,\n    id: editor,\n  }),\n});\n\nconst createEditor = (configs, availableEditors) => {\n  if (!availableEditors) return null;\n  const available = availableEditors[configs.editor];\n  if (available) {\n    loadEditor(configs.editor, available.extJs);\n    return createEditorInstance(configs.editor, available, configs);\n  }\n  return null;\n};\n\nconst createEditors = (_state = {}) => {\n  const matriceConfigs = _state.matriceConfigs || UserStore.getState().matriceConfigs || [];\n  const availableEditors = UIStore.getState().structureEditors || {};\n\n  const grantEditors = matriceConfigs\n    .map(({ configs }) => createEditor(configs, availableEditors.editors))\n    .filter(Boolean);\n\n  const editors = [\n    {\n      ketcher: new StructureEditor({\n        ...EditorAttrs.ketcher,\n        id: 'ketcher',\n      }),\n    },\n    ...grantEditors,\n  ].reduce((acc, args) => ({ ...acc, ...args }), {});\n\n  return editors;\n};\n\nfunction Editor({\n  type, editor, molfile, iframeHeight, iframeStyle, fnCb\n}) {\n  switch (type) {\n    case 'ketcher2':\n      return (\n        <KetcherEditor\n          editor={editor}\n          molfile={molfile}\n          iH={iframeHeight}\n          iS={iframeStyle}\n        />\n      );\n    case 'chemdraw':\n      return (\n        <ChemDrawEditor\n          editor={editor}\n          molfile={molfile}\n          iH={iframeHeight}\n          fnCb={fnCb}\n        />\n      );\n    case 'marvinjs':\n      return (\n        <MarvinjsEditor\n          editor={editor}\n          molfile={molfile}\n          iH={iframeHeight}\n          fnCb={fnCb}\n        />\n      );\n    default:\n      return (\n        <div>\n          <iframe\n            id={editor.id}\n            src={editor.src}\n            title={`${editor.label}`}\n            height={iframeHeight}\n            width=\"100%\"\n            style={iframeStyle}\n          />\n        </div>\n      );\n  }\n}\n\nEditor.propTypes = {\n  type: PropTypes.string.isRequired,\n  editor: PropTypes.object.isRequired,\n  molfile: PropTypes.string.isRequired,\n  iframeHeight: PropTypes.string.isRequired,\n  iframeStyle: PropTypes.object.isRequired,\n  fnCb: PropTypes.func.isRequired,\n};\n\nfunction EditorList(props) {\n  const { options, fnChange, value } = props;\n  return (\n    <FormGroup>\n      <ControlLabel>Structure Editor</ControlLabel>\n      <Select\n        className=\"status-select\"\n        name=\"editor selection\"\n        clearable={false}\n        options={options}\n        onChange={fnChange}\n        value={value}\n      />\n    </FormGroup>\n  );\n}\n\nfunction copyContentToClipboard(content) {\n  if (navigator.clipboard) {\n    const data = typeof content === 'object' ? JSON.stringify(content) : content;\n    navigator.clipboard.writeText(data).then(() => {\n      // alert('Please click on canvas and press CTRL+V to use the template.');\n    }).catch((err) => {\n      console.error('Failed to copy text: ', err);\n    });\n  }\n}\n\nEditorList.propTypes = {\n  value: PropTypes.string.isRequired,\n  fnChange: PropTypes.func.isRequired,\n  options: PropTypes.arrayOf(PropTypes.object).isRequired,\n};\n\nfunction WarningBox({ handleCancelBtn, hideWarning, show }) {\n  return show\n    ? (\n      <Panel bsStyle=\"info\">\n        <Panel.Heading>\n          <Panel.Title>\n            Parents/Descendants will not be changed!\n          </Panel.Title>\n        </Panel.Heading>\n        <Panel.Body>\n          <p>This sample has parents or descendants, and they will not be changed.</p>\n          <p>Are you sure?</p>\n          <br />\n          <Button bsStyle=\"danger\" onClick={handleCancelBtn} className=\"g-marginLeft--10\">\n            Cancel\n          </Button>\n          <Button bsStyle=\"warning\" onClick={hideWarning} className=\"g-marginLeft--10\">\n            Continue Editing\n          </Button>\n        </Panel.Body>\n      </Panel>\n    ) : null;\n}\n\nWarningBox.propTypes = {\n  handleCancelBtn: PropTypes.func.isRequired,\n  hideWarning: PropTypes.func.isRequired,\n  show: PropTypes.bool.isRequired,\n};\n\nconst initEditor = () => {\n  const userProfile = UserStore.getState().profile;\n  const eId = userProfile?.data?.default_structure_editor || 'ketcher';\n  const editor = new StructureEditor({ ...EditorAttrs[eId], id: eId });\n  return editor;\n};\n\nexport default class StructureEditorModal extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showModal: props.showModal,\n      showWarning: props.hasChildren || props.hasParent || false,\n      molfile: props.molfile,\n      matriceConfigs: [],\n      editor: initEditor(),\n      commonTemplatesList: [],\n      selectedShape: null,\n      selectedCommonTemplate: null,\n      deleteAllowed: true\n    };\n    this.editors = createEditors();\n    this.handleEditorSelection = this.handleEditorSelection.bind(this);\n    this.resetEditor = this.resetEditor.bind(this);\n    this.updateEditor = this.updateEditor.bind(this);\n  }\n\n  componentDidMount() {\n    this.resetEditor(this.editors);\n    this.fetchCommonTemplates();\n  }\n\n  componentDidUpdate(prevProps) {\n    const { showModal, molfile } = this.props;\n    if (prevProps.showModal !== showModal || prevProps.molfile !== molfile) {\n      this.setState({ showModal, molfile });\n    }\n  }\n\n  handleEditorSelection(e) {\n    this.setState((prevState) => ({ ...prevState, editor: this.editors[e.value] }));\n  }\n\n  handleCancelBtn() {\n    const { onCancel } = this.props;\n    this.hideModal();\n    if (onCancel) { onCancel(); }\n  }\n\n  handleSaveBtn() {\n    const { editor } = this.state;\n    const structure = editor.structureDef;\n    if (editor.id === 'marvinjs') {\n      structure.editor.sketcherInstance.exportStructure('mol').then((mMol) => {\n        const editorImg = new structure.editor.ImageExporter({ imageType: 'image/svg' });\n        editorImg.render(mMol).then((svg) => {\n          this.setState({ showModal: false, showWarning: this.props.hasChildren || this.props.hasParent }, () => { if (this.props.onSave) { this.props.onSave(mMol, svg, null, editor.id); } });\n        }, (error) => { alert(`MarvinJS image generated fail: ${error}`); });\n      }, (error) => { alert(`MarvinJS molfile generated fail: ${error}`); });\n    } else if (editor.id === 'ketcher2') {\n      structure.editor.getMolfile().then((molfile) => {\n        structure.editor.generateImage(molfile, { outputFormat: 'svg' }).then((imgfile) => {\n          imgfile.text().then((text) => {\n            this.setState({ showModal: false, showWarning: this.props.hasChildren || this.props.hasParent }, () => { if (this.props.onSave) { this.props.onSave(molfile, text, { smiles: '' }, editor.id); } });\n          });\n        });\n      });\n    } else {\n      try {\n        const { molfile, info } = structure;\n        if (!molfile) throw new Error('No molfile');\n        structure.fetchSVG().then((svg) => {\n          this.setState({\n            showModal: false,\n            showWarning: this.props.hasChildren || this.props.hasParent\n          }, () => { if (this.props.onSave) { this.props.onSave(molfile, svg, info, editor.id); } });\n        });\n      } catch (e) {\n        notifyError(`The drawing is not supported! ${e}`);\n      }\n    }\n  }\n\n  initializeEditor() {\n    const { editor, molfile } = this.state;\n    if (editor) { editor.structureDef.molfile = molfile; }\n  }\n\n  resetEditor(_editors) {\n    const kks = Object.keys(_editors);\n    const { editor } = this.state;\n    if (!kks.find((e) => e === editor.id)) {\n      this.setState({\n        editor: new StructureEditor({ ...EditorAttrs.ketcher, id: 'ketcher' }),\n      });\n    }\n  }\n\n  updateEditor(_editor) {\n    this.setState({ editor: _editor });\n  }\n\n  hideModal() {\n    const { hasChildren, hasParent } = this.props;\n    this.setState({\n      showModal: false,\n      showWarning: hasChildren || hasParent\n    });\n  }\n\n  hideWarning() {\n    this.setState({ showWarning: false });\n  }\n\n  async fetchCommonTemplates() {\n    const list = await CommonTemplatesFetcher.fetchCommonTemplates();\n    this.setState({ commonTemplatesList: list?.templates });\n  }\n\n  render() {\n    const { cancelBtnText, submitBtnText, onSave } = this.props;\n    const handleSaveBtn = !onSave ? null : this.handleSaveBtn.bind(this);\n\n    const submitAddons = this.props.submitAddons ? this.props.submitAddons : '';\n    const {\n      editor, showWarning, molfile, selectedCommonTemplate, commonTemplatesList, selectedShape, showModal\n    } = this.state;\n    const iframeHeight = showWarning ? '0px' : '630px';\n    const iframeStyle = showWarning ? { border: 'none' } : {};\n    const buttonToolStyle = showWarning ? { marginTop: '20px', display: 'none' } : { marginTop: '20px' };\n\n    let useEditor = (\n      <div>\n        <iframe\n          id={editor.id}\n          src={editor.src}\n          title={`${editor.label}`}\n          height={iframeHeight}\n          width=\"100%\"\n          style={iframeStyle}\n        />\n      </div>\n    );\n    useEditor = !showWarning && this.editors[editor.id] && (\n      <Editor\n        type={editor.id}\n        editor={this.editors[editor.id]}\n        molfile={molfile}\n        iframeHeight={iframeHeight}\n        iframeStyle={iframeStyle}\n        fnCb={this.updateEditor}\n      />\n    );\n    const editorOptions = Object.keys(this.editors).map((e) => ({\n      value: e,\n      name: this.editors[e].label,\n      label: this.editors[e].label,\n    }));\n\n    return (\n      <div>\n        <Modal\n          dialogClassName={this.state.showWarning ? '' : 'structure-editor-modal'}\n          animation\n          show={showModal}\n          onLoad={this.initializeEditor.bind(this)}\n          onHide={this.handleCancelBtn.bind(this)}\n        >\n          <Modal.Header closeButton>\n            <div style={{ display: 'flex' }}>\n              <div style={{ flex: 3 }}>\n                <EditorList\n                  value={editor.id}\n                  fnChange={this.handleEditorSelection}\n                  options={editorOptions}\n                />\n              </div>\n              {\n                editor.id === 'ketcher2'\n                && (\n                  <div style={{ flex: 1, margin: '0 10px' }}>\n                    <CommonTemplatesList\n                      options={commonTemplatesList}\n                      value={selectedCommonTemplate?.name}\n                      selectedItem={selectedCommonTemplate}\n                      onClickHandle={(value) => {\n                        this.setState({ selectedCommonTemplate: value });\n                        copyContentToClipboard(value?.molfile);\n                      }}\n                    />\n                  </div>\n                )\n              }\n            </div >\n          </Modal.Header >\n          <Modal.Body>\n            <WarningBox\n              handleCancelBtn={this.handleCancelBtn.bind(this)}\n              hideWarning={this.hideWarning.bind(this)}\n              show={!!showWarning}\n            />\n            {useEditor}\n            <div style={buttonToolStyle}>\n              <ButtonToolbar>\n                <Button bsStyle=\"warning\" onClick={this.handleCancelBtn.bind(this)}>\n                  {cancelBtnText}\n                </Button>\n                {!handleSaveBtn ? null : (\n                  <Button bsStyle=\"primary\" onClick={handleSaveBtn} style={{ marginRight: '20px' }}>\n                    {submitBtnText}\n                  </Button>\n                )}\n                {!handleSaveBtn ? null : submitAddons}\n              </ButtonToolbar>\n            </div>\n          </Modal.Body>\n        </Modal >\n      </div >\n    );\n  }\n}\n\nStructureEditorModal.propTypes = {\n  molfile: PropTypes.string,\n  showModal: PropTypes.bool,\n  hasChildren: PropTypes.bool,\n  hasParent: PropTypes.bool,\n  onCancel: PropTypes.func,\n  onSave: PropTypes.func,\n  submitBtnText: PropTypes.string,\n  cancelBtnText: PropTypes.string,\n};\n\nStructureEditorModal.defaultProps = {\n  molfile: '\\n  noname\\n\\n  0  0  0  0  0  0  0  0  0  0999 V2000\\nM  END\\n',\n  showModal: false,\n  hasChildren: false,\n  hasParent: false,\n  onCancel: () => { },\n  onSave: () => { },\n  submitBtnText: 'Save',\n  cancelBtnText: 'Cancel',\n};","/* eslint-disable react/forbid-prop-types */\nimport React, { useEffect, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n  Button, Panel, Row, Col\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\n\nconst DEFAULT_EDITOR = 'ketcher';\n\nfunction UserSetting() {\n  const [editors, setEditors] = useState([]);\n  const [editor, setEditor] = useState({ default: DEFAULT_EDITOR, selected: DEFAULT_EDITOR, changing: false });\n\n  const initProfile = () => {\n    UsersFetcher.fetchProfile().then((result) => {\n      setEditor((prev) => ({ ...prev, default: (result?.data?.default_structure_editor || DEFAULT_EDITOR) }));\n    }).catch((error) => {\n      console.log(error);\n      setEditor((prev) => ({ ...prev, default: DEFAULT_EDITOR }));\n    });\n  };\n\n  const initEditor = () => {\n    UsersFetcher.listEditors().then((result) => {\n      setEditors(result.matrices || []);\n    }).catch((error) => {\n      console.log(error);\n      setEditors([]);\n    });\n  };\n\n  useEffect(() => {\n    initProfile();\n    initEditor();\n  }, []);\n\n  const updateProfile = () => {\n    setEditor((prev) => ({ ...prev, changing: true }));\n    UsersFetcher.updateUserProfile({ data: { default_structure_editor: editor.selected } })\n      .then((result) => {\n        setEditor((prev) => ({ ...prev, default: result.data.default_structure_editor, changing: false }));\n      }).catch((error) => {\n        console.log(error);\n      });\n  };\n\n  const onChange = (e) => {\n    setEditor((prev) => ({ ...prev, selected: e.value }));\n  };\n\n  let options = editors\n    .map((e) => ({ value: e.configs.editor, label: `${e.label} (${e.configs.editor})` }));\n  options = [{ value: 'ketcher', label: 'Ketcher (ketcher)' }].concat(options);\n\n  return (\n    <Panel>\n      <Panel.Heading><Panel.Title>Structure Editor</Panel.Title></Panel.Heading>\n      <Panel.Body>\n        <Row className=\"profile-row\">\n          <Col sm={2}><b>Current default is</b></Col>\n          <Col sm={2}>{editor?.default}</Col>\n          <Col sm={2}><b>Editor Selection</b></Col>\n          <Col sm={2}>\n            <Select\n              name=\"editor selection\"\n              clearable={false}\n              options={options}\n              onChange={onChange}\n              value={editor?.selected}\n            />\n          </Col>\n          <Col sm={4}>\n            <Button bsStyle=\"primary\" onClick={() => updateProfile()}>\n              {\n                editor.changing ? <i className=\"fa fa-spinner fa-pulse\" aria-hidden=\"true\" /> : null\n              }\n              Update user profiles\n            </Button>\n          </Col>\n        </Row>\n        <br />\n      </Panel.Body>\n    </Panel>\n  );\n}\n\nexport default UserSetting;\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const domElement = document.getElementById('StructureEditorUserSetting');\n  if (domElement) { ReactDOM.render(<UserSetting />, domElement); }\n});\n","import { isNmrPass, isDatasetPass } from 'src/repoHome/RepoCommon';\n\nconst applyPublish = (el) => {\n  const ext = [];\n  el.analysisArray().forEach((ana) => {\n    const a = ana;\n    if (ana.extended_metadata &&\n      (((ana.extended_metadata.kind || '') !== '') && // fail if analysis-type is empty\n        ((ana.extended_metadata.status || '') === 'Confirmed') && // && // fail if status is not set to Confirmed\n        (isNmrPass(ana, el)) && // fail if NMR check fail\n        (isDatasetPass(ana))\n      )) {\n      if (typeof ana.extended_metadata.publish === 'undefined') {\n        a.extended_metadata.publish = true;\n      }\n    }\n    ext.push(a);\n  });\n  return ext;\n};\n\nconst defaultAnalysisPublish = (el) => {\n  const element = el;\n  switch (el.type) {\n    case 'sample': {\n      const ext = applyPublish(element);\n      if (ext.length > 0) {\n        const analyses = element.container.children.find(c => (c && c.container_type === 'analyses'));\n        analyses.children = ext;\n      }\n      break;\n    }\n    case 'reaction': {\n      // reset analysis.publish of products\n      if (typeof el.products !== 'undefined' && el.products.length > 0) {\n        element.products.forEach((p) => {\n          const prodAna = applyPublish(p);\n          if (prodAna.length > 0) {\n            const analyses = p.container.children.find(c => (c && c.container_type === 'analyses'));\n            analyses.children = prodAna;\n          }\n        });\n      }\n      break;\n    }\n    default:\n      break;\n  }\n  return element;\n};\n\nexport default defaultAnalysisPublish;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from 'react-bootstrap';\nimport { MolViewer } from 'react-molviewer';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport MolViewerSet from 'src/components/viewer/MolViewerSet';\n\nfunction MolViewerModal(props) {\n  const { fileContent, handleModalOpen, viewType, show, isPublic } = props;\n  const [newContent] = useState(fileContent);\n  const config =\n    UIStore.getState().moleculeViewer || PublicStore.getState().moleculeViewer;\n  if (!config?.featureEnabled || !fileContent) return <span />;\n\n  const src = isPublic\n    ? '/api/v1/public/represent/structure'\n    : '/api/v1/converter/structure';\n\n  if (show) {\n    const viewer = (\n      <MolViewer\n        molContent={newContent}\n        viewType={viewType}\n        fnInit={() => LoadingActions.start()}\n        fnCb={() => LoadingActions.stop()}\n        src={src}\n      />\n    );\n    return (\n      <Modal\n        animation\n        dialogClassName=\"structure-viewer-modal\"\n        show={show}\n        onHide={handleModalOpen}\n      >\n        <Modal.Header closeButton>\n          <Modal.Title style={{ fontSize: '12pt' }}>\n            {MolViewerSet.INFO}\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <div style={{ width: '100%', height: 'calc(100vh - 260px)' }}>\n            {viewer}\n          </div>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n  return <span />;\n}\n\nMolViewerModal.propTypes = {\n  fileContent: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n    .isRequired,\n  handleModalOpen: PropTypes.func.isRequired,\n  show: PropTypes.bool.isRequired,\n  viewType: PropTypes.string.isRequired,\n  isPublic: PropTypes.bool.isRequired, // for REPO\n};\n\nexport default MolViewerModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport MolViewerModal from 'src/components/viewer/MolViewerModal';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\n\nexport default class MolViewerBtn extends Component {\n  constructor(props) {\n    super(props);\n    this.state = { show: false };\n    this.handleModalOpen = this.handleModalOpen.bind(this);\n  }\n\n  handleModalOpen(e) {\n    if (e) {\n      e.stopPropagation();\n    }\n    const { show } = this.state;\n    this.setState({ show: !show });\n  }\n\n  render() {\n    const { disabled, fileContent, isPublic, viewType, className } = this.props;\n    const config =\n      UIStore.getState().moleculeViewer ||\n      PublicStore.getState().moleculeViewer;\n\n    const { show } = this.state;\n    if (isPublic && !config?.featureEnabled) return null;\n    if (!fileContent) return null;\n\n    return (\n      <>\n        <OverlayTrigger\n          placement=\"top\"\n          overlay={(\n            <Tooltip id=\"tooltip_molviewer\" style={{ pointerEvents: 'none' }}>\n              Click to see structure in Viewer\n            </Tooltip>\n          )}\n        >\n          <Button\n            className={className}\n            bsSize=\"xsmall\"\n            bsStyle=\"info\"\n            disabled={disabled}\n            onClick={(e) => this.handleModalOpen(e)}\n          >\n            <i className=\"fa fa-cube\" aria-hidden=\"true\" />\n            {' '}\n            View in 3D\n          </Button>\n        </OverlayTrigger>\n        {show ? (\n          <MolViewerModal\n            fileContent={fileContent}\n            handleModalOpen={(e) => this.handleModalOpen(e)}\n            isPublic={isPublic}\n            show={show}\n            viewType={viewType}\n          />\n        ) : null}\n      </>\n    );\n  }\n}\n\nMolViewerBtn.propTypes = {\n  disabled: PropTypes.bool.isRequired,\n  fileContent: PropTypes.string.isRequired,\n  isPublic: PropTypes.bool.isRequired,\n  viewType: PropTypes.string.isRequired,\n  className: PropTypes.string,\n};\n\nMolViewerBtn.defaultProps = { className: 'button-right' };\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Col, Modal, PanelGroup, Panel, Nav, NavItem\n} from 'react-bootstrap';\nimport { MolViewer } from 'react-molviewer';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport MolViewerSet from 'src/components/viewer/MolViewerSet';\n\nfunction MolViewerListModal(props) {\n  const config =\n    UIStore.getState().moleculeViewer || PublicStore.getState().moleculeViewer;\n  if (!config?.featureEnabled) return <span />;\n\n  const {\n    datasetContainer, handleModalOpen, isPublic, show\n  } = props;\n  const [molContent, setMolContent] = useState(null);\n  const [activeKey, setActiveKey] = useState(1);\n  const [selected, setSelected] = useState(() => {\n    const ds = datasetContainer[0];\n    const file = (ds?.attachments?.length > 0 && ds?.attachments[0]) || {};\n    return { ...file, dsName: ds.name };\n  });\n  const [modalBody, setModalBody] = useState(null);\n\n  useEffect(() => {\n    if (selected?.id) {\n      const url = isPublic\n        ? `${window.location.origin}/api/v1/public/download/attachment?id=${selected?.id}`\n        : `${window.location.origin}/api/v1/attachments/${selected?.id}`;\n      setMolContent(url);\n    }\n  }, [selected?.id, isPublic]);\n\n  useEffect(() => {\n    if (selected?.id && molContent) {\n      const viewer = (\n        <MolViewer\n          molContent={molContent}\n          viewType={`file_${selected?.id}`}\n          fnInit={() => LoadingActions.start()}\n          fnCb={() => LoadingActions.stop()}\n        />\n      );\n      setModalBody(\n        <div style={{ width: '100%', height: 'calc(100vh - 260px)' }}>\n          {viewer}\n        </div>\n      );\n    }\n  }, [molContent]);\n\n  const handleFile = (e, attachment, ds) => {\n    e.stopPropagation();\n    setSelected({ ...attachment, dsName: ds.name });\n  };\n\n  const handleSelect = (e, key) => {\n    e.stopPropagation();\n    setActiveKey(key);\n  };\n\n  const list = () => {\n    const defaultActiveKey = datasetContainer[0].id;\n    return (\n      <PanelGroup\n        accordion\n        id=\"accordion-controlled-example\"\n        defaultActiveKey={defaultActiveKey}\n        style={{\n          width: '100%',\n          height: 'calc(100vh - 200px)',\n          overflow: 'auto',\n        }}\n      >\n        {datasetContainer.map((ds) => {\n          const { attachments } = ds;\n          return (\n            <Panel\n              key={ds.id}\n              eventKey={ds.id}\n              onClick={(e) => handleSelect(e, ds.id)}\n            >\n              <Panel.Heading>\n                <Panel.Title toggle>{`Dataset: ${ds.name}`}</Panel.Title>\n              </Panel.Heading>\n              <Panel.Body style={{ padding: '0px' }} collapsible>\n                <Nav bsStyle=\"pills\" stacked activeKey={activeKey}>\n                  {attachments.map((attachment) => (\n                    <NavItem\n                      key={attachment.id}\n                      eventKey={attachment.id}\n                      active={attachment.id === selected?.id}\n                      onClick={(e) => handleFile(e, attachment, ds)}\n                    >\n                      <i className=\"fa fa-file\" aria-hidden=\"true\" />\n                      &nbsp;\n                      {attachment.filename}\n                    </NavItem>\n                  ))}\n                </Nav>\n              </Panel.Body>\n            </Panel>\n          );\n        })}\n      </PanelGroup>\n    );\n  };\n\n  if (show) {\n    return (\n      <Modal\n        backdrop=\"static\"\n        animation\n        dialogClassName=\"file-viewer-modal\"\n        show={show}\n        onHide={handleModalOpen}\n      >\n        <Modal.Header onClick={(e) => e.stopPropagation()} closeButton>\n          <Modal.Title>\n            {`Dataset: ${selected.dsName} / File: ${selected?.filename}`}\n            {MolViewerSet.INFO}\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body onClick={(e) => e.stopPropagation()}>\n          <Col md={2} sm={2} lg={2}>\n            {list()}\n          </Col>\n          <Col md={10} sm={10} lg={10}>\n            {modalBody}\n          </Col>\n        </Modal.Body>\n      </Modal>\n    );\n  }\n  return <span />;\n}\n\nMolViewerListModal.propTypes = {\n  datasetContainer: PropTypes.array.isRequired,\n  handleModalOpen: PropTypes.func.isRequired,\n  isPublic: PropTypes.bool.isRequired,\n  show: PropTypes.bool.isRequired,\n};\n\nexport default MolViewerListModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport { filter } from 'lodash';\nimport MolViewerListModal from 'src/components/viewer/MolViewerListModal';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\n\nexport default class MolViewerListBtn extends Component {\n  constructor(props) {\n    super(props);\n    this.state = { openModal: false };\n    this.handleModalOpen = this.handleModalOpen.bind(this);\n    this.renderBtn = this.renderBtn.bind(this);\n  }\n\n  handleModalOpen(e) {\n    if (e) {\n      e.stopPropagation();\n    }\n    const { openModal } = this.state;\n    this.setState({ openModal: !openModal });\n  }\n\n  renderBtn(disabled) {\n    const { disabled: propsDisabled } = this.props;\n    const btnStyle = disabled ? 'warning' : 'info';\n    const tipDesc = disabled ? ' (No supported format)' : '';\n    const onClick = disabled\n      ? (e) => e.stopPropagation()\n      : (e) => this.handleModalOpen(e);\n\n    return (\n      <OverlayTrigger\n        placement=\"top\"\n        delayShow={500}\n        overlay={(\n          <Tooltip id=\"_fast_create_btn\">\n            Click to see structure in Viewer\n            {tipDesc}\n          </Tooltip>\n        )}\n      >\n        <Button\n          bsSize=\"xs\"\n          bsStyle={btnStyle}\n          onClick={onClick}\n          disabled={disabled || propsDisabled}\n        >\n          <i className=\"fa fa-cube\" aria-hidden=\"true\" />\n          {' '}\n          View in 3D\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n\n  render() {\n    const { container, el, isPublic } = this.props;\n    const { openModal } = this.state;\n    const config =\n      UIStore.getState().moleculeViewer ||\n      PublicStore.getState().moleculeViewer;\n    if (!el) return null;\n    if (isPublic && !config?.featureEnabled) return null;\n\n    if (container?.children?.length < 1) {\n      return this.renderBtn(true);\n    }\n\n    let datasetContainer = ArrayUtils.sortArrByIndex(\n      filter(\n        container.children,\n        (o) => o.container_type === 'dataset' && o.attachments.length > 0\n      )\n    );\n    if (datasetContainer?.length < 1) {\n      return this.renderBtn(true);\n    }\n\n    datasetContainer = datasetContainer.map((dc) => {\n      const ds = { ...dc };\n      const { attachments } = ds;\n      ds.attachments = attachments.filter((attachment) => ['cif', 'mmcif', 'mol', 'sdf', 'pdb', 'mol2'].includes(\n        attachment.filename?.match(/\\.([^.]+)$/)?.[1]?.toLowerCase()\n      ));\n      if (ds.attachments.length > 0) return ds;\n      return null;\n    });\n\n    datasetContainer = datasetContainer.filter((dc) => dc !== null);\n    if (datasetContainer?.length < 1) {\n      return this.renderBtn(true);\n    }\n    return (\n      <>\n        {this.renderBtn(false)}\n        {openModal ? (\n          <MolViewerListModal\n            handleModalOpen={(e) => this.handleModalOpen(e)}\n            show={openModal}\n            title={el.short_label}\n            datasetContainer={datasetContainer}\n            isPublic={isPublic}\n          />\n        ) : null}\n      </>\n    );\n  }\n}\n\nMolViewerListBtn.propTypes = {\n  container: PropTypes.object.isRequired,\n  disabled: PropTypes.bool.isRequired,\n  el: PropTypes.object.isRequired,\n  isPublic: PropTypes.bool.isRequired,\n};\n","import React from 'react';\n\nexport default Object.freeze({\n  PK: 'moleculeViewer',\n  JSMOL: 'jsmol',\n  NGL: 'ngl',\n  INFO: (\n    <>\n      <div>\n        <strong>Zoom In / Out: </strong>\n        Use mouse wheel or Shift + Left-click and drag Vertically\n        <strong> Rotate: </strong>\n        Click and hold the left mouse button, then drag to rotate\n      </div>\n      <div>\n        <strong>More Functions: </strong>\n        Right-click on the molecule view to open the JSmol menu and access more\n        functions, such as saving as PNG file.\n      </div>\n    </>\n  ),\n});\n","const CommentManagementServices = {\n  COMMENT_BY_ID: (commentId) => `/api/v1/comments/${commentId}.json`,\n  COMMENT_BY_COMMENTABLE: (commentableId, commentableType) => `/api/v1/comments?commentable_id=${commentableId}&commentable_type=${commentableType}`,\n  CREATE_COMMENT: '/api/v1/comments',\n  UPDATE_COMMENT: (comment) => `/api/v1/comments/${comment.id}`,\n  DELETE_COMMENT: (comment) => `/api/v1/comments/${comment.id}`,\n};\n\n// path of the chemspectra data type file\nconst SPECTRA_DATA_TYPE = '/data_type.json';\n\nconst ThirdPartyAppServices = {\n  TPA_ENDPOINT: '/api/v1/third_party_apps',\n};\n\nexport {\n  CommentManagementServices,\n  SPECTRA_DATA_TYPE,\n  ThirdPartyAppServices,\n};\n","import 'whatwg-fetch';\n\nexport default class AdminDeviceFetcher {\n  static fetchDevices() {\n    return fetch(\n      `/api/v1/admin_devices`, \n      this._httpOptions()\n    ).then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static fetchDevicesByName(name, limit = 5) {\n    return fetch(\n      `/api/v1/admin_devices/byname?${new URLSearchParams({\n        name,\n        limit,\n      })}`,\n      this._httpOptions()\n    ).then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static fetchDeviceById(deviceId) {\n    return fetch(\n      `/api/v1/admin_devices/${deviceId}`,\n      { ...this._httpOptions() }\n    ).then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static createDevice(device) {\n    return fetch(\n      `/api/v1/admin_devices`,\n      {\n        ...this._httpOptions('POST'),\n        body: JSON.stringify(device),\n      }\n    ).then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static updateDevice(device) {\n    return fetch(\n      `/api/v1/admin_devices/${device.id}`,\n      {\n        ...this._httpOptions('PUT'),\n        body: JSON.stringify(device),\n      }\n    ).then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static deleteDevice(deviceId) {\n    return fetch(\n      `/api/v1/admin_devices/${deviceId}`,\n      { ...this._httpOptions('DELETE') }\n    ).then(response => response.json())\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static deleteRelation(userId, deviceId) {\n    return fetch(\n      `/api/v1/admin_devices/delete_relation/${userId}`,\n      {\n        ...this._httpOptions('PUT'),\n        body: JSON.stringify({\n          id: userId,\n          device_id: deviceId\n        }),\n      }\n    ).then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static testSFTP(device) {\n    return fetch('/api/v1/admin_devices/test_sftp',\n      {\n        ...this._httpOptions('POST'),\n        body: JSON.stringify(device),\n      },\n    ).then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static _httpOptions(method = 'GET') {\n    return {\n      credentials: 'same-origin',\n      method: method,\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    };\n  }\n}\n","/* eslint-disable camelcase */\nimport 'whatwg-fetch';\nimport { decamelizeKeys } from 'humps';\n\nimport Attachment from 'src/models/Attachment';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport SparkMD5 from 'spark-md5';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nconst fileFromAttachment = (attachment, containerId) => {\n  const { file } = attachment;\n  file.id = attachment.id;\n  file.attachable_id = containerId;\n  file.attachable_type = 'Container';\n  return file;\n};\n\nexport default class AttachmentFetcher {\n  static fetchImageAttachment(params) {\n    const url = params.annotated\n      ? `/api/v1/attachments/${params.id}/annotated_image`\n      : `/api/v1/attachments/image/${params.id}`;\n\n    return fetch(url, {\n      credentials: 'same-origin',\n      method: 'GET',\n    })\n      .then((response) => response.blob())\n      .then((blob) => ({ type: blob.type, data: URL.createObjectURL(blob) }))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchImageAttachmentByIdentifier(params) {\n    const urlParams = new URLSearchParams({\n      identifier: params.identifier,\n      annotated: params.annotated,\n    });\n\n    return fetch(`/api/v1/attachments/image/-1?${urlParams}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n    })\n      .then((response) => response.blob())\n      .then((blob) => ({ type: blob.type, data: URL.createObjectURL(blob) }))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchThumbnail(params) {\n    const promise = fetch(`/api/v1/attachments/thumbnail/${params.id}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchThumbnails(ids) {\n    const promise = fetch('/api/v1/attachments/thumbnails/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ ids }),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchFiles(ids) {\n    const promise = fetch('/api/v1/attachments/files/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ ids }),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchJcamp(target) {\n    const { file, mass, mol } = target;\n    const data = new FormData();\n    data.append('file', file);\n    data.append('molfile', mol);\n    data.append('mass', mass);\n\n    const promise = fetch('/api/v1/chemspectra/file/convert', {\n      credentials: 'same-origin',\n      method: 'POST',\n      body: data,\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static getFileListfrom(container) {\n    if (container == null) return [];\n    const allFiles = [];\n    this.filterAllAttachments(allFiles, container.children);\n    return allFiles;\n  }\n\n  static filterAllAttachments(files, containers) {\n    containers.forEach((container) => {\n      const tmpArray = (container.attachments || [])\n        .filter((a) => a.is_new && !a.is_deleted)\n        .map((a) => fileFromAttachment(a, container.id));\n      files.push(...tmpArray);\n\n      if (container.children && container.children.length > 0) {\n        this.filterAllAttachments(files, container.children);\n      }\n    });\n  }\n\n  static updateAttachables(files, attachableType, attachableId, dels) {\n    const data = new FormData();\n    files.forEach((file) => {\n      data.append('attfilesIdentifier[]', file.id);\n      data.append('files[]', file.file, file.name);\n    });\n    data.append('attachable_type', attachableType);\n    data.append('attachable_id', attachableId);\n\n    dels.forEach((f) => {\n      data.append('del_files[]', f.id);\n    });\n    return () => fetch('/api/v1/attachable/update_attachments_attachable', {\n      credentials: 'same-origin',\n      method: 'post',\n      body: data,\n    }).then((response) => {\n      if (response.ok === false) {\n        let msg = 'Files uploading failed: ';\n        if (response.status === 413) {\n          msg += 'File size limit exceeded.';\n        } else {\n          msg += response.statusText;\n        }\n        NotificationActions.add({\n          message: msg,\n          level: 'error',\n          position: 'tc',\n        });\n      }\n    });\n  }\n\n  static uploadToInbox(attachments) {\n    const data = new FormData();\n    const files = attachments\n      .filter((f) => f.is_new)\n      .map((f) => fileFromAttachment(f, null));\n    files.forEach((file) => {\n      data.append(file.id || file.name, file);\n    });\n    return () => fetch('/api/v1/attachments/upload_to_inbox', {\n      credentials: 'same-origin',\n      method: 'post',\n      body: data,\n    }).then((response) => {\n      if (response.ok === false) {\n        let msg = 'Files uploading to Inbox failed: ';\n        if (response.status === 413) {\n          msg += 'File size limit exceeded.';\n        } else {\n          msg += response.statusText;\n        }\n        NotificationActions.add({\n          message: msg,\n          level: 'error',\n        });\n      }\n    });\n  }\n\n  static uploadFiles(files) {\n    const data = new FormData();\n    files.forEach((file) => {\n      data.append(file.id || file.name, file);\n    });\n    return () => fetch('/api/v1/attachments/upload_dataset_attachments', {\n      credentials: 'same-origin',\n      contentType: 'application/json',\n      method: 'post',\n      body: data,\n    })\n      .then((response) => response.json())\n      .then((json) => {\n        for (let i = 0; i < json.error_messages.length; i += 1) {\n          NotificationActions.add({\n            message: json.error_messages[i],\n            level: 'error',\n          });\n        }\n      });\n  }\n\n  static uploadCompleted(filename, key, checksum) {\n    return () => fetch('/api/v1/attachments/upload_chunk_complete', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        filename,\n        key,\n        checksum,\n      }),\n    })\n      .then((response) => response.json())\n      .then((response) => {\n        LoadingActions.stopLoadingWithProgress(filename);\n        if (response.ok === false) {\n          let msg = 'Files uploading failed: ';\n          if (response.status === 413) {\n            msg += 'File size limit exceeded.';\n          } else {\n            msg += response.statusText;\n          }\n\n          NotificationActions.add({\n            message: msg,\n            level: 'error',\n          });\n        } else if (response.error_messages) {\n          for (let i = 0; i < response.error_messages.length; i += 1) {\n            NotificationActions.add({\n              message: response.error_messages[i],\n              level: 'error',\n            });\n          }\n        }\n      });\n  }\n\n  static uploadChunk(chunk, counter, key, progress, filename) {\n    const body = { file: chunk, counter, key };\n    const formData = new FormData();\n    Object.keys(body).forEach((name) => {\n      formData.append(name, body[name]);\n    });\n    return () => fetch('/api/v1/attachments/upload_chunk', {\n      credentials: 'same-origin',\n      method: 'post',\n      body: formData,\n    })\n      .then((response) => response.json())\n      .then((response) => {\n        LoadingActions.updateLoadingProgress(filename, progress);\n        if (response.ok === false) {\n          const msg = `Chunk uploading failed: ${response.statusText}`;\n          NotificationActions.add({\n            message: msg,\n            level: 'error',\n          });\n        }\n      });\n  }\n\n  static async uploadFile(file) {\n    LoadingActions.startLoadingWithProgress(file.name);\n    const chunkSize = 100 * 1024 * 1024;\n    const chunksCount = file.size % chunkSize === 0\n      ? file.size / chunkSize\n      : Math.floor(file.size / chunkSize) + 1;\n    let beginingOfTheChunk = 0;\n    let endOfTheChunk = chunkSize;\n    const tasks = [];\n    const key = file.id;\n    const spark = new SparkMD5.ArrayBuffer();\n    const totalStep = chunksCount + 1;\n    for (let counter = 1; counter <= chunksCount; counter += 1) {\n      const chunk = file.slice(beginingOfTheChunk, endOfTheChunk);\n      tasks.push(\n        this.uploadChunk(chunk, counter, key, counter / totalStep, file.name)()\n      );\n      spark.append(await this.getFileContent(chunk));\n      beginingOfTheChunk = endOfTheChunk;\n      endOfTheChunk += chunkSize;\n    }\n\n    const checksum = spark.end();\n    return Promise.all(tasks).then(() => this.uploadCompleted(file.name, key, checksum)());\n  }\n\n  static getFileContent(file) {\n    const promise = new Promise((resolve) => {\n      const reader = new FileReader();\n      reader.onload = function (event) {\n        const buffer = new Uint8Array(event.target.result);\n        resolve(buffer);\n      };\n\n      reader.readAsArrayBuffer(file);\n    });\n\n    return promise;\n  }\n\n  static deleteAttachment(params) {\n    const promise = fetch(`/api/v1/attachments/${params.id}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n    })\n      .then((response) => response.json())\n      .then((json) => new Attachment(json.attachment))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static bulkDeleteAttachments(attachmentIdsToDelete) {\n    const promise = fetch('/api/v1/attachments/bulk_delete', {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ ids: attachmentIdsToDelete }),\n    })\n      .then((response) => response.json())\n      .then((json) => new Attachment(json.attachment))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static deleteContainerLink(params) {\n    const promise = fetch(`/api/v1/attachments/link/${params.id}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n    })\n      .then((response) => response.json())\n      .then((json) => new Attachment(json.attachment))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static downloadDataset(id) {\n    let file_name = 'dataset.xlsx';\n    return fetch(`/api/v1/export_ds/dataset/${id}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n    })\n      .then((response) => {\n        const disposition = response.headers.get('Content-Disposition');\n        if (disposition && disposition.indexOf('attachment') !== -1) {\n          const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n          const matches = filenameRegex.exec(disposition);\n          if (matches != null && matches[1]) {\n            file_name = matches[1].replace(/['\"]/g, '');\n          }\n        }\n        return response.blob();\n      })\n      .then((blob) => {\n        const a = document.createElement('a');\n        a.style = 'display: none';\n        document.body.appendChild(a);\n        const url = window.URL.createObjectURL(blob);\n        a.href = url;\n        a.download = file_name;\n        a.click();\n        window.URL.revokeObjectURL(url);\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static downloadZip(id) {\n    let file_name = 'dataset.zip';\n    return fetch(`/api/v1/attachments/zip/${id}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n    })\n      .then((response) => {\n        const disposition = response.headers.get('Content-Disposition');\n        if (disposition && disposition.indexOf('attachment') !== -1) {\n          const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n          const matches = filenameRegex.exec(disposition);\n          if (matches != null && matches[1]) {\n            file_name = matches[1].replace(/['\"]/g, '');\n          }\n        }\n        return response.blob();\n      })\n      .then((blob) => {\n        const a = document.createElement('a');\n        a.style = 'display: none';\n        document.body.appendChild(a);\n        const url = window.URL.createObjectURL(blob);\n        a.href = url;\n        a.download = file_name;\n        a.click();\n        window.URL.revokeObjectURL(url);\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static downloadZipBySample(sampleId) {\n    let fileName = 'dataset.zip';\n    return fetch(`/api/v1/attachments/sample_analyses/${sampleId}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n    })\n      .then((response) => {\n        const disposition = response.headers.get('Content-Disposition');\n        if (disposition != null) {\n          if (disposition && disposition.indexOf('attachment') !== -1) {\n            const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n            const matches = filenameRegex.exec(disposition);\n            if (matches != null && matches[1]) {\n              fileName = matches[1].replace(/['\"]/g, '');\n            }\n          }\n\n          return response.blob();\n        }\n        NotificationActions.notifyExImportStatus('Analysis download', 204);\n        return null;\n      })\n      .then((blob) => {\n        if (blob && blob.type != null) {\n          const a = document.createElement('a');\n          a.style = 'display: none';\n          document.body.appendChild(a);\n          const url = window.URL.createObjectURL(blob);\n          a.href = url;\n          a.download = fileName;\n          a.click();\n          window.URL.revokeObjectURL(url);\n        }\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static saveSpectrum(\n    attId,\n    peaksStr,\n    shift,\n    scan,\n    thres,\n    integration,\n    multiplicity,\n    predict,\n    keepPred,\n    waveLengthStr,\n    cyclicvolta,\n    curveIdx,\n    simulatenmr,\n    previousSpcInfos,\n    isSaveCombined,\n    axesUnitsStr,\n    detector,\n    dscMetaData\n  ) {\n    const params = {\n      attachmentId: attId,\n      peaksStr,\n      shiftSelectX: shift.peak.x,\n      shiftRefName: shift.ref.name,\n      shiftRefValue: shift.ref.value,\n      scan,\n      thres,\n      integration,\n      multiplicity,\n      predict,\n      keepPred,\n      waveLength: waveLengthStr,\n      cyclicvolta,\n      curveIdx,\n      simulatenmr,\n      axesUnits: axesUnitsStr,\n      detector,\n      dscMetaData\n    };\n\n    const promise = fetch('/api/v1/attachments/save_spectrum/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(decamelizeKeys(params)),\n    })\n      .then((response) => response.json())\n      .then((json) => {\n        if (!isSaveCombined) {\n          return json;\n        }\n        const oldSpcInfos = [...previousSpcInfos].filter((spc) => spc.idx !== attId);\n        let jcampIds = oldSpcInfos.map((spc) => (spc.idx));\n        const fetchedFilesIdxs = json.files.map((file) => (file.id));\n        jcampIds = [...jcampIds, ...fetchedFilesIdxs];\n  \n        return AttachmentFetcher.combineSpectra(jcampIds, curveIdx, params).then((res) => {\n          return json;\n        }).catch((errMsg) => {\n          console.log(errMsg); // eslint-disable-line\n        });\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static inferSpectrum(\n    attId,\n    peaksStr,\n    shift,\n    scan,\n    thres,\n    integration,\n    multiplicity,\n    predict,\n    peaks,\n    layout,\n    keepPred\n  ) {\n    const params = {\n      attachmentId: attId,\n      peaksStr,\n      shiftSelectX: shift.peak.x,\n      shiftRefName: shift.ref.name,\n      shiftRefValue: shift.ref.value,\n      scan,\n      thres,\n      integration,\n      multiplicity,\n      predict,\n      keepPred,\n      peaks: JSON.stringify(peaks),\n      shift: JSON.stringify(shift),\n      layout,\n    };\n\n    const promise = fetch('/api/v1/attachments/infer/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(decamelizeKeys(params)),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static regenerateSpectrum(jcampIds) {\n    const promise = fetch('/api/v1/attachments/regenerate_spectrum/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        original: jcampIds.orig,\n        generated: jcampIds.gene,\n      }),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static regenerateEditedSpectrum(jcampIds, molfile) {\n    const promise = fetch('/api/v1/attachments/regenerate_edited_spectrum/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        edited: jcampIds.edited,\n        molfile,\n      }),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static combineSpectra(jcampIds, curveIdx, extraParams = null) {\n    const extras = JSON.stringify(decamelizeKeys(extraParams))\n    const promise = fetch(\n      '/api/v1/chemspectra/file/combine_spectra',\n      {\n        credentials: 'same-origin',\n        method: 'POST',\n        headers:\n          {\n            Accept: 'application/json',\n            'Content-Type': 'application/json',\n          },\n        body: JSON.stringify({\n          spectra_ids: jcampIds,\n          front_spectra_idx: curveIdx,\n          extras: extras,\n        }),\n      },\n    )\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n}\n","import 'whatwg-fetch';\n\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport CellLine from 'src/models/cellLine/CellLine';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport { dateToUnixTimestamp } from 'src/utilities/timezoneHelper';\n\nexport default class BaseFetcher {\n  /**\n   * @param {Object} params = { apiEndpoint, requestMethod, bodyData, jsonTranformation }\n   */\n  static withBodyData(params) {\n    const {\n      apiEndpoint, requestMethod, bodyData, jsonTranformation\n    } = params;\n    const promise = fetch(apiEndpoint, {\n      credentials: 'same-origin',\n      method: requestMethod,\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(bodyData)\n    }).then((response) => response.json())\n      .then((json) => jsonTranformation(json))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  /**\n   * @param {Object} params = { apiEndpoint, requestMethod, jsonTranformation }\n   */\n  static withoutBodyData(params) {\n    const { apiEndpoint, requestMethod, jsonTranformation } = params;\n\n    const promise = fetch(apiEndpoint, {\n      credentials: 'same-origin',\n      method: requestMethod\n    }).then((response) => response.json())\n      .then((json) => jsonTranformation(json))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchByCollectionId(id, queryParams = {}, isSync = false, type = 'samples', ElKlass) {\n    const page = queryParams.page || 1;\n    const perPage = queryParams.per_page || UIStore.getState().number_of_results;\n    const filterCreatedAt = queryParams.filterCreatedAt === true\n      ? '&filter_created_at=true' : '&filter_created_at=false';\n    const fromDate = queryParams.fromDate ? `&from_date=${dateToUnixTimestamp(queryParams.fromDate)}` : '';\n    const toDate = queryParams.toDate ? `&to_date=${dateToUnixTimestamp(queryParams.toDate)}` : '';\n    const userLabel = queryParams.userLabel ? `&user_label=${queryParams.userLabel}` : '';\n    const productOnly = queryParams.productOnly === true ? '&product_only=true' : '&product_only=false';\n    const api = `/api/v1/${type}.json?${isSync ? 'sync_' : ''}`\n      + `collection_id=${id}&page=${page}&per_page=${perPage}&`\n      + `${fromDate}${toDate}${userLabel}${filterCreatedAt}${productOnly}`;\n    let addQuery = '';\n    let userState;\n    let group;\n    let sort;\n    let direction;\n    let filters;\n    let reaction;\n    let sortColumn;\n\n    switch (type) {\n      case 'samples':\n        addQuery = `&product_only=${queryParams.productOnly || false}`\n          + `&molecule_sort=${queryParams.moleculeSort ? 1 : 0}`;\n        break;\n      case 'reactions':\n        userState = UserStore.getState();\n        filters = userState?.profile?.data?.filters || {};\n        reaction = userState?.profile?.data?.filters?.reaction || {};\n        group = filters.reaction?.group || 'created_at';\n        sort = filters.reaction?.sort || false;\n        direction = filters.reaction?.direction || 'DESC';\n\n        if (group === 'none') {\n          sortColumn = sort ? 'created_at' : 'updated_at';\n        } else if (sort && group) {\n          sortColumn = group;\n        } else {\n          sortColumn = 'updated_at';\n        }\n\n        addQuery = `&sort_column=${sortColumn}&sort_direction=${direction}`;\n\n        // if the user has not updated its profile yet, we set the default sort to created_at\n        if (!filters.reaction) {\n          addQuery = '&sort_column=created_at&sort_direction=DESC';\n        }\n        break;\n      case 'generic_elements':\n        userState = UserStore.getState();\n        filters = userState?.profile?.data?.filters || {};\n        group = filters[queryParams.name]?.group || 'none';\n        sort = filters[queryParams.name]?.sort || false;\n        addQuery = `&el_type=${queryParams.name}&sort_column=${(sort && group) || 'updated_at'}`;\n        break;\n      default:\n    }\n\n    return fetch(api.concat(addQuery), {\n      credentials: 'same-origin'\n    }).then((response) => (\n      response.json().then((json) => ({\n        elements: json[type].map((r) => {\n          if (type === 'cell_lines') {\n            return CellLine.createFromRestResponse(id, r);\n          }\n          return (new ElKlass(r));\n        }),\n        totalElements: parseInt(response.headers.get('X-Total'), 10),\n        page: parseInt(response.headers.get('X-Page'), 10),\n        pages: parseInt(response.headers.get('X-Total-Pages'), 10),\n        perPage: parseInt(response.headers.get('X-Per-Page'), 10)\n      }))\n    )).catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static getAttachments(container, attachments = []) {\n    Array.prototype.push.apply(attachments, container.attachments);\n    container.children\n      .forEach((child) => BaseFetcher.getAttachments(child, attachments));\n\n    return attachments;\n  }\n\n  static updateAnnotationsInContainer(element) {\n    const updateTasks = [];\n\n    const attachments = BaseFetcher.getAttachments(element.container, []);\n\n    attachments\n      .filter((attach) => attach.updatedAnnotation)\n      .forEach((attach) => {\n        const data = new FormData();\n        data.append('updated_svg_string', attach.updatedAnnotation);\n        const updateTask = fetch(`/api/v1/attachments/${attach.id}/annotation`, {\n          credentials: 'same-origin',\n          method: 'post',\n          body: data\n        })\n          .catch((errorMessage) => {\n            console.log(errorMessage);\n          });\n        updateTasks.push(updateTask);\n      });\n\n    return Promise.all(updateTasks);\n  }\n\n  static updateAnnotationsOfAttachments(element) {\n    const updateTasks = [];\n    if(!element.attachments){\n      return Promise.resolve();\n    }\n    element.attachments\n      .filter(((attach) => attach.hasOwnProperty('updatedAnnotation')))\n      .forEach((attach) => {\n        const data = new FormData();\n        data.append('updated_svg_string', attach.updatedAnnotation);\n        updateTasks.push(fetch(`/api/v1/attachments/${attach.id}/annotation`, {\n          credentials: 'same-origin',\n          method: 'post',\n          body: data\n        })\n          .catch((errorMessage) => {\n            console.log(errorMessage);\n          }));\n      });\n\n    return Promise.all(updateTasks);\n  }\n\n  static updateAnnotations(element) {\n    return Promise.all(\n      [\n        BaseFetcher.updateAnnotationsOfAttachments(element),\n        BaseFetcher.updateAnnotationsInContainer(element, [])\n      ]\n    );\n  }\n}\n","const extractApiParameter = (cellLine) => ({\n  cell_line_sample_id: cellLine.id,\n  organism: cellLine.organism,\n  tissue: cellLine.tissue,\n  amount: cellLine.amount,\n  passage: cellLine.passage,\n  disease: cellLine.disease,\n  growth_medium: cellLine.growthMedium,\n  material_names: cellLine.cellLineName,\n  collection_id: cellLine.collectionId,\n  cell_type: cellLine.cellType,\n  mutation: cellLine.mutation,\n  unit: cellLine.unit,\n  biosafety_level: cellLine.bioSafetyLevel,\n  variant: cellLine.variant,\n  optimal_growth_temp: cellLine.optimal_growth_temp,\n  cryo_pres_medium: cellLine.cryopreservationMedium,\n  gender: cellLine.gender,\n  material_description: cellLine.materialDescription,\n  contamination: cellLine.contamination,\n  source: cellLine.source,\n  name: cellLine.itemName,\n  description: cellLine.itemDescription,\n  short_label: cellLine.short_label,\n  container: cellLine.container\n});\n\nconst successfullyCreatedParameter = {\n  title: 'Element created',\n  message: 'Cell line sample successfully added',\n  level: 'info',\n  dismissible: 'button',\n  autoDismiss: 10,\n  position: 'tr'\n};\n\nconst successfullyCopiedParameter = {\n  title: 'Element copied',\n  message: 'Cell line sample successfully copied',\n  level: 'info',\n  dismissible: 'button',\n  autoDismiss: 10,\n  position: 'tr'\n};\n\nconst successfullyUpdatedParameter = {\n  title: 'Element updated',\n  message: 'Cell line sample successfully updated',\n  level: 'info',\n  dismissible: 'button',\n  autoDismiss: 10,\n  position: 'tr'\n};\nconst successfullySplittedParameter = {\n  title: 'Element splitted',\n  message: 'Cell line sample successfully splitted',\n  level: 'info',\n  dismissible: 'button',\n  autoDismiss: 10,\n  position: 'tr'\n};\n\nconst errorMessageParameter = {\n  title: 'Error',\n  message: 'Unfortunately, the last action failed. Please try again or contact your admin.',\n  level: 'error',\n  dismissible: 'button',\n  autoDismiss: 30,\n  position: 'tr'\n};\n\nexport {\n  extractApiParameter,\n  successfullyCreatedParameter,\n  successfullyCopiedParameter,\n  successfullyUpdatedParameter,\n  errorMessageParameter,\n  successfullySplittedParameter\n};\n","import CellLine from 'src/models/cellLine/CellLine';\nimport Container from 'src/models/Container';\nimport BaseFetcher from 'src/fetchers/BaseFetcher';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport GenericElsFetcher from 'src/fetchers/GenericElsFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nimport {\n  extractApiParameter,\n  successfullyCreatedParameter,\n  successfullyCopiedParameter,\n  successfullyUpdatedParameter,\n  successfullySplittedParameter,\n  errorMessageParameter\n} from 'src/utilities/CellLineUtils';\n\nexport default class CellLinesFetcher {\n  static fetchByCollectionId(id, queryParams = {}, isSync = false) {\n    return BaseFetcher.fetchByCollectionId(id, queryParams, isSync, 'cell_lines', CellLine);\n  }\n\n  static fetchById(id) {\n    const promise = fetch(`/api/v1/cell_lines/${id}`, {\n      credentials: 'same-origin',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      method: 'GET'\n    })\n      .then((response) => response.json())\n      .then((json) => CellLine.createFromRestResponse(0, json))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static create(cellLine, user) {\n    const params = extractApiParameter(cellLine);\n\n    const promise = CellLinesFetcher.uploadAttachments(cellLine)\n      .then(() => fetch('/api/v1/cell_lines', {\n        credentials: 'same-origin',\n        headers: {\n          Accept: 'application/json',\n          'Content-Type': 'application/json'\n        },\n        method: 'POST',\n        body: JSON.stringify(params)\n      }))\n\n      .then((response) => response.json())\n      .then((json) => { GenericElsFetcher.uploadGenericFiles(cellLine, json.id, 'CellLineSample'); return json; })\n      .then((json) => CellLine.createFromRestResponse(params.collection_id, json))\n      .then((cellLineItem) => {\n        NotificationActions.add(successfullyCreatedParameter);\n        user.cell_lines_count += 1;\n        return cellLineItem;\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n        NotificationActions.add(errorMessageParameter);\n        return cellLine;\n      });\n\n    return promise;\n  }\n\n  static uploadAttachments(cellLine) {\n    const files = AttachmentFetcher.getFileListfrom(cellLine.container);\n\n    if (files.length > 0) {\n      const tasks = [];\n      files.forEach((file) => tasks.push(AttachmentFetcher.uploadFile(file).then()));\n      return Promise.all(tasks).then(() => {\n        Promise.resolve(1);\n      });\n    }\n    return Promise.resolve(1);\n  }\n\n  static getAllCellLineNames() {\n    return fetch('/api/v1/cell_lines/names/all', {\n      credentials: 'same-origin',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      method: 'GET'\n    }).then((response) => response.json());\n  }\n\n  static getCellLineMaterialById(id) {\n    return fetch(`/api/v1/cell_lines/material/${id}`, {\n      credentials: 'same-origin',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      method: 'GET'\n    }).then((response) => response.json());\n  }\n\n  static copyCellLine(cellLineId, collectionId) {\n    const params = {\n      id: cellLineId,\n      collection_id: collectionId,\n      container: Container.init()\n    };\n\n    return fetch('/api/v1/cell_lines/copy/', {\n      credentials: 'same-origin',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      method: 'POST',\n      body: JSON.stringify(params)\n    }).then((response) => response.json())\n\n      .then((json) => {\n        NotificationActions.add(successfullyCopiedParameter);\n        return CellLine.createFromRestResponse(collectionId, json);\n      });\n  }\n\n  static update(cellLineItem) {\n    const params = extractApiParameter(cellLineItem);\n    const promise = CellLinesFetcher.uploadAttachments(cellLineItem)\n      .then(() => fetch('/api/v1/cell_lines', {\n        credentials: 'same-origin',\n        headers: {\n          Accept: 'application/json',\n          'Content-Type': 'application/json'\n        },\n        method: 'PUT',\n        body: JSON.stringify(params)\n      }))\n      .then((response) => response.json())\n      .then(() => { BaseFetcher.updateAnnotationsInContainer(cellLineItem); })\n      .then(() => CellLinesFetcher.fetchById(cellLineItem.id))\n      .then((loadedCellLineSample) => {\n        NotificationActions.add(successfullyUpdatedParameter);\n        return loadedCellLineSample;\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n        NotificationActions.add(errorMessageParameter);\n        return cellLineItem;\n      });\n    return promise;\n  }\n\n  // Here better as parameter list of ids\n  static splitAsSubCellLines(ids, collectionId) {\n    const promises = [];\n\n    ids.forEach((id) => {\n      const params = { id, collection_id: collectionId };\n      promises.push(fetch('/api/v1/cell_lines/split', {\n        credentials: 'same-origin',\n        headers: {\n          Accept: 'application/json',\n          'Content-Type': 'application/json'\n        },\n        method: 'POST',\n        body: JSON.stringify(params)\n      }));\n    });\n\n    return Promise.all(promises)\n      .then(() => { NotificationActions.add(successfullySplittedParameter); });\n  }\n}\n","import 'whatwg-fetch';\nimport BaseFetcher from 'src/fetchers/BaseFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport { downloadBlob } from 'src/utilities/FetcherHelper';\n\nexport default class CollectionsFetcher {\n  static takeOwnership(params) {\n    let sync = params.isSync ? \"syncC\" : \"c\"\n    let promise = fetch(`/api/v1/${sync}ollections/take_ownership/${params.id}`, {\n      credentials: 'same-origin',\n      method: 'POST'\n    })\n\n    return promise;\n  }\n\n  static fetchLockedRoots() {\n    return BaseFetcher.withoutBodyData({\n      apiEndpoint: '/api/v1/collections/locked.json',\n      requestMethod: 'GET',\n      jsonTranformation: (json) => { return json }\n    });\n  }\n\n  static fetchUnsharedRoots() {\n    let promise = fetch('/api/v1/collections/roots.json', {\n      credentials: 'same-origin'\n    })\n      .then((response) => {\n        return response.json()\n      }).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchSharedRoots() {\n    let promise = fetch('/api/v1/collections/shared_roots.json', {\n      credentials: 'same-origin'\n    })\n      .then((response) => {\n        return response.json()\n      }).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchRemoteRoots() {\n    let promise = fetch('/api/v1/collections/remote_roots.json', {\n      credentials: 'same-origin'\n    })\n      .then((response) => {\n        return response.json()\n      }).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n  static fetchSyncRemoteRoots() {\n    let promise = fetch('/api/v1/syncCollections/sync_remote_roots.json', {\n      credentials: 'same-origin'\n    })\n      .then((response) => {\n        return response.json()\n      }).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static createSharedCollections(params) {\n    return fetch('/api/v1/collections/shared/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    });\n  }\n\n  static createSync(params) {\n    return fetch('/api/v1/syncCollections/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        collection_attributes: params.collection_attributes,\n        user_ids: params.user_ids,\n        id: params.id,\n      })\n    });\n  }\n\n  static editSync(params) {\n    let promise = fetch('/api/v1/syncCollections/' + params.id, {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        collection_attributes: params.collection_attributes,\n        user_ids: params.user_ids,\n      })\n    })\n\n    return promise;\n  }\n\n  static deleteSync(params) {\n    let promise = fetch('/api/v1/syncCollections/' + params.id, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        is_syncd: params.is_syncd\n      })\n    })\n    return promise;\n  }\n\n  static bulkUpdateUnsharedCollections(params) {\n    let promise = fetch('/api/v1/collections', {\n      credentials: 'same-origin',\n      method: 'PATCH',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        collections: params.collections,\n        deleted_ids: params.deleted_ids\n      })\n    })\n\n    return promise;\n  }\n\n  static rejectShared(params) {\n    const promise = fetch('/api/v1/collections/reject_shared', {\n      credentials: 'same-origin',\n      method: 'PATCH',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        id: params.id\n      })\n    })\n    return promise;\n  }\n\n  static updateSharedCollection(params) {\n    let promise = fetch('/api/v1/collections/shared/' + params.id, {\n      credentials: 'same-origin',\n      method: 'put',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        collection_attributes: params.collection_attributes,\n      })\n    })\n\n    return promise;\n  }\n\n  static createUnsharedCollection(params) {\n    let promise = fetch('/api/v1/collections/unshared/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        label: params.label\n      })\n    }).then((response) => {\n      return response.json()\n    }).then((json) => {\n      return json;\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n\n  static updateElementsCollection(params) {\n    return fetch('/api/v1/collections/elements/', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        ui_state: params.ui_state,\n        collection_id: params.collection_id,\n        is_sync_to_me: params.is_sync_to_me,\n        newCollection: params.newLabel,\n      })\n    }).then(response => response)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static assignElementsCollection(params) {\n    return fetch('/api/v1/collections/elements/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        ui_state: params.ui_state,\n        collection_id: params.collection_id,\n        is_sync_to_me: params.is_sync_to_me,\n        newCollection: params.newLabel,\n      })\n    }).then(response => response)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static expotSamples(type, id) {\n    const fileName = `${type.charAt(0).toUpperCase() + type.substring(1)}_${id}_Samples Excel.xlsx`;\n    return fetch(`/api/v1/reports/excel_${type}?id=${id}`, {\n      credentials: 'same-origin',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' }\n    }).then((response) => {\n      if (response.ok) { return response.blob(); }\n      throw Error(response.statusText);\n    }).then((blob) => {\n      downloadBlob(fileName, blob);\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static removeElementsCollection(params) {\n    return fetch('/api/v1/collections/elements/', {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        ui_state: params.ui_state,\n      })\n    }).then(response => response)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static createExportJob(params) {\n    return fetch('/api/v1/collections/exports/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => {\n      NotificationActions.notifyExImportStatus('Collection export', response.status);\n      if (response.ok) { return true; }\n      throw new Error(response.status);\n    }).catch((errorMessage) => { throw new Error(errorMessage); });\n  }\n\n  static createImportJob(params) {\n    const data = new FormData();\n    data.append('file', params.file);\n\n    return fetch('/api/v1/collections/imports/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      body: data\n    }).then((response) => {\n      NotificationActions.notifyExImportStatus('Collection import', response.status);\n      if (response.ok) { return true; }\n      throw new Error(response.status);\n    }).catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchTabsLayout(params) {\n    let promise = fetch('/api/v1/collections/tab_segments/' + params.id, {\n      credentials: 'same-origin'\n    })\n      .then((response) => {\n        return response.json()\n      }).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static createTabsSegment(params) {\n    return fetch('/api/v1/collections/tabs/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        id: params.currentCollectionId,\n        segments: params.layoutSegments\n      })\n    }).then(response => response)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static updateTabsLayout(params) {\n    return fetch('/api/v1/collections/tabs/', {\n      credentials: 'same-origin',\n      method: 'PATCH',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        id: params.cId,\n        segment: params.segment\n      })\n    }).then(response => response)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","import 'whatwg-fetch';\nimport _ from 'lodash';\n\nexport default class ContainerFetcher {\n  // Remove container id of unseletced attachemnts(the attachemnts not in Inbox)\n  static deleteContainerLinkUnselected(params) {\n    const promise = fetch('/api/v1/containers/', {\n      credentials: 'same-origin',\n      method: 'PATCH',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        container_id: params.id,\n        attachments: params.attachments\n      })\n    }).then(response => response.json()).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n\n  static deleteContainer(container) {\n    const promise = fetch(`/api/v1/containers/${container.id}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then(response => response.json()).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n\n  static updateContainerContent(container) {\n    let content = _.cloneDeep(container.extended_metadata.content);\n    if (typeof content === 'string') {\n      content = JSON.parse(content);\n    }\n\n    const promise = fetch(`/api/v1/containers/${container.id}`, {\n      credentials: 'same-origin',\n      method: 'put',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        container_id: container.id,\n        content\n      })\n    }).then(response => response.json()).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n}\n","import BaseFetcher from 'src/fetchers/BaseFetcher'\nimport Device from 'src/models/Device'\nimport DeviceAnalysis from 'src/models/DeviceAnalysis'\nimport _ from 'lodash'\n\nexport default class DeviceFetcher {\n  static fetchAll() {\n    return BaseFetcher.withoutBodyData({\n      apiEndpoint: '/api/v1/devices/',\n      requestMethod: 'GET',\n      jsonTranformation: (json) => json.devices.map(device => new Device(device))\n    })\n  }\n\n  static fetchById(deviceId) {\n    return BaseFetcher.withoutBodyData({\n      apiEndpoint: `/api/v1/devices/${deviceId}`,\n      requestMethod: 'GET',\n      jsonTranformation: (json) => new Device(json.device)\n    })\n  }\n\n  static create(device) {\n    return BaseFetcher.withBodyData({\n      apiEndpoint: '/api/v1/devices',\n      requestMethod: 'POST',\n      bodyData: device,\n      jsonTranformation: (json) => new Device(json.device)\n    })\n  }\n\n  static changeSelectedDevice(device) {\n    return BaseFetcher.withoutBodyData({\n      apiEndpoint: `/api/v1/devices/${device.id}/selected`,\n      requestMethod: 'POST',\n      jsonTranformation: (json) => json\n    })\n  }\n\n  static update(device) {\n    return BaseFetcher.withBodyData({\n      apiEndpoint: `/api/v1/devices/${device.id}`,\n      requestMethod: 'PUT',\n      bodyData: device.serialize(),\n      jsonTranformation: (json) => new Device(json.device)\n    })\n  }\n\n  static delete(device) {\n    return BaseFetcher.withoutBodyData({\n      apiEndpoint: `/api/v1/devices/${device.id}`,\n      requestMethod: 'DELETE',\n      jsonTranformation: (json) => { new Device(json.device) }\n    })\n  }\n\n  static fetchAnalysisById(analysisId) {\n    return BaseFetcher.withoutBodyData({\n      apiEndpoint: `/api/v1/devices_analysis/${analysisId}`,\n      requestMethod: 'GET',\n      jsonTranformation: (json) => new DeviceAnalysis(json.devices_analysis)\n    })\n  }\n\n  static createAnalysis(analysis) {\n    return BaseFetcher.withBodyData({\n      apiEndpoint: `/api/v1/devices_analysis`,\n      requestMethod: 'POST',\n      bodyData: analysis.serialize(),\n      jsonTranformation: (json) => new DeviceAnalysis(json.devices_analysis)\n    })\n  }\n\n  static updateAnalysis(analysis) {\n    const { deviceId, sampleId, analysisType, experiments } = analysis\n    return BaseFetcher.withBodyData({\n      apiEndpoint: `/api/v1/devices_analysis/${analysis.id}`,\n      requestMethod: 'PUT',\n      bodyData: analysis.serialize(),\n      jsonTranformation: (json) => new DeviceAnalysis(json.devices_analysis)\n    })\n  }\n\n  static generateExperimentConfig(experiment) {\n    return BaseFetcher.withBodyData({\n      apiEndpoint: `/api/v1/icon_nmr/config`,\n      requestMethod: 'POST',\n      bodyData: experiment.buildConfig(),\n      jsonTranformation: (json) => json\n    })\n  }\n}\n","import 'whatwg-fetch';\n\nexport default class EditorFetcher {\n  static initial() {\n    const promise = fetch('/api/v1/editor/initial.json', {\n      credentials: 'same-origin'\n    })\n      .then(response => response.json()).then(json => json).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static startEditing(params) {\n    const promise = fetch('/api/v1/editor/start/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    })\n      .then(response => response.json()).then(json => json).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n}\n","import 'whatwg-fetch';\n\nexport default class GenericBaseFetcher {\n  static exec(path, method) {\n    return fetch(`/api/v1/${path}`, { credentials: 'same-origin', method })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static execData(params, path, method = 'POST') {\n    return fetch(`/api/v1/${path}`, {\n      credentials: 'same-origin',\n      method,\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static deActivateKlass(params) {\n    return fetch('/api/v1/generic_elements/de_activate_klass', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static deleteKlass(params) {\n    return fetch(`/api/v1/generic_elements/delete_klass/${params.id}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static deleteKlassRevision(params) {\n    return fetch('/api/v1/generic_elements/delete_klass_revision', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchKlassRevisions(id, klass) {\n    return fetch(\n      `/api/v1/generic_elements/klass_revisions.json?id=${id}&klass=${klass}`,\n      { credentials: 'same-origin' }\n    )\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static updateTemplate(params) {\n    return fetch('/api/v1/generic_elements/update_template', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  // For REPO\n  static open(path, method) {\n    return fetch(`/api/v1/labimotion_hub/${path}`, { credentials: 'same-origin', method })\n      .then(response => response.json()).then(json => json).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n}\n","import GenericBaseFetcher from 'src/fetchers/GenericBaseFetcher';\n\nexport default class GenericDSsFetcher extends GenericBaseFetcher {\n  static exec(path, method) {\n    return super.exec(`generic_dataset/${path}`, method);\n  }\n\n  static execData(params, path) {\n    return super.execData(params, `generic_dataset/${path}`);\n  }\n\n  static fetchRepo() {\n    return this.exec('fetch_repo', 'GET');\n  }\n\n  static createRepo(params) {\n    return this.execData(params, 'create_repo_klass');\n  }\n\n  static fetchKlass() {\n    return this.exec('klasses.json', 'GET');\n  }\n\n  static listDatasetKlass(params = {}) {\n    const api =\n      params.is_active === undefined\n        ? 'list_dataset_klass.json'\n        : `list_dataset_klass.json?is_active=${params.is_active}`;\n    return this.exec(api, 'GET');\n  }\n\n  static updateDatasetTemplate(params) {\n    return super.updateTemplate(\n      { ...params, klass: 'DatasetKlass' },\n      'update_dataset_template'\n    );\n  }\n}\n","import 'whatwg-fetch';\nimport GenericEl from 'src/models/GenericEl';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport BaseFetcher from 'src/fetchers/BaseFetcher';\nimport GenericBaseFetcher from 'src/fetchers/GenericBaseFetcher';\nimport { getFileName, downloadBlob } from 'src/utilities/FetcherHelper';\n\nexport default class GenericElsFetcher extends GenericBaseFetcher {\n  static exec(path, method) {\n    return super.exec(`generic_elements/${path}`, method);\n  }\n\n  static execData(params, path) {\n    return super.execData(params, `generic_elements/${path}`);\n  }\n\n  static fetchKlassOpen() {\n    return this.open('/list?klass=ElementKlass', 'GET');\n  }\n\n  static fetchByCollectionId(id, queryParams = {}, isSync = false) {\n    return BaseFetcher.fetchByCollectionId(\n      id,\n      queryParams,\n      isSync,\n      'generic_elements',\n      GenericEl\n    );\n  }\n\n  static export(element, klass, exportFormat) {\n    let fileName;\n    const promise = fetch(`/api/v1/generic_elements/export.json?id=${element.id}&klass=${klass}&export_format=${exportFormat}`, {\n      credentials: 'same-origin',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => {\n      if (response.ok) {\n        fileName = getFileName(response);\n        return response.blob();\n      }\n    }).then((blob) => {\n      downloadBlob(fileName, blob);\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n\n  static fetchById(id) {\n    const promise = fetch(`/api/v1/generic_elements/${id}.json`, {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => {\n        const genericEl = new GenericEl(json.element);\n        genericEl.attachments = json.attachments;\n        if (json.error) {\n          genericEl.type = null;\n        }\n        return genericEl;\n      })\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static uploadGenericFiles(\n    element,\n    id,\n    type,\n    hasAttach = false,\n    isElement = false\n  ) {\n    const segFiles = (element.segments || []).filter(\n      (seg) => seg.files && seg.files.length > 0\n    ).length === 0;\n    if (!isElement && !hasAttach && segFiles === true) {\n      return Promise.resolve(true);\n    }\n    if (\n      isElement\n      && segFiles === true\n      && (typeof element.files === 'undefined'\n        || (element.files || []).length === 0)\n      && (typeof element.attachments === 'undefined'\n        || (element.attachments || []).length === 0)\n    ) {\n      return Promise.resolve(true);\n    }\n    if (\n      !isElement\n      && hasAttach\n      && segFiles === true\n      && (element.attachments || []).length === 0\n    ) {\n      return Promise.resolve(true);\n    }\n\n    const data = new FormData();\n    data.append('att_id', id);\n    data.append('att_type', type);\n\n    const segMap = {};\n    if (isElement === true && element.files && element.files.length > 0) {\n      const elMap = {};\n      elMap[id] = { type: 'ElementProps', id, files: [] };\n      (element.files || []).forEach((file) => {\n        data.append('elfiles[]', file.file.file, file.uid);\n        elMap[id].files.push({ uid: file.uid, filename: file.file.name });\n      });\n      data.append('elInfo', JSON.stringify(elMap));\n    }\n\n    if (GenericElsFetcher.shouldUploadAttachments(hasAttach, element)) {\n      GenericElsFetcher.prepareAttachmentParam(element, data);\n    }\n\n    (element.segments || []).forEach((segment) => {\n      segMap[segment.segment_klass_id] = {\n        type: 'SegmentProps',\n        id,\n        files: [],\n      };\n      (segment.files || []).forEach((file) => {\n        data.append('sefiles[]', file.file.file, file.uid);\n        segMap[segment.segment_klass_id].files.push({\n          uid: file.uid,\n          filename: file.file.name,\n        });\n      });\n    });\n    data.append('seInfo', JSON.stringify(segMap));\n    return fetch('/api/v1/generic_elements/upload_generics_files', {\n      credentials: 'same-origin',\n      method: 'post',\n      body: data,\n    })\n      .then((response) => response)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static updateOrCreate(genericEl, action = 'create') {\n    const files = AttachmentFetcher.getFileListfrom(genericEl.container);\n    const method = action === 'create' ? 'post' : 'put';\n    const api = action === 'create'\n      ? '/api/v1/generic_elements/'\n      : `/api/v1/generic_elements/${genericEl.id}`;\n    const promise = () => fetch(api, {\n      credentials: 'same-origin',\n      method,\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(genericEl.serialize()),\n    })\n      .then((response) => response.json())\n      .then((json) => GenericElsFetcher.uploadGenericFiles(\n        genericEl,\n        json.element.id,\n        'Element',\n        true,\n        true\n      ).then(() => this.fetchById(json.element.id)))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    if (files.length > 0) {\n      const tasks = [];\n      files.forEach((file) => tasks.push(AttachmentFetcher.uploadFile(file).then()));\n      return Promise.all(tasks).then(() => promise());\n    }\n    return promise();\n  }\n\n  static update(genericEl) {\n    return this.updateOrCreate(genericEl, 'update');\n  }\n\n  static create(genericEl) {\n    return this.updateOrCreate(genericEl, 'create');\n  }\n\n  static split(params, name) {\n    const data = {\n      ui_state: {\n        element: {\n          all: params[name].checkedAll,\n          included_ids: params[name].checkedIds,\n          excluded_ids: params[name].uncheckedIds,\n          name\n        },\n        currentCollectionId: params.currentCollection.id\n      }\n    };\n    return this.execData(data, 'split');\n  }\n\n  static createElementKlass(params) {\n    return this.execData(params, 'create_element_klass');\n  }\n\n  static fetchElementRevisions(id) {\n    return this.exec(`element_revisions.json?id=${id}`, 'GET');\n  }\n\n  static fetchSegmentRevisions(id) {\n    return this.exec(`segment_revisions.json?id=${id}`, 'GET');\n  }\n\n  static fetchElementKlasses() {\n    return this.exec('klasses_all.json', 'GET');\n  }\n\n  static fetchElementKlass(klassName) {\n    return this.exec(`klass.json?name=${klassName}`, 'GET');\n  }\n\n  static deleteRevisions(params) {\n    return this.execData(params, 'delete_revision');\n  }\n\n  static updateElementKlass(params) {\n    return this.execData(params, 'update_element_klass');\n  }\n\n  static updateElementTemplate(params) {\n    return super.updateTemplate(\n      { ...params, klass: 'ElementKlass' },\n      'update_element_template'\n    );\n  }\n\n  static fetchRepo() {\n    return this.exec('fetch_repo', 'GET');\n  }\n\n  static createRepo(params) {\n    return this.execData(params, 'create_repo_klass');\n  }\n\n  static prepareAttachmentParam(element, data) {\n    const newFiles = (element.attachments || []).filter(\n      (a) => a.is_new && !a.is_deleted\n    );\n    const delFiles = (element.attachments || []).filter(\n      (a) => !a.is_new && a.is_deleted\n    );\n    (newFiles || []).forEach((file) => {\n      data.append('attfiles[]', file.file, file.name);\n      data.append('attfilesIdentifier[]', file.id);\n    });\n    (delFiles || []).forEach((f) => {\n      data.append('delfiles[]', f.id);\n    });\n  }\n\n  static shouldUploadAttachments(hasAttach, element) {\n    return hasAttach === true\n    && element.attachments\n    && element.attachments.length > 0\n    && element.type !== 'research_plan';\n  }\n\n  static uploadKlass(params) {\n    return this.execData(params, 'upload_klass');\n  }\n}\n","import 'whatwg-fetch';\nimport GenericBaseFetcher from 'src/fetchers/GenericBaseFetcher';\nimport { getFileName, downloadBlob } from 'src/utilities/FetcherHelper';\n\nexport default class GenericKlassFetcher extends GenericBaseFetcher {\n  static exec(path, method) {\n    return super.exec(`generic_klass/${path}`, method);\n  }\n\n  static execData(params, path) {\n    return super.execData(params, `generic_klass/${path}`);\n  }\n\n  static downloadKlass(id, klass) {\n    let fileName;\n    const promise = fetch(`/api/v1/generic_klass/download_klass.json?id=${id}&klass=${klass}`, {\n      credentials: 'same-origin',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => {\n      if (response.ok) {\n        fileName = getFileName(response);\n        return response.blob();\n      }\n      return Promise.reject(new Error('Response not OK. Download failed.'));\n    }).then((blob) => {\n      downloadBlob(fileName, blob);\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n}\n","import GenericBaseFetcher from 'src/fetchers/GenericBaseFetcher';\n\nexport default class GenericSgsFetcher extends GenericBaseFetcher {\n  static exec(path, method) {\n    return super.exec(`segments/${path}`, method);\n  }\n\n  static execData(params, path) {\n    return super.execData(params, `segments/${path}`);\n  }\n\n  static fetchRepo() {\n    return this.exec('fetch_repo', 'GET');\n  }\n\n  static createRepo(params) {\n    return this.execData(params, 'create_repo_klass');\n  }\n\n  static createKlass(params) {\n    return this.execData(params, 'create_segment_klass');\n  }\n\n  static fetchKlass(elementName = null) {\n    const api = elementName == null\n      ? 'klasses.json'\n      : `klasses.json?element=${elementName}`;\n    return this.exec(api, 'GET');\n  }\n\n  static fetchRepoKlassList() {\n    return this.exec('fetch_repo_generic_template_list', 'GET');\n  }\n\n  static listSegmentKlass(params = {}) {\n    const api = params.is_active === undefined\n      ? 'list_segment_klass.json'\n      : `list_segment_klass.json?is_active=${params.is_active}`;\n    return this.exec(api, 'GET');\n  }\n\n  static syncTemplate(params) {\n    return this.execData(params, 'fetch_repo_generic_template');\n  }\n\n  static updateSegmentKlass(params) {\n    return this.execData(params, 'update_segment_klass');\n  }\n\n  static updateSegmentTemplate(params) {\n    return super.updateTemplate(\n      { ...params, klass: 'SegmentKlass' },\n      'update_segment_template'\n    );\n  }\n  \n  static uploadKlass(params) {\n    return this.execData(params, 'upload_klass');\n  }\n\n  static downloadKlass(id, klass) {\n    let fileName;\n    const promise = fetch(`/api/v1/segments/download_klass.json?id=${id}`, {\n      credentials: 'same-origin',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => {\n      if (response.ok) {\n        fileName = getFileName(response);\n        return response.blob();\n      }\n    }).then((blob) => {\n      downloadBlob(fileName, blob);\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n\n}\n","import UserStore from 'src/stores/alt/stores/UserStore';\n\nexport default class InboxFetcher {\n  static fetchInbox(isCntOnly = false, queryParams = {}) {\n    const userState = UserStore.getState();\n    const filters = userState?.profile?.data?.filters || {};\n    const sortColumn = filters.inbox?.sort || 'name';\n\n    // if the user has not updated its profile yet, we set the default sort to name\n    const addQuery = `&sort_column=${filters.inbox ? sortColumn : 'name'}`;\n\n    const promise = fetch(`/api/v1/inbox?cnt_only=${isCntOnly}&page=${queryParams.currentPage || 1}&per_page=${queryParams.itemsPerPage || 20}${addQuery}`, {\n      credentials: 'same-origin'\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchInboxByContainer(containerId, currentContainerPage) {\n    const userState = UserStore.getState();\n    const filters = userState?.profile?.data?.filters || {};\n    const sortColumn = filters.inbox?.sort || 'name';\n\n    // if the user has not updated its profile yet, we set the default sort to name\n    const addQuery = `&sort_column=${filters.inbox ? sortColumn : 'name'}`;\n\n    const promise = fetch(`/api/v1/inbox/containers/${containerId}?dataset_page=${currentContainerPage || 1}${addQuery}`, {\n      credentials: 'same-origin'\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchInboxUnsorted() {\n    const promise = fetch('/api/v1/inbox/unlinked_attachments', {\n      credentials: 'same-origin'\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchMatchingSamples(searchString) {\n    const promise = fetch(`/api/v1/inbox/samples?search_string=${searchString}`, {\n      credentials: 'same-origin'\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static assignToAnalysis(attachmentId, sampleId) {\n    const promise = fetch(`/api/v1/inbox/samples/${attachmentId}?attachment_id=${sampleId}`, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n}\n","import 'whatwg-fetch';\n\nexport default class InventoryFetcher {\n  static updateInventoryLabel(params) {\n    const promise = fetch('/api/v1/inventory/update_inventory_label', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => response.json()).then((json) => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n\n  static fetchLabelsAndCollections() {\n    const promise = fetch('/api/v1/inventory/user_inventory_collections', {\n      credentials: 'same-origin',\n      method: 'GET',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n    }).then((response) => response.json()).then((json) => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n\n  static fetchInventoryOfCollection(collectionId) {\n    const promise = fetch(`/api/v1/inventory/${collectionId}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n    }).then((response) => response.json()).then((json) => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n}\n","import 'whatwg-fetch';\n\nexport default class MessagesFetcher {\n  static configuration() {\n    return fetch('/api/v1/messages/config.json', {\n      credentials: 'same-origin'\n    }).then(response => response.json()).then(json => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static fetchMessages(isAck) {\n    return fetch(`/api/v1/messages/list.json?is_ack=${isAck}`, {\n      credentials: 'same-origin'\n    }).then(response => response.json()).then(json => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static fetchSpectraMessages(isAck) {\n    return fetch(`/api/v1/messages/spectra.json?is_ack=${isAck}`, {\n      credentials: 'same-origin'\n    }).then(response => response.json()).then(json => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static fetchChannels(channelType) {\n    return fetch(`/api/v1/messages/channels.json?channel_type=${channelType}`, {\n      credentials: 'same-origin'\n    }).then(response => response.json()).then(json => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static fetchChannelWithUser() {\n    return fetch('/api/v1/messages/channels_user.json', {\n      credentials: 'same-origin'\n    }).then(response => response.json()).then(json => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static channelIndividualUsers() {\n    return fetch('/api/v1/messages/channel_individual.json', {\n      credentials: 'same-origin'\n    }).then(response => response.json()).then(json => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static acknowledgedMessage(params) {\n    return fetch('/api/v1/messages/ack/', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify(params)\n    }).then(response => response.json()).then(json => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static subscribeChannel(params) {\n    return fetch('/api/v1/messages/subscribe/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify(params)\n    }).then(response => response.json()).then(json => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static createMessage(params) {\n    return fetch('/api/v1/messages/new/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify(params)\n    }).then(response => response.json()).then(json => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n}\n","import Metadata from 'src/models/Metadata';\n\nexport default class MetadataFetcher {\n  static fetch(id) {\n    return fetch(`/api/v1/collections/${id}/metadata/`, {\n      credentials: 'same-origin'\n    })\n    .then(response => {\n      if (response.status == 404) {\n        return null\n      } else {\n        return response.json()\n      }\n    })\n    .then(json => {\n      if (json === null) {\n        return Metadata.buildEmpty(id)\n      } else {\n        return new Metadata(Object.assign({type: 'metadata'}, json))\n      }\n    })\n  }\n\n  static store(metadata) {\n    return fetch(`/api/v1/collections/${metadata.collection_id}/metadata/`, {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(metadata.serialize())\n    }).then((response) => {\n      return response.json()\n    }).then((json) => {\n      return new Metadata(Object.assign({type: 'metadata'}, json))\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n}\n","import 'whatwg-fetch';\n\nexport default class MoleculesFetcher {\n  static fetchSciFinder(params) {\n    return fetch('/api/v1/molecules/sf', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify(params)\n    }).then(response => response.json()).then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static fetchByMolfile(molfile, svgfile, editor = 'ketcher', decoupled = false) {\n    return fetch('/api/v1/molecules', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify({\n        molfile, svg_file: svgfile, editor, decoupled\n      })\n    }).then(response => response.json()).then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static fetchBySmi(smi, svgfile, molfile, editor = 'ketcher') {\n    return fetch('/api/v1/molecules/smiles', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify({\n        smiles: smi, svg_file: svgfile, layout: molfile, editor\n      })\n    }).then(response => response.json()).then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static fetchCas(inchikey) {\n    return fetch(`/api/v1/molecules/cas?inchikey=${inchikey}`, {\n      credentials: 'same-origin'\n    }).then(response => response.json()).then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static updateNames(inchikey, newMolName = '') {\n    return fetch(`/api/v1/molecules/names?inchikey=${inchikey}` +\n      `&new_name=${escape(newMolName)}`, {\n      credentials: 'same-origin',\n    }).then(response => response.json()).then(json => json.molecules)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static computePropsFromSmiles(sampleId) {\n    return fetch('/api/v1/molecules/compute', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify({ sampleId })\n    }).then(response => response.json())\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static getByInChiKey(inchikey) {\n    return fetch('/api/v1/molecules/inchikey', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify({ inchikey })\n    }).then(response => response.json())\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static renewSVGFile(id, svgFile, isChemdraw = false) {\n    return fetch('/api/v1/molecules/svg', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify({ id, svg_file: svgFile, is_chemdraw: isChemdraw })\n    }).then(response => response.json())\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static updateMolfileSVG(molecule) {\n    return fetch('/api/v1/molecules/editor', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify({\n        id: molecule.id, molfile: molecule.molfile, svg_file: molecule.molecule_svg_file\n      })\n    }).then(response => response.json())\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static deleteMoleculeName(params) {\n    return fetch('/api/v1/molecules/delete_name', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static saveMoleculeName(params) {\n    return fetch('/api/v1/molecules/save_name', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static decouple(molfile, svgfile, decoupled = false) {\n    return fetch('/api/v1/molecules/decouple', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify({ molfile, svg_name: svgfile, decoupled })\n    }).then(response => response.json()).then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static calculateMolecularMassFromSumFormula(molecularFormula) {\n    const encodedMolecularFormula = encodeURIComponent(molecularFormula);\n\n    const promise = fetch(`/api/v1/molecules/molecular_weight?molecular_formula=${encodedMolecularFormula}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n    }).then((response) => response.json()).then((json) => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n}\n","import 'whatwg-fetch';\n\nexport default class PrintCodeFetcher {\n  static fetchPrintCodes(url) {\n    // Request options for fetching the PDF.\n    const requestOptions = {\n      credentials: 'same-origin',\n      method: 'GET',\n    };\n    // Fetch the PDF and set the preview.\n    return fetch(url, requestOptions)\n      .then((response) => response.blob())\n      .then((blob) => ({ type: blob.type, data: URL.createObjectURL(blob) }))\n      .then((result) => result.data)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchMergedPrintCodes(url) {\n    // Request options for fetching the PDF.\n    const requestOptions = {\n      credentials: 'same-origin',\n      method: 'GET',\n    };\n    // Fetch the PDF\n    return fetch(url, requestOptions)\n      .then((response) => response.blob())\n      .then((result) => result.arrayBuffer())\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n}\n","import 'whatwg-fetch';\nimport PrivateNote from 'src/models/PrivateNote';\n\n// improved function for classifying strings - to fix research_plan being an invalid noteable type\n// takes into account any _ in strings and returns string: String_test => StringTest\nfunction classify(string) {\n  if (string.includes('_')) {\n    var substrings = string.split('_');\n    for (let i = 0; i < substrings.length; i++) {\n      substrings[i] = substrings[i].charAt(0).toUpperCase() + substrings[i].slice(1);\n    }\n    string = substrings.join('')\n  }\n  else {\n    string = string.charAt(0).toUpperCase() + string.slice(1);\n  }\n  return string;\n}\n\nexport default class PrivateNoteFetcher {\n  static fetchById(id) {\n    return fetch(`/api/v1/private_notes/${id}.json`, {\n      credentials: 'same-origin'\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchByNoteableId(noteable_id, noteable_type) {\n    return fetch(`/api/v1/private_notes?noteable_id=${noteable_id}&noteable_type=${classify(noteable_type)}`, {\n      credentials: 'same-origin',\n    }).then(response => response.json())\n      .then(json => new PrivateNote(json.note))\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static create(prms) {\n    const params = { ...prms };\n    if (prms.noteable_type) {\n      params.noteable_type = classify(prms.noteable_type);\n    }\n    return fetch('/api/v1/private_notes', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => new PrivateNote(json.note))\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static update(privateNote) {\n    return fetch(`/api/v1/private_notes/${privateNote.id}`, {\n      credentials: 'same-origin',\n      method: 'put',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(privateNote.serialize())\n    }).then(response => response.json())\n      .then(json => new PrivateNote(json.note))\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","import 'whatwg-fetch';\n\nexport default class ReactionSvgFetcher {\n\n  static fetchByMaterialsSvgPaths(materialsSvgPaths, temperature, solvents, duration, conditions) {\n    const promise = fetch('/api/v1/reaction_svg', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        materials_svg_paths: materialsSvgPaths,\n        temperature,\n        duration,\n        solvents,\n        conditions: (typeof conditions === 'string') ? conditions : '',\n      })\n    }).then((response) => {\n      return response.status == 201 ? response.json() : {}\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n}\n","import 'whatwg-fetch';\nimport Immutable from 'immutable';\n\nimport BaseFetcher from 'src/fetchers/BaseFetcher';\nimport Reaction from 'src/models/Reaction';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport Literature from 'src/models/Literature';\nimport GenericElsFetcher from 'src/fetchers/GenericElsFetcher';\nimport defaultAnalysisPublish from 'src/components/utils/defaultAnalysisPublish';\nimport ResearchPlansFetcher from 'src/fetchers/ResearchPlansFetcher';\nimport GasPhaseReactionActions from 'src/stores/alt/actions/GasPhaseReactionActions';\n\n// TODO: Extract common base functionality into BaseFetcher\nexport default class ReactionsFetcher {\n  static async fetchById(id) {\n    try {\n      const response = await fetch(`/api/v1/reactions/${id}.json`, {\n        credentials: 'same-origin'\n      }).then((response) => response.json())\n        .then((json) => {\n          const userLabels = json?.reaction?.tag?.taggable_data?.user_labels || null;\n          if (json.hasOwnProperty('reaction')) {\n            const reaction = new Reaction(json.reaction);\n            const { catalystMoles, vesselSize } = reaction.findReactionVesselSizeCatalystMaterialValues();\n            if (vesselSize) {\n              GasPhaseReactionActions.setReactionVesselSize(vesselSize);\n            }\n            if (catalystMoles) {\n              GasPhaseReactionActions.setCatalystReferenceMole(catalystMoles);\n            }\n            if (json.literatures && json.literatures.length > 0) {\n              const tliteratures = json.literatures.map((literature) => new Literature(literature));\n              const lits = tliteratures.reduce((acc, l) => acc.set(l.literal_id, l), new Immutable.Map());\n              reaction.literatures = lits;\n            }\n            if (json.research_plans && json.research_plans.length > 0) {\n              reaction.research_plans = json.research_plans;\n            }\n            reaction.updateMaxAmountOfProducts();\n            reaction.publication = json.publication || {};\n            if (userLabels != null) reaction.user_labels = userLabels;\n            return new Reaction(defaultAnalysisPublish(reaction));\n          }\n          const rReaction = new Reaction(json.reaction);\n          rReaction.publication = json.publication || {};\n          if (userLabels != null) rReaction.setUserLabels(userLabels);\n          if (json.error) {\n            rReaction.id = `${id}:error:Reaction ${id} is not accessible!`;\n          }\n          return new Reaction(defaultAnalysisPublish(rReaction));\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n      const researchPlans = await ResearchPlansFetcher.fetchResearchPlansForElements(id, response.type);\n      response.research_plans = researchPlans;\n      return response;\n    } catch (error) {\n      console.error(error);\n    }\n  }\n\n  static fetchByCollectionId(id, queryParams = {}, isSync = false) {\n    return BaseFetcher.fetchByCollectionId(id, queryParams, isSync, 'reactions', Reaction);\n  }\n\n  static findByShortLabel(shortLabel) {\n    return fetch(\n      `/api/v1/reactions/findByShortLabel/${shortLabel}.json`,\n      {\n        credentials: 'same-origin',\n        headers: { 'Content-Type': 'application/json' }\n      }\n    ).then((response) => response.json()).catch((errorMessage) => console.log(errorMessage));\n  }\n\n  static create(reaction, method = 'post') {\n    const newReaction = defaultAnalysisPublish(reaction);\n    const reactionFiles = AttachmentFetcher.getFileListfrom(newReaction.container);\n    let productsFiles = [];\n    newReaction.products.forEach((prod) => {\n      const files = AttachmentFetcher.getFileListfrom(prod.container);\n      productsFiles = [...productsFiles, ...files];\n    });\n    const allFiles = reactionFiles.concat(productsFiles);\n\n    const promise = () => fetch(`/api/v1/reactions/${method === 'post' ? '' : newReaction.id}`, {\n      credentials: 'same-origin',\n      method,\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(newReaction.serialize())\n    }).then((response) => response.json())\n      .then((json) => GenericElsFetcher.uploadGenericFiles(newReaction, json.reaction.id, 'Reaction')\n        .then(() => ReactionsFetcher.updateAnnotationsInReaction(newReaction))\n        .then(() => this.fetchById(json.reaction.id))).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    if (allFiles.length > 0) {\n      const tasks = [];\n      allFiles.forEach((file) => tasks.push(AttachmentFetcher.uploadFile(file).then()));\n      return Promise.all(tasks).then(() => promise());\n    }\n\n    return promise();\n  }\n\n  static updateAnnotationsInReaction(reaction) {\n    const tasks = [];\n    tasks.push(BaseFetcher.updateAnnotationsInContainer(reaction));\n    reaction.products.forEach((e) => tasks.push(BaseFetcher.updateAnnotationsInContainer(e)));\n    return Promise.all(tasks);\n  }\n\n  static update(reaction) {\n    return ReactionsFetcher.create(reaction, 'put');\n  }\n}\n","import 'whatwg-fetch';\nimport _ from 'lodash';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nexport default class ReportsFetcher {\n  static getDois(elements) {\n    let promise = fetch('/api/v1/reports/dois/', {\n        credentials: 'same-origin',\n        method: 'POST',\n        headers: {\n          'Accept': 'application/json',\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify({ elements }),\n      })\n      .then((response) => {\n        return response.json()\n      }).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n      return promise;\n  }\n  static fetchArchives() {\n    let promise = fetch('/api/v1/archives/all', {\n      credentials: 'same-origin'\n    })\n      .then((response) => {\n        return response.json()\n      }).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static deleteArchive(archive_id) {\n    let promise = fetch(`/api/v1/archives/${archive_id}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n    })\n      .then((response) => {\n        if (response.status == 200) { return archive_id }\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchDownloadable(ids) {\n    let promise = fetch('/api/v1/archives/downloadable/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ ids: ids }),\n    })\n      .then((response) => {\n        return response.json()\n      }).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static create(report) {\n    let promise = fetch('/api/v1/reports', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(report),\n    }).then((response) => {\n      return response.json()\n    }).then((json) => {\n      if (json.error) {\n        NotificationActions.add({\n          title: json.error,\n          message: 'Please reload the page to try it again!',\n          level: 'error',\n          dismissible: 'button',\n          position: 'tr',\n        });\n\n        return null;\n      }\n      return json;\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n\n  static createDownloadFile(params, filename, route = 'export_samples_from_selections') {\n    let file_name = filename\n    let promise = fetch(`/api/v1/reports/${route}`, {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        'Accept': 'application/vnd.ms-excel, chemical/x-mdl-sdfile, text/csv, application/zip, application/octet-stream',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params),\n    }).then((response) => {\n      const disposition = response.headers.get('Content-Disposition')\n      if (disposition && disposition.indexOf('attachment') !== -1) {\n        let filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n        let matches = filenameRegex.exec(disposition);\n        if (matches != null && matches[1]) {\n          file_name = matches[1].replace(/['\"]/g, '');\n        }\n      }\n      return response.blob()\n    }).then((blob) => {\n      const a = document.createElement(\"a\");\n      a.style = \"display: none\";\n      document.body.appendChild(a);\n      let url = window.URL.createObjectURL(blob);\n      a.href = url;\n      a.download = file_name\n      a.click();\n      window.URL.revokeObjectURL(url);\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n\n}\n","import 'whatwg-fetch';\nimport _ from 'lodash';\nimport ResearchPlan from 'src/models/ResearchPlan';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport BaseFetcher from 'src/fetchers/BaseFetcher';\nimport GenericElsFetcher from 'src/fetchers/GenericElsFetcher';\n\nimport { getFileName, downloadBlob } from 'src/utilities/FetcherHelper';\n\nexport default class ResearchPlansFetcher {\n  static fetchById(id) {\n    const promise = fetch(`/api/v1/research_plans/${id}.json`, {\n      credentials: 'same-origin'\n    })\n      .then((response) => response.json()).then((json) => {\n        const rResearchPlan = new ResearchPlan(json.research_plan);\n        rResearchPlan.attachments = json.attachments;\n        if (json.error) {\n          rResearchPlan.id = `${id}:error:ResearchPlan ${id} is not accessible!`;\n        }\n        return rResearchPlan;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchByCollectionId(id, queryParams = {}, isSync = false) {\n    return BaseFetcher.fetchByCollectionId(id, queryParams, isSync, 'research_plans', ResearchPlan);\n  }\n\n  static create(researchPlan) {\n    researchPlan.convertTemporaryImageFieldsInBody();\n\n    const promise = fetch('/api/v1/research_plans/', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(researchPlan.serialize())\n    })\n      .then((response) => response.json())\n      .then((json) => AttachmentFetcher.updateAttachables(\n        researchPlan.getNewAttachments(),\n        'ResearchPlan',\n        json.research_plan.id,\n        researchPlan.getMarkedAsDeletedAttachments()\n      )().then(() => GenericElsFetcher.uploadGenericFiles(researchPlan, json.research_plan.id, 'ResearchPlan', true)\n        .then(() => this.fetchById(json.research_plan.id))))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static update(researchPlan) {\n    const containerFiles = AttachmentFetcher.getFileListfrom(researchPlan.container);\n    researchPlan.convertTemporaryImageFieldsInBody();\n\n    const promise = () => fetch(`/api/v1/research_plans/${researchPlan.id}`, {\n      credentials: 'same-origin',\n      method: 'put',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(researchPlan.serialize())\n    }).then((response) => response.json())\n      .then((json) => AttachmentFetcher.updateAttachables(\n        researchPlan.getNewAttachments(),\n        'ResearchPlan',\n        json.research_plan.id,\n        researchPlan.getMarkedAsDeletedAttachments()\n      )().then(() => GenericElsFetcher.uploadGenericFiles(researchPlan, json.research_plan.id, 'ResearchPlan', true)\n        .then(() => BaseFetcher.updateAnnotations(researchPlan))\n        .then(() => this.fetchById(researchPlan.id))))\n      .catch((errorMessage) => { console.log(errorMessage); });\n\n    if (containerFiles.length > 0) {\n      const tasks = [];\n      containerFiles.forEach((file) => tasks.push(AttachmentFetcher.uploadFile(file).then()));\n      return Promise.all(tasks).then(() => promise());\n    }\n    return promise();\n  }\n\n  static updateSVGFile(svg_file, isChemdraw = false) {\n    const promise = () => fetch('/api/v1/research_plans/svg', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ svg_file, is_chemdraw: isChemdraw })\n    }).then((response) => response.json()).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise();\n  }\n\n  static updateImageFile(image_file, replace) {\n    const data = new FormData();\n    data.append('file', image_file);\n\n    if (replace) {\n      data.append('replace', replace);\n    }\n\n    const promise = () => fetch('/api/v1/research_plans/image', {\n      credentials: 'same-origin',\n      method: 'post',\n      body: data\n    }).then((response) => response.json()).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise();\n  }\n\n  static export(researchPlan, exportFormat) {\n    let file_name;\n    const promise = fetch(`/api/v1/research_plans/${researchPlan.id}/export/?export_format=${exportFormat}`, {\n      credentials: 'same-origin',\n      method: 'get',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => {\n      if (response.ok) {\n        file_name = getFileName(response);\n        return response.blob();\n      }\n      console.log(response);\n    }).then((blob) => {\n      downloadBlob(file_name, blob);\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n\n  static exportTable(researchPlan, field) {\n    let file_name;\n    const promise = fetch(`/api/v1/research_plans/${researchPlan.id}/export_table/${field.id}/`, {\n      credentials: 'same-origin',\n      method: 'get',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => {\n      if (response.ok) {\n        file_name = getFileName(response);\n        return response.blob();\n      }\n      throw Error(response.statusText);\n    }).then((blob) => {\n      downloadBlob(file_name, blob);\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n\n  static fetchTableSchemas() {\n    return fetch('/api/v1/research_plans/table_schemas/', {\n      credentials: 'same-origin',\n      method: 'get',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => {\n      if (response.ok) {\n        return response.json();\n      }\n      throw Error(response.statusText);\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static createTableSchema(name, value) {\n    return fetch('/api/v1/research_plans/table_schemas/', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ name, value })\n    }).then((response) => response.json()).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static deleteTableSchema(id) {\n    return fetch(`/api/v1/research_plans/table_schemas/${id}`, {\n      credentials: 'same-origin',\n      method: 'delete',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => response.json()).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static postResearchPlanMetadata(params) {\n    return fetch('/api/v1/research_plan_metadata', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static importWellplate(id, wellplateId) {\n    return fetch(\n      `/api/v1/research_plans/${id}/import_wellplate/${wellplateId}`,\n      {\n        credentials: 'same-origin',\n        method: 'POST',\n        headers: {\n          Accept: 'application/json',\n          'Content-Type': 'application/json'\n        },\n        body: '{}'\n      }\n    ).then((response) => response.json())\n      .then((json) => {\n        const updatedResearchPlan = new ResearchPlan(json.research_plan);\n        updatedResearchPlan._checksum = updatedResearchPlan.checksum();\n        updatedResearchPlan.attachments = json.attachments;\n        return updatedResearchPlan;\n      }).catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static importTableFromSpreadsheet(id, attachmentId) {\n    return fetch(\n      `/api/v1/research_plans/${id}/import_table/${attachmentId}`,\n      {\n        credentials: 'same-origin',\n        method: 'POST',\n        headers: {\n          Accept: 'application/json',\n          'Content-Type': 'application/json'\n        },\n        body: '{}'\n      }\n    ).then((response) => response.json())\n      .then((json) => {\n        const updatedResearchPlan = new ResearchPlan(json.research_plan);\n        updatedResearchPlan._checksum = updatedResearchPlan.checksum();\n        updatedResearchPlan.attachments = json.attachments;\n        return updatedResearchPlan;\n      }).catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchResearchPlansForElements(id, element) {\n    return fetch(`/api/v1/research_plans/linked?id=${id}&element=${element}`, {\n      credentials: 'same-origin',\n      method: 'get',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","import 'whatwg-fetch';\n\nimport Sample from 'src/models/Sample';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport BaseFetcher from 'src/fetchers/BaseFetcher';\nimport GenericElsFetcher from 'src/fetchers/GenericElsFetcher';\nimport defaultAnalysisPublish from 'src/components/utils/defaultAnalysisPublish';\n\nexport default class SamplesFetcher {\n  static fetchSamplesByUIStateAndLimit(params) {\n    const limit = params.limit ? limit : null;\n\n    return fetch('/api/v1/samples/ui_state/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        ui_state: {\n          all: params.sample.all,\n          included_ids: params.sample.included_ids,\n          excluded_ids: params.sample.excluded_ids,\n          collection_id: params.sample.collection_id\n        },\n        limit: params.limit\n      })\n    }).then((response) => response.json())\n      .then((json) => json.samples.map((s) => new Sample(s)))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchById(id) {\n    const promise = fetch(`/api/v1/samples/${id}.json`, {\n      credentials: 'same-origin'\n    })\n      .then((response) => response.json()).then((json) => {\n        const rSample = new Sample(json.sample);\n        if (json.error) {\n          rSample.id = `${id}:error:Sample ${id} is not accessible!`;\n        }\n        return new Sample(defaultAnalysisPublish(rSample));\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static fetchByCollectionId(id, queryParams = {}, isSync = false, moleculeSort = false) {\n    const updatedQueryParams = { ...queryParams, moleculeSort };\n    return BaseFetcher.fetchByCollectionId(id, updatedQueryParams, isSync, 'samples', Sample);\n  }\n\n  static findByShortLabel(shortLabel) {\n    return fetch(\n      `/api/v1/samples/findByShortLabel/${shortLabel}.json`,\n      {\n        credentials: 'same-origin',\n        headers: { 'Content-Type': 'application/json' }\n      }\n    ).then((response) => response.json()).catch((errorMessage) => console.log(errorMessage));\n  }\n\n  static update(s) {\n    const sample = defaultAnalysisPublish(s);\n    const files = AttachmentFetcher.getFileListfrom(sample.container);\n    const promise = () => fetch(`/api/v1/samples/${sample.id}`, {\n      credentials: 'same-origin',\n      method: 'put',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(sample.serialize())\n    }).then((response) => response.json())\n      .then((json) => GenericElsFetcher.uploadGenericFiles(sample, json.sample.id, 'Sample')\n        .then(() => BaseFetcher.updateAnnotationsInContainer(sample))\n        .then(() => this.fetchById(json.sample.id))).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    if (files.length > 0) {\n      const tasks = [];\n      files.forEach((file) => tasks.push(AttachmentFetcher.uploadFile(file).then()));\n      return Promise.all(tasks).then(() => promise());\n    }\n\n    return promise();\n  }\n\n  static create(s) {\n    const sample = defaultAnalysisPublish(s);\n    let files = AttachmentFetcher.getFileListfrom(sample.container)\n    let promise = ()=> fetch('/api/v1/samples', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(sample.serialize())\n    }).then((response) => response.json())\n      .then((json) => GenericElsFetcher.uploadGenericFiles(sample, json.sample.id, 'Sample')\n        .then(() => this.fetchById(json.sample.id))).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    if (files.length > 0) {\n      const tasks = [];\n      files.forEach((file) => tasks.push(AttachmentFetcher.uploadFile(file)));\n      return Promise.all(tasks).then(() => promise());\n    }\n\n    return promise();\n  }\n\n  static splitAsSubsamples(params) {\n    const promise = fetch('/api/v1/samples/subsamples/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        ui_state: {\n          sample: {\n            all: params.sample.checkedAll,\n            included_ids: params.sample.checkedIds,\n            excluded_ids: params.sample.uncheckedIds\n          },\n          currentCollectionId: params.currentCollection.id\n        }\n      })\n    }).then((response) => response.json()).then((json) => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n\n  static importSamplesFromFile(params) {\n    const data = new FormData();\n    data.append('file', params.file);\n    data.append('currentCollectionId', params.currentCollectionId);\n    data.append('import_type', params.type);\n\n    const promise = fetch('/api/v1/samples/import/', {\n      credentials: 'same-origin',\n      method: 'post',\n      body: data\n    }).then((response) => response.json())\n      .then((json) => json).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static importSamplesFromFileConfirm(params) {\n    const promise = fetch('/api/v1/samples/confirm_import/', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        currentCollectionId: params.currentCollectionId,\n        rows: params.rows,\n        mapped_keys: params.mapped_keys,\n      })\n    }).then((response) => {\n      response.json();\n    }).then((json) => {\n      if (Array.isArray(json.error_messages)) {\n        json.error_messages.forEach((message) => {\n          NotificationActions.add({\n            message,\n            level: 'error',\n            autoDismiss: 10\n          });\n        });\n      } else {\n        NotificationActions.add({\n          message: json.error_messages || json.message,\n          level: json.message ? 'success' : 'error',\n          autoDismiss: 10\n        });\n      }\n      return json;\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n\n  static updateXvial(id, type, data) {\n    return fetch('/api/v1/samples/xvial/update', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ id, type, data })\n    }).then(response => response.json())\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n}\n","import 'whatwg-fetch';\nimport Screen from 'src/models/Screen';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher'\nimport BaseFetcher from 'src/fetchers/BaseFetcher';\nimport GenericElsFetcher from 'src/fetchers/GenericElsFetcher';\n\nexport default class ScreensFetcher {\n  static fetchById(id) {\n    let promise = fetch('/api/v1/screens/' + id + '.json', {\n      credentials: 'same-origin'\n    })\n      .then((response) => {\n        return response.json()\n      }).then((json) => {\n        const rScreen = new Screen(json.screen);\n        if (json.error) {\n          rScreen.id = `${id}:error:Screen ${id} is not accessible!`;\n        }\n        return rScreen;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static fetchByCollectionId(id, queryParams = {}, isSync = false) {\n    return BaseFetcher.fetchByCollectionId(id, queryParams, isSync, 'screens', Screen);\n  }\n\n  static update(screen) {\n    const files = AttachmentFetcher.getFileListfrom(screen.container);\n\n    const promise = () => fetch(`/api/v1/screens/${screen.id}`, {\n      credentials: 'same-origin',\n      method: 'put',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(screen.serialize())\n    }).then(response => response.json())\n      .then(json => GenericElsFetcher.uploadGenericFiles(screen, json.screen.id, 'Screen')\n      .then(()=>BaseFetcher.updateAnnotationsInContainer(screen))\n      .then(() => this.fetchById(json.screen.id))).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n\n    if (files.length > 0) {\n      let tasks = [];\n      files.forEach(file => tasks.push(AttachmentFetcher.uploadFile(file).then()));\n      return Promise.all(tasks).then(() => {\n        return promise();\n      });\n    }\n\n  }\n\n  static create(screen) {\n    const files = AttachmentFetcher.getFileListfrom(screen.container);\n\n    const promise = () => fetch('/api/v1/screens/', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(screen.serialize())\n    }).then(response => response.json())\n      .then(json => GenericElsFetcher.uploadGenericFiles(screen, json.screen.id, 'Screen')\n        .then(() => this.fetchById(json.screen.id))).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n\n    if(files.length > 0){\n      return AttachmentFetcher.uploadFiles(files)().then(()=> promise());\n    }else{\n      return promise()\n    }\n\n  }\n\n  static addResearchPlan(screen_id, collection_id) {\n    return fetch(\n      `/api/v1/screens/${screen_id}/add_research_plan`,\n      {\n        credentials: 'same-origin',\n        method: 'POST',\n        headers: {\n          Accept: 'application/json',\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify({ collection_id })\n      }\n    ).then(response => response.json()).catch(errorMessage => console.log(errorMessage));\n  }\n}\n","import 'whatwg-fetch';\nimport Sample from 'src/models/Sample';\nimport Reaction from 'src/models/Reaction';\nimport Wellplate from 'src/models/Wellplate';\nimport CellLine from 'src/models/cellLine/CellLine';\nimport Screen from 'src/models/Screen';\nimport GenericEl from 'src/models/GenericEl';\nimport ResearchPlan from 'src/models/ResearchPlan';\n\nexport default class SearchFetcher {\n  static fetchBasedOnSearchSelectionAndCollection(params) {\n    const { selection, collectionId, page, isSync, moleculeSort, isPublic } = params;\n    return fetch(`/api/v1/search/${selection.elementType.toLowerCase()}`, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        selection,\n        collection_id: collectionId,\n        page: page || 1,\n        per_page: selection.page_size,\n        is_sync: isSync || false,\n        molecule_sort: moleculeSort || false,\n        is_public: isPublic || false,\n      })\n    }).then(response => response.json())\n      .then((json) => {\n        const { samples, reactions, wellplates, screens, research_plans, cell_lines } = json;\n        const result = { ...json };\n\n        Object.keys(json).forEach((key) => {\n          switch (key) {\n            case 'samples':\n              if (samples && samples.totalElements && samples.totalElements > 0) {\n                result.samples.elements = samples.elements.map(s => (new Sample(s)));\n              } else { result.samples = { elements: [], totalElements: 0, ids: [], error: result.samples.error }; }\n              break;\n            case 'reactions':\n              if (reactions && reactions.totalElements && reactions.totalElements > 0) {\n                result.reactions.elements = reactions.elements.map(r => (new Reaction(r)));\n              } else { result.reactions = { elements: [], totalElements: 0, ids: [], error: result.reactions.error }; }\n              break;\n            case 'wellplates':\n              if (wellplates && wellplates.totalElements && wellplates.totalElements > 0) {\n                result.wellplates.elements = wellplates.elements.map(s => (new Wellplate(s)));\n              } else { result.wellplates = { elements: [], totalElements: 0, ids: [], error: result.wellplates.error }; }\n              break;\n            case 'screens':\n              if (screens && screens.totalElements && screens.totalElements > 0) {\n                result.screens.elements = screens.elements.map(s => (new Screen(s)));\n              } else { result.screens = { elements: [], totalElements: 0, ids: [], error: result.screens.error }; }\n              break;\n            case 'research_plans':\n              if (research_plans && research_plans.totalElements && research_plans.totalElements > 0) {\n                result.research_plans.elements = research_plans.elements.map(s => (new ResearchPlan(s)));\n              } else { result.research_plans = { elements: [], totalElements: 0, ids: [], error: result.research_plans.error }; }\n              break;\n            case 'cell_lines':\n              if (cell_lines && cell_lines.totalElements && cell_lines.totalElements > 0) {\n                result.cell_lines.elements = cell_lines.elements.map(s => (CellLine.createFromRestResponse(0, s)));\n              } else { result.cell_lines = { elements: [], totalElements: 0, ids: [] }; }\n              break;\n            default:\n              result[`${key}`].elements = json[`${key}`].elements.map(s => (new GenericEl(s)));\n          }\n        });\n\n        return result;\n      }).catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchBasedOnSearchResultIds(params) {\n    const { selection, collectionId, page, isSync, moleculeSort, isPublic } = params;\n    return fetch(`/api/v1/search/${selection.elementType.toLowerCase()}`, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        selection,\n        collection_id: collectionId,\n        page: page || 1,\n        page_size: selection.page_size,\n        per_page: selection.page_size,\n        is_sync: isSync || false,\n        molecule_sort: moleculeSort || false,\n        is_public: isPublic || false,\n      })\n    }).then(response => response.json())\n      .then((json) => {\n        const { samples, reactions, wellplates, screens, research_plans } = json;\n        const result = { ...json };\n\n        Object.keys(json).forEach((key) => {\n          switch (key) {\n            case 'samples':\n              if (samples && samples.elements.length > 0) {\n                result.samples.elements = samples.elements.map(s => (new Sample(s)));\n              } else { result.samples = { elements: [], ids: [], totalElements: 0 }; }\n              break;\n            case 'reactions':\n              if (reactions && reactions.elements.length > 0) {\n                result.reactions.elements = reactions.elements.map(r => (new Reaction(r)));\n              } else { result.reactions = { elements: [], totalElements: 0, ids: [] }; }\n              break;\n            case 'wellplates':\n              if (wellplates && wellplates.elements.length > 0) {\n                result.wellplates.elements = wellplates.elements.map(s => (new Wellplate(s)));\n              } else { result.wellplates = { elements: [], totalElements: 0, ids: [] }; }\n              break;\n            case 'screens':\n              if (screens && screens.elements.length > 0) {\n                result.screens.elements = screens.elements.map(s => (new Screen(s)));\n              } else { result.screens = { elements: [], totalElements: 0, ids: [] }; }\n              break;\n            case 'research_plans':\n              if (research_plans && research_plans.elements.length > 0) {\n                result.research_plans.elements = research_plans.elements.map(s => (new ResearchPlan(s)));\n              } else { result.research_plans = { elements: [], totalElements: 0, ids: [] }; }\n              break;\n            default:\n              if (json[`${key}`] && json[`${key}`].elements !== undefined && json[`${key}`].elements.length > 0) {\n                result[`${key}`].elements = json[`${key}`].elements.map(s => (new GenericEl(s)));\n              } else { result[`${key}`] = { elements: [], totalElements: 0, ids: [] }; }\n              break;\n          }\n        });\n\n        return result;\n      }).catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","export default class SuggestionsFetcher {\n  static fetchSuggestionsForCurrentUser(elementType, query, collectId, isSync = false) {\n    const urlParams=new URLSearchParams({\n      query: encodeURIComponent(query),\n      collection_id: collectId,\n      is_sync: isSync}) \n      \n      elementType=elementType.replaceAll(\" \", \"_\");\n\n    return fetch(\n      `/api/v1/suggestions/${elementType}?`+urlParams,\n      { credentials: 'same-origin' }\n    ).then(response => response.json())\n      .then(json => json.suggestions)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","import 'whatwg-fetch';\n\nimport { camelize, decamelize } from 'humps';\n\nconst shallowCamelizeKeys = (obj) => {\n  return Object.keys(obj).reduce((newObj, key) => {\n    // eslint-disable-next-line no-param-reassign\n    newObj[camelize(key)] = obj[key];\n    return newObj;\n  }, {});\n};\n\nexport default class TextTemplatesFetcher {\n  static fetchTextTemplates(elementName) {\n    return fetch(`/api/v1/text_templates/by_type?type=${decamelize(elementName)}`, {\n      credentials: 'same-origin'\n    }).then(response => response.json())\n      .then(json => shallowCamelizeKeys(json))\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchPredefinedTemplateNames() {\n    return fetch('/api/v1/text_templates/predefinedNames', {\n      credentials: 'same-origin',\n      method: 'GET'\n    }).then(response => response.json())\n      .then(json => json.text_templates)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchPredefinedTemplateByNames(names) {\n    const params = names.map(n => `name[]=${encodeURIComponent(n)}`).join('&');\n\n    return fetch(`/api/v1/text_templates/by_name?${params}`, {\n      credentials: 'same-origin',\n      method: 'GET'\n    }).then(response => response.json())\n      .then(json => json.text_templates)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static updateTextTemplates(elementName, template) {\n    return fetch('/api/v1/text_templates/update', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ data: template, type: decamelize(elementName) })\n    }).then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static updatePredefinedTemplates(template) {\n    const method = template.id ? 'PUT' : 'POST';\n\n    return fetch('/api/v1/text_templates/predefined_text_template', {\n      credentials: 'same-origin',\n      method,\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(template)\n    }).then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static deletePredefinedTemplateByName(name) {\n    return fetch(`/api/v1/text_templates/by_name?name=${name}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n    }).then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","import 'whatwg-fetch';\nimport { ThirdPartyAppServices } from 'src/endpoints/ApiServices';\n\nconst { TPA_ENDPOINT } = ThirdPartyAppServices;\nconst TPA_ENDPOINT_ADMIN = `${TPA_ENDPOINT}/admin`;\n\nexport default class ThirdPartyAppFetcher {\n  static fetchThirdPartyApps(id = null) {\n    const url = id ? `${TPA_ENDPOINT}/${id}` : TPA_ENDPOINT;\n    return fetch(url, {\n      credentials: 'same-origin'\n    }).then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static createOrUpdateThirdPartyApp(id, name, url, file_types) {\n    const idPath = id ? `/${id}` : '';\n    return fetch(`${TPA_ENDPOINT_ADMIN}${idPath}`, {\n      credentials: 'same-origin',\n      method: id ? 'PUT' : 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ name, url, file_types })\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static deleteThirdPartyApp(id) {\n    return fetch(`${TPA_ENDPOINT_ADMIN}/${id}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n    }).then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchAttachmentToken(attID, appID) {\n    const queryParams = new URLSearchParams({ attID, appID }).toString();\n    const url = `${TPA_ENDPOINT}/token?${queryParams}`;\n    return fetch(url, {\n      credentials: 'same-origin'\n    }).then((response) => response.json())\n\n      .then((json) => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static getHandlerUrl(attID, type) {\n    const queryParams = new URLSearchParams({ attID, type }).toString();\n    const url = `${TPA_ENDPOINT}/url?${queryParams}`;\n    return fetch(url, {\n      credentials: 'same-origin'\n    }).then((response) => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","import 'whatwg-fetch';\nimport { camelizeKeys } from 'humps';\n\nimport Sample from 'src/models/Sample';\nimport Reaction from 'src/models/Reaction';\n\nexport default class UIFetcher {\n  static initialize() {\n    const promise = fetch('/api/v1/ui/initialize', {\n      credentials: 'same-origin',\n    }).then(response => response.json())\n      .then(json => camelizeKeys(json))\n      .catch(err => console.log(err)); // eslint-disable-line\n\n    return promise;\n  }\n\n  static fetchByUIState(params, method = 'POST') {\n    return fetch('/api/v1/ui_state/', {\n      credentials: 'same-origin',\n      method,\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then((json) => {\n        if (method === 'DELETE') { return json; }\n        const samples = json.samples.map(s => new Sample(s));\n        const reactions = json.reactions.map(r => new Reaction(r));\n        return { samples, reactions };\n      })\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static loadReport(params, loadType) {\n    const tParams = Object.assign({}, params, { loadType });\n\n    return fetch('/api/v1/ui_state/load_report', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(tParams),\n    }).then(response => response.json())\n      .then((json) => {\n        const samples = json.samples.map(s => new Sample(s));\n        const reactions = json.reactions.map(r => new Reaction(r));\n        return { samples, reactions };\n      })\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchNMRDisplayerHost() {\n    return fetch('/api/v1/chemspectra/nmrium_wrapper/host_name', {\n      credentials: 'same-origin',\n      method: 'GET',\n    }).then((response) => {\n      return response.json();\n    }).then((json) => {\n      return json;\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n}\n","/* eslint-disable arrow-parens */\nimport 'whatwg-fetch';\n\n// TODO: SamplesFetcher also updates Samples and so on...naming?\nexport default class UsersFetcher {\n  static fetchElementKlasses(genericOnly = true) {\n    let api = '/api/v1/generic_elements/klasses.json';\n    if (genericOnly) {\n      api = '/api/v1/generic_elements/klasses.json?generic_only=true';\n    }\n    return fetch(api, {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchElementKlassNames(genericOnly = true) {\n    let api = '/api/v1/labimotion_hub/element_klasses_name.json';\n    if (genericOnly) {\n      api = '/api/v1/labimotion_hub/element_klasses_name.json?generic_only=true';\n    }\n\n    return fetch(api, {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchOmniauthProviders() {\n    return fetch('/api/v1/public/omniauth_providers.json', {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchUsersByName(name, type = 'Person') {\n    const promise = fetch(\n      `/api/v1/users/name.json?${new URLSearchParams({ name, type })}`,\n      {\n        credentials: 'same-origin',\n      }\n    )\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchCurrentUser() {\n    const promise = fetch('/api/v1/users/current.json', {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchProfile() {\n    const promise = fetch('/api/v1/profiles.json', {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static updateUserProfile(params = {}) {\n    const promise = fetch('/api/v1/profiles/', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchNoVNCDevices(id = 0) {\n    return fetch(`/api/v1/devices/novnc?id=${id}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n    })\n      .then((response) => response.json())\n      .then((json) => json.devices)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static createGroup(params = {}) {\n    const promise = fetch('/api/v1/groups/create', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchCurrentGroup() {\n    const promise = fetch('/api/v1/groups/qrycurrent', {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchCurrentDevices() {\n    const promise = fetch('/api/v1/groups/queryCurrentDevices', {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchDeviceMetadataByDeviceId(deviceId) {\n    const promise = fetch(`/api/v1/groups/deviceMetadata/${deviceId}`, {\n      credentials: 'same-origin'\n    }).then(response => response.json()).then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchUserOmniauthProviders() {\n    return fetch('/api/v1/users/omniauth_providers.json', {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static updateGroup(params = {}) {\n    const promise = fetch(`/api/v1/groups/upd/${params.id}`, {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        id: params.id,\n        destroy_group: params.destroy_group,\n        rm_users: params.rm_users,\n        add_users: params.add_users,\n        add_admin: params.add_admin,\n        rm_admin: params.rm_admin,\n      }),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static fetchOls(name, edited = true) {\n    return fetch(`/api/v1/ols_terms/list.json?name=${name}&edited=${edited}`, {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static listEditors() {\n    const promise = fetch('/api/v1/users/list_editors.json', {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static listUserLabels() {\n    const promise = fetch('/api/v1/users/list_labels.json', {\n      credentials: 'same-origin',\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static updateUserLabel(params = {}) {\n    const promise = fetch('/api/v1/users/save_label/', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static updateUserCounter(params = {}) {\n    const promise = fetch('/api/v1/users/update_counter', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(params),\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    return promise;\n  }\n\n  static scifinderCredential() {\n    const promise = fetch('/api/v1/users/scifinder', {\n      credentials: 'same-origin',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n    })\n      .then((response) => response.json())\n      .then((json) => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static fetchUserKetcher2Options() {\n    const promise = fetch('/api/v1/profiles/editors/ketcher2-options', {\n      credentials: 'same-origin',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' }\n    }).then(response => response.json()).then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static updateUserKetcher2Options(list) {\n    const data = JSON.parse(list);\n    const promise = fetch('/api/v1/profiles/editors/ketcher2-options', {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        data\n      })\n    }).then(response => response.json()).then(json => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n\n  static findAndCreateAff(params = {}) {\n    return fetch('/api/v1/collaborators/find_add_aff', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","import 'whatwg-fetch';\nimport Wellplate from 'src/models/Wellplate';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport BaseFetcher from 'src/fetchers/BaseFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nexport default class WellplatesFetcher {\n  static fetchById(id) {\n    const promise = fetch(`/api/v1/wellplates/${id}.json`, {\n      credentials: 'same-origin'\n    })\n      .then((response) => response.json()).then((json) => {\n        const rWellplate = new Wellplate(json.wellplate);\n        rWellplate.attachments = json.attachments;\n        // eslint-disable-next-line no-underscore-dangle\n        rWellplate._checksum = rWellplate.checksum();\n        if (json.error) {\n          return new Wellplate({ id: `${id}:error:Wellplate ${id} is not accessible!`, wells: [], is_new: true });\n        }\n        return rWellplate;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static fetchByCollectionId(id, queryParams = {}, isSync = false) {\n    return BaseFetcher.fetchByCollectionId(id, queryParams, isSync, 'wellplates', Wellplate);\n  }\n\n  static bulkCreateWellplates(params) {\n    const promise = fetch('/api/v1/wellplates/bulk', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n\n  static update(wellplate) {\n    const containerFiles = AttachmentFetcher.getFileListfrom(wellplate.container);\n    const newFiles = (wellplate.attachments || []).filter((a) => a.is_new && !a.is_deleted);\n    const delFiles = (wellplate.attachments || []).filter((a) => !a.is_new && a.is_deleted);\n\n    const promise = () => fetch(`/api/v1/wellplates/${wellplate.id}`, {\n      credentials: 'same-origin',\n      method: 'put',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(wellplate.serialize())\n    }).then((response) => response.json()).then((json) => {\n      if (newFiles.length <= 0 && delFiles.length <= 0) {\n        return;\n      }\n      return AttachmentFetcher.updateAttachables(newFiles, 'Wellplate', json.wellplate.id, delFiles)();\n    })\n      .then(() => BaseFetcher.updateAnnotations(wellplate))\n      .then(() => WellplatesFetcher.fetchById(wellplate.id))\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    if (containerFiles.length > 0) {\n      const tasks = [];\n      containerFiles.forEach((file) => tasks.push(AttachmentFetcher.uploadFile(file).then()));\n      return Promise.all(tasks).then(() => promise());\n    }\n    return promise();\n  }\n\n  static create(wellplate) {\n    const containerFiles = AttachmentFetcher.getFileListfrom(wellplate.container);\n    const files = (wellplate.attachments || []).filter((a) => a.is_new && !a.is_deleted);\n\n    const promise = () => fetch('/api/v1/wellplates/', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(wellplate.serialize())\n    })\n      .then((response) => response.json())\n      .then((json) => {\n        if (files.length <= 0) {\n          return new Wellplate(json.wellplate);\n        }\n        return AttachmentFetcher.updateAttachables(files, 'Wellplate', json.wellplate.id, [])()\n          .then(() => new Wellplate(json.wellplate));\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n\n    if (containerFiles.length > 0) {\n      const tasks = [];\n      containerFiles.forEach((file) => tasks.push(AttachmentFetcher.uploadFile(file).then()));\n      return Promise.all(tasks).then(() => promise());\n    }\n    return promise();\n  }\n\n  static fetchWellplatesByUIState(params) {\n    return fetch('/api/v1/wellplates/ui_state/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        ui_state: {\n          all: params.wellplate.all,\n          included_ids: params.wellplate.included_ids,\n          excluded_ids: params.wellplate.excluded_ids,\n          collection_id: params.wellplate.collection_id\n        }\n      })\n    }).then((response) => response.json()).then((json) => json.wellplates.map((w) => new Wellplate(w))).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static splitAsSubwellplates(params) {\n    const promise = fetch('/api/v1/wellplates/subwellplates/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        ui_state: {\n          wellplate: {\n            all: params.wellplate.checkedAll,\n            included_ids: params.wellplate.checkedIds,\n            excluded_ids: params.wellplate.uncheckedIds\n          },\n          currentCollectionId: params.currentCollection.id\n        }\n      })\n    }).then((response) => response.json()).then((json) => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n\n  static updateWellLabel(params) {\n    const promise = fetch('/api/v1/wellplates/well_label', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => response.json()).then((json) => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n\n  static updateWellColorCode(params) {\n    const promise = fetch('/api/v1/wellplates/well_color_code', {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then((response) => response.json()).then((json) => json).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n    return promise;\n  }\n\n  static importWellplateSpreadsheet(wellplateId, attachmentId) {\n    const promise = fetch(`/api/v1/wellplates/import_spreadsheet/${wellplateId}`, {\n      credentials: 'same-origin',\n      method: 'PUT',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        wellplate_id: wellplateId,\n        attachment_id: attachmentId\n      })\n    }).then((response) => response.json())\n      .then((json) => {\n        if (json.error) {\n          let msg = 'Import to wellplate failed: ';\n          msg += json.error;\n          NotificationActions.add({\n            message: msg,\n            level: 'error'\n          });\n          return json;\n        }\n        NotificationActions.add({\n          message: 'Import successful.',\n          level: 'success'\n        });\n        const rWellplate = new Wellplate(json.wellplate);\n        rWellplate.attachments = json.attachments;\n        // eslint-disable-next-line no-underscore-dangle\n        rWellplate._checksum = rWellplate.checksum();\n        return rWellplate;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n}\n","\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport uuid from 'uuid';\n\nconst fa = klass => (<i className={klass} aria-hidden=\"true\" />);\nconst FaBtn = props => (\n  <OverlayTrigger placement={props.place} overlay={<Tooltip id={uuid.v4()}>{props.tip}</Tooltip>}>\n    <Button bsStyle={props.bsStyle} bsSize={props.bsSize} onClick={props.onClick} >\n      {props.txt}&nbsp;{fa(props.fa)}\n    </Button>\n  </OverlayTrigger>\n);\nFaBtn.propTypes = {\n  tip: PropTypes.string.isRequired,\n  txt: PropTypes.string.isRequired,\n  fa: PropTypes.string,\n  place: PropTypes.string,\n  bsStyle: PropTypes.string,\n  bsSize: PropTypes.string,\n  onClick: PropTypes.func,\n};\nFaBtn.defaultProps = {\n  fa: '',\n  place: 'top',\n  bsStyle: 'primary',\n  bsSize: 'small',\n  onClick: null,\n};\n\nconst EditorBtn = props => (\n  <div className=\"editor-btn\">\n    <FaBtn tip=\"Add Text Section\" txt=\"Add\" fa=\"fa fa-file-text-o\" onClick={() => props.onClick('txt')} />\n    <FaBtn tip=\"Add Image Section\" txt=\"Add\" fa=\"fa fa-picture-o\" onClick={() => props.onClick('img')} />\n  </div>\n);\n\nEditorBtn.propTypes = {\n  onClick: PropTypes.func,\n};\n\nEditorBtn.defaultProps = {\n  onClick: null,\n};\n\nconst EditorBaseBtn = props => (\n  <div className=\"editor-btn\">\n    {/* <FaBtn tip=\"Preview\" txt=\"Preview\" bsStyle=\"info\" onClick={onClick} /> */}\n    <FaBtn tip=\"Save\" txt=\"Save\" bsStyle=\"success\" onClick={() => props.onClick('save')} />\n    <FaBtn tip=\"Delete\" txt=\"Delete\" bsStyle=\"danger\" onClick={() => props.onClick('delete')} />\n  </div>\n);\n\nEditorBaseBtn.propTypes = {\n  onClick: PropTypes.func,\n};\n\nEditorBaseBtn.defaultProps = {\n  onClick: null,\n};\n\nexport {\n  FaBtn,\n  EditorBtn,\n  EditorBaseBtn,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DragSource } from 'react-dnd';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\n\nconst listSource = {\n  beginDrag(props) { return { sid: props.sid, stelle: props.stelle }; },\n};\n\nconst collectSource = (connect, monitor) => ({\n  connectDragSource: connect.dragSource(),\n  isDragging: monitor.isDragging(),\n});\n\nconst RepoHowToDragSource = ({ connectDragSource }) => connectDragSource(<span className=\"fa fa-lg fa-arrows text-info drag-source\" />);\n\nexport default DragSource(DragDropItemTypes.HOWTO, listSource, collectSource)(RepoHowToDragSource);\n\nRepoHowToDragSource.propTypes = {\n  connectDragSource: PropTypes.func.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { DropTarget } from 'react-dnd';\nimport { DragDropItemTypes } from 'src/utilities/DndConst';\n\nconst stelleTarget = {\n  drop(targetProps, monitor) {\n    const targetTag = { sid: targetProps.sid, stelle: targetProps.stelle };\n    const sourceProps = monitor.getItem();\n    const sourceTag = { sid: sourceProps.sid, stelle: sourceProps.stelle };\n    if (targetTag.sid !== sourceTag.sid) {\n      targetProps.onDrop({ sourceTag, targetTag });\n    }\n  }\n};\n\nconst stelleDropCollect = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop()\n});\n\n\nclass RepoHowToDropTarget extends Component {\n  render() {\n    const { connectDropTarget, isOver, canDrop } = this.props;\n    const className = `editor-field-drop-target${isOver ? ' is-over' : ''}${canDrop ? ' can-drop' : ''}`;\n    return connectDropTarget(<div className={className}><div className=\"indicator\" /></div>);\n  }\n}\n\nexport default DropTarget(\n  DragDropItemTypes.HOWTO,\n  stelleTarget, stelleDropCollect\n)(RepoHowToDropTarget);\n\nRepoHowToDropTarget.propTypes = {\n  connectDropTarget: PropTypes.func.isRequired,\n  isOver: PropTypes.bool.isRequired,\n  canDrop: PropTypes.bool.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport QuillEditor from 'src/components/QuillEditor';\n\nexport default class EditorRichText extends Component {\n  handleChange(e) {\n    this.props.onChange('quill', e);\n  }\n  render() {\n    return (\n      <div style={{ backgroundColor: 'white' }}>\n        <QuillEditor\n          value={this.props.quill}\n          onChange={e => this.handleChange(e)}\n          extraToolbarOptions={[['link'], [{ align: '' }, { align: 'center' }, { align: 'right' }, { align: 'justify' }]]}\n        />\n      </div>\n    );\n  }\n}\n\nEditorRichText.propTypes = {\n  quill: PropTypes.object,\n  onChange: PropTypes.func,\n};\n\nEditorRichText.defaultProps = {\n  quill: null,\n  onChange: null,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Dropzone from 'react-dropzone';\n\nexport default class EditorImage extends Component {\n  handleDrop(files) {\n    if (files && files.length > 0) {\n      this.props.onChange('pfad', files);\n    }\n  }\n  render() {\n    return (\n      <div style={{ backgroundColor: 'white' }}>\n        <Dropzone\n          accept=\"image/*\"\n          multiple={false}\n          onDrop={files => this.handleDrop(files)}\n          className=\"dropzone\"\n        >\n          {\n            this.props.pfad !== '' ?\n              <div className=\"image-container\">\n                <img src={`/${this.props.editor_type}/${this.props.pfad}`} alt=\"\" />\n              </div>\n              : <p>Drop Files, or Click to Select.</p>\n          }\n        </Dropzone>\n      </div>\n    );\n  }\n}\n\nEditorImage.propTypes = {\n  pfad: PropTypes.string,\n  onChange: PropTypes.func,\n  editor_type: PropTypes.string,\n};\n\nEditorImage.defaultProps = {\n  pfad: '',\n  onChange: null,\n  editor_type: '',\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col } from 'react-bootstrap';\nimport RepoHowToDragSource from 'src/repoHome/RepoHowToDragSource';\nimport RepoHowToDropTarget from 'src/repoHome/RepoHowToDropTarget';\nimport EditorRichText from 'src/libHome/RepoHowTo/EditorRichText';\nimport EditorImage from 'src/libHome/RepoHowTo/EditorImage';\nimport { FaBtn } from 'src/libHome/RepoHowTo/EditorBtn';\n\nexport default class EditorStelle extends Component {\n  handleChange(t, e) {\n    this.props.onChange(t, e, this.props.sid);\n  }\n\n  renderComponent() {\n    let label = '';\n    let component = <div />;\n    switch (this.props.stelle.art) {\n      case 'txt':\n        label = (<div className=\"editor-stelle\">Text Section</div>);\n        component =\n          (<EditorRichText\n            quill={this.props.stelle.quill}\n            onChange={(t, e) => this.handleChange(t, e)}\n            sid={this.props.sid}\n            editor_type={this.props.editor_type}\n          />);\n        break;\n      case 'img':\n        label = (<div className=\"editor-stelle\">Image Section</div>);\n        component =\n          (<EditorImage\n            pfad={this.props.stelle.pfad}\n            onChange={(t, e) => this.handleChange(t, e)}\n            sid={this.props.sid}\n            editor_type={this.props.editor_type}\n          />);\n        break;\n      default:\n    }\n\n    return (\n      <div>\n        {label}\n        {component}\n      </div>\n    );\n  }\n\n  render() {\n    return (\n      <Row>\n        <Col md={12} sm={12}>\n          <RepoHowToDropTarget\n            sid={this.props.sid}\n            stelle={this.props.stelle}\n            onDrop={this.props.onDrop}\n          />\n        </Col>\n        <Col md={12} sm={12}>\n          <div className=\"pull-right\">\n            <FaBtn tip=\"remove this section\" txt=\"\" fa=\"fa fa-trash-o\" bsStyle=\"danger\" bsSize=\"xsmall\" onClick={() => this.props.onRemove(this.props.sid)} />\n          </div>\n          <RepoHowToDragSource sid={this.props.sid} stelle={this.props.stelle} />\n          {this.renderComponent()}\n        </Col>\n      </Row>\n    );\n  }\n}\n\nEditorStelle.propTypes = {\n  sid: PropTypes.number.isRequired,\n  stelle: PropTypes.shape({\n    art: PropTypes.string,\n    quill: PropTypes.object,\n    pfad: PropTypes.string,\n  }).isRequired,\n  onDrop: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired,\n  onChange: PropTypes.func.isRequired,\n  editor_type: PropTypes.string.isRequired,\n};\n\n","import Element from 'src/models/Element'\nimport uuid from 'uuid';\n\nexport default class AnalysesExperiment extends Element {\n  constructor({\n    id, devices_analysis_id, holder_id, status, solvent, experiment, priority, on_day, sample_analysis_id,\n    number_of_scans, sweep_width, time, analysis_barcode, sample_short_label, sample_id, devices_sample_id\n  }) {\n    const analysis = {\n      id: id,\n      deviceAnalysisId: devices_analysis_id,\n      holderId: holder_id,\n      status: status,\n      solvent: solvent,\n      experiment: experiment,\n      priority: priority,\n      onDay: on_day,\n      numberOfScans: number_of_scans,\n      sweepWidth: sweep_width,\n      time: time,\n      analysisBarcode: analysis_barcode,\n      sampleShortLabel: sample_short_label,\n      sampleId: sample_id,\n      deviceSampleId: devices_sample_id,\n      sampleAnalysisId: sample_analysis_id,\n    }\n    super(analysis)\n  }\n\n  static buildEmpty(sampleId, sampleShortLabel, sampleAnalysisId, deviceSampleId) {\n    return new AnalysesExperiment({\n      id: uuid.v1(),\n      devices_sample_id: deviceSampleId,\n      devices_analysis_id: null,\n      holder_id: null,\n      status: \"\",\n      solvent: \"\",\n      experiment: \"\",\n      priority: false,\n      on_day: true,\n      number_of_scans: 0,\n      sweep_width: 0,\n      time: \"\",\n      analysis_barcode: \"\",\n      sample_short_label: sampleShortLabel,\n      sample_id: sampleId,\n      sample_analysis_id: sampleAnalysisId,\n    })\n  }\n\n  serialize() {\n    const serialized = super.serialize({\n      devices_analysis_id: this.deviceAnalysisId,\n      holder_id: this.holderId,\n      status: this.status,\n      solvent: this.solvent,\n      experiment: this.experiment,\n      priority: this.priority,\n      on_day: this.onDay,\n      number_of_scans: parseInt(this.numberOfScans, 10),\n      sweep_width: parseInt(this.sweepWidth, 10),\n      time: this.time,\n      sample_id: this.sampleId,\n      devices_sample_id: this.deviceSampleId,\n      sample_analysis_id: this.sampleAnalysisId,\n    })\n    return serialized\n  }\n\n  buildConfig() {\n    const configMap = {\n      'SOLVENT': this.solvent,\n      'EXPERIMENT': this.experiment,\n      'NAME': this.sampleShortLabel,\n      'BARCODE': this.analysisBarcode,\n      'PARAMETERS': `ns, ${this.numberOfScans}, sw, ${this.sweepWidth}`\n    }\n    const conditionedNight = !this.onDay ? { 'NIGHT': null } : {}\n    const conditionedPriority = this.priority ? { 'PRIORITY': null } : {}\n    return {\n      sample_id: this.sampleId,\n      data: [{\n        ...configMap,\n        ...conditionedNight,\n        ...conditionedPriority\n      }]\n    }\n  }\n}\n\n","/* eslint-disable no-underscore-dangle */\nimport Element from 'src/models/Element';\nimport { cloneDeep } from 'lodash';\n\nexport default class Attachment extends Element {\n  static NO_PREVIEW_AVAILABLE_PATH = '/images/wild_card/not_available.svg';\n\n  static filePreview(file) {\n    if (!file.type) { return Attachment.NO_PREVIEW_AVAILABLE_PATH; }\n    return file.type.split('/')[0] === 'image' ? file.preview : Attachment.NO_PREVIEW_AVAILABLE_PATH;\n  }\n\n  static fromFile(file) {\n    return new Attachment(\n      {\n        file,\n        name: file.name,\n        filename: file.name,\n        is_deleted: false,\n        preview: Attachment.filePreview(file),\n        is_image_field: false,\n        filesize: file.size,\n      }\n    );\n  }\n\n  constructor(args) {\n    super(args);\n    this.identifier = this.id;\n  }\n\n  get preview() {\n    return this._preview;\n  }\n\n  set preview(preview) {\n    this._preview = preview;\n  }\n\n  static buildCopy(_attachments) {\n    const newAttachments = cloneDeep(_attachments);\n    return newAttachments;\n  }\n\n  serialize() {\n    return super.serialize({\n      filename: this.filename,\n      identifier: this.identifier,\n      file: this.file,\n      thumb: this.thumb,\n      content_type: this.content_type,\n      is_deleted: this.is_deleted,\n    });\n  }\n}\n","import Element from 'src/models/Element';\n\nexport default class Container extends Element {\n  static buildEmpty() {\n    return new Container({\n      name: 'new',\n      children: [],\n      attachments: [],\n      is_deleted: false,\n      description: '',\n      extended_metadata: {\n        report: true,\n      },\n      container_type: '',\n    });\n  }\n\n  static buildAnalysis(kind = 'other', name = '') {\n    const analysis = this.buildEmpty();\n    analysis.container_type = 'analysis';\n    analysis.extended_metadata.kind = kind;\n    analysis.name = name;\n    return analysis;\n  }\n\n  static init() {\n    const root = this.buildEmpty();\n    root.container_type = 'root';\n\n    const analyses = this.buildEmpty();\n    analyses.container_type = 'analyses';\n\n    root.children.push(analyses);\n\n    return root;\n  }\n\n  name() {\n    return this.name;\n  }\n\n  static switchPositionOfChildContainer(children, idToMove, idOfPredecessor) {\n    const indexOfMovedContainer = children.findIndex((container) => container.id === idToMove);\n    const indexOfPredecContainer = children.findIndex((container) => container.id === idOfPredecessor);\n\n    const containerToMove = children[indexOfMovedContainer];\n    children.splice(indexOfMovedContainer, 1);\n    children.splice(indexOfPredecContainer, 0, containerToMove);\n    \n    children.forEach((element,index) => {\n      element.extended_metadata.index=index;\n    });\n  }\n\n  serialize() {\n    return super.serialize({\n      id: this.id,\n      name: this.name,\n      children: this.children,\n      attachments: this.attachments.map((a) => a.serialize()),\n      is_new: this.isNew || false,\n      is_deleted: this.deleted || false,\n      description: this.description,\n      extended_metadata: this.extended_metadata,\n      container_type: this.container_type,\n    });\n  }\n}\n","import Element from 'src/models/Element';\nimport DeviceAnalysis from 'src/models/DeviceAnalysis';\nimport DeviceSample from 'src/models/DeviceSample';\n\nexport default class Device extends Element {\n  constructor({ id, title, code, types, user_id, samples, devices_analyses }) {\n    const device = {\n      id,\n      title,\n      code,\n      types,\n      user_id,\n      type: 'device',\n      samples: samples.map(s => new DeviceSample(s)),\n      devicesAnalyses: devices_analyses.map(analysis => new DeviceAnalysis(analysis))\n    }\n    super(device)\n  }\n\n  checksum() {\n    return super.checksum(\n      ['user_id', 'id', 'is_new', 'isNew', 'isEdited', 'isPendingToSave', 'devicesAnalyses', 'samples']\n    )\n  }\n\n  static buildEmpty() {\n    return new Device({\n      type: 'device',\n      code: \"\",\n      types: [],\n      samples: [],\n      title: \"New Device\",\n      devices_analyses: []\n    })\n  }\n\n  serialize() {\n    const serialized = super.serialize({\n      id: this.id,\n      code: this.code,\n      types: this.types,\n      samples: this.samples.map(s => s.serialize()),\n      title: this.title,\n    })\n    return serialized\n  }\n}\n","import Element from 'src/models/Element'\nimport AnalysesExperiment from 'src/models/AnalysesExperiment'\nimport _ from 'lodash'\n\nexport default class DeviceAnalysis extends Element {\n  constructor({\n    id, device_id, analysis_type, title, experiments\n  }) {\n    const analysis = {\n      id: id,\n      deviceId: device_id,\n      experiments: experiments.map((e) => new AnalysesExperiment(e)),\n      type: 'deviceAnalysis',\n      analysisType: analysis_type,\n      title,\n    }\n    super(analysis)\n  }\n\n  static buildEmpty(deviceId, analysisType) {\n    return new DeviceAnalysis({\n      device_id: deviceId,\n      experiments: [],\n      type: 'deviceAnalysis',\n      analysis_type: analysisType,\n      title: `${deviceId}: NMR`,\n    })\n  }\n\n  serialize() {\n    const serialized = super.serialize({\n      device_id: this.deviceId,\n      experiments: this.experiments.map((e) => e.serialize()),\n      analysis_type: this.analysisType,\n      title: this.title,\n    })\n    return serialized\n  }\n}\n","import Element from 'src/models/Element';\nimport uuid from 'uuid';\n\nexport default class DeviceSample extends Element {\n  constructor({ id, device_id, sample_id, types, short_label }) {\n    const deviceSample = {\n      id,\n      deviceId: device_id,\n      sampleId: sample_id,\n      types,\n      shortLabel: short_label,\n    }\n    super(deviceSample)\n  }\n\n  static buildEmpty(deviceId, sample) {\n    return new DeviceSample({\n      id: uuid.v1(),\n      device_id: deviceId,\n      sample_id: sample.id,\n      short_label: sample.short_label,\n      types: [],\n    })\n  }\n\n  serialize() {\n    const serialized = super.serialize({\n      id: this.id,\n      device_id: this.deviceId,\n      sample_id: this.sampleId,\n      types: this.types,\n    })\n    return serialized\n  }\n}\n","import uuid from 'uuid';\nimport sha256 from 'sha256';\nimport _ from 'lodash';\n\nexport default class Element {\n\n  constructor(args) {\n    Object.assign(this, args);\n    if(!this.id) {\n      this.id = Element.buildID();\n      this.is_new = true\n    }\n    this.updateChecksum();\n  }\n\n  isMethodDisabled(m) {\n    return this[m] == '***'\n  }\n\n  static buildID() {\n    return uuid.v1();\n  }\n\n  get isEdited() {\n    return this._checksum !== this.checksum();\n  }\n\n  checksum(fieldsToOmit = []) {\n    const tThis = this;\n    if (tThis.type === 'screen' && tThis.research_plans !== undefined) {\n      tThis.rp_ids = _.map(tThis.research_plans, rp => ({ id: rp.id }));\n    }\n    return sha256(JSON.stringify(_.omit(_.omit(\n      tThis,\n      ['_checksum', 'belongTo', 'matGroup', 'molecule_names', 'equivalent', '_equivalent', 'formulaChanged', 'research_plans', 'sealed', ...fieldsToOmit],\n    ), _.isEmpty)));\n  }\n\n  get getChecksum() {\n    return this._checksum\n  }\n\n  get isNew() {\n    return this.is_new == true\n  }\n\n  set isNew(boolean) {\n    this.is_new = boolean;\n  }\n\n  get isPendingToSave() {\n    return !_.isEmpty(this) && (this.isNew || this.isEdited);\n  }\n\n  updateChecksum(cs) {\n    if (cs) {\n      this._checksum = cs\n    } else {\n      this._checksum = this.checksum();\n    }\n  }\n\n  buildCopy() {\n    return new this.constructor(_.omit(this, 'id'))\n  }\n\n  clone() {\n    return new this.constructor(this);\n  }\n\n  // methods regarding sharing and detail levels\n  isRestricted() {\n    return this.is_restricted;\n  }\n\n  title() {\n    return this.name;\n  }\n\n  // base serializer\n  serialize(extraParams = {}) {\n    let params = {\n      id: this.id,\n      type: this.type,\n      is_new: this.isNew || false,\n      collection_id: this.collection_id\n    }\n    _.merge(params, extraParams);\n    let paramsWithoutNullEntries = _.omit(params, _.isNull);\n    let cleanParams = _.omit(paramsWithoutNullEntries, (x) => { return x == '***'})\n    return cleanParams;\n  }\n\n  // get analyses container if any\n  analysesContainers() {\n    if (this.container.children.length === 0) {\n      const analyses = Container.buildEmpty();\n      analyses.container_type = 'analyses';\n      this.container.children.push(analyses);\n    }\n    return this.container\n      .children\n      .filter((el) => ~el.container_type.indexOf('analyses'));\n  }\n\n  analysisContainers() {\n    let target = [];\n    this.analysesContainers().forEach((aec) => {\n      const aics = aec.children\n        .filter(el => ~el.container_type.indexOf('analysis'));\n      target = [...target, ...aics];\n    });\n    return target;\n  }\n\n  datasetContainers() {\n    let target = [];\n    this.analysisContainers().forEach((aic) => {\n      const dts = aic.children\n        .filter(el => ~el.container_type.indexOf('dataset'));\n      target = [...target, ...dts];\n    });\n    return target;\n  }\n\n  // Return true if the element has at least one analysis\n  analysesPresent() {\n    if (!this.container) { return false; }\n\n    const analysesContainer = this.container.children?.find((container) => container?.container_type === 'analyses');\n    if (!analysesContainer) { return false; }\n\n    const analysis = analysesContainer.children?.find((container) => container?.container_type === 'analysis');\n    return !!analysis;\n  }\n\n  // temporary alias for analyses. Still used by Report tool\n  get analyses() {\n    if (!this.container) { return []; }\n\n    const analysesContainer = this.container.children?.find((container) => container?.container_type === 'analyses');\n    if (!analysesContainer) { return []; }\n\n    return analysesContainer.children?.filter((container) => container?.container_type === 'analysis');\n  }\n\n  // Default empty quill-delta\n  static quillDefault() {\n    return { ops: [{ insert: '\\n' }] };\n  }\n}\n","import { cloneDeep, isEmpty, filter } from 'lodash';\nimport { buildInitWF, resetProperties } from 'chem-generic-ui';\nimport Element from 'src/models/Element';\nimport Container from 'src/models/Container';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport Segment from 'src/models/Segment';\n\nexport default class GenericEl extends Element {\n  // eslint-disable-next-line camelcase\n  static buildEmpty(collection_id, klass) {\n    const template = (klass && klass.properties_release) || {};\n    return new GenericEl({\n      collection_id,\n      type: klass.name,\n      element_klass_id: this.element_klass_id || (klass && klass.id),\n      short_label: GenericEl.buildNewShortLabel(klass),\n      name: `New ${klass.label}`,\n      container: Container.init(),\n      properties: buildInitWF(template),\n      properties_release: template,\n      element_klass: klass,\n      can_copy: false,\n      attachments: [],\n      files: [],\n      segments: [],\n      wfLayers: template,\n    });\n  }\n\n  serialize() {\n    return super.serialize({\n      name: this.name,\n      can_copy: true,\n      klassType: 'GenericEl',\n      element_klass: this.element_klass,\n      element_klass_id: this._element_klass_id,\n      properties: this.properties,\n      properties_release: this.properties_release,\n      container: this.container,\n      attachments: this.attachments,\n      files: this.files,\n      user_labels: this.user_labels || [],\n      segments: this.segments.map(s => s.serialize()),\n    });\n  }\n\n  analysesContainers() {\n    if (this.container.children.length === 0) {\n      const analyses = Container.buildEmpty();\n      analyses.container_type = 'analyses';\n      this.container.children.push(analyses);\n    }\n    return this.container.children.filter(\n      el => ~el.container_type.indexOf('analyses')\n    );\n  }\n\n  analysisContainers() {\n    let target = [];\n    this.analysesContainers().forEach(aec => {\n      const aics = aec.children.filter(\n        el => ~el.container_type.indexOf('analysis')\n      );\n      target = [...target, ...aics];\n    });\n    return target;\n  }\n\n  datasetContainers() {\n    let target = [];\n    this.analysisContainers().forEach(aic => {\n      const dts = aic.children.filter(\n        el => ~el.container_type.indexOf('dataset')\n      );\n      target = [...target, ...dts];\n    });\n    return target;\n  }\n\n  analysesContainers() {\n    if (this.container.children.length === 0) {\n      const analyses = Container.buildEmpty();\n      analyses.container_type = 'analyses';\n      this.container.children.push(analyses);\n    }\n    return this.container\n      .children\n      .filter(el => ~el.container_type.indexOf('analyses'));\n  }\n\n\n  analysisContainers() {\n    let target = [];\n    this.analysesContainers().forEach((aec) => {\n      const aics = aec.children\n        .filter(el => ~el.container_type.indexOf('analysis'));\n      target = [...target, ...aics];\n    });\n    return target;\n  }\n\n  datasetContainers() {\n    let target = [];\n    this.analysisContainers().forEach((aic) => {\n      const dts = aic.children\n        .filter(el => ~el.container_type.indexOf('dataset'));\n      target = [...target, ...dts];\n    });\n    return target;\n  }\n\n  static buildNewShortLabel(klass) {\n    const { currentUser } = UserStore.getState();\n    if (!currentUser) {\n      return `new_${klass.label}`;\n    }\n    return `${currentUser.initials}-${klass.klass_prefix}${\n      parseInt(currentUser.counters[klass.name] || 0, 10) + 1\n    }`;\n  }\n\n  buildCopy(params = {}) {\n    const copy = super.buildCopy();\n    const newEl = Object.assign(copy, params);\n    newEl.short_label = GenericEl.buildNewShortLabel(newEl.element_klass);\n    newEl.container = Container.init();\n    newEl.can_update = true;\n    newEl.can_copy = false;\n    return newEl;\n  }\n\n  static copyFromCollectionId(element, collection_id) {\n    const target = cloneDeep(element.properties);\n    const params = {\n      collection_id,\n      properties: resetProperties(target),\n    };\n    const copy = element.buildCopy(params);\n    copy.origin = { id: element.id, short_label: element.short_label };\n    return copy;\n  }\n\n  get klassType() {\n    return 'GenericEl';\n  }\n\n  get name() {\n    return this._name;\n  }\n\n  set name(name) {\n    this._name = name;\n  }\n\n  get label() {\n    return (this.element_klass && this.element_klass.label) || '';\n  }\n\n  get desc() {\n    return (this.element_klass && this.element_klass.desc) || '';\n  }\n\n  get element_klass() {\n    return this._element_klass;\n  }\n\n  set element_klass(klass) {\n    this._element_klass = klass;\n  }\n\n  get klassName() {\n    return this._klass_name;\n  }\n  set klassName(klassName) {\n    this._klass_name = klassName;\n  }\n\n  get properties() {\n    return this._properties;\n  }\n\n  set properties(properties) {\n    this._properties = properties;\n  }\n\n  get element_klass_id() {\n    return this._element_klass_id;\n  }\n\n  set element_klass_id(element_klass_id) {\n    this._element_klass_id = element_klass_id;\n  }\n\n  set segments(segments) {\n    this._segments = (segments && segments.map(s => new Segment(s))) || [];\n  }\n\n  get segments() {\n    return this._segments || [];\n  }\n\n  set klass_uuid(klass_uuid) {\n    this._klass_uuid = klass_uuid;\n  }\n\n  get klass_uuid() {\n    return this._klass_uuid;\n  }\n\n  get uuid() {\n    return this._uuid;\n  }\n\n  set uuid(uuid) {\n    this._uuid = uuid;\n  }\n\n  title() {\n    return `${this.short_label}     ${this.name}`;\n  }\n\n  userLabels() {\n    return this.user_labels;\n  }\n\n  setUserLabels(userLabels) {\n    this.user_labels = userLabels;\n  }\n\n  get isPendingToSave() {\n    return !isEmpty(this) && (this.isNew || this.changed);\n  }\n\n  isValidated() {\n    const validName = !!(this.name && this.name.trim() !== '');\n    const layers =\n      filter(\n        this.properties && this.properties.layers,\n        l => l.parent == null || l.parent.trim().length === 0\n      ) || [];\n\n    const fieldsDrag = layers\n      .flatMap(l => l.fields)\n      .filter(f => f.required && f.type.includes('drag_'));\n    const vaildFieldsDrag =\n      fieldsDrag.length ===\n      fieldsDrag.filter(f => f.value && f.value.el_id).length;\n\n    const fields = layers\n      .flatMap(l => l.fields)\n      .filter(f => f.required && !f.type.includes('drag_'));\n    const vaildFields =\n      fields.length ===\n      fields.filter(f => f.value && f.value.trim() !== '').length;\n\n    return validName && vaildFieldsDrag && vaildFields;\n  }\n}\n","import Element from 'src/models/Element';\nimport { CitationType } from 'src/components/CitationType';\n\nexport default class Literature extends Element {\n  static buildEmpty() {\n    return new Literature({\n      title: '',\n      url: '',\n      doi: '',\n      isbn: '',\n      litype: CitationType[0],\n      type: 'literature',\n      is_new: false,\n      refs: {},\n      element_type: ''\n    })\n  }\n\n  serialize() {\n    return ({\n      id: this.id,\n      title: this.title,\n      url: this.url,\n      doi: this.doi,\n      isbn: this.isbn,\n      litype: this.litype,\n      type: this.type,\n      is_new: this.isNew || false,\n      refs: this.refs || {},\n      element_type: this.element_type\n    });\n  }\n}\n","import uuid from 'uuid';\nimport sha256 from 'sha256';\nimport _ from 'lodash';\nimport Immutable from 'immutable';\n\nexport default class LiteratureMap {\n\n  constructor(args) {\n    Object.assign(this, args);\n    if(!this.id) {\n      this.id = LiteratureMap.buildID();\n      this.is_new = true\n      this.type = 'literature_map'\n    }\n    this.updateChecksum();\n  }\n\n  static buildEmpty() {\n    return new LiteratureMap({\n      collectionRefs: Immutable.List(),\n      sampleRefs: Immutable.List(),\n      reactionRefs: Immutable.List(),\n      researchPlanRefs: Immutable.List(),\n      selectedRefs: Immutable.List(),\n      collection_id: null,\n      is_sync: false\n    });\n  }\n\n  static buildID() {\n    return uuid.v1();\n  }\n\n  get isEdited() {\n    return this._checksum != this.checksum();\n  }\n\n  checksum(fieldsToOmit = []) {\n    return sha256(JSON.stringify(_.omit(_.omit(\n      this,\n      ['_checksum', 'belongTo', 'matGroup', 'molecule_names', 'equivalent', '_equivalent', 'formulaChanged', 'sealed', ...fieldsToOmit],\n    ), _.isEmpty)));\n  }\n\n  get getChecksum() {\n    return this._checksum\n  }\n\n  get isNew() {\n    return this.is_new === true\n  }\n\n  get isPendingToSave() {\n    return !_.isEmpty(this) && (this.isNew || this.isEdited);\n  }\n\n  title() {\n    return 'Literature';\n  }\n\n  updateChecksum(cs) {\n    if (cs) {\n      this._checksum = cs\n    } else {\n      this._checksum = this.checksum();\n    }\n  }\n\n  buildCopy() {\n    return new this.constructor(_.omit(this, 'id'))\n  }\n\n  clone() {\n    return new this.constructor(this);\n  }\n\n  // methods regarding sharing and detail levels\n  isRestricted() {\n    return this.is_restricted;\n  }\n\n  // base serializer\n  serialize(extraParams = {}) {\n    const params = {\n      id: this.id,\n      type: this.type,\n      is_new: this.isNew || false,\n      collection_id: this.collection_id\n    };\n    _.merge(params, extraParams);\n    const paramsWithoutNullEntries = _.omit(params, _.isNull);\n    const cleanParams = _.omit(paramsWithoutNullEntries, x => (x === '***'));\n    return cleanParams;\n  }\n\n  // Default empty quill-delta\n  static quillDefault() {\n    return { \"ops\": [{ \"insert\": \"\" }] }\n  }\n}\n","import Element from 'src/models/Element';\n\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport UIStore from 'src/stores/alt/stores/UIStore';\n\nexport default class Metadata extends Element {\n  static buildEmpty(collection_id) {\n    const { currentCollection } = UIStore.getState()\n    const { currentUser } = UserStore.getState()\n\n    const metadata = new Metadata({\n      collection_id,\n      type: 'metadata',\n      metadata: {}\n    });\n\n    if (currentCollection) {\n      metadata.metadata.title = currentCollection.label\n    }\n\n    if (currentUser) {\n      metadata.metadata.creators = []\n      metadata.metadata.creators.push({\n        givenName: currentUser.first_name,\n        familyName: currentUser.last_name,\n        orcid: '',\n        affiliations: [{\n          affiliation: ''\n        }]\n      })\n    }\n\n    return metadata\n  }\n\n  add(field, index, subfield) {\n    if (field == 'keywords') {\n      this.addKeyword()\n    } else if (field == 'subjectAreas') {\n      this.addSubjectAreas()\n    } else if (field == 'creators') {\n      if (subfield == 'affiliations') {\n        this.addAffiliation('creators', index)\n      } else {\n        this.addCreator()\n      }\n    } else if (field == 'contributors') {\n      if (subfield == 'affiliations') {\n        this.addAffiliation('contributors', index)\n      } else {\n        this.addContributor()\n      }\n    } else if (field == 'alternateIdentifiers') {\n      this.addAlternateIdentifier()\n    } else if (field == 'relatedIdentifiers') {\n      this.addRelatedIdentifier()\n    } else if (field == 'rightsHolders') {\n      this.addRightsHolder()\n    } else if (field == 'rights') {\n      this.addRights()\n    } else if (field == 'fundingReferences') {\n      this.addFundingReferences()\n    }\n  }\n\n  addKeyword() {\n    if (this.metadata.keywords === undefined) {\n      this.metadata.keywords = []\n    }\n\n    this.metadata.keywords.push('')\n  }\n\n  addSubjectAreas() {\n    if (this.metadata.subjectAreas === undefined) {\n      this.metadata.subjectAreas = []\n    }\n\n    this.metadata.subjectAreas.push({\n      controlledSubjectAreaName: ''\n    })\n  }\n\n  addCreator() {\n    if (this.metadata.creators === undefined) {\n      this.metadata.creators = []\n    }\n\n    this.metadata.creators.push({\n      givenName: '',\n      familyName: '',\n      orcid: '',\n      affiliations: [{\n        affiliation: ''\n      }]\n    })\n  }\n\n  addContributor() {\n    if (this.metadata.contributors === undefined) {\n      this.metadata.contributors = []\n    }\n\n    this.metadata.contributors.push({\n      givenName: '',\n      familyName: '',\n      orcid: '',\n      affiliations: [{\n        affiliation: ''\n      }]\n    })\n  }\n\n  addAffiliation(field, index) {\n    if (this.metadata[field] === undefined) {\n      this.metadata[field] = []\n    }\n\n    this.metadata[field][index].affiliations.push({\n      affiliation: ''\n    })\n  }\n\n  addAlternateIdentifier() {\n    if (this.metadata.alternateIdentifiers === undefined) {\n      this.metadata.alternateIdentifiers = []\n    }\n\n    this.metadata.alternateIdentifiers.push({\n      value: '',\n      alternateIdentifierType: ''\n    })\n  }\n\n  addRelatedIdentifier() {\n    if (this.metadata.relatedIdentifiers === undefined) {\n      this.metadata.relatedIdentifiers = []\n    }\n\n    this.metadata.relatedIdentifiers.push({\n      value: '',\n      relatedIdentifierType: '',\n      relationType: ''\n    })\n  }\n\n  addRightsHolder() {\n    if (this.metadata.rightsHolders === undefined) {\n      this.metadata.rightsHolders = []\n    }\n\n    this.metadata.rightsHolders.push('')\n  }\n\n  addRights() {\n    if (this.metadata.rights === undefined) {\n      this.metadata.rights = []\n    }\n\n    this.metadata.rights.push({\n      controlledRights: '',\n      additionalRights: ''\n    })\n  }\n\n  addFundingReferences() {\n    if (this.metadata.fundingReferences === undefined) {\n      this.metadata.fundingReferences = []\n    }\n\n    this.metadata.fundingReferences.push({\n      funderName: '',\n      funderIdentifier: '',\n      funderIdentifierType: '',\n      awardNumber: '',\n      awardURI: '',\n      awardTitle: ''\n    })\n  }\n\n  change(value, field, index, subfield, subindex, subsubfield) {\n    if (subsubfield !== undefined) {\n      // e.g. metadata.creators[0].affiliations[0].affiliaton\n      if (this.metadata[field][index][subfield] === undefined) {\n        this.metadata[field][index][subfield] = [{}]\n      }\n      this.metadata[field][index][subfield][subindex][subsubfield] = value\n    } else if (subindex !== undefined) {\n      // e.g. ?\n      if (this.metadata[field][index][subfield] === undefined) {\n        this.metadata[field][index][subfield] = []\n      }\n      this.metadata[field][index][subfield][subindex] = value\n    } else if (subfield !== undefined) {\n      // e.g. metadata.creators[0].givenName\n      this.metadata[field][index][subfield] = value\n    } else if (index !== undefined) {\n      // e.g. metadata.keywords[0]\n      this.metadata[field][index] = value\n    } else if (field !== undefined) {\n      // e.g. metadata.title\n      this.metadata[field] = value\n    }\n  }\n\n  remove(field, index, subfield, subindex) {\n    if (subindex !== undefined) {\n      // e.g. metadata.creators[0].affiliations[0]\n      const values = [...this.metadata[field][index][subfield]]\n      values.splice(subindex, 1)\n      this.metadata[field][index][subfield] = values\n    } else if (index !== undefined) {\n      // e.g. metadata.keywords[0]\n      const values = [...this.metadata[field]]\n      values.splice(index, 1)\n      this.metadata[field] = values\n    }\n  }\n\n  serialize() {\n    return {\n      collection_id: this.collection_id,\n      metadata: this.metadata\n    }\n  }\n\n  title() {\n    // for the details tab\n    return 'Metadata'\n  }\n}\n","import Element from 'src/models/Element';\n\nexport default class Molecule extends Element {\n  get svgPath() {\n    return this.molecule_svg_file && `/images/molecules/${this.molecule_svg_file}`\n  }\n\n  serialize() {\n    return ({\n      density: this.density,\n      melting_point: this.melting_point,\n      boiling_point: this.boiling_point,\n      inchistring: this.inchistring,\n      cano_smiles: this.cano_smiles,\n      inchikey: this.inchikey,\n    })\n  }\n}\n","/* eslint-disable no-underscore-dangle,  camelcase, semi,  no-unused-vars */\nimport Element from 'src/models/Element';\n\nexport default class PrivateNote extends Element {\n  static buildEmpty() {\n    return new PrivateNote({\n      content: '',\n      noteable_id: null,\n      noteable_type: null,\n      created_by: null,\n      created_at: null,\n    });\n  }\n\n  static buildWithElement(element) {\n\n  }\n\n  get content() {\n    return this._content;\n  }\n\n  set content(content) {\n    this._content = content;\n  }\n\n  get noteable_id() {\n    return this._noteable_id;\n  }\n\n  set noteable_id(noteable_id) {\n    this._noteable_id = noteable_id;\n  }\n\n  get created_by() {\n    return this._created_by;\n  }\n  set created_by(created_by) {\n    this._created_by = created_by;\n  }\n\n  get noteable_type() {\n    return this._noteable_type;\n  }\n\n  set noteable_type(noteable_type) {\n    this._noteable_type = noteable_type;\n  }\n\n  serialize() {\n    return super.serialize({\n      content: this.content,\n      noteable_id: this.noteable_id,\n      noteable_type: this.noteable_type,\n      created_by: this.created_by\n    })\n  }\n}\n","import {\n  isEmpty,\n  round,\n  cloneDeep\n} from 'lodash';\nimport Delta from 'quill-delta';\nimport moment from 'moment';\nimport 'moment-precise-range-plugin';\n\nimport Element from 'src/models/Element';\nimport Sample from 'src/models/Sample';\nimport Container from 'src/models/Container';\n\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport Segment from 'src/models/Segment';\n\nconst TemperatureUnit = ['°C', '°F', 'K'];\n\nconst TemperatureDefault = {\n  valueUnit: '°C',\n  userText: '',\n  data: []\n};\n\nexport const convertTemperature = (temperature, fromUnit, toUnit) => {\n  if (fromUnit === toUnit) {\n    return temperature;\n  }\n  const conversionTable = {\n    'K': {\n      '°C': (t) => parseFloat(t) - 273.15,\n      '°F': (t) => (parseFloat(t) * 9 / 5) - 459.67\n    },\n    '°C': {\n      'K': (t) => parseFloat(t) + 273.15,\n      '°F': (t) => (parseFloat(t) * 1.8) + 32\n    },\n    '°F': {\n      'K': (t) => (parseFloat(t) + 459.67) * 5 / 9,\n      '°C': (t) => (parseFloat(t) - 32) / 1.8\n    }\n  };\n  return conversionTable[fromUnit][toUnit](temperature);\n};\n\nconst MomentUnit = {\n  'Week(s)': 'weeks',\n  'Day(s)': 'days',\n  'Hour(s)': 'hours',\n  'Minute(s)': 'minutes',\n  'Second(s)': 'seconds',\n};\n\nconst LegMomentUnit = {\n  'Year(s)': 'years',\n  'Month(s)': 'months',\n  ...MomentUnit\n};\n\nconst DurationUnit = [\n  // 'Year(s)',\n  // 'Month(s)',\n  'Week(s)',\n  'Day(s)',\n  'Hour(s)',\n  'Minute(s)',\n  'Second(s)'\n];\n\nconst DurationDefault = {\n  dispUnit: 'Hour(s)',\n  dispValue: '',\n  memValue: null,\n  memUnit: 'Hour(s)'\n};\n\nexport const convertDuration = (value, unit, newUnit) => moment.duration(Number.parseFloat(value), LegMomentUnit[unit])\n.as(MomentUnit[newUnit]);\n\nconst durationDiff = (startAt, stopAt, precise = false) => {\n  if (startAt && stopAt) {\n    const start = moment(startAt, 'DD-MM-YYYY HH:mm:ss');\n    const stop = moment(stopAt, 'DD-MM-YYYY HH:mm:ss');\n    if (start < stop) {\n      return precise ? moment.preciseDiff(start, stop) : moment.duration(stop.diff(start));\n    }\n  }\n  return null;\n};\n\nconst highestUnitFromDuration = (d, threshold = 1.0) => {\n  if (d.asWeeks() >= threshold) { return 'Week(s)'; }\n  if (d.asDays() >= threshold) { return 'Day(s)'; }\n  if (d.asHours() >= threshold) { return 'Hour(s)'; }\n  if (d.asMinutes() >= threshold) { return 'Minute(s)'; }\n  if (d.asSeconds() >= threshold) { return 'Second(s)'; }\n  return 'Hour(s)';\n};\n\nexport default class Reaction extends Element {\n  static buildEmpty(collection_id) {\n    const reaction = new Reaction({\n      collection_id,\n      container: Container.init(),\n      dangerous_products: '',\n      conditions: '',\n      description: Reaction.quillDefault(),\n      duration: '',\n      durationDisplay: DurationDefault,\n      literatures: {},\n      research_plans: {},\n      name: '',\n      observation: Reaction.quillDefault(),\n      products: [],\n      publication: {},\n      purification: '',\n      purification_solvents: [],\n      reactants: [],\n      rf_value: 0.00,\n      role: '',\n      user_labels: [],\n      solvent: '',\n      solvents: [],\n      status: '',\n      starting_materials: [],\n      temperature: TemperatureDefault,\n      timestamp_start: '',\n      timestamp_stop: '',\n      tlc_description: '',\n      tlc_solvents: '',\n      type: 'reaction',\n      can_update: true,\n      can_copy: false,\n      variations: [],\n      vessel_size: { amount: null, unit: 'ml' },\n      gaseous: false\n    })\n\n    reaction.short_label = this.buildReactionShortLabel()\n    reaction.rxno = '';\n    return reaction\n  }\n\n  static buildReactionShortLabel() {\n    const { currentUser } = UserStore.getState();\n    if (!currentUser) { return 'New Reaction'; }\n\n    const number = currentUser.reactions_count + 1;\n    const prefix = currentUser.reaction_name_prefix;\n    return `${currentUser.initials}-${prefix}${number}`;\n  }\n\n  get is_published() {\n    return this.publication && this.publication.state === 'completed';\n  }\n\n  static get temperature_unit() {\n    return TemperatureUnit;\n  }\n\n  get name() {\n    return this._name;\n  }\n\n  set name(name) {\n    this._name = name;\n  }\n\n  serialize() {\n    return super.serialize({\n      collection_id: this.collection_id,\n      container: this.container,\n      description: this.description,\n      dangerous_products: this.dangerous_products,\n      conditions: this.conditions,\n      duration: this.duration,\n      durationDisplay: this.durationDisplay,\n      durationCalc: this.durationCalc(),\n      id: this.id,\n      is_published: this.is_published,\n      literatures: this.literatures,\n      research_plans: this.research_plans,\n      materials: {\n        starting_materials: this.starting_materials.map(s => s.serializeMaterial()),\n        reactants: this.reactants.map(s => s.serializeMaterial()),\n        solvents: this.solvents.map(s => s.serializeMaterial()),\n        purification_solvents: this.purification_solvents.map(s => s.serializeMaterial()),\n        products: this.products.map(s => s.serializeMaterial())\n      },\n      name: this.name,\n      observation: this.observation,\n      origin: this.origin,\n      publication: this.publication,\n      purification: this.purification,\n      tlc_solvents: this.tlc_solvents,\n      tlc_description: this.tlc_description,\n      reaction_svg_file: this.reaction_svg_file,\n      role: this.role,\n      user_labels: this.user_labels || [],\n      rf_value: this.rf_value,\n      rxno: this.rxno,\n      short_label: this.short_label,\n      solvent: this.solvent,\n      status: this.status,\n      temperature: this.temperature,\n      timestamp_start: this.timestamp_start,\n      timestamp_stop: this.timestamp_stop,\n      segments: this.segments.map(s => s.serialize()),\n      variations: this.variations,\n      vessel_size: this.vessel_size,\n      gaseous: this.gaseous\n    });\n  }\n\n  set variations(variations) {\n    /*\n    variations data structure (also see Entities::ReactionVariationEntity):\n    [\n      {\n        \"id\": <number>,\n        \"notes\": <string>,\n        \"properties\": {\n          \"temperature\": {\"value\": <number>, \"unit\": <string>},\n          \"duration\": {\"value\": <number>, \"unit\": <string>}\n        },\n        \"analyses\": [<id>, <id>, ...],\n        \"startingMaterials\": {\n          <material_id>: {\n            \"mass\": {\"value\": <number>, \"unit\": <string>},\n            \"amount\": {\"value\": <number>, \"unit\": <string>},\n            \"volume\": {\"value\": <number>, \"unit\": <string>},\n            \"aux\": {...}\n          },\n          <material_id>: {\n            \"mass\": {\"value\": <number>, \"unit\": <string>},\n            \"amount\": {\"value\": <number>, \"unit\": <string>},\n            \"volume\": {\"value\": <number>, \"unit\": <string>},\n            \"aux\": {...}\n          },\n          ...\n        },\n        \"reactants\": {\n          <material_id>: {\n            \"mass\": {\"value\": <number>, \"unit\": <string>},\n            \"amount\": {\"value\": <number>, \"unit\": <string>},\n            \"volume\": {\"value\": <number>, \"unit\": <string>},\n            \"aux\": {...}\n          },\n          <material_id>: {\n            \"mass\": {\"value\": <number>, \"unit\": <string>},\n            \"amount\": {\"value\": <number>, \"unit\": <string>},\n            \"volume\": {\"value\": <number>, \"unit\": <string>},\n            \"aux\": {...}\n          },\n          ...\n        },\n        \"products\": {\n          <material_id>: {\n            \"mass\": {\"value\": <number>, \"unit\": <string>},\n            \"amount\": {\"value\": <number>, \"unit\": <string>},\n            \"volume\": {\"value\": <number>, \"unit\": <string>},\n            \"aux\": {...}\n          },\n          <material_id>: {\n            \"mass\": {\"value\": <number>, \"unit\": <string>},\n            \"amount\": {\"value\": <number>, \"unit\": <string>},\n            \"volume\": {\"value\": <number>, \"unit\": <string>},\n            \"aux\": {...}\n          },\n          ...\n        },\n        \"solvents\": {\n          <material_id>: {\n            \"mass\": {\"value\": <number>, \"unit\": <string>},\n            \"amount\": {\"value\": <number>, \"unit\": <string>},\n            \"volume\": {\"value\": <number>, \"unit\": <string>},\n            \"aux\": {...}\n          },\n          <material_id>: {\n            \"mass\": {\"value\": <number>, \"unit\": <string>},\n            \"amount\": {\"value\": <number>, \"unit\": <string>},\n            \"volume\": {\"value\": <number>, \"unit\": <string>},\n            \"aux\": {...}\n          },\n          ...\n        },\n      },\n      {\n        \"id\": \"<number>\",\n        ...\n      },\n      ...\n    ]\n\n    Units are to be treated as immutable. Units and corresponding values\n    are changed (not mutated in the present data-structure!) only for display or export\n    (i.e., at the boundaries of the application).\n    This is why there's a `standard` unit and a `display` unit.\n    The `standard` (available as `unit` attribute of each entry) is immutable,\n    whereas the value that corresponds to `display` is computed ad hoc at the boundaries.\n    See https://softwareengineering.stackexchange.com/a/391480.\n    */\n    if (!Array.isArray(variations)) {\n      throw new Error(`Variations must be of type Array. Got ${typeof variations}.`);\n    }\n    this._variations = variations;\n  }\n\n  get variations() {\n    return this._variations;\n  }\n\n  // Reaction Duration\n\n  durationCalc() {\n    return durationDiff(this.timestamp_start, this.timestamp_stop, true);\n  }\n\n  get durationDisplay() {\n    return this._durationDisplay;\n  }\n\n  set durationDisplay(newDuration) {\n    const { fromStartStop, nextUnit, nextValue } = newDuration;\n    const {\n      dispUnit, memUnit, memValue\n    } = this._durationDisplay || {};\n\n    if (fromStartStop) {\n      const d = durationDiff(this.timestamp_start, this.timestamp_stop);\n      if (d) {\n        const dUnit = highestUnitFromDuration(d);\n        const val = d.as(MomentUnit[dUnit]);\n        const dispValue = round(val, 1).toString();\n        this._durationDisplay = {\n          dispUnit: dUnit,\n          dispValue,\n          memUnit: dUnit,\n          memValue: val.toString(),\n        };\n        this._duration = `${dispValue} ${dUnit}`;\n      }\n    } else if (nextValue || nextValue === '') {\n      this._durationDisplay = {\n        dispValue: nextValue,\n        dispUnit,\n        memUnit,\n        memValue: nextValue\n      };\n      this._duration = `${nextValue} ${dispUnit}`;\n    } else if (nextUnit) {\n      const index = DurationUnit.indexOf(this._durationDisplay.dispUnit);\n      const u = DurationUnit[(index + 1) % DurationUnit.length];\n      const dispValue = round(convertDuration(memValue, memUnit, u), 1).toString();\n      this._durationDisplay = {\n        dispUnit: u,\n        dispValue,\n        memUnit,\n        memValue\n      };\n      this._duration = `${dispValue} ${u}`;\n    }\n    else {\n      this._durationDisplay = DurationDefault;\n    }\n  }\n\n  get duration() {\n    return this._duration;\n  }\n\n  set duration(duration) {\n    this._duration = duration;\n  }\n\n  get durationUnit() {\n    return this._durationDisplay.dispUnit;\n  }\n\n  convertDurationDisplay() {\n    const duration = this._duration;\n    if (this._durationDisplay && this._durationDisplay.memValue !== '') { return null; }\n    const m = duration && duration.match(/(\\d+\\.?(\\d+)?)\\s+([\\w()]+)/)\n    if (m) {\n      this._durationDisplay = {\n        dispUnit: m[3],\n        memUnit: m[3],\n        dispValue: m[1],\n        memValue: m[1],\n        ...this._durationDisplay\n      };\n      return null;\n    }\n    this._durationDisplay = { ...DurationDefault };\n    return null;\n  }\n\n  // Reaction Temperature\n\n  get temperature_display() {\n    const userText = this._temperature.userText;\n    if (userText !== '') { return userText; }\n\n    if (this._temperature.data.length === 0) { return ''; }\n\n    const arrayData = this._temperature.data;\n    const maxTemp = Math.max(...arrayData.map(o => o.value));\n    const minTemp = Math.min(...arrayData.map(o => o.value));\n\n    if (minTemp === maxTemp) { return minTemp; }\n    return `${minTemp} ~ ${maxTemp}`;\n  }\n\n\n  get temperature() {\n    return this._temperature\n  }\n\n  set temperature(temperature) {\n    this._temperature = temperature\n  }\n\n  get description_contents() {\n    return this.description.ops.map(s => s.insert).join()\n  }\n\n  get observation_contents() {\n    return this.observation.ops.map(s => s.insert).join()\n  }\n\n  concat_text_observation(content) {\n    const insertDelta = new Delta().insert(content);\n    const observationDelta = new Delta(this.observation);\n    const composedDelta = observationDelta.concat(insertDelta);\n    this.observation = composedDelta;\n  }\n\n  convertTemperature(newUnit) {\n    const temperature = this._temperature\n    const oldUnit = temperature.valueUnit;\n    temperature.valueUnit = newUnit;\n\n    // If userText is number only, treat as normal temperature value\n    if (/^[\\-|\\d]\\d*\\.{0,1}\\d{0,2}$/.test(temperature.userText)) {\n      temperature.userText = convertTemperature(temperature.userText, oldUnit, newUnit).toFixed(2);\n\n      return temperature;\n    }\n\n    temperature.data.forEach((data, index, theArray) => {\n      theArray[index].value = convertTemperature(data.value, oldUnit, newUnit).toFixed(2);\n    });\n\n    return temperature;\n  }\n\n  get short_label() {\n    return this._short_label\n  }\n\n  set short_label(short_label) {\n    this._short_label = short_label\n  }\n\n  get tlc_solvents() {\n    return this._tlc_solvents\n  }\n\n  set tlc_solvents(solvents) {\n    this._tlc_solvents = solvents\n  }\n\n  get starting_materials() {\n    return this._starting_materials\n  }\n\n  set starting_materials(samples) {\n    this._starting_materials = this._coerceToSamples(samples);\n  }\n\n  get solvents() {\n    return this._solvents\n  }\n\n  set solvents(samples) {\n    this._solvents = this._coerceToSamples(samples);\n  }\n\n  get purification_solvents() {\n    return this._purification_solvents;\n  }\n\n  set purification_solvents(samples) {\n    this._purification_solvents = this._coerceToSamples(samples);\n  }\n\n  get reactants() {\n    return this._reactants\n  }\n\n  set reactants(samples) {\n    this._reactants = this._coerceToSamples(samples);\n  }\n\n  get products() {\n    return this._products\n  }\n\n  set products(samples) {\n    this._products = this._coerceToSamples(samples);\n  }\n\n  get publication() {\n    return this._publication\n  }\n\n  set publication(publication) {\n    this._publication = publication\n  }\n\n  get samples() {\n    return [\n      ...this.starting_materials || [],\n      ...this.reactants || [],\n      ...this.solvents || [],\n      ...this.purification_solvents || [],\n      ...this.products || [],\n    ];\n  }\n\n  buildCopy(params = {}) {\n    const copy = super.buildCopy();\n    Object.assign(copy, params);\n    copy.short_label = Reaction.buildReactionShortLabel();\n    copy.starting_materials = this.starting_materials.map(\n      sample => Sample.copyFromSampleAndCollectionId(sample, copy.collection_id)\n    );\n    copy.reactants = this.reactants.map(\n      sample => Sample.copyFromSampleAndCollectionId(sample, copy.collection_id)\n    );\n    copy.solvents = this.solvents.map(\n      sample => Sample.copyFromSampleAndCollectionId(sample, copy.collection_id)\n    );\n    copy.products = this.products.map(\n      sample => Sample.copyFromSampleAndCollectionId(sample, copy.collection_id, true, true, false)\n    );\n\n    copy.rebuildProductName();\n    copy.container = Container.init();\n    copy.can_update = true;\n    copy.can_copy = false;\n    return copy;\n  }\n  static copyFromReactionAndCollectionId(reaction, collection_id) {\n    const target = Segment.buildCopy(reaction.segments);\n    const params = {\n      collection_id,\n      role: 'parts',\n      segments: target,\n      timestamp_start: '',\n      segments: target,\n      timestamp_stop: '',\n      publication: {},\n      rf_value: 0.00,\n      status: '',\n    }\n    const copy = reaction.buildCopy(params);\n    copy.origin = { id: reaction.id, short_label: reaction.short_label };\n    copy.name = copy.nameFromRole(copy.role);\n    return copy;\n  }\n\n  title() {\n    const short_label = this.short_label ? this.short_label : ''\n    return this.name ? `${short_label} ${this.name}` : short_label\n  }\n\n  addMaterial(material, group) {\n    const materials = this[group];\n    const newMaterial = this.materialPolicy(material, null, group);\n    this[group] = [...materials, newMaterial];\n\n    this.rebuildReference(newMaterial);\n    this.setPositions(group);\n  }\n\n  addMaterialAt(srcMaterial, srcGp, tagMaterial, tagGp) {\n    const materials = this[tagGp];\n    const idx = materials.indexOf(tagMaterial);\n    const newSrcMaterial = this.materialPolicy(srcMaterial, srcGp, tagGp);\n\n    if (idx === -1) {\n      this[tagGp] = [...materials, newSrcMaterial];\n    } else {\n      this[tagGp] = [\n        ...materials.slice(0, idx),\n        newSrcMaterial,\n        ...materials.slice(idx),\n      ];\n    }\n\n    this.rebuildReference(newSrcMaterial);\n    this.setPositions(tagGp);\n  }\n\n  deleteMaterial(material, group) {\n    const materials = this[group];\n    const idx = materials.indexOf(material);\n    this[group] = [\n      ...materials.slice(0, idx),\n      ...materials.slice(idx + 1),\n    ];\n\n    this.rebuildReference(material);\n    this.setPositions(group);\n  }\n\n  swapMaterial(srcMaterial, tagMaterial, group) {\n    const srcIdx = this[group].indexOf(srcMaterial);\n    const tagIdx = this[group].indexOf(tagMaterial);\n    const groupWoSrc = [\n      ...this[group].slice(0, srcIdx),\n      ...this[group].slice(srcIdx + 1),\n    ];\n    const newGroup = [\n      ...groupWoSrc.slice(0, tagIdx),\n      srcMaterial,\n      ...groupWoSrc.slice(tagIdx),\n    ];\n    this[group] = newGroup.filter(o => o != null) || [];\n\n    this.rebuildReference(srcMaterial);\n    this.setPositions(group);\n  }\n\n  moveMaterial(srcMaterial, srcGp, tagMaterial, tagGp) {\n    if (srcGp === tagGp) {\n      this.swapMaterial(srcMaterial, tagMaterial, tagGp);\n    } else {\n      this.deleteMaterial(srcMaterial, srcGp);\n      this.addMaterialAt(srcMaterial, srcGp, tagMaterial, tagGp);\n    }\n  }\n\n  setPositions(group) {\n    this[group] = this[group].map((m, idx) => (\n      Object.assign({}, m, { position: idx })\n    ));\n  }\n\n\n  userLabels() {\n    return this.user_labels;\n  }\n\n  setUserLabels(userLabels) {\n    this.user_labels = userLabels;\n  }\n\n  // We will process all reaction policy here\n  // If oldGroup = null -> drag new Sample into Reaction\n  // Else -> moving between Material Group\n  materialPolicy(material, oldGroup, newGroup) {\n    if (newGroup == \"products\") {\n      material.amountType = 'real';\n\n      // we don't want to copy loading from sample\n      if (material.contains_residues) {\n        material.loading = 0.0;\n      }\n\n      material.isSplit = false;\n      material.reaction_product = true;\n      material.equivalent = 0;\n      material.reference = false;\n\n      if (material.parent_id) {\n        material.start_parent = material.parent_id\n        material.parent_id = null\n      }\n    } else if (\n      newGroup === \"reactants\" || newGroup === \"solvents\" ||\n      newGroup === \"purification_solvents\"\n    ) {\n      if (newGroup === \"solvents\") {\n        material.reference = false;\n      }\n\n      // Temporary set true, to fit with server side logical\n      material.isSplit = true;\n      material.reaction_product = false;\n    } else if (newGroup == \"starting_materials\") {\n      material.isSplit = true;\n      material.reaction_product = false;\n\n      if (material.start_parent && material.parent_id == null) {\n        material.parent_id = material.start_parent\n      }\n    }\n\n    this.shortLabelPolicy(material, oldGroup, newGroup);\n    this.namePolicy(material, oldGroup, newGroup);\n    if (!material.coefficient || material.coefficient < 0) {\n      material.coefficient = 1.0;\n    }\n    material.waste = false;\n\n    return material;\n  }\n\n  shortLabelPolicy(material, oldGroup, newGroup) {\n    if (oldGroup) {\n      // Save previous short_label\n      material[`short_label_${oldGroup}`] = material.short_label;\n\n      // Reassign previous short_label if present\n      if (material[`short_label_${newGroup}`]) {\n        material.short_label = material[`short_label_${newGroup}`];\n        return 0;\n      }\n      // routines below are for exisiting samples moved a first time\n      if (newGroup === 'products') {\n        // products are new samples => build new short_label\n        material.short_label = Sample.buildNewShortLabel();\n      } else if (newGroup === 'starting_materials') {\n        if (oldGroup !== 'products') {\n          // if starting_materials from products, reuse product short_label (do nothing)\n          material.short_label = Sample.buildNewShortLabel();\n        }\n      }\n      // else when newGroup is reactant/solvent do nothing because not displayed (short_label set in BE)\n    } else {\n      if (newGroup === \"starting_materials\") {\n        if (material.split_label) { material.short_label = material.split_label; }\n      } else if (newGroup === \"products\") {\n        // products are new samples => build new short_label\n        material.short_label = Sample.buildNewShortLabel();\n      } else {\n        material.short_label = newGroup.slice(0, -1); // \"reactant\" or \"solvent\"\n      }\n    }\n  }\n\n  namePolicy(material, oldGroup, newGroup) {\n    this.rebuildProductName();\n\n    if (oldGroup && oldGroup == \"products\") {\n      // Blank name if FROM \"products\"\n      material.name = \"\";\n      return 0;\n    }\n\n    if (newGroup == \"products\") {\n      let productName = String.fromCharCode('A'.charCodeAt(0) + this.products.length);\n      material.name = this.short_label + \"-\" + productName;\n    }\n  }\n\n  rebuildProductName() {\n    let short_label = this.short_label\n    this.products.forEach(function (product, index, arr) {\n      let productName = String.fromCharCode('A'.charCodeAt(0) + index);\n      arr[index].name = short_label + \"-\" + productName;\n    })\n  }\n\n  rebuildReference(material) {\n    if (this.referenceMaterial) {\n      let referenceMaterial = this.referenceMaterial\n      let reference = this.starting_materials.find(function (m) {\n        return referenceMaterial.id === m.id;\n      })\n\n      // if referenceMaterial exists,\n      // referenceMaterialGroup must be either 'starting_materials' or 'reactants'\n      if (!reference) reference = this.reactants.find(m => m.id === referenceMaterial.id);\n\n      if (!reference && this.starting_materials.length > 0) {\n        this._setAsReferenceMaterial(this.starting_materials[0]);\n      } else {\n        this._updateEquivalentForMaterial(material);\n      }\n    }\n\n    this.products.forEach(function (product, index, arr) {\n      arr[index].reference = false;\n    })\n  }\n\n  _coerceToSamples(samples) {\n    return samples && samples.map(s => new Sample(s)) || []\n  }\n\n  sampleById(sampleID) {\n    return this.samples.find((sample) => {\n      return sample.id == sampleID;\n    })\n  }\n\n  get referenceMaterial() {\n    return this.samples.find((sample) => {\n      return sample.reference;\n    })\n  }\n\n  get sampleCount() {\n    return this.samples.length;\n  }\n\n  markSampleAsReference(sampleID) {\n    this.samples.forEach((sample) => {\n      sample.reference = sample.id == sampleID;\n    })\n  }\n\n  toggleShowLabelForSample(sampleID) {\n    const sample = this.sampleById(sampleID);\n    sample.show_label = ((sample.decoupled && !sample.molfile) ? true : !sample.show_label);\n  }\n\n  _setAsReferenceMaterial(sample) {\n    sample.equivalent = 1;\n    sample.reference = true;\n  }\n\n  _updateEquivalentForMaterial(sample) {\n    if (this.referenceMaterial && this.referenceMaterial.amount_mol) {\n      sample.equivalent = sample.amount_mol / this.referenceMaterial.amount_mol;\n    }\n  }\n\n  get svgPath() {\n    if (this.reaction_svg_file && this.reaction_svg_file != '***') {\n      if (this.reaction_svg_file.includes('<svg')) {\n        return this.reaction_svg_file\n      } else if (this.reaction_svg_file.substr(this.reaction_svg_file.length - 4) === '.svg') {\n        return `/images/reactions/${this.reaction_svg_file}`\n      }\n    }\n    else\n    return `images/wild_card/no_image_180.svg`\n  }\n\n  SMGroupValid() {\n    let result = true;\n    this.starting_materials.map((sample) => {\n      if (!sample.isValid)\n        result = false;\n    });\n\n    return result;\n  }\n\n  hasMaterials() {\n    return this.starting_materials.length > 0 || this.reactants.length > 0 || this.solvents.length > 0 || this.products.length > 0;\n  }\n\n  hasSample(sampleId) {\n    return this.samples.find((sample) => {\n      return sample.id == sampleId\n    });\n  }\n\n  hasPolymers() {\n    return this.samples.find((sample) => {\n      return sample.contains_residues\n    });\n  }\n\n  getReferenceMaterial() {\n    return this.referenceMaterial;\n  }\n\n  updateMaterial(material, refreshCoefficient) {\n    const cats = ['starting_materials', 'reactants', 'solvents', 'products'];\n    let i = 0;\n    let group;\n\n    while (i < cats.length) {\n      const groupName = `_${cats[i]}`;\n      group = this[groupName];\n      if (group) {\n        const index = group.findIndex(x => x.id === material.id);\n        if (index >= 0) {\n          const mat = new Sample(material);\n          mat.reference = group[index].reference;\n          mat.gas_type = group[index].gas_type;\n          mat.gas_phase_data = group[index].gas_phase_data;\n          mat.updateChecksum();\n          group[index] = mat;\n          break;\n        }\n      }\n\n      i += 1;\n    }\n    this.refreshEquivalent(material, refreshCoefficient);\n  }\n\n  refreshEquivalent(material, refreshCoefficient) {\n    let matGroup;\n    const refMat = this.samples.find((sample) => sample.reference);\n    if (refMat && refMat.amount_mol) {\n      ['_starting_materials', '_reactants', '_solvents', '_products'].forEach((g) => {\n        matGroup = this[g];\n        if (matGroup) {\n          this[g] = matGroup.map((mat) => {\n            const m = mat;\n            if (m.id === material.id) {\n              if (refreshCoefficient && m.id === refreshCoefficient.sId) {\n                m.coefficient = refreshCoefficient.coefficient;\n              }\n            }\n            if (g === '_products' && m.gas_type !== 'gas') {\n              const stoichiometryCoeff = (m.coefficient || 1.0) / (refMat?.coefficient || 1.0);\n              m.equivalent = m.amount_mol / refMat.amount_mol / stoichiometryCoeff;\n            } else {\n              m.equivalent = m.amount_mol / refMat.amount_mol;\n            }\n            return m;\n          });\n        }\n      });\n    }\n  }\n\n  // literatures\n\n  get literatures() {\n    return this._literatures || {};\n  }\n\n  get research_plans() {\n    return this._research_plans || {};\n  }\n\n  set literatures(literatures) {\n    this._literatures = literatures;\n  }\n\n  set research_plans(research_plans) {\n    this._research_plans = research_plans;\n  }\n\n  get totalVolume() {\n    let totalVolume = 0.0;\n    const materials = [...this.starting_materials,\n      ...this.reactants,\n      ...this.products,\n      ...this.solvents];\n      materials.map(m => totalVolume += m.amount_l);\n      return totalVolume;\n    }\n\n    get purificationSolventVolume() {\n      let purificationSolventVolume = 0.0;\n      const materials = [...this.purification_solvents];\n      materials.map(m => purificationSolventVolume += m.amount_l);\n      return purificationSolventVolume;\n    }\n\n    get solventVolume() {\n      let solventVolume = 0.0;\n      const materials = [...this.solvents];\n      materials.map(m => solventVolume += m.amount_l);\n      return solventVolume;\n    }\n\n    // overwrite isPendingToSave method in models/Element.js\n    get isPendingToSave() {\n      return !isEmpty(this) && (this.isNew || this.changed);\n    }\n\n    extractNameFromOri(origin) {\n      const ori = origin || this.origin;\n      const oriSLabel = ori && ori.short_label;\n      const oriSLNum = oriSLabel ? oriSLabel.split('-').slice(-1)[0] : 'xx';\n      const name = `According to General Procedure ${oriSLNum}`;\n      return name;\n    }\n\n    nameFromRole(role) {\n      let name = this.name;\n      const sLabel = this.short_label;\n      const sLNum = sLabel ? sLabel.split('-').slice(-1)[0] : 'xx';\n\n      switch (role) {\n        case 'gp':\n        name = `General Procedure ${sLNum}`;\n        break;\n        case 'parts':\n        name = this.extractNameFromOri();\n        break;\n        case 'single':\n        name = `Single ${sLNum}`;\n        break;\n        default:\n        break;\n      }\n      return name;\n    }\n\n    set segments(segments) {\n      this._segments = (segments && segments.map(s => new Segment(s))) || [];\n    }\n\n    get segments() {\n      return this._segments || [];\n    }\n\n    updateMaxAmountOfProducts() {\n      const startingMaterialsList = this.starting_materials.filter(sample => sample.reference);\n      if (startingMaterialsList.length == 0) { return; }\n      const referenceSample = startingMaterialsList[0];\n\n      this.products.forEach(product => product.calculateMaxAmount(referenceSample));\n\n    }\n\n  findReactionVesselSizeCatalystMaterialValues() {\n    const catalyst = this.findCatalystMaterial();\n    const result = {\n      catalystMoles: null,\n      vesselSize: null\n    };\n    result.catalystMoles = catalyst ? this.calculateCatalystMoles(catalyst) : null;\n    if (this.vessel_size) {\n      if (this.vessel_size.unit === 'l') {\n        result.vesselSize = this.vessel_size.amount;\n      } else {\n        result.vesselSize = this.vessel_size.amount * 0.001;\n      }\n    }\n    return result;\n  }\n\n  findCatalystMaterial() {\n    const materials = [...this.starting_materials, ...this.reactants];\n    const catalystMaterial = materials.find((material) => (material.gas_type === 'catalyst'));\n    return catalystMaterial;\n  }\n\n  calculateCatalystMoles(material) {\n    let moles;\n    let amount;\n    let unit;\n    const {\n      purity,\n      target_amount_unit,\n      target_amount_value,\n      real_amount_unit,\n      real_amount_value,\n      density\n    } = material;\n    if (real_amount_value && real_amount_unit) {\n      amount = real_amount_value;\n      unit = real_amount_unit;\n    } else {\n      amount = target_amount_value;\n      unit = target_amount_unit;\n    }\n    const molecularWeight = material.molecule.molecular_weight;\n    if (unit === 'mol') {\n      moles = amount;\n    } else if (unit === 'l') {\n      const amountInGram = amount * density * 1000;\n      moles = (amountInGram * purity) / molecularWeight;\n    } else if (unit === 'g') {\n      moles = (amount * purity) / molecularWeight;\n    }\n    return moles;\n  }\n\n  isFeedstockMaterialPresent() {\n    const materials = [...this.starting_materials, ...this.reactants];\n    return materials.some((material) => material.gas_type === 'feedstock');\n  }\n\n  findFeedstockMaterial() {\n    const materials = [...this.starting_materials, ...this.reactants];\n    const feedstockMaterial = materials.find((material) => (material.gas_type === 'feedstock'));\n    return feedstockMaterial;\n  }\n\n  get notPublishable() {\n    // NB: in reaction samples, can_publish is only serialized for products\n    // const unpublishableSamples = this.samples.filter(s => !s.can_publish);\n    const unpublishableSamples = this.products.filter(s => !s.can_publish);\n    return unpublishableSamples.length > 0 && unpublishableSamples;\n  }\n\n  analysisArray() {\n    const analyses = this.container && this.container.children.find(c => (c && c.container_type === 'analyses'));\n    return analyses ? analyses.children : [];\n  }\n}\n","import { isEmpty } from 'lodash';\nimport Element from 'src/models/Element';\nimport Container from 'src/models/Container';\nimport Segment from 'src/models/Segment';\nimport Wellplate from 'src/models/Wellplate';\nimport Attachment from './Attachment';\n\nconst uuidv4 = require('uuid/v4');\n\nconst columns = [\n  {\n    headerName: 'a',\n    field: 'a',\n    colId: 'a'\n  },\n  {\n    headerName: 'b',\n    field: 'b',\n    colId: 'b'\n  },\n  {\n    headerName: 'c',\n    field: 'c',\n    colId: 'c'\n  },\n  {\n    headerName: 'd',\n    field: 'd',\n    colId: 'd'\n  },\n  {\n    headerName: 'e',\n    field: 'e',\n    colId: 'e'\n  },\n  {\n    headerName: 'f',\n    field: 'f',\n    colId: 'f'\n  }\n];\n\nexport default class ResearchPlan extends Element {\n  constructor(args) {\n    super(args);\n    this.mode = args.mode ? args.mode : 'view';\n  }\n\n  static buildEmpty(collectionId) {\n    return new ResearchPlan({\n      collection_id: collectionId,\n      type: 'research_plan',\n      name: 'New Research Plan',\n      body: [],\n      mode: 'edit',\n      container: Container.init(),\n      changed: true,\n      can_update: true,\n      attachments: [],\n      wellplates: [],\n      segments: []\n    });\n  }\n\n  serialize() {\n    return super.serialize({\n      name: this.name,\n      body: this.body,\n      attachments: this.attachments,\n      container: this.container,\n      wellplate_ids: this.wellplateIDs,\n      segments: this.segments.map((s) => s.serialize())\n    });\n  }\n\n  addBodyField(type) {\n    switch (type) {\n      case 'richtext':\n        this.body.push({\n          id: uuidv4(),\n          type: 'richtext',\n          title: 'Text',\n          value: ''\n        });\n        break;\n      case 'ketcher':\n        this.body.push({\n          id: uuidv4(),\n          type: 'ketcher',\n          value: {\n            svg_file: null,\n            thumb_svg: null\n          }\n        });\n        break;\n      case 'table':\n        this.body.push({\n          id: uuidv4(),\n          type: 'table',\n          value: {\n            columns,\n            rows: [\n              {\n                a: '', b: '', c: '', d: '', e: '', f: ''\n              },\n              {\n                a: '', b: '', c: '', d: '', e: '', f: ''\n              },\n              {\n                a: '', b: '', c: '', d: '', e: '', f: ''\n              },\n            ]\n          }\n        });\n        break;\n      case 'image':\n        this.body.push({\n          id: uuidv4(),\n          type: 'image',\n          value: {\n            file_name: null,\n            public_name: null,\n            zoom: null\n          }\n        });\n        break;\n      case 'sample':\n        this.body.push({\n          id: uuidv4(),\n          type: 'sample',\n          value: {\n            sample_id: null\n          }\n        });\n        break;\n      case 'reaction':\n        this.body.push({\n          id: uuidv4(),\n          type: 'reaction',\n          value: {\n            reaction_id: null\n          }\n        });\n        break;\n      default:\n        break;\n    }\n  }\n\n  // returns the body element with the given id, or undefined if not found\n  getBodyElementById(id) {\n    return this.body.find((el) => el.id === id);\n  }\n\n  get attachmentCount() {\n    if (this.attachments) { return this.attachments.length; }\n    return this.attachment_count;\n  }\n\n  get wellplateIDs() {\n    return this.wellplates.map((wp) => wp.id);\n  }\n\n  get svgPath() {\n    for (let i = 0; i < this.body.length; i += 1) {\n      if (this.body[i].type === 'ketcher') {\n        return `/images/research_plans/${this.body[i].value.svg_file}`;\n      }\n    }\n    return '/images/wild_card/no_image_180.svg';\n  }\n\n  // overwrite isPendingToSave method in models/Element.js\n  get isPendingToSave() {\n    return !isEmpty(this) && (this.isNew || this.changed);\n  }\n\n  get mode() {\n    return this._mode;\n  }\n\n  set mode(mode) {\n    this._mode = mode;\n  }\n\n  set segments(segments) {\n    this._segments = (segments && segments.map((s) => new Segment(s))) || [];\n  }\n\n  get segments() {\n    return this._segments || [];\n  }\n\n  set wellplates(wellplates) {\n    this._wellplates = (wellplates && wellplates.map((w) => new Wellplate(w))) || [];\n  }\n\n  get wellplates() {\n    return this._wellplates || [];\n  }\n\n  upsertAttachments(attachmentsToAdd = []) {\n    const idsOfAttachmentsInResearchPlan = this.attachments.map(\n      (attachmentInResearchPlan) => attachmentInResearchPlan.identifier\n    );\n\n    attachmentsToAdd\n      .filter((attachment) => idsOfAttachmentsInResearchPlan.includes(attachment.identifier))\n      .map((source) => {\n        const target = this.attachments\n          .filter((attachInRP) => source.identifier === attachInRP.identifier);\n        target[0].is_deleted = source.is_deleted;\n\n        return source;\n      });\n\n    this.attachments = this.attachments.concat(attachmentsToAdd\n      .filter((attachment) => !idsOfAttachmentsInResearchPlan.includes(attachment.identifier)));\n  }\n\n  markAttachmentAsDeleted(identifier) {\n    if (!identifier) { return; }\n    const attachmentToDelete = this.attachments\n      .find((attachment) => attachment.identifier === identifier);\n\n    if (attachmentToDelete) {\n      attachmentToDelete.is_deleted = true;\n      attachmentToDelete.is_image_field = true;\n      this.markAttachmentAsDeleted(attachmentToDelete.ancestor);\n    }\n  }\n\n  removeFieldFromBody(fieldId) {\n    const index = this.body.findIndex((field) => field.id === fieldId);\n    if (index === -1) { return; }\n    let { identifier } = this.body[index].value;\n    if (!identifier) {\n      identifier = this.body[index].value.public_name;\n    }\n    this.markAttachmentAsDeleted(identifier);\n    this.body.splice(index, 1);\n    this.changed = true;\n  }\n\n  convertTemporaryImageFieldsInBody() {\n    this.body\n      .filter((field) => field.type === 'image')\n      .map((field) => field.value)\n      .filter((value) => value.identifier)\n      .forEach((value) => {\n        value.public_name = value.identifier;\n        delete value.identifier;\n        delete value.old_value;\n      });\n  }\n\n  getAttachmentByIdentifier(identifier) {\n    return this.attachments\n      .filter((attachment) => attachment.identifier === identifier)[0];\n  }\n\n  getNewAttachments() {\n    return (this.attachments || [])\n      .filter((attachment) => attachment.is_new === true && !attachment.is_deleted);\n  }\n\n  getMarkedAsDeletedAttachments() {\n    return (this.attachments || [])\n      .filter((attachment) => attachment.is_deleted === true && !attachment.is_new);\n  }\n\n  buildCopy(params = {}) {\n    const copy = super.buildCopy();\n    Object.assign(copy, params);\n    copy.attachments = this.attachments;\n    copy.container = Container.init();\n    copy.is_new = true;\n    copy.is_copy = true;\n    copy.can_update = true;\n    copy.can_copy = true;\n\n    return copy;\n  }\n\n  static copyFromResearchPlanAndCollectionId(research_plan, collection_id) {\n    const attachments = research_plan.attachments.map(\n      attach => Attachment.buildCopy(attach)\n    );\n    const params = {\n      collection_id,\n      name: research_plan.name,\n      body: research_plan.body,\n    }\n    const copy = research_plan.buildCopy(params);\n    copy.can_copy = false;\n    copy.changed = true;\n    copy.collection_id = collection_id;\n    copy.mode = 'edit';\n    copy.attachments = attachments;\n    copy.origin = { id: research_plan.id };\n\n    return copy;\n  }\n}\n","/* eslint-disable no-underscore-dangle */\n/* eslint-disable camelcase */\nimport React from 'react';\nimport _ from 'lodash';\n\nimport Element from 'src/models/Element';\nimport Molecule from 'src/models/Molecule';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport Container from 'src/models/Container';\nimport Segment from 'src/models/Segment';\nimport GasPhaseReactionStore from 'src/stores/alt/stores/GasPhaseReactionStore';\nimport {\n  convertTemperatureToKelvin,\n  calculateVolumeForFeedstockOrGas,\n  calculateGasMoles,\n  updateFeedstockMoles,\n  calculateTON,\n  calculateTONPerTimeValue,\n  determineTONFrequencyValue,\n} from 'src/utilities/UnitsConversion';\n\nconst prepareRangeBound = (args = {}, field) => {\n  const argsNew = args;\n  if (args[field] && typeof args[field] === 'string') {\n    const bounds = args[field].split(/\\.{2,3}/);\n    if (!args[`${field}_upperbound`]) {\n      argsNew[`${field}_upperbound`] = Number.POSITIVE_INFINITY === Number(bounds[1]) ? null : Number(bounds[1]);\n    }\n    if (!args[`${field}_lowerbound`]) {\n      argsNew[`${field}_lowerbound`] = Number.NEGATIVE_INFINITY === Number(bounds[0]) ? null : Number(bounds[0]);\n    }\n    if (argsNew[`${field}_upperbound`] == null || argsNew[`${field}_upperbound`] == null) {\n      argsNew[`${field}_display`] = (argsNew[`${field}_lowerbound`] || '').toString().trim();\n    } else {\n      argsNew[`${field}_display`] = ((argsNew[`${field}_lowerbound`] || '')\n        .toString().concat(' – ', argsNew[`${field}_upperbound`])).trim();\n    }\n  }\n  return argsNew;\n};\n\nexport default class Sample extends Element {\n  // isMethodRestricted(m) {\n  //   return false;\n  // }\n\n  constructor(args) {\n    let argsNew = args;\n    argsNew = prepareRangeBound(argsNew, 'boiling_point');\n    argsNew = prepareRangeBound(argsNew, 'melting_point');\n    super(argsNew);\n  }\n\n  cleanBoilingMelting() {\n    this.boiling_point = null;\n    this.melting_point = null;\n  }\n\n  static copyFromSampleAndCollectionId(\n    sample,\n    collection_id,\n    structure_only = false,\n    keepResidueInfo = false,\n    keepExternalLabel = true\n  ) {\n    const newSample = sample.buildCopy();\n    newSample.collection_id = collection_id;\n    if (sample.name) { newSample.name = sample.name; }\n    if (sample.external_label) { newSample.external_label = sample.external_label; }\n    if (structure_only) {\n      newSample.filterSampleData();\n      newSample.filterResidueData(true);\n      // reset boiling/melting points for products on reaction copy\n      newSample.updateRange('boiling_point', '', '');\n      newSample.updateRange('melting_point', '', '');\n    } else {\n      newSample.filterResidueData(keepResidueInfo);\n    }\n\n    if (keepExternalLabel == false) {\n      newSample.external_label = '';\n    }\n\n    if (sample.elemental_compositions) {\n      newSample.elemental_compositions = sample.elemental_compositions;\n    }\n\n    if (sample.gas_type) {\n      newSample.gas_type = sample.gas_type;\n    }\n\n    if (sample.gas_phase_data) {\n      newSample.gas_phase_data = sample.gas_phase_data;\n    }\n\n    newSample.filterElementalComposition();\n    newSample.segments = Segment.buildCopy(sample.segments);\n    return newSample;\n  }\n\n  filterElementalComposition() {\n    const elemComp = (this.elemental_compositions || []).find((item) => {\n      if (item.composition_type == 'formula') {\n        item.id = null;\n        return item;\n      }\n    });\n    this.elemental_compositions = elemComp ? [elemComp] : [];\n    this.elemental_compositions.push({\n      composition_type: 'found',\n      data: {},\n      description: 'Experimental'\n    });\n    return this;\n  }\n\n  setDefaultResidue() {\n    // set default polymer data\n    this.residues = [\n      {\n        residue_type: 'polymer',\n        custom_info: {\n          formula: 'CH',\n          loading: null,\n          polymer_type: (this.decoupled ? 'self_defined' : 'polystyrene'),\n          loading_type: 'external',\n          external_loading: 0.0,\n          reaction_product: (this.reaction_product ? true : null),\n          cross_linkage: null\n        }\n      }\n    ];\n  }\n\n  filterResidueData(keepResidueInfo = false) {\n    if (this.contains_residues) {\n      if (keepResidueInfo) {\n        // only reset loading\n        this.residues.map((residue) => {\n          Object.assign(residue.custom_info, {\n            external_loading: 0.0,\n            loading: null,\n            loading_type: 'external'\n          });\n        });\n      } else {\n        // set default polymer data\n        this.residues.map((residue) => {\n          Object.assign(residue, {\n            residue_type: 'polymer',\n            custom_info: {\n              formula: 'CH',\n              loading: (residue.custom_info ? residue.custom_info.loading : null),\n              polymer_type: (this.decoupled ? 'self_defined' : 'polystyrene'),\n              loading_type: 'external',\n              external_loading: 0.0,\n              reaction_product: (this.reaction_product ? true : null),\n              cross_linkage: null\n            }\n          });\n        });\n      }\n    }\n    return this;\n  }\n\n  filterSampleData() {\n    // reset to default values\n    this.target_amount_value = 0;\n    this.real_amount_value = 0;\n    this.description = '';\n    this.purity = 1;\n    this.equivalent = 0;\n    this.imported_readout = '';\n\n    return this;\n  }\n\n  static buildNewShortLabel() {\n    const { currentUser } = UserStore.getState();\n    if (!currentUser) { return 'NEW SAMPLE'; }\n    return `${currentUser.initials}-${currentUser.samples_count + 1}`;\n  }\n\n  static defaultStereo() {\n    return { abs: 'any', rel: 'any' };\n  }\n\n  static buildEmpty(collection_id) {\n    const sample = new Sample({\n      collection_id,\n      type: 'sample',\n      external_label: '',\n      target_amount_value: 0,\n      target_amount_unit: 'g',\n      molarity_value: 0,\n      molarity_unit: 'M',\n      metrics: 'mmmm',\n      description: '',\n      purity: 1,\n      density: 0,\n      solvent: [],\n      location: '',\n      molfile: '',\n      molecule: { id: '_none_' },\n      residues: [],\n      elemental_compositions: [{\n        composition_type: 'found',\n        data: {}\n      }],\n      imported_readout: '',\n      attached_amount_mg: '', // field for polymers calculations\n      container: Container.init(),\n      can_update: true,\n      can_copy: false,\n      stereo: Sample.defaultStereo(),\n      decoupled: false,\n      inventory_sample: false,\n      molecular_mass: 0,\n      sum_formula: '',\n      xref: {},\n      gas_type: 'off',\n    });\n\n    sample.short_label = Sample.buildNewShortLabel();\n    return sample;\n  }\n\n  getChildrenCount() {\n    return parseInt(Sample.children_count[this.id] || this.children_count, 10);\n  }\n\n  buildSplitShortLabel() {\n    const children_count = this.getChildrenCount() + 1;\n    return `${this.short_label}-${children_count}`;\n  }\n\n  buildCopy() {\n    const sample = super.buildCopy();\n    sample.short_label = Sample.buildNewShortLabel();\n    sample.container = Container.init();\n    sample.can_update = true;\n    sample.can_copy = false;\n    sample.gas_type = 'off';\n    return sample;\n  }\n\n  static buildNew(sample, collectionId, matGroup = null) {\n    const newSample = Sample.buildEmpty(collectionId);\n\n    if (matGroup === 'reactants' || matGroup === 'solvents') {\n      newSample.short_label = matGroup.slice(0, -1);\n    }\n    if (sample instanceof Sample) {\n      newSample.molecule = sample.molecule;\n      newSample.sample_svg_file = sample.sample_svg_file;\n    } else {\n      newSample.molecule = sample;\n    }\n    if (sample.stereo) {\n      const { abs, rel } = sample.stereo;\n      newSample.stereo = { abs, rel };\n    }\n    newSample.residues = sample.residues || [];\n    newSample.contains_residues = sample.contains_residues;\n    newSample.filterResidueData(true);\n    newSample.density = sample.density;\n    newSample.metrics = sample.metrics;\n    newSample.molfile = sample.molfile || '';\n    newSample.gas_type = 'off';\n    return newSample;\n  }\n\n  buildChild() {\n    Sample.counter += 1;\n    const splitSample = this.buildChildWithoutCounter();\n    splitSample.short_label = splitSample.split_label;\n    Sample.children_count[this.id] = this.getChildrenCount() + 1;\n\n    return splitSample;\n  }\n\n  buildChildWithoutCounter() {\n    const splitSample = this.clone();\n    splitSample.parent_id = this.id;\n    splitSample.id = Element.buildID();\n\n    if (this.name) { splitSample.name = this.name; }\n    if (this.external_label) { splitSample.external_label = this.external_label; }\n    if (this.elemental_compositions) {\n      splitSample.elemental_compositions = this.elemental_compositions;\n    }\n    splitSample.created_at = null;\n    splitSample.updated_at = null;\n    splitSample.target_amount_value = 0;\n    splitSample.real_amount_value = null;\n    splitSample.is_split = true;\n    splitSample.is_new = true;\n    splitSample.split_label = splitSample.buildSplitShortLabel();\n    // Todo ???\n    splitSample.container = Container.init();\n    splitSample.gas_type = 'off';\n    return splitSample;\n  }\n\n  get isSplit() {\n    return this.is_split;\n  }\n\n  set isSplit(is_split) {\n    this.is_split = is_split;\n  }\n\n  serialize() {\n    const serialized = super.serialize({\n      name: this.name,\n      external_label: this.external_label,\n      target_amount_value: this.target_amount_value,\n      target_amount_unit: this.target_amount_unit,\n      real_amount_value: this.real_amount_value,\n      real_amount_unit: this.real_amount_unit,\n      molarity_value: this.molarity_value,\n      molarity_unit: this.molarity_unit,\n      description: this.description,\n      purity: this.purity,\n      short_label: this.short_label,\n      solvent: this.solvent,\n      location: this.location,\n      molfile: this.molfile,\n      molecule: this.molecule && this.molecule.serialize(),\n      molecule_id: this.molecule && (this.molecule.id === '_none_' ? null : this.molecule.id),\n      molecule_name_id: this.molecule_name && this.molecule_name.value,\n      sample_svg_file: this.sample_svg_file,\n      is_top_secret: this.is_top_secret || false,\n      dry_solvent: this.dry_solvent,\n      parent_id: this.parent_id,\n      density: this.density,\n      metrics: this.metrics,\n      boiling_point_upperbound: this.boiling_point_upperbound,\n      boiling_point_lowerbound: this.boiling_point_lowerbound,\n      melting_point_upperbound: this.melting_point_upperbound,\n      melting_point_lowerbound: this.melting_point_lowerbound,\n      residues: this.residues,\n      elemental_compositions: this.elemental_compositions,\n      is_split: this.is_split || false,\n      is_new: this.is_new,\n      imported_readout: this.imported_readout,\n      container: this.container,\n      xref: this.xref,\n      stereo: this.stereo,\n      user_labels: this.user_labels || [],\n      decoupled: this.decoupled,\n      molecular_mass: this.molecular_mass,\n      sum_formula: this.sum_formula,\n      inventory_sample: this.inventory_sample,\n      segments: this.segments.map((s) => s.serialize()),\n      is_repo_public: this.is_repo_public\n    });\n\n    return serialized;\n  }\n\n  get is_top_secret() {\n    return this._is_top_secret;\n  }\n\n  set is_top_secret(is_top_secret) {\n    this._is_top_secret = is_top_secret;\n  }\n\n  get dry_solvent() {\n    return this._dry_solvent;\n  }\n\n  set dry_solvent(dry_solvent) {\n    this._dry_solvent = dry_solvent;\n  }\n\n  set contains_residues(value) {\n    this._contains_residues = value;\n    if (value) {\n      if (!this.residues.length) {\n        this.setDefaultResidue();\n      } else {\n        this.residues[0]._destroy = undefined;\n      }\n\n      this.elemental_compositions.map((item) => {\n        if (item.composition_type == 'formula') { item._destroy = true; }\n      });\n    } else {\n      // this.sample_svg_file = '';\n      if (this.residues.length) { this.residues[0]._destroy = true; } // delete residue info\n\n      this.elemental_compositions.map((item) => {\n        if (item.composition_type == 'loading') { item._destroy = true; }\n      });\n    }\n  }\n\n  get contains_residues() {\n    return this._contains_residues;\n  }\n\n  title() {\n    const { profile } = UserStore.getState();\n    const show_external_name = profile ? profile.show_external_name : false;\n    const show_sample_name = profile ? profile.show_sample_name : false;\n    const { external_label } = this;\n    const extLabelClass = 'label--bold';\n    const { name } = this;\n    const { short_label } = this;\n\n    const { currentUser } = UserStore.getState();\n    let isRepoSecret = false;\n    if (this.is_repo_public) {\n      if (currentUser.is_reviewer || currentUser.id === this.created_by) isRepoSecret = false;\n      else isRepoSecret = true;\n    }\n\n    if(show_external_name && !isRepoSecret) {\n      return (external_label ? <span className={extLabelClass}>{external_label}</span> : short_label);\n    } if (show_sample_name) {\n      return (name ? <span className={extLabelClass}>{name}</span> : short_label);\n    }\n    return short_label;\n  }\n\n  get molecule_name_label() {\n    return this.molecule_name_hash && this.molecule_name_hash.label;\n  }\n\n  get molecule_name() {\n    return this.molecule_name_hash;\n  }\n\n  set molecule_name(mno) {\n    this.molecule_name_hash = mno;\n  }\n\n  get name() {\n    return this._name;\n  }\n\n  set name(name) {\n    this._name = name;\n  }\n\n  get is_repo_public() {\n    return this._is_repo_public;\n  }\n\n  set is_repo_public(is_repo_public) {\n    this._is_repo_public = is_repo_public;\n  }\n\n  get short_label() {\n    return this._short_label;\n  }\n\n  set short_label(short_label) {\n    this._short_label = short_label;\n  }\n\n  get external_label() {\n    return this._external_label;\n  }\n\n  set external_label(label) {\n    this._external_label = label;\n  }\n\n  get preferred_label() {\n    return this._external_label || this.molecule.iupac_name || this.molecule_formula;\n  }\n\n  set preferred_label(label) {\n    this._preferred_label = label;\n  }\n\n  set segments(segments) {\n    this._segments = (segments && segments.map((s) => new Segment(s))) || [];\n  }\n\n  get segments() {\n    return this._segments || [];\n  }\n\n  showedName() {\n    return this.showed_name;\n  }\n\n  userLabels() {\n    return this.user_labels;\n  }\n\n  iupac_name_tag(length) {\n    const iupac_name = this.molecule.iupac_name || '';\n    return iupac_name.length > length\n      ? `${iupac_name.slice(0, length)}...`\n      : iupac_name;\n  }\n\n  get location() {\n    return this._location;\n  }\n\n  set location(location) {\n    this._location = location;\n  }\n\n  get description() {\n    return this._description;\n  }\n\n  set description(description) {\n    this._description = description;\n  }\n\n  get metrics() {\n    return this._metrics || 'mmmm';\n  }\n\n  set metrics(metrics) {\n    this._metrics = metrics;\n  }\n\n  get molarity_value() {\n    return this._molarity_value;\n  }\n\n  set molarity_value(molarity_value) {\n    this._molarity_value = molarity_value;\n  }\n\n  get molarity_unit() {\n    return this._molarity_unit;\n  }\n\n  set molarity_unit(molarity_unit) {\n    this._molarity_unit = molarity_unit;\n  }\n\n  get imported_readout() {\n    return this._imported_readout;\n  }\n\n  set imported_readout(imported_readout) {\n    this._imported_readout = imported_readout;\n  }\n\n  updateRange(field, lower, upper) {\n    this[`${field}_lowerbound`] = lower;\n    this[`${field}_upperbound`] = upper;\n    if (lower === '' && upper === '') {\n      this[`${field}_display`] = lower.toString();\n      this[field] = lower.toString();\n    } else if (lower === upper) {\n      this[`${field}_upperbound`] = '';\n      this[`${field}_display`] = lower.toString();\n      this[field] = lower.toString().concat('...', Number.POSITIVE_INFINITY);\n    } else {\n      this[`${field}_display`] = (lower.toString().concat(' – ', upper)).trim();\n      this[field] = lower.toString().concat('..', upper);\n    }\n  }\n\n  setAmount(amount) {\n    if (amount.unit && !isNaN(amount.value)) {\n      this.amount_value = amount.value;\n      this.amount_unit = amount.unit;\n    }\n  }\n\n  setUnitMetrics(unit, metricPrefix) {\n    const mp = metricPrefix || 'm';\n    if (unit === 'l') {\n      this.metrics = (this.metrics && this.metrics.replace(/(.{1}).{1}/, `$1${mp}`)) || 'mmmm';\n    } else if (unit === 'mol') {\n      this.metrics = (this.metrics && this.metrics.replace(/(.{2}).{1}/, `$1${mp}`)) || 'mmmm';\n    } else if (unit === 'mol/l') {\n      if (this.metrics && this.metrics.length === 3) {\n        this.metrics += mp;\n      } else {\n        this.metrics = (this.metrics && this.metrics.replace(/(.{3}).{1}/, `$1${mp}`)) || 'mmmm';\n      }\n    } else {\n      this.metrics = (this.metrics && this.metrics.replace(/(.{0}).{1}/, `$1${mp}`)) || 'mmmm';\n    }\n  }\n\n  setAmountAndNormalizeToGram(amount) {\n    this.amount_value = this.convertToGram(amount.value, amount.unit);\n    this.amount_unit = 'g';\n  }\n\n  setMetrics(metrics) {\n    this.metrics = metrics.value;\n  }\n\n  setDensity(density) {\n    this.density = density.value;\n    this.molarity_value = 0;\n  }\n\n  setMolecularMass(mass) {\n    this.molecular_mass = mass.value;\n  }\n\n  setUserLabels(userLabels) {\n    this.user_labels = userLabels;\n  }\n\n  setMolarity(molarity) {\n    this.molarity_value = molarity.value;\n    this.molarity_unit = molarity.unit;\n    this.density = 0;\n  }\n\n  get amountType() {\n    return this._current_amount_type || this.defaultAmountType();\n  }\n\n  set amountType(amount_type) {\n    this._current_amount_type = amount_type;\n  }\n\n  defaultAmountType() {\n    return (this.real_amount_value ? 'real' : 'target');\n  }\n\n  get defined_part_amount() {\n    const mw = this.molecule_molecular_weight;\n    return this.amount_mol * mw / 1000.0;\n  }\n\n  // amount proxy\n\n  get amount() {\n    return ({\n      value: this.amount_value,\n      unit: this.amount_unit\n    });\n  }\n\n  get amount_value() {\n    return this.amountType === 'real' ? this.real_amount_value : this.target_amount_value;\n  }\n\n  set amount_value(amount_value) {\n    if (this.amountType === 'real') {\n      this.real_amount_value = amount_value;\n    } else {\n      this.target_amount_value = amount_value;\n    }\n  }\n\n  get amount_unit() {\n    return (this.amountType === 'real' ? this.real_amount_unit : this.target_amount_unit) || 'g';\n  }\n\n  set amount_unit(amount_unit) {\n    if (this.amountType === 'real') {\n      this.real_amount_unit = amount_unit;\n    } else {\n      this.target_amount_unit = amount_unit;\n    }\n  }\n\n  get has_molarity() {\n    return this.molarity_value > 0 && this.density === 0;\n  }\n\n  get has_density() {\n    return this.density > 0 && this.molarity_value === 0;\n  }\n\n  // target amount\n\n  get target_amount_value() {\n    return this._target_amount_value;\n  }\n\n  set target_amount_value(amount_value) {\n    this._target_amount_value = amount_value;\n  }\n\n  get target_amount_unit() {\n    return this._target_amount_unit || 'g';\n  }\n\n  set target_amount_unit(amount_unit) {\n    this._target_amount_unit = amount_unit;\n  }\n\n  // real amount\n\n  get real_amount_value() {\n    return this._real_amount_value;\n  }\n\n  set real_amount_value(amount_value) {\n    this._real_amount_value = amount_value;\n  }\n\n  get real_amount_unit() {\n    return this._real_amount_unit || 'g';\n  }\n\n  set real_amount_unit(amount_unit) {\n    this._real_amount_unit = amount_unit;\n  }\n\n  get amount_g() {\n    return this.convertToGram(this.amount_value, this.amount_unit);\n  }\n\n  get amount_l() {\n    if (this.amount_unit === 'l') return this.amount_value;\n    return this.convertGramToUnit(this.amount_g, 'l');\n  }\n\n  get amount_mol() {\n    if (this.amount_unit === 'mol' && (this.gas_type === 'gas'\n    || this.gas_type === 'feedstock')) return this.amount_value;\n    return this.convertGramToUnit(this.amount_g, 'mol');\n  }\n\n  calculateFeedstockOrGasMoles(purity, gasType, amountLiter = null) {\n    // number of moles for feedstock = Purity*1*Volume/(0.0821*294) & pressure = 1\n    // number of moles for gas =  ppm*1*V/(0.0821*temp_in_K*1000000) & pressure = 1\n    if (gasType === 'gas') {\n      const vesselSize = this.fetchReactionVesselSizeFromStore();\n      return this.updateGasMoles(vesselSize);\n    }\n    return updateFeedstockMoles(purity, amountLiter, this.amount_l);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  fetchReactionVesselSizeFromStore() {\n    const gasPhaseStore = GasPhaseReactionStore.getState();\n    return gasPhaseStore.reactionVesselSizeValue;\n  }\n\n  updateGasMoles(volume) {\n    const { part_per_million, temperature } = this.gas_phase_data;\n    const temperatureInKelvin = convertTemperatureToKelvin(temperature);\n\n    if (!temperatureInKelvin || temperatureInKelvin === 0 || !part_per_million || part_per_million === 0\n      || !volume) {\n      this.updateTONValue(null);\n      return null;\n    }\n\n    const moles = calculateGasMoles(volume, part_per_million, temperatureInKelvin);\n    this.updateTONValue(moles);\n    return moles;\n  }\n\n  updateTONPerTimeValue(tonValue, gasPhaseTime) {\n    const { value, unit } = gasPhaseTime;\n    const tonFrequencyUnit = this.gas_phase_data.turnover_frequency.unit;\n\n    const timeValues = calculateTONPerTimeValue(value, unit);\n\n    this.gas_phase_data.turnover_frequency.value = determineTONFrequencyValue(\n      tonValue,\n      tonFrequencyUnit,\n      timeValues,\n      value\n    );\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  fetchCatalystMoleFromStore() {\n    const gasPhaseStore = GasPhaseReactionStore.getState();\n    return gasPhaseStore.catalystReferenceMolValue;\n  }\n\n  updateTONValue(moles) {\n    if (this.gas_phase_data) {\n      const moleOfCatalystReference = this.fetchCatalystMoleFromStore();\n      const value = calculateTON(moles, moleOfCatalystReference);\n      this.gas_phase_data.turnover_number = value;\n      const gasPhaseTime = this.gas_phase_data.time;\n      this.updateTONPerTimeValue(value, gasPhaseTime);\n    }\n  }\n  // Menge in mmol = Menge (mg) * Reinheit  / Molmasse (g/mol)\n  // Volumen (ml) = Menge (mg) / Dichte (g/ml) / 1000\n  // Menge (mg)  = Volumen (ml) * Dichte (g/ml) * 1000\n  // Menge (mg) = Menge (mmol)  * Molmasse (g/mol) / Reinheit\n\n  convertGramToUnit(amount_g = 0, unit) {\n    const purity = this.purity || 1.0;\n    const molecularWeight = this.molecule_molecular_weight;\n    if (this.contains_residues) {\n      const { loading } = this.residues[0].custom_info;\n      switch (unit) {\n        case 'g':\n          return amount_g;\n        case 'mol':\n          return (loading * amount_g) / 1000.0; // loading is always in mmol/g\n        default:\n          return amount_g;\n      }\n    } else {\n      switch (unit) {\n        case 'g':\n          return amount_g;\n        case 'l': {\n          if (this.gas_type && this.gas_type !== 'off' && this.gas_type !== 'catalyst') {\n            return calculateVolumeForFeedstockOrGas(\n              amount_g,\n              molecularWeight,\n              purity,\n              this.gas_type,\n              this.gas_phase_data\n            );\n          }\n          if (this.has_molarity) {\n            const molarity = this.molarity_value;\n            return (amount_g * purity) / (molarity * molecularWeight);\n          } if (this.has_density) {\n            const { density } = this;\n            return amount_g / (density * 1000);\n          }\n          return 0;\n        }\n        case 'mol': {\n          if (this.gas_type && this.gas_type !== 'off' && this.gas_type !== 'catalyst') {\n            return this.calculateFeedstockOrGasMoles(purity, this.gas_type);\n          }\n          if (this.has_molarity) {\n            return this.amount_l * this.molarity_value;\n          }\n          return (amount_g * purity) / molecularWeight;\n        }\n        default:\n          return amount_g;\n      }\n    }\n  }\n\n  convertToGram(amount_value, amount_unit) {\n    if (this.contains_residues) {\n      const amountValue = amount_value;\n      switch (amount_unit) {\n        case 'g':\n          return amountValue;\n        case 'mg':\n          return amountValue / 1000.0;\n        case 'mol': {\n          const { loading } = this.residues[0].custom_info;\n          if (!loading) return 0.0;\n\n          return (amountValue / loading) * 1000.0;\n        }\n        default:\n          return amountValue;\n      }\n    } else {\n      switch (amount_unit) {\n        case 'g':\n          return amount_value;\n        case 'mg':\n          return amount_value / 1000.0;\n        case 'l': {\n          // amount in  gram for feedstock gas material is calculated according to equation of molecular weight x moles\n          if (this.gas_type && this.gas_type !== 'off' && this.gas_type !== 'catalyst') {\n            const molecularWeight = this.molecule_molecular_weight;\n            const purity = this.purity || 1.0;\n            const moles = this.calculateFeedstockOrGasMoles(purity, this.gas_type, amount_value);\n            return moles * molecularWeight;\n          }\n          if (this.has_molarity) {\n            const molecularWeight = this.molecule_molecular_weight;\n            return amount_value * this.molarity_value * molecularWeight;\n          } if (this.has_density) {\n            return amount_value * (this.density || 1.0) * 1000;\n          }\n          return 0;\n        }\n        case 'mol': {\n          const molecularWeight = this.molecule_molecular_weight;\n          return (amount_value / (this.purity || 1.0)) * molecularWeight;\n        }\n        default:\n          return amount_value;\n      }\n    }\n  }\n\n  get molecule_iupac_name() {\n    return this.molecule_name_hash && this.molecule_name_hash.label\n        || this.molecule && this.molecule.iupac_name;\n  }\n\n  set molecule_iupac_name(iupac_name) {\n    this.molecule.iupac_name = iupac_name;\n  }\n\n  get molecule_molecular_weight() {\n    if (this.decoupled) {\n      return this.molecular_mass;\n    }\n\n    return this.molecule && this.molecule.molecular_weight;\n  }\n\n  get molecule_exact_molecular_weight() {\n    return !this.decoupled && this.molecule && this.molecule.exact_molecular_weight;\n  }\n\n  get molecule_formula() {\n    if (this.decoupled) {\n      return (this.sum_formula && this.sum_formula.length) ? this.sum_formula : '';\n    }\n\n    return this.molecule && this.molecule.sum_formular;\n  }\n\n  get molecule_inchistring() {\n    return this.molecule && this.molecule.inchistring;\n  }\n\n  get molecule_inchikey() {\n    return this.molecule && this.molecule.inchikey;\n  }\n\n  get molecule_cano_smiles() {\n    return this.molecule && this.molecule.cano_smiles;\n  }\n\n  get purity() {\n    return this._purity;\n  }\n\n  set purity(purity) {\n    this._purity = purity;\n  }\n\n  get molecule() {\n    return this._molecule;\n  }\n\n  set molecule(molecule) {\n    this._molecule = new Molecule(molecule);\n    if (molecule.temp_svg) { this.sample_svg_file = molecule.temp_svg; }\n  }\n\n  get polymer_formula() {\n    return this.contains_residues && this.residues[0].custom_info.formula.toString();\n  }\n\n  get concat_formula() {\n    if (!this.molecule_formula) {\n      return '';\n    }\n\n    if (this.contains_residues) {\n      return this.molecule_formula + this.polymer_formula;\n    }\n\n    return this.molecule_formula;\n  }\n\n  get polymer_type() {\n    if (this.contains_residues) {\n      const info = this.residues[0].custom_info;\n      return (info.polymer_type ? info.polymer_type : info.surface_type).toString();\n    }\n    return false;\n  }\n\n  get loading() {\n    if (this.contains_residues) {\n      return this.residues[0].custom_info.loading;\n    }\n    return false;\n  }\n\n  set loading(loading) {\n    if (this.contains_residues) { this.residues[0].custom_info.loading = loading; }\n  }\n\n  get external_loading() {\n    if (this.contains_residues) {\n      return this.residues[0].custom_info.external_loading;\n    }\n    return false;\n  }\n\n  set external_loading(loading) {\n    if (this.contains_residues) {\n      this.residues[0].custom_info.external_loading = loading;\n    }\n  }\n\n  get error_loading() {\n    // TODO: temporary disabled\n    // return this.contains_residues && !this.loading && !this.reaction_product;\n    return false;\n  }\n\n  get isValid() {\n    return (this && ((this.molfile && !this.decoupled) || this.decoupled)\n        && !this.error_loading && !this.error_polymer_type);\n  }\n\n  get svgPath() {\n    if (this.show_label) {\n      return `svg_text/${this.labelText}`;\n    }\n\n    if (this.sample_svg_file) {\n      if (this.sample_svg_file === '***') {\n        return '/images/wild_card/no_image_180.svg';\n      }\n      return `/images/samples/${this.sample_svg_file}`;\n    }\n    return this.molecule && this.molecule.molecule_svg_file\n      ? `/images/molecules/${this.molecule.molecule_svg_file}` : '';\n  }\n  // todo: have a dedicated Material Sample subclass\n\n  get labelText() {\n    return this.name || this.molecule_formula || this.molecule.iupac_name;\n  }\n\n  set equivalent(equivalent) {\n    this._equivalent = equivalent;\n  }\n\n  get equivalent() {\n    return this._equivalent;\n  }\n\n  set scheme_yield(scheme_yield) {\n    this._scheme_yield = scheme_yield;\n  }\n\n  get scheme_yield() {\n    return this._scheme_yield;\n  }\n\n  set conc(conc) {\n    this._conc = conc;\n  }\n\n  get conc() {\n    return this._conc;\n  }\n\n  set maxAmount(maxAmount) {\n    this._maxAmount = maxAmount;\n  }\n\n  get maxAmount() {\n    return this._maxAmount;\n  }\n\n  serializeMaterial() {\n    const params = this.serialize();\n    const extra_params = {\n      equivalent: this.equivalent,\n      position: this.position,\n      reference: this.reference || false,\n      show_label: (this.decoupled && !this.molfile) ? true : (this.show_label || false),\n      waste: this.waste,\n      coefficient: this.coefficient,\n      gas_type: this.gas_type || false,\n      gas_phase_data: this.gas_phase_data,\n      conversion_rate: this.conversion_rate,\n    };\n    _.merge(params, extra_params);\n    return params;\n  }\n\n  // Container & Analyses routines\n  addAnalysis(analysis) {\n    this.container.children.filter(\n      (element) => ~element.container_type.indexOf('analyses')\n    )[0].children.push(analysis);\n  }\n\n  attachments() {\n    let target = [];\n    this.datasetContainers().forEach((dt) => {\n      const atts = dt.attachments;\n      target = [...target, ...atts];\n    });\n    return target;\n  }\n\n  calculateMaxAmount(referenceSample) {\n    const refAmount = referenceSample.amount_mol;\n    const sampleCoeff = this.coefficient || 1.0;\n    const refCoeff = (referenceSample.coefficient || 1.0);\n    const coeffQuotient = sampleCoeff / refCoeff;\n\n    this.maxAmount = refAmount * coeffQuotient * this.molecule_molecular_weight;\n  }\n\n  get solvent() {\n    try {\n      // handle the old solvent data\n      const jsonSolvent = JSON.parse(this._solvent);\n      const solv = [];\n      if (jsonSolvent) {\n        solv.push(jsonSolvent);\n      }\n      return solv;\n    } catch (e) {\n      return this._solvent;\n    }\n  }\n\n  set solvent(solvent) {\n    this._solvent = solvent;\n  }\n\n  set gas_phase_data(gas_phase_data) {\n    let initializeGasPhaseData;\n    if (gas_phase_data === null || gas_phase_data === undefined) {\n      initializeGasPhaseData = {\n        time: { unit: 'h', value: null },\n        temperature: { unit: 'K', value: null },\n        turnover_number: null,\n        part_per_million: null,\n        turnover_frequency: { unit: 'TON/h', value: null }\n      };\n    }\n    this._gas_phase_data = gas_phase_data || initializeGasPhaseData;\n  }\n\n  get gas_phase_data() {\n    return this._gas_phase_data;\n  }\n\n  addSolvent(newSolvent) {\n    const { molecule } = newSolvent;\n    if (molecule) {\n      const tmpSolvents = [];\n      if (this.solvent) {\n        Object.assign(tmpSolvents, this.solvent);\n      }\n      const solventData = {\n        label: molecule.iupac_name, smiles: molecule.cano_smiles, inchikey: molecule.inchikey, ratio: 1\n      };\n      const filtered = tmpSolvents.find((solv) => (solv && solv.label === solventData.label\n            && solv.smiles === solventData.smiles\n            && solv.inchikey && solventData.inchikey));\n      if (!filtered) {\n        tmpSolvents.push(solventData);\n      }\n      this.solvent = tmpSolvents;\n    }\n  }\n\n  deleteSolvent(solventToDelete) {\n    const tmpSolvents = [];\n    if (this.solvent) {\n      Object.assign(tmpSolvents, this.solvent);\n    }\n\n    const filteredIndex = tmpSolvents.findIndex((solv) => (solv.label === solventToDelete.label\n            && solv.smiles === solventToDelete.smiles\n            && solv.inchikey === solventToDelete.inchikey));\n    if (filteredIndex >= 0) {\n      tmpSolvents.splice(filteredIndex, 1);\n    }\n    this.solvent = tmpSolvents;\n  }\n\n  updateSolvent(solventToUpdate) {\n    const tmpSolvents = [];\n    if (this.solvent) {\n      Object.assign(tmpSolvents, this.solvent);\n    }\n\n    const filteredIndex = tmpSolvents.findIndex((solv) => (solv.smiles === solventToUpdate.smiles\n              && solv.inchikey && solventToUpdate.inchikey));\n    if (filteredIndex >= 0) {\n      tmpSolvents[filteredIndex] = solventToUpdate;\n    }\n    this.solvent = tmpSolvents;\n  }\n\n  analysisArray() {\n    const analyses = this.container.children.find(c => (c && c.container_type === 'analyses'));\n    return analyses ? analyses.children : [];\n  }\n}\n\nSample.counter = 0;\nSample.children_count = {};\n","import Element from 'src/models/Element';\nimport Wellplate from 'src/models/Wellplate';\nimport Container from 'src/models/Container';\nimport Segment from 'src/models/Segment';\n\nexport default class Screen extends Element {\n  static buildEmpty(collectionID) {\n    const descriptionDefault = {\n      ops: [{ insert: '' }]\n    };\n\n    return new Screen({\n      collection_id: collectionID,\n      type: 'screen',\n      name: 'New Screen',\n      collaborator: '',\n      requirements: '',\n      conditions: '',\n      result: '',\n      description: descriptionDefault,\n      wellplates: [],\n      research_plans: [],\n      container: Container.init(),\n      segments: [],\n      component_graph_data: {\n        nodes: [],\n        edges: []\n      }\n    });\n  }\n\n  static buildFromWellplatesAndCollectionId(clipboardWellplates, collection_id) {\n    let descriptionDefault = {\n      ops: [{ insert: \"\" }]\n    };\n\n    return new Screen({\n      collection_id: collectionID,\n      type: 'screen',\n      name: 'New Screen with Wellplates',\n      collaborator: '',\n      requirements: '',\n      conditions: '',\n      result: '',\n      description: descriptionDefault,\n      wellplates: clipboardWellplates,\n      research_plans: [],\n      container: Container.init(),\n      segments: [],\n      component_graph_data: {\n        nodes: [],\n        edges: []\n      }\n    })\n  }\n\n  serialize() {\n    return super.serialize({\n      name: this.name,\n      collaborator: this.collaborator,\n      result: this.result,\n      conditions: this.conditions,\n      requirements: this.requirements,\n      description: this.description,\n      wellplate_ids: this.wellplateIDs,\n      research_plan_ids: this.researchPlanIDs,\n      container: this.container,\n      segments: this.segments.map(s => s.serialize()),\n      component_graph_data: this.component_graph_data\n    })\n  }\n\n  get name() {\n    return this._name;\n  }\n\n  set name(name) {\n    this._name = name;\n  }\n\n  get collaborator() {\n    return this._collaborator;\n  }\n\n  set collaborator(collaborator) {\n    this._collaborator = collaborator;\n  }\n\n  get requirements() {\n    return this._requirements;\n  }\n\n  set requirements(requirements) {\n    this._requirements = requirements;\n  }\n\n  get conditions() {\n    return this._conditions;\n  }\n\n  set conditions(conditions) {\n    this._conditions = conditions;\n  }\n\n  get result() {\n    return this._result;\n  }\n\n  set result(result) {\n    this._result = result;\n  }\n\n  get description() {\n    return this._description;\n  }\n\n  set description(description) {\n    this._description = description;\n  }\n\n  get wellplates() {\n    return this._wellplates;\n  }\n\n  set wellplates(wellplates) {\n    this._wellplates = wellplates.map(w => new Wellplate(w));\n  }\n\n  get wellplateIDs() {\n    return this._wellplates.map(w => w.id);\n  }\n\n  get researchPlanIDs() {\n    return this.research_plans.map(rp => rp.id);\n  }\n\n  set segments(segments) {\n    this._segments = (segments && segments.map(s => new Segment(s))) || [];\n  }\n\n  get segments() {\n    return this._segments || [];\n  }\n\n  title() {\n    return this.name;\n  }\n\n  get componentGraphData() {\n    if (this.component_graph_data == {}) {\n      return { nodes: {}, edges: {} }\n    } else {\n      return this.component_graph_data\n    }\n  }\n\n  set componentGraphData(data) {\n    if (data == {}) {\n      console.debug('received empty component graph data!');\n      this.component_graph_data = { nodes: {}, edges: {} };\n    } else {\n      this.component_graph_data = data;\n    }\n  }\n}\n","import { cloneDeep } from 'lodash';\nimport { buildInitWF, resetProperties } from 'chem-generic-ui';\nimport Element from 'src/models/Element';\n\nexport default class Segment extends Element {\n  static buildEmpty(klass) {\n    const template = (klass && klass.properties_release) || {};\n    return new Segment({\n      segment_klass_id: this.segment_klass_id || (klass && klass.id),\n      properties: buildInitWF(template),\n      select_options: template.select_options || {},\n      segment_klass: klass,\n      properties_release: cloneDeep(template),\n      files: [],\n      wfLayers: template,\n    });\n  }\n\n  static buildCopy(_segments) {\n    const newSegments = cloneDeep(_segments);\n    newSegments.map((_segment) => {\n      // eslint-disable-next-line no-param-reassign\n      _segment.properties = resetProperties(_segment.properties);\n      return _segment;\n    });\n    return newSegments;\n  }\n\n  serialize() {\n    return super.serialize({\n      klassType: 'Segment',\n      segment_klass: this.segment_klass,\n      segment_klass_id: this.segment_klass_id,\n      properties: this.properties,\n      properties_release: this.properties_release,\n      files: this.files,\n    });\n  }\n}\n","export default class StructureDef {\n  constructor(args) {\n    Object.assign(this, args);\n\n    if (!this.getMolfileFunction) {\n      this.getMolfileFunction = this.defaultGetMolfileFunction;\n    }\n  }\n\n  defaultGetMolfileFunction() {\n    return new Promise((resolve) => {\n      const mf = this.editor.getMolfile();\n      resolve(mf);\n    });\n  }\n\n  getEditor() {\n    const frame = document.getElementById(this.id);\n    if (frame && ('contentDocument' in frame)) {\n      return frame.contentWindow[this.path];\n    }\n    return document.frames && document.frames[this.id] &&\n      document.frames[this.id].window[this.path];\n  }\n\n  get editor() {\n    return this.getEditorFunction ? this.getEditorFunction() : this.getEditor();\n  }\n\n  get molfile() {\n    const func = this.editor[this.getMfFuncName];\n    let result;\n    if (!func) { return null; }\n    if (this.getMfWithCallback) {\n      this.editor[this.getMfFuncName]((a) => { result = a; });\n    } else {\n      result = func();\n    }\n    return result;\n  }\n\n  set molfile(mf) {\n    if (this.setMolfileInFrame) {\n      const frame = document.getElementById(this.id);\n      if (frame && ('contentDocument' in frame)) {\n        if (frame.contentWindow[this.setMolfileInFrame] && mf) {\n          frame.contentWindow[this.setMolfileInFrame] = mf;\n        }\n      }\n    } else {\n      // eslint-disable-next-line no-unused-expressions\n      this.editor && this.editor[this.setMfFuncName] && this.editor[this.setMfFuncName](mf);\n    }\n  }\n\n  get svg() {\n    const func = this.editor[this.getSVGFuncName];\n    let result;\n    if (!func) { return null; }\n    if (this.getSVGWithCallback) {\n      this.editor[this.getSVGFuncName]((a) => { result = a; });\n    } else {\n      result = func();\n    }\n    return result;\n  }\n\n  fetchSVG() {\n    const func = this.editor[this.getSVGFuncName];\n    return new Promise((resolve, reject) => {\n      if (!func) { reject(new Error(`get ${'svg'} method missing`)); }\n      if (this.getSVGWithCallback) {\n        this.editor[this.getSVGFuncName]((a) => { resolve(a); });\n      } else {\n        resolve(func());\n      }\n    });\n  }\n\n  get smiles() {\n    const func = this.editor[this.getSmiFuncName];\n    if (!func) { return null; }\n    let result;\n    if (this.getSmiWithCallback) {\n      this.editor[this.getSmiFuncName]((a) => { result = a; });\n    } else {\n      result = func();\n    }\n    return result;\n  }\n\n  get info() {\n    return (\n      {\n        smiles: this.smiles || '',\n        inchikey: '',\n        inchi: '',\n      }\n    );\n  }\n}\n","/* eslint-disable no-underscore-dangle */\nimport uuid from 'uuid';\nimport StructureDef from 'src/models/StructureDef';\n\nexport default class StructureEditor {\n  constructor(args) {\n    Object.assign(this, args);\n    if (!this.id) {\n      this.id = StructureEditor.buildID();\n    }\n    this.structureDef = this.buildStructureDef();\n  }\n\n  static buildID() {\n    return uuid.v1();\n  }\n\n  get structureDef() {\n    return this._structureDef;\n  }\n\n  set structureDef(structureDef) {\n    this._structureDef = structureDef;\n  }\n\n  buildStructureDef() {\n    return new StructureDef({ id: this.id, path: this.path, ...this.structure });\n  }\n}\n","/* eslint-disable no-underscore-dangle */\nimport Element from 'src/models/Element';\nimport Sample from 'src/models/Sample';\n\nexport default class Well extends Element {\n  serialize() {\n    return super.serialize({\n      position: this.position,\n      readouts: this.readouts || [],\n      sample: this.sample && new Sample(this.sample).serialize()\n    });\n  }\n\n  set sample(sample) {\n    this._sample = (sample) ? new Sample(sample) : null;\n  }\n\n  get sample() {\n    return this._sample;\n  }\n}\n","/* eslint-disable no-underscore-dangle */\nimport Element from 'src/models/Element';\nimport Well from 'src/models/Well';\nimport Container from 'src/models/Container';\nimport Segment from 'src/models/Segment';\n\nexport default class Wellplate extends Element {\n  constructor(args) {\n    super(args);\n    this.#initEmptyWells();\n  }\n\n  static buildEmpty(collectionId, width = 12, height = 8) {\n    return new Wellplate(\n      {\n        collection_id: collectionId,\n        type: 'wellplate',\n        name: 'New Wellplate',\n        width,\n        height,\n        description: Wellplate.quillDefault(),\n        wells: [],\n        readout_titles: [],\n        container: Container.init(),\n        segments: [],\n        attachments: []\n      }\n    );\n  }\n\n  static buildFromSamplesAndCollectionId(clipboardSamples, collectionId, width = 12, height = 8) {\n    if (clipboardSamples.length > width * height) {\n      throw new Error(`Wellplate of size ${width * height} to small for ${clipboardSamples.length} samples!`);\n    }\n\n    const samples = clipboardSamples.map((sample) => sample.buildChild());\n\n    const wellplate = Wellplate.buildEmpty(collectionId, width, height);\n\n    samples.forEach((sample, index) => {\n      wellplate.wells[index].sample = sample;\n    });\n\n    return wellplate;\n  }\n\n  static get MAX_DIMENSION() {\n    return 99;\n  }\n\n  get name() {\n    return this._name;\n  }\n\n  set name(name) {\n    this._name = name;\n  }\n\n  get description() {\n    return this._description;\n  }\n\n  set description(description) {\n    this._description = description;\n  }\n\n  get wells() {\n    return this._wells;\n  }\n\n  set wells(wells) {\n    this._wells = wells.map((w) => new Well(w));\n  }\n\n  set segments(segments) {\n    this._segments = (segments && segments.map((s) => new Segment(s))) || [];\n  }\n\n  get segments() {\n    return this._segments || [];\n  }\n\n  get size() {\n    return this.width * this.height;\n  }\n\n  title() {\n    const shortLabel = this.short_label ? this.short_label : '';\n    return this.name ? `${shortLabel} ${this.name}` : shortLabel;\n  }\n\n  serialize() {\n    return super.serialize({\n      name: this.name,\n      size: this.size,\n      description: this.description,\n      wells: this.wells.map((w) => w.serialize()),\n      readout_titles: this.readout_titles,\n      container: this.container,\n      height: this.height,\n      width: this.width,\n      attachments: this.attachments,\n      segments: this.segments.map((s) => s.serialize())\n    });\n  }\n\n  changeSize(width, height) {\n    // change actual dimensions\n    this.width = Number(width);\n    this.height = Number(height);\n\n    // copy wells, so that we can set a new size for the wells while keeping the old positions\n    const oldWells = this.wells.map((well) => well);\n\n    // initalize wells with new size\n    this.#initEmptyWells();\n\n    // calculate new index from old position and set well at new index if it is within the new size\n    this.#moveWellsToNewIndexWhileKeepingOldPosition(oldWells);\n  }\n\n  #moveWellsToNewIndexWhileKeepingOldPosition(oldWells) {\n    oldWells.forEach((well) => {\n      const index = this.#calculateIndexFromPosition(well.position);\n      if (index < this.size) {\n        this.wells[index] = well;\n      }\n    });\n    this._checksum = this.checksum();\n  }\n\n  #initEmptyWells() {\n    if (!this.isNew) return\n    \n    this.wells = Array(this.size).fill({});\n    this.wells = this.wells.map((well, i) => this.#initWellWithPositionByIndex(well, i));\n    this._checksum = this.checksum();\n  }\n\n  #initWellWithPositionByIndex(well, i) {\n    return {\n      ...well,\n      position: this.#calculatePositionFromIndex(i),\n      readouts: well.readouts || []\n    };\n  }\n\n  #calculatePositionFromIndex(i) {\n    const columnOfIndex = (i + 1) % this.width;\n\n    const x = (columnOfIndex === 0) ? this.width : columnOfIndex;\n    const y = Math.floor(i / this.width) + 1;\n\n    return { x, y };\n  }\n\n  #calculateIndexFromPosition(position) {\n    return (position.y - 1) * this.width + position.x - 1;\n  }\n}\n","import Element from 'src/models/Element';\nimport Container from 'src/models/Container';\n\nexport default class CellLine extends Element {\n  static buildEmpty(collectionId, shortLabelIn) {\n    if (collectionId === undefined || !Number.isInteger(Number(collectionId))) {\n      throw new Error(`collection id is not valid: ${collectionId}`);\n    }\n    const cellLine = new CellLine({\n      container: Container.init(),\n      collectionId: Number(collectionId),\n      type: 'cell_line',\n      short_label: shortLabelIn\n    });\n\n    return cellLine;\n  }\n\n  title() {\n    return this.short_label;\n  }\n\n  static createFromRestResponse(collectionId, response) {\n    const cellLine = CellLine.buildEmpty(collectionId, response.short_label);\n    cellLine.amount = response.amount;\n    cellLine.unit = response.unit;\n    cellLine.contamination = response.contamination;\n    cellLine.itemComment = response.description;\n    cellLine.itemName = response.name;\n    cellLine.passage = response.passage;\n    cellLine.id = String(response.id);\n    cellLine.tag = response.tag;\n\n    cellLine.cellLineName = response.cellline_material.name;\n    cellLine.source = response.cellline_material.source;\n    cellLine.growthMedium = response.cellline_material.growth_medium;\n    cellLine.mutation = response.cellline_material.mutation;\n    cellLine.gender = response.cellline_material.gender;\n    cellLine.disease = response.cellline_material.disease;\n    cellLine.organism = response.cellline_material.organism;\n    cellLine.tissue = response.cellline_material.tissue;\n    cellLine.variant = response.cellline_material.variant;\n    cellLine.optimal_growth_temp = response.cellline_material.optimal_growth_temp;\n    cellLine.materialDescription = response.cellline_material.description;\n    cellLine.cellType = response.cellline_material.cell_type;\n    cellLine.bioSafetyLevel = response.cellline_material.biosafety_level;\n    cellLine.cryopreservationMedium = response.cellline_material.cryo_pres_medium;\n    cellLine.is_new = false;\n\n    cellLine.container = response.container;\n\n    return cellLine;\n  }\n\n  copyMaterialFrom(cellLineItem) {\n    this.organism = cellLineItem.organism;\n    this.tissue = cellLineItem.tissue;\n    this.disease = cellLineItem.disease;\n    this.growthMedium = cellLineItem.growthMedium;\n    this.cellLineName = cellLineItem.cellLineName;\n    this.cellType = cellLineItem.cellType;\n    this.mutation = cellLineItem.mutation;\n    this.bioSafetyLevel = cellLineItem.bioSafetyLevel;\n    this.variant = cellLineItem.variant;\n    this.optimal_growth_temp = cellLineItem.optimal_growth_temp;\n    this.cryopreservationMedium = cellLineItem.cryopreservationMedium;\n    this.gender = cellLineItem.gender;\n    this.materialDescription = cellLineItem.materialDescription;\n    this.source = cellLineItem.source;\n  }\n\n  adoptPropsFromMobXModel(mobx) {\n    this.amount = mobx.amount;\n    this.passage = mobx.passage;\n    this.contamination = mobx.contamination;\n    this.source = mobx.source;\n    this.growthMedium = mobx.growthMedium;\n    this.itemDescription = mobx.itemDescription;\n    this.materialDescription = mobx.materialDescription;\n    this.itemName = mobx.itemName;\n    this.gender = mobx.gender;\n    this.optimal_growth_temp = mobx.optimalGrowthTemperature;\n    this.unit = mobx.unit;\n\n    this.cellLineName = mobx.cellLineName;\n    this.mutation = mobx.mutation;\n    this.disease = mobx.disease;\n    this.organism = mobx.organism;\n    this.tissue = mobx.tissue;\n    this.variant = mobx.variant;\n    this.bioSafetyLevel = mobx.bioSafetyLevel;\n    this.cellType = mobx.cellType;\n    this.cryopreservationMedium = mobx.cryopreservationMedium;\n  }\n}\n","import 'whatwg-fetch';\n\nexport default class ArticleFetcher {\n  static initial() {\n    const promise = fetch('/api/v1/public/article_init.json', {\n      credentials: 'same-origin'\n    })\n      .then(response => response.json()).then(json => json).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static createOrUpdate(params) {\n    const promise = fetch('/api/v1/articles/create_or_update/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static delete(params) {\n    const promise = fetch(`/api/v1/articles/${params.key}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static initialHowTo() {\n    const promise = fetch('/api/v1/public/howto_init.json', {\n      credentials: 'same-origin'\n    })\n      .then(response => response.json()).then(json => json).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static createOrUpdateHowTo(params) {\n    const promise = fetch('/api/v1/articles/create_or_update_howto/', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static deleteHowTo(params) {\n    const promise = fetch('/api/v1/articles/delete_howto', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static updateEditorImage(file, editorType) {\n    const data = new FormData();\n    data.append('file[]', file.file, file.name);\n    data.append('editor_type', editorType);\n    const promise = fetch('/api/v1/articles/editor_image', {\n      credentials: 'same-origin',\n      method: 'POST',\n      body: data\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n}\n","import 'whatwg-fetch';\n\nexport default class CollaboratorFetcher {\n\n  static fetchMyCollaborations() {\n    return fetch('/api/v1/collaborators/list', {\n      credentials: 'same-origin'\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static AddMyCollaboration(params = {}) {\n    return fetch('/api/v1/collaborators/add', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static createAddMyCollaboration(params = {}) {\n    return fetch('/api/v1/collaborators/create', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n\n  static addCollaboratorAff(params = {}) {\n    return fetch('/api/v1/collaborators/add_aff', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static deleteCollaboration(params) {\n    return fetch('/api/v1/collaborators/delete', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static deleteCollaboratorAff(params) {\n    return fetch('/api/v1/collaborators/delete_aff', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static refreshOrcidAff(params) {\n    return fetch('/api/v1/collaborators/refresh_orcid_aff', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n\n  static loadOrcidByUserId(params) {\n    return fetch('/api/v1/collaborators/load_orcid', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchUsersByNameFirst(name, first, email) {\n    return fetch(`/api/v1/collaborators/user.json?name=${name}&first=${first}&email=${email}`, {\n      credentials: 'same-origin'\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchandAddCollaboratorByOrcid(orcid) {\n    return fetch(`/api/v1/collaborators/orcid.json?orcid=${orcid}`, {\n      credentials: 'same-origin'\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","import 'whatwg-fetch';\n\nexport default class EmbargoFetcher {\n  static fetchEmbargoElements(id) {\n    const api = `/api/v1/public/col_list.json?collection_id=${id}`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchEmbargoElement(cid, el) {\n    const api =\n      `/api/v1/public/col_element.json?collection_id=${cid}&el_type=${el.type}&el_id=${el.id}`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchEmbargo(id) {\n    const api = `/api/v1/public/embargo.json?id=${id}`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static deleteEmbargo(id) {\n    const api = '/api/v1/repository/embargo/delete';\n    return fetch(api, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ collection_id: id })\n    }).then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static moveEmbargo(id, newEmbargo, element) {\n    const api = '/api/v1/repository/embargo/move';\n    return fetch(api, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ collection_id: id, new_embargo: newEmbargo.value, element })\n    }).then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static refreshEmbargo(emb) {\n    const api = '/api/v1/repository/embargo/refresh';\n    return fetch(api, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ id: emb.id, collection_id: emb.element_id })\n    }).then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static assignEmbargo(embargoVal, element) {\n    const api = '/api/v1/repository/assign_embargo';\n    return fetch(api, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify({ new_embargo: embargoVal, element })\n    }).then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static releaseEmbargo(id) {\n    const api = '/api/v1/repository/embargo/release';\n    return fetch(api, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify({ collection_id: id })\n    })\n      .then(response => response.json())\n      .then(json => {\n        if (json.error) {\n          console.log('json', json);\n          alert('Error releasing embargo. Please contact system administrator (chemotion-repository@lists.kit.edu).');\n        }\n        return json;\n      })\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static generateEmbargoAccount(id) {\n    const api = '/api/v1/repository/embargo/account';\n    return fetch(api, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify({ collection_id: id })\n    }).then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static repoFetchEmbargoElements(id) {\n    const api = `/api/v1/repository/embargo/list.json?collection_id=${id}`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static repoFetchEmbargoElement(type, id) {\n    const api = `/api/v1/repository/${type}.json?id=${id}&is_public=false`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static fetchEmbargoCollections(isSubmit = false) {\n    const api = `/api/v1/repository/embargo_list.json?is_submit=${isSubmit}`;\n    return fetch(api, { credentials: 'same-origin'})\n      .then(response => response.json())\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n}\n","import 'whatwg-fetch';\nimport { camelizeKeys } from 'humps';\nimport Molecule from 'src/models/Molecule';\nimport Reaction from 'src/models/Reaction';\nimport RepoNavListTypes from 'src/repoHome/RepoNavListTypes';\n\nexport default class PublicFetcher {\n  static initialize() {\n    const promise = fetch('/api/v1/public/initialize', {\n      credentials: 'same-origin',\n    })\n      .then(response => response.json())\n      .then(json => camelizeKeys(json))\n      .catch(err => console.log(err)); // eslint-disable-line\n\n    return promise;\n  }\n\n  static fetchPublicMolecules(params = {}) {\n    const page = params.page || 1;\n    const perPage = params.perPage || 10;\n    const advFlag = params.advFlag || false;\n    const paramAdvType = params.advType ? `&adv_type=${params.advType}` : '';\n\n    let paramAdvValue = '';\n    if (typeof params.advValue === 'number') {\n      paramAdvValue = `&label_val=${params.advValue}`;\n    } else if (Array.isArray(params.advValue)) {\n      paramAdvValue = params.advValue\n        .map(x => `&adv_val[]=${x.value}`)\n        .join('');\n    } else {\n      paramAdvValue = '';\n    }\n    //     const paramAdvValue = params.advValue ? params.advValue.map(x => `&adv_val[]=${x.value}`).join('') : '';\n    const listType = params.listType || RepoNavListTypes.SAMPLE;\n    const api = `/api/v1/public/molecules.json?page=${page}&per_page=${perPage}&adv_flag=${advFlag}${paramAdvType}${paramAdvValue}&req_xvial=${\n      listType === RepoNavListTypes.MOLECULE_ARCHIVE\n    }`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response =>\n        response.json().then(json => ({\n          molecules: json.molecules.map(m => new Molecule(m)),\n          page: parseInt(response.headers.get('X-Page')),\n          pages: parseInt(response.headers.get('X-Total-Pages')),\n          perPage: parseInt(response.headers.get('X-Per-Page')),\n          listType,\n        }))\n      )\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchPublicReactions(params = {}) {\n    const page = params.page || 1;\n    const perPage = params.perPage || 10;\n    const advFlag = params.advFlag || false;\n    const paramAdvType = params.advType ? `&adv_type=${params.advType}` : '';\n\n    let paramAdvValue = '';\n    if (typeof params.advValue === 'number') {\n      paramAdvValue = `&label_val=${params.advValue}`;\n    } else if (Array.isArray(params.advValue)) {\n      paramAdvValue = params.advValue\n        .map(x => `&adv_val[]=${x.value}`)\n        .join('');\n    } else {\n      paramAdvValue = '';\n    }\n\n    const schemeOnly = params.schemeOnly || false;\n    const api = `/api/v1/public/reactions.json?page=${page}&per_page=${perPage}&adv_flag=${advFlag}${paramAdvType}${paramAdvValue}&scheme_only=${schemeOnly}`;\n\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response =>\n        response.json().then(json => ({\n          reactions: json.reactions.map(m => new Reaction(m)),\n          page: parseInt(response.headers.get('X-Page'), 10),\n          pages: parseInt(response.headers.get('X-Total-Pages'), 10),\n          perPage: parseInt(response.headers.get('X-Per-Page'), 10),\n        }))\n      )\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchAdvancedValues(advType, name) {\n    return fetch(\n      `/api/v1/public/find_adv_values.json?name=${name}&adv_type=${advType}`,\n      {\n        credentials: 'same-origin',\n      }\n    )\n      .then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchFiles(ids) {\n    const promise = fetch('/api/v1/public/files', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ ids }),\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static searchPublicMolecules(params = {}) {\n    const { collectionId, elementType, page, perPage, selection } = params;\n    return fetch(`/api/v1/search/${elementType.toLowerCase()}`, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        selection,\n        collection_id: collectionId || 'public',\n        page: page || 1,\n        per_page: perPage,\n        is_sync: false,\n        molecule_sort: false,\n        is_public: true,\n      }),\n    })\n      .then(response => response.json())\n      .then(json => ({\n        molecules: json.publicMolecules.molecules.map(m => new Molecule(m)),\n        page: json.publicMolecules.page,\n        totalElements: json.publicMolecules.totalElements,\n        perPage: json.publicMolecules.perPage,\n        listType: params.listType,\n      }))\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static searchPublicReactions(params = {}) {\n    const { collectionId, elementType, page, perPage, selection } = params;\n    return fetch(`/api/v1/search/${elementType.toLowerCase()}`, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        selection,\n        collection_id: collectionId || 'public',\n        page: page || 1,\n        per_page: perPage,\n        is_sync: false,\n        molecule_sort: false,\n        is_public: true,\n      }),\n    })\n      .then(response => response.json())\n      .then(json => ({\n        reactions: json.publicReactions.reactions.map(r => new Reaction(r)),\n        page: json.publicReactions.page,\n        totalElements: json.publicReactions.totalElements,\n        perPage: json.publicReactions.perPage,\n        listType: params.listType,\n      }))\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchLastPublished() {\n    const api = '/api/v1/public/last_published.json';\n    return fetch(api, {\n      credentials: 'same-origin',\n    })\n      .then(response => response.json())\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchLastPublishedSample() {\n    const api = '/api/v1/public/last_published_sample.json';\n    return fetch(api, {\n      credentials: 'same-origin',\n    })\n      .then(response => response.json())\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchDataset(id) {\n    const api = `/api/v1/public/dataset.json?id=${id}`;\n    return fetch(api, {\n      credentials: 'same-origin',\n    })\n      .then(response => response.json())\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchMolecule(id, advFlag = false, advType = '', advValues = null) {\n    const paramAdvType =\n      advType && advType !== '' ? `&adv_type=${advType}` : '';\n\n    let paramAdvValue = '';\n    if (typeof advValues === 'number') {\n      paramAdvValue = `&label_val=${advValues}`;\n    } else if (Array.isArray(advValues)) {\n      paramAdvValue = advValues.map(x => `&adv_val[]=${x.value}`).join('');\n    } else {\n      paramAdvValue = '';\n    }\n\n    // const paramAdvValue = advValues ? advValues.map(x => `&adv_val[]=${x.value}`).join('') : '';\n    const api = `/api/v1/public/molecule.json?id=${id}&adv_flag=${advFlag}${paramAdvType}${paramAdvValue}`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response => response.json())\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchReaction(id) {\n    const api = `/api/v1/public/reaction.json?id=${id}`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response => response.json())\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static queryPid(params) {\n    const api = `/api/v1/public/pid/`;\n\n    return fetch(api, {\n      method: 'post',\n      credentials: 'same-origin',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        id: params.id,\n      }),\n    })\n      .then(response => {\n        return response.json();\n      })\n      .then(json => {\n        Aviator.navigate(json);\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static queryInchikey(params) {\n    const api = `/api/v1/public/inchikey/`;\n\n    return fetch(api, {\n      method: 'post',\n      credentials: 'same-origin',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        inchikey: params.inchikey,\n        type: params.type,\n        version: params.version,\n      }),\n    })\n      .then(response => {\n        return response.json();\n      })\n      .then(json => {\n        Aviator.navigate(json);\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static selectPublicCollection() {\n    return fetch('/api/v1/public/collection.json', {\n      credentials: 'same-origin',\n    })\n      .then(response => {\n        return response.json();\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static publishedStatics() {\n    const api = '/api/v1/public/published_statics';\n    return fetch(api, {\n      credentials: 'same-origin',\n    })\n      .then(response => {\n        return response.json();\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static affiliations(type) {\n    const api = `/api/v1/public/affiliations/${type}`;\n    return fetch(api, {\n      credentials: 'same-origin',\n    })\n      .then(response => response.json())\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static downloadZip(id) {\n    let fileName = 'dataset.zip';\n    return fetch(`/api/v1/public/download/dataset?id=${id}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n    })\n      .then(response => {\n        const disposition = response.headers.get('Content-Disposition');\n        if (disposition && disposition.indexOf('attachment') !== -1) {\n          const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n          const matches = filenameRegex.exec(disposition);\n          if (matches != null && matches[1]) {\n            fileName = matches[1].replace(/['\"]/g, '');\n          }\n        }\n        return response.blob();\n      })\n      .then(blob => {\n        const a = document.createElement('a');\n        a.style = 'display: none';\n        document.body.appendChild(a);\n        const url = window.URL.createObjectURL(blob);\n        a.href = url;\n        a.download = fileName;\n        a.click();\n        window.URL.revokeObjectURL(url);\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static downloadDataset(id) {\n    let fileName = 'dataset.xlsx';\n    const api = `/api/v1/public/export_metadata?id=${id}`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response => {\n        const disposition = response.headers.get('Content-Disposition');\n        if (disposition && disposition.indexOf('attachment') !== -1) {\n          const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n          const matches = filenameRegex.exec(disposition);\n          if (matches != null && matches[1]) {\n            fileName = matches[1].replace(/['\"]/g, '');\n          }\n        }\n        return response.blob();\n      })\n      .then(blob => {\n        const a = document.createElement('a');\n        a.style = 'display: none';\n        document.body.appendChild(a);\n        const url = window.URL.createObjectURL(blob);\n        a.href = url;\n        a.download = fileName;\n        a.click();\n        window.URL.revokeObjectURL(url);\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static getLD(type, id) {\n    const api = `/api/v1/public/metadata/jsonld?type=${type}&id=${id}`;\n    return fetch(api, {\n      credentials: 'same-origin',\n    })\n      .then(response => response.json())\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static convertMolfile(params) {\n    const abortController = new AbortController();\n    const timeoutId = setTimeout(() => {\n      abortController.abort();\n    }, 10000); // 10 seconds timeout\n\n    return fetch('/api/v1/public/service/convert', {\n      signal: abortController.signal, // pass the signal to the fetch function\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ molfile: params.data.mol }),\n    })\n      .then(response => {\n        clearTimeout(timeoutId);\n        return response.json();\n      })\n      .then(json => new Blob([json.molfile], { type: 'text/plain' }))\n      .catch(errorMessage => {\n        clearTimeout(timeoutId);\n        throw new Error(errorMessage);\n      });\n  }\n\n  static reviewers() {\n    const promise = fetch('/intro/reviewers.json', {\n      cache: 'no-store',\n      credentials: 'same-origin',\n      headers: { 'cache-control': 'no-cache' },\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  static fetchThumbnail(attId) {\n    const promise = fetch(`/api/v1/public/download/thumbnail?id=${attId}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n    })\n      .then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n    return promise;\n  }\n\n  // Use in REPO\n  static fetchOls(name, edited = true) {\n    return fetch(\n      `/api/v1/public/ols_terms/list.json?name=${name}&edited=${edited}`,\n      {\n        credentials: 'same-origin',\n      }\n    )\n      .then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n}\n","import 'whatwg-fetch';\nimport Sample from 'src/models/Sample';\nimport Reaction from 'src/models/Reaction';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nconst AnalysisIdstoPublish = element => (\n  element\n    .analysisArray()\n    .filter(\n      a =>\n        a.extended_metadata.publish &&\n        (a.extended_metadata.publish === true ||\n          a.extended_metadata.publish === 'true')\n    )\n    .map(x => x.id)\n);\n\nexport default class RepositoryFetcher {\n  static reviewPublish(element) {\n    const { id, type } = element;\n    return fetch('/api/v1/repository/reviewing/submit', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ id, type }),\n    })\n      .then(response => response.json())\n      .then(json => {\n        if (json.error) {\n          const notification = {\n            title: 'Failed to Submit for Review',\n            message: `Error: ${json.error}`,\n            level: 'error',\n            dismissible: 'button',\n            autoDismiss: 6,\n            position: 'tr',\n            uid: 'publish_error',\n          };\n          NotificationActions.add(notification);\n          return null;\n        }\n        if (typeof json.reaction !== 'undefined') {\n          json.reaction.can_publish = false;\n          json.reaction.can_update = false;\n          return new Reaction(json.reaction);\n        }\n        if (type === 'sample') {\n          json.sample.can_publish = false;\n          json.sample.can_update = false;\n          return new Sample(json.sample);\n        }\n        return null;\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static publishSample(params, option = null) {\n    const { sample, coauthors, reviewers, refs, embargo, license, addMe } = params;\n    const analysesIds = AnalysisIdstoPublish(sample);\n    return fetch(`/api/v1/repository/publishSample/${option ? 'dois' : ''}`, {\n      credentials: 'same-origin',\n      method: option ? 'PUT' : 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        id: sample.id,\n        analysesIds,\n        coauthors,\n        reviewers,\n        refs,\n        embargo,\n        license,\n        addMe,\n      }),\n    })\n      .then(response => {\n        return response.json();\n      })\n      .then(json => {\n        if (json.error) {\n          const notification = {\n            title: 'Failed to Publish Sample',\n            message: `Error: ${json.error}`,\n            level: 'error',\n            dismissible: 'button',\n            autoDismiss: 6,\n            position: 'tr',\n            uid: 'publish_sample_error',\n          };\n          NotificationActions.add(notification);\n          return null;\n        }\n        return { element: sample, closeView: true };\n      })\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static publishReactionScheme(params) {\n    const {\n      reaction,\n      coauthors,\n      reviewers,\n      embargo,\n      license,\n      addMe,\n      schemeDesc,\n    } = params;\n    return fetch('/api/v1/repository/publishReactionScheme', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        id: reaction.id,\n        temperature: reaction.temperature,\n        duration: reaction.durationDisplay,\n        products: reaction.products,\n        schemeDesc,\n        coauthors,\n        reviewers,\n        embargo,\n        license,\n        addMe,\n      }),\n    })\n      .then(response => {\n        if (response.headers.get('content-type')?.includes('application/json')) {\n          return response.json();\n        } else {\n          throw new Error(response.statusText);\n        }\n      })\n      .then(json => {\n        if (json.error) {\n          const notification = {\n            title: 'Failed to Publish Reaction Scheme',\n            message: `Error: ${json.error}`,\n            level: 'error',\n            dismissible: 'button',\n            autoDismiss: 6,\n            position: 'tr',\n            uid: 'publish_reaction_error',\n          };\n          NotificationActions.add(notification);\n          return null;\n        }\n        return reaction;\n      })\n      .catch(errorMessage => {\n        console.log('errorMessage', errorMessage);\n        const notification = {\n          title: 'Failed to Publish Scheme Only Reaction',\n          message: `Error: ${errorMessage}`,\n          level: 'error',\n          dismissible: 'button',\n          autoDismiss: 6,\n          position: 'tr',\n          uid: 'publish_reaction_error',\n        };\n        NotificationActions.add(notification);\n        return null;\n      });\n  }\n\n  static publishReaction(params, option = null) {\n    const {\n      reaction,\n      coauthors,\n      reviewers,\n      refs,\n      embargo,\n      license,\n      isFullyPublish,\n      addMe,\n    } = params;\n    if (!isFullyPublish) return this.publishReactionScheme(params);\n    const analysesIds = reaction.samples.reduce(\n      (acc, s) => acc.concat(AnalysisIdstoPublish(s)),\n      AnalysisIdstoPublish(reaction)\n    );\n    return fetch(`/api/v1/repository/publishReaction/${option ? 'dois' : ''}`, {\n      credentials: 'same-origin',\n      method: option ? 'PUT' : 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        id: reaction.id,\n        analysesIds,\n        coauthors,\n        reviewers,\n        refs,\n        embargo,\n        license,\n        addMe,\n      })\n    })\n      .then(response => {\n        if (response.headers.get('content-type')?.includes('application/json')) {\n          return response.json();\n        } else {\n          throw new Error(response.statusText);\n        }\n      })\n      .then(json => {\n        if (json.error) {\n          const notification = {\n            title: 'Failed to Publish Reaction',\n            message: `Error: ${json.error}`,\n            level: 'error',\n            dismissible: 'button',\n            autoDismiss: 6,\n            position: 'tr',\n            uid: 'publish_reaction_error',\n          };\n          NotificationActions.add(notification);\n          return null;\n        }\n        if (option === 'dois') {\n          json.reaction.can_publish = true;\n          json.reaction.can_update = true;\n        }\n        return reaction;\n      })\n      .catch(errorMessage => {\n        console.log('errorMessage', errorMessage);\n        const notification = {\n          title: 'Failed to Publish Reaction',\n          message: `Error: ${errorMessage}`,\n          level: 'error',\n          dismissible: 'button',\n          autoDismiss: 6,\n          position: 'tr',\n          uid: 'publish_reaction_error',\n        };\n        NotificationActions.add(notification);\n        return null;\n      });\n  }\n\n  static fetchReviewElements(\n    type,\n    state,\n    label,\n    searchType,\n    searchValue,\n    page,\n    perPage\n  ) {\n    const strApi = '/api/v1/repository/review_list.json?';\n    const paramSearchType =\n      searchType && searchType !== '' ? `&search_type=${searchType}` : '';\n    const paramSearchValue =\n      searchValue && searchValue !== '' ? `&search_value=${searchValue}` : '';\n    const searchLabel = label === null ? '' : `&label=${label}`;\n    const paramPage = `&page=${page}&per_page=${perPage}`;\n    const api = `${strApi}type=${type}&state=${state}${searchLabel}${paramSearchType}${paramSearchValue}${paramPage}`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response =>\n        response.json().then(json => ({\n          elements: json.elements,\n          page: parseInt(response.headers.get('X-Page'), 10),\n          pages: parseInt(response.headers.get('X-Total-Pages'), 10),\n          perPage: parseInt(response.headers.get('X-Per-Page'), 10),\n          selectType: type,\n          selectState: state,\n          searchType,\n          searchValue,\n        }))\n      )\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchReaction(id) {\n    const api = `/api/v1/repository/reaction.json?id=${id}`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response => response.json())\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchSample(id) {\n    const api = `/api/v1/repository/sample.json?id=${id}`;\n    return fetch(api, { credentials: 'same-origin' })\n      .then(response => response.json())\n      .catch(errorMessage => {\n        console.log(errorMessage);\n      });\n  }\n\n  static saveComments(id, type, comments) {\n    return fetch('/api/v1/repository/reviewing/comments', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ id, type, comments })\n    }).then(response => response.json())\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static repoReviewPublish(id, type, comment, action, checklist = {}, reviewComments) {\n    let api = '';\n    if (action === 'Comments') {\n      api = '/api/v1/repository/reviewing/comments';\n    } else if (action === 'Accept') {\n      api = '/api/v1/repository/reviewing/accepted';\n    } else if (action === 'Approve') {\n      api = '/api/v1/repository/reviewing/approved';\n    } else if (action === 'Review') {\n      api = '/api/v1/repository/reviewing/reviewed';\n    } else if (action === 'Submit') {\n      api = '/api/v1/repository/reviewing/submit';\n    } else if (action === 'Decline') {\n      api = '/api/v1/repository/reviewing/declined';\n    } else {\n      // return;\n    }\n\n    return fetch(api, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        id, type, comment, checklist, reviewComments\n      })\n    }).then(response => response.json())\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static fetchReviewSearchOptions(searchType, elementType, state) {\n    return fetch(`/api/v1/repository/review_search_options.json?type=${searchType}&element_type=${elementType}&state=${state}`, {\n      credentials: 'same-origin'\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static previewMetadata(id, type) {\n    return fetch('/api/v1/repository/metadata/preview', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ id, type })\n    }).then(response => response.json())\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static userComment(id, type, pageId, pageType, comment) {\n    return fetch('/api/v1/repository/comment/user_comment', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ id, type, pageId, pageType, comment })\n    }).then(response => response.json())\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static reviewerComment(id, type, comment) {\n    return fetch('/api/v1/repository/comment/reviewer', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ id, type, comment })\n    }).then(response => response.json())\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static updateComment(id, type, comments) {\n    return fetch('/api/v1/repository/reviewing/comment', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ id, type, comments })\n    }).then(response => response.json())\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  static saveRepoAuthors(params = {}) {\n    return fetch('/api/v1/repository/save_repo_authors', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static zipPreviewMetadata(id, type) {\n    const currentTime = Math.floor(Date.now() / 1000);\n    const fileName = `metadata_${type}_${id}-${currentTime}.zip`;\n    return fetch('/api/v1/repository/metadata/preview_zip', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ id, type })\n    }).then((response) => {\n      return response.blob();\n    }).then((blob) => {\n      const a = document.createElement('a');\n      a.style = 'display: none';\n      document.body.appendChild(a);\n      const url = window.URL.createObjectURL(blob);\n      a.href = url;\n      a.download = fileName;\n      a.click();\n      window.URL.revokeObjectURL(url);\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n  }\n\n  static saveReviewLabel(params = {}) {\n    return fetch('/api/v1/repository/save_repo_labels', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(params)\n    }).then(response => response.json())\n      .then(json => json)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static compound(id, data, action = 'request') {\n    const api = `/api/v1/repository/compound/${action}`;\n    return fetch(api, {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify({ id, data: data?.xid, xcomp: data?.xcomp })\n    }).then(response => response.json())\n      .catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n}\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Col } from 'react-bootstrap';\nimport ContainerDatasets from 'src/components/container/ContainerDatasets';\n\nfunction ContainerComponent({ container }) {\n  return (\n    <div className=\"small-p\">\n      <h4>Datasets</h4>\n      <Col md={12}>\n        <ContainerDatasets\n          container={container}\n          readOnly\n          disabled\n          onChange={() => {}}\n        />\n      </Col>\n    </div>\n  );\n}\n\nContainerComponent.propTypes = {\n  container: PropTypes.object.isRequired,\n};\n\nexport default ContainerComponent;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { ListGroup, ListGroupItem, Well } from 'react-bootstrap';\nimport ContainerDatasetModal from 'src/components/container/ContainerDatasetModal';\nimport ContainerDatasetField from 'src/components/container/ContainerDatasetField';\n\nexport default class RepoContainerDatasets extends Component {\n  constructor(props) {\n    super(props);\n    const { container } = props;\n    this.state = {\n      container,\n      modal: {\n        show: false,\n        datasetContainer: {},\n      },\n    };\n  }\n\n  static getDerivedStateFromProps(nextProps, prevState) {\n    if (nextProps.container !== prevState.container) {\n      return {\n        container: nextProps.container,\n      };\n    }\n    // Return null to indicate no change to state\n    return null;\n  }\n\n  handleModalOpen(datasetContainer) {\n    const { modal } = this.state;\n    modal.datasetContainer = datasetContainer || {};\n    modal.show = true;\n    this.setState({ modal });\n  }\n\n  handleModalHide() {\n    const { modal } = this.state;\n    modal.show = false;\n    modal.datasetContainer = {};\n    this.setState({ modal });\n    // https://github.com/react-bootstrap/react-bootstrap/issues/1137\n    document.body.className = document.body.className.replace('modal-open', '');\n  }\n\n  render() {\n    const { container, modal } = this.state;\n    const { isPublic } = this.props;\n\n    if (container.children.length > 0) {\n      return (\n        <div>\n          <ListGroup style={{ marginBottom: 20 }}>\n            {container.children.map(datasetContainer => {\n              return (\n                <ListGroupItem\n                  key={`datasetContainer-${datasetContainer.id}`}\n                  className=\"repo-analysis-listgroup\"\n                >\n                  <ContainerDatasetField\n                    datasetContainer={datasetContainer}\n                    disabled\n                    handleModalOpen={() =>\n                      this.handleModalOpen(datasetContainer)\n                    }\n                    handleUndo={() => {}}\n                    isPublic={isPublic}\n                  />\n                </ListGroupItem>\n              );\n            })}\n          </ListGroup>\n          <hr style={{ borderColor: '#ddd' }} />\n          {modal.show && (\n            <ContainerDatasetModal\n              datasetContainer={modal.datasetContainer}\n              disabled\n              onChange={() => {}}\n              onHide={() => this.handleModalHide()}\n              readOnly\n              show={modal.show}\n              isPublic={isPublic} // for REPO\n            />\n          )}\n        </div>\n      );\n    }\n    return (\n      <div>\n        <Well style={{ minHeight: 70, padding: 5, paddingBottom: 31 }}>\n          <h5>There are currently no Datasets.</h5>\n        </Well>\n      </div>\n    );\n  }\n}\n\nRepoContainerDatasets.propTypes = {\n  container: PropTypes.object.isRequired,\n  isPublic: PropTypes.bool,\n};\n\nRepoContainerDatasets.defaultProps = { isPublic: true };\n","import React from 'react';\nimport { DropdownButton, MenuItem } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport uuid from 'uuid';\n\nconst DropdownButtonSelection = props =>\n  (\n    <DropdownButton\n      title={props.selected || props.placeholder}\n      key={props.selected}\n      id={`dropdown-${uuid.v4()}`}\n      onSelect={props.onSelect}\n    >\n      {\n        props.options.map(element => (\n          <MenuItem key={element} eventKey={element} disabled={props.disabled}>\n            {element}\n          </MenuItem>\n        ))\n      }\n    </DropdownButton>\n  );\n\nDropdownButtonSelection.propTypes = {\n  options: PropTypes.arrayOf(PropTypes.string).isRequired,\n  placeholder: PropTypes.string.isRequired,\n  selected: PropTypes.string,\n  onSelect: PropTypes.func,\n  disabled: PropTypes.bool\n};\n\nDropdownButtonSelection.defaultProps = {\n  selected: null,\n  onSelect: null,\n  disabled: false\n};\n\nexport default DropdownButtonSelection;\n","import React from 'react';\nimport {\n  FormGroup,\n  ControlLabel,\n  InputGroup,\n  FormControl,\n  OverlayTrigger,\n  Tooltip,\n  Button\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport uuid from 'uuid';\n\nconst InputButtonField = props =>\n  (\n    <FormGroup>\n      <ControlLabel>{props.label}</ControlLabel>\n      <InputGroup>\n        <FormControl\n          type=\"text\"\n          value={props.value}\n          placeholder={props.placeholder}\n          onChange={event => props.onInputChange(props.field, event)}\n        />\n        <InputGroup.Button>\n          <OverlayTrigger\n            placement={props.tipPlacement}\n            overlay={<Tooltip id={`tooltip-${uuid.v4()}`}>{props.btnTip}</Tooltip>}\n          >\n            <Button\n              bsStyle=\"success\"\n              onClick={() => props.onBtnClick(props.btnField, props.btnValue || '')}\n            >\n              {props.btnValue}\n            </Button>\n          </OverlayTrigger>\n        </InputGroup.Button>\n      </InputGroup>\n    </FormGroup>\n\n  );\n\nInputButtonField.propTypes = {\n  label: PropTypes.string.isRequired,\n  value: PropTypes.string.isRequired,\n  field: PropTypes.string.isRequired,\n  btnValue: PropTypes.string.isRequired,\n  btnField: PropTypes.string.isRequired,\n  onInputChange: PropTypes.func.isRequired,\n  onBtnClick: PropTypes.func.isRequired,\n  placeholder: PropTypes.string,\n  btnTip: PropTypes.string,\n  tipPlacement: PropTypes.oneOf(['top', 'bottom', 'right', 'left']),\n};\n\nInputButtonField.defaultProps = {\n  placeholder: 'Please input...',\n  btnTip: 'click here',\n  tipPlacement: 'top'\n};\n\nexport default InputButtonField;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, Button, OverlayTrigger, ButtonToolbar, Tooltip, FormControl } from 'react-bootstrap';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\n\nexport default class RepoUserComment extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      modalShow: false\n    };\n    this.sendEmail = this.sendEmail.bind(this);\n  }\n\n  sendEmail() {\n    const { id, type, pageType, pageId } = this.props;\n    RepositoryFetcher.userComment(id, type, pageId || id, pageType, this.commentInput.value)\n      .then((result) => {\n        this.setState({ modalShow: false });\n      });\n  }\n\n  render() {\n    const { modalShow } = this.state;\n    const { id, isLogin, isPublished, title } = this.props;\n    const defaultAttrs = {\n      style: {\n        height: '400px', overflow: 'auto', whiteSpace: 'pre'\n      }\n    };\n\n    if (isPublished && isLogin) {\n      return (\n        <span>\n          <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"tt_metadata\">Leave a comment about this data to the reviewers </Tooltip>}>\n            <Button bsSize=\"xsmall\" onClick={() => this.setState({ modalShow: true })}>\n              <i className=\"fa fa-envelope-o\" />\n            </Button>\n          </OverlayTrigger>\n          <Modal\n            show={modalShow}\n            onHide={() => this.setState({ modalShow: false })}\n            dialogClassName=\"pub-info-dialog\"\n          >\n            <Modal.Header closeButton>\n              <Modal.Title>\n                Comments for the reviewers\n              </Modal.Title>\n            </Modal.Header>\n            <Modal.Body style={{ overflow: 'auto' }}>\n              {title}\n              <FormControl\n                componentClass=\"textarea\"\n                {...defaultAttrs}\n                inputRef={(m) => { this.commentInput = m; }}\n              />\n              <br />\n              <ButtonToolbar>\n                <Button\n                  bsStyle=\"warning\"\n                  onClick={() => this.setState({ modalShow: false })}\n                > Close\n                </Button>\n                <Button\n                  bsStyle=\"primary\"\n                  onClick={() => this.sendEmail()}\n                > Send to Chemotion Reviewers\n                </Button>\n              </ButtonToolbar>\n            </Modal.Body>\n          </Modal>\n        </span>\n      );\n    }\n    return (<span />);\n  }\n}\n\nRepoUserComment.propTypes = {\n  id: PropTypes.number.isRequired,\n  isLogin: PropTypes.bool,\n  isPublished: PropTypes.bool.isRequired,\n  type: PropTypes.string,\n  title: PropTypes.string,\n  pageType: PropTypes.string,\n  pageId: PropTypes.number\n};\n\nRepoUserComment.defaultProps = {\n  isLogin: false,\n  type: '',\n  title: '',\n  pageType: 'reactions',\n  pageId: null\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, Button, OverlayTrigger, ButtonToolbar, Tooltip, FormControl, Label } from 'react-bootstrap';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\n\nexport default class RepoPublicComment extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      modalShow: false\n    };\n    this.updateComment = this.updateComment.bind(this);\n  }\n\n  updateComment() {\n    const { id, type, pageType, pageId } = this.props;\n    RepositoryFetcher.reviewerComment(id, type, this.commentInput.value)\n      .then((result) => {\n        this.setState({ modalShow: false });\n        if (pageType === 'reactions') {\n          PublicActions.displayReaction(pageId || id);\n        } else {\n          PublicActions.displayMolecule(pageId);\n        }\n      });\n  }\n\n  render() {\n    const { modalShow } = this.state;\n    const { isReviewer, userInfo, title } = this.props;\n    const defaultAttrs = {\n      style: {\n        height: '400px', overflow: 'auto', whiteSpace: 'pre'\n      }\n    };\n\n    let btnTbl = (<span />);\n    let commentModal = (<span />);\n    const style = { height: '20px', width: '20px', borderRadius: '50%', border: '1px' };\n    const hasComment = userInfo != '';\n\n    if (hasComment === true) {\n      btnTbl = (\n        <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"tt_metadata\">Important information about this data</Tooltip>}>\n          <Button bsSize=\"xsmall\" bsStyle=\"warning\" style={style} onClick={() => this.setState({ modalShow: true })}>\n            <i className=\"fa fa-info\" />\n          </Button>\n        </OverlayTrigger>\n      );\n    } else if (hasComment === false && isReviewer === true) {\n      btnTbl = (\n        <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"tt_metadata\">Important information about this data (edit)</Tooltip>}>\n          <Button bsSize=\"xsmall\" style={style} onClick={() => this.setState({ modalShow: true })}>\n            <i className=\"fa fa-info\" />\n          </Button>\n        </OverlayTrigger>\n      );\n    }\n\n    if (isReviewer === true) {\n      commentModal = (\n        <Modal\n          show={modalShow}\n          onHide={() => this.setState({ modalShow: false })}\n          dialogClassName=\"pub-info-dialog\"\n        >\n          <Modal.Header closeButton>\n            <Modal.Title>\n              Note for {title}\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body style={{ overflow: 'auto' }}>\n            <FormControl\n              componentClass=\"textarea\"\n              defaultValue={userInfo || ''}\n              {...defaultAttrs}\n              inputRef={(m) => { this.commentInput = m; }}\n            />\n            <ButtonToolbar>\n              <Button\n                bsStyle=\"warning\"\n                onClick={() => this.setState({ modalShow: false })}\n              > Close\n              </Button>\n              <Button\n                bsStyle=\"primary\"\n                onClick={() => this.updateComment()}\n              > Update\n              </Button>\n            </ButtonToolbar>\n          </Modal.Body>\n        </Modal>\n      );\n    } else {\n      commentModal = (\n        <Modal\n          show={modalShow}\n          onHide={() => this.setState({ modalShow: false })}\n          dialogClassName=\"pub-info-dialog\"\n        >\n          <Modal.Header closeButton>\n            <Modal.Title>\n              Note for {title}\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body style={{ overflow: 'auto', whiteSpace: 'pre-wrap' }}>\n            {userInfo}\n          </Modal.Body>\n        </Modal>\n      );\n    }\n    return (\n      <span>\n        {btnTbl}\n        {commentModal}\n      </span>\n    );\n  }\n}\n\nRepoPublicComment.propTypes = {\n  id: PropTypes.number.isRequired,\n  // eslint-disable-next-line react/forbid-prop-types\n  userInfo: PropTypes.string,\n  isReviewer: PropTypes.bool,\n  type: PropTypes.string,\n  pageId: PropTypes.number,\n  pageType: PropTypes.string,\n  title: PropTypes.string\n};\n\nRepoPublicComment.defaultProps = {\n  isReviewer: false,\n  type: '',\n  pageId: null,\n  pageType: 'reactions',\n  userInfo: '',\n  title: ''\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Modal,\n  Button,\n  OverlayTrigger,\n  Tooltip,\n  FormControl,\n} from 'react-bootstrap';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport { CompoundList } from 'src/components/chemrepo/ma/MAModals';\n\nconst registedCompoundTooltip = (\n  <div className=\"repo-xvial-info\">\n    For availability please contact the Compound Platform team (\n    <span className=\"env\">\n      <i className=\"fa fa-envelope-o\" aria-hidden=\"true\" />\n    </span>\n    ). An explanation can be accessed via our Youtube channel&nbsp;\n    <a\n      rel=\"noopener noreferrer\"\n      target=\"_blank\"\n      href=\"https://www.youtube.com/channel/UCWBwk4ZSXwmDzFo_ZieBcAw?\"\n    >\n      <i className=\"fa fa-youtube-play youtube\" />\n    </a>\n    &nbsp;or on our how-to pages\n    <a\n      rel=\"noopener noreferrer\"\n      target=\"_blank\"\n      href=\"https://www.chemotion-repository.net/home/howto/cf3ede44-b09a-400a-b0d4-b067735e4262\"\n    >\n      <img alt=\"chemotion_first\" src=\"/favicon.ico\" className=\"pubchem-logo\" />\n    </a>\n  </div>\n);\n\nexport default class RepoXvialButton extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      dataModalShow: false,\n      requestModalShow: false,\n      newData: props.data,\n      newComp: null,\n    };\n    this.save = this.save.bind(this);\n    this.remove = this.remove.bind(this);\n    this.request = this.request.bind(this);\n    this.closeModal = this.closeModal.bind(this);\n    this.checkRequest = this.checkRequest.bind(this);\n    this.selectXvial = this.selectXvial.bind(this);\n    this.setNewData = this.setNewData.bind(this);\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.data !== prevProps.data) {\n      this.setNewData(this.props.data);\n    }\n  }\n\n  setNewData(newData, newComp = null) {\n    this.setState({ newData, newComp });\n  }\n\n  selectXvial(xid, xcomp) {\n    this.setNewData(xid, xcomp);\n  }\n\n  checkRequest() {\n    if (this.props.isLogin) {\n      this.setState({ requestModalShow: true });\n    } else {\n      NotificationActions.add({\n        title: 'Request to the Compound-Platform.eu',\n        message: 'Please log in to send the request.',\n        level: 'warning',\n        position: 'tc',\n      });\n    }\n  }\n\n  save() {\n    const { newData, newComp } = this.state;\n    const { elementId, saveCallback } = this.props;\n    RepositoryFetcher.compound(elementId, { xid: newData, xcomp: newComp }, 'update').then(() => {\n      this.closeModal();\n      saveCallback(elementId, newData);\n    });\n  }\n\n  remove() {\n    const { elementId, saveCallback } = this.props;\n    RepositoryFetcher.compound(elementId, {}, 'update').then(() => {\n      this.closeModal();\n      saveCallback(elementId, '');\n    });\n  }\n\n  request() {\n    const { elementId } = this.props;\n    RepositoryFetcher.compound(elementId, { xid: this.rInput.value }, 'request').then(\n      () => {\n        this.closeModal();\n        NotificationActions.add({\n          title: 'Request to the Compound-Platform.eu',\n          message: 'Your request has been emailed to the Compound-Platform',\n          level: 'info',\n          position: 'tc',\n        });\n      }\n    );\n  }\n\n  closeModal() {\n    this.setState({\n      dataModalShow: false,\n      requestModalShow: false,\n      newData: this.props.data,\n      newComp: null,\n    });\n  }\n\n  render() {\n    const { dataModalShow, requestModalShow, newData } = this.state;\n    const { isEditable, isLogin, data, allowRequest, xvialCom } = this.props;\n    const hasData = !!(data && data !== '');\n    const compoundLink = hasData ? (\n      <OverlayTrigger\n        placement=\"top\"\n        overlay={<Tooltip id=\"tt_xvial\">Go to Compound platform</Tooltip>}\n      >\n        <Button\n          bsStyle=\"link\"\n          bsSize=\"xsmall\"\n          onClick={() => {\n            window.open('https://compound-platform.eu/home', '_blank');\n          }}\n        >\n          X-Vial: Sample available\n        </Button>\n      </OverlayTrigger>\n    ) : null;\n    const dataModal = (\n      <Modal\n        bsSize=\"large\"\n        show={dataModalShow}\n        onHide={() => this.closeModal()}\n        backdrop=\"static\"\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>Compound X-vial number</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <FormControl type=\"text\" value={newData} readOnly />\n          {CompoundList(xvialCom, newData, this.selectXvial)}\n          <div>\n            <i className=\"fa fa-info-circle\" aria-hidden=\"true\" />\n            &nbsp; The currently stored data:{' '}\n            <span style={{ background: '#d1e7dd', color: '#0f5132' }}>\n              highlighted with a color\n            </span>\n            .\n          </div>\n          <div>\n            <i className=\"fa fa-info-circle\" aria-hidden=\"true\" />\n            &nbsp; Click on a row to select the X-Vial. Remember to press the\n            &#39;Save&#39; button if you wish to save the selection.\n          </div>\n          <Button bsStyle=\"warning\" onClick={() => this.closeModal()}>\n            Cancel\n          </Button>\n          &nbsp;\n          <Button bsStyle=\"primary\" onClick={() => this.save()}>\n            Save\n          </Button>\n          &nbsp;\n          <Button bsStyle=\"danger\" onClick={() => this.remove()}>\n            Remove X-Vial\n          </Button>\n        </Modal.Body>\n      </Modal>\n    );\n    const requestModal = (\n      <Modal\n        show={requestModalShow}\n        onHide={() => this.closeModal()}\n        backdrop=\"static\"\n      >\n        <Modal.Header closeButton>\n          <Modal.Title>Request compound</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <FormControl\n            style={{ height: '300px' }}\n            componentClass=\"textarea\"\n            inputRef={(m) => {\n              this.rInput = m;\n            }}\n            placeholder=\"Example: I would like to request the access to a certain amount of this sample for this reason: (please give reason). Please contact me per email.\"\n          />\n          <br />\n          <p style={{ fontSize: '12px', fontStyle: 'italic' }}>\n            <b>Data privacy statement</b> This contact form can be used to get\n            in contact to the team of the molecule archive. The information that\n            you enter into the form is sent - along with the email address and\n            your name that you entered with the registration to chemotion\n            repository - to the management team of the compound platform only.\n            The data is not stored, the information is available per email only.\n            People in the management team handle your request as confidential\n            information. No other services or third parties are included.\n          </p>\n          <Button bsStyle=\"warning\" onClick={() => this.closeModal()}>\n            Close\n          </Button>\n          &nbsp;\n          <Button bsStyle=\"primary\" onClick={() => this.request()}>\n            Send request to the Compound-Platform\n          </Button>\n        </Modal.Body>\n      </Modal>\n    );\n    const editLink = isEditable ? (\n      <OverlayTrigger\n        placement=\"top\"\n        overlay={\n          <Tooltip id=\"tt_xvial\">Click to input Compound X-vial number</Tooltip>\n        }\n      >\n        <a\n          onClick={() => this.setState({ dataModalShow: true })}\n          rel=\"noopener noreferrer\"\n        >\n          <i className=\"fa fa-pencil\" />\n        </a>\n      </OverlayTrigger>\n    ) : null;\n    const requestLink =\n      allowRequest && hasData ? (\n        <OverlayTrigger\n          placement=\"top\"\n          overlay={<Tooltip id=\"tt_request_xvial\">Request compound</Tooltip>}\n        >\n          <a onClick={() => this.checkRequest()} rel=\"noopener noreferrer\">\n            <i className=\"fa fa-envelope-o\" />\n          </a>\n        </OverlayTrigger>\n      ) : null;\n    const info = requestLink ? (\n      <OverlayTrigger\n        trigger=\"click\"\n        rootClose\n        placement=\"top\"\n        overlay={\n          <Tooltip\n            id=\"registed_compound_tooltip\"\n            className=\"left_tooltip bs_tooltip\"\n          >\n            {registedCompoundTooltip}\n          </Tooltip>\n        }\n      >\n        <a rel=\"noopener noreferrer\">\n          <i className=\"fa fa-info-circle\" aria-hidden=\"true\" />\n        </a>\n      </OverlayTrigger>\n    ) : null;\n    if (!isLogin) {\n      if (compoundLink) {\n        return (\n          <span className=\"xvial-pub-elem\">\n            <span>\n              <i className=\"icon-xvial\" aria-hidden=\"true\" />\n              {compoundLink}\n              {requestLink}\n              {info}\n            </span>\n          </span>\n        );\n      }\n      return null;\n    }\n    if (compoundLink) {\n      return (\n        <span className=\"xvial-pub-elem\">\n          <span>\n            <i className=\"icon-xvial\" aria-hidden=\"true\" />\n            {compoundLink}\n            {editLink}\n            {requestLink}\n            {info}\n          </span>\n          {dataModal}\n          {requestModal}\n        </span>\n      );\n    }\n    if (editLink) {\n      return (\n        <span className=\"xvial-pub-elem\">\n          <span>\n            <i className=\"icon-xvial\" aria-hidden=\"true\" />\n            {editLink}\n          </span>\n          {dataModal}\n        </span>\n      );\n    }\n    return null;\n  }\n}\n\nRepoXvialButton.propTypes = {\n  elementId: PropTypes.number.isRequired,\n  isEditable: PropTypes.bool,\n  isLogin: PropTypes.bool,\n  allowRequest: PropTypes.bool,\n  data: PropTypes.string,\n  saveCallback: PropTypes.func,\n};\n\nRepoXvialButton.defaultProps = {\n  isEditable: false,\n  isLogin: false,\n  allowRequest: false,\n  data: null,\n  saveCallback: () => { },\n};\n","/* eslint-disable react/forbid-prop-types */\n/* eslint-disable react/require-default-props */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Tooltip, Button, OverlayTrigger } from 'react-bootstrap';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport SpectraActions from 'src/stores/alt/actions/SpectraActions';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nfunction RepoSpectraBtn(props) {\n  const { element, spc, isLogin, isPublic } = props;\n  const toggleSpectraModal = e => {\n    e.stopPropagation();\n    if (!isLogin) {\n      NotificationActions.add({\n        title: 'View Spectra',\n        message: 'Please log in first.',\n        level: 'warning',\n        position: 'tc',\n      });\n    } else if (isPublic) {\n      PublicActions.loadSpectra.defer(spc, element);\n      SpectraActions.ToggleModal.defer();\n    } else {\n      SpectraActions.LoadSpectra.defer(spc, element);\n      SpectraActions.ToggleModal.defer();\n    }\n  };\n  return (\n    <span>\n      <OverlayTrigger\n        placement=\"top\"\n        delayShow={500}\n        overlay={<Tooltip id=\"spectra\">click to view spectra</Tooltip>}\n      >\n        <Button\n          bsSize=\"xsmall\"\n          className=\"button-right\"\n          onToggle={(open, event) => {\n            if (event) {\n              event.stopPropagation();\n            }\n          }}\n          onClick={toggleSpectraModal}\n          disabled={!(spc.length > 0)}\n        >\n          <i className=\"fa fa-area-chart\" aria-hidden=\"true\" />\n        </Button>\n      </OverlayTrigger>\n    </span>\n  );\n}\n\nRepoSpectraBtn.propTypes = {\n  element: PropTypes.object,\n  spc: PropTypes.array,\n  isLogin: PropTypes.bool,\n  isPublic: PropTypes.bool,\n};\nRepoSpectraBtn.defaultProps = { isLogin: false, isPublic: false };\n\nexport default RepoSpectraBtn;\n","/* eslint-disable react/require-default-props */\n/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Tooltip, Button, OverlayTrigger } from 'react-bootstrap';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport SpectraActions from 'src/stores/alt/actions/SpectraActions';\n\nfunction RepoNmriumBtn(props) {\n  const { element, spc, isPublic } = props;\n  const toggleNMRDisplayerModal = e => {\n    e.stopPropagation();\n    SpectraActions.ToggleModalNMRDisplayer();\n    if (isPublic) {\n      PublicActions.loadSpectraForNMRDisplayer.defer(spc, element);\n    } else {\n      SpectraActions.LoadSpectraForNMRDisplayer.defer(spc, element);\n    }\n  };\n\n  return (\n    <span>\n      <OverlayTrigger\n        placement=\"top\"\n        delayShow={500}\n        overlay={\n          <Tooltip id=\"__repo_tooltip_nmrium\">\n            Click to view data in NMRium\n          </Tooltip>\n        }\n      >\n        <Button\n          bsSize=\"xsmall\"\n          className=\"button-right\"\n          onToggle={(open, event) => {\n            if (event) {\n              event.stopPropagation();\n            }\n          }}\n          onClick={toggleNMRDisplayerModal}\n        >\n          <img\n            alt=\"NMRium\"\n            src=\"/images/repo/nmrium-favicon.ico\"\n            style={{ maxHeight: '1.8vh' }}\n          />\n        </Button>\n      </OverlayTrigger>\n    </span>\n  );\n}\n\nRepoNmriumBtn.propTypes = {\n  element: PropTypes.object,\n  spc: PropTypes.array,\n  isPublic: PropTypes.bool,\n};\nRepoNmriumBtn.defaultProps = { isPublic: false };\n\nexport default RepoNmriumBtn;\n","import {\n  BuildSpcInfos,\n  BuildSpcInfosForNMRDisplayer,\n  isNMRKind,\n} from 'src/utilities/SpectraHelper';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\n\nconst spcChemSpectra = (element, analysis) => {\n  if (element == null || analysis == null) return [];\n  const spcInfos = BuildSpcInfos(element, analysis);\n  if (spcInfos.length < 1) return [];\n  return spcInfos;\n};\n\nconst spcNmrium = (element, analysis) => {\n  if (element == null || analysis == null) return [];\n  const container = analysis;\n  const { chmos } = PublicStore.getState();\n  const hasNMRium = isNMRKind(container, chmos);\n  if (!hasNMRium) return [];\n  const spcInfosForNMRDisplayer = BuildSpcInfosForNMRDisplayer(\n    element,\n    container\n  );\n  if (spcInfosForNMRDisplayer.length < 1) return [];\n  return spcInfosForNMRDisplayer;\n};\n\nconst spc = (element, analysis) => {\n  const sInfos = spcChemSpectra(element, analysis);\n  const nInfos = spcNmrium(element, analysis);\n  return {\n    nmrium: { hasData: nInfos.length > 0, data: nInfos },\n    spectra: { hasData: sInfos.length > 0, data: sInfos },\n  };\n};\n\nexport default spc;\n","/* eslint-disable react/require-default-props */\n/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ImageModal from 'src/components/common/ImageModal';\nimport RepoSpectraBtn from 'src/components/chemrepo/common/RepoSpectra';\nimport RepoNmriumBtn from 'src/components/chemrepo/common/RepoNmrium';\nimport spc from 'src/components/chemrepo/spc-utils';\n\nfunction getClassName(nmrium, spectra) {\n  const sClass = spectra ? 'btn1' : 'btn0';\n  let nClass = 'btn0';\n  if (nmrium && spectra) {\n    nClass = 'btn2';\n  } else if (nmrium) {\n    nClass = 'btn1';\n  }\n  return { nmrium: nClass, spectra: sClass };\n}\n\nfunction RepoPreviewImage(props) {\n  const { element, analysis, isLogin, isPublic, previewImg, title } = props;\n  let hasPop = true;\n  let fetchNeeded = false;\n  let fetchId = 0;\n  let fetchFilename = '';\n  let imageStyle = { style: { cursor: 'default' } };\n  if (previewImg.startsWith('data:image')) {\n    fetchNeeded = true;\n    fetchId = analysis.preview_img.id;\n    fetchFilename = analysis.preview_img.filename;\n  } else {\n    hasPop = false;\n    imageStyle = { style: { cursor: 'default', display: 'none' } };\n  }\n  const spcs = spc(element, analysis);\n  const btnClass = getClassName(spcs.nmrium.hasData, spcs.spectra.hasData);\n  return (\n    <div className=\"preview\">\n      <div className={btnClass.nmrium} {...imageStyle}>\n        {spcs.nmrium.hasData ? (\n          <RepoNmriumBtn spc={spcs.nmrium.data} isPublic={isPublic} />\n        ) : null}\n      </div>\n      <div className={btnClass.spectra} {...imageStyle}>\n        {spcs.spectra.hasData ? (\n          <RepoSpectraBtn\n            element={element}\n            spc={spcs.spectra.data}\n            isLogin\n            isPublic={isPublic}\n          />\n        ) : null}\n      </div>\n      <ImageModal\n        imageStyle={imageStyle}\n        hasPop={hasPop}\n        previewObject={{ src: previewImg }}\n        popObject={{\n          title,\n          src: previewImg,\n          fetchNeeded,\n          fetchId,\n          fetchFilename,\n        }}\n      />\n    </div>\n  );\n}\n\nRepoPreviewImage.propTypes = {\n  element: PropTypes.object,\n  analysis: PropTypes.object,\n  isLogin: PropTypes.bool,\n  isPublic: PropTypes.bool,\n  previewImg: PropTypes.string.isRequired,\n  title: PropTypes.string,\n};\n\nRepoPreviewImage.defaultProps = { isLogin: false, isPublic: false, title: '' };\n\nexport default RepoPreviewImage;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport PublicFetcher from 'src/repo/fetchers/PublicFetcher';\n\nfunction LdData({ type, id }) {\n  const [data, setData] = useState(null);\n\n  useEffect(() => {\n    PublicFetcher.getLD(type, id)\n      .then(result => {\n        setData(result);\n      })\n      .catch(error => {\n        console.error('Error fetching LD data:', error);\n      });\n  }, [type, id]);\n\n  return (\n    <span>\n      {data && (\n        <script\n          type=\"application/ld+json\"\n          // eslint-disable-next-line react/no-danger\n          dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }}\n        />\n      )}\n    </span>\n  );\n}\n\nLdData.propTypes = {\n  type: PropTypes.string.isRequired,\n  id: PropTypes.number.isRequired,\n};\n\nexport default LdData;\n","import React, { useState } from 'react';\nimport SvgFileZoomPan from 'react-svg-file-zoom-pan-latest';\n\nfunction RepoSvgZoomHandler({ svg }) {\n  const [isZoomEnabled, setIsZoomEnabled] = useState(false);\n\n  const handleToggleZoom = () => {\n    setIsZoomEnabled(prevState => !prevState); // Toggle the zoom state\n  };\n\n  return (\n    <div\n      role=\"presentation\"\n      onClick={handleToggleZoom}\n      className={isZoomEnabled ? 'zoom_svg_on' : 'zoom_svg_off'}\n    >\n      <div>\n        <SvgFileZoomPan svg={svg} duration={300} resize />\n      </div>\n      <p>\n        {isZoomEnabled ? 'Click to disable zooming' : 'Click to enable zooming'}\n      </p>\n    </div>\n  );\n}\n\nexport default RepoSvgZoomHandler;\n","import React from 'react';\nimport RepoSvgZoomHandler from 'src/components/chemrepo/common/RepoSvgZoomHandler';\n\nconst zoomSvg = (path, extra = null) => (\n  <div>\n    {extra}\n    <RepoSvgZoomHandler svg={path} />\n  </div>\n);\n\nexport default zoomSvg;\n","/* eslint-disable react/forbid-prop-types */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable react/no-multi-comp */\nimport React, { Component } from 'react';\nimport SVG from 'react-inlinesvg';\nimport { replace } from 'lodash';\nimport {\n  Button,\n  Checkbox,\n  Col,\n  ControlLabel,\n  Form,\n  FormControl,\n  FormGroup,\n  Grid,\n  InputGroup,\n  Label,\n  OverlayTrigger,\n  Panel,\n  Row,\n  Table,\n  Tooltip\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport Clipboard from 'clipboard';\nimport moment from 'moment';\nimport Select from 'react-select';\nimport uuid from 'uuid';\nimport { RepoCommentBtn } from 'repo-review-ui';\nimport ContainerComponent from 'src/components/chemrepo/reaction/ContainerComponent';\nimport ExactMass from 'src/components/chemrepo/ExactMass';\nimport Formula, { ExactFormula } from 'src/components/common/Formula';\nimport HelpInfo from 'src/components/common/HelpInfo';\nimport PubchemLabels from 'src/components/pubchem/PubchemLabels';\nimport Quill2Viewer from 'src/components/Quill2Viewer';\nimport { ChemotionTag } from 'src/components/chemrepo/PublishCommon'; // TODO: Paggy\nimport Sample from 'src/models/Sample';\nimport Reaction from 'src/models/Reaction';\nimport PrintCodeButton from 'src/components/common/PrintCodeButton';\nimport { stopBubble } from 'src/utilities/DomHelper';\nimport RepoContainerDatasets from 'src/repoHome/RepoContainerDatasets';\nimport Utils from 'src/utilities/Functions';\nimport { hNmrCheckMsg, cNmrCheckMsg, instrumentText } from 'src/utilities/ElementUtils';\nimport { contentToText } from 'src/utilities/quillFormat';\nimport { chmoConversions } from 'src/components/OlsComponent';\nimport DropdownButtonSelection from 'src/components/common/DropdownButtonSelection';\nimport InputButtonField from 'src/components/common/InputButtonField';\nimport RepoConst from 'src/components/chemrepo/common/RepoConst';\nimport RepoReactionSchemeInfo from 'src/repoHome/RepoReactionSchemeInfo';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport RepoUserComment from 'src/components/chemrepo/common/RepoUserComment';\nimport RepoPublicComment from 'src/components/chemrepo/common/RepoPublicComment';\nimport { previewContainerImage } from 'src/utilities/imageHelper';\nimport RepoXvialButton from 'src/components/chemrepo/common/RepoXvialButton';\nimport RepoPreviewImage from 'src/components/chemrepo/common/RepoPreviewImage';\nimport { Citation, RefByUserInfo } from 'src/apps/mydb/elements/details/literature/LiteratureCommon';\nimport RepoSegment from 'src/repoHome/RepoSegment';\nimport MolViewerBtn from 'src/components/viewer/MolViewerBtn';\nimport MolViewerListBtn from 'src/components/viewer/MolViewerListBtn';\nimport LicenseIcon from 'src/components/chemrepo/LicenseIcon';\nimport { getFormattedISODate, getFormattedISODateTime } from 'src/components/chemrepo/date-utils';\nimport { formatPhysicalProps } from 'src/components/chemrepo/publication-utils';\nimport LdData from 'src/components/chemrepo/LdData';\nimport PublicLabels from 'src/components/chemrepo/PublicLabels';\nimport PublicReactionTlc from 'src/components/chemrepo/PublicReactionTlc';\nimport PublicReactionProperties from 'src/components/chemrepo/PublicReactionProperties';\nimport ReactionTable from 'src/repoHome/RepoReactionTable';\nimport StateLabel from 'src/components/chemrepo/common/StateLabel';\nimport SVGView from 'src/components/chemrepo/SVGViewPan';\nimport NMRiumDisplayer from 'src/components/nmriumWrapper/NMRiumDisplayer';\nimport ViewSpectra from 'src/apps/mydb/elements/details/ViewSpectra';\nimport zoomSvg from 'src/components/chemrepo/svg-utils';\n\nconst hideInfo = _molecule => ((_molecule?.inchikey === RepoConst.INCHIKEY_DUMMY) ? { display: 'none' } : {});\n\nconst CollectionDesc = (props) => {\n  let { label } = props;\n  if (typeof label !== 'string') return null;\n  if (label.match(/Reviewing/)) {\n    label = 'Reviewing';\n  } else if (label.match(/Element To Review/)) {\n    label = 'Element To Review';\n  } else if (label.match(/Reviewed/)) {\n    label = 'Reviewed';\n  }\n  const descs = {\n    Chemotion: 'Collection of all the samples and reactions, with analytical datasets, published on the Chemotion-Repository.',\n    'Scheme-only reactions': 'Collections of published scheme-only reactions (no associated analytical data).',\n    'My Published Elements': 'Collection of the published samples and reactions you submitted. The samples/reactions that were embargoed are placed in sub-folders.',\n    'Pending Publications': 'Collection of the samples and reactions you have submitted and are currently being reviewed.',\n    Reviewing: 'Collection of the samples and reactions that have been reviewed by a reviewer and needs revision from your side.',\n    'Element To Review': 'Collection of the samples and reactions that currently have to be reviewed.',\n    Reviewed: 'Collection of the samples and reactions that were reviewed and sent back to the submitters for revision/corrections (Read-Only). Waiting for resubmission.',\n    'Embargoed Publications': 'Collection under an embargo: the collection can only be released and its elements made public after all its elements have been accepted by a reviewer.'\n  };\n  const desc = descs[label];\n  if (desc === undefined) return null;\n  return (\n    <div style={{ float: 'right' }}>\n      <OverlayTrigger placement=\"right\" overlay={<Tooltip id={uuid.v4()}>{desc}</Tooltip>}>\n        <i className=\"fa fa-info-circle\" />\n      </OverlayTrigger>\n    </div>\n  );\n};\n\nconst ChemotionId = props => (\n  <h5>\n    <b>{props.type?.replace(/^\\w/, c => c.toUpperCase())} ID:&nbsp;</b>\n    <Button key={`reaction-jumbtn-${props.id}`} bsStyle=\"link\" onClick={() => { window.location = `/pid/${props.id}`; }}>\n      {props.type === 'reaction' ? 'CRR' : 'CRS'}-{props.id}\n    </Button><ClipboardCopyBtn text={`https://www.chemotion-repository.net/pid/${props.id}`} />\n  </h5>\n);\nChemotionId.propTypes = {\n  id: PropTypes.number.isRequired,\n  type: PropTypes.oneOf(['sample', 'reaction']).isRequired\n};\n\nconst SchemeWord = () => <span className=\"reaction-scheme-word\">(scheme)</span>;\n\nconst HomeFeature = props => (\n  <div className=\"feature-block\" style={props.extraStyle}>\n    <h3><div><i className={`${props.fa}`} aria-hidden=\"true\" /></div>&nbsp;{props.title}</h3>\n    <p>\n      {props.intro}\n    </p>\n    {props.extra}\n  </div>\n);\n\nHomeFeature.propTypes = {\n  fa: PropTypes.string.isRequired,\n  title: PropTypes.string.isRequired,\n  intro: PropTypes.string.isRequired\n};\n\nconst LicenseLegalCode = (cp) => {\n  let presentLicense = 'Creative Commons Attribution-ShareAlike 4.0 International License';\n  let presentHref = 'https://creativecommons.org/licenses/by-sa/4.0/legalcode';\n  switch (cp) {\n    case 'CC BY-SA':\n      presentLicense = 'Creative Commons Attribution-ShareAlike 4.0 International License';\n      presentHref = 'https://creativecommons.org/licenses/by-sa/4.0/legalcode';\n      break;\n    case 'CC BY':\n      presentLicense = 'Creative Commons Attribution 4.0 International License';\n      presentHref = 'https://creativecommons.org/licenses/by/4.0/legalcode';\n      break;\n    case 'CC0':\n      presentLicense = 'CC0 1.0 Universal';\n      presentHref = 'https://creativecommons.org/publicdomain/zero/1.0/legalcode';\n      break;\n    case 'No License':\n      presentLicense = 'No License';\n      presentHref = '';\n      break;\n    default:\n      break;\n  }\n  return <span><b>{presentLicense}</b>&nbsp;{presentHref === '' ? null : <a rel=\"noreferrer noopener\" target=\"_blank\" href={presentHref}>View Legal Code</a>}</span>;\n};\n\nconst nmrMsg = (sample, container) => {\n  if (sample.molecule && container.extended_metadata &&\n    (typeof container.extended_metadata?.kind === 'undefined' ||\n      (container.extended_metadata?.kind?.split('|')[0].trim() !== chmoConversions.nmr_1h?.termId && container.extended_metadata.kind?.split('|')[0].trim() !== chmoConversions.nmr_13c?.termId)\n    )) {\n    return '';\n  }\n  const nmrStr = container.extended_metadata && contentToText(container.extended_metadata.content);\n\n  if (container.extended_metadata.kind?.split('|')[0].trim() === chmoConversions.nmr_1h?.termId) {\n    const msg = hNmrCheckMsg(sample.molecule.sum_formular, nmrStr);\n    return msg === '' ? (<div style={{ display: 'inline', color: 'green' }}>&nbsp;<i className=\"fa fa-check\" /></div>) : (<div style={{ display: 'inline', color: 'red' }}>&nbsp;(<sup>1</sup>H {msg})</div>);\n  } else if (container.extended_metadata?.kind?.split('|')[0].trim() === chmoConversions.nmr_13c?.termId) {\n    const msg = cNmrCheckMsg(sample.molecule.sum_formular, nmrStr);\n    return msg === '' ? (<div style={{ display: 'inline', color: 'green' }}>&nbsp;<i className=\"fa fa-check\" /></div>) : (<div style={{ display: 'inline', color: 'red' }}>&nbsp;(<sup>13</sup>C {msg})</div>);\n  }\n  return '';\n};\n\n// the requirements for file types as given\nconst isFileTypePass = (analysisType, attachments) => {\n  const baseType = ['jpg', 'jpeg', 'png', 'tiff', 'svg'];\n  const nmrType = ['jcamp', 'dx', 'jdx'];\n  let files = [];\n  switch (analysisType) {\n    case '1H NMR':\n    case chmoConversions.nmr_1h?.termId:\n    case '13C NMR':\n    case chmoConversions.nmr_13c?.termId:\n    case '15N NMR':\n    case 'NMR':\n    case 'IR':\n    case chmoConversions.ir.termId:\n      files = attachments.filter(f => baseType.includes(f.filename.split('.').pop().toLowerCase()) && !f.is_deleted);\n      if (files.length < 1) return false;\n      files = attachments.filter(f => nmrType.includes(f.filename.split('.').pop().toLowerCase()) && !f.is_deleted);\n      if (files.length < 1) return false;\n      break;\n    case 'EA':\n    case chmoConversions.ea.termId:\n    case 'X-Ray':\n    case 'Crystall-Structure':\n    case chmoConversions.crystal_structure.termId:\n      files = attachments.filter(f => baseType.includes(f.filename.split('.').pop().toLowerCase()) && !f.is_deleted);\n      if (files.length < 1) return false;\n      break;\n    default:\n      break;\n  }\n  return true;\n};\n\n// at least one dataset has to be attached\n// in dataset: instrument has to be given\nconst isDatasetPass = (analysis) => {\n  const dataset = analysis.children;\n  const attachments = dataset.filter(d => d.attachments.length > 0 && !d.is_deleted);\n  if (attachments.length < 1) return false;\n  const instruments = dataset.filter(d => d.extended_metadata && (d.extended_metadata.instrument || '').trim() !== '' && !d.is_deleted);\n  if (instruments.length < 1) return false;\n  const analysisType = (analysis.extended_metadata.kind || '').split('|').shift().trim();\n  const files = attachments.filter(d => isFileTypePass(analysisType, d.attachments));\n  if (files.length < 1) return false;\n  return true;\n};\n\nconst isNmrPass = (analysis, sample) => {\n  const nmrStr = analysis.extended_metadata && contentToText(analysis.extended_metadata.content);\n  const nmrType = analysis.extended_metadata && (analysis.extended_metadata.kind || '').split('|').shift().trim();\n  if (nmrType !== '1H NMR' && nmrType !== '13C NMR' && nmrType !== chmoConversions.nmr_1h?.termId && nmrType !== chmoConversions.nmr_13c?.termId) return true;\n  if (nmrType === '1H NMR' || nmrType === chmoConversions.nmr_1h?.termId) {\n    return hNmrCheckMsg(sample.molecule.sum_formular, nmrStr) === '';\n  } else if (nmrType === '13C NMR' || nmrType === chmoConversions.nmr_13c?.termId) {\n    return cNmrCheckMsg(sample.molecule.sum_formular, nmrStr) === '';\n  }\n  return true;\n};\n\nconst DownloadMetadataBtn = (l) => {\n  const contentUrl = `/api/v1/public/metadata/download?type=${l.type.toLowerCase()}&id=${l.id}`;\n  return (\n    <OverlayTrigger\n      placement=\"bottom\"\n      overlay={<Tooltip id={`tt_metadata__${uuid.v4()}`}>download published metadata</Tooltip>}\n    >\n      <Button\n        bsSize=\"xsmall\"\n        onClick={() => Utils.downloadFile({\n          contents: contentUrl\n        })}\n      >\n        <i className=\"fa fa-file-code-o\" />\n      </Button>\n    </OverlayTrigger>\n  );\n};\n\n\nconst DownloadJsonBtn = (l) => {\n  const contentUrl = `/api/v1/public/metadata/download_json?type=${l.type.toLowerCase()}&id=${l.id}`;\n  return (\n    <>\n      <OverlayTrigger\n        placement=\"bottom\"\n        overlay={<Tooltip id={`tt_metadata__${uuid.v4()}`}>download JSON-LD</Tooltip>}\n      >\n        <Button\n          style={{ backgroundColor: 'grey', color:'white', marginLeft: '5px' }}\n          bsSize=\"xsmall\"\n          onClick={() => Utils.downloadFile({\n            contents: contentUrl\n          })}\n        >\n          JSON-LD\n        </Button>\n      </OverlayTrigger>\n      <LdData type={l.type.toLowerCase()} id={l.id} />\n    </>\n  );\n};\n\nconst DownloadDOICsv = (e, a) => {\n  const dataToCsvURI = data => encodeURI(`data:text/csv;charset=utf-8,${data.map(row => row.join(',')).join('\\n')}`);\n  const dois = [];\n  dois.push(['Reserved DOIs', '']);\n  dois.push(['', '']);\n\n  if (e.tag.taggable_data.reserved_doi) dois.push([e.type.charAt(0).toUpperCase() + e.type.slice(1), `DOI: ${e.tag.taggable_data.reserved_doi}`]);\n  a.forEach((an) => {\n    if (an.extended_metadata.reserved_doi) dois.push([`${an.name} - ${an.extended_metadata.kind}`, `DOI: ${an.extended_metadata.reserved_doi}`]);\n  });\n\n  if (e.type === 'reaction') {\n    // product(sample)\n    if (e.products !== null && e.products.length > 0) {\n      e.products.forEach((p) => {\n        if (p.tag.taggable_data.reserved_doi) dois.push([`Product ${p.name}`, `DOI: ${p.tag.taggable_data.reserved_doi}`]);\n        p.analysisArray().forEach((an) => {\n          if (an.extended_metadata.reserved_doi) dois.push([`${an.name} - ${an.extended_metadata.kind}`, `DOI: ${an.extended_metadata.reserved_doi}`]);\n        });\n      });\n    }\n  }\n  Utils.downloadFile({ contents: dataToCsvURI(dois), name: 'export_dois.csv' });\n};\n\nclass EmbargoCom extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isShow: false\n    };\n    this.handleEmbargoChange = this.handleEmbargoChange.bind(this);\n  }\n\n  handleEmbargoChange(e) {\n    this.props.onEmbargoChange(e.value);\n  }\n\n  handleLicenseChange(e) {\n    this.props.onLicenseChange(e.value);\n  }\n\n  handleCC0ConsentChange(e, type) {\n    this.props.onCC0ConsentChange(e.target.checked, type);\n  }\n\n  render() {\n    const defaultBundles = [\n      { value: '-1', name: 'no', label: 'No embargo' },\n      { value: '0', name: 'new', label: '--Create a new Embargo Bundle--' },\n    ];\n    const licenses = [\n      { name: 'CC BY-SA', value: 'CC BY-SA', label: 'CC BY-SA' },\n      { name: 'CC BY', value: 'CC BY', label: 'CC BY' },\n      { name: 'CC0', value: 'CC0', label: 'CC0' },\n      { name: 'No License', value: 'No License', label: 'No License' }\n    ];\n\n    const bundles = defaultBundles.concat(this.props.opts);\n    const description = [\n      'Please use the embargo if you do not wish your data to be published as soon as they are  processed but want to release them yourself at a later stage.',\n      'Please use one bundle for data that belongs to the same publication.',\n      'If you create data for more than one publication, please take care that you assign the data to the right bundle.'\n    ].join(' ');\n    const { isShow } = this.state;\n    const embargoDesc = isShow ? (\n      <div style={{\n        padding: '10px', backgroundColor: '#dfdfdf', borderRadius: '3px', width: '100%'\n      }}\n      >\n        <b>Embargo Bundle</b>&#58;&nbsp;{description}\n      </div>\n    ) : (null);\n\n    const cc0Consent1 = 'I hereby waive all copyright and related or neighboring rights together with all associated claims and causes of action with respect to this work to the extent possible under the law.';\n    const cc0Consent2 = 'I have read and understand the terms and intended legal effect of CC0, and hereby voluntarily elect to apply it to this work.';\n    const deed = (\n      <div style={{\n        padding: '10px', borderRadius: '3px', borderColor: 'darkred', borderStyle: 'solid', borderWidth: 'thin', width: '100%'\n      }}\n      >\n        {LicenseLegalCode(this.props.selectedLicense)}\n        {\n        this.props.selectedLicense === 'CC0' ?\n          (\n            <div stye={{ width: '100%' }}>\n              <Checkbox checked={this.props.cc0Deed.consent1} onChange={e => this.handleCC0ConsentChange(e, 'consent1')}>\n                {cc0Consent1}\n              </Checkbox>\n              <Checkbox checked={this.props.cc0Deed.consent2} onChange={e => this.handleCC0ConsentChange(e, 'consent2')}>\n                {cc0Consent2}\n              </Checkbox>\n            </div>\n          )\n          :\n          (null)\n      }\n      </div>\n    );\n\n    return (\n      <div>\n        <Form horizontal style={{ display: 'flex' }}>\n          <div style={{ width: '20%', textAlign: 'right' }}>\n            <ControlLabel>Choose license&nbsp;</ControlLabel>\n          </div>\n          <div style={{ width: '20%' }}>\n            <Select\n              value={this.props.selectedLicense}\n              onChange={e => this.handleLicenseChange(e)}\n              options={licenses}\n              className=\"select-assign-collection\"\n              clearable={false}\n            />\n          </div>\n          <div style={{ width: '40%', textAlign: 'right' }}>\n            <ControlLabel>Publish with Embargo Bundle</ControlLabel>&nbsp;\n            <div role=\"button\" style={{ display: 'inline' }} onClick={() => this.setState({ isShow: !isShow })}>\n              <i className=\"fa fa-question-circle\" aria-hidden=\"true\" />\n            </div>&nbsp;\n          </div>\n          <div style={{ width: '40%' }}>\n            <Select\n              value={this.props.selectedValue}\n              onChange={e => this.handleEmbargoChange(e)}\n              options={bundles}\n              className=\"select-assign-collection\"\n              clearable={false}\n            />\n          </div>\n        </Form>\n        {embargoDesc}\n        {deed}\n      </div >\n    );\n  }\n}\n\nEmbargoCom.propTypes = {\n  opts: PropTypes.array,\n  selectedValue: PropTypes.string.isRequired,\n  onEmbargoChange: PropTypes.func.isRequired,\n  selectedLicense: PropTypes.string,\n  onLicenseChange: PropTypes.func.isRequired,\n  onCC0ConsentChange: PropTypes.func.isRequired,\n  cc0Deed: PropTypes.shape({\n    consent1: PropTypes.bool.isRequired,\n    consent2: PropTypes.bool.isRequired\n  })\n};\n\nEmbargoCom.defaultProps = {\n  opts: [],\n  selectedLicense: 'CC BY-SA',\n  cc0Deed: { consent1: false, consent2: false }\n};\n\nconst PublishTypeAs = props => (\n  <div style={{ display: 'inline' }}>\n    <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"tip_publish_as\">Choose the publication type as Full or Scheme-Only</Tooltip>}>\n      <i className=\"fa fa-question-circle\" aria-hidden=\"true\" />\n    </OverlayTrigger>&nbsp;\n    <DropdownButtonSelection\n      options={props.options}\n      selected={props.selected}\n      placeholder=\"Select publication type...\"\n      onSelect={e => props.onChange(e)}\n    />\n  </div>\n);\n\nPublishTypeAs.propTypes = {\n  options: PropTypes.arrayOf(PropTypes.string),\n  selected: PropTypes.string,\n  onChange: PropTypes.func.isRequired,\n};\n\nPublishTypeAs.defaultProps = {\n  options: [],\n  selected: 'full',\n};\n\nconst MoveEmbargoedBundle = (element, onMoveClick) => {\n  return (\n    <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"moveEmbargo\">Move to another embargoed bundle</Tooltip>}>\n      <Button bsSize=\"xsmall\" onClick={() => onMoveClick(element)}><i className=\"fa fa-exchange\" aria-hidden=\"true\" /></Button>\n    </OverlayTrigger>\n  );\n};\n\nconst ElAspect = (e, onClick, user = null, isOwner, currentElement = null, onMoveClick) => {\n  if (!e) {\n    return '';\n  }\n  let listClass;\n  if (e.type === 'Reaction') {\n    listClass = (currentElement !== null && currentElement.reaction && currentElement.reaction.id === e.id) ? 'list_focus_on' : 'list_focus_off';\n  } else {\n    listClass = (currentElement !== null && currentElement.sample && currentElement.sample.id === e.id) ? 'list_focus_on' : 'list_focus_off';\n  }\n  const schemeOnly = (e && e.scheme_only === true) || false;\n  return (\n    <tr\n      key={e.id}\n      className={listClass}\n      onClick={() => onClick(e.type.toLowerCase(), e.id)}\n    >\n      <td style={{ position: 'relative' }} >\n        <span className=\"review_element_label\">\n          <i className={`icon-${e.type.toLowerCase()}`} />{schemeOnly ? <SchemeWord /> : ''}&nbsp;{e.title}\n        </span>\n        &nbsp;By&nbsp;{e.published_by}&nbsp;at&nbsp;\n        {getFormattedISODateTime(e.submit_at)}&nbsp;{user?.type === RepoConst.U_TYPE.ANONYMOUS ? '' : StateLabel(e.state)}\n        &nbsp;{user !== null && !isOwner ? '' : MoveEmbargoedBundle(e, onMoveClick)}\n        <div>\n          <SVGView svg={e.svg} type={e.type} className=\"molecule-mid\" />\n        </div>\n      </td>\n    </tr>\n  );\n};\n\nconst SampleExactMW = (em) => {\n  if (em) {\n    return (<span>{em.toFixed(6)} g&sdot;mol<sup>-1</sup></span>);\n  }\n  return '';\n};\n\nconst DateFormatYMDLong = (params) => {\n  const dateTime = new Date(params);\n  const options = {\n    year: 'numeric', month: 'long', day: 'numeric', timeZone: 'UTC'\n  };\n  return dateTime.toLocaleDateString('en-GB', options);\n};\n\nconst DateFormatDMYTime = (dt) => {\n  if (dt == null || typeof dt === 'undefined') return '';\n  try {\n    const m = moment(dt, 'DD/MM/YYYY HH:mm:ss');\n    if (m.isValid()) {\n      return dt;\n    }\n    const dtJSON = new Date(dt).toJSON();\n    const dtISO = new Date(Date.parse(dt)).toISOString();\n    if (dtISO === dtJSON) {\n      return moment.parseZone(new Date(Date.parse(dt))).utc().format('DD/MM/YYYY HH:mm:ss').toString();\n    }\n    return '';\n  } catch (e) {\n    return '';\n  }\n};\n\nconst EditorTips = () => (\n  <ol>\n    {/* <li>Use <b>Preview</b> to see how your work will look like.</li> */}\n    <li>Use&nbsp;&nbsp;<i className=\"fa fa-file-text-o\" aria-hidden=\"true\" />&nbsp;&nbsp;to open a text editor and add into the content.</li>\n    <li>Use&nbsp;&nbsp;<i className=\"fa fa-picture-o\" aria-hidden=\"true\" />&nbsp;&nbsp;to open a image editor and add into the content.</li>\n    <li>Use&nbsp;&nbsp;<i className=\"fa fa-arrows\" aria-hidden=\"true\" />&nbsp;&nbsp;to change the section order.</li>\n    <li>Use&nbsp;&nbsp;<i className=\"fa fa-trash-o\" aria-hidden=\"true\" />&nbsp;&nbsp;to remove the section from the content.</li>\n    <li>In text editor, use&nbsp;&nbsp;<i className=\"fa fa-link\" aria-hidden=\"true\" />&nbsp;&nbsp;to link to the url.</li>\n  </ol>\n);\n\nconst IconToMyDB = ({\n  id, type, tooltipTitle = 'Link to My DB', isLogin = false, isCI = false, isPublished = true\n}) => {\n\n  const createLinkButton = (baseUrl, dt) => (\n    <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">{tooltipTitle}</Tooltip>}>\n      <Button\n        className=\"animation-ring\"\n        bsStyle=\"link\"\n        href={`${baseUrl}/${dt}/${type}/${id}`}\n        target=\"_blank\"\n      >\n        <i className={`icon-${type}`} />\n      </Button>\n    </OverlayTrigger>\n  );\n\n  if (isCI) {\n    return createLinkButton('/mydb/collection', '103');\n  }\n\n  if (isLogin) {\n    const dt = isPublished ? 'publication' : 'review';\n    return createLinkButton('/mydb/scollection', dt);\n  }\n\n  return (<span className=\"wrap-ring\"><i className={`icon-${type}`} /></span>);\n};\n\nIconToMyDB.propTypes = {\n  id: PropTypes.number.isRequired,\n  type: PropTypes.string.isRequired,\n  tooltipTitle: PropTypes.string,\n  isLogin: PropTypes.bool,\n  isPublished: PropTypes.bool,\n};\n\nIconToMyDB.defaultProps = {\n  tooltipTitle: 'Link to My DB',\n  isLogin: false,\n  isPublished: true,\n};\n\n\nconst ChecklistPanel = ({\n  checklist, isReviewer, review_info\n}) => {\n  const dglr = checklist?.glr?.status === true ? (<i className=\"fa fa-check-square-o\" style={{ color: 'brown' }} />) : (<i className=\"fa fa-square-o\" style={{ color: 'brown' }} />);\n  const dtbl = checklist?.tbl?.status === true ? (<i className=\"fa fa-check-square-o\" style={{ color: 'blue' }} />) : (<i className=\"fa fa-square-o\" style={{ color: 'blue' }} />);\n  const ddes = checklist?.des?.status === true ? (<i className=\"fa fa-check-square-o\" style={{ color: 'orange' }} />) : (<i className=\"fa fa-square-o\" style={{ color: 'orange' }} />);\n  const dafm = checklist?.afm?.status === true ? (<i className=\"fa fa-check-square-o\" style={{ color: 'green' }} />) : (<i className=\"fa fa-square-o\" style={{ color: 'green' }} />);\n  const dact = checklist?.act?.status === true ? (<i className=\"fa fa-check-square-o\" style={{ color: 'purple' }} />) : (<i className=\"fa fa-square-o\" style={{ color: 'purple' }} />);\n  const dohd = checklist?.ohd?.status === true ? (<i className=\"fa fa-check-square-o\" style={{ color: 'red' }} />) : (<i className=\"fa fa-square-o\" style={{ color: 'red' }} />);\n\n\n  if (isReviewer === true || review_info?.groupleader == true) {\n\n    const leader_names = review_info?.leaders?.length > 0 ? review_info.leaders.map(u => u.name) : [];\n    const leaders = leader_names.length > 0 ? `additional reviewer(s): ${leader_names.join(', ')}` : '';\n    const isGL = review_info?.leaders?.length > 0 ? (<OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">group leader review</Tooltip>}>{dglr}</OverlayTrigger>) : '';\n    return (\n      <div>\n        {isGL}&nbsp;\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">table values</Tooltip>}>{dtbl}</OverlayTrigger>&nbsp;\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">description</Tooltip>}>{ddes}</OverlayTrigger>&nbsp;\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">analysis format</Tooltip>}>{dafm}</OverlayTrigger>&nbsp;\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">analysis content</Tooltip>}>{dact}</OverlayTrigger>&nbsp;\n        <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">on hold</Tooltip>}>{dohd}</OverlayTrigger>&nbsp;\n        &nbsp;{leaders}\n      </div>\n    );\n  }\n  return (<div />);\n};\n\nChecklistPanel.propTypes = {\n  checklist: PropTypes.object,\n  isReviewer: PropTypes.bool,\n};\n\nChecklistPanel.defaultProps = {\n  checklist: {},\n  isReviewer: false\n};\n\nconst SidToPubChem = ({ sid }) => {\n  let labelStyle = {\n    // display: 'inline-block',\n    marginLeft: '2px',\n    marginRight: '2px',\n    //position: 'absolute',\n  };\n  if (!sid || isNaN(sid)) {\n    labelStyle.WebkitFilter = \"grayscale(100%)\"\n  }\n  const handleOnClick = (e) => {\n    if (sid && !isNaN(sid)){\n      window.open(\"https://pubchem.ncbi.nlm.nih.gov/substance/\" + sid, '_blank')\n    }\n    e.stopPropagation()\n  }\n\n  if (sid && !isNaN(sid)){\n    return (\n      <span style={labelStyle} onClick={handleOnClick}>\n        <img src=\"/images/wild_card/pubchem_sid.svg\" className=\"pubchem-logo\" />\n      </span>\n    )\n    }else {\n      return <span />\n  }\n}\n\nSidToPubChem.propTypes = {\n  sid: PropTypes.string\n};\n\n\nconst OrcidIcon = ({ orcid }) => {\n  if (typeof orcid === 'undefined' || orcid === null) {\n    return (<span />);\n  }\n  const handleOnClick = (e) => {\n    e.stopPropagation();\n  };\n\n  return (\n    <a href={`https://orcid.org/${orcid}`} target=\"_blank\" rel=\"noopener noreferrer\" onClick={handleOnClick}>\n      <img src=\"/images/wild_card/ORCIDiD_iconvector.svg\" className=\"orcid-logo\" alt=\"ORCID iD\" title=\"ORCID iD\" />\n    </a>\n  );\n};\n\nOrcidIcon.propTypes = {\n  orcid: PropTypes.string\n};\n\nOrcidIcon.defaultProps = {\n  orcid: null\n};\n\nconst ElementIcon = (elementType) => {\n  switch (elementType) {\n    case 'Reaction':\n      return <i className=\"icon-reaction\" style={{ fontSize: '1.5em', verticalAlign: 'middle' }} />;\n    case 'Sample':\n      return <i className=\"icon-sample\" style={{ fontSize: '1.5em', verticalAlign: 'middle' }} />;\n    default:\n      return <div />;\n  }\n};\n\nconst AnalysesTypeJoinLabel = (analyses, type) => {\n  const regExp = /\\(([^)]+)\\)/;\n  const analysesTypeJoin = analyses.map((analysis) => {\n    let kind = (regExp.exec(analysis.extended_metadata['kind'] || '') || ['']).pop().trim();\n    if (kind === '') {\n      kind = (analysis.extended_metadata['kind'] || '').split('|').pop().trim();\n    }\n    return kind;\n  }).join(', ');\n\n  return analysesTypeJoin === '' ? analysesTypeJoin :\n    (\n      <div style={{ display: 'inline-block', whiteSpace: 'pre-line', textAlign: 'left', verticalAlign: 'middle' }}>\n        <small><b>{ElementIcon(type)}</b></small>{' '}{analysesTypeJoin}\n      </div>\n    );\n};\n\nconst CalcDuration = (reaction) => {\n  let duration = null;\n\n  if (reaction.duration && !!reaction.duration.match(/\\d+/)) {\n    return reaction.duration;\n  }\n\n  if (reaction.timestamp_start && reaction.timestamp_stop) {\n    const start = moment(reaction.timestamp_start, 'DD-MM-YYYY HH:mm:ss');\n    const stop = moment(reaction.timestamp_stop, 'DD-MM-YYYY HH:mm:ss');\n    if (start < stop) {\n      duration = moment.preciseDiff(start, stop);\n    }\n  }\n  if (duration == null) {\n    return '';\n  }\n  return duration;\n};\n\nconst AuthorList = ({ creators, affiliationMap }) => {\n  return (\n    <span>\n      {creators.map(\n        (creator, i) => (\n          <span key={`auth_${creator.id}_${uuid.v4()}`}>\n            {i === 0 ? null : ' - '}<OrcidIcon orcid={creator.ORCID} />{creator.name}\n            <sup>\n              {creator.affiliationIds && creator.affiliationIds.map(e => affiliationMap[e]).sort().join()}\n            </sup>\n          </span>\n        )\n      )}\n    </span>\n  );\n};\n\nAuthorList.propTypes = {\n  creators: PropTypes.array,\n  affiliationMap: PropTypes.object,\n};\n\nAuthorList.defaultProps = {\n  creators: [],\n  affiliationMap: {},\n};\n\nconst ContributorInfo = ({ contributor, showHelp }) => {\n  if (!contributor.name) {\n    return <div />;\n  }\n  const contributorBlock = !showHelp ? (\n    <h5><b>Contributor: </b><OrcidIcon orcid={contributor.ORCID} />{contributor.name}</h5>\n  ) : (\n    <h5>\n      <b>Contributor&nbsp;<HelpInfo source=\"contributor\" place=\"right\" />: </b><OrcidIcon orcid={contributor.ORCID} />{contributor.name}\n    </h5>\n  );\n  return (\n    <div>\n      {contributorBlock}\n      <div>\n        {contributor.affiliations && contributor.affiliations.map((e, i) => <p style={{ fontSize: 'small' }} key={uuid.v4()}>{i + 1}. {e}</p>)}\n      </div>\n    </div>\n  );\n};\n\nContributorInfo.propTypes = {\n  contributor: PropTypes.object,\n  showHelp: PropTypes.bool\n};\n\nContributorInfo.defaultProps = {\n  contributor: {},\n  showHelp: false\n};\n\nconst AffiliationList = ({ affiliations, affiliationMap }) => {\n  const names = [];\n  Object.keys(affiliationMap).map((affiliationId) => {\n    const ind = affiliationMap[affiliationId];\n    names[ind] = affiliations[affiliationId];\n    return null;\n  });\n  return (\n    <div>\n      {names.map(\n        (e, i) => (i === 0 ? null : <p style={{ fontSize: 'small' }} key={'affil_'+i}>{i}. {e}</p>)\n      )}\n    </div>\n  );\n}\nAffiliationList.propTypes = {\n  affiliations: PropTypes.object,\n  affiliationMap: PropTypes.object,\n};\n\nAffiliationList.defaultProps = {\n  affiliations: {},\n  affiliationIds: {},\n};\n\nclass ClipboardCopyLink extends Component {\n  constructor(props) {\n    super(props)\n    this.clipboard = new Clipboard('.clipboardBtn');\n  }\n\n  render() {\n    return (\n      <OverlayTrigger\n        placement=\"bottom\"\n        overlay={<Tooltip id=\"copy_clipboard\">copy to clipboard</Tooltip>}\n      >\n        <div role=\"button\" data-clipboard-text={this.props.text || ' '} className=\"clipboardBtn clip-copy\" >{this.props.text}</div>\n      </OverlayTrigger>\n    );\n  }\n}\n\nclass ClipboardCopyBtn extends Component {\n  constructor(props) {\n    super(props);\n    this.clipboard = new Clipboard('.clipboardBtn');\n  }\n\n  componentWillUnmount() {\n    this.clipboard.destroy();\n  }\n\n  render() {\n    return (\n      <OverlayTrigger\n        placement=\"bottom\"\n        overlay={<Tooltip id=\"copy_clipboard\">{this.props.tooltip || 'copy to clipboard'}</Tooltip>}\n      >\n        <Button className=\"clipboardBtn\" data-clipboard-text={this.props.text || ' '} bsSize=\"xsmall\" >\n          <i className=\"fa fa-clipboard\" />\n        </Button>\n      </OverlayTrigger>\n    );\n  }\n}\n\nconst MoleculeInfo = ({ molecule, sample_svg_file = '', hasXvial = false, children }) => {\n  let svgPath = `/images/molecules/${molecule.molecule_svg_file}`;\n  if (sample_svg_file && sample_svg_file != '') {\n    svgPath = `/images/samples/${sample_svg_file}`;\n  }\n  const tagData = molecule.tag && molecule.tag.taggable_data;\n  const pubchemInfo = {\n    pubchem_tag: { pubchem_cid: tagData && tagData.pubchem_cid }\n  };\n  const nameOrFormula = molecule.iupac_name && molecule.iupac_name !== ''\n    ? <h4><b>IUPAC Name: </b> {molecule.iupac_name} (<Formula formula={molecule.sum_formular} />)</h4>\n    : <h4><b>Formula: </b> <Formula formula={molecule.sum_formular} /></h4>;\n  const registedCompoundTooltip = (\n    <div>\n      For availability please contact the Compound Platform team with the blue button given below. An explanation can be accessed via our Youtube channel&nbsp;\n      <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://www.youtube.com/channel/UCWBwk4ZSXwmDzFo_ZieBcAw?\"><i className=\"fa fa-youtube-play\" style={{ color: 'red', fontSize: '150%' }} /></a>&nbsp;\n      or on our how-to pages\n      <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://www.chemotion-repository.net/home/howto/cf3ede44-b09a-400a-b0d4-b067735e4262\"><img alt=\"chemotion_first\" src=\"/favicon.ico\" className=\"pubchem-logo\" /></a>\n    </div>\n  );\n  return (\n    <Row>\n      <Col sm={4} md={4} lg={4}>\n        {zoomSvg(svgPath, <MolViewerBtn isPublic fileContent={molecule.molfile || '\\n  noname\\n\\n  0  0  0  0  0  0  0  0  0  0999 V2000\\nM  END\\n'} disabled={false} viewType={`mol_mol_${molecule.id}`} />)}\n      </Col>\n      <Col sm={8} md={8} lg={8}>\n      <div>\n        {children}\n        <div className=\"repo-registed-compound-desc\">\n          This information is based on the molecular structure shown on the left side. For a decoupled sample, please refer to its individual details.\n        </div>\n        {nameOrFormula}\n        <br />\n        <span style={hideInfo(molecule)}>\n          <h5><b>Canonical SMILES: </b> <ClipboardCopyLink text={molecule.cano_smiles} /></h5>\n          <h5><b>InChI: </b> <ClipboardCopyLink text={molecule.inchistring} /></h5>\n          <h5><b>InChIKey: </b> <ClipboardCopyLink text={molecule.inchikey} /></h5>\n          <h5><b>Exact Mass: </b> {SampleExactMW(molecule.exact_molecular_weight)}</h5>\n        </span>\n        {\n          hasXvial ?\n            <div className=\"repo-registed-compound-desc\">\n              A physical sample of this molecule was registered to the Molecule Archive of the\n              Compound Platform&nbsp;\n              <OverlayTrigger trigger=\"click\" rootClose placement=\"top\" overlay={<Tooltip id=\"registed_compound_tooltip\" className=\"left_tooltip bs_tooltip\">{registedCompoundTooltip}</Tooltip>}>\n                <i className=\"fa fa-info-circle\" aria-hidden=\"true\" />\n              </OverlayTrigger>\n            </div> : null\n        }\n        <h5>\n          <b>Crosslinks: </b>\n          &nbsp;&nbsp;\n          <PubchemLabels element={pubchemInfo} />\n          <ChemotionTag tagData={tagData} />\n        </h5>\n      </div>\n      </Col>\n    </Row>\n  );\n};\n\nconst RenderAnalysisHeader = (props) => {\n  const {\n    element, isPublic, isLogin, isReviewer, updateRepoXvial, xvialCom, userInfo, reactionId, literatures\n  } = props;\n  const svgPath = `/images/samples/${element.sample_svg_file}`;\n  let doiLink = '';\n  const molecule = element.molecule || {};\n  if (isPublic) {\n    doiLink = element.tag && element.tag.taggable_data && element.tag.taggable_data.publication && element.tag.taggable_data.publication.doi;\n  } else {\n    doiLink = (element.doi && element.doi.full_doi) || '';\n  }\n  const nameOrFormula = molecule.iupac_name && molecule.iupac_name !== ''\n    ? <span><b>IUPAC Name: </b> {molecule.iupac_name} (<ExactFormula sample={element} molecule={molecule} />)</span>\n    : <span><b>Formula: </b> <ExactFormula sample={element} molecule={molecule} /></span>;\n\n  const iupacUserDefined = element.showed_name == (molecule.iupac_name)\n    ? <span />\n    : <h5><b>Name: </b> {element.showed_name} </h5>;\n\n  const rinchiStyle = { borderStyle: 'none', boxShadow: 'none' };\n  const crsId = (element.publication && element.publication.id) || '';\n  const xvial = (element.tag && element.tag.taggable_data && element.tag.taggable_data.xvial && element.tag.taggable_data.xvial.num) || '';\n  const references = literatures ? literatures.map(lit => (\n    <li key={`product_${lit.id}`} style={{ display: 'flex' }}>\n      <RefByUserInfo info={lit.ref_added_by} litype={lit.litype} />&nbsp;\n      <Citation key={lit.id} literature={lit} />\n    </li>\n  )) : [];\n  const { meltingPoint, boilingPoint, showPhysicalProps } = formatPhysicalProps(element);\n  return (\n    <div>\n      <br />\n      <Row style={rinchiStyle}>\n        <Col sm={6} md={6} lg={6}>\n          {zoomSvg(svgPath, <MolViewerBtn isPublic fileContent={element.molfile || '\\n  noname\\n\\n  0  0  0  0  0  0  0  0  0  0999 V2000\\nM  END\\n'} disabled={false} viewType={`mol_el_${element.id}`} />)}\n        </Col>\n        <Col sm={6} md={6} lg={6}>\n          <span className=\"repo-pub-sample-header\">\n            <span className=\"repo-pub-title\"><IconToMyDB isLogin={isLogin} id={element.id} type=\"sample\" /></span>&nbsp;\n            <span className=\"repo-pub-title\"><b>Product</b></span>&nbsp;\n            <RepoXvialButton isEditable={isReviewer} isLogin={isLogin} allowRequest elementId={element.id} data={xvial} saveCallback={updateRepoXvial} xvialCom={xvialCom} />\n            <RepoPublicComment isReviewer={isReviewer} id={element.id} type=\"Sample\" title={`Product CRS-${crsId}, ${element.showed_name}`} userInfo={userInfo} pageType=\"reactions\" pageId={reactionId} />&nbsp;\n            <RepoUserComment isLogin={isLogin} id={element.id} type=\"Sample\" title={`Product CRS-${crsId}, ${element.showed_name}`} pageType=\"reactions\" pageId={reactionId} isPublished={isPublic} />\n            <br /><br />\n          </span>\n          {PublicLabels(element.labels)}\n          <div style={hideInfo(molecule)}>\n            {nameOrFormula}\n            {iupacUserDefined}\n            <h6><b>Canonical SMILES: </b> <ClipboardCopyLink text={molecule.cano_smiles} /></h6>\n            <h6><b>InChI: </b> <ClipboardCopyLink text={molecule.inchistring} /></h6>\n            <h6><b>InChIKey: </b> <ClipboardCopyLink text={molecule.inchikey} /></h6>\n            <h6><b>Exact Mass: </b> {ExactMass(element, molecule)}</h6>\n          </div>\n          <h6><b>Sample DOI: </b>\n            {\n              isPublic ?\n              (\n                <span className=\"sub-title\" inline=\"true\">\n                  <Button bsStyle=\"link\" onClick={() => { window.location = `https://dx.doi.org/${doiLink}`; }}>\n                    {doiLink}\n                  </Button>\n                  <ClipboardCopyBtn text={`https://dx.doi.org/${doiLink}`} />\n                  <DownloadMetadataBtn type=\"sample\" id={element.id} />\n                  <DownloadJsonBtn type=\"sample\" id={element.id} />\n                </span>\n              )\n              :\n              (\n                <span className=\"sub-title\" inline=\"true\">\n                  {doiLink}&nbsp;<ClipboardCopyBtn text={`https://dx.doi.org/${doiLink}`} />\n                </span>\n              )\n            }\n          </h6>\n          <h6>\n            <b>Sample ID: </b>\n            <Button key={`reaction-jumbtn-${element.id}`} bsStyle=\"link\" onClick={() => { window.location = `/pid/${crsId}`; }}>\n              CRS-{crsId}\n            </Button><ClipboardCopyBtn text={`https://www.chemotion-repository.net/pid/${crsId}`} />\n          </h6>\n        </Col>\n      </Row>\n      <Row>\n        <Col sm={12} md={12} lg={12}>\n          <h5><b>Reference{references.length > 1 ? 's' : null} in the Literature: </b></h5>\n          <ul style={{ listStyle: 'none' }}>{references}</ul>\n          <RepoSegment segments={element.segments} isPublic={isPublic} />\n        </Col>\n      </Row>\n      {\n        (!isPublic || showPhysicalProps) && (\n          <Row>\n            <Col sm={12} md={12} lg={12}>\n              <h5><b>Physical Properties:</b></h5>\n              <div>Melting point: {meltingPoint}</div>\n              <div>Boiling point: {boilingPoint}</div>\n            </Col>\n          </Row>\n        )\n      }\n      <br />\n      <NMRiumDisplayer\n        sample={new Sample(element)}\n        handleSampleChanged={() => {}}\n        handleSubmit={() => {}}\n        readOnly\n      />\n      <ViewSpectra\n        sample={new Sample(element)}\n        handleSampleChanged={() => {}}\n        handleSubmit={() => {}}\n        isPublic\n      />\n    </div>\n  );\n};\n\nconst ToggleIndicator = ({ onClick, name, indicatorStyle }) => (\n  <span\n    role=\"presentation\"\n    className=\"label label-default\"\n    style={{\n      backgroundColor: '#777777',\n      color: 'white',\n      fontSize: 'smaller',\n      fontWeight: 'bold',\n      cursor: 'pointer',\n      borderRadius: 'unset'\n    }}\n    onClick={onClick}\n  >\n    {name} &nbsp;<i className={`fa fa-caret-${indicatorStyle}`} aria-hidden=\"true\" />\n  </span>\n);\n\nToggleIndicator.propTypes = {\n  indicatorStyle: PropTypes.string,\n  name: PropTypes.string,\n  onClick: PropTypes.func.isRequired,\n};\n\nToggleIndicator.defaultProps = {\n  indicatorStyle: '',\n  name: '',\n};\n\nconst ReactionRinChiKey = ({\n  reaction, toggle, show, bodyAttrs\n}) => {\n  const showIndicatorRinchi = (show) ? 'down' : 'right';\n  return (\n    <span>\n      <ToggleIndicator onClick={toggle} name=\"RInChiKey Table\" indicatorStyle={showIndicatorRinchi} />\n      <Panel style={{ border: 'none' }} id=\"collapsible-panel-rinchis\" expanded={show} defaultExpanded={show} onToggle={() => { }}>\n        <Panel.Collapse>\n          <Panel.Body {...bodyAttrs}>\n            <Row style={{ paddingBottom: '8px' }}>\n              <Col sm={2} md={2} lg={2}><b>RInChI</b></Col>\n              <Col sm={10} md={10} lg={10}><ClipboardCopyLink text={replace(reaction.rinchi_string, 'RInChI=', '')} /></Col>\n            </Row>\n            <Row style={{ paddingBottom: '8px' }}>\n              <Col sm={2} md={2} lg={2}><b>Long-RInChIKey</b></Col>\n              <Col sm={10} md={10} lg={10}><ClipboardCopyLink text={replace(reaction.rinchi_long_key, 'Long-RInChIKey=', '')} /></Col>\n            </Row>\n            <Row style={{ paddingBottom: '8px' }}>\n              <Col sm={2} md={2} lg={2}><b>Short-RInChIKey</b></Col>\n              <Col sm={10} md={10} lg={10}><ClipboardCopyLink text={replace(reaction.rinchi_short_key, 'Short-RInChIKey=', '')} /></Col>\n            </Row>\n            <Row style={{ paddingBottom: '8px' }}>\n              <Col sm={2} md={2} lg={2}><b>Web-RInChIKey</b></Col>\n              <Col sm={10} md={10} lg={10}><ClipboardCopyLink text={replace(reaction.rinchi_web_key, 'Web-RInChIKey=', '')} /></Col>\n            </Row>\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    </span>\n  );\n};\n\nconst InputFieldYield = (props) => {\n  return (\n    <FormGroup>\n      <InputGroup>\n        <FormControl\n          type=\"text\"\n          bsClass=\"bs-form--compact form-control\"\n          bsSize=\"small\"\n          value={props.value || 0}\n          placeholder=\"Input Yield...\"\n          onChange={event => props.onInputChange(props.product, event)}\n        />\n        <InputGroup.Addon>%</InputGroup.Addon>\n      </InputGroup>\n    </FormGroup>\n  );\n};\n\nconst InputFieldDuration = props =>\n  (\n    <InputButtonField\n      label=\"Duration\"\n      value={props.durationValue || ''}\n      field=\"duration\"\n      btnValue={props.durationUnit || ''}\n      btnField=\"durationUnit\"\n      onInputChange={props.onInputChange}\n      onBtnClick={props.onUnitChange}\n      btnTip=\"switch duration unit\"\n    />\n  );\n\nconst InputFieldTemperture = props =>\n  (\n    <InputButtonField\n      label=\"Temperature\"\n      value={props.temperatureDisplay || ''}\n      field=\"temperature\"\n      btnValue={props.temperatureUnit || ''}\n      btnField=\"temperatureUnit\"\n      onInputChange={props.onInputChange}\n      onBtnClick={props.onUnitChange}\n      btnTip=\"switch temperature unit\"\n    />\n  );\n\nconst ReactionTableEdit = ({\n  reaction, bodyAttrs, isPublic = true,\n  onInputChange\n}) => {\n  let schemes = [];\n  let sumSolvents = 0.0;\n\n  if (isPublic) {\n    schemes = reaction.schemes;\n  } else {\n    reaction.starting_materials.map((s) => {\n      const ns = new Sample(s)\n      ns.mat_group = 'starting_materials';\n      schemes.push(ns);\n    });\n    reaction.reactants.map((s) => {\n      const ns = new Sample(s)\n      ns.mat_group = 'reactants';\n      schemes.push(ns);\n    });\n    reaction.products.map((s) => {\n      const ns = new Sample(s)\n      ns.mat_group = 'products';\n      schemes.push(ns);\n    });\n    reaction.solvents.map((s) => {\n      const ns = new Sample(s)\n      sumSolvents += ns.amount_l;\n      ns.mat_group = 'solvents';\n      schemes.push(ns);\n    });\n  }\n\n  const materialCalc = (target, multi, precision) => (target ? (target * multi).toFixed(precision) : '0');\n  const equivYield = (s, sumSolvents = 1.0, isPublic = true) => {\n    let val = 0;\n    switch (s.mat_group) {\n      case 'products':\n        val = materialCalc(s.equivalent * 100, 1, 0);\n        break;\n      default:\n        return <div />;\n    }\n    return (\n      <Form inline>\n        <InputFieldYield\n          value={val}\n          product={s}\n          onInputChange={onInputChange}\n        />\n      </Form>\n    );\n  };\n\n  const rows = (samples) => {\n    let currentType = '';\n\n    return (\n      typeof samples !== 'undefined'\n        ? samples.map((sample, i) => {\n          const matType = sample.mat_group && sample.mat_group[0].toUpperCase() + sample.mat_group.replace('_', ' ').slice(1);\n          let label = isPublic ? sample.iupac_name : sample.molecule_iupac_name;\n          if (sample.mat_group === 'solvents') label = sample.external_label;\n          let title = null;\n          if (currentType !== sample.mat_group) {\n            currentType = sample.mat_group;\n            title = (<tr><td colSpan=\"7\"><b>{matType}</b></td></tr>);\n          }\n          return (\n            <tbody key={i}>\n              {title}\n              <tr>\n                <td style={{ width: '26%' }}>{label}</td>\n                <td style={{ width: '12%' }}>{isPublic ? sample.sum_formular : sample.molecule.sum_formular}</td>\n                <td style={{ width: '14%', textAlign: 'center' }}>&nbsp;</td>\n                <td style={{ width: '12%', textAlign: 'center' }}>&nbsp;</td>\n                <td style={{ width: '12%', textAlign: 'center' }}>&nbsp;</td>\n                <td style={{ width: '12%', textAlign: 'center' }}>&nbsp;</td>\n                <td style={{ width: '12%', textAlign: 'center' }}>{equivYield(sample, sumSolvents, isPublic)}</td>\n              </tr>\n            </tbody>\n          );\n        })\n        : null\n    )\n  };\n\n  const table = dataRows => (\n    <Table responsive>\n      <thead>\n        <tr>\n          <th>IUPAC</th>\n          <th>Formula</th>\n          <th style={{ textAlign: 'center' }}>Density/Molarity</th>\n          <th style={{ textAlign: 'center' }}>Amount(g)</th>\n          <th style={{ textAlign: 'center' }}>Volume(ml)</th>\n          <th style={{ textAlign: 'center' }}>Amount(mmol)</th>\n          <th style={{ textAlign: 'center' }}>Equiv/Yield</th>\n        </tr>\n      </thead>\n      {dataRows}\n    </Table>\n  );\n\n  return (\n    <span>\n      <Label>Reaction Table</Label>\n      <Panel style={{ border: 'none' }} id=\"collapsible-panel-scheme\" defaultExpanded onToggle={() => { }}>\n        <Panel.Collapse>\n          <Panel.Body {...bodyAttrs} >\n            <div>\n              {table(rows(schemes))}\n            </div>\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    </span>\n  );\n};\n\nconst ReactionPropertiesEdit = ({\n  reaction, bodyAttrs,\n  onInputChange, onUnitChange\n}) =>\n  (\n    <span>\n      <Label>Properties</Label>\n      <Panel style={{ border: 'none' }} id=\"collapsible-panel-properties\" defaultExpanded onToggle={() => { }}>\n        <Panel.Collapse>\n          <Panel.Body {...bodyAttrs}>\n            <Row >\n              <Col sm={4} md={4} lg={4}>\n                <b>Status</b><div>{reaction.status}</div>\n              </Col>\n              <Col sm={4} md={4} lg={4}>\n                <InputFieldTemperture\n                  temperatureDisplay={reaction.temperature_display}\n                  temperatureUnit={reaction.temperature && reaction.temperature.valueUnit}\n                  onInputChange={onInputChange}\n                  onUnitChange={onUnitChange}\n                />\n              </Col>\n              <Col sm={4} md={4} lg={4}>\n                <InputFieldDuration\n                  durationValue={(reaction.durationDisplay && reaction.durationDisplay.dispValue) || ''}\n                  durationUnit={reaction.durationUnit}\n                  onInputChange={onInputChange}\n                  onUnitChange={onUnitChange}\n                />\n              </Col>\n            </Row>\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    </span>\n  );\n\nconst ReactionSchemeOnlyInfo = ({\n  reaction, isPublic = true, schemeDesc,\n  onYieldChange, onPropertiesChange, onUnitChange\n}) => {\n  const svgPath = `/images/reactions/${reaction.reaction_svg_file}`;\n\n  const bodyAttrs = {\n    style: {\n      fontSize: '90%',\n      paddingBottom: 'unset'\n    }\n  };\n\n  return (\n    <Panel style={{ marginBottom: '4px' }}>\n      <Panel.Body style={{ paddingBottom: '1px' }}>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <SVG key={svgPath} src={svgPath} className=\"reaction-details\" />\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <ReactionTableEdit\n              reaction={reaction}\n              bodyAttrs={bodyAttrs}\n              isPublic={isPublic}\n              onInputChange={onYieldChange}\n            />\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <Checkbox\n              checked={schemeDesc}\n              onChange={() => { onPropertiesChange('schemeDesc'); }}\n            >\n              <span>add the description field?</span>\n            </Checkbox>\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <ReactionPropertiesEdit\n              reaction={reaction}\n              bodyAttrs={bodyAttrs}\n              onInputChange={onPropertiesChange}\n              onUnitChange={onUnitChange}\n            />\n          </Col>\n        </Row>\n      </Panel.Body>\n    </Panel>\n  );\n};\n\nconst ReactionInfo = ({ reaction, toggleScheme, showScheme, isPublic = true,\n  toggleRinchi, showRinchi,\n  toggleProp, showProp,\n  toggleTlc, showTlc,\n  schemeOnly = false, onToggle = () => {}\n }) => {\n  const svgPath = `/images/reactions/${reaction.reaction_svg_file}`;\n  const content = reaction.description;\n  const additionInfo = reaction.observation;\n\n  const contentlength = (content && content.ops && content.ops.length > 0 && content.ops[0].insert) ? content.ops[0].insert.trim().length : 0;\n  const additionlength = (additionInfo && additionInfo.ops && additionInfo.ops.length > 0 && additionInfo.ops[0].insert) ? additionInfo.ops[0].insert.trim().length : 0;\n\n  const descQV = contentlength > 0 ?\n  (<span className=\"expand-p\"><b>Description:</b><Quill2Viewer value={content}  /></span>) : null;\n  const addQV = additionlength > 0 ?\n  (<span className=\"expand-p\"><b>Additional information for publication and purification details:</b> <Quill2Viewer value={additionInfo}  /></span>) : null;\n\n\n  const bodyAttrs = {\n    style: {\n      fontSize: '90%',\n      paddingBottom: 'unset'\n    }\n  };\n\n  if (schemeOnly) {\n    return (\n      <RepoReactionSchemeInfo\n        reaction={reaction}\n        svgPath={svgPath}\n        showScheme={showScheme}\n        showRinchi={showRinchi}\n        showProp={showProp}\n        bodyAttrs={bodyAttrs}\n        onToggle={onToggle}\n      />\n    );\n  }\n\n  return (\n    <Panel style={{ marginBottom: '4px' }}>\n      <Panel.Body style={{ paddingBottom: '1px' }}>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <SVG key={svgPath} src={svgPath} className=\"reaction-details\" />\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <ReactionTable\n              reaction={reaction}\n              toggle={toggleScheme}\n              show={showScheme}\n              isPublic={isPublic}\n              isReview={false}\n            />\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <div className=\"desc small-p\">\n              {descQV}\n            </div>\n            <div className=\"desc small-p\">\n              {addQV}\n            </div>\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <ReactionRinChiKey\n              reaction={reaction}\n              toggle={toggleRinchi}\n              show={showRinchi}\n              bodyAttrs={bodyAttrs}\n            />\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <PublicReactionProperties\n              reaction={reaction}\n              toggle={toggleProp}\n              show={showProp}\n              isPublished={false}\n            />\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <PublicReactionTlc\n              reaction={reaction}\n              toggle={toggleTlc}\n              show={showTlc}\n              isPublished={false}\n            />\n          </Col>\n        </Row>\n      </Panel.Body>\n    </Panel>\n  );\n};\n\nclass RenderPublishAnalysesPanel extends Component {\n  header() {\n    const {\n      analysis, isPublic, userInfo, isLogin, isReviewer, pageId, type, pageType, element\n    } = this.props;\n    const content = analysis.extended_metadata['content'];\n    const previewImg = previewContainerImage(analysis);\n    const kind = (analysis.extended_metadata['kind'] || '').split('|').pop().trim();\n\n    const doiLink = (isPublic === false) ? (\n      <div className=\"sub-title\" inline=\"true\">\n        <b>Analysis DOI: </b>\n        {analysis.dataset_doi}&nbsp;<ClipboardCopyBtn text={`https://dx.doi.org/${analysis.dataset_doi}`} />\n      </div>\n    ) : (\n      <div className=\"sub-title\" inline=\"true\">\n        <b>Analysis DOI: </b>\n        <Button bsStyle=\"link\" onClick={() => { window.location = `https://dx.doi.org/${analysis.dataset_doi}`; }}>\n          {analysis.dataset_doi}\n        </Button>\n        <ClipboardCopyBtn text={`https://dx.doi.org/${analysis.dataset_doi}`} />\n        <DownloadMetadataBtn type=\"container\" id={analysis.id} />\n        <DownloadJsonBtn type=\"container\" id={analysis.id} />\n      </div>\n    );\n\n    const insText = instrumentText(analysis);\n    const crdLink = (isPublic === false) ? (\n      <div className=\"sub-title\" inline=\"true\">\n        <b>Analysis ID: </b>\n        <Button bsStyle=\"link\" bsSize=\"small\" onClick={() => { window.location = `/pid/${analysis.pub_id}`; }}>\n          CRD-{analysis.pub_id}\n        </Button>\n        <ClipboardCopyBtn text={`https://www.chemotion-repository.net/pid/${analysis.pub_id}`} />\n        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{insText}\n\n      </div >\n    ) : (\n      <div className=\"sub-title\" inline=\"true\">\n        <b>Analysis ID: </b>\n        <Button bsStyle=\"link\" bsSize=\"small\" onClick={() => { window.location = `/pid/${analysis.pub_id}`; }}>\n          CRD-{analysis.pub_id}\n        </Button>\n        <ClipboardCopyBtn text={`https://www.chemotion-repository.net/pid/${analysis.pub_id}`} />\n      </div >\n    );\n\n    return (\n      <div className=\"repo-analysis-header\">\n        <RepoPreviewImage\n          key={`preview-${analysis.id}`}\n          element={element}\n          analysis={analysis}\n          isLogin={isLogin}\n          isPublic={isPublic}\n          previewImg={previewImg}\n          title={kind}\n        />\n        <div className=\"abstract\">\n          <div className=\"lower-text\">\n            <div className=\"sub-title\">\n              <b>{kind}</b>&nbsp;<MolViewerListBtn el={element} container={analysis} isPublic={isPublic} disabled={false} />\n              <RepoPublicComment isReviewer={isReviewer} id={analysis.id} type={type} pageId={pageId} pageType={pageType} userInfo={userInfo} title={kind} />&nbsp;\n              <RepoUserComment isLogin={isLogin} id={analysis.id} type={type} pageId={pageId} pageType={pageType} isPublished={isPublic} />\n            </div>\n            {doiLink}\n            {crdLink}\n          </div>\n          <div className=\"desc small-p expand-p\">\n            <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"_tip_dataset_quill_viewer\">copy to clipboard</Tooltip>}>\n              <div className=\"repo-quill-viewer\" tabIndex={0} role=\"button\" onClick={() => { navigator.clipboard.writeText(contentToText(content)); }}>\n                <Quill2Viewer value={content} />\n              </div>\n            </OverlayTrigger>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    return (\n      <div style={{ display: 'flex', flexDirection: 'column' }}>\n        {this.header()}\n        <div>\n          <b>Datasets</b>\n          <RepoContainerDatasets\n            container={this.props.analysis}\n            isPublic={this.props.isPublic}\n          />\n        </div>\n      </div>\n    );\n  }\n}\n\nclass RenderPublishAnalyses extends Component {\n  constructor(props) {\n    super(props);\n  }\n\n  header() {\n    const { analysis, element, isPublic } = this.props;\n    const content = analysis.extended_metadata['content'];\n    const previewImg = previewContainerImage(analysis);\n\n    const idyLogin = typeof element.isLogin === 'undefined' ? true : element.isLogin;\n\n    const kind = (analysis.extended_metadata['kind'] || '').split('|').pop().trim();\n\n    let hasPop = true;\n    let fetchNeeded = false;\n    let fetchId = 0;\n    let fetchFilename = '';\n    if (previewImg.startsWith('data:image')) {\n      fetchNeeded = true;\n      fetchId = analysis.preview_img.id;\n      fetchFilename = analysis.preview_img.filename;\n    } else {\n      hasPop = false;\n    }\n\n    return (\n      <div\n        className=\"repo-analysis-header\"\n      >\n        <RepoPreviewImage\n          key={`preview-${analysis.id}`}\n          element={element}\n          analysis={analysis}\n          isLogin={idyLogin}\n          isPublic={isPublic}\n          previewImg={previewImg}\n          title={kind}\n        />\n        <div className=\"abstract\">\n          <div className=\"lower-text\">\n            <div className=\"sub-title\" inline=\"true\">\n              <b>Analysis DOI: </b>\n              <Button bsStyle=\"link\" onClick={() => { window.location = `https://dx.doi.org/${analysis.dataset_doi}`; }}>\n                {analysis.dataset_doi}\n              </Button>\n              <ClipboardCopyBtn text={`https://dx.doi.org/${analysis.dataset_doi}`} />\n              <DownloadMetadataBtn type=\"container\" id={analysis.id} />\n              <DownloadJsonBtn type=\"container\" id={analysis.id} />\n            </div>\n            <div className=\"sub-title\" inline=\"true\">\n              <b>Analysis ID: </b>\n              <Button bsStyle=\"link\" onClick={() => { window.location = `/pid/${analysis.pub_id}`; }}>\n                CRD-{ analysis.pub_id }\n              </Button>\n              <ClipboardCopyBtn text={`https://www.chemotion-repository.net/pid/${analysis.pub_id}`} />\n            </div>\n            <div className=\"desc small-p expand-p\">\n              <b>Content: </b> &nbsp;&nbsp;\n              <ClipboardCopyLink text={contentToText(content)}>\n              <Quill2Viewer value={content}  />\n            </ClipboardCopyLink>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    const { analysis, expanded, elementType, publication } = this.props;\n    const kind = (analysis.extended_metadata['kind'] || '').split('|').pop().trim();\n    const AffiliationMap = (affiliationIds) => {\n      const aId = affiliationIds.length > 0 ? ([].concat.apply(...affiliationIds)) : [];\n      const affiliationMap = {};\n      let aCount = 0;\n      aId.map((e) => {\n        if (!affiliationMap[e]) {\n          aCount += 1;\n          affiliationMap[e] = aCount;\n        }\n      });\n      return affiliationMap;\n    };\n    const affiliationMap = AffiliationMap(publication.affiliation_ids || []);\n    return (\n      <Panel key={`analysis-${analysis.id}`} expanded={expanded} className=\"panel-analyses-public\" onToggle={() => { }}>\n        <Panel.Heading style={{ border: 'unset' }}>\n          <h4><i className=\"fa fa-area-chart\" aria-hidden=\"true\" style={{ fontSize: '1.5em' }} /><b> Published on </b> <i>{getFormattedISODate(publication.published_at)}</i>\n            <LicenseIcon\n              license={this.props.license}\n              hasCoAuthors={(this.props.publication.author_ids.length > 1)}\n            />\n          </h4>\n          <p>&nbsp;</p>\n          <b>{kind}</b>&nbsp;\n          <div style={{ textAlign: 'right', display: 'inline-block', float: 'right' }}>\n            <small><b>{ElementIcon(elementType)}</b></small>\n          </div>\n          <h5>\n            <b>Author{this.props.publication.author_ids && (this.props.publication.author_ids.length > 1) ? 's' : ''}: </b>\n            <AuthorList\n              creators={this.props.publication.creators}\n              affiliationMap={affiliationMap}\n            />\n          </h5>\n          <AffiliationList\n            affiliations={this.props.publication.affiliations}\n            affiliationMap={affiliationMap}\n          />\n        </Panel.Heading>\n        <Panel.Collapse>\n          <Panel.Body style={{ backgroundColor: '#f5f5f5' }}>\n            {this.header()}\n            <Col md={12}>\n              <b>Datasets</b>\n              <RepoContainerDatasets\n                container={this.props.analysis}\n                isPublic={this.props.isPublic}\n              />\n            </Col>\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    );\n  }\n}\n\nRenderPublishAnalyses.propTypes = {\n  analysis: PropTypes.object.isRequired,\n  expanded: PropTypes.bool.isRequired,\n  elementType: PropTypes.string.isRequired,\n  license: PropTypes.string.isRequired,\n  publication: PropTypes.shape({\n    author_ids: PropTypes.arrayOf(PropTypes.number),\n    creators: PropTypes.arrayOf(PropTypes.object),\n    affiliation_ids: PropTypes.arrayOf(PropTypes.array),\n    affiliations: PropTypes.object,\n    published_at: PropTypes.string,\n  }).isRequired,\n  isPublic: PropTypes.bool.isRequired\n};\n\nclass PublishAnalysesTag extends Component {\n  constructor(props) {\n    super(props);\n    const { reaction, analysis, analysesType, product } = props;\n    this.state = {\n      reaction,\n      analysis,\n      analysesType,\n      product\n    };\n    this.handleCheck = this.handleCheck.bind(this);\n  }\n\n  handleCheck(e, elementType) {\n    if (e.extended_metadata.publish && (e.extended_metadata.publish === true || e.extended_metadata.publish === 'true')) {\n      e.extended_metadata.publish = false;\n    } else {\n      e.extended_metadata.publish = true;\n    }\n    this.props.handleAnalysesChecked(e, elementType);\n  }\n\n  generateTitle() {\n    const {\n      reaction, analysis, analysesType, product\n    } = this.state;\n    const kind = (analysis.extended_metadata.kind || '').split('|').pop().trim();\n    const { content } = analysis.extended_metadata;\n    const status = analysis.extended_metadata.status || '';\n    const previewImg = previewContainerImage(analysis);\n    const typeMissing = !analysis.extended_metadata.kind || ((analysis.extended_metadata.kind || '').split('|').length < 2);\n\n    let statusMissing = false;\n    let nmrMissing = false;\n    let datasetMissing = false;\n    if (analysesType === 'Product') {\n      statusMissing = (analysis.extended_metadata.status || '') !== 'Confirmed';\n      nmrMissing = !isNmrPass(analysis, product);\n      datasetMissing = !isDatasetPass(analysis);\n    }\n    const constructBtnTip = () => {\n      const tip = [];\n      if (typeMissing || statusMissing || nmrMissing || datasetMissing) {\n        if (typeMissing) tip.push('Type is invalid.');\n        if (statusMissing) tip.push('Status must be Confirmed.');\n        if (nmrMissing) tip.push('Content is invalid, NMR Check fails.');\n        if (datasetMissing) {\n          tip.push('Dataset is incomplete. Please check that: ');\n          tip.push('1. for NMR, Mass, or IR analyses, at least one dataset has been attached with an image and a jcamp files.');\n          tip.push('2. the instrument field is not empty.');\n        }\n        return tip.join('\\r\\n');\n      }\n      return 'publish this analysis';\n    };\n    const btnTip = constructBtnTip();\n\n    let statusChk = false;\n    let statusMsg = '';\n    let typeChk = false;\n    if (analysesType === 'Product') {\n      statusChk = (status !== 'Confirmed' || nmrMissing);\n      statusMsg = nmrMsg(product, analysis);\n      typeChk = (kind === '');\n    }\n\n    if (!analysis.extended_metadata.kind) {\n      analysis.extended_metadata.publish = false;\n    }\n    const isPublish = (analysis.extended_metadata.publish && (analysis.extended_metadata.publish === true || analysis.extended_metadata.publish === 'true')\n      && !statusMissing && !nmrMissing && !datasetMissing) || false;\n    let analysesIcon = '';\n    switch (analysesType) {\n      case 'Reaction':\n        analysesIcon = <i className=\"icon-reaction\" />;\n        break;\n      case 'Product':\n        analysesIcon = <i className=\"icon-sample\" />;\n        break;\n      default:\n        analysesIcon = '';\n    }\n\n    return (\n      <div\n        className=\"analysis-header order\"\n      >\n        <div className=\"preview\">\n          <img src={previewImg} alt=\"preview\" />\n        </div>\n        <div className=\"abstract\">\n          <div className=\"upper-btn\">\n            <div\n              className=\"button-right\"\n            >\n              &nbsp;{analysesIcon}\n            </div>\n            <PrintCodeButton element={reaction} analyses={[analysis]} ident={analysis.id} />\n            <span\n              className=\"button-right add-to-report\"\n              onClick={stopBubble}\n            >\n              <OverlayTrigger\n                placement=\"left\"\n                overlay={<Tooltip id=\"checkAnalysis\" className=\"publish_tooltip\">{btnTip}</Tooltip>}\n              >\n                <div>\n                  <Checkbox\n                    onChange={() => { this.handleCheck(analysis, analysesType); }}\n                    disabled={typeMissing || statusMissing || nmrMissing || datasetMissing}\n                    defaultChecked={isPublish}\n                  >\n                    {\n                      (typeMissing || statusMissing || nmrMissing || datasetMissing) ?\n                        <span style={{ color: 'red' }}>Add to publication</span>\n                      :\n                        <span>Add to publication</span>\n                    }\n                  </Checkbox>\n                </div>\n              </OverlayTrigger>\n            </span>\n          </div>\n          <div className=\"lower-text\">\n            <div className=\"main-title\">\n              {analysis.name}\n            </div>\n            {\n              typeChk ?\n                <div className=\"sub-title\" style={{ color: 'red' }}>Type: {kind}</div>\n                :\n                <div className=\"sub-title\">Type: {kind}</div>\n            }\n            {\n              statusChk ?\n                <div className=\"sub-title\"><span style={{ color: 'red' }}>Status:</span> {status} {statusMsg}</div>\n                :\n                <div className=\"sub-title\"><span>Status:</span> {status} {statusMsg}</div>\n            }\n            <div className=\"desc sub-title expand-p\">\n              <span style={{ float: 'left', marginRight: '5px' }}>\n                Content:\n              </span>\n              <Quill2Viewer value={content} />\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    return (\n      <Panel key={`analysis-${this.props.analysis.id}`} eventKey={this.props.analysis.id}>\n        <Panel.Heading>\n          <Panel.Title toggle>\n            {this.generateTitle()}\n          </Panel.Title>\n        </Panel.Heading>\n        <Panel.Body collapsible>\n          <ContainerComponent readOnly container={this.props.analysis} />\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nPublishAnalysesTag.propTypes = {\n  reaction: PropTypes.instanceOf(Reaction).isRequired,\n  analysis: PropTypes.object.isRequired,\n  analysesType: PropTypes.string,\n  handleAnalysesChecked: PropTypes.func.isRequired,\n  product: PropTypes.object\n};\nPublishAnalysesTag.defaultProps = {\n  analysesType: '',\n  product: null\n};\n\nRenderPublishAnalysesPanel.propTypes = {\n  analysis: PropTypes.object.isRequired,\n  type: PropTypes.string.isRequired,\n  userInfo: PropTypes.string,\n  isPublic: PropTypes.bool,\n  isLogin: PropTypes.bool,\n  isReviewer: PropTypes.bool,\n  pageId: PropTypes.number,\n  pageType: PropTypes.string\n};\n\nRenderPublishAnalysesPanel.defaultProps = {\n  userInfo: '',\n  isPublic: true,\n  isLogin: false,\n  isReviewer: false,\n  pageId: null,\n  pageType: 'reactions'\n};\n\nReactionTable.propTypes = {\n  reaction: PropTypes.any.isRequired,\n  toggle: PropTypes.func,\n  show: PropTypes.bool,\n  bodyAttrs: PropTypes.object,\n  isPublic: PropTypes.bool.isRequired\n};\n\nReactionTable.defaultProps = {\n  isPublic: true,\n  showScheme: false\n};\n\nReactionRinChiKey.propTypes = {\n  reaction: PropTypes.any.isRequired,\n  toggle: PropTypes.func,\n  show: PropTypes.bool,\n  bodyAttrs: PropTypes.object\n};\n\nconst DatasetDetail = ({ isPublished, element }) => {\n  const { molecule } = element;\n  molecule.tag = {\n    taggable_data: { pubchem_cid: molecule.pubchem_cid }\n  };\n\n  const moleculeView = molecule.inchikey === null ? (<span />) : (<MoleculeInfo molecule={molecule} sample_svg_file={element.sample_svg_file} />);\n  const elementView = element.element?.type === 'reaction' ? new Reaction(element.element) : new Sample(element.element);\n  const datasetView = !element ? (\n    <span>There is no published dataset</span>\n  ) : (\n    <RenderPublishAnalyses\n      key={`${element.id}-${element.updated_at}`}\n      analysis={element.dataset}\n      element={elementView}\n      expanded\n      elementType=\"Sample\"\n      license={element.license}\n      publication={element.publication}\n      isPublic={isPublished}\n    />\n  );\n  return (\n    <Grid>\n      {moleculeView}\n      <br /><br />\n      <Row>\n        <Col sm={12} md={12} lg={12}>\n          {datasetView}\n        </Col>\n      </Row>\n      <NMRiumDisplayer\n        sample={elementView}\n        handleSampleChanged={() => {}}\n        handleSubmit={() => {}}\n        readOnly\n      />\n      <ViewSpectra\n        sample={elementView}\n        handleSampleChanged={() => {}}\n        handleSubmit={() => {}}\n        isPublic\n      />\n    </Grid>\n  );\n};\n\nDatasetDetail.propTypes = {\n  element: PropTypes.object.isRequired, isPublished: PropTypes.bool.isRequired\n};\n\nconst ClosePanel = ({ element }) => (\n  <div>\n    <OverlayTrigger\n      placement=\"bottom\"\n      overlay={<Tooltip id=\"closeReaction\">Close</Tooltip>}\n    >\n      <Button\n        bsSize=\"xsmall\"\n        className=\"button-right\"\n        onClick={() => PublicActions.close(element, true)}\n      >\n        <i className=\"fa fa-times\" />\n      </Button>\n    </OverlayTrigger>\n  </div>\n);\n\nClosePanel.propTypes = {\n  element: PropTypes.object.isRequired,\n};\n\nconst CommentBtn = (props) => {\n  const {\n    canComment,\n    review_info,\n    onShow,\n    field,\n    review,\n    orgInfo\n  } = props;\n\n  if (!canComment) return '';\n  return (\n    <span>\n      <RepoCommentBtn\n        field={field}\n        review={review}\n        review_info={review_info}\n        orgInfo={orgInfo}\n        onShow={() => onShow(true, field, orgInfo)}\n      />&nbsp;\n    </span>\n  );\n};\n\nCommentBtn.propTypes = {\n  canComment: PropTypes.bool.isRequired,\n  review: PropTypes.object.isRequired,\n  review_info: PropTypes.object,\n  onShow: PropTypes.func.isRequired,\n  field: PropTypes.string.isRequired,\n  orgInfo: PropTypes.string.isRequired\n};\n\nCommentBtn.defaultProps = {\n  review_info: {}\n};\n\n\nconst Doi = (props) => {\n  const {\n    type, id, doi, isPublished\n  } = props;\n  let data = '';\n  const title = `${type} DOI:`.replace(/(^\\w)/g, m => m.toUpperCase());\n  if (isPublished) {\n    data = (\n      <span>\n        <Button key={`${type}-jumbtn-${id}`} bsStyle=\"link\" onClick={() => { window.location = `https://dx.doi.org/${doi}`; }}>\n          {doi}\n        </Button>\n        <ClipboardCopyBtn text={`https://dx.doi.org/${doi}`} />\n        <DownloadMetadataBtn type={type} id={id} />\n        <DownloadJsonBtn type={type} id={id} />\n      </span>\n    );\n  } else {\n    data = (\n      <span>\n        {doi?.full_doi}&nbsp;<ClipboardCopyBtn text={`https://dx.doi.org/${doi?.full_doi}`} />\n      </span>\n    );\n  }\n\n  return (\n    <h5>\n      <b>{title}&nbsp;</b>\n      {data}\n    </h5>\n  );\n};\n\nDoi.propTypes = {\n  type: PropTypes.string.isRequired,\n  id: PropTypes.number.isRequired,\n  doi: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.object,\n  ]).isRequired,\n  isPublished: PropTypes.bool.isRequired,\n};\n\nexport {\n  AnalysesTypeJoinLabel,\n  AffiliationList,\n  AuthorList,\n  CalcDuration,\n  ChemotionId,\n  ClipboardCopyLink,\n  ClipboardCopyBtn,\n  ClosePanel,\n  CommentBtn,\n  ContributorInfo,\n  DateFormatYMDLong,\n  DateFormatDMYTime,\n  DatasetDetail,\n  Doi,\n  DownloadDOICsv,\n  DownloadMetadataBtn,\n  DownloadJsonBtn,\n  EditorTips,\n  ElementIcon,\n  ElAspect,\n  EmbargoCom,\n  IconToMyDB,\n  ChecklistPanel,\n  isNmrPass,\n  isDatasetPass,\n  HomeFeature,\n  MoleculeInfo,\n  PublishAnalysesTag,\n  PublishTypeAs,\n  ReactionSchemeOnlyInfo,\n  ReactionInfo,\n  ReactionRinChiKey,\n  RenderAnalysisHeader,\n  RenderPublishAnalyses,\n  RenderPublishAnalysesPanel,\n  SchemeWord,\n  SidToPubChem,\n  OrcidIcon,\n  ToggleIndicator,\n  CollectionDesc,\n  zoomSvg,\n};\n","import React, { Component } from 'react';\nimport { Alert, Jumbotron, Row, Col, Form, FormGroup, FormControl, ControlLabel, Button, InputGroup } from 'react-bootstrap';\nimport Dropzone from 'react-dropzone';\nimport moment from 'moment';\nimport ArticleFetcher from 'src/repo/fetchers/ArticleFetcher';\nimport NewsPreviewModal from 'src/components/common/NewsPreviewModal';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport { ConfirmModal } from 'src/components/common/ConfirmModal';\nimport Attachment from 'src/models/Attachment';\nimport { EditorTips, DateFormatDMYTime } from 'src/repoHome/RepoCommon';\nimport { contentToText } from 'src/utilities/quillFormat';\nimport { EditorBtn, EditorBaseBtn } from 'src/libHome/RepoHowTo/EditorBtn';\nimport EditorStelle from 'src/libHome/RepoHowTo/EditorStelle';\n\nconst extractIntro = (article) => {\n  const result = article.filter(a => a.art === 'txt');\n  if (result.length < 1) {\n    return '';\n  }\n  return (contentToText(result[0].quill) || '').slice(0, 1500);\n};\n\nconst confirmText = (\n  <ControlLabel>Are you sure that you want to delete this ?</ControlLabel>\n);\n\nconst stelle = props => ({ art: props.art || '', quill: props.quill || null, pfad: props.pfad || '' });\n\nexport default class RepoHowToEditor extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      howto: PublicStore.getState().howto && PublicStore.getState().howto.key ? { ...PublicStore.getState().howto } : { title: '', content: {}, article: [] },\n      message: { type: '', content: '' },\n      showPreview: false,\n      showDeleteModal: false\n    };\n\n    this.onInputChange = this.onInputChange.bind(this);\n    this.onClickPreview = this.onClickPreview.bind(this);\n    this.onClickCurrentTime = this.onClickCurrentTime.bind(this);\n    this.onClickClose = this.onClickClose.bind(this);\n    this.onClickSave = this.onClickSave.bind(this);\n    this.onClickDelete = this.onClickDelete.bind(this);\n    this.handleDismiss = this.handleDismiss.bind(this);\n    this.onChange = this.onChange.bind(this);\n    this.onShowDeleteModal = this.onShowDeleteModal.bind(this);\n    this.onEditorBtnClick = this.onEditorBtnClick.bind(this);\n  }\n\n  componentDidMount() {\n    PublicStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    PublicStore.unlisten(this.onChange);\n  }\n\n  onEditorBtnClick(e) {\n    const { howto } = this.state;\n    howto.article.push(stelle({ art: e }));\n    this.setState(howto);\n  }\n\n  onEditorBaseBtnClick(e) {\n    switch (e) {\n      case 'save':\n        this.onClickSave();\n        break;\n      case 'delete':\n        this.onShowDeleteModal();\n        break;\n      default:\n    }\n  }\n\n  onStelleDrop(e) {\n    const { howto } = this.state;\n    const { article } = howto;\n\n    article[e.sourceTag.sid] = e.targetTag.stelle;\n    article[e.targetTag.sid] = e.sourceTag.stelle;\n\n    howto.article = article;\n    this.setState(howto);\n  }\n\n  onStelleRemove(e) {\n    const { howto } = this.state;\n    howto.article.splice(e, 1);\n    this.setState(howto);\n  }\n\n  onStelleInputChange(art, e, sid) {\n    const { howto } = this.state;\n    switch (art) {\n      case 'quill':\n        howto.article[sid].quill = e;\n        this.setState(howto);\n        break;\n      case 'pfad':\n        this.handleImage(e, sid);\n        break;\n      default:\n        break;\n    }\n  }\n\n  onChange(state) {\n    if (state.howto && state.howto.key) {\n      this.setState(prevState => ({\n        ...prevState, howto: state.howto\n      }));\n    } else {\n      this.setState(prevState => ({\n        ...prevState, howto: { title: '', content: {}, article: [] }\n      }));\n    }\n  }\n\n  onInputChange(type, event) {\n    const { howto } = this.state;\n    switch (type) {\n      case 'title':\n        howto.title = event.currentTarget.value;\n        break;\n      case 'content':\n        howto.content = event;\n        break;\n      case 'published_at':\n        howto.published_at = event.currentTarget.value.trim();\n        break;\n      case 'updated_at':\n        howto.updated_at = event.currentTarget.value.trim();\n        break;\n      default:\n        break;\n    }\n    this.setState({ howto });\n  }\n\n  onClickCurrentTime(type) {\n    const currentTime = new Date().toLocaleString('en-GB').split(', ').join(' ');\n    const wrappedEvent = { currentTarget: { value: currentTime } };\n    this.onInputChange(type, wrappedEvent);\n  }\n\n  onClickPreview() {\n    this.setState({ showPreview: true });\n  }\n\n  onClickClose() {\n    this.setState({ showPreview: false });\n  }\n\n  onClickSave() {\n    const { howto } = this.state;\n    let m = moment(howto.published_at, 'DD/MM/YYYY HH:mm:ss');\n    if (howto.published_at && howto.published_at !== '' && !m.isValid()) {\n      howto.published_at = DateFormatDMYTime(howto.published_at);\n    }\n    m = moment(howto.published_at, 'DD/MM/YYYY HH:mm:ss');\n\n    if ((typeof howto.title === 'undefined') || !howto.title || howto.title.trim() === '') {\n      this.setState({ message: { type: 'danger', content: 'Ooops! Title can not be empty!' } });\n    } else if (howto.published_at && howto.published_at !== '' && !m.isValid()) {\n      this.setState({ message: { type: 'danger', content: 'Ooops! Published On is invalid !' } });\n    } else {\n      howto.firstParagraph = extractIntro(howto.article);\n      ArticleFetcher.createOrUpdateHowTo(howto)\n        .then((result) => {\n          if (result.error) {\n            this.setState({ message: { type: 'danger', content: `Ooops! You got an error! ${result.error}` } });\n          } else {\n            this.setState({\n              howto: { title: '', content: {}, article: [] },\n              message: { type: 'success', content: 'Send to How-To successfully!' }\n            });\n          }\n        });\n    }\n  }\n\n  onShowDeleteModal() {\n    this.setState({ showDeleteModal: true });\n  }\n\n  onClickDelete(isDelete) {\n    if (isDelete) {\n      const { howto } = this.state;\n      ArticleFetcher.deleteHowTo(howto)\n        .then((result) => {\n          if (result.error) {\n            this.setState({ message: { type: 'danger', content: `Ooops! You got an error! ${result.error}` } });\n          } else {\n            this.setState({ howto: { title: '', content: {}, article: [] }, message: { type: 'success', content: 'Deleted successfully!' } });\n          }\n        });\n    }\n    this.setState({ showDeleteModal: false });\n  }\n\n  handleImage(files, sid) {\n    const { howto } = this.state;\n    const image = Attachment.fromFile(files[0]);\n    ArticleFetcher.updateEditorImage(image, 'howto')\n      .then((result) => {\n        if (result.error) {\n          this.setState({ message: { type: 'danger', content: `Ooops! You got an error! ${result.error}` } });\n        } else {\n          howto.article[sid].pfad = result.pfad_image;\n          this.setState(howto);\n        }\n      });\n  }\n\n  handleDismiss() {\n    this.setState({ message: { type: '', content: '' } });\n  }\n\n  deleteNewButton() {\n    const { howto } = this.state;\n    if (typeof (howto.key) === 'undefined' || !howto.key || howto.key === 'new') {\n      return (\n        <span />\n      );\n    }\n    return (\n      <Button bsStyle=\"danger\" onClick={() => this.onShowDeleteModal()} className=\"button-right\">\n        Delete\n      </Button>\n    );\n  }\n\n  coverImage() {\n    let imageUrl = '';\n    const { howto } = this.state;\n    if (typeof (howto) !== 'undefined' && howto &&\n      typeof (howto.cover_image) !== 'undefined' && howto.cover_image) {\n      imageUrl = `/howto/${howto.cover_image}`;\n    }\n\n    return (\n      <div>\n        <h4><b>How-To Cover</b></h4>\n        <h5>Click on the image to change the cover</h5>\n        <span style={{ width: '400px', height: '268px' }}>\n          <Dropzone\n            onDrop={files => this.handleFileDrop(files)}\n            style={{ height: '100%', width: '100%', border: '3px dashed lightgray' }}\n          >\n            {\n              imageUrl === '' ?\n                <div style={{ textAlign: 'center' }}>\n                  <i className=\"fa fa-quote-left fa-2x\" aria-hidden=\"true\" />\n                  <span style={{ fontSize: '3em', fontWeight: 'bold' }}>&nbsp;HOW TO&nbsp;</span>\n                  <i className=\"fa fa-quote-right fa-2x\" aria-hidden=\"true\" style={{ position: 'absolute' }} />\n                </div>\n              :\n                <img\n                  src={imageUrl}\n                  style={{\n                    display: 'block',\n                    maxHeight: '100%',\n                    maxWidth: '100%',\n                  }}\n                  alt=\"\"\n                />\n            }\n          </Dropzone>\n        </span>\n      </div>\n    );\n  }\n\n  handleFileDrop(files) {\n    const { howto } = this.state;\n    if (files && files.length > 0) {\n      const image = Attachment.fromFile(files[0]);\n      ArticleFetcher.updateEditorImage(image, 'howto')\n        .then((result) => {\n          if (result.error) {\n            this.setState({ message: { type: 'danger', content: `Ooops! You got an error! ${result.error}` } });\n          } else {\n            howto.cover_image = result.cover_image;\n            this.setState({ howto, message: { type: 'success', content: 'Cover image added successfully!' } });\n          }\n        });\n    }\n  }\n\n  render() {\n    const {\n      howto,\n      message,\n      showPreview,\n      showDeleteModal\n    } = this.state;\n    const renderAlert = (m) => {\n      return (\n        m.type !== '' ?\n          <Alert bsStyle={m.type} onDismiss={this.handleDismiss}>\n            <p>\n              {m.content}\n            </p>\n          </Alert>\n          :\n          <div />\n      );\n    };\n\n    const tPublished = howto.published_at == null ? '' : DateFormatDMYTime(howto.published_at);\n    const tUpdated = howto.updated_at == null ? '' : DateFormatDMYTime(howto.updated_at);\n    const stelles = howto.article.map((s, i) => {\n      return (\n        <EditorStelle\n          key={i}\n          sid={i}\n          stelle={s}\n          onDrop={e => this.onStelleDrop(e)}\n          onRemove={e => this.onStelleRemove(e)}\n          onChange={(art, e, sid) => this.onStelleInputChange(art, e, sid)}\n          editor_type=\"howto\"\n        />\n      );\n    });\n\n    return (\n      <div style={{ display: 'flex', justifyContent: 'center', backgroundColor: '#eeeeee' }}>\n        <NewsPreviewModal\n          showModal={showPreview}\n          article={howto}\n          onClick={this.onClickClose}\n        />\n        <ConfirmModal\n          showModal={showDeleteModal}\n          title=\"Are you sure ?\"\n          content={confirmText}\n          onClick={this.onClickDelete}\n        />\n        <Jumbotron style={{\n          minHeight: 'calc(85vh)', width: 'calc(96vw)', padding: '24px 60px', marginBottom: 'unset'\n        }}\n        >\n          <Row>\n            <Col lg={1} />\n            <Col lg={8} md={8}>\n              {renderAlert(message)}\n              <h2><b>How-To Editor</b></h2>\n              <p>\n                Give Chemotion readers some advice\n              </p>\n              <br />\n              <Form>\n                <FormGroup controlId=\"frmNewsTitile\">\n                  <ControlLabel>\n                    <div className=\"newseditor\">\n                      <div className=\"required\">*&nbsp;</div>\n                      <div className=\"article_title\">Title</div>\n                      <div className=\"article_content\"><i className=\"fa fa-exclamation-circle\" aria-hidden=\"true\" />&nbsp;100 characters limitation.</div>\n                      {howto.created_at ? <div className=\"required\">This howto was published on {tPublished}</div> : <div />}\n                    </div>\n                  </ControlLabel>\n                  <FormControl\n                    placeholder=\"Title\"\n                    value={howto.title || ''}\n                    onChange={event => this.onInputChange('title', event)}\n                    maxLength={100}\n                  />\n                </FormGroup>\n                <ControlLabel>\n                  <div className=\"newseditor\">\n                    <div className=\"required\">*&nbsp;</div>\n                    <div className=\"article_title\">Content</div>\n                  </div>\n                </ControlLabel>\n                <div className=\"editor-field\">\n                  {stelles}\n                  <EditorBtn onClick={e => this.onEditorBtnClick(e)} />\n                </div>\n                <EditorBaseBtn onClick={e => this.onEditorBaseBtnClick(e)} />\n              </Form>\n            </Col>\n            <Col lg={3} md={4}>\n              <div>\n                {this.coverImage()}\n                <br />\n                <FormGroup>\n                  <ControlLabel><h4><b>Published on</b></h4></ControlLabel>\n                  <InputGroup>\n                    <FormControl\n                      type=\"text\"\n                      value={tPublished}\n                      placeholder=\"DD/MM/YYYY hh:mm:ss\"\n                      onChange={event => this.onInputChange('published_at', event)}\n                    />\n                    <InputGroup.Button>\n                      <Button\n                        active\n                        style={{ padding: '6px' }}\n                        onClick={this.onClickCurrentTime.bind(this, 'published_at')}\n                      >\n                        <i className=\"fa fa-clock-o\" />\n                      </Button>\n                    </InputGroup.Button>\n                  </InputGroup>\n                  <ControlLabel><h4><b>Updated on</b></h4></ControlLabel>\n                  <InputGroup>\n                    <FormControl\n                      type=\"text\"\n                      value={tUpdated}\n                      placeholder=\"DD/MM/YYYY hh:mm:ss\"\n                      onChange={event => this.onInputChange('updated_at', event)}\n                    />\n                    <InputGroup.Button>\n                      <Button\n                        active\n                        style={{ padding: '6px' }}\n                        onClick={this.onClickCurrentTime.bind(this, 'updated_at')}\n                      >\n                        <i className=\"fa fa-clock-o\" />\n                      </Button>\n                    </InputGroup.Button>\n                  </InputGroup>\n                </FormGroup>\n                <i className=\"fa fa-lightbulb-o\" aria-hidden=\"true\" />&nbsp;Tips:<br />\n                <EditorTips />\n              </div>\n            </Col>\n          </Row>\n        </Jumbotron>\n      </div>\n    );\n  }\n}\n","import React, { Component } from 'react';\nimport { Panel, Row, Col } from 'react-bootstrap';\nimport uuid from 'uuid';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport Quill2Viewer from 'src/components/Quill2Viewer';\nimport { DateFormatYMDLong } from 'src/repoHome/RepoCommon';\n\nexport default class RepoHowToReader extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      howto: PublicStore.getState().howto || { title: '', content: {}, article: [] }\n    };\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    PublicStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    PublicStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    if (state.howto) {\n      this.setState(prevState => ({\n        ...prevState, howto: state.howto\n      }));\n    }\n  }\n\n  coverImage() {\n    let imageUrl = '';\n    const { howto } = this.state;\n    if (typeof (howto) !== 'undefined' && howto &&\n      typeof (howto.cover_image) !== 'undefined' && howto.cover_image) {\n      imageUrl = `/howto/${howto.cover_image}`;\n    } else {\n      return (\n        <div style={{ textAlign: 'center', height: 'auto' }}>\n          <i className=\"fa fa-quote-left fa-2x\" aria-hidden=\"true\" />\n          <span style={{ fontSize: '3em', fontWeight: 'bold' }}>&nbsp;HOW TO&nbsp;</span>\n          <i className=\"fa fa-quote-right fa-2x\" aria-hidden=\"true\" style={{ position: 'absolute' }} />\n        </div>\n      );\n    }\n\n    return (\n      <span>\n        <img\n          src={imageUrl}\n          style={{\n            display: 'block',\n            maxHeight: '100%',\n            maxWidth: '100%',\n          }}\n          alt=\"\"\n        />\n      </span>\n    );\n  }\n\n  render() {\n    const { howto } = this.state;\n    return (\n      <Row className=\"howto_page\">\n        <Col md={2} />\n        <Col md={8} sm={12}>\n          <Panel className=\"newsreader_panel\" style={{ border: 'unset' }}>\n            <Panel.Heading>\n              <Row>\n                <Col md={6} sm={12}>\n                  <div style={{ fontSize: '3rem', fontWeight: 'bold', wordBreak: 'break-word' }}>{howto.title}</div>\n                  <div className=\"news_author\">\n                    <i className=\"fa fa-user-circle\" aria-hidden=\"true\" />\n                    &nbsp;{howto.creator_name}\n                    <p />\n                    <i className=\"fa fa-calendar\" aria-hidden=\"true\" />&nbsp;Published on&nbsp;{DateFormatYMDLong(howto.published_at ? howto.published_at : howto.created_at)},&nbsp;\n                    updated on&nbsp;{DateFormatYMDLong(howto.updated_at ? howto.updated_at : howto.published_at)}\n                  </div>\n                </Col>\n                <Col md={6} sm={12}>\n                  {this.coverImage()}\n                </Col>\n                <Col md={12} sm={12}>\n                  <div style={{ position: 'relative', marginTop: '10px' }}>\n                    <a style={{ cursor: 'pointer' }} onClick={() => Aviator.navigate('/home/howto')}>Back to How-To</a>\n                  </div>\n                </Col>\n              </Row>\n              <div className=\"heading_separator\" style={{ borderWidth: '0.5px' }} />\n            </Panel.Heading>\n            <Panel.Body>\n              <Col lg={1} md={2}><div /></Col>\n              <Col lg={10} md={8} sm={12}>\n                <div className=\"news_quillviewer\">\n                  {\n                    howto.article ?\n                    howto.article.map((s) => {\n                      if (s.art === 'txt') {\n                        return <Quill2Viewer key={uuid.v4()} value={s.quill} />;\n                      }\n                      if (s.art === 'img') {\n                        return (\n                          <div key={uuid.v4()}>\n                            <img src={`/howto/${s.pfad}`} alt=\"\" />\n                            <br />\n                          </div>\n                        );\n                      }\n                    }) : <div />\n                  }\n                </div>\n              </Col>\n              <Col lg={1} md={2}><div /></Col>\n            </Panel.Body>\n          </Panel>\n        </Col>\n        <Col md={2} />\n      </Row>\n    );\n  }\n}\n","export default Object.freeze({\n  MOLECULE_ARCHIVE: 'moleculeArchive',\n  REACTION: 'reaction',\n  SAMPLE: 'sample',\n  SCHEME: 'scheme'\n});\n","import React, { Component } from 'react';\nimport {\n  Alert,\n  Button,\n  Col,\n  ControlLabel,\n  Form,\n  FormGroup,\n  FormControl,\n  InputGroup,\n  Jumbotron,\n  Row,\n} from 'react-bootstrap';\nimport Dropzone from 'react-dropzone';\nimport moment from 'moment';\nimport ArticleFetcher from 'src/repo/fetchers/ArticleFetcher';\nimport NewsPreviewModal from 'src/components/common/NewsPreviewModal';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport { ConfirmModal } from 'src/components/common/ConfirmModal';\nimport Attachment from 'src/models/Attachment';\nimport { EditorTips, DateFormatDMYTime } from 'src/repoHome/RepoCommon';\nimport { contentToText } from 'src/utilities/quillFormat';\nimport { EditorBtn, EditorBaseBtn } from 'src/libHome/RepoHowTo/EditorBtn';\nimport EditorStelle from 'src/libHome/RepoHowTo/EditorStelle';\n\nconst NewsroomTemplate = {\n  title: '',\n  content: {},\n  article: [],\n};\n\nconst extractIntro = (article) => {\n  const result = article.filter(a => a.art === 'txt');\n  if (result.length < 1) {\n    return '';\n  }\n  return (contentToText(result[0].quill) || '').slice(0, 1500);\n};\n\nconst confirmText = (\n  <ControlLabel>Are you sure that you want to delete this ?</ControlLabel>\n);\n\nconst stelle = props => ({ art: props.art || '', quill: props.quill || null, pfad: props.pfad || '' });\n\nexport default class RepoNewsEditor extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      news: PublicStore.getState().news && PublicStore.getState().news.key ? { ...PublicStore.getState().news } : NewsroomTemplate,\n      message: { type: '', content: '' },\n      showPreview: false,\n      showDeleteModal: false\n    };\n\n    this.onInputChange = this.onInputChange.bind(this);\n    this.onClickPreview = this.onClickPreview.bind(this);\n    this.onClickCurrentTime = this.onClickCurrentTime.bind(this);\n    this.onClickClose = this.onClickClose.bind(this);\n    this.onClickSave = this.onClickSave.bind(this);\n    this.onClickDelete = this.onClickDelete.bind(this);\n    this.handleDismiss = this.handleDismiss.bind(this);\n    this.onChange = this.onChange.bind(this);\n    this.onShowDeleteModal = this.onShowDeleteModal.bind(this);\n    this.onEditorBtnClick = this.onEditorBtnClick.bind(this);\n  }\n\n  componentDidMount() {\n    PublicStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    PublicStore.unlisten(this.onChange);\n  }\n\n  onEditorBtnClick(e) {\n    const { news } = this.state;\n    news.article.push(stelle({ art: e }));\n    this.setState(news);\n  }\n\n  onEditorBaseBtnClick(e) {\n    switch (e) {\n      case 'save':\n        this.onClickSave();\n        break;\n      case 'delete':\n        this.onShowDeleteModal();\n        break;\n      default:\n    }\n  }\n\n  onStelleDrop(e) {\n    const { news } = this.state;\n    const { article } = news;\n\n    article[e.sourceTag.sid] = e.targetTag.stelle;\n    article[e.targetTag.sid] = e.sourceTag.stelle;\n\n    news.article = article;\n    this.setState(news);\n  }\n\n  onStelleRemove(e) {\n    const { news } = this.state;\n    news.article.splice(e, 1);\n    this.setState(news);\n  }\n\n  onStelleInputChange(art, e, sid) {\n    const { news } = this.state;\n    switch (art) {\n      case 'quill':\n        news.article[sid].quill = e;\n        this.setState(news);\n        break;\n      case 'pfad':\n        this.handleImage(e, sid);\n        break;\n      default:\n        break;\n    }\n  }\n\n  onChange(state) {\n    if (state.news && state.news.key) {\n      this.setState(prevState => ({\n        ...prevState, news: state.news\n      }));\n    } else {\n      this.setState(prevState => ({\n        ...prevState, news: NewsroomTemplate\n      }));\n    }\n  }\n\n  onInputChange(type, event) {\n    const { news } = this.state;\n    switch (type) {\n      case 'title':\n        news.title = event.currentTarget.value;\n        break;\n      case 'content':\n        news.content = event;\n        break;\n      case 'published_at':\n        news.published_at = event.currentTarget.value.trim();\n        break;\n      case 'updated_at':\n        news.updated_at = event.currentTarget.value.trim();\n        break;\n      default:\n        break;\n    }\n    this.setState({ news });\n  }\n\n  onClickCurrentTime(type) {\n    const currentTime = new Date().toLocaleString('en-GB').split(', ').join(' ');\n    const wrappedEvent = { currentTarget: { value: currentTime } };\n    this.onInputChange(type, wrappedEvent);\n  }\n\n  onClickPreview() {\n    this.setState({ showPreview: true });\n  }\n\n  onClickClose() {\n    this.setState({ showPreview: false });\n  }\n\n  onClickSave() {\n    const { news } = this.state;\n    let m = moment(news.published_at, 'DD/MM/YYYY HH:mm:ss');\n    if (news.published_at && news.published_at !== '' && !m.isValid()) {\n      news.published_at = DateFormatDMYTime(news.published_at);\n    }\n    m = moment(news.published_at, 'DD/MM/YYYY HH:mm:ss');\n\n    if ((typeof news.title === 'undefined') || !news.title || news.title.trim() === '') {\n      this.setState({ message: { type: 'danger', content: 'Ooops! Title can not be empty!' } });\n    } else if (news.published_at && news.published_at !== '' && !m.isValid()) {\n      this.setState({ message: { type: 'danger', content: 'Ooops! Published On is invalid !' } });\n    } else {\n      news.firstParagraph = extractIntro(news.article);\n      ArticleFetcher.createOrUpdate(news)\n        .then((result) => {\n          if (result.error) {\n            this.setState({ message: { type: 'danger', content: `Ooops! You got an error! ${result.error}` } });\n          } else {\n            this.setState({\n              news: NewsroomTemplate,\n              message: { type: 'success', content: 'Send to Newsroom successfully!' }\n            });\n          }\n        });\n    }\n  }\n\n  onShowDeleteModal() {\n    this.setState({ showDeleteModal: true });\n  }\n\n  onClickDelete(isDelete) {\n    if (isDelete) {\n      const { news } = this.state;\n      ArticleFetcher.delete(news)\n        .then((result) => {\n          if (result.error) {\n            this.setState({ message: { type: 'danger', content: `Ooops! You got an error! ${result.error}` } });\n          } else {\n            this.setState({ news: NewsroomTemplate, message: { type: 'success', content: 'Deleted successfully!' } });\n          }\n        });\n    }\n    this.setState({ showDeleteModal: false });\n  }\n\n  handleImage(files, sid) {\n    const { news } = this.state;\n    const image = Attachment.fromFile(files[0]);\n    ArticleFetcher.updateEditorImage(image, 'newsroom')\n      .then((result) => {\n        if (result.error) {\n          this.setState({ message: { type: 'danger', content: `Ooops! You got an error! ${result.error}` } });\n        } else {\n          news.article[sid].pfad = result.pfad_image;\n          this.setState(news);\n        }\n      });\n  }\n\n  handleDismiss() {\n    this.setState({ message: { type: '', content: '' } });\n  }\n\n  deleteNewButton() {\n    const { news } = this.state;\n    if (typeof (news.key) === 'undefined' || !news.key || news.key === 'new') {\n      return (\n        <span />\n      );\n    }\n    return (\n      <Button bsStyle=\"danger\" onClick={() => this.onShowDeleteModal()} className=\"button-right\">\n        Delete\n      </Button>\n    );\n  }\n\n  coverImage() {\n    let imageUrl = '/images/repo/news_cover.png';\n    const { news } = this.state;\n    if (typeof (news) !== 'undefined' && news &&\n      typeof (news.cover_image) !== 'undefined' && news.cover_image) {\n      imageUrl = `/newsroom/${news.cover_image}`;\n    }\n\n    return (\n      <div>\n        <h4><b>News Cover</b></h4>\n        <h5>Click on the image to change the cover</h5>\n        <span style={{ width: '400px', height: '268px' }}>\n          <Dropzone\n            onDrop={files => this.handleFileDrop(files)}\n            style={{ height: '100%', width: '100%', border: '3px dashed lightgray' }}\n          >\n            <img\n              src={imageUrl}\n              style={{\n                display: 'block',\n                maxHeight: '100%',\n                maxWidth: '100%',\n              }}\n              alt=\"\"\n            />\n          </Dropzone>\n        </span>\n      </div>\n    );\n  }\n\n  handleFileDrop(files) {\n    const { news } = this.state;\n    if (files && files.length > 0) {\n      const image = Attachment.fromFile(files[0]);\n      ArticleFetcher.updateEditorImage(image, 'newsroom')\n        .then((result) => {\n          if (result.error) {\n            this.setState({ message: { type: 'danger', content: `Ooops! You got an error! ${result.error}` } });\n          } else {\n            news.cover_image = result.cover_image;\n            this.setState({ news, message: { type: 'success', content: 'Cover image added successfully!' } });\n          }\n        });\n    }\n  }\n\n  render() {\n    const {\n      news,\n      message,\n      showPreview,\n      showDeleteModal\n    } = this.state;\n    const renderAlert = (m) => {\n      return (\n        m.type !== '' ?\n          <Alert bsStyle={m.type} onDismiss={this.handleDismiss}>\n            <p>\n              {m.content}\n            </p>\n          </Alert>\n          :\n          <div />\n      );\n    };\n\n    const tPublished = news.published_at == null ? '' : DateFormatDMYTime(news.published_at);\n    const tUpdated = news.updated_at == null ? '' : DateFormatDMYTime(news.updated_at);\n\n    const stelles = news.article.map((s, i) => {\n      return (\n        <EditorStelle\n          key={i}\n          sid={i}\n          stelle={s}\n          onDrop={e => this.onStelleDrop(e)}\n          onRemove={e => this.onStelleRemove(e)}\n          onChange={(art, e, sid) => this.onStelleInputChange(art, e, sid)}\n          editor_type=\"newsroom\"\n        />\n      );\n    });\n\n    return (\n      <div style={{ display: 'flex', justifyContent: 'center', backgroundColor: '#eeeeee' }}>\n        <NewsPreviewModal\n          showModal={showPreview}\n          article={news}\n          onClick={this.onClickClose}\n        />\n        <ConfirmModal\n          showModal={showDeleteModal}\n          title=\"Are you sure ?\"\n          content={confirmText}\n          onClick={this.onClickDelete}\n        />\n        <Jumbotron style={{\n          minHeight: 'calc(85vh)', width: 'calc(96vw)', padding: '24px 60px', marginBottom: 'unset'\n        }}\n        >\n          <Row>\n            <Col lg={1} />\n            <Col lg={8} md={8}>\n              {renderAlert(message)}\n              <h2><b>Newsroom Editor</b></h2>\n              <p>\n                Chemotion NEWS\n              </p>\n              <br />\n              <Form>\n                <FormGroup controlId=\"frmNewsTitile\">\n                  <ControlLabel>\n                    <div className=\"newseditor\">\n                      <div className=\"required\">*&nbsp;</div>\n                      <div className=\"article_title\">Title</div>\n                      <div className=\"article_content\"><i className=\"fa fa-exclamation-circle\" aria-hidden=\"true\" />&nbsp;100 characters limitation.</div>\n                      {news.created_at ? <div className=\"required\">This news was published on {tPublished}</div> : <div />}\n                    </div>\n                  </ControlLabel>\n                  <FormControl\n                    placeholder=\"Title\"\n                    value={news.title || ''}\n                    onChange={event => this.onInputChange('title', event)}\n                    maxLength={100}\n                  />\n                </FormGroup>\n                <ControlLabel>\n                  <div className=\"newseditor\">\n                    <div className=\"required\">*&nbsp;</div>\n                    <div className=\"article_title\">Content</div>\n                  </div>\n                </ControlLabel>\n                <div className=\"editor-field\">\n                  {stelles}\n                  <EditorBtn onClick={e => this.onEditorBtnClick(e)} />\n                </div>\n                <EditorBaseBtn onClick={e => this.onEditorBaseBtnClick(e)} />\n              </Form>\n            </Col>\n            <Col lg={3} md={4}>\n              <div>\n                {this.coverImage()}\n                <br />\n                <FormGroup>\n                  <ControlLabel><h4><b>Published on</b></h4></ControlLabel>\n                  <InputGroup>\n                    <FormControl\n                      type=\"text\"\n                      value={tPublished}\n                      placeholder=\"DD/MM/YYYY hh:mm:ss\"\n                      onChange={event => this.onInputChange('published_at', event)}\n                    />\n                    <InputGroup.Button>\n                      <Button\n                        active\n                        style={{ padding: '6px' }}\n                        onClick={this.onClickCurrentTime.bind(this, 'published_at')}\n                      >\n                        <i className=\"fa fa-clock-o\" />\n                      </Button>\n                    </InputGroup.Button>\n                  </InputGroup>\n                  <ControlLabel><h4><b>Updated on</b></h4></ControlLabel>\n                  <InputGroup>\n                    <FormControl\n                      type=\"text\"\n                      value={tUpdated}\n                      placeholder=\"DD/MM/YYYY hh:mm:ss\"\n                      onChange={event => this.onInputChange('updated_at', event)}\n                    />\n                    <InputGroup.Button>\n                      <Button\n                        active\n                        style={{ padding: '6px' }}\n                        onClick={this.onClickCurrentTime.bind(this, 'updated_at')}\n                      >\n                        <i className=\"fa fa-clock-o\" />\n                      </Button>\n                    </InputGroup.Button>\n                  </InputGroup>\n                </FormGroup>\n                <i className=\"fa fa-lightbulb-o\" aria-hidden=\"true\" />&nbsp;Tips:<br />\n                <EditorTips />\n              </div>\n            </Col>\n          </Row>\n        </Jumbotron>\n      </div>\n    );\n  }\n}\n","import React, { Component } from 'react';\nimport { Panel, Row, Col } from 'react-bootstrap';\nimport uuid from 'uuid';\nimport PublicStore from 'src/stores/alt/repo/stores/PublicStore';\nimport Quill2Viewer from 'src/components/Quill2Viewer';\nimport { DateFormatYMDLong } from 'src/repoHome/RepoCommon';\n\nexport default class RepoNewsReader extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      news: PublicStore.getState().news || { title: '', content: {}, article: [] }\n    };\n    this.onChange = this.onChange.bind(this);\n  }\n\n  componentDidMount() {\n    PublicStore.listen(this.onChange);\n  }\n\n  componentWillUnmount() {\n    PublicStore.unlisten(this.onChange);\n  }\n\n  onChange(state) {\n    if (state.news) {\n      this.setState(prevState => ({\n        ...prevState, news: state.news\n      }));\n    }\n  }\n\n  coverImage() {\n    let imageUrl = '/images/repo/news_cover.png';\n    const { news } = this.state;\n    if (typeof (news) !== 'undefined' && news &&\n      typeof (news.cover_image) !== 'undefined' && news.cover_image) {\n      imageUrl = `/newsroom/${news.cover_image}`;\n    }\n    return (\n      <span style={{ display: 'flex', justifyContent: 'center', alignContent: 'center' }}>\n        <img\n          src={imageUrl}\n          style={{\n            display: 'block',\n            maxHeight: '100%',\n            maxWidth: '100%',\n          }}\n          alt=\"\"\n        />\n      </span>\n    );\n  }\n\n  render() {\n    const { news } = this.state;\n    return (\n      <Row style={{ maxWidth: '2000px', margin: 'auto', minHeight: '85vh' }}>\n        <Col md={12} >\n          <Col md={2} />\n          <Col md={8} sm={12}>\n            <div className=\"chemotion_news\">\n              <img alt=\"Chemotion-Repository\" src=\"/images/repo/Chemotion-V1.png\" style={{ width: '180px', height: 'auto', marginTop: '-10px' }} />\n              &nbsp;Chemotion&nbsp;News\n            </div>\n          </Col>\n          <Col md={2} />\n        </Col>\n        <Col md={12}>\n          <Row>\n            <Col md={2} />\n            <Col md={8} sm={12}>\n              <Panel className=\"newsreader_panel\" style={{ border: 'unset' }}>\n                <Panel.Heading>\n                  <Row>\n                    <Col md={6} sm={12}>\n                      <h2 style={{ fontWeight: 'bold' }}>{news.title}</h2>\n                      <div className=\"news_author\">\n                        <i className=\"fa fa-user-circle\" aria-hidden=\"true\" />\n                        &nbsp;{news.creator_name}\n                        &nbsp;&nbsp;&nbsp;<i className=\"fa fa-calendar\" aria-hidden=\"true\" />&nbsp;{DateFormatYMDLong(news.published_at ? news.published_at : news.created_at)}\n                      </div>\n                    </Col>\n                    <Col md={6} sm={12}>\n                      {this.coverImage()}\n                    </Col>\n                  </Row>\n                  <br />\n                  <div className=\"heading_separator\" />\n                </Panel.Heading>\n                <Panel.Body>\n                  <Col lg={1} md={2}><div /></Col>\n                  <Col lg={10} md={8} sm={12}>\n                    <div className=\"news_quillviewer\">\n                      {\n                        news.article ?\n                          news.article.map((s) => {\n                            if (s.art === 'txt') {\n                              return <Quill2Viewer key={uuid.v4()} value={s.quill} />;\n                            }\n                            if (s.art === 'img') {\n                              return (\n                                <div key={uuid.v4()}>\n                                  <img src={`/newsroom/${s.pfad}`} alt=\"\" />\n                                  <br />\n                                </div>\n                              );\n                            }\n                          }) : <div />\n                      }\n                    </div>\n                  </Col>\n                  <Col lg={1} md={2}><div /></Col>\n                </Panel.Body>\n              </Panel>\n            </Col>\n            <Col md={2} />\n          </Row>\n        </Col>\n      </Row>\n    );\n  }\n}\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport { Panel, Row, Col, Button, Jumbotron } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport { head, filter } from 'lodash';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport {\n  AuthorList,\n  AffiliationList,\n  CalcDuration,\n  ChemotionId,\n  ClosePanel,\n  CommentBtn,\n  ContributorInfo,\n  ClipboardCopyBtn,\n  Doi,\n  ReactionRinChiKey,\n  RenderAnalysisHeader,\n  RenderPublishAnalysesPanel,\n  IconToMyDB,\n  AnalysesTypeJoinLabel,\n  SchemeWord,\n  zoomSvg,\n} from 'src/repoHome/RepoCommon';\nimport ReactionTable from 'src/repoHome/RepoReactionTable';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\nimport DateInfo from 'src/components/chemrepo/DateInfo';\nimport LicenseIcon from 'src/components/chemrepo/LicenseIcon';\nimport PublicAnchor from 'src/components/chemrepo/PublicAnchor';\nimport PublicCommentModal from 'src/components/chemrepo/PublicCommentModal';\nimport PublicReactionTlc from 'src/components/chemrepo/PublicReactionTlc';\nimport PublicReactionProperties from 'src/components/chemrepo/PublicReactionProperties';\nimport UserCommentModal from 'src/components/chemrepo/UserCommentModal';\nimport RepoConst from 'src/components/chemrepo/common/RepoConst';\nimport Quill2Viewer from 'src/components/Quill2Viewer';\nimport {\n  Citation,\n  literatureContent,\n  RefByUserInfo,\n} from 'src/apps/mydb/elements/details/literature/LiteratureCommon';\nimport RepoReactionSchemeInfo from 'src/repoHome/RepoReactionSchemeInfo';\nimport RepoReviewButtonBar from 'src/repoHome/RepoReviewButtonBar';\nimport Sample from 'src/models/Sample';\nimport RepoSegment from 'src/repoHome/RepoSegment';\nimport { getAuthorLabel } from 'src/components/chemrepo/publication-utils';\nimport PublicLabels from 'src/components/chemrepo/PublicLabels';\nimport NMRiumDisplayer from 'src/components/nmriumWrapper/NMRiumDisplayer';\n\nexport default class RepoReactionDetails extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showScheme: true,\n      showRinchi: false,\n      showProp: true,\n      showTlc: true,\n      showSA: true,\n      showRA: {},\n      // showReviewModal: false,\n      // btnAction: '',\n      // showCommentModal: false,\n      commentField: '',\n      originInfo: '',\n    };\n\n    this.toggleScheme = this.toggleScheme.bind(this);\n    this.toggleRinchi = this.toggleRinchi.bind(this);\n    this.toggleProp = this.toggleProp.bind(this);\n    this.toggleTlc = this.toggleTlc.bind(this);\n    this.toggleSA = this.toggleSA.bind(this);\n    this.toggleRA = this.toggleRA.bind(this);\n    this.handleToggle = this.handleToggle.bind(this);\n    this.handleReviewBtn = this.handleReviewBtn.bind(this);\n    this.handleCommentBtn = this.handleCommentBtn.bind(this);\n  }\n\n  toggleScheme() {\n    const { showScheme } = this.state;\n    this.setState({ showScheme: !showScheme });\n  }\n\n  toggleRinchi() {\n    const { showRinchi } = this.state;\n    this.setState({ showRinchi: !showRinchi });\n  }\n\n  toggleProp() {\n    const { showProp } = this.state;\n    this.setState({ showProp: !showProp });\n  }\n\n  toggleTlc() {\n    const { showTlc } = this.state;\n    this.setState({ showTlc: !showTlc });\n  }\n\n  toggleSA() {\n    const { showSA } = this.state;\n    this.setState({ showSA: !showSA });\n  }\n\n  toggleRA(idx = -1) {\n    const { showRA } = this.state;\n    if (idx in showRA && showRA[idx] === false) {\n      showRA[idx] = true;\n    } else {\n      showRA[idx] = false;\n    }\n    this.setState({ showRA });\n  }\n\n  handleToggle(type) {\n    switch (type) {\n      case 'Scheme':\n        this.toggleScheme();\n        break;\n      case 'Rinchi':\n        this.toggleRinchi();\n        break;\n      case 'Prop':\n        this.toggleProp();\n        break;\n      default:\n        break;\n    }\n  }\n\n  handleReviewBtn(showReviewModal, btnAction) {\n    ReviewActions.handleReviewModal(showReviewModal, btnAction);\n  }\n  handleCommentBtn(showCommentModal, commentField, originInfo) {\n    ReviewActions.handleCommentModal(showCommentModal, 'Comment', commentField, originInfo);\n  }\n\n  updateRepoXvial() {\n    PublicActions.displayReaction(this.props.reaction.id);\n    PublicActions.refreshPubElements('Reactions');\n  }\n\n  reactionInfo(reaction) {\n    const { showScheme, showRinchi, showProp, showTlc } = this.state;\n    const {\n      canComment: propsCanComment,\n      review_info,\n      review,\n      isPublished,\n    } = this.props;\n    const { currentUser } = UserStore.getState();\n    const canComment =\n      currentUser?.type === RepoConst.U_TYPE.ANONYMOUS\n        ? false\n        : propsCanComment;\n\n    const svgPath = `/images/reactions/${reaction.reaction_svg_file}`;\n    const content = reaction.description;\n    const additionInfo = reaction.observation;\n\n    const descContent =\n      content && content.ops && content.ops.length > 0 && content.ops[0].insert\n        ? content.ops[0].insert.trim()\n        : '';\n    let descQV = (\n      <span className=\"expand-p\">\n        <b>Description:</b>\n        <Quill2Viewer value={content} preview />\n      </span>\n    );\n    if (descContent === '') {\n      if (isPublished) descQV = '';\n      else descQV = <span><b>Description:</b><br /><br /></span>;\n    }\n\n    const addinfoContent =\n      additionInfo &&\n      additionInfo.ops &&\n      additionInfo.ops.length > 0 &&\n      additionInfo.ops[0].insert\n        ? additionInfo.ops[0].insert.trim()\n        : '';\n    let addQV = (\n      <span className=\"expand-p\">\n        <b>Additional information for publication and purification details:</b>\n        <Quill2Viewer value={additionInfo} preview />\n      </span>\n    );\n    if (addinfoContent === '') {\n      if (isPublished) addQV = '';\n      else addQV = <span><b>Additional information for publication and purification details:</b><br /><br /></span>;\n    }\n\n    const temperature = reaction.temperature\n      ? `${reaction.temperature.userText} ${reaction.temperature.valueUnit}`\n      : '';\n    const duration = CalcDuration(reaction);\n    const properties = `Status:[${reaction.status}]; Temperature:[${temperature}]; Duration: [${duration}]`;\n    const tlc = `Solvents (parts):[${reaction.tlc_solvents || ''}]; Rf-Value:[${\n      reaction.rf_value || ''\n    }]; TLC-Description: [${reaction.tlc_description || ''}]`;\n\n    const bodyAttrs = {\n      style: {\n        fontSize: '90%',\n        paddingBottom: 'unset',\n      },\n    };\n    const schemeOnly =\n      (reaction &&\n        reaction.publication &&\n        reaction.publication.taggable_data &&\n        reaction.publication.taggable_data.scheme_only === true) ||\n      false;\n    if (schemeOnly) {\n      if (canComment) {\n        return (\n          <RepoReactionSchemeInfo\n            reaction={reaction}\n            svgPath={svgPath}\n            showScheme={showScheme}\n            showRinchi={showRinchi}\n            showProp={showProp}\n            bodyAttrs={bodyAttrs}\n            onToggle={this.handleToggle}\n            review_info={review_info}\n            onComment={this.handleCommentBtn}\n            propInfo={properties}\n            canComment={canComment}\n          />\n        );\n      }\n      return (\n        <RepoReactionSchemeInfo\n          reaction={reaction}\n          svgPath={svgPath}\n          showScheme={showScheme}\n          showRinchi={showRinchi}\n          showProp={showProp}\n          bodyAttrs={bodyAttrs}\n          onToggle={this.handleToggle}\n          canComment={canComment}\n        />\n      );\n    }\n    return (\n      <Panel style={{ marginBottom: '4px' }}>\n        <Panel.Body style={{ paddingBottom: '1px' }}>\n          <Row>\n            <Col sm={12} md={12} lg={12}>\n              {zoomSvg(svgPath)}\n            </Col>\n          </Row>\n          <Row>\n            <Col sm={12} md={12} lg={12}>\n              <CommentBtn\n                {...this.props}\n                field=\"Reaction Table\"\n                orgInfo=\"<Reaction Table>\"\n                onShow={this.handleCommentBtn}\n              />\n              <ReactionTable\n                reaction={reaction}\n                toggle={this.toggleScheme}\n                show={showScheme}\n                isPublic\n                isReview={this.props.isReview}\n                canComment={canComment}\n              />\n            </Col>\n          </Row>\n          <Row>\n            <Col sm={12} md={12} lg={12}>\n              <div className=\"desc small-p\">\n                <CommentBtn\n                  {...this.props}\n                  field=\"Description\"\n                  orgInfo={descContent}\n                  onShow={this.handleCommentBtn}\n                />\n                {descQV}\n              </div>\n              <div className=\"desc small-p\">\n                <CommentBtn\n                  {...this.props}\n                  field=\"Additional information\"\n                  orgInfo={addinfoContent}\n                  onShow={this.handleCommentBtn}\n                />\n                {addQV}\n              </div>\n            </Col>\n          </Row>\n          <Row>\n            <Col sm={12} md={12} lg={12}>\n              <ReactionRinChiKey\n                reaction={reaction}\n                toggle={this.toggleRinchi}\n                show={showRinchi}\n                bodyAttrs={bodyAttrs}\n              />\n            </Col>\n          </Row>\n          <Row>\n            <Col sm={12} md={12} lg={12}>\n              <CommentBtn\n                {...this.props}\n                field=\"Properties\"\n                orgInfo={properties}\n                onShow={this.handleCommentBtn}\n              />\n              <PublicReactionProperties\n                reaction={reaction}\n                toggle={this.toggleProp}\n                show={showProp}\n                isPublished={isPublished}\n              />\n            </Col>\n          </Row>\n          <Row>\n            <Col sm={12} md={12} lg={12}>\n              <CommentBtn\n                {...this.props}\n                field=\"TLC-Control\"\n                orgInfo={tlc}\n                onShow={this.handleCommentBtn}\n              />\n              <PublicReactionTlc\n                reaction={reaction}\n                toggle={this.toggleTlc}\n                show={showTlc}\n                isPublished={isPublished}\n              />\n            </Col>\n          </Row>\n        </Panel.Body>\n      </Panel>\n    );\n  }\n\n  renderAnalysisView(\n    container,\n    type,\n    product = null,\n    idx = -1,\n    isLogin = false,\n    isCI = false,\n    isReviewer = false,\n    references = []\n  ) {\n    if (typeof container === 'undefined' || !container) return <span />;\n\n    const analyses = ArrayUtils.sortArrByIndex(\n      head(filter(container.children, (o) => o.container_type === 'analyses'))\n        .children\n    );\n    const show = this.state.showRA[idx] || true;\n    if (typeof analyses === 'undefined' || !analyses || analyses.length === 0) {\n      return <div />;\n    }\n    const pdInfos =\n      (this.props.reaction.infos &&\n        this.props.reaction.infos.pd_infos &&\n        this.props.reaction.infos.pd_infos[product && product.id]) ||\n      '';\n    const productHeader =\n      typeof product !== 'undefined' && product ? (\n        <RenderAnalysisHeader\n          key={`reaction-product-header-${product.id}`}\n          reactionId={this.props.reaction.id}\n          element={product}\n          isPublic={this.props.isPublished}\n          isLogin={isLogin}\n          isCI={isCI}\n          isReviewer={isReviewer}\n          userInfo={pdInfos}\n          updateRepoXvial={() => this.updateRepoXvial()}\n          xvialCom={product.xvialCom}\n          literatures={references}\n        />\n      ) : (\n        <span />\n      );\n    const specSample =\n      type === 'Sample' && typeof product !== 'undefined' && product\n        ? new Sample(product)\n        : null;\n    const analysesView = analyses.map((analysis) => {\n      const kind =\n        analysis.extended_metadata &&\n        analysis.extended_metadata.kind &&\n        analysis.extended_metadata['kind'].split('|').pop().trim();\n      const anaInfo =\n        (this.props.reaction.infos &&\n          this.props.reaction.infos.ana_infos &&\n          this.props.reaction.infos.ana_infos[analysis.id]) ||\n        '';\n      return (\n        <span key={`analysis_${analysis.id}`}>\n          <CommentBtn\n            {...this.props}\n            field={`Analysis_${analysis.id}`}\n            orgInfo={kind}\n            onShow={this.handleCommentBtn}\n          />\n          <RenderPublishAnalysesPanel\n            key={`${type}_${analysis.id}`}\n            userInfo={anaInfo}\n            analysis={analysis}\n            type=\"Container\"\n            pageType=\"reactions\"\n            pageId={this.props.reaction.id}\n            isPublic={this.props.isPublished}\n            isLogin={isLogin}\n            isReviewer={isReviewer}\n            element={specSample}\n          />\n        </span>\n      );\n    });\n\n    return (\n      <div>\n        <span\n          role=\"presentation\"\n          className=\"label label-default\"\n          style={{\n            backgroundColor: '#777777',\n            color: 'white',\n            fontSize: 'smaller',\n            fontWeight: 'bold',\n            cursor: 'pointer',\n          }}\n          onClick={() => this.toggleRA(idx)}\n        >\n          Analyses &nbsp;\n          <i className={`glyphicon ${show}`} />\n          <i className={`fa fa-caret-${show ? 'down' : 'right'}`} />\n        </span>\n        <span\n          className=\"label\"\n          style={{ color: 'black', fontSize: 'smaller', fontWeight: 'bold' }}\n        >\n          {AnalysesTypeJoinLabel(analyses, type)}\n        </span>\n        <Panel\n          style={{ border: 'none' }}\n          id={`collapsible_${type}_analyses`}\n          expanded={show}\n          defaultExpanded\n          onToggle={() => {}}\n        >\n          <Panel.Collapse>\n            <Panel.Body\n              style={{\n                fontSize: '90%',\n                backgroundColor: '#f5f5f5',\n                padding: '4',\n              }}\n            >\n              {productHeader}\n              {analysesView}\n            </Panel.Body>\n          </Panel.Collapse>\n        </Panel>\n      </div>\n    );\n  }\n\n  renderProductAnalysisView(\n    products,\n    isLogin = false,\n    isReviewer = false,\n    references = []\n  ) {\n    if (typeof products === 'undefined' || !products || products.length === 0) {\n      return <span />;\n    }\n    const prdReferences = (_sid, _references) =>\n      _references\n        ? _references.filter(\n            (r) => r.element_type === 'Sample' && r.element_id === _sid\n          )\n        : [];\n    return products.map((product, idx) => (\n      <div key={`product-${product.id}`}>\n        {this.renderAnalysisView(\n          product.container,\n          'Sample',\n          product,\n          idx,\n          isLogin,\n          isReviewer,\n          prdReferences(product.id, references)\n        )}\n      </div>\n    ));\n  }\n\n  render() {\n    const {\n      reaction,\n      isPublished,\n      canComment: propsCanComment,\n      review_info,\n      showComment,\n      review,\n      canClose,\n    } = this.props;\n    let { buttons } = this.props;\n    if (typeof reaction === 'undefined' || !reaction) {\n      return <div />;\n    }\n    const { currentUser } = UserStore.getState();\n    const canComment =\n      currentUser?.type === RepoConst.U_TYPE.ANONYMOUS\n        ? false\n        : propsCanComment;\n\n    const taggData =\n      (reaction &&\n        reaction.publication &&\n        reaction.publication.taggable_data) ||\n      {};\n    const pubData = (reaction && reaction.publication) || {};\n    const doi = (reaction && reaction.doi) || {};\n\n    const aId = [].concat.apply([], taggData.affiliation_ids);\n    const affiliationMap = {};\n    const { literatures } = reaction;\n    const references = literatures\n      ? literatures.map((lit) => (\n          <li key={`product_${lit.id}`} style={{ display: 'flex' }}>\n            <RefByUserInfo info={lit.ref_added_by} litype={lit.litype} />\n            &nbsp;\n            <i className={`icon-${lit.element_type.toLowerCase()}`} />\n            &nbsp;\n            <Citation key={lit.id} literature={lit} />\n          </li>\n        ))\n      : [];\n    const refArray = [];\n    let referencesText = '';\n    if (literatures) {\n      literatures.forEach((lit) => {\n        const content = literatureContent(lit, true);\n        refArray.push(content);\n      });\n      referencesText = refArray.join('');\n    }\n\n    let aCount = 0;\n    aId.map((e) => {\n      if (!affiliationMap[e]) {\n        aCount += 1;\n        affiliationMap[e] = aCount;\n      }\n    });\n    const license = taggData.license || 'CC BY-SA';\n\n    const schemeOnly =\n      (reaction &&\n        reaction.publication &&\n        reaction.publication.taggable_data &&\n        reaction.publication.taggable_data.scheme_only === true) ||\n      false;\n\n    let showDOI = (\n      <Doi\n        type=\"reaction\"\n        id={reaction.id}\n        doi={isPublished ? taggData.doi : doi}\n        isPublished={isPublished}\n      />\n    );\n    if (schemeOnly) {\n      buttons = ['Decline', 'Comments', 'Review', 'Submit', 'Accept'];\n      showDOI = '';\n    }\n\n    if (\n      review_info?.groupleader === true &&\n      review_info?.preapproved !== true\n    ) {\n      buttons = ['Comments', 'Review', 'Approve'];\n    }\n\n    const idyLogin =\n      typeof reaction.isLogin === 'undefined' ? true : reaction.isLogin;\n    const idyReview =\n      typeof reaction.isReviewer === 'undefined' ? false : reaction.isReviewer;\n      const isCI =\n      typeof reaction.isCI === 'undefined' ? false : reaction.isCI;\n    const userInfo = (reaction.infos && reaction.infos.pub_info) || '';\n\n    let embargo = <span />;\n    const colDoiPrefix = isPublished\n      ? taggData.doi?.split('/')[0]\n      : doi?.full_doi?.split('/')[0];\n    if (reaction.embargo) {\n      const embargoLink = isPublished\n        ? `/inchikey/collection/${reaction.embargo}`\n        : `/embargo/reaction/${reaction.id}`;\n      embargo = (\n        <span>\n          <b>Access to the DOI and metadata for the whole data collection: </b>{' '}\n          &nbsp;\n          <Button\n            key=\"embargo-link-btn\"\n            bsStyle=\"link\"\n            href={embargoLink}\n            target=\"_blank\"\n            style={{ padding: '0px 0px' }}\n          >\n            <i className=\"fa fa-database\" />\n            &nbsp;&nbsp;{reaction.embargo}\n          </Button>\n          <ClipboardCopyBtn\n            text={`https://dx.doi.org/${colDoiPrefix}/collection/${reaction.embargo}`}\n            tooltip=\"retrieve and copy collection DOI\"\n          />\n        </span>\n      );\n    }\n    const userLabels = (reaction.labels || []).map(label => label.id);\n    return (\n      <div style={{ border: 'none' }}>\n        <div>\n          <Jumbotron key={`reaction-${reaction.id}`}>\n            <PublicAnchor doi={isPublished ? taggData.doi : doi?.full_doi} isPublished={isPublished} />\n            {canComment ? (\n              <RepoReviewButtonBar\n                element={{ id: reaction.id, elementType: 'Reaction', user_labels: userLabels}}\n                buttons={buttons}\n                buttonFunc={this.handleReviewBtn}\n                review_info={review_info}\n                showComment={showComment}\n                taggData={taggData}\n                schemeOnly={schemeOnly}\n                currComment={\n                  (review?.history &&\n                    review?.history.length > 0 &&\n                    review?.history.slice(-1).pop()) ||\n                  {}\n                }\n              />\n            ) : (\n              ''\n            )}\n            {canClose ? <ClosePanel element={reaction} /> : ''}\n            <h4>\n              <IconToMyDB\n                isLogin={idyLogin}\n                isCI={isCI}\n                isPublished={isPublished}\n                id={reaction.id}\n                type=\"reaction\"\n              />\n              {schemeOnly ? <SchemeWord /> : ''}&nbsp;\n              <DateInfo\n                isPublished={isPublished}\n                preText=\"Reaction\"\n                pubData={pubData}\n                tagData={taggData}\n              />\n              &nbsp;\n              <LicenseIcon\n                license={license}\n                hasCoAuthors={\n                  taggData.author_ids && taggData.author_ids.length > 1\n                }\n              />\n              <span className=\"repo-public-user-comment\">\n              {PublicLabels(reaction.labels)}\n                <PublicCommentModal\n                  isReviewer={idyReview}\n                  id={reaction.id}\n                  type=\"Reaction\"\n                  title={`Reaction, CRR-${pubData.id}`}\n                  userInfo={userInfo}\n                />\n                &nbsp;\n                <UserCommentModal\n                  isPublished={isPublished}\n                  isLogin={idyLogin}\n                  id={reaction.id}\n                  type=\"Reaction\"\n                  title={`Reaction, CRR-${pubData.id}`}\n                />\n              </span>\n            </h4>\n            <br />\n            <ContributorInfo\n              contributor={taggData.contributors}\n              showHelp={schemeOnly}\n            />\n            <h5>\n              <b>{getAuthorLabel(taggData.author_ids)} </b>\n              <AuthorList\n                creators={taggData.creators}\n                affiliationMap={affiliationMap}\n              />\n            </h5>\n            <AffiliationList\n              affiliations={taggData.affiliations}\n              affiliationMap={affiliationMap}\n            />\n            {showDOI}\n            <ChemotionId id={pubData.id} type=\"reaction\" />\n            {embargo}\n            <h5>\n              <CommentBtn\n                {...this.props}\n                field=\"Reference\"\n                orgInfo={referencesText}\n                onShow={this.handleCommentBtn}\n              />\n              <b>\n                Reference{references.length > 1 ? 's' : null} in the Literature:{' '}\n              </b>\n              <ul style={{ listStyle: 'none' }}>{references}</ul>\n            </h5>\n            <br />\n            <h5>{this.reactionInfo(reaction)}</h5>\n            <RepoSegment segments={reaction.segments} isPublic={isPublished} />\n            {schemeOnly\n              ? ''\n              : this.renderAnalysisView(\n                  reaction.container,\n                  'Reaction',\n                  null,\n                  -1,\n                  idyLogin,\n                  idyReview\n                )}\n            {schemeOnly\n              ? ''\n              : this.renderProductAnalysisView(\n                  reaction.products,\n                  idyLogin,\n                  idyReview,\n                  literatures\n                )}\n          </Jumbotron>\n          <NMRiumDisplayer\n            sample={reaction}\n            handleSampleChanged={() => {}}\n            handleSubmit={() => {}}\n            readOnly\n          />\n        </div>\n      </div>\n    );\n  }\n}\n\nRepoReactionDetails.propTypes = {\n  reaction: PropTypes.object.isRequired,\n  isPublished: PropTypes.bool,\n  canComment: PropTypes.bool,\n  btnAction: PropTypes.string,\n  review_info: PropTypes.object,\n  showComment: PropTypes.bool,\n  isReview: PropTypes.bool,\n  review: PropTypes.object,\n  canClose: PropTypes.bool,\n  buttons: PropTypes.arrayOf(PropTypes.string),\n  onReviewUpdate: PropTypes.func,\n};\n\nRepoReactionDetails.defaultProps = {\n  isPublished: false,\n  canComment: false,\n  review_info: {},\n  showComment: true,\n  btnAction: '',\n  isReview: false,\n  review: {},\n  canClose: true,\n  buttons: ['Decline', 'Comments', 'Review', 'Submit', 'Accept'],\n  onReviewUpdate: () => {},\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport { Panel, Row, Col } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport {\n  CommentBtn,\n  ReactionRinChiKey,\n  zoomSvg,\n} from 'src/repoHome/RepoCommon';\nimport Quill2Viewer from 'src/components/Quill2Viewer';\nimport ReactionTable from 'src/repoHome/RepoReactionTable';\n\nconst RepoReactionSchemeInfo = (props) => {\n  const content = props.reaction.description;\n  const contentlength = (content && content.ops && content.ops.length > 0\n    && content.ops[0].insert) ? content.ops[0].insert.trim().length : 0;\n  const descQV = contentlength > 0 ?\n    (<span className=\"expand-p\"><b>Description:</b><Quill2Viewer value={content} /></span>) : null;\n  return (\n    <Panel style={{ marginBottom: '4px' }}>\n      <Panel.Body style={{ paddingBottom: '1px' }}>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            {zoomSvg(props.svgPath)}\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <CommentBtn {...props} field=\"Reaction Table\" orgInfo=\"<Reaction Table>\" onShow={props.onComment} />\n            <ReactionTable\n              reaction={props.reaction}\n              toggle={() => props.onToggle('Scheme')}\n              show={props.showScheme}\n              isPublic\n            />\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <div className=\"desc small-p\">\n              {descQV}\n            </div>\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} md={12} lg={12}>\n            <ReactionRinChiKey\n              reaction={props.reaction}\n              toggle={() => props.onToggle('Rinchi')}\n              show={props.showRinchi}\n              bodyAttrs={props.bodyAttrs}\n            />\n          </Col>\n        </Row>\n      </Panel.Body>\n    </Panel>\n  );\n};\n\nRepoReactionSchemeInfo.propTypes = {\n  reaction: PropTypes.object.isRequired,\n  svgPath: PropTypes.string.isRequired,\n  showScheme: PropTypes.bool.isRequired,\n  showRinchi: PropTypes.bool.isRequired,\n  showProp: PropTypes.bool.isRequired,\n  bodyAttrs: PropTypes.object.isRequired,\n  onToggle: PropTypes.func.isRequired,\n  review_info: PropTypes.object,\n  propInfo: PropTypes.string,\n  onComment: PropTypes.func,\n  canComment: PropTypes.bool,\n};\n\nRepoReactionSchemeInfo.defaultProps = {\n  review_info: 0,\n  propInfo: '',\n  onComment: () => {},\n  canComment: false,\n};\n\nexport default RepoReactionSchemeInfo;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Table, Panel, Button, ButtonGroup } from 'react-bootstrap';\nimport Sample from 'src/models/Sample';\nimport { ToggleIndicator } from 'src/repoHome/RepoCommon';\nimport { formatPercentage } from 'src/components/chemrepo/format-utils';\n\nfunction ReactionTable({\n  reaction,\n  toggle,\n  show,\n  isPublic = true,\n  isReview = false,\n}) {\n  let schemes = [];\n  let sumSolvents = 0.0;\n  const showIndicator = show ? 'down' : 'right';\n\n  const schemeOnly =\n    (reaction &&\n      reaction.publication &&\n      reaction.publication.taggable_data &&\n      reaction.publication.taggable_data.scheme_only === true) ||\n    false;\n\n  if (isPublic) {\n    ({ schemes } = reaction);\n  } else {\n    reaction.starting_materials.forEach((s) => {\n      const ns = new Sample(s);\n      ns.mat_group = 'starting_materials';\n      schemes.push(ns);\n    });\n    reaction.reactants.forEach((s) => {\n      const ns = new Sample(s);\n      ns.mat_group = 'reactants';\n      schemes.push(ns);\n    });\n    reaction.products.forEach((s) => {\n      const ns = new Sample(s);\n      ns.mat_group = 'products';\n      schemes.push(ns);\n    });\n    reaction.solvents.forEach((s) => {\n      const ns = new Sample(s);\n      sumSolvents += ns.amount_l;\n      ns.mat_group = 'solvents';\n      schemes.push(ns);\n    });\n  }\n\n  const hasConversionRate = () => {\n    let productSwitch = 'y';\n    schemes.forEach((scheme) => {\n      if (scheme.mat_group === 'products' && scheme.conversion_rate !== null) {\n        productSwitch = 'c';\n      }\n    });\n    return productSwitch;\n  };\n\n  const [showSwitch, setSwitch] = useState(hasConversionRate);\n\n  const materialCalc = (target, multi, precision) => {\n    return target ? (target * multi).toFixed(precision) : ' - ';\n  };\n\n  const equivYield = (s, _sumSolvents = 1.0) => {\n    let val = 0;\n    switch (s.mat_group) {\n      case 'products':\n        if (showSwitch === 'y') {\n          if (schemeOnly === true) {\n            val = `${materialCalc(s.scheme_yield * 100, 1, 0).toString()}%`;\n          } else {\n            val = `${materialCalc(s.equivalent * 100, 1, 0).toString()}%`;\n          }\n        } else {\n          val = `${formatPercentage(s.conversion_rate).toString()}`;\n        }\n        break;\n      case 'solvents':\n        if (isPublic) {\n          val = `${materialCalc(s.equivalent * 100, 1, 0).toString()}%`;\n        } else {\n          val = `${materialCalc(\n            (s.amount_l / _sumSolvents) * 100,\n            1,\n            1\n          ).toString()}%`;\n        }\n        break;\n      default:\n        val = materialCalc(s.equivalent, 1, 3);\n    }\n    return val;\n  };\n\n  const rows = (samples, _isReview = false) => {\n    let currentType = '';\n    return typeof samples !== 'undefined'\n      ? samples.map((sample, i) => {\n          const matType =\n            sample.mat_group &&\n            sample.mat_group[0].toUpperCase() +\n              sample.mat_group.replace('_', ' ').slice(1);\n          const rLabel = (sample.short_label || '').concat(\n            '   ',\n            sample.name || ''\n          );\n          const useName = isPublic\n            ? sample.molecule_iupac_name ||\n              sample.iupac_name ||\n              sample.sum_formular\n            : sample.molecule_iupac_name;\n          let label = _isReview ? (\n            <span>\n              {rLabel}\n              <br />\n              {useName}\n            </span>\n          ) : (\n            useName\n          );\n          if (sample.mat_group === 'solvents')\n            label =\n              sample.external_label ||\n              sample.molecule_iupac_name ||\n              sample.name;\n          let title = null;\n          if (currentType !== sample.mat_group) {\n            currentType = sample.mat_group;\n            title =\n              currentType === 'products' ? (\n                <tr>\n                  <td colSpan=\"6\">\n                    <b>{matType}</b>\n                  </td>\n                  <td style={{ textAlign: 'center' }}>\n                    <ButtonGroup className=\"btn-product\">\n                      <Button\n                        bsSize=\"xsmall\"\n                        active={showSwitch === 'y'}\n                        className={showSwitch === 'y' ? 'on' : 'off'}\n                        onClick={() => {\n                          setSwitch('y');\n                        }}\n                      >\n                        Yield\n                      </Button>\n                      <Button\n                        bsSize=\"xsmall\"\n                        active={showSwitch === 'c'}\n                        className={showSwitch === 'c' ? 'on' : 'off'}\n                        onClick={() => {\n                          setSwitch('c');\n                        }}\n                      >\n                        Conv.\n                      </Button>\n                    </ButtonGroup>\n                  </td>\n                </tr>\n              ) : (\n                <tr>\n                  <td colSpan=\"7\">\n                    <b>{matType}</b>\n                  </td>\n                </tr>\n              );\n          }\n          return (\n            <tbody key={i}>\n              {title}\n              <tr>\n                <td style={{ width: '26%' }}>{label}</td>\n                <td style={{ width: '12%' }}>\n                  {isPublic\n                    ? sample.sum_formular\n                    : sample.molecule.sum_formular}\n                </td>\n                <td style={{ width: '14%', textAlign: 'center' }}>\n                  {sample.mat_group === 'solvents'\n                    ? ' '\n                    : isPublic\n                      ? sample.dmv\n                      : !sample.has_molarity && !sample.has_density\n                        ? '- / -'\n                        : sample.has_density\n                          ? +sample.density + ' / - '\n                          : ' - / ' +\n                            sample.molarity_value +\n                            sample.molarity_unit}\n                </td>\n                <td style={{ width: '12%', textAlign: 'center' }}>\n                  {sample.mat_group === 'solvents'\n                    ? ' - '\n                    : materialCalc(sample.amount_g, 1000, 3)}\n                </td>\n                <td style={{ width: '12%', textAlign: 'center' }}>\n                  {materialCalc(sample.amount_l, 1000, 3)}\n                </td>\n                <td style={{ width: '12%', textAlign: 'center' }}>\n                  {sample.mat_group === 'solvents'\n                    ? ' - '\n                    : materialCalc(sample.amount_mol, 1000, 3)}\n                </td>\n                <td style={{ width: '12%', textAlign: 'center' }}>\n                  {equivYield(sample, sumSolvents)}\n                </td>\n              </tr>\n            </tbody>\n          );\n        })\n      : null;\n  };\n  const table = (dataRows) => (\n    <Table responsive>\n      <thead>\n        <tr>\n          <th>IUPAC</th>\n          <th>Formula</th>\n          <th style={{ textAlign: 'center' }}>Density/Molarity</th>\n          <th style={{ textAlign: 'center' }}>Amount [mg]</th>\n          <th style={{ textAlign: 'center' }}>Volume [mL]</th>\n          <th style={{ textAlign: 'center' }}>Amount [mmol]</th>\n          <th style={{ textAlign: 'center' }}>Equiv</th>\n        </tr>\n      </thead>\n      {dataRows}\n    </Table>\n  );\n\n  return (\n    <span>\n      <ToggleIndicator\n        onClick={toggle}\n        name=\"Reaction Table\"\n        indicatorStyle={showIndicator}\n      />\n      <Panel\n        style={{ border: 'none' }}\n        id=\"collapsible-panel-scheme\"\n        expanded={show}\n        defaultExpanded={show}\n        onToggle={() => {}}\n      >\n        <Panel.Collapse>\n          <Panel.Body style={{ fontSize: '90%', paddingBottom: 'unset' }}>\n            <div>{table(rows(schemes, isReview))}</div>\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    </span>\n  );\n}\n\nReactionTable.propTypes = {\n  reaction: PropTypes.object.isRequired,\n  toggle: PropTypes.func,\n  show: PropTypes.bool,\n  isPublic: PropTypes.bool,\n  isReview: PropTypes.bool,\n};\n\nReactionTable.defaultProps = {\n  toggle: () => {},\n  show: false,\n  isPublic: true,\n  isReview: false,\n};\n\nexport default ReactionTable;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, Button, ButtonToolbar, OverlayTrigger, Tooltip, Label } from 'react-bootstrap';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\n\nexport default class RepoMetadataModal extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      modalShow: false,\n      metadata: []\n    };\n    this.loadMetadata = this.loadMetadata.bind(this);\n  }\n\n  componentDidMount() {\n    this.loadMetadata();\n  }\n\n  loadMetadata() {\n    const { elementId, elementType } = this.props;\n    RepositoryFetcher.previewMetadata(elementId, elementType).then((result) => {\n      this.setState({ metadata: result.metadata });\n    });\n  }\n\n  render() {\n    const { modalShow, metadata } = this.state;\n    const { elementId, elementType } = this.props;\n    return (\n      <div>\n        <OverlayTrigger\n          placement=\"top\"\n          overlay={<Tooltip id=\"tt_metadata\">Preview/Download Metadata</Tooltip>}\n        >\n          <Button\n            onClick={() => this.setState({ modalShow: true })}\n            style={{ marginLeft: '5px' }}\n          >\n            <i className=\"fa fa-file-code-o\" />&nbsp;\n            Metadata\n          </Button>\n        </OverlayTrigger>\n        <Modal\n          show={modalShow}\n          onHide={() => this.setState({ modalShow: false })}\n          dialogClassName=\"news-preview-dialog\"\n        >\n          <Modal.Body style={{ overflow: 'auto' }}>\n            <div>\n              <h4>\n                <Label>\n                  {elementType.charAt(0).toUpperCase().concat(elementType.slice(1).toLowerCase())}\n                </Label>\n              </h4>\n            </div>\n            <div style={{\n              maxHeight: '50vh',\n              overflow: 'auto',\n              whiteSpace: 'pre',\n              backgroundColor: 'black',\n              color: 'white',\n              fontFamily: 'monospace'\n            }}\n            >\n              {metadata && metadata.length > 0 ? metadata.find(mt => mt.element_type === elementType.charAt(0).toUpperCase().concat(elementType.slice(1).toLowerCase())).metadata_xml : ''}\n            </div>\n            <br />\n            <ButtonToolbar>\n              <Button\n                bsStyle=\"warning\"\n                onClick={() => this.setState({ modalShow: false })}\n              > Close\n              </Button>\n              <Button\n                bsStyle=\"primary\"\n                onClick={() => RepositoryFetcher.zipPreviewMetadata(elementId, elementType)}\n              > Download\n              </Button>\n            </ButtonToolbar>\n          </Modal.Body>\n        </Modal>\n      </div>\n    );\n  }\n}\n\nRepoMetadataModal.propTypes = {\n  elementId: PropTypes.number.isRequired,\n  elementType: PropTypes.string.isRequired\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Modal,\n  Button,\n  ButtonToolbar,\n  OverlayTrigger,\n  Tooltip,\n  Label,\n} from 'react-bootstrap';\nimport { ReviewUserLabels } from 'src/components/UserLabels';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\n\nexport default class RepoUserLabelModal extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      modalShow: false,\n      selectedIds: this.props.element.user_labels || [],\n    };\n    this.handleSelectLabels = this.handleSelectLabels.bind(this);\n    this.handleSaveLabels = this.handleSaveLabels.bind(this);\n  }\n\n  handleSelectLabels(e, ids) {\n    this.setState({ selectedIds: ids });\n  }\n\n  handleSaveLabels(e) {\n    const { selectedIds } = this.state;\n    ReviewActions.saveReviewLabel(e, selectedIds);\n    this.setState({ modalShow: false });\n  }\n\n  render() {\n    const { modalShow, selectedIds } = this.state;\n    const { element } = this.props;\n\n    return (\n      <div>\n        <OverlayTrigger\n          placement=\"top\"\n          overlay={<Tooltip id=\"tt_metadata\">add/remove user labels</Tooltip>}\n        >\n          <Button\n            onClick={() => this.setState({ modalShow: true })}\n            style={{ marginLeft: '5px' }}\n          >\n            <i className=\"fa fa-tags\" />&nbsp;Labels\n          </Button>\n        </OverlayTrigger>\n        <Modal\n          show={modalShow}\n          onHide={() => this.setState({ modalShow: false })}\n          dialogClassName=\"news-preview-dialog\"\n        >\n          <Modal.Body style={{ overflow: 'auto' }}>\n            <div>\n              <h4>\n                <ReviewUserLabels\n                  element={element}\n                  selectedIds={selectedIds}\n                  fnCb={this.handleSelectLabels}\n                />\n              </h4>\n            </div>\n            <br />\n            <ButtonToolbar>\n              <Button\n                bsStyle=\"warning\"\n                onClick={() => this.setState({ modalShow: false })}\n              >\n                Close\n              </Button>\n              <Button\n                bsStyle=\"primary\"\n                onClick={() => this.handleSaveLabels(element)}\n              >\n                Save\n              </Button>\n            </ButtonToolbar>\n          </Modal.Body>\n        </Modal>\n      </div>\n    );\n  }\n}\n\nRepoUserLabelModal.propTypes = {\n  element: PropTypes.shape({\n    id: PropTypes.number,\n    elementType: PropTypes.string,\n  }).isRequired,\n};\n","import React from 'react';\nimport {\n  Button,\n  ButtonToolbar,\n  OverlayTrigger,\n  Tooltip,\n} from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport RepoMetadataModal from 'src/components/chemrepo/common/RepoMetadataModal';\nimport RepoReviewAuthorsModal from 'src/components/chemrepo/common/RepoReviewAuthorsModal';\nimport RepoUserLabelModal from 'src/components/chemrepo/common/RepoUserLabelModal';\n\nconst showButton = (btn, func, pubState, review_info) => {\n  let title = btn;\n  let btnBsStyle = '';\n  let btnIcon = '';\n  let btnTooltip = '';\n\n  switch (btn) {\n    case 'Accept':\n      btnBsStyle = 'primary';\n      btnIcon = 'fa fa-paper-plane';\n      btnTooltip = 'Accept publication';\n      break;\n    case 'Approve':\n      btnBsStyle = 'primary';\n      btnIcon = 'fa fa-paper-plane';\n      btnTooltip = 'Accept publication by group leader';\n      break;\n    case 'Review':\n      btnBsStyle = 'info';\n      btnIcon = 'fa fa-exchange';\n      btnTooltip = 'Review publication, modification required for submitter';\n      break;\n    case 'Submit':\n      btnBsStyle = 'info';\n      btnIcon = 'fa fa-play';\n      btnTooltip = 'Submit for publication';\n      break;\n    case 'Decline':\n      btnBsStyle = 'default';\n      btnIcon = 'fa fa-eject';\n      if (review_info?.review_level === 2) {\n        btnTooltip = 'Withdraw publication';\n        title = 'Withdraw';\n      } else if (review_info?.review_level === 3) {\n        btnTooltip = 'Reject publication';\n        title = 'Reject';\n      }\n      break;\n    default:\n      break;\n  }\n  return ((review_info?.review_level === 3 && pubState === 'pending' && btn !== 'Submit') ||\n  (pubState === 'pending' && btn !== 'Submit' && review_info?.preapproved !== true && btn !== 'Accept' && btn !== 'Decline' && review_info?.groupleader === true) ||\n  (review_info?.submitter === true && pubState === 'reviewed' && (btn === 'Submit' || btn === 'Decline'))) ? (\n    <OverlayTrigger\n      key={`ot_${title}`}\n      placement=\"top\"\n      overlay={<Tooltip id={btn}>{btnTooltip}</Tooltip>}\n    >\n      <Button\n        bsStyle={btnBsStyle}\n        onClick={() => func(true, btn)}\n      >\n        <i className={btnIcon} />&nbsp;{title}\n      </Button>\n    </OverlayTrigger>\n  ) : <span key={`span_${title}`} />;\n};\n\nconst showCommentButton = (btn, func, currComment) => {\n  const hasComments = (currComment && currComment.comment && currComment.comment.length > 0) || false;\n  return (\n    <OverlayTrigger\n      key=\"ot_comments\"\n      placement=\"top\"\n      overlay={<Tooltip id=\"showComments\">Show/Add Comments</Tooltip>}\n    >\n      <Button\n        bsStyle={hasComments ? 'success' : 'default'}\n        onClick={() => func(true, btn)}\n      >\n        <i className=\"fa fa-comments\" />&nbsp;\n        Comments\n      </Button>\n    </OverlayTrigger>\n  );\n};\n\nfunction RepoReviewButtonBar(props) {\n  let authorModel = '';\n\n  if (props?.review_info?.groupleader !== true) {\n    authorModel = (\n      <RepoReviewAuthorsModal\n        element={props.element}\n        isEmbargo={false}\n        leaders={props.review_info?.leaders || []}\n        schemeOnly={props.schemeOnly}\n        taggData={props.taggData}\n      />\n    );\n  }\n\n  return (<ButtonToolbar style={{ marginBottom: '10px' }}>\n      {\n        props.showComment === true && props.buttons.filter(b => b === 'Comments').map(b =>\n          showCommentButton(b, props.buttonFunc, (props.currComment)))\n      }\n      {\n        props.showComment === true && props.buttons.filter(b => b !== 'Comments').map(b =>\n          showButton(b, props.buttonFunc, props.currComment.state, props.review_info))\n      }\n      <RepoMetadataModal\n        elementId={props.element.id}\n        elementType={props.element.elementType.toLowerCase()}\n      />\n      {authorModel}\n      <RepoUserLabelModal element={props.element} />\n    </ButtonToolbar>)\n};\n\nRepoReviewButtonBar.propTypes = {\n  element: PropTypes.shape({\n    id: PropTypes.number,\n    elementType: PropTypes.string,\n    user_labels: PropTypes.arrayOf(PropTypes.number)\n  }).isRequired,\n  buttons: PropTypes.arrayOf(PropTypes.string),\n  buttonFunc: PropTypes.func,\n  review_info: PropTypes.object,\n  showComment: PropTypes.bool,\n  schemeOnly: PropTypes.bool,\n  currComment: PropTypes.object,\n  taggData: PropTypes.object\n};\n\n\nRepoReviewButtonBar.defaultProps = {\n  buttons: ['Decline', 'Comments', 'Review', 'Submit', 'Accept'],\n  buttonFunc: () => { },\n  review_info: {},\n  showComment: true,\n  schemeOnly: false,\n  currComment: {},\n  taggData: {},\n};\n\nexport default RepoReviewButtonBar;\n","import React from 'react';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nexport const MALinkButton = () => (\n  <OverlayTrigger placement=\"top\" overlay={<Tooltip id=\"tooltip_ma_link\">Go to Molecule Archive</Tooltip>}>\n    <Button bsStyle=\"link\" bsSize=\"xsmall\" onClick={() => { window.open('https://compound-platform.eu/home', '_blank'); }}>has a record as physically available material</Button>\n  </OverlayTrigger>\n);\n\nconst registedCompoundTooltip = (\n  <div className=\"repo-xvial-info\">\n    For availability please use the below (<span className=\"env\"><i className=\"fa fa-envelope-o\" aria-hidden=\"true\" /></span>) to contact the Compound Platform team. An explanation can be accessed via our Youtube channel&nbsp;\n    <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://www.youtube.com/channel/UCWBwk4ZSXwmDzFo_ZieBcAw?\"><i className=\"fa fa-youtube-play youtube\" /></a>\n    &nbsp;or on our how-to pages\n    <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://www.chemotion-repository.net/home/howto/cf3ede44-b09a-400a-b0d4-b067735e4262\"><img alt=\"chemotion_first\" src=\"/favicon.ico\" className=\"pubchem-logo\" /></a>\n  </div>\n);\n\nexport const MARegisteredTooltip = () => (\n  <OverlayTrigger trigger=\"click\" rootClose placement=\"top\" overlay={<Tooltip id=\"registed_compound_tooltip\" className=\"left_tooltip bs_tooltip\">{registedCompoundTooltip}</Tooltip>}>\n    <a rel=\"noopener noreferrer\"><i className=\"fa fa-info-circle\" aria-hidden=\"true\" /></a>\n  </OverlayTrigger>\n);\n","import React, { useState } from 'react';\nimport { Panel } from 'react-bootstrap';\nimport { ToggleIndicator } from 'src/repoHome/RepoCommon';\nimport { MARegisteredTooltip } from 'src/components/chemrepo/ma/MAComs';\nimport { MADataModal, MARequestModal } from 'src/components/chemrepo/ma/MAModals';\n\nconst MAPanel = (_props) => {\n  const {\n    allowRequest, compNum, elementId, isEditable, isLogin, data, saveCallback, xvialCom\n  } = _props;\n  const [expanded, setExpanded] = useState(true);\n\n  const hasData = !!(data && data !== '');\n  if (!isLogin && !hasData) return null;\n  if (isLogin && !hasData && !isEditable) return null;\n  const information = allowRequest && hasData ? <MARegisteredTooltip /> : null;\n\n  return (\n    <>\n      <span className=\"repo-pub-sample-header repo-ma-panel\">\n        <ToggleIndicator onClick={() => setExpanded(!expanded)} name=\"Material\" indicatorStyle={expanded ? 'down' : 'right'} />\n        {information}\n        <MADataModal isEditable={isEditable} data={data} elementId={elementId} saveCallback={saveCallback} xvialCom={xvialCom} />\n      </span>\n      <Panel style={{ border: 'none' }} id=\"collapsible-panel-ma-panel\" expanded={expanded} defaultExpanded={expanded} onToggle={() => { }}>\n        <Panel.Collapse>\n          <Panel.Body style={{ fontSize: '90%', backgroundColor: '#f5f5f5', padding: '4' }}>\n            <b>Sample Registration Number in Molecule Archive:</b> {compNum} <br />\n            <b>Request a sample:</b> <MARequestModal allowRequest={allowRequest} data={data} elementId={elementId} isLogin={isLogin} />\n          </Panel.Body>\n        </Panel.Collapse>\n      </Panel>\n    </>\n  );\n};\n\nexport default MAPanel;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport RepoConst from 'src/components/chemrepo/common/RepoConst';\nimport ExactMass from 'src/components/chemrepo/ExactMass';\nimport { ExactFormula } from 'src/components/common/Formula';\n\nfunction DecoupleInfo({ sample, molecule }) {\n  const { inchikey = '' } = molecule ?? {};\n  if (!sample.decoupled || inchikey === RepoConst.INCHIKEY_DUMMY) return null;\n  const em = ExactMass(sample, molecule);\n  return (\n    <>\n      <h5>\n        <b>Formula:&nbsp;</b>\n        <ExactFormula sample={sample} molecule={molecule} />\n      </h5>\n      {em && (\n        <h5>\n          <b>Exact Mass:&nbsp;</b> {em}\n        </h5>\n      )}\n    </>\n  );\n}\n\nDecoupleInfo.propTypes = {\n  sample: PropTypes.object.isRequired,\n  molecule: PropTypes.object,\n};\n\nDecoupleInfo.defaultProps = {\n  molecule: null,\n};\n\nexport default DecoupleInfo;\n","import React from 'react';\nimport { Button } from 'react-bootstrap';\nimport { Citation, literatureContent, RefByUserInfo } from 'src/apps/mydb/elements/details/literature/LiteratureCommon';\nimport { ChemotionId, CommentBtn, Doi } from 'src/repoHome/RepoCommon';\nimport { formatPhysicalProps } from 'src/components/chemrepo/publication-utils';\nimport RepoConst from 'src/components/chemrepo/common/RepoConst';\nimport DecoupleInfo from 'src/repoHome/DecoupleInfo';\n\nconst PublicSample = (_props) => {\n  const {\n    canComment, embargo, handleAnalysesLink, handleCommentBtn, handleMaterialLink, isPublished, element, sample, pubData\n  } = _props;\n\n  const analyses = sample?.analyses?.children?.[0]?.children ?? [];\n  const references = sample.literatures ? sample.literatures.map(lit => (\n    <li key={`li_${lit.id}`} style={{ display: 'flex' }}>\n      <RefByUserInfo info={lit.ref_added_by} litype={lit.litype} />&nbsp;\n      <Citation key={lit.id} literature={lit} />\n    </li>\n  )) : [];\n\n  let sampleTypeDescription = 'Consists of molecule with defined structure';\n  if (sample.decoupled && element.molecule.inchikey === RepoConst.INCHIKEY_DUMMY) {\n    sampleTypeDescription = 'Includes only undefined structural components';\n  } else if (sample.decoupled && element.molecule.inchikey !== RepoConst.INCHIKEY_DUMMY) {\n    sampleTypeDescription = 'Includes a fragment with defined structure';\n  }\n\n  const referencesText = canComment && sample.literatures\n    ? sample.literatures.map(lit => literatureContent(lit, true)).join('')\n    : '';\n\n  const { meltingPoint, boilingPoint, showPhysicalProps } = formatPhysicalProps(sample);\n  const referencesPhysicalProp = canComment && (!!meltingPoint || !!boilingPoint)\n  ? `Melting point:[${meltingPoint}]; Boiling point:[${boilingPoint}]`\n  : '';\n\n  const reactionLink = sample.reaction_ids?.length > 0 ? (\n    <>\n      &nbsp;\n      <Button id=\"public-sample-reaction-link\" bsStyle=\"link\" onClick={() => { window.location = `/home/publications/reactions/${sample.reaction_ids[0]}`; }}>\n        Is Product of a reaction <i className=\"icon-reaction\" />\n      </Button>\n    </>\n  ) : null;\n\n\n  const analyticalLink = analyses.length > 0 ? (\n    <>\n      {reactionLink ? ',' : ''}&nbsp;&nbsp;\n      <Button id=\"public-sample-analytical-link\" bsStyle=\"link\" onClick={handleAnalysesLink}>\n        has analytical data\n      </Button>\n    </>\n  ) : null;\n\n  const hasData = !!(sample.xvial && sample.xvial !== '');\n  const materialLink = hasData ? (\n    <>\n      {analyticalLink ? ',' : ''}&nbsp;&nbsp;\n      <Button id=\"public-sample-material-link\" bsStyle=\"link\" onClick={handleMaterialLink}>\n        has a record as physically available material\n      </Button>\n    </>\n  ) : null;\n\n  return (\n    <div className=\"repo-public-sample-info\">\n      <b>Sample type: </b>{sampleTypeDescription}\n      <DecoupleInfo sample={sample} molecule={element.molecule} />\n      <br />\n      <Doi type=\"sample\" id={sample.id} doi={sample.doi} isPublished={isPublished} />\n      <ChemotionId id={pubData.id} type=\"sample\" />\n      {embargo}\n      <h5>\n        <b>Relations of this sample: </b>{reactionLink}{analyticalLink}{materialLink}\n      </h5>\n      <br />\n      <h5>\n        <span>\n          <b>Reference{references.length > 1 ? 's' : null} in the Literature: </b>\n          <CommentBtn {..._props} field=\"Reference\" orgInfo={referencesText} onShow={handleCommentBtn} />\n          <div><div>{references}</div></div>\n        </span>\n      </h5>\n      {\n        (!isPublished || showPhysicalProps) && (\n          <>\n          <br />\n          <div>\n            <b>Physical Properties:</b>\n            <CommentBtn {..._props} field=\"Physical Properties\" orgInfo={referencesPhysicalProp} onShow={handleCommentBtn} />\n            <div>Melting point: {meltingPoint}</div>\n            <div>Boiling point: {boilingPoint}</div>\n          </div>\n          </>\n        )\n      }\n    </div>\n  );\n};\n\nexport default PublicSample;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Jumbotron, Panel } from 'react-bootstrap';\nimport { AffiliationMap } from 'repo-review-ui';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport {\n  AffiliationList,\n  AnalysesTypeJoinLabel,\n  AuthorList,\n  CommentBtn,\n  ContributorInfo,\n  ClipboardCopyBtn,\n  IconToMyDB,\n  RenderPublishAnalysesPanel,\n  SidToPubChem,\n  ToggleIndicator,\n} from 'src/repoHome/RepoCommon';\nimport DateInfo from 'src/components/chemrepo/DateInfo';\nimport LicenseIcon from 'src/components/chemrepo/LicenseIcon';\nimport MAPanel from 'src/components/chemrepo/MoleculeArchive';\nimport StateLabel from 'src/components/chemrepo/common/StateLabel';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport PublicAnchor from 'src/components/chemrepo/PublicAnchor';\nimport PublicSample from 'src/components/chemrepo/PublicSample';\nimport PublicCommentModal from 'src/components/chemrepo/PublicCommentModal';\nimport RepoSegment from 'src/repoHome/RepoSegment';\nimport Sample from 'src/models/Sample';\nimport UserCommentModal from 'src/components/chemrepo/UserCommentModal';\nimport PublicLabels from 'src/components/chemrepo/PublicLabels';\nimport { ExtIcon, ExtInfo } from 'src/components/chemrepo/ExtIcon';\nimport NMRiumDisplayer from 'src/components/nmriumWrapper/NMRiumDisplayer';\nimport ViewSpectra from 'src/apps/mydb/elements/details/ViewSpectra';\n\nconst scrollView = () => {\n  const anchor = window.location.hash.split('#')[1];\n  if (anchor) {\n    const anchorElement = document.getElementById(anchor);\n    if (anchorElement) {\n      anchorElement.scrollIntoView({ block: 'start', behavior: 'auto' });\n    }\n  }\n};\nexport default class RepoSample extends Component {\n  constructor(props) {\n    super(props);\n    this.state = { expandSA: true };\n    this.panelRef = React.createRef();\n    this.materialRef = React.createRef();\n    this.handleAnalysesLink = this.handleAnalysesLink.bind(this);\n    this.handleMaterialLink = this.handleMaterialLink.bind(this);\n    this.toggleSA = this.toggleSA.bind(this);\n    this.renderAnalyses = this.renderAnalyses.bind(this);\n  }\n\n  componentDidMount() {\n    scrollView();\n  }\n\n  componentDidUpdate() {\n    scrollView();\n  }\n\n  handleAnalysesLink() {\n    this.panelRef.current.scrollIntoView({ behavior: 'smooth' });\n  }\n\n  handleMaterialLink() {\n    this.materialRef.current.scrollIntoView({ behavior: 'smooth' });\n  }\n\n  toggleSA() {\n    const { expandSA } = this.state;\n    this.setState({ expandSA: !expandSA });\n  }\n\n  updateRepoXvial(elementId) {\n    const { listType } = this.props;\n    PublicActions.displayMolecule(elementId, '', false, '', '', listType);\n    PublicActions.refreshPubElements(`Molecules=${listType}`);\n  }\n\n  renderAnalyses(analyses) {\n    const { sample } = this.props;\n    const specSample = new Sample(sample);\n    // specSample.container = sample.analyses;\n    const orderAnalyses = ArrayUtils.sortArrByIndex(analyses);\n    return orderAnalyses.map((analysis) => {\n      const userInfo =\n        (sample.ana_infos && sample.ana_infos[analysis.id]) || '';\n      const kind = (analysis.extended_metadata['kind'] || '')\n        .split('|')\n        .pop()\n        .trim();\n      return (\n        <span key={`analysis_${analysis.id}`}>\n          <CommentBtn\n            {...this.props}\n            field={`Analysis_${analysis.id}`}\n            orgInfo={kind}\n            onShow={this.props.handleCommentBtn}\n          />\n          <RenderPublishAnalysesPanel\n            key={analysis.id}\n            userInfo={userInfo}\n            analysis={analysis}\n            isPublic={this.props.isPublished}\n            isLogin={this.props.isLogin}\n            isReviewer={this.props.isReviewer}\n            type=\"Container\"\n            pageType=\"molecules\"\n            pageId={sample.molecule_id}\n            element={specSample}\n          />\n        </span>\n      );\n    });\n  }\n\n  render() {\n    const {\n      sample,\n      pubData,\n      tagData,\n      isPublished,\n      isLogin,\n      isCI,\n      isReviewer,\n      element,\n    } = this.props;\n    const { xvialCom } = element;\n    const { expandSA } = this.state;\n    const affiliationMap = AffiliationMap(sample.affiliation_ids);\n\n    const iupacUserDefined =\n      sample.showed_name == sample.molecule_iupac ||\n      sample.showed_name == null ? (\n        <span />\n      ) : (\n        <h5>\n          <b>Name: </b> {sample.showed_name}{' '}\n        </h5>\n      );\n    const userInfo = sample.pub_info || '';\n    const analysesContainer = sample.container.children?.find((container) => container?.container_type === 'analyses');\n    const analyses = analysesContainer?.children?.filter((container) => container?.container_type === 'analysis') || [];\n    let embargo = null;\n    let colDoiPrefix = sample?.doi || '';\n    colDoiPrefix =\n      typeof colDoiPrefix === 'object' ? sample.doi?.full_doi : colDoiPrefix;\n    colDoiPrefix = colDoiPrefix.split('/')[0];\n    if (sample.embargo) {\n      const embargoLink = isPublished\n        ? `/inchikey/collection/${sample.embargo}`\n        : `/embargo/sample/${sample.id}`;\n      embargo = (\n        <span>\n          <b>Access to the DOI and metadata for the whole data collection: </b>{' '}\n          &nbsp;\n          <Button\n            key=\"embargo-link-btn\"\n            bsStyle=\"link\"\n            href={embargoLink}\n            target=\"_blank\"\n            style={{ padding: '0px 0px' }}\n          >\n            <i className=\"fa fa-database\" />\n            &nbsp;&nbsp;{sample.embargo}\n          </Button>\n          <ClipboardCopyBtn\n            text={`https://dx.doi.org/${colDoiPrefix}/collection/${sample.embargo}`}\n            tooltip=\"retrieve and copy collection DOI\"\n          />\n        </span>\n      );\n    }\n    return (\n      <Jumbotron key={`sample-${sample.id}`}>\n        <PublicAnchor doi={sample.doi} isPublished={isPublished} />\n        <span className=\"repo-pub-sample-header\">\n          <span className=\"repo-pub-title\">\n            <IconToMyDB\n              isLogin={isLogin}\n              isCI={isCI}\n              isPublished={isPublished}\n              id={sample.id}\n              type=\"sample\"\n            />\n          </span>\n          &nbsp;\n          <span className=\"repo-pub-title\">\n            <DateInfo\n              isPublished={isPublished}\n              preText=\"Sample\"\n              pubData={pubData}\n              tagData={tagData}\n            />\n          </span>\n          &nbsp;\n          <SidToPubChem sid={sample.sid} />\n          &nbsp;\n          <span className=\"repo-public-user-comment\">\n            {ExtIcon(sample.embargo)}\n            <span>{PublicLabels(sample.labels)}</span>\n            <PublicCommentModal\n              isReviewer={isReviewer}\n              id={sample.id}\n              type=\"Sample\"\n              title={sample.showed_name}\n              userInfo={userInfo}\n              pageType=\"molecules\"\n              pageId={sample.molecule_id}\n            />\n            &nbsp;\n            <UserCommentModal\n              isPublished={isPublished}\n              isLogin={isLogin}\n              id={sample.id}\n              type=\"Sample\"\n              title={sample.showed_name}\n              pageType=\"molecules\"\n              pageId={sample.molecule_id}\n            />\n            &nbsp;\n          </span>\n          {StateLabel(sample.embargo)}\n        </span>\n        <br />\n        {iupacUserDefined}\n        <ContributorInfo contributor={sample.contributors} />\n        <h5>\n          <b>Author{sample.author_ids.length > 1 ? 's' : ''}: </b>\n          <AuthorList\n            creators={sample.creators}\n            affiliationMap={affiliationMap}\n          />\n        </h5>\n        <AffiliationList\n          affiliations={sample.affiliations}\n          affiliationMap={affiliationMap}\n        />\n        {ExtInfo(sample.embargo)}\n        <br />\n        <PublicSample\n          {...this.props}\n          embargo={embargo}\n          handleAnalysesLink={this.handleAnalysesLink}\n          handleMaterialLink={this.handleMaterialLink}\n        />\n        <br />\n        <div ref={this.materialRef}>\n          <MAPanel\n            compNum={sample.comp_num}\n            isEditable={isReviewer}\n            isLogin={isLogin}\n            allowRequest\n            elementId={sample.id}\n            data={sample.xvial}\n            saveCallback={() => this.updateRepoXvial(sample.molecule_id)}\n            xvialCom={xvialCom}\n          />\n          &nbsp;\n        </div>\n        <RepoSegment segments={sample.segments} isPublic={isPublished} />\n        <span className=\"repo-pub-sample-header\">\n          <div ref={this.panelRef}>\n            <ToggleIndicator\n              onClick={this.toggleSA}\n              name=\"Analyses\"\n              indicatorStyle={expandSA ? 'down' : 'right'}\n            />\n          </div>\n          <span\n            className=\"label\"\n            style={{ color: 'black', fontSize: 'smaller', fontWeight: 'bold' }}\n          >\n            {AnalysesTypeJoinLabel(\n              ArrayUtils.sortArrByIndex(analyses),\n              'Sample'\n            )}\n          </span>\n          <LicenseIcon\n            license={sample.license}\n            hasCoAuthors={sample.author_ids.length > 1}\n          />\n        </span>\n        <Panel\n          style={{ border: 'none' }}\n          id=\"collapsible-panel-sample-analyses\"\n          expanded={expandSA}\n          defaultExpanded={expandSA}\n          onToggle={() => {}}\n        >\n          <Panel.Collapse>\n            <Panel.Body\n              style={{\n                fontSize: '90%',\n                backgroundColor: '#f5f5f5',\n                padding: '4',\n              }}\n            >\n              {this.renderAnalyses(analyses)}\n            </Panel.Body>\n          </Panel.Collapse>\n        </Panel>\n        <NMRiumDisplayer\n          sample={sample}\n          handleSampleChanged={() => {}}\n          handleSubmit={() => {}}\n          readOnly\n        />\n        <ViewSpectra\n          sample={sample}\n          handleSampleChanged={() => {}}\n          handleSubmit={() => {}}\n          isPublic\n        />\n      </Jumbotron>\n    );\n  }\n}\n\nRepoSample.propTypes = {\n  sample: PropTypes.object.isRequired,\n  pubData: PropTypes.object.isRequired,\n  tagData: PropTypes.object.isRequired,\n  isPublished: PropTypes.bool.isRequired,\n  canComment: PropTypes.bool,\n  handleCommentBtn: PropTypes.func,\n  isLogin: PropTypes.bool,\n  isReviewer: PropTypes.bool,\n};\n\nRepoSample.defaultProps = {\n  canComment: false,\n  isLogin: false,\n  isReviewer: false,\n  handleCommentBtn: () => {},\n};\n","import React, { Component } from 'react';\nimport { Panel } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport { ClosePanel, MoleculeInfo } from 'src/repoHome/RepoCommon';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\nimport RepoReviewButtonBar from 'src/repoHome/RepoReviewButtonBar';\nimport RepoSample from 'src/repoHome/RepoSample';\nimport RepoConst from 'src/components/chemrepo/common/RepoConst';\nimport NMRiumDisplayer from 'src/components/nmriumWrapper/NMRiumDisplayer';\n\nexport default class RepoSampleDetails extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showReviewModal: false,\n      showCommentModal: false,\n      commentField: '',\n      originInfo: '',\n    };\n    this.handleReviewBtn = this.handleReviewBtn.bind(this);\n    this.handleCommentBtn = this.handleCommentBtn.bind(this);\n    this.handleSubmitReview = this.handleSubmitReview.bind(this);\n    // this.handleSubmitComment = this.handleSubmitComment.bind(this);\n  }\n\n  handleReviewBtn(showReviewModal, btnAction) {\n    ReviewActions.handleReviewModal(showReviewModal, btnAction);\n  }\n\n//  this.handleCommentBtn(this.state.showCommentModal, this.state.commentField, this.state.originInfo)}\n\n  handleCommentBtn(showCommentModal, commentField, originInfo) {\n    ReviewActions.handleCommentModal(showCommentModal, 'Comment', commentField, originInfo);\n  }\n  handleSubmitReview(elementId, comment, action, checklist, reviewComments) {\n    LoadingActions.start();\n    ReviewActions.reviewPublish(elementId, 'sample', comment, action, checklist, reviewComments);\n  }\n\n\n  render() {\n    const {\n      element,\n      isPublished,\n      canComment: propsCanComment,\n      review_info,\n      showComment,\n      review,\n      canClose,\n    } = this.props;\n    const { currentUser } = UserStore.getState();\n    const canComment =\n      currentUser?.type === RepoConst.U_TYPE.ANONYMOUS\n        ? false\n        : propsCanComment;\n\n    let { buttons } = this.props;\n\n    const history = review?.history || [];\n    if (typeof (element) === 'undefined' || !element) {\n      return <div />;\n    }\n    if (review_info?.groupleader === true && review_info?.preapproved !== true) {\n      buttons = ['Comments', 'Review', 'Approve'];\n    }\n\n    const {\n      molecule, isLogin, isCI, isReviewer, xvialCom, labels\n    } = element;\n\n    const idyLogin = typeof isLogin === 'undefined' ? true : isLogin;\n    const idyReview = typeof isReviewer === 'undefined' ? false : isReviewer;\n    let samples = [];\n    let pubData = {};\n    let tagData = {};\n    let { sample } = element;\n    let hasXvial = false;\n    if (isPublished) {\n      samples = element.published_samples;\n      sample = samples.find(x => x !== undefined) || {};\n      sample.id = sample.sample_id;\n      hasXvial = samples.filter(s => s !== undefined && s.xvial && s.xvial !== '').length > 0;\n    } else {\n      samples.push(element.sample);\n      pubData = element.publication;\n    }\n\n    tagData = (pubData?.taggable_data) || {};\n    const details = (samples || []).map((s) => {\n      if (isPublished) {\n        pubData = {\n          id: s.pub_id\n        };\n        tagData = {\n          published_at: s.published_at,\n          doi_reg_at: s.doi_reg_at\n        };\n      }\n\n      if (typeof s === 'undefined' || !s) {\n        console.log('Sample is undefined');\n        return null;\n      }\n\n      const el = {\n        id: s.id || s.sample_id,\n        decoupled: s.decoupled,\n        sid: s.sid,\n        short_label: s.short_label || '',\n        comp_num: s.comp_num || '',\n        xvial: s.xvial,\n        embargo: s.embargo,\n        pub_info: s.pub_info,\n        ana_infos: s.ana_infos,\n        affiliation_ids: s.affiliation_ids || tagData.affiliation_ids,\n        affiliations: s.affiliations || tagData.affiliations,\n        literatures: s.literatures || element.literatures,\n        license: s.license || tagData.license || 'CC BY-SA',\n        author_ids: s.author_ids || tagData.author_ids || [],\n        contributors: s.contributors || tagData.contributors,\n        creators: s.creators || tagData.creators,\n        doi: s.doi || element.doi,\n        reaction_ids: s.reaction_ids || [],\n        showed_name: s.showed_name,\n        molecule_iupac: molecule.iupac_name || [],\n        molecule_id: molecule.id,\n        container: s.container || element.analyses || {},\n        segments: s.segments || [],\n        boiling_point: s.boiling_point || '',\n        melting_point: s.melting_point || '',\n        labels: (isPublished ? s.labels : labels) || [],\n        molecular_mass: s.molecular_mass || '',\n        sum_formula: s.sum_formula || '',\n        molecule: s.molecule || '',\n        sample_svg_file: s.sample_svg_file || '',\n        molfile: s.molfile || '',\n      };\n\n      return (\n        <RepoSample\n          key={el.id}\n          sample={el}\n          pubData={pubData}\n          tagData={tagData}\n          handleCommentBtn={this.handleCommentBtn}\n          isLogin={idyLogin}\n          isCI={!!isCI}\n          isReviewer={idyReview}\n          {...this.props}\n        />\n      );\n    });\n\n    return (\n      <Panel style={{ border: 'none' }} >\n        <Panel.Body>\n          {\n            canComment ?\n              <RepoReviewButtonBar\n                element={{ id: sample.id, elementType: 'Sample', user_labels: sample.user_labels }}\n                buttonFunc={this.handleReviewBtn}\n                review_info={review_info}\n                showComment={showComment}\n                currComment={(history && history.slice(-1).pop()) || {}}\n                buttons={buttons}\n                taggData={tagData}\n              /> : null\n          }\n          <MoleculeInfo molecule={molecule} sample_svg_file={sample.sample_svg_file} hasXvial={hasXvial} xvialCom={xvialCom}>\n            {canClose ? <ClosePanel element={sample} /> : null}\n          </MoleculeInfo>\n          <div>\n            {details}\n          </div>\n          {/* {\n            canComment ?\n              <div>\n                <RepoCommentModal\n                  show={this.state.showCommentModal}\n                  elementId={sample.id}\n                  elementType=\"Sample\"\n                  field={this.state.commentField}\n                  orgInfo={this.state.originInfo}\n                  review_info={review_info}\n                  review={review || {}}\n                  onUpdate={this.handleSubmitComment}\n                  onHide={() => this.setState({ showCommentModal: false })}\n                />\n              </div> : ''\n          } */}\n          <NMRiumDisplayer\n            sample={element}\n            handleSampleChanged={() => {}}\n            handleSubmit={() => {}}\n            readOnly\n          />\n        </Panel.Body>\n      </Panel>\n    );\n  }\n}\n\nRepoSampleDetails.propTypes = {\n  element: PropTypes.object.isRequired,\n  isPublished: PropTypes.bool,\n  canComment: PropTypes.bool,\n  btnAction: PropTypes.string,\n  review_info: PropTypes.object,\n  showComment: PropTypes.bool,\n  review: PropTypes.object,\n  canClose: PropTypes.bool,\n  buttons: PropTypes.arrayOf(PropTypes.string),\n  onReviewUpdate: PropTypes.func,\n};\n\nRepoSampleDetails.defaultProps = {\n  isPublished: false,\n  canComment: false,\n  btnAction: '',\n  review_info: {},\n  showComment: true,\n  review: {},\n  canClose: true,\n  buttons: ['Decline', 'Comments', 'Review', 'Submit', 'Accept'],\n  onReviewUpdate: () => {},\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { LayerPlain } from 'chem-generic-ui-viewer';\nimport { ToggleIndicator } from 'src/repoHome/RepoCommon';\n\nconst listSegment = props => {\n  const [toggle, setToggle] = useState(true);\n  const data = toggle ? (\n    <LayerPlain\n      layers={props.properties.layers}\n      options={props.properties.select_options || {}}\n      id={props.idx}\n      isPublic={props.isPublic}\n    />\n  ) : (\n    <div />\n  );\n  return (\n    <span key={`_repo_sample_sg.id_${props.id}`}>\n      <ToggleIndicator\n        onClick={() => setToggle(!toggle)}\n        name={props.klass_label}\n        indicatorStyle={toggle ? 'down' : 'right'}\n      />\n      {data}\n    </span>\n  );\n};\n\nfunction RepoSegment(props) {\n  const { segments, isPublic } = props;\n  if (segments.length < 1) return null;\n  return (\n    <div className=\"generic_segments_repo\">\n      {segments.map((s, idx) => listSegment({ ...s, idx, isPublic }))}\n    </div>\n  );\n}\n\nRepoSegment.propTypes = {\n  segments: PropTypes.oneOfType([PropTypes.array]),\n  isPublic: PropTypes.bool,\n};\nRepoSegment.defaultProps = { segments: [], isPublic: false };\n\nexport default RepoSegment;\n","import alt from 'src/stores/alt/alt';\nimport SamplesFetcher from 'src/fetchers/SamplesFetcher';\nimport WellplatesFetcher from 'src/fetchers/WellplatesFetcher';\n\n\nclass ClipboardActions {\n  fetchSamplesByUIStateAndLimit(params, action) {\n    return (dispatch) => {\n      SamplesFetcher.fetchSamplesByUIStateAndLimit(params)\n        .then((result) => {\n          dispatch({ samples: result, collection_id: params.sample.collection_id, action: action });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchWellplatesByUIState(params, action) {\n    return (dispatch) => {\n      WellplatesFetcher.fetchWellplatesByUIState(params)\n        .then((result) => {\n          dispatch({ wellplates: result, collection_id: params.wellplate.collection_id, action: action });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchElementAndBuildCopy(sample, collection_id, action) {\n    sample.collection_id = collection_id;\n    return (\n      { samples: [sample], collection_id: collection_id, action: action }\n    )\n  }\n}\nexport default alt.createActions(ClipboardActions);\n","import alt from 'src/stores/alt/alt';\nimport CollectionsFetcher from 'src/fetchers/CollectionsFetcher';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport Utils from 'src/utilities/Functions';\n\nclass CollectionActions {\n  fetchGenericEls() {\n    return (dispatch) => {\n      UsersFetcher.fetchElementKlasses()\n        .then((roots) => {\n          dispatch(roots);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  takeOwnership(params) {\n    return (dispatch) => {\n      CollectionsFetcher.takeOwnership(params)\n        .then((roots) => {\n          dispatch(roots);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  // TODO #2...centralized error handling maybe ErrorActions?\n  fetchLockedCollectionRoots() {\n    return (dispatch) => {\n      CollectionsFetcher.fetchLockedRoots()\n        .then((roots) => {\n          dispatch(roots);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchUnsharedCollectionRoots() {\n    return (dispatch) => {\n      CollectionsFetcher.fetchUnsharedRoots()\n        .then((roots) => {\n          dispatch(roots);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchSharedCollectionRoots() {\n    return (dispatch) => {\n      CollectionsFetcher.fetchSharedRoots()\n        .then((roots) => {\n          dispatch(roots);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchRemoteCollectionRoots() {\n    return (dispatch) => {\n      CollectionsFetcher.fetchRemoteRoots()\n        .then((roots) => {\n          dispatch(roots);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchSyncInCollectionRoots() {\n    return (dispatch) => {\n      CollectionsFetcher.fetchSyncRemoteRoots()\n        .then((roots) => {\n          dispatch(roots);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  createSharedCollections(params) {\n    return (dispatch) => {\n      CollectionsFetcher.createSharedCollections(params)\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  createTabsSegment(params) {\n    return (dispatch) => {\n      CollectionsFetcher.createTabsSegment(params)\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  updateTabsSegment(params) {\n    return (dispatch) => {\n      CollectionsFetcher.updateTabsLayout(params)\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  bulkUpdateUnsharedCollections(params) {\n    return (dispatch) => {\n      CollectionsFetcher.bulkUpdateUnsharedCollections(params)\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  updateSharedCollection(params) {\n    return (dispatch) => {\n      CollectionsFetcher.updateSharedCollection(params)\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  createUnsharedCollection(params) {\n    return (dispatch) => {\n      CollectionsFetcher.createUnsharedCollection(params)\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  createSync(params) {\n    return (dispatch) => {\n      CollectionsFetcher.createSync(params)\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  editSync(params) {\n    return (dispatch) => {\n      CollectionsFetcher.editSync(params)\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n  deleteSync(params) {\n    return (dispatch) => {\n      CollectionsFetcher.deleteSync(params)\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n  rejectSync(params) {\n    return (dispatch) => {\n      CollectionsFetcher.deleteSync(params)\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n  rejectShared(params) {\n    return (dispatch) => {\n      CollectionsFetcher.rejectShared(params)\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  updateCollectrionTree(visibleRootsIds) {\n    return visibleRootsIds\n  }\n\n  downloadReport(tab) {\n    const { currentCollection } = UIStore.getState();\n\n    Utils.downloadFile({ contents: \"/api/v1/reports/excel?id=\" + currentCollection.id + \"&tab=\" + tab });\n  }\n\n  exportCollectionsToFile(params) {\n    return (dispatch) => {\n      CollectionsFetcher.createExportJob(params)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  importCollectionsFromFile(params) {\n    return (dispatch) => {\n      CollectionsFetcher.createImportJob(params)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n}\n\nexport default alt.createActions(CollectionActions);\n","import alt from 'src/stores/alt/alt'\nimport _ from 'lodash'\nimport MoleculesFetcher from 'src/fetchers/MoleculesFetcher'\n\nclass DetailActions {\n  select(index) {\n    return index\n  }\n\n  close(deleteEl, force = false) {\n    return { deleteEl, force }\n  }\n\n  confirmDelete(confirm) {\n    return confirm\n  }\n\n  changeCurrentElement(oriEl, nextEl) {\n    return { oriEl, nextEl }\n  }\n\n  getMoleculeCas(sample) {\n    return (dispatch) => {\n      MoleculesFetcher.fetchCas(sample.molecule.inchikey)\n        .then((result) => {\n          sample.molecule = result\n          dispatch(sample)\n        }).catch((errorMessage) => {\n          console.log(errorMessage)\n        })\n    }\n  }\n\n  updateMoleculeNames(sample, newMolName = '') {\n    const inchikey = sample.molecule.inchikey;\n    if (!inchikey) { return null; }\n\n    return (dispatch) => {\n      MoleculesFetcher\n        .updateNames(inchikey, newMolName)\n        .then((result) => {\n          const mn = result.find(r => r.name === newMolName);\n          if (mn) sample.molecule_name = { label: mn.name, value: mn.id };\n          sample.molecule_names = result;\n          dispatch(sample);\n        })\n        .catch(errorMessage => console.log(errorMessage));\n    };\n  }\n\n  updateMoleculeCas(sample, newCas = '') {\n    const m = sample.molecule;\n    m.cas = [...m.cas, newCas];\n    sample.molecule = m;\n    return sample;\n  }\n}\n\nexport default alt.createActions(DetailActions)\n","import Element from 'src/models/Element';\n\nexport default class Report extends Element {\n  static buildEmpty() {\n    let report = new Report({\n      type: 'report'\n    });\n\n    return report;\n  }\n}\n","import Element from 'src/models/Element';\n\nexport default class Format extends Element {\n  static buildEmpty() {\n    return new Format({ type: 'format' });\n  }\n}\n","import Element from 'src/models/Element';\n\nexport default class Graph extends Element {\n  static buildEmptyScatter() {\n    return new Graph({ type: 'graph', graphType: 'scatter' });\n  }\n}\n","import Element from 'src/models/Element';\n\nexport default class ComputeTask extends Element {\n  static buildEmpty() {\n    return new ComputeTask({ type: 'task' });\n  }\n}\n","import Element from 'src/models/Element';\n\nexport default class DeviceControl extends Element {\n\n  static buildEmpty() {\n    return new DeviceControl({\n      type: 'deviceCtrl',\n    })\n  }\n\n}\n","import Element from 'src/models/Element';\n\nexport default class Prediction extends Element {\n  static buildEmpty() {\n    const prediction = new Prediction({\n      type: 'prediction',\n    });\n\n    return prediction;\n  }\n}\n","/* eslint-disable class-methods-use-this */\nimport alt from 'src/stores/alt/alt';\n\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UserActions from 'src/stores/alt/actions/UserActions';\n\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport UIFetcher from 'src/fetchers/UIFetcher';\nimport SamplesFetcher from 'src/fetchers/SamplesFetcher';\nimport MoleculesFetcher from 'src/fetchers/MoleculesFetcher';\nimport ReactionsFetcher from 'src/fetchers/ReactionsFetcher';\nimport WellplatesFetcher from 'src/fetchers/WellplatesFetcher';\nimport CellLinesFetcher from 'src/fetchers/CellLinesFetcher';\nimport CollectionsFetcher from 'src/fetchers/CollectionsFetcher';\nimport ScreensFetcher from 'src/fetchers/ScreensFetcher';\nimport ResearchPlansFetcher from 'src/fetchers/ResearchPlansFetcher';\nimport SearchFetcher from 'src/fetchers/SearchFetcher';\nimport DeviceFetcher from 'src/fetchers/DeviceFetcher';\nimport ContainerFetcher from 'src/fetchers/ContainerFetcher';\nimport GenericElsFetcher from 'src/fetchers/GenericElsFetcher';\nimport PrivateNoteFetcher from 'src/fetchers/PrivateNoteFetcher'\nimport MetadataFetcher from 'src/fetchers/MetadataFetcher';\n\nimport GenericEl from 'src/models/GenericEl';\nimport Sample from 'src/models/Sample';\nimport Reaction from 'src/models/Reaction';\nimport Wellplate from 'src/models/Wellplate';\nimport CellLine from 'src/models/cellLine/CellLine';\nimport Screen from 'src/models/Screen';\nimport ResearchPlan from 'src/models/ResearchPlan';\nimport Report from 'src/models/Report';\nimport Format from 'src/models/Format';\nimport Graph from 'src/models/Graph';\nimport ComputeTask from 'src/models/ComputeTask';\nimport DeviceControl from 'src/models/DeviceControl';\nimport LiteratureMap from 'src/models/LiteratureMap';\nimport Prediction from 'src/models/Prediction';\nimport ReactionSvgFetcher from 'src/fetchers/ReactionSvgFetcher';\nimport Metadata from 'src/models/Metadata';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nimport _ from 'lodash';\n\nconst handleFetch = (dispatch, fetch) => {\n  return fetch()\n    .then((result) => {\n      dispatch(result)\n    })\n    .catch((errorMessage) => {\n      console.log(errorMessage)\n    })\n}\n\nclass ElementActions {\n  exportElement(element, klass, exportFormat) {\n    return (dispatch) => {\n      GenericElsFetcher.export(element, klass, exportFormat)\n        .then((result) => {\n          dispatch({ element: result });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n  // -- Devices --\n  fetchAllDevices() {\n    return (dispatch) => handleFetch(dispatch, () => DeviceFetcher.fetchAll())\n  }\n\n  fetchDeviceById(deviceId) {\n    return (dispatch) => handleFetch(dispatch, () => DeviceFetcher.fetchById(deviceId))\n  }\n\n  createDevice() {\n    return null\n  }\n\n  changeActiveAccordionDevice(key) {\n    return (dispatch) => dispatch(key)\n  }\n\n  changeSelectedDeviceId(device) {\n    return (dispatch) => handleFetch(dispatch, () => DeviceFetcher.changeSelectedDevice(device))\n  }\n\n  setSelectedDeviceId(deviceId) {\n    return (dispatch) => dispatch(deviceId)\n  }\n\n  setRefreshCoefficient(id, coefficient, rId) {\n    const obj = { sId: id, rId, coefficient };\n    return (dispatch) => dispatch({ obj });\n  }\n\n  toggleDeviceType(device, type) {\n    return (dispatch) => dispatch({ device, type })\n  }\n\n  saveDevice(device) {\n    if (device.isNew) {\n      return (dispatch) => handleFetch(dispatch, () => DeviceFetcher.create(device))\n    } else {\n      return (dispatch) => handleFetch(dispatch, () => DeviceFetcher.update(device))\n    }\n  }\n\n  deleteDevice(device) {\n    if (!device.isNew) {\n      DeviceFetcher.delete(device)\n    }\n    return (dispatch) => dispatch(device)\n  }\n\n  addSampleToDevice(sample, device, options) {\n    return (dispatch) => dispatch({ sample, device, options })\n  }\n\n  addSampleWithAnalysisToDevice(sample, analysis, device) {\n    return (dispatch) => dispatch({ sample, analysis, device })\n  }\n\n  removeSampleFromDevice(sample, device) {\n    return (dispatch) => dispatch({ sample, device })\n  }\n\n  toggleTypeOfDeviceSample(device, sample, type) {\n    return (dispatch) => dispatch({ device, sample, type })\n  }\n\n  changeDeviceProp(device, prop, value) {\n    return (dispatch) => dispatch({ device, prop, value })\n  }\n\n  fetchDeviceAnalysisById(analysisId) {\n    return (dispatch) => {\n      DeviceFetcher.fetchAnalysisById(analysisId)\n        .then(analysis => {\n          DeviceFetcher.fetchById(analysis.deviceId)\n            .then(device => {\n              dispatch({ analysis, device })\n            })\n        })\n    }\n  }\n\n  openDeviceAnalysis(device, type) {\n    return (dispatch) => dispatch({ device, type })\n  }\n\n  saveDeviceAnalysis(analysis) {\n    if (analysis.isNew) {\n      return (dispatch) => handleFetch(dispatch, () => DeviceFetcher.createAnalysis(analysis))\n    } else {\n      return (dispatch) => handleFetch(dispatch, () => DeviceFetcher.updateAnalysis(analysis))\n    }\n  }\n\n  createDeviceAnalysis(deviceId, analysisType) {\n    return (dispatch) => {\n      DeviceFetcher.fetchById(deviceId)\n        .then((device) => {\n          dispatch({ device, analysisType })\n        })\n    }\n  }\n\n  generateExperimentConfig(experiment) {\n    return (dispatch) =>\n      handleFetch(dispatch, () => DeviceFetcher.generateExperimentConfig(experiment))\n  }\n\n  duplicateAnalysisExperiment(analysis, experiment) {\n    return (dispatch) =>\n      DeviceFetcher.fetchById(analysis.deviceId)\n        .then((device) => {\n          dispatch({ device, analysis, experiment })\n        })\n  }\n\n  changeAnalysisExperimentProp(analysis, experiment, prop, value) {\n    return (dispatch) => dispatch({ analysis, experiment, prop, value })\n  }\n\n  deleteAnalysisExperiment(analysis, experiment) {\n    return (dispatch) =>\n      DeviceFetcher.fetchById(analysis.deviceId)\n        .then((device) => {\n          dispatch({ device, analysis, experiment })\n        })\n  }\n\n  showDeviceControl() {\n    return DeviceControl.buildEmpty()\n  }\n\n  // -- Search --\n\n  fetchBasedOnSearchSelectionAndCollection(params) {\n    let uid;\n    NotificationActions.add({\n      title: \"Searching ...\",\n      level: \"info\",\n      position: \"tc\",\n      onAdd: function (notificationObject) { uid = notificationObject.uid; }\n    });\n    return (dispatch) => {\n      SearchFetcher.fetchBasedOnSearchSelectionAndCollection(params)\n        .then((result) => {\n          dispatch(result);\n          NotificationActions.removeByUid(uid);\n        }).catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  fetchBasedOnSearchResultIds(params) {\n    let uid;\n    NotificationActions.add({\n      title: \"Searching ...\",\n      level: \"info\",\n      position: \"tc\",\n      onAdd: function (notificationObject) { uid = notificationObject.uid; }\n    });\n    return (dispatch) => {\n      SearchFetcher.fetchBasedOnSearchResultIds(params)\n        .then((result) => {\n          dispatch(result);\n          NotificationActions.removeByUid(uid);\n        }).catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  dispatchSearchResult(result) {\n    return (dispatch) => {\n      dispatch(result);\n    }\n  }\n\n  // -- Generic --\n  fetchGenericElsByCollectionId(id, queryParams = {}, collectionIsSync = false, elementType) {\n    return (dispatch) => {\n      GenericElsFetcher.fetchByCollectionId(id, queryParams, collectionIsSync)\n        .then((result) => { dispatch({ result, type: elementType }); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  generateEmptyGenericEl(collectionId, type) {\n    return (dispatch) => {\n      GenericElsFetcher.fetchElementKlass(type)\n        .then((result) => { dispatch(GenericEl.buildEmpty(collectionId, result.klass)); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  fetchGenericElById(id, type) {\n    return (dispatch) => {\n      GenericElsFetcher.fetchById(id)\n        .then((result) => { dispatch(result); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  createGenericEl(params) {\n    return (dispatch) => {\n      GenericElsFetcher.create(params)\n        .then((result) => { dispatch(result); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  updateGenericEl(params) {\n    return (dispatch) => {\n      GenericElsFetcher.update(params)\n        .then((result) => { dispatch(result); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  splitElements(ui_state, name) {\n    return (dispatch) => {\n      GenericElsFetcher.split(ui_state, name)\n        .then((result) => {\n          dispatch({ui_state: ui_state, name: name});\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n  \n  fetchSamplesByCollectionId(id, queryParams = {}, collectionIsSync = false,\n    moleculeSort = false) {\n    return (dispatch) => {\n      SamplesFetcher.fetchByCollectionId(id, queryParams, collectionIsSync, moleculeSort)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchReactionsByCollectionId(id, queryParams = {}, collectionIsSync = false) {\n    return (dispatch) => {\n      ReactionsFetcher.fetchByCollectionId(id, queryParams, collectionIsSync)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchWellplatesByCollectionId(id, queryParams = {}, collectionIsSync = false) {\n    return (dispatch) => {\n      WellplatesFetcher.fetchByCollectionId(id, queryParams, collectionIsSync)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchScreensByCollectionId(id, queryParams = {}, collectionIsSync = false) {\n    return (dispatch) => {\n      ScreensFetcher.fetchByCollectionId(id, queryParams, collectionIsSync)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n\n  fetchResearchPlansByCollectionId(id, queryParams = {}, collectionIsSync = false) {\n    return (dispatch) => {\n      ResearchPlansFetcher.fetchByCollectionId(id, queryParams, collectionIsSync)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n  fetchCellLinesByCollectionId(id, queryParams = {}, collectionIsSync = false) {\n    return (dispatch) => {\n      CellLinesFetcher.fetchByCollectionId(id, queryParams, collectionIsSync)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  // -- Samples --\n\n  fetchSampleById(id) {\n    return (dispatch) => {\n      SamplesFetcher.fetchById(id)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  createSample(params, closeView = false) {\n    return (dispatch) => {\n      SamplesFetcher.create(params)\n        .then((result) => {\n          dispatch({ element: result, closeView })\n        });\n    };\n  }\n\n  createSampleForReaction(sample, reaction, materialGroup) {\n    return (dispatch) => {\n      SamplesFetcher.create(sample)\n        .then((newSample) => {\n          dispatch({ newSample, reaction, materialGroup })\n        });\n    };\n  }\n\n  handleSvgReactionChange(reaction) {\n    const materialsSvgPaths = {\n      starting_materials: reaction.starting_materials.map(material => material.svgPath),\n      reactants: reaction.reactants.map(material => material.svgPath),\n      products: reaction.products.map(material => [material.svgPath, material.equivalent])\n    };\n\n    const solvents = reaction.solvents.map((s) => {\n      const name = s.preferred_label;\n      return name;\n    }).filter(s => s);\n\n    let temperature = reaction.temperature_display;\n    if (/^[\\-|\\d]\\d*\\.{0,1}\\d{0,2}$/.test(temperature)) {\n      temperature = `${temperature} ${reaction.temperature.valueUnit}`;\n    }\n\n    return () => {\n      ReactionSvgFetcher.fetchByMaterialsSvgPaths(materialsSvgPaths, temperature, solvents, reaction.duration, reaction.conditions)\n        .then((result) => {\n          reaction.reaction_svg_file = result.reaction_svg;\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  editReactionSample(reactionID, sampleID) {\n    return (dispatch) => {\n      SamplesFetcher.fetchById(sampleID)\n        .then((result) => {\n          dispatch({ sample: result, reaction: reactionID });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  updateSampleForReaction(sample, reaction, closeView = true) {\n    return (dispatch) => {\n      SamplesFetcher.update(sample)\n        .then((newSample) => {\n          reaction.updateMaterial(newSample);\n          reaction.changed = true;\n          dispatch({ reaction, sample: newSample, closeView })\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  updateSample(params, closeView = false) {\n    return (dispatch) => {\n      SamplesFetcher.update(params)\n        .then((result) => {\n          dispatch({ element: result, closeView })\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  generateEmptySample(collection_id) {\n    return Sample.buildEmpty(collection_id)\n  }\n\n  tryFetchCellLineElById(cellLineId) {\n    return (dispatch) => {\n      CellLinesFetcher.fetchById(cellLineId)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  createCellLine(params){\n    return (dispatch) => {\n      const { currentUser } = UserStore.getState();\n      CellLinesFetcher.create(params,currentUser)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  generateEmptyCellLine(collectionId,template){\n    const { currentUser } = UserStore.getState();\n    if (!currentUser) {return }\n\n    const cellLineSample= CellLine.buildEmpty(collectionId,`${currentUser.initials}-C${currentUser.cell_lines_count}`);\n    if(template){\n      cellLineSample.copyMaterialFrom(template);\n    }\n    return cellLineSample;\n  }\n\n  copyCellLineFromId(id,collectionId ) {\n    return (dispatch) => {\n      CellLinesFetcher.copyCellLine(id,collectionId)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  splitAsSubsamples(ui_state) {\n    return (dispatch) => {\n      SamplesFetcher.splitAsSubsamples(ui_state)\n        .then((result) => {\n          dispatch(ui_state);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  copySampleFromClipboard(collection_id) {\n    return collection_id;\n  }\n\n  addSampleToMaterialGroup(params) {\n    return params;\n  }\n\n  showReactionMaterial(params) {\n    const sampleCoefficient = params.sample.coefficient;\n    return (dispatch) => {\n      SamplesFetcher.fetchById(params.sample.id)\n        .then((result) => {\n          params.coefficient = sampleCoefficient;\n          params.sample = result;\n          dispatch(params);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        })\n    }\n  }\n\n  importSamplesFromFile(params) {\n    return (dispatch) => {\n      SamplesFetcher.importSamplesFromFile(params)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  importSamplesFromFileConfirm(params) {\n    return (dispatch) => {\n      SamplesFetcher.importSamplesFromFileConfirm(params)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  // -- Molecules --\n\n  fetchMoleculeByMolfile(molfile, svg_file = null) {\n    return (dispatch) => {\n      MoleculesFetcher.fetchByMolfile(molfile, svg_file)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  // -- Reactions --\n\n  fetchReactionById(id) {\n    return (dispatch) => {\n      ReactionsFetcher.fetchById(id)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  tryFetchReactionById(id) {\n    return (dispatch) => {\n      ReactionsFetcher.fetchById(id)\n        .then((result) => {\n          dispatch(result)\n        }).catch((errorMessage) => {\n          console.log(errorMessage)\n        })\n    }\n  }\n\n  tryFetchWellplateById(id) {\n    return (dispatch) => {\n      WellplatesFetcher.fetchById(id)\n        .then((result) => {\n          dispatch(result)\n        }).catch((errorMessage) => {\n          console.log(errorMessage)\n        })\n    }\n  }\n\n  tryFetchGenericElById(id) {\n    return (dispatch) => {\n      GenericElsFetcher.fetchById(id)\n        .then((result) => {\n          dispatch(result)\n        }).catch((errorMessage) => {\n          console.log(errorMessage)\n        })\n    }\n  }\n  closeWarning() {\n    return null\n  }\n\n  createReaction(params) {\n    return (dispatch) => {\n      ReactionsFetcher.create(params)\n        .then((result) => {\n          dispatch(result)\n        });\n    };\n  }\n\n  updateReaction(params, closeView = false) {\n    return (dispatch) => {\n      ReactionsFetcher.update(params)\n        .then((result) => {\n          dispatch({ element: result, closeView })\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  generateEmptyReaction(collection_id) {\n    return Reaction.buildEmpty(collection_id)\n  }\n\n  copyReactionFromId(id) {\n    return (dispatch) => {\n      ReactionsFetcher.fetchById(id)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  copyReaction(reaction, colId) {\n    return (dispatch) => {\n      ReactionsFetcher.fetchById(reaction.id)\n        .then((result) => {\n          dispatch({ reaction: result, colId: colId });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  copyResearchPlan(research_plan, colId) {\n    return (dispatch) => {\n      ResearchPlansFetcher.fetchById(research_plan.id)\n        .then((result) => {\n          dispatch({ research_plan: result, colId: colId });\n        }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    };\n  }\n\n  copyElement(element, colId) {\n    return (\n      { element: element, colId: colId }\n    )\n  }\n\n  openReactionDetails(reaction) {\n    return reaction;\n  }\n\n  // -- Wellplates --\n  splitAsSubwellplates(ui_state) {\n    return (dispatch) => {\n      WellplatesFetcher.splitAsSubwellplates(ui_state)\n        .then((result) => {\n          dispatch(ui_state);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n    splitAsSubCellLines(ui_state) {\n      return (dispatch) => {\n        const ids = ui_state[\"cell_line\"].checkedIds.toArray();\n        const collection_id = ui_state.currentCollection.id;\n        \n        CellLinesFetcher.splitAsSubCellLines(ids,collection_id)\n          .then((result) => {\n            dispatch(ui_state);\n          }).catch((errorMessage) => {\n            console.log(errorMessage);\n          });\n      };\n    }\n\n  bulkCreateWellplatesFromSamples(params) {\n    let { collection_id, samples, wellplateCount } = params;\n\n    // wellplateCount correction\n    if (wellplateCount > Math.ceil(samples.length / 96)) {\n      wellplateCount = Math.ceil(samples.length / 96)\n    }\n\n    // build wellplate objects from samples\n    let wellplates = [];\n    _.range(wellplateCount).forEach((i) => {\n      wellplates[i] = Wellplate.buildFromSamplesAndCollectionId(_.compact(samples.slice(96 * i, 96 * (i + 1))), collection_id).serialize();\n    });\n\n    return (dispatch) => {\n      WellplatesFetcher.bulkCreateWellplates({ wellplates: wellplates })\n        .then(() => {\n          dispatch();\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  generateWellplateFromClipboard(collection_id) {\n    return collection_id;\n  }\n\n  generateEmptyWellplate(collection_id) {\n    return Wellplate.buildEmpty(collection_id);\n  }\n\n  createWellplate(wellplate) {\n    return (dispatch) => {\n      WellplatesFetcher.create(wellplate)\n        .then(result => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  editWellplateSample(wellplateID, sampleID) {\n    return (dispatch) => {\n      SamplesFetcher.fetchById(sampleID)\n        .then((result) => {\n          dispatch({ sample: result, wellplate: wellplateID });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  updateWellplate(wellplate) {\n    return (dispatch) => {\n      WellplatesFetcher.update(wellplate)\n        .then(result => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  updateSampleForWellplate(sample, wellplate) {\n    return (dispatch) => {\n      SamplesFetcher.update(sample)\n        .then((newSample) => {\n          dispatch(wellplate)\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchWellplateById(id) {\n    return (dispatch) => {\n      WellplatesFetcher.fetchById(id)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  importWellplateSpreadsheet(wellplateId, attachmentId) {\n    return (dispatch) => {\n      WellplatesFetcher.importWellplateSpreadsheet(wellplateId, attachmentId)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n\n  // -- Screens --\n  addResearchPlanToScreen(screen_id, collection_id, afterComplete = () => {}) {\n    return (dispatch) => {\n      ScreensFetcher.addResearchPlan(screen_id, collection_id)\n        .then(result => dispatch(result.screen))\n        .then(() => { afterComplete(); })\n        .catch(errorMessage => console.log(errorMessage));\n    };\n  }\n\n  generateScreenFromClipboard(collection_id) {\n    return collection_id;\n  }\n\n\n  fetchScreenById(id) {\n    return (dispatch) => {\n      ScreensFetcher.fetchById(id)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  generateEmptyScreen(collection_id) {\n    return Screen.buildEmpty(collection_id);\n  }\n\n  createScreen(params) {\n    return (dispatch) => {\n      ScreensFetcher.create(params)\n        .then(result => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  updateScreen(params) {\n    return (dispatch) => {\n      ScreensFetcher.update(params)\n        .then(result => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  // -- ResearchPlans --\n\n  fetchResearchPlanById(id) {\n    return (dispatch) => {\n      ResearchPlansFetcher.fetchById(id)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  updateCellLine(params){\n      return (dispatch) => {\n        CellLinesFetcher.update(params)\n          .then((result) => {\n            dispatch(result);\n          }).catch((errorMessage) => {\n            console.log(errorMessage);\n          });\n      };\n  }\n\n  updateResearchPlan(params) {\n    return (dispatch) => {\n      ResearchPlansFetcher.update(params)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  updateEmbeddedResearchPlan(params) {\n    return (dispatch) => { dispatch(params); };\n  }\n\n  generateEmptyResearchPlan(collection_id) {\n    return ResearchPlan.buildEmpty(collection_id);\n  }\n\n  createResearchPlan(params) {\n    return (dispatch) => {\n      ResearchPlansFetcher.create(params)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  importWellplateIntoResearchPlan(researchPlanId, wellplateId, afterComplete = () => {}) {\n    return (dispatch) => {\n      ResearchPlansFetcher.importWellplate(researchPlanId, wellplateId)\n        .then((result) => { dispatch(result); })\n        .then(() => { afterComplete(); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  importTableFromSpreadsheet(researchPlanId, attachmentId, afterComplete = () => {}) {\n    return (dispatch) => {\n      ResearchPlansFetcher.importTableFromSpreadsheet(researchPlanId, attachmentId)\n        .then((result) => { dispatch(result); })\n        .then(() => { afterComplete(); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  // -- DataCite/Radar metadata --\n\n  fetchMetadata(collection_id) {\n    return (dispatch) => {\n      return MetadataFetcher.fetch(collection_id)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  storeMetadata(metadata) {\n    return (dispatch) => {\n      return MetadataFetcher.store(metadata)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  // -- Report --\n  showReportContainer() {\n    return Report.buildEmpty()\n  }\n\n  showFormatContainer() {\n    return Format.buildEmpty();\n  }\n\n  showComputedPropsGraph() {\n    return Graph.buildEmptyScatter();\n  }\n\n  showComputedPropsTasks() {\n    return ComputeTask.buildEmpty();\n  }\n\n  showLiteratureDetail() {\n    return LiteratureMap.buildEmpty();\n  }\n\n  // -- Prediction --\n  showPredictionContainer() {\n    return Prediction.buildEmpty();\n  }\n\n  // -- General --\n\n  refreshElements(type) {\n    return type;\n  }\n\n  deleteElements(options) {\n    return (dispatch) => {\n      dispatch(options);\n      UIActions.uncheckWholeSelection();\n      UserActions.fetchCurrentUser();\n    }\n  }\n\n  removeElements() {\n    return;\n  }\n\n  // Current Element\n  setCurrentElement(newCurrentElement) {\n    return newCurrentElement;\n  }\n\n  deselectCurrentElement() {\n    return null;\n  }\n\n  // - ...\n  deleteElementsByUIState(params) {\n    return (dispatch) => {\n      UIFetcher.fetchByUIState(params, 'DELETE')\n        .then((result) => { dispatch(result); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  updateElementsCollection(params) {\n    return (dispatch) => {\n      CollectionsFetcher.updateElementsCollection(params)\n        .then(() => { dispatch(); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  assignElementsCollection(params) {\n    return (dispatch) => {\n      CollectionsFetcher.assignElementsCollection(params)\n        .then(() => { dispatch(); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  removeElementsCollection(params) {\n    return (dispatch) => {\n      CollectionsFetcher.removeElementsCollection(params)\n        .then(() => { dispatch(); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  changeSorting(sort) {\n    return sort;\n  }\n\n  changeElementsFilter(filter) {\n    return filter;\n  }\n\n  updateContainerContent(params) {\n    return (dispatch) => {\n      ContainerFetcher.updateContainerContent(params)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  computePropsFromSmiles(sampleId) {\n    return (dispatch) => {\n      MoleculesFetcher.computePropsFromSmiles(sampleId)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  refreshComputedProp(cprop) {\n    return cprop;\n  }\n\n  // -- Private Note --\n  createPrivateNote(params) {\n    return (dispatch) => {\n      PrivateNoteFetcher.create(params).then((result) => {\n        dispatch(result)\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      })\n    };\n  }\n\n  updatePrivateNote(note) {\n    return (dispatch) => {\n      PrivateNoteFetcher.update(note).then((result) => {\n        dispatch(result)\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      })\n    };\n  }\n}\n\nexport default alt.createActions(ElementActions);\n","/* eslint-disable class-methods-use-this */\nimport alt from 'src/stores/alt/alt';\n\nclass GasPhaseReactionActions {\n  handleGasButtonStatusChange() {\n    return null;\n  }\n\n  gaseousReaction(boolean) {\n    return boolean;\n  }\n\n  setCatalystReferenceMole(value) {\n    return value;\n  }\n\n  setReactionVesselSize(value) {\n    return value;\n  }\n}\n\nexport default alt.createActions(GasPhaseReactionActions);\n","import alt from 'src/stores/alt/alt';\nimport InboxFetcher from 'src/fetchers/InboxFetcher';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport ContainerFetcher from 'src/fetchers/ContainerFetcher';\n\nclass InboxActions {\n  deleteContainerLinkUnselected(params) {\n    return (dispatch) => {\n      ContainerFetcher.deleteContainerLinkUnselected(params)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  toggleInboxModal() {\n    return null\n  }\n\n  showInboxModal() {\n    return null;\n  }\n\n  changeInboxFilter(filter) {\n    return filter;\n  }\n\n  changeInboxSize(size) {\n    return size;\n  }\n\n  checkedAll(params) {\n    return params;\n  }\n\n  handleCheckedAll(params) {\n    return params;\n  }\n\n  checkedIds(params) {\n    return params;\n  }\n\n  checkedDeviceAll(params) {\n    return params;\n  }\n\n  checkedDeviceIds(params) {\n    return params;\n  }\n\n  checkDeviceAttachments(params) {\n    return params;\n  }\n\n  prevClick() {\n    return null;\n  }\n\n  nextClick() {\n    return null;\n  }\n\n  fetchInbox(queryParams = {}) {\n    return (dispatch) => {\n      InboxFetcher.fetchInbox(false, queryParams)\n        .then((result) => {\n          dispatch({\n            inbox: result.inbox,\n            activeDeviceBoxId: queryParams.activeDeviceBoxId,\n          });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchInboxCount() {\n    return (dispatch) => {\n      InboxFetcher.fetchInbox(true)\n        .then((result) => {\n          dispatch(result.inbox);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchInboxContainer(containerId, currentContainerPage) {\n    return (dispatch) => {\n      InboxFetcher.fetchInboxByContainer(containerId, currentContainerPage)\n        .then((result) => {\n          dispatch({\n            inbox: result.inbox,\n            currentContainerPage,\n            containerId,\n          });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchInboxUnsorted() {\n    return (dispatch) => {\n      InboxFetcher.fetchInboxUnsorted()\n        .then((result) => {\n          dispatch(result.inbox);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  removeAttachmentFromList(attachment) {\n    return attachment;\n  }\n\n  removeUnlinkedAttachmentFromList(attachment) {\n    return attachment;\n  }\n\n  removeDatasetFromList(dataset) {\n    return dataset;\n  }\n\n  setInboxPagination(pagination) {\n    return pagination;\n  }\n\n  setInboxVisible(inboxVisible) {\n    return inboxVisible;\n  }\n\n  setActiveDeviceBoxId(deviceBoxId) {\n    return deviceBoxId;\n  }\n\n  deleteAttachment(params, fromUnsorted = false) {\n    return (dispatch) => {\n      AttachmentFetcher.deleteAttachment(params)\n        .then((result) => {\n          dispatch({\n            result,\n            fromUnsorted,\n          });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  bulkDeleteAttachments(attachmentIdsToDelete, fromUnsorted = false) {\n    return (dispatch) => {\n      AttachmentFetcher.bulkDeleteAttachments(attachmentIdsToDelete)\n        .then((result) => {\n          dispatch({\n            result,\n            fromUnsorted,\n          });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  deleteContainerLink(params) {\n    return (dispatch) => {\n      AttachmentFetcher.deleteContainerLink(params)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  deleteContainer(params) {\n    return (dispatch) => {\n      ContainerFetcher.deleteContainer(params)\n        .then((result) => {\n          dispatch({\n            result,\n            id: params.id,\n          });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  backToInbox(attachment) {\n    return attachment\n  }\n\n}\n\nexport default alt.createActions(InboxActions);\n","import alt from 'src/stores/alt/alt'\n\nclass KeyboardActions {\n  documentKeyDown(keyCode) {\n    return keyCode\n  }\n\n  contextChange(context) {\n    return context\n  }\n}\n\nexport default alt.createActions(KeyboardActions)\n","import alt from 'src/stores/alt/alt';\n\nclass LoadingActions {\n  start() {\n    return null;\n  }\n\n  stop() {\n    return null;\n  }\n\n  startLoadingWithProgress(filename) {\n    return filename;\n  }\n\n  stopLoadingWithProgress(filename) {\n    return filename;\n  }\n\n  updateLoadingProgress(filename, progress) {\n    return { filename: filename, progress: progress };\n  }\n}\n\nexport default alt.createActions(LoadingActions);\n","import alt from 'src/stores/alt/alt';\n\nclass NotificationActions {\n  add(notification) {\n    return notification;\n  }\n\n  remove(notification) {\n    return notification;\n  }\n\n  removeByUid(uid) {\n    return uid;\n  }\n\n  setComponentReference(input) {\n    return input;\n  }\n\n  uploadErrorNotify(message) {\n    return message;\n  }\n\n  notifyExImportStatus(title, status) {\n    const params = {\n      title: title,\n      message: \"The task has been submitted: this might take a while but you will be notified as soon as it is completed.\",\n      level: \"info\",\n      dismissible: true,\n      uid: \"export_collection\",\n      position: \"tr\",\n      autoDismiss: 5\n    };\n\n    switch(status) {\n      case 204:\n        break;\n      case 401:\n        params.message = `Unauthorized: you do not have the permission to ${type} this collection`;\n        params.level = 'error';\n        break;\n      default:\n        params.message = `An issue occured with your ${type} (status ${status}); please contact the administrators of the site if the problem persists.`;\n        params.level = 'error';\n    }\n    return this.add(params);\n  }\n}\n\nexport default alt.createActions(NotificationActions);\n","import 'whatwg-fetch';\n\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nexport default class PredictionsFetcher {\n  static fetchInfer(smis, template) {\n    const path = template === 'predictProducts' ? 'products' : 'reactants' ;\n    const promise = fetch(`/api/v1/prediction/${path}`, {\n      credentials: 'same-origin',\n      method: 'post',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(smis),\n    }).then((response) => {\n      return response.json();\n    }).then((json) => {\n      if (json.error) {\n        NotificationActions.add.defer({\n          message: json.error,\n          level: 'error'\n        });\n      } else {\n        NotificationActions.add.defer({\n          message: 'Prediction Success!',\n          level: 'success'\n        });\n      }\n      return json;\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n}\n","import _ from 'lodash';\n\nimport alt from 'src/stores/alt/alt';\nimport UIFetcher from 'src/fetchers/UIFetcher';\nimport PredictionsFetcher from 'src/fetchers/PredictionsFetcher';\n\nclass PredictionActions {\n  infer(targets, template) { // eslint-disable-line class-methods-use-this\n    const smis = targets.map(t => t.molecule_cano_smiles);\n    const target = { smis };\n\n    return (dispatch) => {\n      PredictionsFetcher\n        .fetchInfer(target, template)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  updateActiveKey(key) { // eslint-disable-line class-methods-use-this\n    return key;\n  }\n\n  updateTemplate(template) { // eslint-disable-line class-methods-use-this\n    return template;\n  }\n\n  updateUI(combState) { // eslint-disable-line class-methods-use-this\n    const { uiState, predictionState } = combState;\n    const { sample, currentCollection } = uiState;\n    const { inputEls, defaultEls } = predictionState;\n    const sampleMemoryIds = inputEls ? inputEls.map(e => e.id) : [];\n    const sampleDefaultIds = defaultEls ? defaultEls.map(e => e.id) : [];\n    const sampleCheckedIds = sample.checkedIds.toArray();\n    const dfSIds = _.difference(sampleCheckedIds, sampleMemoryIds)\n      .filter(id => !sampleDefaultIds.includes(id));\n\n    const elementAdded = dfSIds.length > 0 || sample.checkedAll;\n    const elementSubs = _.difference(sampleMemoryIds, sampleCheckedIds).length > 0;\n    const selectedTags = { sampleIds: [...sampleMemoryIds], reactionIds: [] };\n\n    if (elementAdded) {\n      return (dispatch) => {\n        UIFetcher.loadReport(\n          {\n            sample, reaction: {}, currentCollection, selectedTags,\n          },\n          'lists',\n        ).then((rsp) => {\n          const newSpls = rsp.samples.filter(x => !x.in_browser_memory);\n          const allSpls = [...newSpls, ...inputEls, ...defaultEls];\n          const result = { samples: allSpls };\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n      };\n    } else if (elementSubs) {\n      return (dispatch) => {\n        const inpSpls = inputEls.filter(e => sampleCheckedIds.indexOf(e.id) >= 0);\n        const allSpls = [...defaultEls, ...inpSpls];\n        const result = { samples: allSpls };\n        dispatch(result);\n      };\n    }\n    return (dispatch) => {\n      dispatch(false);\n    };\n  }\n\n  remove(el) { // eslint-disable-line class-methods-use-this\n    return el;\n  }\n\n  reset() { // eslint-disable-line class-methods-use-this\n    return null;\n  }\n}\n\nexport default alt.createActions(PredictionActions);\n","import 'whatwg-fetch';\n\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\n\nexport default class ReportTemplateFetcher {\n\n  static fetchTemplates() {\n    let promise = fetch('/api/v1/report_templates/', {\n      credentials: 'same-origin',\n      method: 'GET',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json',\n      },\n    }).then((response) => {\n      return response.json();\n    }).then((json) => {\n      return json;\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n\n  static fetchTemplateById(id) {\n    let promise = fetch(`/api/v1/report_templates/${id}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json',\n      },\n    }).then((response) => {\n      return response.json();\n    }).then((json) => {\n      return json;\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n\n  static createTemplate(params) {\n    const data = new FormData()\n    data.append('name', params.name);\n    data.append('report_type', params.report_type);\n    if (params.attachment) {\n      data.append('file', params.attachment);\n    }\n    return () => fetch('/api/v1/report_templates', {\n      credentials: 'same-origin',\n      method: 'post',\n      body: data\n    }).then((response) => {\n      if (response.ok == false) {\n        let msg = 'Files uploading failed: ';\n        if (response.status == 413) {\n          msg += 'File size limit exceeded.'\n        } else {\n          msg += response.statusText;\n        }\n        NotificationActions.add({\n          message: msg,\n          level: 'error'\n        });\n      }\n    })\n  }\n\n  static updateTemplate(params) {\n    const data = new FormData()\n    data.append('id', params.id);\n    data.append('name', params.name);\n    data.append('report_type', params.report_type);\n    data.append('attachment_id', params.attachment_id);\n    if (params.attachment) {\n      data.append('file', params.attachment);\n    }\n    return () => fetch(`/api/v1/report_templates/${params.id}`, {\n      credentials: 'same-origin',\n      method: 'put',\n      body: data\n    }).then((response) => {\n      if (response.ok == false) {\n        let msg = 'Files uploading failed: ';\n        if (response.status == 413) {\n          msg += 'File size limit exceeded.'\n        } else {\n          msg += response.statusText;\n        }\n        NotificationActions.add({\n          message: msg,\n          level: 'error'\n        });\n      }\n    })\n  }\n\n  static deleteAttachment(params) {\n    let promise = fetch(`/api/v1/report_templates/${params.id}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then((response) => {\n      return response.json()\n    }).then((json) => {\n      return new Attachment(json.attachment);\n    }).catch((errorMessage) => {\n      console.log(errorMessage);\n    });\n\n    return promise;\n  }\n}\n","import _ from 'lodash';\nimport alt from 'src/stores/alt/alt';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\nimport ReportsFetcher from 'src/fetchers/ReportsFetcher';\nimport ReportTemplateFetcher from 'src/fetchers/ReportTemplateFetcher';\nimport UIFetcher from 'src/fetchers/UIFetcher';\nimport { GetTypeIds, LoadPreviewIds } from 'src/utilities/ReportHelper';\n\nclass ReportActions {\n  updateImgFormat = value => value\n  updateTemplate = value => value\n\n  updateSplSettings = target => target\n  toggleSplSettingsCheckAll = () => null\n\n  updateRxnSettings = target => target\n  toggleRxnSettingsCheckAll = () => null\n\n  updateSiRxnSettings = target => target\n  toggleSiRxnSettingsCheckAll = () => null\n\n  updateConfigs = target => target\n  toggleConfigsCheckAll = () => null\n\n  generateReport = report => (dispatch) => {\n    ReportsFetcher.create(report)\n      .then((result) => {\n        dispatch(result);\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  updateDefaultTags = dTags => dTags\n  move = ({ sourceTag, targetTag }) => ({ sourceTag, targetTag })\n\n  getArchives = () => (dispatch) => {\n    ReportsFetcher.fetchArchives()\n      .then((result) => {\n        dispatch(result);\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  updateProcessQueue = oriQueue => (dispatch) => {\n    ReportsFetcher.fetchDownloadable(oriQueue)\n      .then((result) => {\n        dispatch(result);\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  updateFileName = e => e.target.value\n  updateFileDescription = e => e.target.value\n  updateActiveKey = key => key\n  downloadReport = (id, template) => ({ id, template })\n\n  clone = (archive) => {\n    const sampleIds = GetTypeIds(archive.objects, 'sample');\n    const reactionIds = GetTypeIds(archive.objects, 'reaction');\n    const uiState = {\n      sample: { checkedIds: sampleIds },\n      reaction: { checkedIds: reactionIds },\n    };\n    return (dispatch) => {\n      UIFetcher.loadReport(uiState, 'lists')\n        .then((result) => {\n          dispatch({ objs: result, archive, defaultObjTags: { sampleIds, reactionIds } });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  delete = archive => (dispatch) => {\n    ReportsFetcher.deleteArchive(archive.id)\n      .then((result) => {\n        dispatch(result);\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  remove = target => target\n  reset = () => null\n  updMSVal = (moleculeId, value) => ({ moleculeId, value })\n\n  updateThumbNails = attIds => (dispatch) => {\n    AttachmentFetcher.fetchThumbnails(attIds)\n      .then((result) => {\n        dispatch(result);\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  fetchTemplates = () => (dispatch) => {\n    ReportTemplateFetcher.fetchTemplates()\n      .then((result) => {\n        dispatch(result);\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n  }\n\n  updateCheckedTags = ({ uiState, reportState }) => {\n    const { sample, reaction, currentCollection } = uiState;\n    const { selectedObjTags, defaultObjTags } = reportState;\n    const sampleCheckedIds = sample.checkedIds.toArray();\n    const reactionCheckedIds = reaction.checkedIds.toArray();\n    const { sampleIds, reactionIds } = selectedObjTags;\n    const dfSIds = _.difference(sampleCheckedIds, sampleIds)\n      .filter(id => !defaultObjTags.sampleIds.includes(id));\n    const dfRIds = _.difference(reactionCheckedIds, reactionIds)\n      .filter(id => !defaultObjTags.reactionIds.includes(id));\n\n    const elementAdded = dfSIds.length > 0 || dfRIds.length > 0\n      || sample.checkedAll || reaction.checkedAll;\n\n    const elementSubs = _.difference(sampleIds, sampleCheckedIds).length > 0\n      || _.difference(reactionIds, reactionCheckedIds).length > 0;\n\n    if (elementAdded) {\n      return (dispatch) => {\n        UIFetcher.loadReport(\n          {\n            sample, reaction, currentCollection, selectedTags: selectedObjTags,\n          },\n          'lists',\n        ).then((result) => {\n          const newTags = {\n            sampleIds: result.samples.map(e => e.id),\n            reactionIds: result.reactions.map(e => e.id)\n          };\n          dispatch({ newTags, newObjs: result });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n      };\n    } else if (elementSubs) {\n      return (dispatch) => {\n        const newTags = {\n          sampleIds: sampleCheckedIds,\n          reactionIds: reactionCheckedIds\n        };\n        const result = { samples: [], reactions: [] };\n        dispatch({ newTags, newObjs: result });\n      };\n    }\n    return (dispatch) => {\n      dispatch({ newTags: false, newObjs: false });\n    };\n  }\n\n  loadReview = ({ reportState }) => {\n    const state = LoadPreviewIds(reportState);\n    return (dispatch) => {\n      UIFetcher.loadReport(state, 'elements')\n        .then((result) => {\n          dispatch({ objs: result });\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n}\n\n\nexport default alt.createActions(ReportActions);\n","import alt from 'src/stores/alt/alt';\nimport AttachmentFetcher from 'src/fetchers/AttachmentFetcher';\n\nclass SpectraActions {\n  ToggleModal() {\n    return null;\n  }\n\n  LoadSpectra(spcInfos, element = null) {\n    const idxs = spcInfos && spcInfos.map(si => si.idx);\n    if (idxs.length === 0) {\n      return null;\n    }\n\n    return (dispatch) => {\n      AttachmentFetcher.fetchFiles(idxs)\n        .then((fetchedFiles) => {\n          dispatch({ fetchedFiles, spcInfos, element });\n        }).catch((errorMessage) => {\n          console.log(errorMessage); // eslint-disable-line\n        });\n    };\n  }\n\n  Regenerate(jcampIds, cb) {\n    return (dispatch) => {\n      AttachmentFetcher.regenerateSpectrum(jcampIds)\n        .then(() => {\n          dispatch();\n          cb();\n        }).catch((errorMessage) => {\n          console.log(errorMessage); // eslint-disable-line\n        });\n    };\n  }\n\n  SaveToFile(spcInfo, peaksStr, shift, scan, thres, integration, multiplicity, predict, cb, keepPred = false, waveLengthStr, cyclicvolta, curveIdx = 0, simulatenmr = false, previousSpcInfos, isSaveCombined = false, axesUnitsStr, detector, dscMetaData) {\n    return (dispatch) => {\n      AttachmentFetcher.saveSpectrum(spcInfo.idx, peaksStr, shift, scan, thres, integration, multiplicity, predict, keepPred, waveLengthStr, cyclicvolta, curveIdx, simulatenmr, previousSpcInfos, isSaveCombined, axesUnitsStr, detector, dscMetaData)\n        .then((fetchedFiles) => {\n          dispatch({ fetchedFiles, spcInfo });\n          cb();\n        }).catch((errorMessage) => {\n          console.log(errorMessage); // eslint-disable-line\n        });\n    };\n  }\n\n  WriteStart(payload) {\n    return payload;\n  }\n\n  WriteStop() {\n    return null;\n  }\n\n  InferRunning() {\n    return null;\n  }\n\n  InferSpectrum(spcInfo, peaksStr, shift, scan, thres, integration, multiplicity, predict,\n    targetPeaks, layout,\n    cb, keepPred = false,\n  ) {\n    return (dispatch) => {\n      AttachmentFetcher.inferSpectrum(\n        spcInfo.idx, peaksStr, shift, scan, thres, integration, multiplicity,\n        predict, targetPeaks, layout, keepPred\n      ).then((fetchedFiles) => {\n        dispatch({ fetchedFiles, spcInfo });\n        cb();\n      }).catch((errorMessage) => {\n        console.log(errorMessage); // eslint-disable-line\n      });\n    };\n  }\n\n  SelectIdx(spcIdx, arrSpcIdx = []) {\n    return { spcIdx, arrSpcIdx };\n  }\n\n  AddOthers(payload) {\n    const jcamps = payload.jcamps || [];\n    const jcamp = jcamps[0];\n\n    return (dispatch) => {\n      AttachmentFetcher.fetchJcamp({ file: jcamp })\n        .then((rsp) => {\n          dispatch(rsp);\n        }).catch((errorMessage) => {\n          console.log(errorMessage); // eslint-disable-line\n        });\n    };\n  }\n\n  RegenerateEdited(jcampIds, molfile, cb) {\n    return (dispatch) => {\n      AttachmentFetcher.regenerateEditedSpectrum(jcampIds, molfile)\n        .then(() => {\n          dispatch();\n          cb();\n        }).catch((errorMessage) => {\n          console.log(errorMessage); // eslint-disable-line\n        });\n    };\n  }\n\n  ToggleModalNMRDisplayer() {\n    return null;\n  }\n\n  LoadSpectraForNMRDisplayer(spcInfos, element = null) {\n    const idxs = spcInfos && spcInfos.map(si => si.idx);\n    if (idxs.length === 0) {\n      return null;\n    }\n\n    return (dispatch) => {\n      AttachmentFetcher.fetchFiles(idxs)\n        .then((fetchedFiles) => {\n          dispatch({ fetchedFiles, spcInfos, element });\n        }).catch((errorMessage) => {\n          console.log(errorMessage); // eslint-disable-line\n        });\n    };\n  }\n}\n\nexport default alt.createActions(SpectraActions);\n","import alt from 'src/stores/alt/alt';\nimport UIFetcher from 'src/fetchers/UIFetcher';\n\n// An element object has a type and an id, e.g., {type: 'sample', id: 1}\nclass UIActions {\n  initialize() {\n    return (dispatch) => {\n      UIFetcher.initialize()\n        .then(json => dispatch(json))\n        .catch(err => console.log(err)); // eslint-disable-line\n    };\n  }\n\n  showCollectionManagement() {\n    return null;\n  }\n\n  toggleCollectionManagement() {\n    return null;\n  }\n\n  showElements() {\n    return null;\n  }\n\n  showDeviceManagement() {\n    return null\n  }\n\n  closeDeviceManagement() {\n    return null\n  }\n\n  selectTab(params) {\n    return params;\n  }\n\n  selectActiveAnalysisTab(tabKey) {\n    return tabKey;\n  }\n\n  selectActiveAnalysis(params) {\n    return params;\n  }\n\n  toggleAdvancedSearch(show) {\n    return show\n  }\n\n  selectCollection(collection) {\n    return collection\n  }\n\n  selectSyncCollection(syncCollection) {\n    return syncCollection\n  }\n\n  checkAllElements(params) {\n    return params;\n  }\n\n  toggleShowPreviews(show) {\n    return show;\n  }\n\n  checkElement(params) {\n    return params;\n  }\n\n  uncheckAllElements(params) {\n    return params;\n  }\n\n  uncheckWholeSelection() {\n    return null;\n  }\n\n  uncheckElement(element) {\n    return element;\n  }\n\n  selectElement(element) {\n    return element;\n  }\n\n  deselectAllElementsOfType(type) {\n    return type;\n  }\n\n  deselectAllElements() {\n    return null;\n  }\n\n  setPagination(pagination) {\n    return pagination;\n  }\n\n  setSearchSelection(selection) {\n    return selection;\n  }\n\n  setSearchById(selection) {\n    return selection;\n  }\n\n  selectCollectionWithoutUpdating(collection) {\n    return collection;\n  }\n\n  clearSearchSelection() {\n    return null;\n  }\n\n  clearSearchById() {\n    return null;\n  }\n\n  changeNumberOfResultsShown(value) {\n    return value;\n  }\n\n  updateModalProps(params) {\n    return params\n  }\n\n  hideModal() {\n    return null\n  }\n\n  setFilterCreatedAt(filterCreatedAt) {\n    return filterCreatedAt;\n  }\n\n  setUserLabel(label) {\n    return label;\n  }\n\n  setFromDate(date) {\n    return date;\n  }\n\n  setToDate(date) {\n    return date;\n  }\n\n  setProductOnly(bool) {\n    return bool;\n  }\n\n  rerenderGenericWorkflow(params) { return params; }\n  showGenericWorkflowModal(show) { return show; }\n}\n\nexport default alt.createActions(UIActions);\n","/* eslint-disable class-methods-use-this */\nimport GenericDSsFetcher from 'src/fetchers/GenericDSsFetcher';\nimport Aviator from 'aviator';\nimport GenericSgsFetcher from 'src/fetchers/GenericSgsFetcher';\nimport UsersFetcher from 'src/fetchers/UsersFetcher';\nimport alt from 'src/stores/alt/alt';\n\nimport DocumentHelper from 'src/utilities/DocumentHelper';\n\nclass UserActions {\n  fetchOlsRxno() {\n    return (dispatch) => {\n      UsersFetcher.fetchOls('rxno')\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchOlsChmo() {\n    return (dispatch) => {\n      UsersFetcher.fetchOls('chmo')\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchOlsBao() {\n    return (dispatch) => {\n      UsersFetcher.fetchOls('bao')\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchCurrentUser() {\n    return (dispatch) => {\n      UsersFetcher.fetchCurrentUser()\n        .then((result) => {\n          dispatch(result.user);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchGenericEls() {\n    return (dispatch) => {\n      UsersFetcher.fetchElementKlasses()\n        .then((roots) => {\n          dispatch(roots);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  logout() {\n    fetch('/users/sign_out', {\n      method: 'delete',\n      credentials: 'same-origin',\n      data: { authenticity_token: DocumentHelper.getMetaContent('csrf-token') }\n    })\n    .then(response => {\n      Aviator.navigate('/', { silent: true });\n      location.href = '/';\n      location.reload();\n      // location = '/home';\n    });\n  }\n\n  fetchProfile() {\n    return (dispatch) => {\n      UsersFetcher.fetchProfile()\n        .then((result) => { dispatch(result); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  setUsertemplates() {\n    const storageKey = 'ketcher-tmpls';\n    UsersFetcher.fetchProfile().then((res) => {\n      if (res?.user_templates) {\n        localStorage.setItem(storageKey, '');\n        localStorage.setItem(storageKey, JSON.stringify(res.user_templates));\n      }\n    });\n  }\n\n  selectTab(tab) {\n    return tab;\n  }\n\n  updateUserProfile(params) {\n    return (dispatch) => {\n      UsersFetcher.updateUserProfile(params)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchUserLabels() {\n    return (dispatch) => {\n      UsersFetcher.listUserLabels(true)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchEditors() {\n    return (dispatch) => {\n      UsersFetcher.listEditors()\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchNoVNCDevices() {\n    return (dispatch) => {\n      UsersFetcher.fetchNoVNCDevices()\n        .then(result => { dispatch(result); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  fetchSegmentKlasses() {\n    return (dispatch) => {\n      GenericSgsFetcher.listSegmentKlass()\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchDatasetKlasses() {\n    return (dispatch) => {\n      GenericDSsFetcher.fetchKlass()\n        .then((result) => {\n          dispatch(result);\n        })\n        .catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  fetchUnitsSystem() {\n    return (dispatch) => {\n      fetch('/units_system/units_system.json', {\n        credentials: 'same-origin',\n        cache: 'no-store',\n        headers: { 'cache-control': 'no-cache' }\n      }).then(response => response.json()).then(json => dispatch(json)).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    };\n  }\n\n  fetchOmniauthProviders() {\n    return (dispatch) => {\n      UsersFetcher.fetchOmniauthProviders()\n        .then((result) => { dispatch(result); })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n\n  fetchKetcher2Options() {\n    return () => {\n      UsersFetcher.fetchUserKetcher2Options()\n        .then((result) => {\n          if (result && result?.settings) {\n            if (Object.keys(result?.settings).length) {\n              localStorage.setItem('ketcher-opts', JSON.stringify(result.settings));\n            }\n          }\n        })\n        .catch((errorMessage) => { console.log(errorMessage); });\n    };\n  }\n}\n\nexport default alt.createActions(UserActions);\n","// alt initialization\nconst Alt = require('alt');\nconst alt = new Alt();\n\nmodule.exports = alt;\n","import alt from 'src/stores/alt/alt';\nimport EmbargoFetcher from 'src/repo/fetchers/EmbargoFetcher';\n\nclass EmbargoActions {\n\n  displayEmbargo(id) {\n    return (dispatch) => { EmbargoFetcher.fetchEmbargo(id)\n      .then((result) => {\n        dispatch({colData: result, id: id})\n      }).catch((errorMessage) => {\n        console.log(errorMessage)\n      })\n    }\n  }\n\n\n  getEmbargoElements(id) {\n    return (dispatch) => {\n      EmbargoFetcher.fetchEmbargoElements(id)\n      .then((result) => {\n        dispatch(result)\n      }).catch((errorMessage) => {\n        console.log(errorMessage)\n      })\n    }\n  }\n\n  getEmbargoElement(cid, el) {\n    return (dispatch) => {\n      EmbargoFetcher.fetchEmbargoElement(cid, el)\n      .then((result) => {\n        dispatch(result)\n      }).catch((errorMessage) => {\n        console.log(errorMessage)\n      })\n    }\n  }\n\n  moveEmbargo(id, newEmbargo, element) {\n    return (dispatch) => {\n      EmbargoFetcher.moveEmbargo(id, newEmbargo, element)\n        .then((result) => {\n          dispatch({ id, result })\n        }).catch((errorMessage) => {\n          console.log(errorMessage)\n        })\n    }\n  }\n\n  assignEmbargo(newEmbargo, element) {\n    return (dispatch) => {\n      EmbargoFetcher.assignEmbargo(newEmbargo, element)\n        .then((result) => {\n          dispatch(result)\n        }).catch((errorMessage) => {\n          console.log(errorMessage)\n        })\n    }\n  }\n\n  fetchEmbargoBundle() {\n    return (dispatch) => {\n      EmbargoFetcher.fetchEmbargoCollections()\n      .then((result) => {\n        dispatch(result)\n      }).catch((errorMessage) => {\n        console.log(errorMessage)\n      });\n    }\n  }\n\n  displayReviewEmbargo(type, id) {\n    return (dispatch) => {\n      EmbargoFetcher.repoFetchEmbargoElement(type, id)\n      .then((result) => {\n        dispatch({ id, element: result })\n      }).catch((errorMessage) => {\n        console.log(errorMessage)\n      })\n    }\n  }\n\n  releaseEmbargo(id) {\n    return (dispatch) => {\n      EmbargoFetcher.releaseEmbargo(id)\n        .then((result) => {\n          dispatch({ id, result })\n        }).catch((errorMessage) => {\n          console.log(errorMessage)\n        })\n    }\n  }\n\n  deleteEmbargo(id) {\n    return (dispatch) => {\n      EmbargoFetcher.deleteEmbargo(id)\n        .then((result) => {\n          dispatch({ id, result })\n        }).catch((errorMessage) => {\n          console.log(errorMessage)\n        })\n    }\n  }\n\n\n  generateEmbargoAccount(id) {\n    return (dispatch) => {\n      EmbargoFetcher.generateEmbargoAccount(id)\n        .then((result) => {\n          dispatch({ id, result })\n        }).catch((errorMessage) => {\n          console.log(errorMessage)\n        })\n    }\n  }\n\n  getEmbargoBundle() {\n    return (dispatch) => {\n      EmbargoFetcher.fetchEmbargoCollections()\n      .then((result) => {\n        dispatch(result)\n      }).catch((errorMessage) => {\n        console.log(errorMessage)\n      });\n    }\n  }\n}\n\nexport default alt.createActions(EmbargoActions);\n","import alt from 'src/stores/alt/alt';\nimport PublicFetcher from 'src/repo/fetchers/PublicFetcher';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\nimport EmbargoFetcher from 'src/repo/fetchers/EmbargoFetcher';\nimport SearchFetcher from 'src/fetchers/SearchFetcher';\nimport NotificationActions from 'src/stores/alt/actions/NotificationActions';\nimport RepoNavListTypes from 'src/repoHome/RepoNavListTypes';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nclass PublicActions {\n  initialize() {\n    return dispatch => {\n      PublicFetcher.initialize()\n        .then(json => dispatch(json))\n        .catch(err => console.log(err));\n    };\n  }\n\n  refreshPubElements(type) {\n    return type;\n  }\n\n  close(deleteEl) {\n    return { deleteEl };\n  }\n\n  displayCollection(id) {\n    return dispatch => {\n      EmbargoFetcher.fetchEmbargo(id)\n        .then(result => {\n          dispatch({ colData: result, id: id });\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  getMolecules(pageParams = {}) {\n    return dispatch => {\n      PublicFetcher.fetchPublicMolecules(pageParams)\n        .then(result => {\n          dispatch(result);\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  getReactions(pageParams = {}) {\n    return dispatch => {\n      PublicFetcher.fetchPublicReactions(pageParams)\n        .then(result => {\n          dispatch(result);\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  getSearchMolecules(pageParams = {}) {\n    let uid;\n    NotificationActions.add({\n      title: 'Searching ...',\n      level: 'info',\n      position: 'tc',\n      onAdd: function (notificationObject) {\n        uid = notificationObject.uid;\n      },\n    });\n\n    return dispatch => {\n      PublicFetcher.searchPublicMolecules(pageParams)\n        .then(result => {\n          NotificationActions.removeByUid(uid);\n          dispatch(result);\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  getSearchReactions(pageParams = {}) {\n    let uid;\n    NotificationActions.add({\n      title: 'Searching ...',\n      level: 'info',\n      position: 'tc',\n      onAdd: function (notificationObject) {\n        uid = notificationObject.uid;\n      },\n    });\n\n    return dispatch => {\n      PublicFetcher.searchPublicReactions(pageParams)\n        .then(result => {\n          NotificationActions.removeByUid(uid);\n          dispatch(result);\n        })\n        .catch(errorMessage => {\n          NotificationActions.removeByUid(uid);\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  lastPublished() {\n    return dispatch => {\n      PublicFetcher.fetchLastPublished()\n        .then(result => {\n          dispatch(result.last_published);\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  lastPublishedSample() {\n    return dispatch => {\n      PublicFetcher.fetchLastPublishedSample()\n        .then(result => {\n          dispatch(result.sample);\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  loadSpectra(spcInfos, element = null) {\n    const idxs = spcInfos && spcInfos.map(si => si.idx);\n    if (idxs.length === 0) {\n      return null;\n    }\n\n    return dispatch => {\n      PublicFetcher.fetchFiles(idxs)\n        .then(fetchedFiles => {\n          dispatch({ fetchedFiles, spcInfos, element });\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  openRepositoryPage(page) {\n    if (page) {\n      return page;\n    } else {\n      return '';\n    }\n  }\n\n  displayDataset(id) {\n    return dispatch => {\n      PublicFetcher.fetchDataset(id)\n        .then(result => {\n          dispatch({ dataset: result, id: id });\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  displayMolecule(\n    id,\n    anchor = '',\n    advFlag = false,\n    advType = '',\n    advVal = '',\n    listType = RepoNavListTypes.SAMPLE\n  ) {\n    return dispatch => {\n      PublicFetcher.fetchMolecule(id, advFlag, advType, advVal)\n        .then(result => {\n          dispatch({ moleculeData: result, id: id, anchor: anchor, listType });\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  displayReaction(id) {\n    return dispatch => {\n      PublicFetcher.fetchReaction(id)\n        .then(result => {\n          if (result.error) {\n            LoadingActions.stop();\n          } else {\n            dispatch({ reactionData: result, id: id });\n          }\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  articles() {\n    return dispatch => {\n      fetch('/newsroom/index.json', {\n        cache: 'no-store',\n        headers: {\n          'cache-control': 'no-cache',\n        },\n      })\n        .then(response => response.json())\n        .then(json => {\n          dispatch({ data: json });\n        })\n        .catch(errorMessage => {\n          dispatch({ data: [] });\n        });\n    };\n  }\n\n  editArticle(key) {\n    if (key === 'new') {\n      return dispatch => {\n        dispatch({ key: key, data: {} });\n      };\n    }\n    return dispatch => {\n      fetch(`/newsroom/${key}`, {\n        cache: 'no-store',\n        headers: {\n          'cache-control': 'no-cache',\n        },\n      })\n        .then(response => response.json())\n        .then(json => {\n          dispatch({ key: key, data: json });\n        });\n    };\n  }\n\n  displayArticle(key) {\n    return dispatch => {\n      fetch(`/newsroom/${key}`, {\n        cache: 'no-store',\n        headers: {\n          'cache-control': 'no-cache',\n        },\n      })\n        .then(response => response.json())\n        .then(json => {\n          dispatch({ key: key, data: json });\n        });\n    };\n  }\n\n  howtos() {\n    return dispatch => {\n      fetch('/howto/index.json', {\n        cache: 'no-store',\n        headers: {\n          'cache-control': 'no-cache',\n        },\n      })\n        .then(response => response.json())\n        .then(json => {\n          dispatch({ data: json });\n        })\n        .catch(errorMessage => {\n          // console.log(errorMessage);\n          dispatch({ data: [] });\n        });\n    };\n  }\n\n  editHowTo(key) {\n    if (key === 'ein') {\n      return dispatch => {\n        dispatch({ key: key, data: {} });\n      };\n    }\n    return dispatch => {\n      fetch(`/howto/${key}`, {\n        cache: 'no-store',\n        headers: {\n          'cache-control': 'no-cache',\n        },\n      })\n        .then(response => response.json())\n        .then(json => {\n          dispatch({ key: key, data: json });\n        });\n    };\n  }\n\n  displayHowTo(key) {\n    return dispatch => {\n      fetch(`/howto/${key}`, {\n        cache: 'no-store',\n        headers: {\n          'cache-control': 'no-cache',\n        },\n      })\n        .then(response => response.json())\n        .then(json => {\n          dispatch({ key: key, data: json });\n        });\n    };\n  }\n\n  selectPublicCollection() {\n    return dispatch => {\n      PublicFetcher.selectPublicCollection()\n        .then(result => {\n          dispatch(result);\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  getElements(\n    type = 'All',\n    state = 'pending',\n    label,\n    searchType = 'All',\n    searchValue = '',\n    page = 1,\n    perPage = 10\n  ) {\n    return dispatch => {\n      RepositoryFetcher.fetchReviewElements(\n        type,\n        state,\n        label,\n        searchType,\n        searchValue,\n        page,\n        perPage\n      )\n        .then(result => {\n          dispatch(result);\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  publishedStatics() {\n    return dispatch => {\n      PublicFetcher.publishedStatics()\n        .then(result => {\n          dispatch(result.published_statics);\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  handleReviewModal(show) {\n    return show;\n  }\n  handleCommentModal(show) {\n    return show;\n  }\n\n  fetchBasedOnSearchSelectionAndCollection(params) {\n    let uid;\n    NotificationActions.add({\n      title: 'Searching ...',\n      level: 'info',\n      position: 'tc',\n      onAdd: function (notificationObject) {\n        uid = notificationObject.uid;\n      },\n    });\n    return dispatch => {\n      SearchFetcher.fetchBasedOnSearchSelectionAndCollection(params)\n        .then(result => {\n          dispatch(result);\n          NotificationActions.removeByUid(uid);\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  publicSearch(params) {\n    return params;\n  }\n\n  setSearchParams(params) {\n    return params;\n  }\n\n  loadSpectraForNMRDisplayer(spcInfos, element = null) {\n    const idxs = spcInfos && spcInfos.map(si => si.idx);\n    if (idxs.length === 0) {\n      return null;\n    }\n\n    return dispatch => {\n      PublicFetcher.fetchFiles(idxs)\n        .then(fetchedFiles => {\n          dispatch({ fetchedFiles, spcInfos, element });\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage); // eslint-disable-line\n        });\n    };\n  }\n\n  // Use in REPO\n  fetchOlsChmo() {\n    return dispatch => {\n      PublicFetcher.fetchOls('chmo')\n        .then(result => {\n          dispatch(result);\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n}\n\nexport default alt.createActions(PublicActions);\n","/* eslint-disable class-methods-use-this */\nimport alt from 'src/stores/alt/alt';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nclass RepositoryActions {\n  publishSample(params, closeView = false) {\n    return (dispatch) => { RepositoryFetcher.publishSample(params)\n      .then((result) => {\n        if (result != null) {\n          dispatch(result)\n        } else {\n          LoadingActions.stop();\n        }\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });};\n  }\n\n  reviewPublish(element) {\n    return (dispatch) => { RepositoryFetcher.reviewPublish(element)\n      .then((result) => {\n        dispatch({ element: result })\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n        dispatch({ element: element })\n      });};\n  }\n\n  publishSampleReserveDois(params, closeView = false) {\n    return (dispatch) => { RepositoryFetcher.publishSample(params, 'dois')\n      .then((result) => {\n        if (result != null) {\n          dispatch({ element: result, closeView })\n        }\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });};\n  }\n\n  publishReaction(params, closeView = false) {\n    return (dispatch) => {\n      RepositoryFetcher.publishReaction(params)\n      .then((result) => {\n        if (result != null) {\n          dispatch({ element: result, closeView })\n        } else {\n          LoadingActions.stop();\n        }\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    };\n  }\n\n  publishReactionReserveDois(params, closeView = false) {\n    return (dispatch) => {\n      RepositoryFetcher.publishReaction(params, 'dois')\n      .then((result) => {\n        if (result != null) {\n          dispatch({ element: result, closeView })\n        }\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    };\n  }\n}\n\nexport default alt.createActions(RepositoryActions);\n","import alt from 'src/stores/alt/alt';\nimport RepositoryFetcher from 'src/repo/fetchers/RepositoryFetcher';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\n\nclass ReviewActions {\n  handleReviewModal(show, action) {\n    return { show, action };\n  }\n  handleCommentModal(show, action, field, orgInfo) {\n    return { show, action, field, orgInfo };\n  }\n  updateReview(review) {\n    return review;\n  }\n\n  fetchSample(id) {\n    return (dispatch) => { RepositoryFetcher.fetchSample(id)\n      .then((result) => {\n        dispatch(result)\n      }).catch((errorMessage) => {\n        console.log(`SampleDetailsRepoComment_${errorMessage}`);\n        LoadingActions.stop();\n      });\n    }\n  }\n\n  displayReviewReaction(id) {\n    return (dispatch) => { RepositoryFetcher.fetchReaction(id)\n      .then((result) => {\n        dispatch({id, element: result})\n      }).catch((errorMessage) => {\n        console.log(errorMessage)\n      })\n    }\n  }\n\n  displayReviewSample(id) {\n    return (dispatch) => { RepositoryFetcher.fetchSample(id)\n      .then((result) => {\n        dispatch({id, element: result})\n      }).catch((errorMessage) => {\n        console.log(errorMessage)\n      })\n    }\n  }\n\n  reviewPublish(id, type, comment, action, checklist, reviewComments) {\n    return (dispatch) => { RepositoryFetcher.repoReviewPublish(id, type, comment, action, checklist, reviewComments)\n      .then((result) => {\n        dispatch({ id :id, element: result[`${type}`], type: type, review: result.review, comment: comment, action: action, review_info: result.review_info })\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });};\n  }\n\n\n  getElements(type='All', state='pending', label=null, searchType='All', searchValue='', page=1, perPage=10) {\n    return (dispatch) => { RepositoryFetcher.fetchReviewElements(type, state, label, searchType, searchValue, page, perPage)\n      .then((result) => {\n        dispatch(result)\n      }).catch((errorMessage) => {\n        console.log(errorMessage)\n      })\n    }\n  }\n\n  updateComment(id, type, comments) {\n    return (dispatch) => {\n      RepositoryFetcher.updateComment(id, type, comments)\n        .then((result) => {\n          dispatch(result);\n        }).catch((errorMessage) => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  saveReviewLabel(element, ids) {\n    return dispatch => {\n      RepositoryFetcher.saveReviewLabel({\n        elementId: element.id,\n        elementType: element.elementType,\n        user_labels: ids,\n      })\n        .then(() => {\n          dispatch(element);\n        })\n        .catch(errorMessage => {\n          console.log(errorMessage);\n        });\n    };\n  }\n\n  setUserLabel(label) {\n    return label;\n  }\n}\n\nexport default alt.createActions(ReviewActions);\n","import Aviator from 'aviator';\nimport alt from 'src/stores/alt/alt';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport RepoNavListTypes from 'src/repoHome/RepoNavListTypes';\n\nclass PublicStore {\n  constructor() {\n    this.molecules = [];\n    this.reactions = [];\n    this.page = 1;\n    this.pages = 1;\n    this.perPage = 10;\n    this.selectType;\n    this.selectState;\n    this.searchType;\n    this.searchValue;\n    this.publishedStatics = [];\n    this.lastPublished;\n    this.lastPublishedSample;\n    this.guestPage = \"\";\n    this.currentElement = null;\n    this.queryId = -1;\n    this.news = {};\n    this.articles = [];\n    this.howto = {};\n    this.howtos = [];\n    // this.bundles = [];\n    this.showReviewModal = false;\n    this.showCommendModal = false;\n    this.reviewData = {};\n    this.u = {};\n\n    this.bindListeners({\n      handleInitialize: PublicActions.initialize,\n      handleGetMolecules: PublicActions.getMolecules,\n      handleGetReactions: PublicActions.getReactions,\n      handleSearchMolecules: PublicActions.getSearchMolecules,\n      handleSearchReactions: PublicActions.getSearchReactions,\n      handlePublishedStatics: PublicActions.publishedStatics,\n      handleLastPublished: PublicActions.lastPublished,\n      handleLastPublishedSample: PublicActions.lastPublishedSample,\n      handleOpenRepositoryPage: PublicActions.openRepositoryPage,\n      handleDisplayDataset: PublicActions.displayDataset,\n      handleDisplayMolecule: PublicActions.displayMolecule,\n      handleDisplayReaction: PublicActions.displayReaction,\n      handleReceiveSearchresult: PublicActions.fetchBasedOnSearchSelectionAndCollection,\n      handleClearSearchSelection: [UIActions.selectCollection, UIActions.selectSyncCollection],\n      handleClose: PublicActions.close,\n      handleArticles: PublicActions.articles,\n      handleEditArticle: PublicActions.editArticle,\n      handleDisplayArticle: PublicActions.displayArticle,\n      handleHowTos: PublicActions.howtos,\n      handleEditHowTo: PublicActions.editHowTo,\n      handleDisplayHowTo: PublicActions.displayHowTo,\n      handleGetElements: PublicActions.getElements,\n      handleRefreshPubElements: PublicActions.refreshPubElements,\n      handleDisplayCollection: PublicActions.displayCollection,\n      handlePublicSearch: PublicActions.publicSearch,\n      handleSetSearchParams: PublicActions.setSearchParams,\n      // Use in REPO\n      handleFetchOlsChmo: PublicActions.fetchOlsChmo,\n    });\n  }\n\n  handleInitialize(result) {\n    this.setState(result);\n  }\n\n  handleRefreshPubElements(type) {\n    const pageType = type.split('=');\n    PublicActions[`get${pageType[0]}`]({ page: this.page, perPage: this.perPage, listType: pageType[1] });\n  }\n\n  handleClose({ deleteEl }) {\n    this.setState({\n      currentElement: null\n    });\n    if (this.guestPage === 'embargo') {\n      Aviator.navigate('/embargo', { silent: true });\n    } else if (this.guestPage === 'review') {\n      Aviator.navigate('/review', { silent: true });\n    } else {\n      Aviator.navigate('/publications', { silent: true });\n    }\n  }\n\n  handleClearSearchSelection() {\n    PublicActions.getMolecules.defer();\n  }\n\n  handleGetMolecules(results) {\n    const {\n      molecules, page, pages, perPage, listType\n    } = results;\n    this.setState({\n      molecules, page, pages, perPage, listType, guestPage: 'publications'\n    });\n  }\n\n  handleGetReactions(results) {\n    const {\n      reactions, page, pages, perPage\n    } = results;\n    const listType = (reactions && reactions[0] && reactions[0].taggable_data.scheme_only ? 'scheme' : 'reaction') || 'reaction';\n    this.setState({\n      reactions, page, pages, perPage, listType, guestPage: 'publications'\n    });\n  }\n\n  handleSearchMolecules(results) {\n    const {\n      molecules, page, perPage, totalElements, listType\n    } = results;\n    let { pages } = results;\n    if (totalElements && perPage) {\n      pages = Math.ceil(totalElements / perPage);\n    }\n    this.setState({\n      molecules, page, pages, perPage, listType\n    });\n  }\n\n  handleSearchReactions(results) {\n    const {\n      reactions, page, perPage, totalElements, listType\n    } = results;\n    let { pages } = results;\n    if (totalElements && perPage) {\n      pages = Math.ceil(totalElements / perPage);\n    }\n    this.setState({\n      reactions, page, pages, perPage, listType\n    });\n  }\n\n  handlePublicSearch(results) {\n    this.setState({\n      guestPage: 'publications',\n      listType: results.listType || 'reaction',\n      currentElement: null,\n      elementType: null,\n      searchOptions: results.searchOptions,\n      advType: results.advType || 'Authors',\n      advFlag: results.advFlag || true,\n      advValue: results.advValue || [],\n      defaultSearchValue: results.defaultSearchValue || '',\n      isSearch: results.isSearch || false,\n      selection: results.selection || {},\n    });\n    Aviator.navigate('/publications', { silent: true });\n  }\n\n  handlePublishedStatics(publishedStatics) {\n    if (publishedStatics) {\n      this.setState({ publishedStatics });\n    }\n  }\n\n  handleLastPublished(lastPublished) {\n    if (lastPublished) {\n      this.setState({ lastPublished });\n    }\n  }\n\n  handleLastPublishedSample(lastPublishedSample) {\n    if (lastPublishedSample) {\n      this.setState({ lastPublishedSample });\n    }\n  }\n\n  handleOpenRepositoryPage(page) {\n    const pageType = page.split('=');\n    this.setState({\n      guestPage: pageType[0], currentElement: null, listType: pageType[1], elementType: null\n    });\n  }\n\n  handleDisplayDataset(result) {\n    this.setState({\n      guestPage: 'dataset',\n      elementType: 'dataset',\n      queryId: result.id,\n      currentElement: result.dataset\n    });\n    Aviator.navigate(`/publications/datasets/${result.id}`, { silent: true });\n  }\n\n  handleDisplayMolecule(moleculeList) {\n    let cb = () => PublicActions.getMolecules({ listType: moleculeList.listType });\n\n    if (this.molecules.length > 0) {\n      cb = () => {};\n      this.setState({ molecules: this.molecules });\n    }\n\n    this.setState({\n      guestPage: 'publications',\n      elementType: 'molecule',\n      queryId: moleculeList.id,\n      currentElement: moleculeList.moleculeData,\n      listType: moleculeList.listType\n    }, cb());\n    const suf = (moleculeList.anchor && moleculeList.anchor !== 'undefined') ? `#${moleculeList.anchor}` : '';\n    Aviator.navigate(`/publications/molecules/${moleculeList.id}${suf}`, { silent: true });\n  }\n\n  handleDisplayReaction(reactionList) {\n      const listType = reactionList.reactionData.publication.taggable_data.scheme_only ?\n        RepoNavListTypes.SCHEME : RepoNavListTypes.REACTION;\n      let cb = () => PublicActions.getReactions();\n\n      if (this.reactions.length > 0) {\n        cb = () => {};\n        this.setState({ reactions: this.reactions });\n      }\n      this.setState({\n        guestPage: 'publications',\n        elementType: 'reaction',\n        queryId: reactionList.id,\n        currentElement: reactionList.reactionData,\n        listType\n      }, cb());\n      Aviator.navigate(`/publications/reactions/${reactionList.id}`, { silent: true });\n    }\n\n  handleReceiveSearchresult(result) {\n    this.setState({ ...result.publicMolecules });\n  }\n\n  handleArticles(result) {\n    this.setState({\n      guestPage: 'newsroom',\n      articles: result.data\n    });\n  }\n\n  handleEditArticle(result) {\n    const news = result.data;\n    news.key = result.key;\n    news.article = news.article ? news.article : [];\n    this.setState({\n      guestPage: 'newseditor',\n      news,\n    });\n  }\n\n  handleDisplayArticle(result) {\n    const news = result.data;\n    news.key = result.key;\n    this.setState({\n      guestPage: 'newsreader',\n      news,\n    });\n  }\n\n  handleHowTos(result) {\n    this.setState({\n      guestPage: 'howto',\n      howtos: result.data\n    });\n  }\n\n  handleEditHowTo(result) {\n    const howto = result.data;\n    howto.key = result.key;\n    howto.article = howto.article ? howto.article : [];\n    this.setState({\n      guestPage: 'howtoeditor',\n      howto,\n    });\n  }\n\n  handleDisplayHowTo(result) {\n    const howto = result.data;\n    howto.key = result.key;\n    this.setState({\n      guestPage: 'howtoreader',\n      howto,\n    });\n  }\n\n\n  handleDisplayCollection(collectionList) {\n    this.setState({\n      guestPage: 'collection',\n      elementType: 'collection',\n      queryId: collectionList.id,\n      selectEmbargo: collectionList.colData && collectionList.colData.col\n    });\n    Aviator.navigate(`/publications/collections/${collectionList.id}`, { silent: true });\n  }\n\n\n  handleGetElements(results) {\n    const {\n      elements, page, perPage, pages, selectType, selectState, searchType, searchValue\n    } = results;\n    this.setState({\n      elements, page, perPage, pages, selectType, selectState, searchType, searchValue\n    });\n  }\n\n  handleSetSearchParams(params) {\n    this.setState(params);\n  }\n\n  // Use in REPO\n  handleFetchOlsChmo(result) {\n    this.setState({ chmos: result.ols_terms });\n  }\n}\n\nexport default alt.createStore(PublicStore, 'PublicStore');\n","import Aviator from 'aviator';\nimport alt from 'src/stores/alt/alt';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\nimport EmbargoActions from 'src/stores/alt/repo/actions/EmbargoActions';\nimport RepoConst from 'src/components/chemrepo/common/RepoConst';\n\nclass ReviewStore {\n  constructor() {\n    this.showReviewModal = false;\n    this.showCommendModal = false;\n    this.reviewData = {};\n    this.btnAction = '';\n    this.field = '';\n    this.orgInfo = '';\n    //this.bundles = [];\n    this.selectType;\n    this.selectState;\n    this.selectLabel;\n    this.searchType;\n    this.searchValue;\n    this.currentElement = null;\n    this.review = {};\n    this.review_info = {}\n\n    this.bindListeners({\n      handleReviewModal: ReviewActions.handleReviewModal,\n      handleCommentModal: ReviewActions.handleCommentModal,\n      handleDisplayReviewReaction: ReviewActions.displayReviewReaction,\n      handleDisplayReviewSample: ReviewActions.displayReviewSample,\n      handelReviewPublish: ReviewActions.reviewPublish,\n      handleGetElements: ReviewActions.getElements,\n      handelUpdateComment: ReviewActions.updateComment,\n      handleReviewUpdate: ReviewActions.updateReview,\n      handleFetchSample: ReviewActions.fetchSample,\n      handleClose: PublicActions.close,\n      handleRefreshEmbargoBundles: EmbargoActions.getEmbargoBundle,\n      handleEmbargoAssign: EmbargoActions.assignEmbargo,\n      handleSetUserLabel: ReviewActions.setUserLabel,\n      handleSaveReviewLabel: ReviewActions.saveReviewLabel,\n    });\n  }\n\n  handleClose({ deleteEl }) {\n    this.setState({\n      currentElement: null, showReviewModal: false, showCommentModal: false\n    });\n  }\n\n  handleEmbargoAssign(result) {\n    if (result.error) {\n      alert(result.error);\n    } else {\n      alert(result.message);\n      // refresh embargo list\n      EmbargoActions.getEmbargoBundle();\n      // refresh element list\n      ReviewActions.getElements(\n        this.selectType, this.selectState, this.selectLabel, this.searchType,\n        this.searchValue, this.page, this.perPage\n      );\n    }\n  }\n\n  handleRefreshEmbargoBundles(result) {\n    const cols = result.repository;\n    const { current_user } = result;\n    const bundles = [];\n    if (cols && cols.length > 0) {\n      cols.forEach((col) => {\n        bundles.push(col);\n      });\n    }\n    this.setState({ bundles, current_user });\n  }\n\n  handleReviewUpdate(review) {\n    this.setState({ review: review });\n  }\n\n  handleFetchSample(data) {\n    if (data.sample && data?.review_info?.review_level === 0) {\n    } else {\n      this.setState({\n        currentElement: data || {},\n        element: data || {},\n        elementType: 'sample',\n        review_info: data?.review_info || {},\n        review: data?.publication?.review || {},\n      });\n    }\n  }\n\n\n  handleGetElements(results) {\n    const {\n      elements, page, perPage, pages, selectType, selectState, searchType, searchValue\n    } = results;\n    this.setState({\n      elements, page, perPage, pages, selectType, selectState, searchType, searchValue, showReviewModal: false, showCommentModal: false\n    });\n  }\n\n  handleReviewModal(result) {\n    this.setState({ showReviewModal: result.show, showCommentModal: false, btnAction: result.action });\n  }\n\n  handleCommentModal(result) {\n    this.setState({ showCommentModal: result.show, showReviewModal: false, btnAction: result.action, field: result.field, orgInfo: result.orgInfo });\n  }\n\n  handelUpdateComment(result) {\n    this.setState({ review: result.review, showReviewModal: false, showCommentModal: false });\n  }\n\n  handleSaveReviewLabel(element) {\n    if (element.elementType === 'Reaction') {\n      ReviewActions.displayReviewReaction(element.id);\n    } else if (element.elementType === 'Sample') {\n      ReviewActions.displayReviewSample(element.id);\n    }\n    ReviewActions.getElements(\n      this.selectType || 'All',\n      this.selectState || 'pending',\n      this.selectLabel,\n      this.searchType || 'All',\n      this.searchValue || '',\n      this.page,\n      this.perPage\n    );\n  }\n\n  handelReviewPublish(results) {\n    // const { history, checklist, reviewComments } = results.review;\n    this.setState({\n      review: results.review,\n      showReviewModal: false,\n      showCommentModal: false,\n      review_info: results.review_info,\n    });\n    ReviewActions.getElements(\n      this.selectType || 'All',\n      this.selectState || 'pending',\n      this.selectLabel,\n      this.searchType || 'All',\n      this.searchValue || '',\n      this.page,\n      this.perPage\n    );\n  }\n\n  handleDisplayReviewReaction(result) {\n    const publication = result.element?.reaction?.publication || {};\n    if (\n      result.element?.review_info == null ||\n      result.element?.review_info?.review_level === 0\n    ) {\n      //Aviator.navigate('/home');\n    } else {\n      const currentUser =\n        (UserStore.getState() && UserStore.getState().currentUser) || {};\n      if (currentUser?.type === RepoConst.U_TYPE.ANONYMOUS) {\n        EmbargoActions.displayReviewEmbargo('reaction', result?.id);\n      } else {\n        this.setState({\n          guestPage: 'review',\n          elementType: 'reaction',\n          queryId: result?.id || 0,\n          reaction: result?.element?.reaction || {},\n          currentElement: result?.element || {},\n          showReviewModal: false,\n          showCommentModal: false,\n          review: publication?.review || {},\n          review_info: result?.element?.review_info || {},\n        });\n        Aviator.navigate(`/review/review_reaction/${result.id}`, {\n          silent: true,\n        });\n      }\n    }\n  }\n\n  handleDisplayReviewSample(result) {\n    const publication = result?.element?.publication || {};\n    if (\n      result.element?.review_info == null ||\n      result.element?.review_info?.review_level === 0\n    ) {\n      //Aviator.navigate('/home');\n    } else {\n      const currentUser =\n        (UserStore.getState() && UserStore.getState().currentUser) || {};\n      if (currentUser?.type === RepoConst.U_TYPE.ANONYMOUS) {\n        EmbargoActions.displayReviewEmbargo('sample', result?.id);\n      } else {\n        this.setState({\n          guestPage: 'review',\n          elementType: 'sample',\n          queryId: result.id || 0,\n          currentElement: result?.element || {},\n          showReviewModal: false,\n          showCommentModal: false,\n          review: publication?.review || {},\n          review_info: result?.element?.review_info || {},\n        });\n        Aviator.navigate(`/review/review_sample/${result.id}`, { silent: true });\n      }\n    }\n  }\n\n  handleSetUserLabel(label) {\n    this.setState({ selectLabel: label });\n  }\n};\n\n\nexport default alt.createStore(ReviewStore, 'ReviewStore');\n","import alt from 'src/stores/alt/alt';\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\n\n\nclass CollectionStore {\n  constructor() {\n    this.state = {\n      genericEls: [],\n      unsharedRoots: [],\n      sharedRoots: [],\n      remoteRoots: [],\n      lockedRoots: [],\n      syncInRoots: [],\n      visibleRootsIds: [],\n    };\n\n\n    this.bindListeners({\n      handleTakeOwnership: CollectionActions.takeOwnership,\n      handleFetchLockedCollectionRoots: CollectionActions.fetchLockedCollectionRoots,\n      handleFetchUnsharedCollectionRoots: CollectionActions.fetchUnsharedCollectionRoots,\n      handleFetchSharedCollectionRoots: CollectionActions.fetchSharedCollectionRoots,\n      handleFetchRemoteCollectionRoots: CollectionActions.fetchRemoteCollectionRoots,\n      handleFetchSyncInCollectionRoots: CollectionActions.fetchSyncInCollectionRoots,\n      handleCreateSharedCollections: CollectionActions.createSharedCollections,\n      handleBulkUpdateUnsharedCollections: CollectionActions.bulkUpdateUnsharedCollections,\n      handleUpdateSharedCollection: CollectionActions.updateSharedCollection,\n      handleCreateUnsharedCollection: [\n        CollectionActions.createUnsharedCollection,\n        CollectionActions.createSync,\n        CollectionActions.editSync,\n        CollectionActions.deleteSync\n      ],\n      handleRejectSharedCollection: CollectionActions.rejectShared,\n      handleRejectSyncdCollection: CollectionActions.rejectSync,\n      handleUpdateCollectrionTree: CollectionActions.updateCollectrionTree\n    })\n  }\n\n  handleTakeOwnership() {\n    CollectionActions.fetchUnsharedCollectionRoots();\n    CollectionActions.fetchSharedCollectionRoots();\n    CollectionActions.fetchRemoteCollectionRoots();\n    CollectionActions.fetchSyncInCollectionRoots();\n  }\n\n  handleFetchLockedCollectionRoots(results) {\n    this.state.lockedRoots = results.collections;\n  }\n\n  handleFetchUnsharedCollectionRoots(results) {\n    this.state.unsharedRoots = results.collections;\n  }\n\n  handleFetchSharedCollectionRoots(results) {\n    this.state.sharedRoots = results?.collections;\n  }\n\n  handleFetchRemoteCollectionRoots(results) {\n    this.state.remoteRoots = results.collections;\n  }\n\n  handleFetchSyncInCollectionRoots(results) {\n    this.state.syncInRoots = results.syncCollections;\n  }\n  handleCreateSharedCollections() {\n    CollectionActions.fetchUnsharedCollectionRoots();\n    CollectionActions.fetchSharedCollectionRoots();\n    CollectionActions.fetchRemoteCollectionRoots();\n  }\n\n  handleBulkUpdateUnsharedCollections() {\n    CollectionActions.fetchUnsharedCollectionRoots();\n    CollectionActions.fetchSharedCollectionRoots();\n    CollectionActions.fetchRemoteCollectionRoots();\n  }\n\n  handleUpdateSharedCollection() {\n    CollectionActions.fetchSharedCollectionRoots();\n  }\n\n  handleCreateUnsharedCollection(results) {\n    CollectionActions.fetchUnsharedCollectionRoots();\n  }\n\n  handleUpdateCollectrionTree(visibleRootsIds) {\n    this.state.visibleRootsIds = visibleRootsIds\n  }\n\n  handleRejectSharedCollection(results) {\n    CollectionActions.fetchRemoteCollectionRoots();\n  }\n  handleRejectSyncdCollection(results) {\n    CollectionActions.fetchSyncInCollectionRoots();\n  }\n\n  // 'repository' methods; returns a promise\n  static findById(collectionId) {\n    let state = this.state;\n    let roots = state.unsharedRoots.concat(state.sharedRoots).concat(state.remoteRoots).concat(state.lockedRoots);\n\n    let foundCollection = roots.filter((root) => {\n      return root.id == collectionId;\n    }).pop();\n\n    let promise;\n\n    // if not loaded already fetch collection from backend\n    if (!foundCollection) {\n      // TODO maybe move to CollectionsFetcher\n      promise = fetch('/api/v1/collections/' + collectionId, {\n        credentials: 'same-origin',\n        method: 'GET'\n      }).then((response) => {\n        return response.json()\n      }).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    } else {\n      promise = new Promise((resolve) => {\n        resolve({ collection: foundCollection });\n      });\n    }\n    return promise;\n  }\n  static findBySId(collectionId) {\n    let roots = this.state.syncInRoots;\n    let foundCollection = roots.filter((root) => {\n      return root.id == collectionId;\n    }).pop();\n    let promise;\n    if (!foundCollection) {\n      promise = fetch('/api/v1/syncCollections/' + collectionId, {\n        credentials: 'same-origin',\n        method: 'GET'\n      }).then((response) => {\n        return response.json()\n      }).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    } else {\n      promise = new Promise((resolve) => {\n        resolve({ collection: foundCollection });\n      });\n    }\n    return promise;\n  }\n\n\n  static findAllCollection() {\n    let state = this.state;\n    let roots = state.lockedRoots;\n\n    let foundCollection = roots.filter((root) => {\n      return root.label == 'All';\n    }).pop();\n\n    let promise;\n\n    // if not loaded already fetch collection from backend\n    if (!foundCollection) {\n      promise = fetch('/api/v1/collections/all/', {\n        credentials: 'same-origin',\n        method: 'GET'\n      }).then((response) => {\n        return response.json()\n      }).then((json) => {\n        return json;\n      }).catch((errorMessage) => {\n        console.log(errorMessage);\n      });\n    } else {\n      promise = new Promise((resolve) => {\n        resolve({ collection: foundCollection });\n      });\n    }\n    return promise;\n  }\n}\n\nexport default alt.createStore(CollectionStore, 'CollectionStore');\n","import alt from 'src/stores/alt/alt';\nimport ClipboardActions from 'src/stores/alt/actions/ClipboardActions';\nimport Aviator from 'aviator';\n\nclass ClipboardStore {\n  constructor() {\n    this.state = {\n      samples: [],\n      wellplates: []\n    };\n\n    this.bindListeners({\n      handleFetchSamplesByUIStateAndLimit: [ClipboardActions.fetchSamplesByUIStateAndLimit, ClipboardActions.fetchElementAndBuildCopy],\n      handleFetchWellplatesByUIState: ClipboardActions.fetchWellplatesByUIState\n    })\n  }\n\n  handleFetchSamplesByUIStateAndLimit(result) {\n    this.state.samples = result.samples;\n\n    switch(result.action) {\n      case 'template_wellplate':\n        Aviator.navigate(result.isSync\n          ? `/scollection/${result.collection_id}/wellplate/template`\n          : `/collection/${result.collection_id}/wellplate/template`);\n        break;\n      case 'copy_sample':\n        Aviator.navigate(result.isSync\n          ? `/scollection/${result.collection_id}/sample/copy`\n          : `/collection/${result.collection_id}/sample/copy`);\n    }\n  }\n\n  handleFetchWellplatesByUIState(result) {\n    this.state.wellplates = result.wellplates;\n    switch(result.action) {\n      case 'template_screen':\n        Aviator.navigate(result.isSync\n          ? `/scollection/${result.collection_id}/screen/template`\n          : `/collection/${result.collection_id}/screen/template`);\n    }\n  }\n}\n\nexport default alt.createStore(ClipboardStore, 'ClipboardStore');\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  Button,\n  ButtonToolbar,\n  FormGroup,\n  Checkbox\n} from 'react-bootstrap';\nimport { AgGridReact } from 'ag-grid-react';\nimport SVG from 'react-inlinesvg';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\n\n\nconst MyCell = ({col,data,rowIndex, ...props})=>{\n  return <Cell width={300}>{data[rowIndex][col]}</Cell>\n\n}\nconst SvgCellRenderer = ({ value, ...props})=>{\n  return <SVG src={\"/images/\"+value} className=\"molecule-fixed-data\" />\n}\n\nSvgCellRenderer.propTypes = {\n  value: PropTypes.string,\n}\n\nconst SelectCellRenderer = ({ value, onSelectChange, rowIndex,...props})=>{\n return props.data.inchikey ?\n    <FormGroup>\n      <Checkbox\n       onChange={(e)=>onSelectChange(e.target.checked,rowIndex)}\n       defaultChecked={value}\n        />\n    </FormGroup>\n  : null\n\n}\n\n\nclass SelectCellEditor extends React.Component {\n  constructor(props) {\n    super()\n    const value = props.value\n    this.state = {\n      value: value,\n    }\n  }\n\n  getValue() {\n    return this.state.value;\n  }\n\n  afterGuiAttached() {\n    let {node,api,onSelectChange} = this.props\n    let newVal = !this.state.value\n    let rowIndex = node ? node.rowIndex : null\n\n    if (rowIndex != null && rowIndex >= 0) {\n      onSelectChange(newVal,rowIndex)\n      api.setFocusedCell(rowIndex+1, \"checked\")\n    } else {api.setFocusedCell(0, \"checked\")}\n  }\n\n  inputField(){\n    let eGC = this.props.eGridCell\n    return eGC ? eGC.getElementsByTagName(\"INPUT\")[0] : null\n  }\n\n  render() {\n    return <input type=\"text\" value={this.state.scaled_value}\n      onChange={e=>this.onChangeListener(e)}\n    />\n  }\n\n}\n\nclass CustomHeader extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n    }\n  }\n\n\n  render(){\n    let {column,displayName,defaultSelected,mapped_keys}= this.props\n\n    return(\n        <div className=\"ag-header-cell-label\">\n          {displayName} &nbsp;\n          <select onChange={event=>this.props.onHeaderSelect(event.target.value,displayName)} defaultValue={defaultSelected}>\n            <option value=\"\"               >do not import</option>\n            {Object.keys(mapped_keys).map(k=>{\n              return <option value={mapped_keys[k].field}>\n                {mapped_keys[k].multiple ? \"add to \": \"use as \"}{mapped_keys[k].displayName}\n              </option>})\n            }\n          </select>\n        </div>\n    )\n  }\n}\n\nexport default class ModalImportConfirm extends React.Component {\n  constructor(props) {\n    super(props);\n    let rows = []\n    props.data.map(\n      (e,i)=> {\n        rows.push({\n          index: i+1,\n          checked: !!e.inchikey,\n          ...e\n        })\n      })\n    let defaultSelected = {}\n    props.custom_data_keys.map(e=>{defaultSelected[e]=\"\"})\n    this.state = {\n      rows:rows,\n      defaultSelected: defaultSelected,\n    }\n    this.onSelectChange = this.onSelectChange.bind(this)\n    this.onHeaderSelect = this.onHeaderSelect.bind(this)\n  }\n\n\n  handleClick() {\n    const {onHide, action, custom_data_keys,collection_id} = this.props\n    let mapped_keys = this.props.mapped_keys\n\n    let {rows,defaultSelected} = this.state\n\n    let filtered_mapped_keys = {}\n\n    custom_data_keys.map(e=>{\n      let field = defaultSelected[e]\n      if (mapped_keys[field] && mapped_keys[field].multiple ){\n        filtered_mapped_keys[field] = filtered_mapped_keys[field] ? filtered_mapped_keys[field] : []\n        filtered_mapped_keys[field].push(e)\n      } else if (field !== \"\") {\n        filtered_mapped_keys[field] = e\n      }\n    })\n    let processRows = rows.map(row=>{\n      if (row.checked){\n        let newRow = {\n          inchikey: row.inchikey,\n          molfile: row.molfile,\n        }\n        Object.keys(filtered_mapped_keys).map(e=>{\n          let k=filtered_mapped_keys[e]\n          newRow[e] = mapped_keys[e].multiple ? k.map(f=>{return(f+\"\\n\"+row[f]+\"\\n\")}).join(\"\\n\")\n           : row[k]\n        })\n        newRow['decoupled'] = row['MOLECULE-LESS'] || 'f'\n        return newRow\n      }\n    })\n    filtered_mapped_keys['decoupled'] = \"MOLECULE-LESS\"\n    let params = {\n      currentCollectionId: collection_id,\n      rows: processRows,\n      mapped_keys: filtered_mapped_keys,\n    }\n\n    ElementActions.importSamplesFromFileConfirm(params)\n    onHide();\n\n  }\n\n  onSelectChange(checked, rowIndex){\n    let {rows} = this.state\n    rows[rowIndex].checked = checked\n    this.setState({rows: rows})\n  }\n\n  onHeaderSelect(target,customHeader){\n    let {defaultSelected} = this.state\n    let {custom_data_keys, mapped_keys} = this.props\n    if (mapped_keys[target] && !mapped_keys[target].multiple){\n      custom_data_keys.map(k =>{if (defaultSelected[k]== target){defaultSelected[k]=\"\"} })\n    }\n    defaultSelected[customHeader]=target\n    this.setState({defaultSelected:defaultSelected})\n  }\n\n  isDisabled() {\n    false\n  }\n\n  render() {\n    let {rows,defaultSelected} = this.state\n    const {onHide,custom_data_keys} = this.props\n\n    let columns={\n          columnDefs: [\n            {headerName: '#', field: 'index', width: 60, pinned: 'left'},\n            {headerName: 'Structure', field: 'svg', cellRenderer: SvgCellRenderer, pinned: 'left', autoHeight: true },\n            {headerName: 'name', field: 'name', editable:true},\n            {headerName: 'Select', field: 'checked', cellRenderer: SelectCellRenderer,\n              cellRendererParams:{onSelectChange: this.onSelectChange}, width: 30,\n              editable:true, cellEditor: SelectCellEditor,\n              cellEditorParams:{onSelectChange: this.onSelectChange}\n            },\n          ],\n          defaultColDef: {\n            editable:  false,\n            filter: 'number',\n            width: 300,\n            resizable: true,\n            sortable: true,\n          },\n        }\n\n    custom_data_keys.map((e)=>{columns.columnDefs.push(\n      {\n        headerName: e, field: e ,\n        headerComponent: CustomHeader,\n        headerComponentParams:{\n          onHeaderSelect: this.onHeaderSelect,\n          defaultSelected: defaultSelected[e],\n          mapped_keys: this.props.mapped_keys,\n        }\n      }\n    )})\n\n    return (\n      <div style={{width:'80%',height:'80%', margin:'auto'}}>\n\n        <div className=\"ag-theme-bootstrap\" style={{height: '500px'}} >\n          <AgGridReact\n            columnDefs={columns.columnDefs}\n            defaultColDef={columns.defaultColDef}\n            rowData={rows}\n            rowHeight=\"100\"\n            rowSelection=\"single\"\n            getRowStyle={(params)=>{if (params.data.checked) {return null}\n             else {return {'background-color': 'red'}}}}\n          />\n        </div>\n\n        &nbsp;\n\n        <ButtonToolbar>\n          <Button bsStyle=\"primary\" onClick={() => onHide()}>Cancel</Button>\n          <Button bsStyle=\"warning\" onClick={() => this.handleClick()} disabled={this.isDisabled()}>Import</Button>\n        </ButtonToolbar>\n      </div>\n    )\n  }\n}\n","import {\n  last,\n  slice,\n  intersectionWith,\n  findIndex\n} from 'lodash';\nimport Aviator from 'aviator';\nimport alt from 'src/stores/alt/alt';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport CollectionActions from 'src/stores/alt/actions/CollectionActions';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport ClipboardStore from 'src/stores/alt/stores/ClipboardStore';\nimport Sample from 'src/models/Sample';\nimport Reaction from 'src/models/Reaction';\nimport ResearchPlan from 'src/models/ResearchPlan';\nimport Wellplate from 'src/models/Wellplate';\nimport Screen from 'src/models/Screen';\n\nimport Device from 'src/models/Device';\nimport Container from 'src/models/Container';\nimport AnalysesExperiment from 'src/models/AnalysesExperiment';\nimport DeviceAnalysis from 'src/models/DeviceAnalysis';\nimport DeviceSample from 'src/models/DeviceSample';\nimport SamplesFetcher from 'src/fetchers/SamplesFetcher';\nimport DeviceFetcher from 'src/fetchers/DeviceFetcher';\nimport ResearchPlansFetcher from 'src/fetchers/ResearchPlansFetcher';\nimport WellplatesFetcher from 'src/fetchers/WellplatesFetcher';\nimport ScreensFetcher from 'src/fetchers/ScreensFetcher';\nimport ModalImportConfirm from 'src/components/contextActions/ModalImportConfirm';\n\nimport { elementShowOrNew } from 'src/utilities/routesUtils';\n\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport { SameEleTypId, UrlSilentNavigation } from 'src/utilities/ElementUtils';\nimport { chmoConversions } from 'src/components/OlsComponent';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\nimport GenericEl from 'src/models/GenericEl';\n\nimport MessagesFetcher from 'src/fetchers/MessagesFetcher';\n\nimport RepositoryActions from 'src/stores/alt/repo/actions/RepositoryActions';\n\n\nconst fetchOls = (elementType) => {\n  switch (elementType) {\n    case 'reaction':\n      UserActions.fetchOlsRxno();\n      UserActions.fetchOlsChmo();\n      break;\n    default:\n      UserActions.fetchOlsChmo();\n      break;\n  }\n};\n\nclass ElementStore {\n  constructor() {\n    const elements = {\n      samples: {\n        elements: [],\n        totalElements: 0,\n        page: null,\n        pages: null,\n        perPage: null\n      },\n      reactions: {\n        elements: [],\n        totalElements: 0,\n        page: null,\n        pages: null,\n        perPage: null\n      },\n      wellplates: {\n        elements: [],\n        totalElements: 0,\n        page: null,\n        pages: null,\n        perPage: null\n      },\n      screens: {\n        elements: [],\n        totalElements: 0,\n        page: null,\n        pages: null,\n        perPage: null\n      },\n      devices: {\n        devices: [],\n        activeAccordionDevice: 0,\n        selectedDeviceId: -1\n      },\n      research_plans: {\n        elements: [],\n        totalElements: 0,\n        page: null,\n        pages: null,\n        perPage: null\n      },\n      cell_lines: {\n        elements: [],\n        totalElements: 0,\n        page: null,\n        pages: null,\n        perPage: null\n      },\n    };\n\n    this.state = {\n      elements,\n      currentElement: null,\n      elementWarning: false,\n      moleculeSort: false,\n      // formerly from DetailStore\n      selecteds: [],\n      refreshCoefficient: [],\n      activeKey: 0,\n      deletingElement: null,\n    };\n\n    this.bindListeners({\n      handleFetchAllDevices: ElementActions.fetchAllDevices,\n      handleFetchDeviceById: ElementActions.fetchDeviceById,\n      handleCreateDevice: ElementActions.createDevice,\n      handleSaveDevice: ElementActions.saveDevice,\n      handleDeleteDevice: ElementActions.deleteDevice,\n      handleToggleDeviceType: ElementActions.toggleDeviceType,\n      handleChangeActiveAccordionDevice: ElementActions.changeActiveAccordionDevice,\n      handleChangeSelectedDeviceId: ElementActions.changeSelectedDeviceId,\n      handleSetSelectedDeviceId: ElementActions.setSelectedDeviceId,\n      handleSetRefreshCoefficient: ElementActions.setRefreshCoefficient,\n      handleAddSampleToDevice: ElementActions.addSampleToDevice,\n      handleAddSampleWithAnalysisToDevice: ElementActions.addSampleWithAnalysisToDevice,\n      handleRemoveSampleFromDevice: ElementActions.removeSampleFromDevice,\n      handleToggleTypeOfDeviceSample: ElementActions.toggleTypeOfDeviceSample,\n      handleChangeDeviceProp: ElementActions.changeDeviceProp,\n      handleFetchDeviceAnalysisById: ElementActions.fetchDeviceAnalysisById,\n      handleSaveDeviceAnalysis: ElementActions.saveDeviceAnalysis,\n      handleOpenDeviceAnalysis: ElementActions.openDeviceAnalysis,\n      handleCreateDeviceAnalysis: ElementActions.createDeviceAnalysis,\n      handleChangeAnalysisExperimentProp: ElementActions.changeAnalysisExperimentProp,\n      handleDeleteAnalysisExperiment: ElementActions.deleteAnalysisExperiment,\n      handleDuplicateAnalysisExperiment: ElementActions.duplicateAnalysisExperiment,\n\n      handleFetchBasedOnSearchSelection: ElementActions.fetchBasedOnSearchSelectionAndCollection,\n      handleFetchBasedOnSearchResultIds: ElementActions.fetchBasedOnSearchResultIds,\n      handleDispatchSearchResult: ElementActions.dispatchSearchResult,\n\n      handleFetchGenericElsByCollectionId: ElementActions.fetchGenericElsByCollectionId,\n      handleFetchGenericElById: ElementActions.fetchGenericElById,\n      handleCreateGenericEl: ElementActions.createGenericEl,\n\n      handleCreateCellLine: ElementActions.createCellLine,\n\n      handleFetchSamplesByCollectionId: ElementActions.fetchSamplesByCollectionId,\n      handleFetchReactionsByCollectionId: ElementActions.fetchReactionsByCollectionId,\n      handleFetchWellplatesByCollectionId: ElementActions.fetchWellplatesByCollectionId,\n      handleFetchScreensByCollectionId: ElementActions.fetchScreensByCollectionId,\n      handlefetchResearchPlansByCollectionId: ElementActions.fetchResearchPlansByCollectionId,\n      handlefetchCellLinesByCollectionId: ElementActions.fetchCellLinesByCollectionId,\n\n      handleFetchSampleById: ElementActions.fetchSampleById,\n      handleCreateSample: ElementActions.createSample,\n      handleCreateSampleForReaction: ElementActions.createSampleForReaction,\n      handleEditReactionSample: ElementActions.editReactionSample,\n      handleEditWellplateSample: ElementActions.editWellplateSample,\n      handleUpdateSampleForReaction: ElementActions.updateSampleForReaction,\n      handleUpdateSampleForWellplate: ElementActions.updateSampleForWellplate,\n      handleCopySampleFromClipboard: ElementActions.copySampleFromClipboard,\n      handleAddSampleToMaterialGroup: ElementActions.addSampleToMaterialGroup,\n      handleShowReactionMaterial: ElementActions.showReactionMaterial,\n      handleImportSamplesFromFile: ElementActions.importSamplesFromFile,\n      handleImportSamplesFromFileConfirm: ElementActions.importSamplesFromFileConfirm,\n\n      handleSetCurrentElement: ElementActions.setCurrentElement,\n      handleDeselectCurrentElement: ElementActions.deselectCurrentElement,\n      handleChangeSorting: ElementActions.changeSorting,\n      handleChangeElementsFilter: ElementActions.changeElementsFilter,\n\n      handleFetchReactionById: ElementActions.fetchReactionById,\n      handleTryFetchById: [\n        ElementActions.tryFetchReactionById,\n        ElementActions.tryFetchWellplateById,\n        ElementActions.tryFetchGenericElById\n      ],\n      handleFetchCellLineById:ElementActions.tryFetchCellLineElById,\n      handleCloseWarning: ElementActions.closeWarning,\n      handleCreateReaction: ElementActions.createReaction,\n      handleCopyReactionFromId: ElementActions.copyReactionFromId,\n      handleCopyReaction: ElementActions.copyReaction,\n      handleCopyResearchPlan: ElementActions.copyResearchPlan,\n      handleCopyElement: ElementActions.copyElement,\n      handleCopyCellLine: ElementActions.copyCellLineFromId,\n      handleOpenReactionDetails: ElementActions.openReactionDetails,\n\n      handleBulkCreateWellplatesFromSamples:\n        ElementActions.bulkCreateWellplatesFromSamples,\n      handleFetchWellplateById: ElementActions.fetchWellplateById,\n      handleImportWellplateSpreadsheet: ElementActions.importWellplateSpreadsheet,\n      handleCreateWellplate: ElementActions.createWellplate,\n      handleGenerateWellplateFromClipboard:\n        ElementActions.generateWellplateFromClipboard,\n      handleGenerateScreenFromClipboard:\n        ElementActions.generateScreenFromClipboard,\n\n      handleAddResearchPlanToScreen: ElementActions.addResearchPlanToScreen,\n      handleFetchScreenById: ElementActions.fetchScreenById,\n      handleCreateScreen: ElementActions.createScreen,\n\n      handlefetchResearchPlanById: ElementActions.fetchResearchPlanById,\n      handleCreateResearchPlan: ElementActions.createResearchPlan,\n      handleImportWellplateIntoResearchPlan: ElementActions.importWellplateIntoResearchPlan,\n      handleImportTableFromSpreadsheet: ElementActions.importTableFromSpreadsheet,\n\n      handleCreatePrivateNote: ElementActions.createPrivateNote,\n      handleUpdatePrivateNote: ElementActions.updatePrivateNote,\n\n      // FIXME ElementStore listens to UIActions?\n      handleUnselectCurrentElement: UIActions.deselectAllElements,\n      handleSetPagination: UIActions.setPagination,\n\n      handleRefreshElements: ElementActions.refreshElements,\n      handleGenerateEmptyElement:\n        [\n          ElementActions.generateEmptyGenericEl,\n          ElementActions.generateEmptyWellplate,\n          ElementActions.generateEmptyScreen,\n          ElementActions.generateEmptyResearchPlan,\n          ElementActions.generateEmptySample,\n          ElementActions.generateEmptyReaction,\n          ElementActions.generateEmptyCellLine,\n          ElementActions.showReportContainer,\n          ElementActions.showFormatContainer,\n          ElementActions.showComputedPropsGraph,\n          ElementActions.showComputedPropsTasks,\n          ElementActions.showDeviceControl,\n          ElementActions.showLiteratureDetail,\n          ElementActions.showPredictionContainer\n        ],\n      handleFetchMoleculeByMolfile: ElementActions.fetchMoleculeByMolfile,\n      handleFetchMetadata: ElementActions.fetchMetadata,\n      handleDeleteElements: ElementActions.deleteElements,\n\n      handleUpdateElementsCollection: ElementActions.updateElementsCollection,\n      handleAssignElementsCollection: ElementActions.assignElementsCollection,\n      handleRemoveElementsCollection: ElementActions.removeElementsCollection,\n      handleSplitAsSubsamples: ElementActions.splitAsSubsamples,\n      handleSplitElements: ElementActions.splitElements,\n      handleSplitAsSubwellplates: ElementActions.splitAsSubwellplates,\n      handleSplitAsSubCellLines: ElementActions.splitAsSubCellLines,\n      // formerly from DetailStore\n      handleSelect: DetailActions.select,\n      handleClose: DetailActions.close,\n      handleDeletingElements: ElementActions.deleteElementsByUIState,\n      handleConfirmDelete: DetailActions.confirmDelete,\n      handleChangeCurrentElement: DetailActions.changeCurrentElement,\n      handleGetMoleculeCas: DetailActions.getMoleculeCas,\n      handleUpdateMoleculeNames: DetailActions.updateMoleculeNames,\n      handleUpdateMoleculeCas: DetailActions.updateMoleculeCas,\n      handleUpdateLinkedElement: [\n        ElementActions.updateReaction,\n        ElementActions.updateSample,\n        RepositoryActions.publishSample,\n        RepositoryActions.publishReaction,\n        RepositoryActions.publishSampleReserveDois,\n        RepositoryActions.publishReactionReserveDois,\n        RepositoryActions.reviewPublish,\n      ],\n      handleRefreshSyncCollections: [\n        RepositoryActions.reviewPublish,\n        RepositoryActions.publishSample,\n        RepositoryActions.publishReaction,\n      ],\n      handleUpdateElement: [\n        // ElementActions.updateReaction,\n        // ElementActions.updateSample,\n        ElementActions.updateWellplate,\n        ElementActions.updateScreen,\n        ElementActions.updateResearchPlan,\n        ElementActions.updateCellLine,\n        ElementActions.updateGenericEl,\n      ],\n      handleUpdateEmbeddedResearchPlan: ElementActions.updateEmbeddedResearchPlan,\n      handleRefreshComputedProp: ElementActions.refreshComputedProp,\n    });\n  }\n\n  handleFetchAllDevices(devices) {\n    this.state.elements['devices'].devices = devices\n  }\n\n  handleFetchDeviceById(device) {\n    this.state.currentElement = device\n  }\n\n  findDeviceIndexById(deviceId) {\n    const { devices } = this.state.elements['devices']\n    return devices.findIndex((e) => e.id === deviceId)\n  }\n\n  handleSaveDevice(device) {\n    const { devices } = this.state.elements['devices']\n    const deviceKey = devices.findIndex((e) => e._checksum === device._checksum)\n    if (deviceKey === -1) {\n      this.state.elements['devices'].devices.push(device)\n    } else {\n      this.state.elements['devices'].devices[deviceKey] = device\n    }\n  }\n\n  handleToggleDeviceType({ device, type }) {\n    if (device.types.includes(type)) {\n      device.types = device.types.filter((e) => e !== type)\n    } else {\n      device.types.push(type)\n    }\n    const deviceKey = this.findDeviceIndexById(device.id)\n    this.state.elements['devices'].devices[deviceKey] = device\n  }\n\n  handleCreateDevice() {\n    const { devices } = this.state.elements['devices']\n    const newDevice = Device.buildEmpty()\n    const newKey = devices.length\n    this.state.elements['devices'].activeAccordionDevice = newKey\n    this.state.elements['devices'].devices.push(newDevice)\n  }\n\n  handleDeleteDevice(device) {\n    const { devices, activeAccordionDevice } = this.state.elements['devices']\n    this.state.elements['devices'].devices = devices.filter((e) => e.id !== device.id)\n  }\n\n  handleAddSampleToDevice({ sample, device, options = { save: false } }) {\n    const deviceSample = DeviceSample.buildEmpty(device.id, sample)\n    device.samples.push(deviceSample)\n    if (options.save) {\n      ElementActions.saveDevice(device)\n      ElementActions.fetchDeviceById.defer(device.id)\n    }\n  }\n\n  handleAddSampleWithAnalysisToDevice({ sample, analysis, device }) {\n    // Note: #735\n    // this handleAddSampleWithAnalysisToDevice is unused so far but we still update '1H NMR' to the new type from OLS-chmo\n    // and 'NMR'(type) of DeviceSample as well\n    const kind = (analysis.kind || '').split('|')[0].trim();\n    switch (kind) {\n      case chmoConversions.nmr_1h.termId:\n        // add sample to device\n        const deviceSample = DeviceSample.buildEmpty(device.id, { id: sample.id, short_label: sample.short_label })\n        deviceSample.types = [chmoConversions.nmr_1h.value]\n        device.samples.push(deviceSample)\n        DeviceFetcher.update(device)\n          .then(device => {\n            const savedDeviceSample = last(device.samples)\n            // add sampleAnalysis to experiments\n            let deviceAnalysis = device.devicesAnalyses.find(a => a.analysisType === chmoConversions.nmr_1h.value)\n            if (!deviceAnalysis) {\n              deviceAnalysis = DeviceAnalysis.buildEmpty(device.id, chmoConversions.nmr_1h.value)\n            }\n            const newExperiment = AnalysesExperiment.buildEmpty(sample.id, sample.short_label, analysis.id, savedDeviceSample.id)\n            deviceAnalysis.experiments.push(newExperiment)\n            ElementActions.saveDeviceAnalysis.defer(deviceAnalysis)\n          })\n        break\n    }\n  }\n\n  handleToggleTypeOfDeviceSample({ device, sample, type }) {\n    const sampleKey = device.samples.findIndex(s => s.id === sample.id)\n    if (sample.types.includes(type)) {\n      sample.types = sample.types.filter(t => t !== type)\n    } else {\n      sample.types.push(type)\n    }\n    device.samples[sampleKey] = sample\n  }\n\n  handleOpenDeviceAnalysis({ device, type }) {\n    switch (type) {\n      case \"NMR\":\n        const { currentCollection, isSync } = UIStore.getState();\n        const deviceAnalysis = device.devicesAnalyses.find((a) => a.analysisType === \"NMR\")\n\n        // update Device in case of sample was added by dnd and device was not saved\n        device.updateChecksum()\n        ElementActions.saveDevice(device)\n\n        if (deviceAnalysis) {\n          Aviator.navigate(isSync\n            ? `/scollection/${currentCollection.id}/devicesAnalysis/${deviceAnalysis.id}`\n            : `/collection/${currentCollection.id}/devicesAnalysis/${deviceAnalysis.id}`\n          )\n        } else {\n          Aviator.navigate(isSync\n            ? `/scollection/${currentCollection.id}/devicesAnalysis/new/${device.id}/${type}`\n            : `/collection/${currentCollection.id}/devicesAnalysis/new/${device.id}/${type}`\n          )\n        }\n        break\n    }\n  }\n\n  handleRemoveSampleFromDevice({ sample, device }) {\n    device.samples = device.samples.filter((e) => e.id !== sample.id)\n    const deviceKey = this.findDeviceIndexById(device.id)\n    this.state.elements['devices'].devices[deviceKey] = device\n  }\n\n  handleChangeDeviceProp({ device, prop, value }) {\n    device[prop] = value\n    const deviceKey = this.findDeviceIndexById(device.id)\n    this.state.elements['devices'].devices[deviceKey] = device\n  }\n\n  handleChangeActiveAccordionDevice(key) {\n    this.state.elements['devices'].activeAccordionDevice = key\n  }\n\n  handleChangeSelectedDeviceId(deviceId) {\n    this.state.elements['devices'].selectedDeviceId = deviceId\n  }\n\n  handleSetSelectedDeviceId(deviceId) {\n    this.state.elements['devices'].selectedDeviceId = deviceId\n  }\n\n  handleSetRefreshCoefficient(obj) {\n    this.setState({ refreshCoefficient: [obj] });\n  }\n\n  //TODO move these in Element Action ??\n  createSampleAnalysis(sampleId, type) {\n    return new Promise((resolve, reject) => {\n      SamplesFetcher.fetchById(sampleId)\n        .then(sample => {\n          let analysis = Container.buildAnalysis(chmoConversions.others.value);\n          switch (type) {\n            case chmoConversions.nmr_1h.termId:\n              analysis = Container.buildAnalysis(chmoConversions.nmr_1h.value)\n              break\n          }\n          sample.addAnalysis(analysis)\n          SamplesFetcher.update(sample)\n          resolve(analysis)\n        })\n    })\n  }\n\n  createAnalysisExperiment(deviceSample, deviceAnalysis) {\n    return new Promise((resolve, reject) => {\n      this.createSampleAnalysis(deviceSample.sampleId, deviceAnalysis.analysisType)\n        .then(sampleAnalysis => {\n          const experiment = AnalysesExperiment.buildEmpty(\n            deviceSample.sampleId,\n            deviceSample.shortLabel,\n            sampleAnalysis.id,\n            deviceSample.id\n          )\n          resolve(experiment)\n        })\n    })\n  }\n\n  handleCreateDeviceAnalysis({ device, analysisType }) {\n    const analysis = DeviceAnalysis.buildEmpty(device.id, analysisType)\n    const samplesOfAnalysisType = device.samples.filter(s => s.types.includes(analysisType))\n    const promises = samplesOfAnalysisType.map(s => this.createAnalysisExperiment(s, analysis))\n    Promise.all(promises)\n      .then(experiments => {\n        experiments.map(experiment => analysis.experiments.push(experiment))\n        ElementActions.saveDeviceAnalysis(analysis)\n      })\n  }\n\n  handleFetchDeviceAnalysisById({ analysis, device }) {\n    const { experiments } = analysis\n    const samplesOfAnalysisType = device.samples.filter(s => s.types.includes(analysis.analysisType))\n    const samplesWithoutOld = slice(samplesOfAnalysisType, experiments.length)\n    const promises = samplesWithoutOld.map(s => this.createAnalysisExperiment(s, analysis))\n    Promise.all(promises)\n      .then(experiments => {\n        experiments.map(experiment => analysis.experiments.push(experiment))\n        ElementActions.saveDeviceAnalysis(analysis)\n      })\n  }\n\n  handleSaveDeviceAnalysis(analysis) {\n    const { currentCollection, isSync } = UIStore.getState();\n    this.state.currentElement = analysis\n\n    Aviator.navigate(isSync\n      ? `/scollection/${currentCollection.id}/devicesAnalysis/${analysis.id}`\n      : `/collection/${currentCollection.id}/devicesAnalysis/${analysis.id}`\n    )\n  }\n\n  handleChangeAnalysisExperimentProp({ analysis, experiment, prop, value }) {\n    const experimentKey = analysis.experiments.findIndex((e) => e.id === experiment.id)\n    analysis.experiments[experimentKey][prop] = value\n    this.state.currentElement = analysis\n  }\n\n  handleDeleteAnalysisExperiment({ device, analysis, experiment }) {\n    const sample = device.samples.find(s => s.id === experiment.deviceSampleId)\n    const sampleKey = device.samples.findIndex(s => s.id === experiment.deviceSampleId)\n    device.samples[sampleKey].types = sample.types.filter(t => t !== analysis.analysisType)\n    ElementActions.saveDevice(device)\n    ElementActions.fetchDeviceAnalysisById.defer(analysis.id)\n  }\n\n  handleDuplicateAnalysisExperiment({ device, analysis, experiment }) {\n    const sample = device.samples.find(s => s.id === experiment.deviceSampleId)\n    const newSample = DeviceSample.buildEmpty(analysis.deviceId, { id: sample.sampleId, short_label: sample.shortLabel })\n    newSample.types = [analysis.analysisType]\n    device.samples.push(newSample)\n    ElementActions.saveDevice(device)\n    ElementActions.fetchDeviceAnalysisById.defer(analysis.id)\n  }\n\n  // SEARCH\n\n  handleFetchBasedOnSearchSelection(result) {\n    Object.keys(result).forEach((key) => {\n      this.state.elements[key] = result[key];\n    });\n  }\n\n  handleFetchBasedOnSearchResultIds(result) {\n    Object.keys(result).forEach((key) => {\n      this.state.elements[key] = result[key];\n    });\n  }\n\n  handleDispatchSearchResult(result) {\n    Object.keys(result).forEach((key) => {\n      this.state.elements[key] = result[key];\n    });\n  }\n\n  handlefetchBasedOnStructureAndCollection(result) {\n    Object.keys(result).forEach((key) => {\n      this.state.elements[key] = result[key];\n    });\n  }\n\n  // -- Elements --\n  handleDeleteElements(options) {\n    this.waitFor(UIStore.dispatchToken);\n    const ui_state = UIStore.getState();\n    const { sample, reaction, wellplate, screen, research_plan, currentCollection, cell_line } = ui_state;\n    const selecteds = this.state.selecteds.map(s => ({ id: s.id, type: s.type }));\n    const params = {\n      options,\n      sample,\n      reaction,\n      wellplate,\n      screen,\n      research_plan,\n      currentCollection,\n      selecteds,\n      cell_line\n    };\n\n    const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n    if (MatrixCheck(currentUser.matrix, 'genericElement')) {\n      const { klasses } = UIStore.getState();\n\n      // eslint-disable-next-line no-unused-expressions\n      klasses && klasses.forEach((klass) => {\n        params[`${klass}`] = ui_state[`${klass}`];\n      });\n    }\n\n    ElementActions.deleteElementsByUIState(params);\n  }\n\n  handleUpdateElementsCollection() {\n    CollectionActions.fetchUnsharedCollectionRoots();\n    UIActions.uncheckWholeSelection.defer();\n    this.fetchElementsByCollectionIdandLayout();\n  }\n\n  handleAssignElementsCollection() {\n    CollectionActions.fetchUnsharedCollectionRoots();\n    UIActions.uncheckWholeSelection.defer();\n    this.fetchElementsByCollectionIdandLayout();\n  }\n\n  handleRemoveElementsCollection() {\n    // CollectionActions.fetchUnsharedCollectionRoots();\n    // UIActions.clearSearchSelection.defer()\n    UIActions.uncheckWholeSelection.defer();\n    this.waitFor(UIStore.dispatchToken)\n\n    this.fetchElementsByCollectionIdandLayout();\n  }\n\n  fetchElementsByCollectionIdandLayout() {\n    const { currentSearchSelection, currentCollection } = UIStore.getState();\n    const isSync = !!(currentCollection && currentCollection.is_sync_to_me);\n    if (currentSearchSelection != null) {\n      const { currentType } = UserStore.getState();\n      this.handleRefreshElements(currentType);\n    } else {\n      const { profile } = UserStore.getState();\n      if (profile && profile.data && profile.data.layout) {\n        const { layout } = profile.data;\n\n        if (layout.sample && layout.sample > 0) { this.handleRefreshElements('sample'); }\n        if (layout.reaction && layout.reaction > 0) { this.handleRefreshElements('reaction'); }\n        if (layout.wellplate && layout.wellplate > 0) { this.handleRefreshElements('wellplate'); }\n        if (layout.screen && layout.screen > 0) { this.handleRefreshElements('screen'); }\n        if (layout.cell_line && layout.cell_line > 0) { this.handleRefreshElements('cell_line'); }\n        if (!isSync && layout.research_plan && layout.research_plan > 0) { this.handleRefreshElements('research_plan'); }\n\n\n        const { currentUser, genericEls } = UserStore.getState();\n        if (MatrixCheck(currentUser.matrix, 'genericElement')) {\n          // eslint-disable-next-line no-unused-expressions\n          const genericNames = (genericEls.map(el => el.name)) || [];\n          genericNames.forEach((klass) => {\n            if (layout[`${klass}`] && layout[`${klass}`] > 0) { this.handleRefreshElements(klass); }\n          });\n        }\n      }\n    }\n  }\n\n  handleFetchGenericElsByCollectionId(result) {\n    //const klassName = result.element_klass && result.element_klass.name;\n    let type = result.type;\n    if (typeof type === 'undefined' || type == null) {\n      type = (result.result.elements && result.result.elements.length > 0 && result.result.elements[0].type) || result.result.type;\n    }\n    this.state.elements[`${type}s`] = result.result;\n  }\n\n  handleFetchGenericElById(result) {\n    this.changeCurrentElement(result);\n  }\n\n  handleCreateGenericEl(genericEl) {\n    UserActions.fetchCurrentUser();\n    this.handleRefreshElements((genericEl.element_klass && genericEl.element_klass.name) || 'genericEl');\n    //this.handleRefreshElements('genericEl');\n    this.navigateToNewElement(genericEl, 'GenericEl');\n  }\n\n  handleFetchSamplesByCollectionId(result) {\n    this.state.elements.samples = result;\n  }\n\n  handleFetchReactionsByCollectionId(result) {\n    this.state.elements.reactions = result;\n  }\n\n  handleFetchWellplatesByCollectionId(result) {\n    this.state.elements.wellplates = result;\n  }\n\n  handleFetchScreensByCollectionId(result) {\n    this.state.elements.screens = result;\n  }\n\n  handlefetchResearchPlansByCollectionId(result) {\n    this.state.elements.research_plans = result;\n  }\n  handlefetchCellLinesByCollectionId(result) {\n    this.state.elements.cell_lines = result;\n  }\n\n  // -- Samples --\n\n  handleFetchSampleById(result) {\n    if (!this.state.currentElement || this.state.currentElement._checksum != result._checksum) {\n      this.changeCurrentElement(result);\n    }\n  }\n\n  handleCreateSample({ element, closeView }) {\n    UserActions.fetchCurrentUser();\n    fetchOls('sample');\n    this.handleRefreshElements('sample');\n    if (!closeView) {\n      this.navigateToNewElement(element);\n    }\n  }\n\n  handleCreateSampleForReaction({ newSample, reaction, materialGroup }) {\n    UserActions.fetchCurrentUser();\n    reaction.addMaterial(newSample, materialGroup);\n    this.handleRefreshElements('sample');\n    ElementActions.handleSvgReactionChange(reaction);\n    this.changeCurrentElement(reaction);\n  }\n\n  handleEditReactionSample(result) {\n    const sample = result.sample;\n    sample.belongTo = result.reaction;\n    this.changeCurrentElement(sample);\n  }\n\n  handleEditWellplateSample(result) {\n    const sample = result.sample;\n    sample.belongTo = result.wellplate;\n    this.changeCurrentElement(sample);\n  }\n\n  handleUpdateSampleForReaction({ reaction, sample, closeView }) {\n    // UserActions.fetchCurrentUser();\n    ElementActions.handleSvgReactionChange(reaction);\n    if (closeView) {\n      this.changeCurrentElement(reaction);\n    } else {\n      this.changeCurrentElement(sample);\n    }\n\n    // TODO: check if this is needed with the new handling of changing CE\n    // maybe this.handleRefreshElements is enough\n    this.handleUpdateElement(sample);\n  }\n\n  handleUpdateLinkedElement({ element, closeView }) {\n    if (closeView) {\n      this.deleteCurrentElement(element);\n    } else {\n      this.changeCurrentElement(element);\n    }\n    this.handleUpdateElement(element);\n  }\n\n  handleRefreshSyncCollections() {\n    CollectionActions.fetchSyncInCollectionRoots();\n  }\n\n  handleUpdateSampleForWellplate(wellplate) {\n    // UserActions.fetchCurrentUser()\n    this.state.currentElement = null;\n    this.handleRefreshElements('sample');\n\n    const wellplateID = wellplate.id;\n    ElementActions.fetchWellplateById(wellplateID);\n  }\n\n  handleSplitAsSubsamples(ui_state) {\n    ElementActions.fetchSamplesByCollectionId(\n      ui_state.currentCollection.id, {},\n      ui_state.isSync, this.state.moleculeSort\n    );\n  }\n\n  handleSplitElements(obj) {\n    const { name, ui_state } = obj;\n    const page = ui_state[name] ? ui_state[name].page : 1;\n    const per_page = ui_state.number_of_results;\n    const { fromDate, toDate, userLabel, productOnly } = ui_state;\n    const params = { page, per_page, fromDate, toDate, userLabel, productOnly, name };\n    ElementActions.fetchGenericElsByCollectionId(ui_state.currentCollection.id, params, ui_state.isSync, name);\n  }\n\n  handleSplitAsSubwellplates(ui_state) {\n    ElementActions.fetchWellplatesByCollectionId(ui_state.currentCollection.id);\n    ElementActions.fetchSamplesByCollectionId(\n      ui_state.currentCollection.id, {},\n      ui_state.isSync, this.state.moleculeSort\n    );\n  }\n\n  handleSplitAsSubCellLines(ui_state) {\n    ElementActions.fetchCellLinesByCollectionId(ui_state.currentCollection.id);\n  }\n\n  // Molecules\n  handleFetchMoleculeByMolfile(result) {\n    // Attention: This is intended to update SampleDetails\n    this.state.currentElement.molecule = result;\n    // this.state.currentElement.molfile = result.molfile;\n    this.state.currentElement.molecule_id = result.id;\n    this.handleRefreshElements('sample');\n  }\n\n  // Samples with residues\n  handleFetchResidueByMolfile(result) {\n    // Attention: This is intended to update SampleDetails\n    //this.state.currentElement.molecule = result;\n    this.state.currentElement.sample = result;\n    this.handleRefreshElements('sample');\n  }\n\n  handleCopySampleFromClipboard(collection_id) {\n    const clipboardSamples = ClipboardStore.getState().samples;\n    if (clipboardSamples && clipboardSamples.length > 0) {\n      this.changeCurrentElement(Sample.copyFromSampleAndCollectionId(clipboardSamples[0], collection_id, true));\n    }\n  }\n\n  /**\n   * @param {Object} params = { reaction, materialGroup }\n   */\n  handleAddSampleToMaterialGroup(params) {\n    const { materialGroup } = params\n    let { reaction } = params\n\n    let sample = Sample.buildEmpty(reaction.collection_id)\n    sample.molfile = sample.molfile || ''\n    sample.molecule = sample.molecule == undefined ? sample : sample.molecule\n    sample.sample_svg_file = sample.sample_svg_file\n    sample.belongTo = reaction;\n    sample.matGroup = materialGroup;\n    reaction.changed = true;\n    this.changeCurrentElement(sample);\n  }\n\n  handleShowReactionMaterial(params) {\n    const { reaction, sample, coefficient } = params;\n    const { selecteds } = this.state;\n    sample.belongTo = reaction;\n    const obj = {\n      sId: sample.id,\n      rId: reaction.id,\n      coefficient\n    };\n    this.setState((prevState) => {\n      const updatedCoefficient = [...prevState.refreshCoefficient];\n      let found = false;\n      selecteds.forEach((element) => {\n        if (element.type === 'reaction' && element.id === obj.rid) {\n          found = true;\n        }\n      });\n      if (!found) {\n        updatedCoefficient.push(obj);\n      }\n      return { refreshCoefficient: updatedCoefficient };\n    });\n    this.changeCurrentElement(sample);\n  }\n\n  handleImportSamplesFromFile(data) {\n    if (data.sdf) {\n      UIActions.updateModalProps.defer({\n        show: true,\n        component: ModalImportConfirm,\n        title: \"Sample Import Confirmation\",\n        action: null,\n        listSharedCollections: false,\n        customModal: \"custom-modal\",\n        data: data.data,\n        //raw_data: data.raw_data,\n        custom_data_keys: data.custom_data_keys,\n        mapped_keys: data.mapped_keys,\n        collection_id: data.collection_id,\n      })\n    } else {\n      this.handleRefreshElements('sample');\n    }\n\n    this.handleRefreshElements('sample');\n  }\n\n  handleImportSamplesFromFileConfirm(data) {\n    if (data.sdf) {\n      this.handleRefreshElements('sample');\n    }\n  }\n\n  // -- Wellplates --\n\n  handleBulkCreateWellplatesFromSamples() {\n    this.handleRefreshElements('wellplate');\n    this.handleRefreshElements('sample');\n  }\n\n  handleFetchWellplateById(result) {\n    this.changeCurrentElement(result);\n    // this.state.currentElement = result;\n    // this.navigateToNewElement(result)\n  }\n\n  handleImportWellplateSpreadsheet(result) {\n    if (result.error) { return; }\n\n    const { selecteds } = this.state;\n\n    const index = this.elementIndex(selecteds, result);\n    const newSelecteds = this.updateElement(result, index);\n    this.setState({ selecteds: newSelecteds });\n  }\n\n  handleCreateWellplate(wellplate) {\n    fetchOls('wellplate');\n    this.handleRefreshElements('wellplate');\n    this.navigateToNewElement(wellplate);\n  }\n\n  handleGenerateWellplateFromClipboard(collection_id) {\n    let clipboardSamples = ClipboardStore.getState().samples;\n\n    this.changeCurrentElement(Wellplate.buildFromSamplesAndCollectionId(clipboardSamples, collection_id));\n    //this.state.currentElement = Wellplate.buildFromSamplesAndCollectionId(clipboardSamples, collection_id);\n  }\n  // -- Screens --\n\n  handleAddResearchPlanToScreen(screen) {\n    fetchOls('screen');\n    this.handleRefreshElements('screen');\n    this.navigateToNewElement(screen);\n  }\n\n  handleFetchScreenById(result) {\n    if (!this.state.currentElement || this.state.currentElement._checksum != result._checksum) {\n      this.changeCurrentElement(result);\n      //this.state.currentElement = result;\n    }\n  }\n\n  handleCreateScreen(screen) {\n    fetchOls('screen');\n    this.handleRefreshElements('screen');\n    this.navigateToNewElement(screen);\n  }\n\n  handleGenerateScreenFromClipboard(collection_id) {\n    let clipboardWellplates = ClipboardStore.getState().wellplates;\n    this.changeCurrentElement(Screen.buildFromWellplatesAndCollectionId(clipboardWellplates, collection_id));\n  }\n\n  // -- ResearchPlans --\n\n  handlefetchResearchPlanById(result) {\n    this.changeCurrentElement(result);\n    //this.state.currentElement = result;\n  }\n\n  handleCreateResearchPlan(research_plan) {\n    this.handleRefreshElements('research_plan');\n    this.navigateToNewElement(research_plan);\n  }\n\n  handleImportWellplateIntoResearchPlan(result) {\n    if (result.error) { return; }\n\n    const { selecteds } = this.state;\n\n    const index = this.elementIndex(selecteds, result);\n    const newSelecteds = this.updateElement(result, index);\n    this.setState({ selecteds: newSelecteds });\n  }\n\n  handleImportTableFromSpreadsheet(result) {\n    if (result.error) { return; }\n\n    const { selecteds } = this.state;\n\n    const index = this.elementIndex(selecteds, result);\n    const newSelecteds = this.updateElement(result, index);\n    this.setState({ selecteds: newSelecteds });\n  }\n\n  // -- Reactions --\n\n  handleFetchReactionById(result) {\n    if (!this.state.currentElement || (this.state.currentElement && this.state.currentElement._checksum) != result._checksum) {\n      this.changeCurrentElement(result);\n      this.state.elements.reactions.elements = this.refreshReactionsListForSpecificReaction(result);\n      //  this.navigateToNewElement(result);\n    }\n  }\n\n  refreshReactionsListForSpecificReaction(newReaction) {\n    return this.state.elements.reactions.elements.map(reaction => {\n      return reaction.id === newReaction.id\n        ? newReaction\n        : reaction\n    });\n  }\n\n  handleTryFetchById(result) {\n    if (result.hasOwnProperty(\"error\")) {\n      this.state.elementWarning = true\n    } else {\n      this.changeCurrentElement(result);\n      // this.state.currentElement = result\n      this.navigateToNewElement(result)\n    }\n  }\n\n  handleFetchCellLineById(result){\n    this.changeCurrentElement(result);\n  }\n\n  handleCreateCellLine(cellLine) {\n    this.handleRefreshElements('cell_line');\n    this.navigateToNewElement(cellLine);\n  }\n\n  handleCloseWarning() {\n    this.state.elementWarning = false\n  }\n\n\n  handleCreateReaction(reaction) {\n    UserActions.fetchCurrentUser();\n    fetchOls('reaction');\n    this.handleRefreshElements('reaction');\n    this.navigateToNewElement(reaction);\n  }\n\n  handleCopyReactionFromId(reaction) {\n    this.waitFor(UIStore.dispatchToken);\n    const uiState = UIStore.getState();\n    this.changeCurrentElement(Reaction.copyFromReactionAndCollectionId(reaction, uiState.currentCollection.id));\n  }\n\n  handleCopyReaction(result) {\n    this.changeCurrentElement(Reaction.copyFromReactionAndCollectionId(result.reaction, result.colId));\n    Aviator.navigate(`/collection/${result.colId}/reaction/copy`);\n  }\n\n  handleCopyResearchPlan(result) {\n    this.changeCurrentElement(ResearchPlan.copyFromResearchPlanAndCollectionId(result.research_plan, result.colId));\n    Aviator.navigate(`/collection/${result.colId}/research_plan/copy`);\n  }\n\n  handleCopyElement(result) {\n    this.changeCurrentElement(GenericEl.copyFromCollectionId(result.element, result.colId));\n    Aviator.navigate(`/collection/${result.colId}/${result.element.type}/copy`);\n  }\n\n  handleCopyCellLine(result){\n    UserActions.fetchCurrentUser(); //Needed to update the cell line counter in frontend\n    Aviator.navigate(`/collection/${result.collectionId}/cell_line/${result.id}`);\n  }\n\n  handleOpenReactionDetails(reaction) {\n    this.changeCurrentElement(reaction);\n    this.handleRefreshElements('sample')\n  }\n\n  // -- Reactions Literatures --\n\n  handleCreateReactionLiterature(result) {\n    this.state.currentElement.literatures.push(result);\n  }\n\n  handleDeleteReactionLiterature(reactionId) {\n    ElementActions.fetchLiteraturesByReactionId(reactionId);\n    this.handleRefreshElements('reaction');\n  }\n\n  handleFetchLiteraturesByReactionId(result) {\n    this.state.currentElement.literatures = result.literatures;\n  }\n\n  // -- Generic --\n\n  navigateToNewElement(element = {}, klassType = '') {\n    this.waitFor(UIStore.dispatchToken);\n    const { type, id } = element;\n    const { uri, namedParams } = Aviator.getCurrentRequest();\n    const uriArray = uri.split(/\\//);\n    if (!type) {\n      Aviator.navigate(`/${uriArray[1]}/${uriArray[2]}`, { silent: true });\n      return null;\n    }\n    namedParams[`${type}ID`] = id;\n    Aviator.navigate(`/${uriArray[1]}/${uriArray[2]}/${type}/${id}`, { silent: true });\n    elementShowOrNew({ type, klassType, params: namedParams });\n    return null;\n  }\n\n  handleGenerateEmptyElement(element) {\n    const { currentElement } = this.state;\n\n    const newElementOfSameTypeIsPresent =\n      currentElement && currentElement.isNew && currentElement.type ==\n      element.type;\n    if (!newElementOfSameTypeIsPresent) {\n      this.changeCurrentElement(element);\n    }\n  }\n\n  handleUnselectCurrentElement() {\n    this.state.currentElement = null;\n  }\n\n  handleSetPagination(pagination) {\n    this.waitFor(UIStore.dispatchToken);\n    this.handleRefreshElements(pagination.type);\n  }\n\n  handleRefreshElements(type) {\n    this.waitFor(UIStore.dispatchToken);\n    const uiState = UIStore.getState();\n    if (!uiState.currentCollection || !uiState.currentCollection.id) return;\n    if (typeof uiState[type] === 'undefined') return;\n\n    const { page } = uiState[type];\n    const { moleculeSort } = this.state;\n    if (this.state.elements[`${type}s`]) {\n      this.state.elements[`${type}s`].page = page;\n    }\n\n    // TODO if page changed -> fetch\n    // if there is a currentSearchSelection\n    //    we have to execute the respective action\n    const { currentSearchSelection, currentSearchByID } = uiState;\n\n    if (currentSearchSelection != null) {\n      currentSearchSelection.page_size = uiState.number_of_results;\n      ElementActions.fetchBasedOnSearchSelectionAndCollection.defer({\n        selection: currentSearchSelection,\n        collectionId: uiState.currentCollection.id,\n        page,\n        isSync: uiState.isSync,\n        moleculeSort\n      });\n    } else if (currentSearchByID != null) {\n      this.handleRefreshElementsForSearchById(type, uiState, currentSearchByID);\n    } else {\n      const per_page = uiState.number_of_results;\n      const { fromDate, toDate, userLabel, productOnly } = uiState;\n      const params = { page, per_page, fromDate, toDate, userLabel, productOnly, name: type };\n      const fnName = type.split('_').map(x => x[0].toUpperCase() + x.slice(1)).join(\"\") + 's';\n      let fn = `fetch${fnName}ByCollectionId`;\n      const allowedActions = [\n        'fetchSamplesByCollectionId',\n        'fetchReactionsByCollectionId',\n        'fetchWellplatesByCollectionId',\n        'fetchScreensByCollectionId',\n        'fetchResearchPlansByCollectionId',\n        'fetchCellLinesByCollectionId'\n      ];\n      if (allowedActions.includes(fn)) {\n        ElementActions[fn](uiState.currentCollection.id, params, uiState.isSync, moleculeSort);\n      } else {\n        ElementActions.fetchGenericElsByCollectionId(uiState.currentCollection.id, params, uiState.isSync, type);\n        ElementActions.fetchSamplesByCollectionId(uiState.currentCollection.id, params, uiState.isSync, moleculeSort);\n      }\n    }\n\n    MessagesFetcher.fetchSpectraMessages(0).then((result) => {\n      result?.messages.sort((a, b) => (a.id - b.id));\n      const messages = result?.messages;\n      if (messages && messages.length > 0) {\n        const lastMsg = messages[0]\n        this.setState({ spectraMsg: lastMsg })\n      }\n    })\n  }\n\n  handleRefreshElementsForSearchById(type, uiState, currentSearchByID) {\n    currentSearchByID.page_size = uiState.number_of_results;\n    const { filterCreatedAt, fromDate, toDate, userLabel, productOnly } = uiState;\n    const { moleculeSort } = this.state;\n    const { page } = uiState[type];\n    let filterParams = {};\n    const elnElements = ['sample', 'reaction', 'screen', 'wellplate', 'research_plan'];\n    let modelName = !elnElements.includes(type) ? 'element' : type;\n\n    if (fromDate || toDate || userLabel || productOnly) {\n      filterParams = {\n        filter_created_at: filterCreatedAt,\n        from_date: fromDate,\n        to_date: toDate,\n        user_label: userLabel,\n        product_only: productOnly,\n      }\n    }\n\n    const selection = {\n      elementType: 'by_ids',\n      id_params: {\n        model_name: `${modelName}`,\n        ids: currentSearchByID[`${type}s`].ids,\n        total_elements: currentSearchByID[`${type}s`].totalElements,\n        with_filter: true,\n      },\n      list_filter_params: filterParams,\n      search_by_method: 'search_by_ids',\n      page_size: currentSearchByID.page_size,\n    };\n\n    ElementActions.fetchBasedOnSearchResultIds.defer({\n      selection: selection,\n      collectionId: uiState.currentCollection.id,\n      page: page,\n      isSync: uiState.isSync,\n      moleculeSort\n    });\n  }\n\n  // CurrentElement\n  handleSetCurrentElement(result) {\n    this.changeCurrentElement(result);\n  }\n\n  handleDeselectCurrentElement() {\n    this.changeCurrentElement(null);\n  }\n\n  handleChangeSorting(sort) {\n    this.state.moleculeSort = sort;\n    this.waitFor(UIStore.dispatchToken);\n    this.handleRefreshElements('sample');\n  }\n\n  handleChangeElementsFilter(filter) {\n    const userState = UserStore.getState();\n    if (!userState.profile.filters) {\n      userState.profile.data.filters = {};\n    }\n    userState.profile.data.filters[filter.name] = {\n      sort: filter.sort,\n      group: filter.group,\n      direction: filter.direction,\n    };\n\n    this.handleRefreshElements(filter.name);\n  }\n\n  // //////////////////////\n  // formerly DetailStore\n  // TODO: clean this section\n  handleSelect(index) {\n    this.resetCurrentElement(index, this.state.selecteds);\n  }\n\n  handleClose({ deleteEl, force }) {\n    // Currently ignore report \"isPendingToSave\"\n    const deletableTyps = ['report', 'prediction'];\n    const isDeletableTyps = deletableTyps.indexOf(deleteEl.type) >= 0;\n    if (force || isDeletableTyps || this.isDeletable(deleteEl)) {\n      this.deleteCurrentElement(deleteEl);\n    } else {\n      this.setState({ deletingElement: deleteEl });\n    }\n  }\n\n  handleConfirmDelete(confirm) {\n    const deleteEl = this.state.deletingElement\n    if (confirm) {\n      this.deleteCurrentElement(deleteEl)\n    }\n    this.setState({ deletingElement: null })\n  }\n\n  handleChangeCurrentElement({ oriEl, nextEl }) {\n    const { selecteds } = this.state;\n    const index = this.elementIndex(selecteds, nextEl);\n    this.synchronizeElements(oriEl);\n\n    if (index === -1) {\n      this.state.activeKey = selecteds.length;\n      this.state.selecteds = this.addElement(nextEl);\n    } else {\n      this.state.activeKey = index;\n      this.state.selecteds = this.updateElement(nextEl, index);\n    }\n\n    return true\n  }\n\n  changeCurrentElement(nextEl) {\n    const { selecteds } = this.state;\n    const index = this.elementIndex(selecteds, nextEl);\n    this.synchronizeElements(this.state.currentElement);\n\n    if (index === -1) {\n      this.state.activeKey = selecteds.length;\n      if (nextEl) this.state.selecteds = this.addElement(nextEl);\n    } else {\n      this.state.activeKey = index;\n      this.state.selecteds = this.updateElement(nextEl, index);\n    }\n    // this.synchronizeElements(this.state.currentElement);\n    this.state.currentElement = nextEl;\n  }\n\n\n  handleGetMoleculeCas(updatedSample) {\n    const selecteds = this.state.selecteds;\n    const index = this.elementIndex(selecteds, updatedSample)\n    const newSelecteds = this.updateElement(updatedSample, index)\n    this.setState({ selecteds: newSelecteds })\n  }\n\n  UpdateMolecule(updatedSample) {\n    if (updatedSample) {\n      const selecteds = this.state.selecteds;\n      const index = this.elementIndex(selecteds, updatedSample);\n      const newSelecteds = this.updateElement(updatedSample, index);\n      this.setState({ selecteds: newSelecteds });\n    }\n  }\n\n  UpdateResearchPlanAttaches(updatedResearchPlan) {\n    const { selecteds } = this.state;\n    ResearchPlansFetcher.fetchById(updatedResearchPlan.id)\n      .then((result) => {\n        result.mode = 'edit';\n        this.changeCurrentElement(result);\n        const index = this.elementIndex(selecteds, result);\n        const newSelecteds = this.updateElement(result, index);\n        this.setState({ selecteds: newSelecteds });\n      });\n  }\n\n  handleUpdateResearchPlanAttaches(updatedResearchPlan) {\n    this.UpdateResearchPlanAttaches(updatedResearchPlan);\n  }\n\n  UpdateWellplateAttaches(updatedWellplate) {\n    const { selecteds } = this.state;\n    WellplatesFetcher.fetchById(updatedWellplate.id)\n      .then((result) => {\n        this.changeCurrentElement(result);\n        const index = this.elementIndex(selecteds, result);\n        const newSelecteds = this.updateElement(result, index);\n        this.setState({ selecteds: newSelecteds });\n      });\n  }\n\n  handleUpdateWellplateAttaches(updatedWellplate) {\n    this.UpdateWellplateAttaches(updatedWellplate);\n  }\n\n  UpdateScreen(updatedScreen) {\n    const { selecteds } = this.state;\n    ScreensFetcher.fetchById(updatedScreen.id)\n      .then((result) => {\n        this.changeCurrentElement(result);\n        const index = this.elementIndex(selecteds, result);\n        const newSelecteds = this.updateElement(result, index);\n        this.setState({ selecteds: newSelecteds });\n      });\n  }\n\n  handleUpdateScreen(updatedScreen) {\n    this.UpdateScreen(updatedScreen);\n  }\n\n  handleUpdateMoleculeNames(updatedSample) {\n    this.UpdateMolecule(updatedSample);\n  }\n\n  handleUpdateMoleculeCas(updatedSample) {\n    this.UpdateMolecule(updatedSample);\n  }\n\n  handleUpdateElement(updatedElement) {\n    switch (updatedElement.type) {\n      case 'sample':\n        fetchOls('sample');\n        this.handleRefreshElements('sample');\n        break;\n      case 'reaction':\n        fetchOls('reaction');\n        this.handleRefreshElements('reaction');\n        this.handleRefreshElements('sample');\n        break;\n      case 'screen':\n        fetchOls('screen');\n        this.handleRefreshElements('screen');\n        this.handleUpdateScreen(updatedElement);\n        break;\n      case 'research_plan':\n        this.handleRefreshElements('research_plan');\n        this.handleUpdateResearchPlanAttaches(updatedElement);\n        break;\n      case 'cell_line':\n        this.changeCurrentElement(updatedElement);\n        this.handleRefreshElements('cell_line');\n        break;\n      case 'wellplate':\n        fetchOls('wellplate');\n        this.handleRefreshElements('wellplate');\n        this.handleUpdateWellplateAttaches(updatedElement);\n        this.handleRefreshElements('sample');\n        break;\n      case 'genericEl':\n        this.handleRefreshElements('genericEl');\n        break;\n      default:\n        this.changeCurrentElement(updatedElement);\n        this.handleRefreshElements(updatedElement.type);\n        break;\n    }\n\n    return true;\n  }\n\n  handleUpdateEmbeddedResearchPlan() {\n    this.handleRefreshElements('research_plan');\n  }\n\n  synchronizeElements(previous) {\n    const { selecteds, refreshCoefficient } = this.state;\n\n    if (previous instanceof Sample) {\n      const rId = previous.tag && previous.tag.taggable_data\n        && previous.tag.taggable_data.reaction_id;\n      const openedReaction = selecteds.find(el => SameEleTypId(el, { type: 'reaction', id: rId }));\n      if (openedReaction) {\n        if (refreshCoefficient && refreshCoefficient.length > 0) {\n          refreshCoefficient.forEach((element) => {\n            if (element.sId === previous.id) {\n              openedReaction.updateMaterial(previous, element);\n            }\n          });\n\n          // For REPO\n          const freeze = (openedReaction && openedReaction.publication && openedReaction.publication.taggable_data &&\n            openedReaction.publication.taggable_data.scheme_only === true && (openedReaction.publication.state !== 'declined' || openedReaction.publication.state !== 'withdrawn')) || false;\n          if (freeze === false) {\n            openedReaction.updateMaterial(previous);\n          }\n\n        } else {\n          openedReaction.updateMaterial(previous);\n        }\n        if (previous.isPendingToSave) {\n          openedReaction.changed = previous.isPendingToSave;\n        }\n      }\n    }\n\n    if (previous instanceof Reaction) {\n      const samples = previous.samples;\n      selecteds.map((nextSample) => {\n        const previousSample = samples.find(s => SameEleTypId(nextSample, s));\n        if (previousSample) {\n          nextSample.amount_value = previousSample.amount_value;\n          nextSample.amount_unit = previousSample.amount_unit;\n          nextSample.container = previousSample.container;\n          nextSample.density = previousSample.density;\n          nextSample._molarity_unit = previousSample._molarity_unit;\n          nextSample._molarity_value = previousSample._molarity_value;\n        }\n        return nextSample;\n      });\n    }\n\n    return previous;\n  }\n\n  addElement(addEl) {\n    const selecteds = this.state.selecteds\n    return [...selecteds, addEl]\n  }\n\n  updateElement(updateEl, index) {\n    const { selecteds } = this.state;\n    return [\n      ...selecteds.slice(0, index),\n      updateEl,\n      ...selecteds.slice(index + 1)\n    ];\n  }\n\n  deleteElement(deleteEl) {\n    return this.state.selecteds.filter(el => !SameEleTypId(el, deleteEl));\n  }\n\n  elementIndex(selecteds, newSelected) {\n    let index = -1;\n    if (newSelected) {\n      selecteds.forEach((s, i) => {\n        if (SameEleTypId(s, newSelected)) { index = i; }\n      });\n    }\n    return index;\n  }\n\n  resetCurrentElement(newKey, newSelecteds) {\n    const newCurrentElement = newKey < 0 ? newSelecteds[0] : newSelecteds[newKey]\n\n    if (newSelecteds.length === 0) {\n      this.changeCurrentElement(null);\n    } else {\n      this.changeCurrentElement(newCurrentElement);\n    }\n\n    UrlSilentNavigation(newCurrentElement)\n    return true\n  }\n\n  deleteCurrentElement(deleteEl) {\n    const newSelecteds = this.deleteElement(deleteEl)\n    let left = this.state.activeKey - 1\n    if (left < 0) left = 0;\n    this.setState({ selecteds: newSelecteds });\n    this.resetCurrentElement(left, newSelecteds);\n  }\n\n  isDeletable(deleteEl) {\n    return deleteEl && deleteEl.isPendingToSave ? false : true\n  }\n\n  handleDeletingElements(response) {\n    const elements = response && response.selecteds;\n    const { currentElement } = this.state;\n    const currentNotDeleted = intersectionWith([currentElement], elements, SameEleTypId)[0];\n    const newSelecteds = intersectionWith(this.state.selecteds, elements, SameEleTypId);\n    const ui_state = UIStore.getState();\n\n    if (currentNotDeleted) {\n      const currentIdx = findIndex(newSelecteds, o => o.id === currentElement.id) || 0;\n      this.setState({ selecteds: newSelecteds, activeKey: currentIdx });\n    } else {\n      this.setState({ selecteds: newSelecteds }, this.resetCurrentElement(-1, newSelecteds));\n    }\n\n    this.fetchElementsByCollectionIdandLayout();\n  }\n\n  handleRefreshComputedProp(cprop) {\n    const { selecteds, currentElement } = this.state;\n    const samples = selecteds.concat([currentElement]).filter(x => (\n      x instanceof Sample && x.id == cprop.sample_id\n    ));\n    if (samples.length === 0) return this.handleRefreshElements('sample');\n\n    samples.forEach(el => {\n      const found = el.molecule_computed_props && el.molecule_computed_props.find(x => x.id == cprop.id);\n      if (!found) {\n        el.molecule_computed_props && el.molecule_computed_props.push(cprop);\n        return;\n      }\n\n      const foundDate = Date.parse(found.updated_at);\n      const propDate = Date.parse(cprop.updated_at);\n      if (propDate > foundDate) {\n        found.max_potential = cprop.max_potential;\n        found.min_potential = cprop.min_potential;\n        found.mean_potential = cprop.mean_potential;\n        found.lumo = cprop.lumo;\n        found.homo = cprop.homo;\n        found.ip = cprop.ip;\n        found.ea = cprop.ea;\n        found.dipol_debye = cprop.dipol_debye;\n        found.mean_abs_potential = cprop.mean_abs_potential;\n        found.status = cprop.status;\n      }\n    });\n\n    this.handleRefreshElements('sample');\n  }\n\n  // End of DetailStore\n  /////////////////////\n\n  // -- Private Note --\n  handleCreatePrivateNote(note) {\n    this.state.currentElement.private_note = note\n    this.changeCurrentElement(this.state.currentElement)\n  }\n\n  handleUpdatePrivateNote(note) {\n    this.state.currentElement.private_note = note\n    this.changeCurrentElement(this.state.currentElement)\n  }\n\n  // -- Metadata --\n\n  handleFetchMetadata(metadata) {\n    this.changeCurrentElement(metadata);\n  }\n}\n\nexport default alt.createStore(ElementStore, 'ElementStore');\n","import alt from 'src/stores/alt/alt';\nimport GasPhaseReactionActions from 'src/stores/alt/actions/GasPhaseReactionActions';\n\nclass GasPhaseReactionStore {\n  constructor() {\n    this.state = {\n      catalystReferenceMolValue: null,\n      reactionVesselSizeValue: null,\n    };\n\n    this.bindListeners({\n      setCatalystReferenceMole: this.setCatalystReferenceMole,\n      setReactionVesselSize: this.setReactionVesselSize,\n    });\n    this.bindActions(GasPhaseReactionActions);\n  }\n\n  setCatalystReferenceMole(value) {\n    this.setState({\n      catalystReferenceMolValue: value,\n    });\n  }\n\n  setReactionVesselSize(value) {\n    this.setState({\n      reactionVesselSizeValue: value,\n    });\n  }\n}\n\nexport default alt.createStore(GasPhaseReactionStore, 'GasPhaseReactionStore');\n","import alt from 'src/stores/alt/alt';\nimport KeyboardActions from 'src/stores/alt/actions/KeyboardActions';\n\nclass KeyboardStore {\n  constructor() {\n    this.state = {\n      context: \"sample\",\n      documentKeyDownCode: null\n    };\n\n    this.bindListeners({\n      handleDocumentKeyDown: KeyboardActions.documentKeyDown,\n      handleContextChange: KeyboardActions.contextChange\n    })\n  }\n\n  handleDocumentKeyDown(keyCode) {\n    this.state.documentKeyDownCode = keyCode\n  }\n\n  handleContextChange(context) {\n    this.state.context = context\n  }\n}\n\nexport default alt.createStore(KeyboardStore, 'KeyboardStore');\n","import alt from 'src/stores/alt/alt';\nimport LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport ReportActions from 'src/stores/alt/actions/ReportActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport InboxActions from 'src/stores/alt/actions/InboxActions';\nimport PredictionActions from 'src/stores/alt/actions/PredictionActions';\nimport RepositoryActions from 'src/stores/alt/repo/actions/RepositoryActions';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport ReviewActions from 'src/stores/alt/repo/actions/ReviewActions';\nimport EmbargoActions from 'src/stores/alt/repo/actions/EmbargoActions';\n\nclass LoadingStore {\n  constructor() {\n    this.loading = false;\n    this.state = { filePool: [] };\n\n    this.bindListeners({\n      handleStart: [LoadingActions.start, PublicActions.openRepositoryPage],\n      handleStop:\n        [\n          LoadingActions.stop,\n          ReportActions.clone,\n          ReportActions.updateCheckedTags,\n          ReportActions.loadReview,\n          ElementActions.createGenericEl,\n          ElementActions.updateGenericEl,\n          ElementActions.createSampleForReaction,\n          ElementActions.updateSampleForReaction,\n          ElementActions.updateSampleForWellplate,\n          ElementActions.createSample,\n          ElementActions.updateSample,\n          ElementActions.createReaction,\n          ElementActions.updateReaction,\n          ElementActions.createResearchPlan,\n          ElementActions.updateResearchPlan,\n          ElementActions.createScreen,\n          ElementActions.updateScreen,\n          ElementActions.updateEmbeddedResearchPlan,\n          ElementActions.createWellplate,\n          ElementActions.updateWellplate,\n          ElementActions.importWellplateSpreadsheet,\n          ElementActions.storeMetadata,\n          InboxActions.fetchInbox,\n          InboxActions.fetchInboxContainer,\n          InboxActions.fetchInboxUnsorted,\n          PredictionActions.infer,\n          RepositoryActions.reviewPublish,\n          ReviewActions.updateComment,\n          ReviewActions.reviewPublish,\n          ReviewActions.fetchSample,\n          ReviewActions.displayReviewReaction,\n          PublicActions.getSearchReactions,\n          PublicActions.getSearchMolecules,\n          PublicActions.getReactions,\n          PublicActions.getMolecules,\n          PublicActions.displayMolecule,\n          PublicActions.displayReaction,\n          EmbargoActions.fetchEmbargoBundle,\n          PublicActions.openRepositoryPage,\n          RepositoryActions.publishSample,\n          RepositoryActions.publishReaction,\n        ],\n      handleStartLoadingWithProgress: LoadingActions.startLoadingWithProgress,\n      handleStopLoadingWithProgress: LoadingActions.stopLoadingWithProgress,\n      handleUpdateLoadingProgress: LoadingActions.updateLoadingProgress,\n    });\n  }\n\n  handleStart(page = '') {\n    const regex = /^$|\\bpublications/i;\n    // temp. fix for loading spinner on embargo page\n    if (page === 'embargo' || !page || regex.test(page)) {\n      this.setState({ loading: true });\n    }\n  }\n\n  handleStop() {\n    this.setState({ loading: false });\n  }\n\n  handleStartLoadingWithProgress(filename) {\n    let { filePool } = this.state;\n    if (!filePool) {\n      filePool = [{ filename: filename, progress: 0 }];\n    }\n    else {\n      const filter = filePool.filter(value => value.filename === filename);\n      if (filter.length === 0) {\n        const value = { filename: filename, progress: 0 };\n        filePool.push(value);\n      }\n    }\n\n    if (filePool.length > 0) {\n      this.setState({ loadingWithProgress: true, filePool: filePool });\n    }\n  }\n\n  handleStopLoadingWithProgress(filename) {\n    const { filePool } = this.state;\n    if (filePool) {\n      filePool.forEach((file, index, object) => {\n        if (file.filename === filename) {\n          object.splice(index, 1);\n        }\n      });\n\n      if (filePool.length === 0) {\n        this.setState({ loadingWithProgress: false, filePool: [] });\n      }\n      else {\n        this.setState({ filePool: filePool });\n      }\n    }\n  }\n\n  handleUpdateLoadingProgress(value) {\n    const { filePool } = this.state;\n    if (filePool) {\n      filePool.forEach(file => {\n        if (file.filename === value.filename) {\n          file.progress = value.progress;\n        }\n      });\n      this.setState({ filePool: filePool });\n    }\n  }\n}\n\nexport default alt.createStore(LoadingStore, 'LoadingStore');\n","import base64 from 'base-64';\nimport { FN } from '@complat/react-spectra-editor';\n\nimport alt from 'src/stores/alt/alt';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\nimport SpectraActions from 'src/stores/alt/actions/SpectraActions';\n\nconst defaultPred = {\n  outline: {},\n  output: { result: [] },\n};\n\nclass SpectraStore {\n  constructor() {\n    this.spcMetas = [];\n    this.spcInfos = [];\n    this.spcIdx = 0;\n    this.arrSpcIdx = [];\n    this.showModal = false;\n    this.fetched = false;\n    this.writing = false;\n    this.others = [];\n    this.showModalNMRDisplayer = false;\n\n    this.bindListeners({\n      handleToggleModal: SpectraActions.ToggleModal,\n      handleLoadSpectra: [\n        SpectraActions.LoadSpectra,\n        PublicActions.loadSpectra,\n      ],\n      handleSaveToFile: SpectraActions.SaveToFile,\n      handleRegenerate: SpectraActions.Regenerate,\n      handleInferSpectrum: SpectraActions.InferSpectrum,\n      handleInferRunning: SpectraActions.InferRunning,\n      handleWriteStart: SpectraActions.WriteStart,\n      handleWriteStop: SpectraActions.WriteStop,\n      handleSelectIdx: SpectraActions.SelectIdx,\n      handleAddOthers: SpectraActions.AddOthers,\n      handleRegenerateEdited: SpectraActions.RegenerateEdited,\n      handleToggleModalNMRDisplayer: SpectraActions.ToggleModalNMRDisplayer,\n      handleLoadSpectraForNMRDisplayer: [\n        SpectraActions.LoadSpectraForNMRDisplayer,\n        PublicActions.loadSpectraForNMRDisplayer,\n      ],\n    });\n  }\n\n  decodeSpectrum(target) { // eslint-disable-line class-methods-use-this\n    const { file, predictions, id } = target;\n    if (!file) return null;\n    let spectrum = { predictions: defaultPred, idx: id };\n    if (predictions && predictions.outline && predictions.outline.code) {\n      spectrum = Object.assign({}, spectrum, { predictions });\n    }\n\n    try {\n      const raw = base64.decode(file);\n      const jcamp = FN.ExtractJcamp(raw);\n      if (!jcamp.spectra) return null;\n      spectrum = Object.assign({}, spectrum, { jcamp });\n    } catch (err) {\n      console.log('stores/SpectraStore.js: decodeSpectrum error!');\n      return null;\n    }\n\n    return spectrum; // spectrum = { predictions: {…}, jcamp: {…} }\n  }\n\n  decodeSpectra(fetchedFiles = {}) {\n    const { files } = fetchedFiles;\n    if (!files) return [];\n    const returnFiles = files.map(f => this.decodeSpectrum(f)).filter(r => r !== null);\n    if (returnFiles === null || returnFiles === undefined) {\n      return [];\n    }\n    return returnFiles.sort(function(a, b) {\n      return b.idx - a.idx;\n    });\n  }\n\n  handleToggleModal() {\n    this.setState({\n      spcMetas: [],\n      spcInfos: [],\n      showModal: !this.showModal,\n      fetched: false,\n      others: [],\n    });\n  }\n\n  handleLoadSpectra({ fetchedFiles, spcInfos, element }) {\n    const spcMetas = this.decodeSpectra(fetchedFiles);\n    const sortedSpcInfo = [...spcInfos];\n    sortedSpcInfo.sort((a, b) => b.idx - a.idx);\n    if (spcMetas.length > 0) {\n      const spc = spcMetas[0];\n      if (spc.jcamp.layout === FN.LIST_LAYOUT.CYCLIC_VOLTAMMETRY) {\n        sortedSpcInfo.sort((a, b) => a.label.localeCompare(b.label));\n      }\n    }\n    const sortedSpcIdxs = sortedSpcInfo.map((info) => (info.idx));\n    spcMetas.sort((a, b) => {\n      return sortedSpcIdxs.indexOf(a.idx) - sortedSpcIdxs.indexOf(b.idx);\n    });\n    let newArrSpcIdx = spcMetas.map(spci => (\n      spci.idx\n    )).filter(r => r !== null);\n    if (newArrSpcIdx.length <= 1) {\n      newArrSpcIdx = [];\n    }\n\n    this.setState({\n      spcInfos: sortedSpcInfo,\n      spcMetas,\n      fetched: true,\n      spcIdx: (spcMetas[0].idx || 0),\n      others: [],\n      arrSpcIdx: newArrSpcIdx,\n      updatedElement: element,\n    });\n  }\n\n  handleSaveToFile({ fetchedFiles, spcInfo = defaultPred }) {\n    const fetchedSpcMetas = this.decodeSpectra(fetchedFiles);\n    const fsm = fetchedSpcMetas.length > 0 ? fetchedSpcMetas[0] : null;\n    if (!fsm) return;\n    const fetchedIdx = fsm.idx;\n    const prevIdx = spcInfo.idx;\n    const fsi = Object.assign({}, spcInfo, { idx: fetchedIdx }); //  shortcut\n    const { spcInfos, spcMetas, arrSpcIdx } = this;\n    const newSpcInfos = spcInfos.map(si => (\n      si.idx === prevIdx ? fsi : si\n    )).filter(r => r !== null);\n    const newSpcMetas = spcMetas.map(sm => (\n      sm.idx === prevIdx ? fsm : sm\n    )).filter(r => r !== null);\n    const newArrSpcIdx = arrSpcIdx.map(spci => (\n      spci === prevIdx ? fetchedIdx : spci\n    )).filter(r => r !== null);\n    this.setState({\n      spcInfos: newSpcInfos,\n      spcMetas: newSpcMetas,\n      fetched: true,\n      spcIdx: fetchedIdx,\n      others: [],\n      arrSpcIdx: newArrSpcIdx,\n    });\n  }\n\n  handleRegenerate() {\n    // no further process needed.\n  }\n\n  handleRegenerateEdited() {\n    // no further process needed.\n  }\n\n  handleWriteStart(payload) {\n    this.replacePredictions(defaultPred);\n    this.setState({\n      writing: payload,\n      others: [],\n    });\n  }\n\n  handleWriteStop() {\n    this.setState({\n      writing: false,\n      others: [],\n    });\n  }\n\n  handleInferRunning() {\n    const targetPreds = Object.assign({}, defaultPred, { running: true });\n    this.replacePredictions(targetPreds);\n  }\n\n  handleInferSpectrum(props) {\n    this.handleSaveToFile(props);\n    const preds = props.fetchedFiles.predict || defaultPred;\n    const targetPreds = Object.assign({}, preds, { refreshed: true });\n    this.replacePredictions(targetPreds);\n  }\n\n  handleSelectIdx(payload) {\n    const { spcIdx, arrSpcIdx } = payload;\n    this.setState({ spcIdx, arrSpcIdx, others: [] });\n  }\n\n  replacePredictions(predictions) {\n    const { spcIdx } = this;\n    const spcMetas = this.spcMetas.map(x => (\n      x.idx === spcIdx\n        ? Object.assign({}, x, { predictions })\n        : x\n    ));\n    this.setState({ spcMetas, others: [] });\n  }\n\n  handleAddOthers(rsp) {\n    const origData = base64.decode(rsp.jcamp);\n    const jcampData = FN.ExtractJcamp(origData);\n    this.setState({ others: [jcampData] });\n  }\n\n  handleToggleModalNMRDisplayer() {\n    this.setState({\n      spcMetas: [],\n      spcInfos: [],\n      showModalNMRDisplayer: !this.showModalNMRDisplayer,\n      fetched: false,\n      others: [],\n    })\n  }\n\n  handleLoadSpectraForNMRDisplayer({ fetchedFiles, spcInfos, element }) {\n    this.setState({\n      spcInfos,\n      fetchedFiles,\n      fetched: true,\n      updatedElement: element,\n    });\n  }\n\n\n}\n\nexport default alt.createStore(SpectraStore, 'SpectraStore');\n","/* eslint-disable no-param-reassign */\nimport { List } from 'immutable';\nimport alt from 'src/stores/alt/alt';\n\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport ArrayUtils from 'src/utilities/ArrayUtils';\nimport PublicActions from 'src/stores/alt/repo/actions/PublicActions';\n\nclass UIStore {\n  constructor() {\n    this.state = {\n      sample: {\n        checkedAll: false,\n        checkedIds: List(),\n        uncheckedIds: List(),\n        currentId: null,\n        page: 1,\n        activeTab: 0,\n        activeAnalysis: 0,\n      },\n      reaction: {\n        checkedAll: false,\n        checkedIds: List(),\n        uncheckedIds: List(),\n        currentId: null,\n        page: 1,\n        activeTab: 0,\n        activeAnalysis: 0,\n        activeAnalysisTab: 0,\n      },\n      wellplate: {\n        checkedAll: false,\n        checkedIds: List(),\n        uncheckedIds: List(),\n        currentId: null,\n        page: 1,\n        activeTab: 0,\n      },\n      screen: {\n        checkedAll: false,\n        checkedIds: List(),\n        uncheckedIds: List(),\n        currentId: null,\n        page: 1,\n        activeTab: 0,\n      },\n      research_plan: {\n        checkedAll: false,\n        checkedIds: List(),\n        uncheckedIds: List(),\n        currentId: null,\n        page: 1,\n      },\n      cell_line: {\n        checkedAll: false,\n        checkedIds: List(),\n        uncheckedIds: List(),\n        currentId: null,\n        page: 1,\n      },\n      showPreviews: true,\n      showAdvancedSearch: false,\n      filterCreatedAt: true,\n      fromDate: null,\n      toDate: null,\n      userLabel: null,\n      productOnly: false,\n      number_of_results: 15,\n      currentCollection: null,\n      currentSearchSelection: null,\n      currentSearchByID: null,\n      showCollectionManagement: false,\n      showDeviceManagement: false,\n      isSync: false,\n      showModal: false,\n      modalParams: {},\n      hasChemSpectra: false,\n      hasNmriumWrapper: false,\n      matrices: {},\n      thirdPartyApps: [],\n    };\n\n    this.bindListeners({\n      handleInitialize: UIActions.initialize,\n      handleSelectTab: UIActions.selectTab,\n      handleSelectActiveAnalysis: UIActions.selectActiveAnalysis,\n      handleSelectActiveAnalysisTab: UIActions.selectActiveAnalysisTab,\n\n      handleSelectCollection: UIActions.selectCollection,\n      handleSelectSyncCollection: UIActions.selectSyncCollection,\n      handleCheckAllElements: UIActions.checkAllElements,\n      handleToggleShowPreviews: UIActions.toggleShowPreviews,\n      handleToggleAdvancedSearch: UIActions.toggleAdvancedSearch,\n      handleCheckElement: UIActions.checkElement,\n      handleUncheckElement: UIActions.uncheckElement,\n      handleUncheckAllElements: UIActions.uncheckAllElements,\n      handleDeselectAllElementsOfType: UIActions.deselectAllElementsOfType,\n      handleSelectElement: UIActions.selectElement,\n      handleSetPagination: UIActions.setPagination,\n      handleDeselectAllElements: UIActions.deselectAllElements,\n      handleSetSearchSelection: UIActions.setSearchSelection,\n      handleSetSearchById: UIActions.setSearchById,\n      handleSelectCollectionWithoutUpdating:\n        UIActions.selectCollectionWithoutUpdating,\n      handleClearSearchSelection: UIActions.clearSearchSelection,\n      handleClearSearchById: UIActions.clearSearchById,\n      handleShowCollectionManagement: UIActions.showCollectionManagement,\n      handleShowElements: UIActions.showElements,\n      handleToggleCollectionManagement: UIActions.toggleCollectionManagement,\n      handleUncheckWholeSelection: UIActions.uncheckWholeSelection,\n      handleChangeNumberOfResultsShown: UIActions.changeNumberOfResultsShown,\n      handleShowDeviceManagement: UIActions.showDeviceManagement,\n      handleCloseDeviceManagement: UIActions.closeDeviceManagement,\n      handleShowModalChange: UIActions.updateModalProps,\n      handleHideModal: UIActions.hideModal,\n      handleSetFilterCreatedAt: UIActions.setFilterCreatedAt,\n      handleSetUserLabel: UIActions.setUserLabel,\n      handleSetFromDate: UIActions.setFromDate,\n      handleSetToDate: UIActions.setToDate,\n      handleSetProductOnly: UIActions.setProductOnly,\n      handleRerenderGenericWorkflow: UIActions.rerenderGenericWorkflow,\n      handleShowGenericWorkflowModal: UIActions.showGenericWorkflowModal,\n      handleSelectPublicCollection: PublicActions.selectPublicCollection,\n    });\n  }\n\n  handleInitialize(result) {\n    this.setState(result);\n    const { klasses } = result;\n    klasses?.forEach((klass) => {\n      this.state[`${klass}`] = {\n        checkedAll: false,\n        checkedIds: List(),\n        uncheckedIds: List(),\n        currentId: null,\n        page: 1,\n        activeTab: 0,\n      };\n    });\n  }\n\n  handleRerenderGenericWorkflow(params) {\n    this.state.propGenericWorkflow = params;\n    if (params.toggle) { this.state.showGenericWorkflow = !this.state.showGenericWorkflow; }\n  }\n\n  handleShowGenericWorkflowModal(show) {\n    this.state.showGenericWorkflow = show;\n  }\n\n  handleToggleCollectionManagement() {\n    this.state.showCollectionManagement = !this.state.showCollectionManagement;\n  }\n\n  handleShowCollectionManagement() {\n    this.state.showCollectionManagement = true;\n  }\n\n  handleShowDeviceManagement() {\n    this.state.showDeviceManagement = true;\n  }\n\n  handleCloseDeviceManagement() {\n    this.state.showDeviceManagement = false;\n  }\n\n  handleShowElements() {\n    this.state.showCollectionManagement = false;\n  }\n\n  handleSelectTab(params = {}) {\n    const type = params.type || 'sample';\n    const tabKey = params.tabKey || 0;\n    this.state[type].activeTab = tabKey;\n  }\n\n  handleSelectActiveAnalysis(params = {}) {\n    const type = params.type || 'sample';\n    const analysisIndex = params.analysisIndex || 0;\n    this.state[type].activeAnalysis = analysisIndex;\n  }\n\n  handleSelectActiveAnalysisTab(tabKey) {\n    this.state.reaction.activeAnalysisTab = tabKey;\n  }\n\n  handleCheckAllElements(params) {\n    this.waitFor(ElementStore.dispatchToken);\n\n    const { type, range } = params;\n    const { elements } = ElementStore.getState();\n\n    if (range === 'all') {\n      if (elements[`${type}s`].ids) {\n        const { ids } = elements[`${type}s`];\n        this.state[type].checkedAll = false;\n        this.state[type].checkedIds = List(ids);\n      } else {\n        this.state[type].checkedAll = true;\n        this.state[type].checkedIds = List();\n      }\n      this.state[type].uncheckedIds = List();\n    } else if (range === 'current') {\n      const curPageIds = elements[`${type}s`].elements.reduce((a, b) => a.concat(b), []).map((e) => e.id);\n      this.state[type].checkedAll = false;\n      this.state[type].uncheckedIds = List();\n      let checked = this.state[type].checkedIds;\n      // Remove duplicates, conserve sorting\n      if (checked.size > 0) {\n        const checkedMap = checked.reduce((mp, e) => { mp[e] = 1; return mp; }, {});\n        // eslint-disable-next-line no-plusplus\n        for (let i = 0; i < curPageIds.length; i++) {\n          if (!checkedMap[curPageIds[i]]) {\n            checked = checked.push(curPageIds[i]);\n          }\n        }\n        this.state[type].checkedIds = checked;\n      } else {\n        this.state[type].checkedIds = List(curPageIds);\n      }\n    } else {\n      this.handleUncheckAllElements(params);\n    }\n  }\n\n  handleToggleShowPreviews(show) {\n    if (show == null) show = !this.state.showPreviews;\n    this.state.showPreviews = show;\n  }\n\n  handleToggleAdvancedSearch(show) {\n    if (show == null) show = !this.state.showAdvancedSearch;\n    this.state.showAdvancedSearch = show;\n  }\n\n  handleUncheckAllElements(params) {\n    const { type } = params;\n\n    if (this.state[type]) {\n      this.state[type].checkedAll = false;\n      this.state[type].checkedIds = List();\n      this.state[type].uncheckedIds = List();\n    }\n  }\n\n  handleUncheckWholeSelection() {\n    this.handleUncheckAllElements({ type: 'sample', range: 'all' });\n    this.handleUncheckAllElements({ type: 'screen', range: 'all' });\n    this.handleUncheckAllElements({ type: 'reaction', range: 'all' });\n    this.handleUncheckAllElements({ type: 'wellplate', range: 'all' });\n    this.handleUncheckAllElements({ type: 'research_plan', range: 'all' });\n    this.handleUncheckAllElements({ type: 'cell_line', range: 'all' });\n    this.state.klasses?.forEach((klass) => { this.handleUncheckAllElements({ type: klass, range: 'all' }); });\n  }\n\n  handleCheckElement(element) {\n    const { type } = element;\n\n    if (this.state[type].checkedAll) {\n      this.state[type].uncheckedIds = ArrayUtils.removeFromListByValue(\n        this.state[type].uncheckedIds,\n        element.id\n      );\n    } else {\n      this.state[type].checkedIds = ArrayUtils.pushUniq(this.state[type].checkedIds, element.id);\n    }\n  }\n\n  handleUncheckElement(element) {\n    const { type } = element;\n\n    if (this.state[type].checkedAll) {\n      this.state[type].uncheckedIds = ArrayUtils.pushUniq(this.state[type].uncheckedIds, element.id);\n    } else {\n      this.state[type].checkedIds = ArrayUtils.removeFromListByValue(\n        this.state[type].checkedIds,\n        element.id\n      );\n    }\n  }\n\n  handleDeselectAllElementsOfType(type) {\n    this.state[type].currentId = null;\n  }\n\n  handleDeselectAllElements() {\n    this.state.sample.currentId = null;\n    this.state.reaction.currentId = null;\n    this.state.wellplate.currentId = null;\n    this.state.research_plan.currentId = null;\n  }\n\n  handleSelectElement(element) {\n    this.state[element.type].currentId = element.id;\n  }\n\n  handleSelectCollection(collection, hasChanged = false) {\n    const { state } = this;\n    const isSync = !!collection?.is_sync_to_me;\n    const {\n      filterCreatedAt, fromDate, toDate, userLabel, productOnly\n    } = state;\n\n    if (!hasChanged) {\n      hasChanged = !state.currentCollection;\n      hasChanged = hasChanged || state.currentCollection.id !== collection.id;\n      hasChanged = hasChanged || isSync !== state.isSync;\n      hasChanged = hasChanged || state.currentSearchSelection != null;\n      hasChanged = hasChanged || state.currentSearchByID != null;\n    }\n\n    if (collection?.clearSearch) {\n      this.handleClearSearchSelection();\n      hasChanged = true;\n      collection.clearSearch = undefined;\n    }\n\n    if(hasChanged && collection && !collection.noFetch) {\n      this.state.isSync = isSync;\n      this.state.currentCollection = collection;\n      const perPage = state.number_of_results;\n      const params = {\n        perPage, filterCreatedAt, fromDate, toDate, userLabel, productOnly\n      };\n      const { profile } = UserStore.getState();\n\n      if (profile && profile.data && profile.data.layout) {\n        const { layout } = profile.data;\n\n        if (state.currentSearchByID) {\n          this.handleSelectCollectionForSearchById(layout, collection);\n        } else {\n          if (layout.sample && layout.sample > 0) {\n            ElementActions.fetchSamplesByCollectionId(\n              collection.id,\n              Object.assign(params, { page: state.sample.page }),\n              isSync,\n              ElementStore.getState().moleculeSort\n            );\n          }\n          if (layout.reaction && layout.reaction > 0) {\n            ElementActions.fetchReactionsByCollectionId(\n              collection.id,\n              Object.assign(params, { page: state.reaction.page }),\n              isSync\n            );\n          }\n          if (layout.wellplate && layout.wellplate > 0) {\n            ElementActions.fetchWellplatesByCollectionId(\n              collection.id,\n              Object.assign(params, { page: state.wellplate.page }),\n              isSync\n            );\n          }\n          if (layout.screen && layout.screen > 0) {\n            ElementActions.fetchScreensByCollectionId(\n              collection.id,\n              Object.assign(params, { page: state.screen.page }),\n              isSync\n            );\n          }\n          if (!isSync && layout.research_plan && layout.research_plan > 0) {\n            ElementActions.fetchResearchPlansByCollectionId(\n              collection.id,\n              Object.assign(params, { page: state.research_plan.page }),\n            );\n          }\n          if (!isSync && layout.cell_line && layout.cell_line > 0) {\n            ElementActions.fetchCellLinesByCollectionId(\n              collection.id,\n              Object.assign(params, { page: state.cell_line.page }),\n            );\n          }\n\n          Object.keys(layout).filter((l) => !['sample', 'reaction', 'screen', 'wellplate', 'research_plan', 'cell_line']\n            .includes(l)).forEach((key) => {\n            if (typeof layout[key] !== 'undefined' && layout[key] > 0) {\n              const page = state[key] ? state[key].page : 1;\n              ElementActions.fetchGenericElsByCollectionId(\n                collection.id,\n                Object.assign(params, { page, name: key }),\n                isSync,\n                key\n              );\n            }\n          });\n        }\n      }\n    }\n  }\n\n  handleSelectCollectionForSearchById(layout, collection) {\n    const { state } = this;\n    const { isSync } = state;\n    const searchResult = { ...state.currentSearchByID };\n    const {\n      filterCreatedAt, fromDate, toDate, userLabel, productOnly\n    } = state;\n    const { moleculeSort } = ElementStore.getState();\n    const perPage = state.number_of_results;\n\n    Object.keys(state.currentSearchByID).forEach((key) => {\n      if (layout[key.slice(0, -1)] > 0 && searchResult[key].totalElements > 0) {\n        if (productOnly && key !== 'samples') { return; }\n        let filterParams = {};\n        const elnElements = ['sample', 'reaction', 'screen', 'wellplate', 'research_plan'];\n        const modelName = !elnElements.includes(key.slice(0, -1)) ? 'element' : key.slice(0, -1);\n\n        if (fromDate || toDate || productOnly || userLabel) {\n          filterParams = {\n            filter_created_at: filterCreatedAt,\n            from_date: fromDate,\n            to_date: toDate,\n            user_label: userLabel,\n            product_only: productOnly,\n          };\n        }\n\n        const withFilter = Object.keys(filterParams).length >= 1;\n\n        const selection = {\n          elementType: 'by_ids',\n          id_params: {\n            model_name: modelName,\n            ids: searchResult[key].ids,\n            total_elements: searchResult[key].totalElements,\n            withFilter,\n          },\n          list_filter_params: filterParams,\n          search_by_method: 'search_by_ids',\n          page_size: perPage\n        };\n\n        ElementActions.fetchBasedOnSearchResultIds.defer({\n          selection,\n          collectionId: collection.id,\n          isSync,\n          page_size: perPage,\n          page: searchResult[key].page,\n          moleculeSort\n        });\n      }\n    });\n  }\n\n  handleSelectSyncCollection(collection) {\n    this.handleSelectCollection(collection);\n  }\n\n  // FIXME this method is also defined in ElementStore\n  handleSetPagination(pagination) {\n    const { type, page } = pagination;\n    this.state[type].page = page;\n  }\n\n  handleSetSearchSelection(selection) {\n    this.state.currentSearchSelection = selection;\n  }\n\n  handleSetSearchById(selection) {\n    this.state.currentSearchByID = selection;\n  }\n\n  handleSelectCollectionWithoutUpdating(collection) {\n    this.state.currentCollection = collection;\n    this.state.isSync = !!collection.is_sync_to_me;\n  }\n\n  handleClearSearchSelection() {\n    this.state.currentSearchSelection = null;\n    this.state.showAdvancedSearch = false;\n  }\n\n  handleClearSearchById() {\n    this.state.currentSearchByID = null;\n  }\n\n  handleChangeNumberOfResultsShown(value) {\n    this.state.number_of_results = value;\n  }\n\n  handleShowModalChange(params) {\n    this.state.showModal = !!params.show;\n    this.state.modalParams = params;\n  }\n\n  handleHideModal() {\n    this.state.showModal = false;\n    this.state.modalParams = {\n      show: false,\n      title: '',\n      component: '',\n      action: null\n    };\n  }\n\n  handleSetFilterCreatedAt(filterCreatedAt) {\n    this.state.filterCreatedAt = filterCreatedAt;\n    if (this.state.fromDate != null || this.state.toDate != null) {\n      this.handleSelectCollection(this.state.currentCollection, true);\n    }\n  }\n\n  handleSetUserLabel(label) {\n    this.state.userLabel = label;\n    this.handleSelectCollection(this.state.currentCollection, true);\n  }\n\n  handleSetFromDate(fromDate) {\n    this.state.fromDate = fromDate;\n    this.handleSelectCollection(this.state.currentCollection, true);\n  }\n\n  handleSetToDate(toDate) {\n    this.state.toDate = toDate;\n    this.handleSelectCollection(this.state.currentCollection, true);\n  }\n\n  handleSetProductOnly(productOnly) {\n    this.state.productOnly = productOnly;\n    this.handleSelectCollection(this.state.currentCollection, true);\n  }\n\n  handleSelectPublicCollection(result) {\n    this.state.currentCollection = result;\n    this.state.isSync = result.is_sync;\n  }\n}\n\nexport default alt.createStore(UIStore, 'UIStore');\n","import alt from 'src/stores/alt/alt';\nimport _ from 'lodash';\nimport UserActions from 'src/stores/alt/actions/UserActions';\n\nclass UserStore {\n  constructor() {\n    this.state = {\n      currentUser: null,\n      profile: null,\n      // TODO: currentTab and currentType should be in UIStore\n      currentTab: 0,\n      currentType: '',\n      devices: [],\n      rxnos: [],\n      chmos: [],\n      labels: [],\n      genericEls: [],\n      segmentKlasses: [],\n      dsKlasses: [],\n      matriceConfigs: [],\n      omniauthProviders: [],\n      bao: []\n    };\n\n    this.bindListeners({\n      handleFetchOlsRxno: UserActions.fetchOlsRxno,\n      handleFetchOlsChmo: UserActions.fetchOlsChmo,\n      handleFetchOlsBao: UserActions.fetchOlsBao,\n      handleFetchGenericEls: UserActions.fetchGenericEls,\n      handleFetchCurrentUser: UserActions.fetchCurrentUser,\n      handleFetchUserLabels: UserActions.fetchUserLabels,\n      handleFetchProfile: UserActions.fetchProfile,\n      handleFetchEditors: UserActions.fetchEditors,\n      handleSelectTab: UserActions.selectTab,\n      handleUpdateUserProfile: UserActions.updateUserProfile,\n      handleFetchNoVNCDevices: UserActions.fetchNoVNCDevices,\n      handleSegementKlasses: UserActions.fetchSegmentKlasses,\n      handleDatasetKlasses: UserActions.fetchDatasetKlasses,\n      handleOmniauthProviders: UserActions.fetchOmniauthProviders\n    });\n  }\n\n  handleFetchUserLabels(result) {\n    this.state.labels = result.labels;\n  }\n\n  handleFetchEditors(result) {\n    this.state.matriceConfigs = result.matrices;\n  }\n\n  handleFetchOlsBao(result) {\n    this.state.bao = result.ols_terms;\n  }\n\n  handleFetchOlsRxno(result) {\n    this.state.rxnos = result.ols_terms;\n  }\n\n  handleFetchOlsChmo(result) {\n    this.state.chmos = result.ols_terms;\n  }\n\n  handleFetchGenericEls(result) {\n    this.state.genericEls = result.klass;\n  }\n\n  handleFetchCurrentUser(result) {\n    this.state.currentUser = result;\n  }\n\n  handleFetchProfile(result) {\n    // DEFAULT_KETCHER2: disable to remove default ketcher2\n    // result.data.default_structure_editor = \"ketcher2\"\n    this.state.profile = result;\n    const { layout } = this.state.profile.data;\n    if (this.state.currentType === '') {\n      const { currentTab } = this.state;\n      const type = Object.keys(layout).filter((e) => {\n        return layout[e] === currentTab + 1;\n      })[0];\n      this.state.currentType = type;\n    }\n  }\n\n  handleUpdateUserProfile(result) {\n    if (this.state.profile && result) {\n      this.state.profile = result;\n    }\n  }\n\n  handleSelectTab(tab) {\n    const { layout } = this.state.profile.data;\n    const type = Object.keys(layout).filter((e) => {\n      return layout[e] === tab + 1;\n    })[0];\n\n    this.state.currentTab = tab;\n    this.state.currentType = type;\n  }\n\n  handleFetchNoVNCDevices(devices) {\n    if (devices) { this.state.devices = devices; }\n  }\n\n  handleSegementKlasses(result) {\n    this.state.segmentKlasses = result.klass;\n  }\n\n  handleDatasetKlasses(result) {\n    this.state.dsKlasses = result.klass;\n  }\n\n  handleOmniauthProviders(result) {\n    this.state.omniauthProviders = result.omniauth_providers;\n    this.state.extraRules = result.extra_rules;\n  }\n}\n\nexport default alt.createStore(UserStore, 'UserStore');\n","import Element from 'src/models/Element';\n\nexport default class Measurement extends Element {\n  constructor(args) {\n    super({\n      description: args.description,\n      errors: args.errors ?? [],\n      id: args.id, // currently not implemented but added for future usage when we actually display measurements\n      sample_identifier: args.sample_identifier,\n      unit: args.unit,\n      uuid: args.uuid,\n      value: args.value\n    });\n  }\n}\n","import 'whatwg-fetch';\nimport Measurement from 'src/models/Measurement';\n\nexport default class MeasurementsFetcher {\n  static fetchMeasurementHierarchy(sample_or_sample_id) {\n    // No measurement fetching for new samples\n    if (sample_or_sample_id.is_new === true) {\n      return new Promise(() => []);\n    }\n    let sample_id = sample_or_sample_id.id || sample_or_sample_id;\n\n    const promise = fetch(`/api/v1/measurements/?sample_id=${sample_id}`, {\n      credentials: 'same-origin',\n      method: 'GET',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then(\n      response => response.json()\n    ).then(\n      json => json.measurements\n    ).catch(\n      errorMessage => { console.log(errorMessage); }\n    );\n\n    return promise;\n  }\n\n  static createMeasurements(measurementCandidates, researchPlanId) {\n    const measurements = measurementCandidates.map(candidate => new Measurement(candidate));\n\n    return fetch('/api/v1/measurements/bulk_create_from_raw_data', {\n      credentials: 'same-origin',\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        raw_data: measurements,\n        source_type: 'ResearchPlan',\n        source_id: researchPlanId\n      })\n    }).then(response => response.json())\n      .then(json => json.measurements)\n      .catch((errorMessage) => { console.log(errorMessage); });\n  }\n\n  static deleteMeasurement(measurementId) {\n    return fetch(`/api/v1/measurements/${measurementId}`, {\n      credentials: 'same-origin',\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    }).then(response => response.json())\n      .catch(errorMessage => console.log(errorMessage));\n  }\n}\n","import { keys, values } from 'mobx';\nimport { types } from 'mobx-state-tree';\n\nimport MeasurementsFetcher from 'src/fetchers/MeasurementsFetcher';\n\nconst SampleHeaderForMeasurement = types.model({\n  id: types.identifierNumber,\n  name: types.string,\n  short_label: types.string,\n});\n\nconst Measurement = types.model({\n  id: types.identifierNumber,\n  description: types.string,\n  value: types.number,\n  unit: types.string,\n  source_type: types.string,\n  source_id: types.integer,\n  header: types.reference(SampleHeaderForMeasurement)\n});\n\n\nexport const MeasurementsStore = types\n  .model({\n    sampleHeaders: types.map(SampleHeaderForMeasurement),\n    measurements: types.map(Measurement)\n  })\n  .actions(self => ({\n    _storeMeasurementsForSample(rawData) {\n      let sampleHeader = SampleHeaderForMeasurement.create({ id: rawData.id, name: rawData.name, short_label: rawData.short_label });\n      let measurements =\n        rawData\n          .measurements\n          .map(rawMeasurement => Measurement.create({ ...rawMeasurement, header: sampleHeader.id }));\n\n      self.sampleHeaders.set(sampleHeader.id, sampleHeader);\n      measurements.forEach(measurement => self.measurements.set(measurement.id, measurement));\n    },\n    loadMeasurementsForSample(sampleId, afterComplete = () => {}) {\n      // this is a very simple implementation\n      // for more complex cases we should use the generator version.\n      // see https://mobx-state-tree.js.org/concepts/async-actions for more details.\n      MeasurementsFetcher.fetchMeasurementHierarchy(sampleId)\n        .then(result => result.forEach(entry => self._storeMeasurementsForSample(entry)))\n        .then(result => afterComplete())\n    },\n    deleteMeasurement(id, afterComplete = () => {}) {\n      let measurement = self.measurements.get(id);\n      if (!measurement) { return null; }\n\n      MeasurementsFetcher.deleteMeasurement(id).then(result => {\n        if (result.success) { self._deleteMeasurementFromStore(id); }\n        afterComplete();\n      });\n    },\n    _deleteMeasurementFromStore(id) {\n      let measurementToDelete = self.measurements.get(id);\n      let isLastMeasurementForSample = values(self.measurements).filter(measurement => measurement.header == measurementToDelete.header).length == 1\n      if (isLastMeasurementForSample) {\n        self.sampleHeaders.delete(measurementToDelete.header.id);\n      }\n      self.measurements.delete(id);\n    },\n    createMeasurements(candidates, researchPlanId, afterComplete = (result) => {}) {\n      MeasurementsFetcher.createMeasurements(candidates, researchPlanId)\n        .then(result => afterComplete(result))\n    }\n  }))\n  .views(self => ({\n    dataForSampleHierarchyAvailable(sample) {\n      let sampleIds = [...sample.ancestor_ids, sample.id].filter(a => a);\n\n      return sampleIds.some(sampleId => self.dataForSampleAvailable(sampleId));\n    },\n    dataForSampleAvailable(sampleId) {\n      return keys(self.sampleHeaders).includes(sampleId.toString())\n    },\n    sampleHeader(sampleId) {\n      return self.sampleHeaders.get(sampleId);\n    },\n    measurementsForSamples(sampleIds) {\n      return values(self.measurements).filter(measurement => sampleIds.includes(measurement.header.id));\n    },\n    measurementsForSample(sampleId) {\n      return values(self.measurements).filter(measurement => measurement.header.id == sampleId);\n    }\n  }));\n","import 'whatwg-fetch';\n\nexport default class SampleTaskFetcher {\n  static openSampleTasks() {\n    return this._fetchSampleTasks('open');\n  }\n\n  static assignSample(sample_id, sample_task_id) {\n    return fetch(\n      `/api/v1/sample_tasks/${sample_task_id}`,\n      {\n        ...this._httpOptions('PUT'),\n        body: JSON.stringify({\n          sample_id: sample_id\n        })\n      }\n    ).then(response => response.json())\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static createSampleTask(sample_id, requiredScanResults) {\n    return fetch(\n      `/api/v1/sample_tasks`,\n      {\n        ...this._httpOptions('POST'),\n        body: JSON.stringify({\n          sample_id: sample_id,\n          required_scan_results: requiredScanResults\n        })\n      }\n    ).then(response => response.json())\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static deleteSampleTask(sample_task_id) {\n    return fetch(\n      `/api/v1/sample_tasks/${sample_task_id}`,\n      { ...this._httpOptions('DELETE') }\n    ).then(response => response.json())\n     .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static _fetchSampleTasks(status) {\n    return fetch(\n      `/api/v1/sample_tasks?status=${status}`,\n      this._httpOptions()\n    ).then(response => response.json())\n      .then(json => json.sample_tasks)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static _httpOptions(method = 'GET') {\n    return {\n      credentials: 'same-origin',\n      method: method,\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    };\n  }\n}\n","import { keys, values } from 'mobx';\nimport { flow, types } from 'mobx-state-tree';\n\nimport SampleTasksFetcher from 'src/fetchers/SampleTasksFetcher';\nconst ScanResult = types.model({\n  id: types.identifierNumber,\n  title: types.string,\n  measurement_value: types.number,\n  measurement_unit: types.string,\n  attachment_id: types.number,\n  position: types.number\n});\nconst SampleTask = types.model({\n  id: types.identifierNumber,\n  result_value: types.maybeNull(types.number),\n  result_unit: types.maybeNull(types.string),\n  description: types.maybeNull(types.string),\n  sample_id: types.maybeNull(types.number), // could be a reference later when we have samples inside the Mobx store\n  display_name: types.maybeNull(types.string),\n  short_label: types.maybeNull(types.string),\n  sample_svg_file: types.maybeNull(types.string),\n  required_scan_results: types.number,\n  scan_results: types.array(ScanResult)\n});\n\nexport const SampleTasksStore = types\n  .model({\n    sample_tasks: types.map(SampleTask), // automatically wrapped to types.optional(types.map(SampleTask), {})\n    inbox_visible: types.optional(types.boolean, false), // default set manually\n  })\n  .actions(self => ({\n    // here we are using async actions (https://mobx-state-tree.js.org/concepts/async-actions) to use promises\n    // within an action\n    load: flow(function* loadOpenSampleTasks() {\n      let result = yield SampleTasksFetcher.openSampleTasks();\n      self.sample_tasks.clear();\n      result.forEach(entry => self.sample_tasks.set(entry.id, SampleTask.create({ ...entry })));\n    }),\n    showSampleTaskInbox() {\n      self.inbox_visible = true;\n    },\n    hideSampleTaskInbox() {\n      self.inbox_visible = false;\n    },\n    assignSample: flow(function* assignSample(sample, sampleTask) {\n      let result = yield SampleTasksFetcher.assignSample(sample.id, sampleTask.id)\n      if (result.id && result.done) {\n        self.sample_tasks.delete(result.id);\n      }\n    }),\n    createSampleTask: flow(function* createSampleTask(sampleId, requiredScanResults) {\n      let result = yield SampleTasksFetcher.createSampleTask(sampleId, requiredScanResults)\n      if (result.id) {\n        let createdSampleTask = SampleTask.create({ ...result });\n        self.sample_tasks.set(createdSampleTask.id, createdSampleTask)\n      }\n    }),\n    deleteSampleTask: flow(function* deleteSampleTask(sampleTask) {\n      let result = yield SampleTasksFetcher.deleteSampleTask(sampleTask.id)\n      if (result.deleted == sampleTask.id) {\n        self.sample_tasks.delete(sampleTask.id)\n      }\n      return result\n    })\n  }))\n  .views(self => ({\n    get openSampleTaskCount() { return keys(self.sample_tasks).length },\n    get inboxVisible() { return self.inbox_visible },\n    sampleTaskForSample(sampleId) {\n      return values(self.sample_tasks).find(task => task.sample_id == sampleId)\n    },\n    get sortedSampleTasks() { return values(self.sample_tasks).sort((taskA, taskB) => taskB.id - taskA.id) },\n  }));\n","import { types } from 'mobx-state-tree';\nimport Container from 'src/models/Container';\n\nconst MAX_AMOUNT = 10e17;\n\nconst CellLineAnalysis = types\n  .model({\n    id: 0,\n    children: types.array(types.late(() => CellLineAnalysis)),\n    name: '',\n    container_type: '',\n    extended_metadata: '',\n    description: ''\n\n  }).actions((self) => ({\n    setDescription(newValue) {\n      self.description = newValue;\n    }\n  }\n  ));\n\nconst CellLineItem = types\n  .model({\n    cellLineId: -1,\n    id: '',\n    organism: '',\n    tissue: '',\n    gender: '',\n    cellType: '',\n    mutation: '',\n    disease: '',\n    bioSafetyLevel: 'S0',\n    variant: '',\n    optimalGrowthTemperature: 0,\n    cryopreservationMedium: '',\n    cellLineName: '',\n    materialDescription: '',\n    amount: 0,\n    passage: 0,\n    contamination: '',\n    shortLabel: '',\n    unit: '',\n    source: '',\n    growthMedium: '',\n    itemDescription: '',\n    itemName: '',\n    changed: false\n  }).views((self) => ({\n    isAmountValid() {\n      return Number.isInteger(self.amount) && self.amount > 0 && self.amount < MAX_AMOUNT;\n    }\n  })).actions((self) => ({\n    setChanged(newChanged) {\n      self.changed = newChanged;\n    }\n  }));\n\nexport const CellLineDetailsStore = types\n  .model({\n    cellLineItem: types.map(CellLineItem)\n  })\n  .actions((self) => ({\n    changeItemName(id, newItemName) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).itemName = newItemName;\n    },\n    changeGrowthMedium(id, newGrowthMedium) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).growthMedium = newGrowthMedium;\n    },\n    changeSource(id, newSource) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).source = newSource;\n    },\n    changeAmount(id, newAmount) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).amount = newAmount;\n    },\n    changeUnit(id, newUnit) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).unit = newUnit;\n    },\n    changeContamination(id, newContamination) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).contamination = newContamination;\n    },\n    changePassage(id, newPassage) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).passage = newPassage;\n    },\n    changeCellLineName(id, newCellLineName) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).cellLineName = newCellLineName;\n    },\n    changeMutation(id, newMutation) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).mutation = newMutation;\n    },\n    changeDisease(id, newDisease) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).disease = newDisease;\n    },\n    changeOrganism(id, newOrganism) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).organism = newOrganism;\n    },\n    changeItemDescription(id, newDesc) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).itemDescription = newDesc;\n    },\n    changeMaterialDescription(id, newDesc) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).materialDescription = newDesc;\n    },\n    changeTissue(id, newTissue) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).tissue = newTissue;\n    },\n    changeOptimalGrowthTemp(id, newTemp) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).optimalGrowthTemperature = newTemp;\n    },\n    changeVariant(id, newVariant) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).variant = newVariant;\n    },\n    changeBioSafetyLevel(id, newBioSafetyLevel) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).bioSafetyLevel = newBioSafetyLevel;\n    },\n    changeCryoMedium(id, newCryoMedium) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).cryopreservationMedium = newCryoMedium;\n    },\n    changeGender(id, newGender) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).gender = newGender;\n    },\n    changeCellType(id, newType) {\n      self.cellLineItem.get(id).changed = true;\n      self.cellLineItem.get(id).cellType = newType;\n    },\n    removeCellLineFromStore(id) {\n      self.cellLineItem.delete(id);\n    },\n    addEmptyContainer(id) {\n      const container = Container.buildEmpty();\n      container.container_type=\"analysis\"\n      return container;\n    },\n    setMaterialProperties(id, properties) {\n      const item = self.cellLineItem.get(id);\n      if (item === undefined) { throw new Error(`no cellline with id found: ${id}`); }\n\n      item.bioSafetyLevel = properties.biosafety_level;\n      item.cellType = properties.cell_type;\n      item.cryopreservationMedium = properties.cryo_pres_medium;\n      item.materialDescription = properties.description;\n      item.disease = properties.disease;\n      item.gender = properties.gender;\n      this.changeOptimalGrowthTemp(id, properties.optimal_growth_temp);\n      item.organism = properties.organism;\n      item.tissue = properties.tissue;\n      item.variant = properties.variant;\n      item.mutation = properties.mutation;\n      item.source = properties.source;\n      item.growthMedium = properties.growth_medium;\n    },\n    convertJsModelToMobxModel(container) {\n      return CellLineAnalysis.create({\n        id: container.id,\n        children: [],\n        name: container.name,\n        container_type: container.container_type\n      });\n    },\n    convertCellLineToModel(jsCellLineModel) {\n      if (self.cellLineItem.has(jsCellLineModel.id)) {\n        return;\n      }\n\n      self.cellLineItem.set(jsCellLineModel.id, CellLineItem.create({\n        cellLineId: jsCellLineModel.cellLineId,\n        id: jsCellLineModel.id.toString(),\n        organism: jsCellLineModel.organism,\n        tissue: jsCellLineModel.tissue,\n        cellType: jsCellLineModel.cellType,\n        mutation: jsCellLineModel.mutation,\n        disease: jsCellLineModel.disease,\n        itemDescription: jsCellLineModel.itemComment,\n        bioSafetyLevel: jsCellLineModel.bioSafetyLevel,\n        variant: jsCellLineModel.variant,\n        optimalGrowthTemperature: jsCellLineModel.optimal_growth_temp,\n        cryopreservationMedium: jsCellLineModel.cryopreservationMedium,\n        cellLineName: jsCellLineModel.cellLineName,\n        materialDescription: jsCellLineModel.materialDescription,\n        gender: jsCellLineModel.gender,\n        amount: jsCellLineModel.amount,\n        unit: jsCellLineModel.unit,\n        passage: jsCellLineModel.passage,\n        contamination: jsCellLineModel.contamination,\n        source: jsCellLineModel.source,\n        growthMedium: jsCellLineModel.growthMedium,\n        itemName: jsCellLineModel.itemName,\n        shortLabel: jsCellLineModel.short_label,\n      }));\n    }\n  }))\n  .views((self) => ({\n    cellLines(id) {\n      return self.cellLineItem.get(id);\n    },\n    analysisAmount(id) {\n      return self.cellLineItem.get(id).container.children[0].children.length;\n    },\n    checkInputValidity(id) {\n      const result = [];\n      const item = self.cellLineItem.get(id);\n      if (item.cellLineName.trim() === '') { result.push('cellLineName'); }\n      if (item.source.trim() === '') { result.push('source'); }\n      if (item.unit.trim() === '') { result.push('unit'); }\n      if (!item.isAmountValid()) { result.push('amount'); }\n      if (!Number.isInteger(item.passage) || item.passage === 0) { result.push('passage'); }\n      return result;\n    }\n  }));\n","import { keys, values } from 'mobx';\nimport { flow, types } from 'mobx-state-tree';\n\nimport SearchFetcher from 'src/fetchers/SearchFetcher';\n\nconst SearchResult = types.model({\n  id: types.maybeNull(types.string),\n  results: types.maybeNull(types.frozen({}))\n});\n\nconst SearchFilter = types.model({\n  id: types.maybeNull(types.string),\n  filters: types.maybeNull(types.frozen([]))\n});\n\nconst advancedSearch = {\n  value: 'advanced',\n  label: 'Text Search'\n}\n\nconst defaultSearchValues = [{\n  link: '',\n  match: '=',\n  table: 'samples',\n  element_id: 0,\n  field: {\n    column: 'name',\n    label: 'Name',\n  },\n  value: '',\n  smiles: '',\n  sub_values: [],\n  unit: '',\n  validationState: null\n}];\n\nconst defaultPublicationValues = [{\n  link: '',\n  match: '=',\n  table: 'literatures',\n  field: {\n    column: 'doi',\n    label: 'DOI',\n  },\n  value: '',\n}];\n\nconst defaultKetcherValues = {\n  queryMolfile: null,\n  searchType: 'sub',\n  tanimotoThreshold: 0.7 \n};\n\nconst searchElementValues = {\n  table: 'samples',\n  element_id: 0,\n  element_table: 'samples'\n}\n\nexport const SearchStore = types\n  .model({\n    search_modal_visible: types.optional(types.boolean, false),\n    search_modal_minimized: types.optional(types.boolean, false),\n    search_modal_selected_form: types.optional(types.frozen({}), advancedSearch),\n    search_type: types.optional(types.string, \"advanced\"),\n    search_element: types.optional(types.frozen({}), searchElementValues),\n    advanced_search_values: types.optional(types.array(types.frozen({})), defaultSearchValues),\n    detail_search_values: types.optional(types.array(types.frozen({})), []),\n    ketcher_rails_values: types.optional(types.frozen({}), defaultKetcherValues),\n    publication_search_values: types.optional(types.array(types.frozen({})), defaultPublicationValues),\n    search_results: types.map(SearchResult),\n    tab_search_results: types.map(SearchResult),\n    search_result_panel_visible: types.optional(types.boolean, false),\n    search_results_visible: types.optional(types.boolean, false),\n    search_visible: types.optional(types.boolean, true),\n    search_filters: types.map(SearchFilter),\n    search_values: types.optional(types.array(types.string), []),\n    search_icon: types.optional(types.enumeration(\"search_icon\", [\"right\", \"down\"]), \"down\"),\n    result_icon: types.optional(types.enumeration(\"result_icon\", [\"right\", \"down\"]), \"right\"),\n    error_messages: types.optional(types.array(types.string), []),\n    tab_current_page: types.optional(types.array(types.frozen({})), []),\n    active_tab_key: types.optional(types.number, 0),\n    show_search_result_list: types.optional(types.boolean, false),\n    result_error_messages: types.optional(types.array(types.string), []),\n  })\n  .actions(self => ({\n    // here we are using async actions (https://mobx-state-tree.js.org/concepts/async-actions) to use promises\n    // within an action\n    loadSearchResults: flow(function* loadSearchResults(params) {\n      let result = yield SearchFetcher.fetchBasedOnSearchSelectionAndCollection(params);\n      self.search_results.clear();\n      self.tab_search_results.clear();\n      Object.entries(result).forEach(([key, value]) => {\n        let errorExists = self.result_error_messages.find((e) => { return e == value.error });\n        if (value.error !== undefined && value.error !== '' && errorExists === undefined) {\n          self.result_error_messages.push(value.error);\n        }\n        let searchResult = SearchResult.create({\n          id: key,\n          results: {\n            ids: value.ids,\n            page: value.page,\n            pages: value.pages,\n            per_page: value.perPage,\n            total_elements: value.totalElements\n          }\n        })\n        self.search_results.set(searchResult.id, searchResult)\n        self.addSearchResult(key, value, value.ids.slice(0, 15))\n      });\n    }),\n    loadSearchResultTab: flow(function* loadSearchResultTab(params) {\n      let result = yield SearchFetcher.fetchBasedOnSearchResultIds(params);\n      Object.entries(result).forEach(([key, value]) => {\n        self.addSearchResult(key, value, [])\n      });\n    }),\n    showSearchModal() {\n      self.search_modal_visible = true;\n    },\n    hideSearchModal() {\n      self.search_modal_visible = false;\n    },\n    showMinimizedSearchModal() {\n      self.search_modal_minimized = false;\n    },\n    toggleSearchModalMinimized() {\n      self.search_modal_minimized = !self.search_modal_minimized;\n    },\n    changeSearchModalSelectedForm(value) {\n      self.search_modal_selected_form = value;\n      if (!self.searchVisible) {\n        self.toggleSearch();\n        self.toggleSearchResults();\n      }\n      // self.clearSearchResults();\n      self.showMinimizedSearchModal();\n    },\n    changeSearchType(e) {\n      self.resetAdvancedSearchValue();\n      self.detail_search_values = [];\n      self.resetPublicationSearchValue();\n      self.search_type = (e.target.checked == true ? 'detail' : 'advanced');\n      self.active_tab_key = 0;\n    },\n    changeSearchElement(elementValues) {\n      self.resetAdvancedSearchValue();\n      self.detail_search_values = [];\n      self.resetPublicationSearchValue();\n      self.search_element = elementValues;\n      self.active_tab_key = 0;\n    },\n    addAdvancedSearchValue(id, values) {\n      self.advanced_search_values[id] = values;\n    },\n    resetAdvancedSearchValue() {\n      self.advanced_search_values = defaultSearchValues;\n    },\n    addDetailSearchValue(key, values) {\n      let index = self.detail_search_values.findIndex((x) => { return Object.keys(x).indexOf(key) != -1 })\n      if (index != -1) {\n        self.detail_search_values[index] = { [key]: values };\n      } else {\n        self.detail_search_values.push({ [key]: values });\n      }\n    },\n    removeDetailSearchValue(key) {\n      let index = self.detail_search_values.findIndex((x) => { return Object.keys(x).indexOf(key) != -1 })\n      if (index != -1) {\n        self.detail_search_values.splice(index, 1);\n      }\n    },\n    changeKetcherRailsValue(key, value) {\n      let ketcherValues = { ...self.ketcher_rails_values };\n      ketcherValues[key] = value;\n      self.ketcher_rails_values = ketcherValues;\n    },\n    resetKetcherRailsValues() {\n      self.ketcher_rails_values = defaultKetcherValues;\n    },\n    addPublicationSearchValue(id, values) {\n      self.publication_search_values[id] = values;\n    },\n    resetPublicationSearchValue() {\n      self.publication_search_values = defaultPublicationValues;\n    },\n    addSearchResult(key, result, ids) {\n      let tabSearchResult = SearchResult.create({\n        id: `${key}-${result.page || 1}`,\n        results: {\n          elements: result.elements,\n          ids: ids.length > 0 ? ids : result.ids,\n          page: result.page\n        }\n      })\n      self.tab_search_results.set(tabSearchResult.id, tabSearchResult)\n    },\n    showSearchResults() {\n      self.search_results_visible = true;\n      self.search_result_panel_visible = true;\n      self.search_visible = false;\n      self.search_icon = \"right\";\n      self.result_icon = \"down\";\n    },\n    hideSearchResults() {\n      self.search_results_visible = false;\n      self.search_result_panel_visible = false;\n      self.search_visible = true;\n      self.search_icon = \"down\";\n      self.result_icon = \"right\";\n    },\n    toggleSearchResults() {\n      self.search_results_visible = !self.search_results_visible;\n      self.result_icon = self.search_results_visible ? \"down\" : \"right\";\n      self.search_icon = self.result_icon == \"right\" ? \"down\" : \"right\";\n    },\n    clearSearchAndTabResults() {\n      self.search_results.clear();\n      self.tab_search_results.clear();\n      self.clearTabCurrentPage();\n    },\n    clearSearchResults() {\n      self.clearSearchAndTabResults();\n      self.hideSearchResults();\n      self.search_result_panel_visible = false;\n      self.search_filters.clear();\n      self.search_values.clear();\n      self.error_messages = [];\n      self.clearTabCurrentPage();\n      self.resetAdvancedSearchValue();\n      self.detail_search_values = [];\n      self.active_tab_key = 0;\n      self.resetKetcherRailsValues();\n      self.resetPublicationSearchValue();\n      self.result_error_messages = [];\n    },\n    toggleSearch() {\n      self.search_visible = !self.search_visible;\n      self.search_icon = self.search_visible ? \"down\" : \"right\";\n      self.result_icon = self.search_icon == \"right\" ? \"down\" : \"right\";\n    },\n    changeSearchFilter(filtered_options) {\n      let filter = SearchFilter.create({ id: 'filter', filters: filtered_options });\n      self.search_filters.clear();\n      self.search_filters.set(filter.id, filter);\n    },\n    changeSearchValues(values) {\n      self.search_values.clear();\n      self.search_values = values;\n    },\n    addErrorMessage(message) {\n      if (!self.error_messages.includes(message)) {\n        self.error_messages.push(message);\n      }\n    },\n    removeErrorMessage(message) {\n      let neededFieldsMessage = 'Please fill out all needed fields';\n      let error_messages = self.error_messages.filter((m) => { return m != message && m != neededFieldsMessage });\n      self.error_messages = error_messages;\n    },\n    changeTabCurrentPage(key, index, id) {\n      const tabs = [...self.tab_current_page];\n      tabs[id] = { [key]: index };\n      self.tab_current_page = tabs;\n    },\n    clearTabCurrentPage() {\n      self.tab_current_page.splice(0, self.tab_current_page.length);\n    },\n    changeActiveTabKey(key) {\n      self.active_tab_key = key;\n    },\n    handleCancel() {\n      self.hideSearchModal();\n      self.hideSearchResults();\n      if (!self.show_search_result_list) {\n        self.clearSearchResults();\n      } else {\n        self.search_result_panel_visible = true;\n      }\n      self.active_tab_key = 0;\n      self.result_error_messages = [];\n    },\n    handleAdopt() {\n      self.hideSearchModal();\n      self.hideSearchResults();\n      self.active_tab_key = 0;\n      self.search_result_panel_visible = true;\n      self.changeShowSearchResultListValue(true);\n      self.result_error_messages = [];\n    },\n    changeShowSearchResultListValue(value) {\n      self.show_search_result_list = value;\n      if (!value) {\n        self.clearSearchResults();\n      }\n    }\n  }))\n  .views(self => ({\n    get searchModalVisible() { return self.search_modal_visible },\n    get searchModalMinimized() { return self.search_modal_minimized },\n    get searchModalSelectedForm() { return self.search_modal_selected_form },\n    get searchResultsCount() { return keys(self.search_results).length },\n    get searchResultValues() { return values(self.search_results) },\n    get tabSearchResultValues() { return values(self.tab_search_results) },\n    get searchResultVisible() { return self.search_results_visible },\n    get searchVisible() { return self.search_visible },\n    get searchFilters() { return values(self.search_filters) },\n    get searchValues() { return values(self.search_values) },\n    get searchType() { return self.search_type },\n    get searchElement() { return self.search_element },\n    get advancedSearchValues() { return values(self.advanced_search_values) },\n    get detailSearchValues() { return values(self.detail_search_values) },\n    get ketcherRailsValues() { return self.ketcher_rails_values },\n    get publicationSearchValues() { return values(self.publication_search_values) },\n    get tabCurrentPage() { return values(self.tab_current_page) },\n    get activeTabKey() { return self.active_tab_key },\n    get errorMessages() { return values(self.error_messages) },\n    get resultErrorMessage() { return values(self.result_error_messages) },\n  }));\n","import { keys, values } from 'mobx';\nimport { flow, types } from 'mobx-state-tree';\n\nimport AdminDeviceFetcher from 'src/fetchers/AdminDeviceFetcher';\n\nconst newDevice = {\n  id: '',\n  name: '',\n  name_abbreviation: '',\n  initials: '',\n  email: '',\n  serial_number: '',\n  verification_status: '',\n  account_active: false,\n  visibility: false,\n  users: [],\n  people: [],\n  groups: [],\n  datacollector_fields: false,\n  datacollector_method: '',\n  datacollector_dir: '',\n  datacollector_host: '',\n  datacollector_user: '',\n  datacollector_authentication: 'password',\n  datacollector_number_of_files: '1',\n  datacollector_key_name: '',\n  datacollector_user_level_selected: false,\n  novnc_token: '',\n  novnc_target: '',\n  novnc_password: '',\n  novnc_password_decrypted: '',\n  valid_name: null,\n  valid_name_abbreviation: null,\n  valid_datacollector_method: null,\n  valid_datacollector_user: null,\n  valid_datacollector_host: null,\n  valid_datacollector_key_name: null,\n  valid_datacollector_dir: null,\n  valid_novnc_target: null,\n}\n\nexport const DevicesStore = types\n  .model({\n    device_modal_visible: types.optional(types.boolean, false),\n    device: types.optional(types.frozen({}), newDevice),\n    devices: types.optional(types.optional(types.array(types.frozen({})), [])),\n    modal_minimized: types.optional(types.boolean, false),\n    error_message: types.optional(types.string, ''),\n    success_message: types.optional(types.string, ''),\n    create_or_update: types.optional(types.string, 'create'),\n    active_tab_key: types.optional(types.number, 1),\n    is_loading: types.optional(types.boolean, false),\n    device_testing_id: types.optional(types.number, 0),\n    change_novnc_password: types.optional(types.boolean, false),\n  })\n  .actions(self => ({\n    load: flow(function* loadDevices() {\n      let result = yield AdminDeviceFetcher.fetchDevices();\n      self.setDevices(result.devices);\n    }),\n    deviceById: flow(function* deviceById(deviceId) {\n      let result = yield AdminDeviceFetcher.fetchDeviceById(deviceId);\n      if (result) {\n        self.setDevice(result.device);\n      }\n    }),\n    createDevice: flow(function* createDevice(params) {\n      let result = yield AdminDeviceFetcher.createDevice(params);\n      if (result.errors) {\n        self.changeErrorMessage(self.errorMessage(result.errors));\n      } else if (result) {\n        self.setCreateOrUpdate('update');\n        self.changeSuccess_message('Successfully saved');\n        self.setDevice(result.device);\n        self.load();\n      }\n    }),\n    updateDevice: flow(function* updateDevice(params) {\n      let result = yield AdminDeviceFetcher.updateDevice(params)\n      if (result && result.errors) {\n        self.changeErrorMessage(self.errorMessage(result.errors));\n      } else if (result && result.error) {\n        self.changeErrorMessage(self.errorMessage({ key_file: [result.error] }));\n      } else if (result) {\n        let message = ['Successfully saved'];\n        if (result.device.datacollector_fields && self.active_tab_key == 3) {\n          message.push('Warning: Unprocessable files will be deleted from the target directory!');\n        };\n\n        self.changeSuccessMessage(message.join('\\n'));\n        self.setDevice(result.device);\n        self.load();\n      }\n    }),\n    deleteDevice: flow(function* deleteDevice(device_id) {\n      let result = yield AdminDeviceFetcher.deleteDevice(device_id);\n      if (result.deleted == device_id) {\n        self.setDevices(self.devices.filter(d => d.id != device_id));\n      }\n    }),\n    deleteDeviceRelation: flow(function* deleteDeviceRelation(user, device) {\n      let result = yield AdminDeviceFetcher.deleteRelation(user.id, device.id)\n      if (result) {\n        self.setDevices(result.devices);\n      }\n    }),\n    testSFTP: flow(function* testSFTP(device) {\n      let result = yield AdminDeviceFetcher.testSFTP(device)\n      let message = result && result.message ? `${device.name} - test connection: ${result.message}` : '';\n      if (result.status == 'error') {\n        self.changeErrorMessage(message);\n      } else if (result.status == 'success') {\n        self.changeSuccessMessage(message);\n      }\n      self.setDeviceTestingId(0);\n    }),\n    showDeviceModal() {\n      self.device_modal_visible = true;\n    },\n    hideDeviceModal() {\n      self.device_modal_visible = false;\n    },\n    toggleModalMinimized() {\n      self.modal_minimized = !self.modal_minimized;\n    },\n    setDevice(device) {\n      self.device = device;\n    },\n    setDevices(devices) {\n      self.devices = devices;\n    },\n    clearDevice() {\n      self.device = newDevice;\n    },\n    setCreateOrUpdate(value) {\n      self.create_or_update = value;\n    },\n    setActiveTabKey(key) {\n      self.active_tab_key = key;\n    },\n    changeDevice(field, value) {\n      let device = { ...self.device };\n      device[field] = value;\n      self.setDevice(device);\n    },\n    setChangeNovncPassword(value) {\n      self.change_novnc_password = value;\n    },\n    clearDataCollector(device) {\n      let changedDevice = { ...device };\n      changedDevice.datacollector_fields = false;\n      changedDevice.datacollector_method = '';\n      changedDevice.datacollector_dir = '';\n      changedDevice.datacollector_host = '';\n      changedDevice.datacollector_user = '';\n      changedDevice.datacollector_authentication = '';\n      changedDevice.datacollector_number_of_files = '';\n      changedDevice.datacollector_key_name = '';\n      self.updateDevice(changedDevice);\n    },\n    clearNovncSettings(device) {\n      let changedDevice = { ...device };\n      changedDevice.novnc_token = '';\n      changedDevice.novnc_target = '';\n      changedDevice.novnc_password = '';\n      self.updateDevice(changedDevice);\n    },\n    errorMessage(errors) {\n      let message = 'Validation failed:\\n';\n      Object.entries(errors).forEach(([key, value]) => {\n        let errorKey = key.replace('datacollector_', '').split('_').join(' ');\n        if (key == 'name') { self.changeDevice('valid_name', 'error'); }\n        if (key == 'name_abbreviation') { self.changeDevice('valid_name_abbreviation', 'error'); }\n        if (key == 'datacollector_method') { self.changeDevice('valid_datacollector_method', 'error'); }\n        if (key == 'datacollector_dir') { self.changeDevice('valid_datacollector_dir', 'error'); }\n        if (key == 'datacollector_user') { self.changeDevice('valid_datacollector_user', 'error'); }\n        if (key == 'datacollector_host') { self.changeDevice('valid_datacollector_host', 'error'); }\n        if (key == 'datacollector_key_name') { self.changeDevice('valid_datacollector_key_name', 'error'); }\n        message += `${errorKey.charAt(0).toUpperCase() + errorKey.slice(1)}: ${value.join(', ')}\\n`;\n      });\n      return message;\n    },\n    changeErrorMessage(message) {\n      self.error_message = message;\n    },\n    changeSuccessMessage(message) {\n      self.success_message = message;\n    },\n    setIsLoading(value) {\n      self.is_loading = value;\n    },\n    setDeviceTestingId(value) {\n      self.device_testing_id = value;\n    },\n  }))\n  .views(self => ({\n    get deviceModalVisible() { return self.device_modal_visible },\n    get modalMinimized() { return self.modal_minimized },\n    get devicesValues() { return values(self.devices) },\n  }));\n","import 'whatwg-fetch';\n\nexport default class AdminDeviceMetadataFetcher {\n  static fetchDeviceMetadataByDeviceId(deviceId) {\n    return fetch(\n      `/api/v1/admin_device_metadata/${deviceId}`,\n      { ...this._httpOptions() }\n    ).then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static postDeviceMetadata(params) {\n    return fetch(\n      '/api/v1/admin_device_metadata', \n      {\n        ...this._httpOptions('POST'),\n        body: JSON.stringify(params),\n      }\n    ).then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static syncDeviceMetadataToDataCite(params) {\n    return fetch(\n      `/api/v1/admin_device_metadata/${params.device_id}/sync_to_data_cite`,\n      {\n        ...this._httpOptions('PUT'),\n        body: JSON.stringify(params),\n      }\n    ).then(response => response.json())\n      .then(json => json)\n      .catch(errorMessage => console.log(errorMessage));\n  }\n\n  static _httpOptions(method = 'GET') {\n    return {\n      credentials: 'same-origin',\n      method: method,\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json'\n      }\n    };\n  }\n}\n","import { keys, values } from 'mobx';\nimport { flow, types } from 'mobx-state-tree';\n\nimport AdminDeviceMetadataFetcher from 'src/fetchers/AdminDeviceMetadataFetcher';\n\nconst newDeviceMetadata = {\n  id: '',\n  device_id: '',\n  doi: '',\n  url: '',\n  landing_page: '',\n  name: '',\n  type: '',\n  description: '',\n  publisher: '',\n  publication_year: '',\n  manufacturers: '',\n  owners: '',\n  dates: [],\n  doi_sequence: 0,\n  data_cite_prefix: '',\n  data_cite_created_at: null,\n  data_cite_updated_at: null,\n  data_cite_version: '',\n  data_cite_last_response: {},\n  data_cite_state: 'draft',\n  data_cite_creator_name: '',\n}\n\nexport const DeviceMetadataStore = types\n  .model({\n    device_metadata: types.optional(types.frozen({}), newDeviceMetadata),\n    error_message: types.optional(types.string, ''),\n    success_message: types.optional(types.string, ''),\n  })\n  .actions(self => ({\n    load: flow(function* loadDeviceMetadata(deviceId) {\n      let result = yield AdminDeviceMetadataFetcher.fetchDeviceMetadataByDeviceId(deviceId);\n      if (result && result.device_metadata) {\n        self.setDeviceMetadata(result.device_metadata);\n      }\n    }),\n    updateDeviceMetadata: flow(function* updateDeviceMetadata(deviceMetadata) {\n      let result = yield AdminDeviceMetadataFetcher.postDeviceMetadata(deviceMetadata);\n      if (result && result.device_metadata) {\n        self.setDeviceMetadata(result.device_metadata);\n        self.changeSuccessMessage('Metadata successfully saved');\n      } else if (result.error) {\n        self.changeErrorMessage(result.error);\n      }\n    }),\n    syncDeviceMetadataToDataCite: flow(function* syncDeviceMetadataToDataCite(deviceMetadata) {\n      let result = yield AdminDeviceMetadataFetcher.syncDeviceMetadataToDataCite(deviceMetadata);\n      if (result && result.device_metadata) {\n        self.setDeviceMetadata(result.device_metadata);\n        self.changeSuccessMessage('Metadata successfully saved');\n      } else if (result.error) {\n        self.changeErrorMessage(result.error);\n      }\n    }),\n    setDeviceMetadata(deviceMetadata) {\n      self.device_metadata = deviceMetadata;\n    },\n    clearDeviceMetadata() {\n      self.device_metadata = newDeviceMetadata;\n    },\n    changeDeviceMetadata(field, value) {\n      let device_metadata = { ...self.device_metadata };\n      device_metadata[field] = value;\n      self.setDeviceMetadata(device_metadata);\n    },\n    changeDeviceMetadataDate(index, field, value) {\n      let device_metadata = { ...self.device_metadata };\n      device_metadata.dates[index][field] = value;\n      self.setDeviceMetadata(device_metadata);\n    },\n    changeErrorMessage(message) {\n      self.error_message = message;\n    },\n    changeSuccessMessage(message) {\n      self.success_message = message;\n    },\n  }))\n  .views(self => ({\n\n  }));\n","import { types } from 'mobx-state-tree';\n\nconst messageAttachment = types.model({\n  id: types.union(types.string, types.integer),\n  filename: types.string,\n  identifier: types.union(types.string, types.integer),\n  content_type: types.string,\n  thumb: types.boolean,\n  filesize: types.integer,\n  created_at: types.string,\n  updated_at: types.string,\n  preview: types.maybeNull(types.string)\n});\n\nconst messageContent = types.model({\n  attachment: types.frozen(messageAttachment)\n});\n\nconst messageModel = types.model({\n  id: types.integer,\n  message_id: types.integer,\n  subject: types.string,\n  channel_type: types.integer,\n  sender_id: types.integer,\n  sender_name: types.string,\n  receiver_id: types.integer,\n  is_ack: types.integer,\n  created_at: types.string,\n  updated_at: types.string,\n  content: types.frozen(messageContent)\n});\n\n// eslint-disable-next-line import/prefer-default-export\nexport const AttachmentNotificationStore = types\n  .model({ messages: types.array(messageModel) })\n  .views((self) => ({\n    messageAmount() {\n      return `Messages ${self.messages.length}`;\n    }\n  }))\n  .actions((self) => ({\n    addMessage(newMessage) {\n      const existingMessage = self.messages.find((message) => message.id === newMessage.id);\n\n      const channelTypeCorrect = newMessage.channel_type === 8\n        && newMessage.subject === 'Send TPA attachment arrival notification';\n\n      if (!existingMessage && channelTypeCorrect) {\n        self.messages.push(newMessage);\n      }\n    },\n    clearMessages() {\n      self.messages = [];\n    }\n  })).views((self) => ({\n    getAttachmentsOfMessages() {\n      return self.messages.map((element) => element.content.attachment || []).flat();\n    },\n    getCombinedAttachments(attachmentsFromElement, elementContext, element) {\n      self.getAttachmentsOfMessages().forEach((attachment) => {\n        const attachmentAlreadyInElement = attachmentsFromElement.find((a) => a.id === attachment.id);\n        const forCurrentElement = element.id === attachment.attachable_id\n          && attachment.attachable_type === elementContext;\n        if (!attachmentAlreadyInElement && forCurrentElement) {\n          const copiedAttachment = { ...attachment };\n          copiedAttachment.is_deleted = false;\n          attachmentsFromElement.push(copiedAttachment);\n          if (element.attachments) {\n            element.attachments.push(copiedAttachment);\n          }\n        }\n      });\n      return attachmentsFromElement;\n    },\n  }));\n","import React from 'react';\nimport { types } from 'mobx-state-tree';\nimport { MeasurementsStore } from 'src/stores/mobx/MeasurementsStore';\nimport { SampleTasksStore } from 'src/stores/mobx/SampleTasksStore';\nimport { CellLineDetailsStore } from 'src/stores/mobx/CellLineDetailsStore';\nimport { SearchStore } from 'src/stores/mobx/SearchStore';\nimport { DevicesStore } from 'src/stores/mobx/DevicesStore';\nimport { DeviceMetadataStore } from 'src/stores/mobx/DeviceMetadataStore';\nimport { AttachmentNotificationStore } from 'src/stores/mobx/AttachmentNotificationStore';\n\nexport const RootStore = types\n  .model({\n    measurementsStore: types.optional(MeasurementsStore, { measurements: {}, sampleHeaders: {} }),\n    sampleTasksStore: types.optional(SampleTasksStore, {}),\n    cellLineDetailsStore: types.optional(CellLineDetailsStore, {}),\n    searchStore: types.optional(SearchStore, {}),\n    devicesStore: types.optional(DevicesStore, {}),\n    deviceMetadataStore: types.optional(DeviceMetadataStore, {}),\n    attachmentNotificationStore: types.optional(AttachmentNotificationStore,{})\n  })\n  .views(self => ({\n    get measurements() { return self.measurementsStore },\n    get sampleTasks() { return self.sampleTasksStore },\n    get cellLineDetails() { return self.CellLineDetailsStore },\n    get search() { return self.searchStore },\n    get devices() { return self.devicesStore },\n    get deviceMetadata() { return self.deviceMetadataStore },\n    get attachmentNotifications() { return self.attachmentNotificationStore },\n  }));\nexport const StoreContext = React.createContext(RootStore.create({}));\n","import { uniq } from 'lodash';\n\nexport default class ArrayUtils {\n  static pushUniq(list, value) {\n    if (!list.includes(value)) {\n      return list.push(value);\n    }\n  }\n\n  static removeFromListByValue(list, value) {\n    let index = list.indexOf(value);\n\n    return this.removeFromListByIndex(list, index);\n  }\n\n  static removeFromListByIndex(list, index) {\n    if (index != -1) {\n      return list.splice(index, 1);\n    }else {\n      return list;\n    }\n  }\n\n  static isValInArray(array, value) {\n    let index = array.indexOf(value);\n\n    if(index != -1) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  static isValNotInArray(array, value) {\n    return !ArrayUtils.isValInArray(array, value)\n  }\n\n  static flatten2D(array_2d) {\n    return array_2d.reduce((a, b) => a.concat(b), []);\n  }\n\n  static sortArrByIndex(arr) {\n    return arr.concat().sort((a, b) => {\n      const aIndex = parseInt(a.extended_metadata.index, 10);\n      const bIndex = parseInt(b.extended_metadata.index, 10);\n      if (isNaN(aIndex)) return false;\n      if (isNaN(bIndex)) return true;\n      return aIndex - bIndex;\n    });\n  }\n\n  static uniqSortById(items) {\n    let ids = items.map(a => a.id);\n    ids = uniq(ids).sort((a, b) => a - b);\n    const output = ids.map(id => (\n      items.find(item => item.id === id)\n    )).filter(r => r);\n    return output;\n  }\n}\n","import InboxActions from 'src/stores/alt/actions/InboxActions';\n\nconst DragDropItemTypes = {\n  WELL: 'well',\n  ELEMENT: 'element',\n  SAMPLE: 'sample',\n  MATERIAL: 'material',\n  REACTION: 'reaction',\n  WELLPLATE: 'wellplate',\n  MOLECULE: 'molecule',\n  RESEARCH_PLAN: 'research_plan',\n  RESEARCH_PLAN_FIELD: 'research_plan_field',\n  LAYOUT: 'layout',\n  GENERAL: 'general',\n  DATA: 'data',\n  UNLINKED_DATA: 'unlinked_data',\n  DATASET: 'dataset',\n  CONTAINER: 'container',\n  GENERALPROCEDURE: 'generalProcedure',\n  HOWTO: 'howto',\n  ELEMENT_FIELD: 'element_field',\n  GENERIC_GRID: 'generic_grid',\n  CELL_LINE: 'cell_line'\n};\n\nconst dropTargetTypes = [\n  DragDropItemTypes.DATA,\n  DragDropItemTypes.UNLINKED_DATA,\n  DragDropItemTypes.DATASET\n];\n\nconst collectTarget = (connect, monitor) => ({\n  connectDropTarget: connect.dropTarget(),\n  isOver: monitor.isOver(),\n  canDrop: monitor.canDrop()\n});\n\nconst canDrop = (_props, monitor) => {\n  const itemType = monitor.getItemType();\n  return itemType === DragDropItemTypes.DATA\n   || itemType === DragDropItemTypes.UNLINKED_DATA\n   || itemType === DragDropItemTypes.DATASET;\n};\n\n// define dataTarget, collectTarget, and dropTargetTypes ()\n// for use in src/components/container/AttachmentDropzone.js\nconst targetAttachmentDropzone = {\n  dropTargetTypes,\n  dataTarget: {\n    canDrop,\n    drop(props, monitor) {\n      const item = monitor.getItem();\n      const itemType = monitor.getItemType();\n      const { handleAddWithAttachments } = props;\n      switch (itemType) {\n        case DragDropItemTypes.DATA:\n          handleAddWithAttachments([item.attachment]);\n          InboxActions.removeAttachmentFromList(item.attachment);\n          break;\n        case DragDropItemTypes.UNLINKED_DATA:\n          handleAddWithAttachments([item.attachment]);\n          InboxActions.removeUnlinkedAttachmentFromList(item.attachment);\n          break;\n        case DragDropItemTypes.DATASET:\n          handleAddWithAttachments(item.dataset.attachments);\n          InboxActions.removeDatasetFromList(item.dataset);\n          break;\n        default:\n          console.warn(`Unhandled itemType: ${itemType}`);\n          break;\n      }\n    },\n  },\n  collectTarget,\n};\n\n// define dataTarget, collectTarget, and dropTargetTypes ()\n// for use in src/components/container/ContainerDatasetField.js\n\nconst targetContainerDataField = {\n  dropTargetTypes,\n  dataTarget: {\n    canDrop,\n    drop(props, monitor) {\n      const item = monitor.getItem();\n      const itemType = monitor.getItemType();\n      const { datasetContainer, onChange } = props;\n\n      switch (itemType) {\n        case DragDropItemTypes.DATA:\n          datasetContainer.attachments.push(item.attachment);\n          onChange(datasetContainer);\n          InboxActions.removeAttachmentFromList(item.attachment);\n          break;\n        case DragDropItemTypes.UNLINKED_DATA:\n          datasetContainer.attachments.push(item.attachment);\n          InboxActions.removeUnlinkedAttachmentFromList(item.attachment);\n          break;\n        case DragDropItemTypes.DATASET:\n          item.dataset.attachments.forEach((attachment) => {\n            datasetContainer.attachments.push(attachment);\n          });\n          onChange(datasetContainer);\n          InboxActions.removeDatasetFromList(item.dataset);\n          break;\n        default:\n          console.warn(`Unknown itemType: ${itemType}`);\n          break;\n      }\n    }\n  },\n  collectTarget,\n};\n\n\nexport {\n  DragDropItemTypes,\n  targetAttachmentDropzone,\n  targetContainerDataField,\n};\n","const DocumentHelper = {\n  getMetaContent(name) {\n    const metas = document.getElementsByTagName('meta');\n\n    for (let i = 0; i < metas.length; i++) {\n      if (metas[i].getAttribute('name') == name) {\n        return metas[i].getAttribute('content');\n      }\n    }\n\n    return '';\n  }\n};\n\nmodule.exports = DocumentHelper;\n","const stopBubble = (e) => {\n  e.stopPropagation();\n};\n\nconst stopEvent = (e) => {\n  if (!e) return;\n  e.stopPropagation();\n  e.preventDefault();\n};\n\nexport { stopBubble, stopEvent };\n","/*eslint-disable no-param-reassign*/\n\nimport _ from 'lodash';\nimport Delta from 'quill-delta';\nimport commonmark from 'commonmark';\n\nconst dtConverter = {\n  inline: {\n    bold: ['**', '**'],\n    italic: ['*', '*'],\n    underline: ['<u>', '</u>']\n  },\n  script: {\n    super: ['<sup>', '</sup>'],\n    sub: ['<sub>', '</sub>']\n  },\n  block: {\n    header: {\n      1() { return '# '; },\n      2() { return '## '; },\n      3() { return '### '; },\n      4() { return '#### '; },\n      5() { return '##### '; },\n      6() { return '###### '; }\n    },\n    list: {\n      bullet() { return '* '; },\n      ordered(count) {\n        return `${count}. `;\n      }\n    }\n  }\n};\n\nconst deltaToMarkdown = (delta) => {\n  let mdString = '';\n\n  _.cloneDeep(delta).ops.forEach((op) => {\n    let text = op.insert;\n\n    Object.keys(op.attributes || {}).sort().forEach((attr) => {\n      const attrVal = op.attributes[attr];\n      if (dtConverter.inline[attr]) {\n        const open = dtConverter.inline[attr][0];\n        const close = dtConverter.inline[attr][1];\n        const replaceText = `$1${open}$2${close}$3`;\n        text = text.replace(/(\\s*)(.*)(\\s*)/, replaceText);\n      } else if (dtConverter.script[attrVal]) {\n        const open = dtConverter.script[attrVal][0];\n        const close = dtConverter.script[attrVal][1];\n        text = `${open}${text}${close}`;\n      } else if (dtConverter.block[attr]) {\n        let groupCount;\n        if (attrVal === 'ordered') {\n          const reg = /((?=\\d+\\. )(?:[^\\n]*\\n[^\\n]*$)|(?!\\d+\\. )[^\\n]*$)/g;\n          const lastLine = mdString.match(reg)[0];\n          const lastOrder = lastLine.match(/^(\\d+)\\. .*\\n/) || 0;\n          if (lastOrder) {\n            groupCount = parseInt(lastOrder[1], 10);\n            groupCount += 1;\n          } else {\n            groupCount = 1;\n          }\n        }\n        const md = dtConverter.block[attr][attrVal](groupCount);\n        const regex = /(^|\\n)([^\\n]*)$/g;\n        const repText = `$1${md}$2`;\n        mdString = mdString.replace(regex, repText);\n      }\n    });\n\n    mdString += text;\n  });\n\n  // \\n is considered as a soft-break in markdown, use \\n\\n to indicate new line\n  mdString = mdString.replace(/\\n/g, '\\n\\n');\n  // However in list group, only \\n is used\n  mdString = mdString.replace(/(\\d+\\. [^\\n]*)\\n{2}(?=\\d+\\. )/g, '$1\\n');\n  mdString = mdString.replace(/(\\* [^\\n]*)\\n{2}(?=\\* )/g, '$1\\n');\n\n  return mdString;\n};\n\nconst changeAttribute = (attributes, event, attribute, value) => {\n  if (event.entering) {\n    attributes[attribute] = value;\n  } else {\n    attributes = _.unset(attributes, attribute);\n  }\n};\n\nconst applyAttribute = (node, event, attributes, attribute) => {\n  if (typeof attribute === 'string') {\n    changeAttribute(attributes, event, attribute, true);\n  } else if (typeof attribute === 'function') {\n    attribute(node, event, attributes);\n  }\n};\n\nconst mdConverter = [\n  { filter: 'emph', attribute: 'italic' },\n  { filter: 'strong', attribute: 'bold' },\n  {\n    filter: 'html_inline',\n    makeDelta: (event, attributes) => {\n      const { node } = event;\n      const tag = (node.literal.match(/<(\\/)?([^>/]*)>/g) || [])[0];\n\n      switch (tag) {\n        case '<u>':\n          changeAttribute(attributes, event, 'underline', true);\n          break;\n        case '<sub>':\n          changeAttribute(attributes, event, 'script', 'sub');\n          break;\n        case '<sup>':\n          changeAttribute(attributes, event, 'script', 'super');\n          break;\n        case '</u>':\n          attributes = _.unset(attributes, 'underline');\n          break;\n        case '</sub>':\n          attributes = _.unset(attributes, 'script');\n          break;\n        case '</sup>':\n          attributes = _.unset(attributes, 'script');\n          break;\n        default:\n          break;\n      }\n    }\n  },\n  {\n    filter: 'text',\n    makeDelta: (event, attributes) => {\n      if (_.isEmpty(attributes)) {\n        return { insert: event.node.literal };\n      }\n      return { insert: event.node.literal, attributes: { ...attributes } };\n    }\n  },\n  {\n    filter: 'softbreak',\n    makeDelta: (event, attributes) => {\n      if (_.isEmpty(attributes)) {\n        return { insert: ' ' };\n      }\n      return { insert: ' ', attributes: { ...attributes } };\n    }\n  },\n  // block\n  {\n    filter: 'heading',\n    lineAttribute: true,\n    makeDelta: (event, attributes) => {\n      if (event.entering) {\n        return null;\n      }\n      return {\n        insert: '\\n',\n        attributes: { ...attributes, header: event.node.level }\n      };\n    }\n  },\n  {\n    filter: 'list',\n    lineAttribute: true,\n    attribute: (node, event, attributes) => {\n      changeAttribute(attributes, event, 'list', node.listType);\n    }\n  },\n  {\n    filter: 'paragraph',\n    lineAttribute: true,\n    makeDelta: (event, attributes) => {\n      if (event.entering) {\n        return null;\n      }\n\n      if (_.isEmpty(attributes)) {\n        return { insert: '\\n' };\n      }\n      return { insert: '\\n', attributes: { ...attributes } };\n    }\n  },\n];\n\nconst markdownToDelta = (md) => {\n  const parsed = new commonmark.Parser().parse(md);\n  const walker = parsed.walker();\n  let event;\n  const deltas = [];\n  const attributes = {};\n  const lineAttributes = {};\n\n  event = walker.next();\n  while (event !== null) {\n    const { node } = event;\n    const mdConv = mdConverter.filter(x => x.filter === node.type);\n    for (let i = 0; i < mdConv.length; i += 1) {\n      const converter = mdConv[i];\n      const attr = converter.lineAttribute ? lineAttributes : attributes;\n      applyAttribute(node, event, attr, converter.attribute);\n      if (converter.makeDelta) {\n        const delta = converter.makeDelta(event, attr);\n        if (delta) deltas.push(delta);\n      }\n    }\n    event = walker.next();\n  }\n\n  const endNewLine = deltas[deltas.length - 1].insert.indexOf('\\n') === -1;\n  if (_.isEmpty(deltas) || endNewLine) {\n    deltas.push({ insert: '\\n' });\n  }\n  const delta = new Delta().compose(new Delta(deltas));\n\n  return delta;\n};\n\nexport {\n  deltaToMarkdown,\n  markdownToDelta\n};\n\n/* eslint-enable no-param-reassign */\n","import Aviator from 'aviator';\nimport _ from 'lodash';\nimport { deltaToMarkdown, markdownToDelta } from 'src/utilities/deltaMarkdownConverter';\nimport { searchAndReplace } from 'src/utilities/markdownUtils';\nimport MatrixCheck from 'src/components/common/MatrixCheck';\n\nimport UIStore from 'src/stores/alt/stores/UIStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\n\nimport { contentToText } from 'src/utilities/quillFormat';\nimport { chmoConversions } from 'src/components/OlsComponent';\n\n\nconst rfValueFormat = (input) => {\n  if (typeof input !== 'string') { return input; }\n  let result = input;\n  (input.match(/[0]+[,]\\d+/mg) || []).forEach((rf) => {\n    result = result.replace(rf, rf.replace(',', '.'));\n  });\n  return result;\n};\n\nconst atomCountInFormula = (formula, e = 'H') => {\n  if (typeof formula !== 'string') { return 0; }\n  const regStr = `${e}\\\\d*`;\n  const re = new RegExp(regStr);\n  const hForm = re.exec(formula);\n  if (!hForm) { return 0; }\n  const count = hForm[0].slice(1);\n  if (count.length === 0) { return 1; }\n  return parseInt(count, 10);\n};\n\nconst reduceByPeak = (splitData) => {\n  let within = 0;\n  return splitData.split(/(\\(|\\)|,)/).reduce(\n    (acc, cv) => {\n      if (within === 0) {\n        if (cv === ',') {\n          acc.push('');\n          return acc;\n        } else if (cv && cv.match(/[^\\d]?\\.[^\\d]/)) {\n          acc.push('.');\n          return acc;\n        }\n      }\n      if (cv === '(') {\n        within += 1;\n      } else if (cv === ')') {\n        within -= 1;\n      }\n      acc[acc.length - 1] += cv;\n      return acc;\n    },\n    ['']\n  );\n};\n\nconst splitDotPhrase = (phrases) => {\n  let within = 0;\n  return phrases.split(/(\\(|\\[\\]|\\)|\\d\\.\\d|\\.)/).reduce(\n    (acc, cv) => {\n      if (within === 0) {\n        if (cv && cv.match(/\\d\\.\\d/)) {\n          //\n        } else if (cv === '.') {\n          acc.push('');\n          return acc;\n        }\n      }\n      if (cv === '(' || cv === '[') {\n        within += 1;\n      } else if (cv === ')' || cv === ']') {\n        within -= 1;\n      }\n      acc[acc.length - 1] += cv;\n      return acc;\n    },\n    ['']\n  );\n};\n\nconst countHWithinBracket = (peakContent) => {\n  const bracketContent = peakContent && peakContent.match(/\\((.*\\d+[^C]*H.*)\\)/);\n  if (!bracketContent) { return false; }\n\n  const simpleCount = bracketContent[1].match(/(^|[^\\w])(\\d+(\\.\\d+)?)\\s*H\\b/);\n  if (simpleCount) { return parseFloat(simpleCount[2], 10); }\n\n  return false;\n};\n\nconst countCWithinBracket = (peakContent) => {\n  const bracketContent = peakContent && peakContent.match(/\\((.*\\d+[^C]*C.*)\\)/);\n  if (!bracketContent) { return false; }\n\n  const simpleCount = bracketContent[1].match(/(^|[^\\w])(\\d+(\\.\\d+)?)\\s*C/);\n  if (simpleCount) { return parseFloat(simpleCount[2], 10); }\n\n  const xCount = bracketContent[1].match(/(\\d+(\\.\\d+)?)\\s*(×|x)\\s*./);\n  if (xCount) { return parseFloat(xCount[1], 10); }\n\n  return false;\n};\n\nconst atomCountInNMRDescription = (nmrStr) => {\n  const phraseArr = splitDotPhrase(nmrStr);\n  const count = reduceByPeak(phraseArr[0]).reduce((acc, peak) => {\n    const hs = countHWithinBracket(peak);\n    if (hs) { return acc + hs; }\n    return acc;\n  }, 0);\n  const missed = countHWithinBracket(phraseArr[1]);\n  if (missed) { return parseFloat((missed + count).toFixed(5)); }\n\n  return parseFloat(count.toFixed(5));\n};\n\nconst atomCountCInNMRDescription = (cNmrStr) => {\n  const m = cNmrStr.match(/\\s*(=|:|δ)(.*)\\S/);\n  if (!m) { return 0; }\n\n  const phraseArr = splitDotPhrase(m[2]);\n  const count = reduceByPeak(phraseArr[0]).reduce((acc, peak) => {\n    if (!peak.match(/\\d/)) { return acc; }\n    const cwb = countCWithinBracket(peak);\n    if (cwb) { return acc + cwb; }\n    return acc + 1;\n  }, 0);\n  const missed = countCWithinBracket(phraseArr[1]);\n  if (missed) { return count + missed; }\n\n  return count;\n};\n\n\nconst hNmrCount = (nmrStr) => {\n  if (typeof (nmrStr) !== 'string') {\n    return '';\n  }\n  return atomCountInNMRDescription(nmrStr);\n};\n\nconst cNmrCount = (nmrStr) => {\n  if (typeof (nmrStr) !== 'string') {\n    return '';\n  }\n  return atomCountCInNMRDescription(nmrStr);\n};\n\nconst hNmrCheckMsg = (formula, nmrStr) => {\n  if (typeof (formula) !== 'string' || typeof (nmrStr) !== 'string') {\n    return '';\n  }\n  const countInFormula = atomCountInFormula(formula, 'H');\n  const countInDesc = atomCountInNMRDescription(nmrStr);\n\n  if (countInFormula !== countInDesc) {\n    return ` count: ${countInDesc}/${countInFormula}`;\n  }\n  return '';\n};\n\nconst cNmrCheckMsg = (formula, nmrStr) => {\n  if (typeof (formula) !== 'string' || typeof (nmrStr) !== 'string') {\n    return '';\n  }\n  const countInFormula = atomCountInFormula(formula, 'C');\n  const countInDesc = atomCountCInNMRDescription(nmrStr);\n  if (countInFormula !== countInDesc) {\n    return ` count: ${countInDesc}/${countInFormula}`;\n  }\n  return '';\n};\n\nconst isEmwInMargin = (diff) => {\n  const margin = 1.0;\n  return diff <= margin\n    || Math.abs(diff - 1) <= margin\n    || Math.abs(diff - 23) <= margin\n    || Math.abs(diff - 39) <= margin;\n};\n\nconst emwInStr = (emw, msStr) => {\n  const peaks = msStr.split(/,|:|;|\\+|=/).map((s) => {\n    const t = s.replace('found', '')\n      .replace(/[\\(\\[\\{](.*?)[\\)\\]\\}]/g, '')\n      .replace(/\\s/g, '');\n    return t.match(/[a-zA-Z]/) ? 0 : parseFloat(t);\n  });\n\n  let detected = false;\n\n  peaks.forEach((p) => {\n    const diff = Math.abs(p - emw);\n    if (isEmwInMargin(diff)) detected = true;\n  });\n  return detected;\n};\n\nconst msCheckMsg = (exactMolWeight, msStr) => {\n  if (typeof (exactMolWeight) !== 'number' || typeof (msStr) !== 'string') {\n    return '';\n  }\n\n  const detected = emwInStr(exactMolWeight, msStr);\n  return detected ? '' : ' exact weight not found';\n};\n\nconst SameEleTypId = (orig, next) => {\n  if (orig && next && orig.type === next.type && orig.id === next.id) {\n    return true;\n  }\n  return false;\n};\n\nconst UrlSilentNavigation = (element) => {\n  const { currentCollection, isSync } = UIStore.getState();\n  if (element) {\n    let elementString = `${element.type}`;\n    if (!isNaN(element.id)) elementString += `/${element.id}`;\n\n    const collectionUrl = `${currentCollection.id}/${elementString}`;\n    Aviator.navigate(\n      isSync ? `/scollection/${collectionUrl}` : `/collection/${collectionUrl}`,\n      { silent: true },\n    );\n  } else {\n    const cId = currentCollection.id;\n    Aviator.navigate(\n      isSync ? `/scollection/${cId}/` : `/collection/${cId}/`,\n      { silent: true },\n    );\n  }\n};\n\nconst markdownChemicalFormular = (text) => {\n  text = text.replace(/(C|H|O|N|S)(\\d+)/g, '$1<sub>$2</sub>');\n  return text;\n};\n\nconst commonFormatPattern = [\n  {\n    pattern: '(,{0,1})( {0,1})(\\\\d+\\\\.){0,1}(\\\\d+) {0,1}H([^\\\\d\\\\w])',\n    replace: '$1 $3$4H$5'\n  },\n  {\n    pattern: ' CDC(l|L)3,',\n    replace: ' CDCl<sub>3</sub>,'\n  },\n  {\n    pattern: 'J {0,1}= {0,1}(\\\\d+)',\n    replace: '*J* = $1'\n  },\n  {\n    pattern: '(\\\\d+),(\\\\d+)',\n    replace: '$1.$2'\n  },\n  {\n    pattern: '\\\\) {0,1}, {0,1}',\n    replace: '), '\n  },\n  {\n    pattern: '\\\\) (\\\\d+)',\n    replace: '), $1'\n  },\n  {\n    pattern: '(\\\\d+) - (\\\\d+)',\n    replace: '$1–$2'\n  },\n  {\n    pattern: '(\\\\d+) ([\\\\u2013-\\\\u2015]) (\\\\d+)',\n    replace: '$1$2$3'\n  },\n];\n\nconst sampleAnalysesFormatPattern = {\n  '_chmo:0000595': [\n    {\n      pattern: '(\\\\W|^)13 {0,1}C( |-)NMR',\n      replace: '$1<sup>13</sup>C NMR'\n    },\n    {\n      pattern: '<sup>13</sup>C-NMR',\n      replace: '<sup>13</sup>C NMR'\n    },\n    {\n      pattern: '(\\\\d+) C',\n      replace: '$1C'\n    },\n  ],\n  _13cnmr: [\n    {\n      pattern: '(\\\\W|^)13 {0,1}C( |-)NMR',\n      replace: '$1<sup>13</sup>C NMR'\n    },\n    {\n      pattern: '<sup>13</sup>C-NMR',\n      replace: '<sup>13</sup>C NMR'\n    },\n    {\n      pattern: '(\\\\d+) C',\n      replace: '$1C'\n    },\n  ],\n  '_chmo:0000593': [\n    {\n      pattern: '(\\\\W|^)1 {0,1}H( |-)NMR',\n      replace: '$1<sup>1</sup>H NMR'\n    },\n    {\n      pattern: '<sup>1</sup>H-NMR',\n      replace: '<sup>1</sup>H NMR'\n    },\n  ],\n  _1hnmr: [\n    {\n      pattern: '(\\\\W|^)1 {0,1}H( |-)NMR',\n      replace: '$1<sup>1</sup>H NMR'\n    },\n    {\n      pattern: '<sup>1</sup>H-NMR',\n      replace: '<sup>1</sup>H NMR'\n    },\n  ],\n  '_chmo:0001075': [\n    {\n      pattern: '(\\\\W|^)(C|H|O|N|S) (\\\\d{2})',\n      replace: '$1$2, $3'\n    },\n    {\n      pattern: '(\\\\d\\\\.\\\\d\\\\d) {0,1},',\n      replace: '$1;'\n    },\n  ],\n  _ea: [\n    {\n      pattern: '(\\\\W|^)(C|H|O|N|S) (\\\\d{2})',\n      replace: '$1$2, $3'\n    },\n    {\n      pattern: '(\\\\d\\\\.\\\\d\\\\d) {0,1},',\n      replace: '$1;'\n    },\n  ],\n  '_chmo:0000630': [\n    {\n      pattern: '(\\\\W|^)cm-1',\n      replace: '$1cm<sup>–1</sup>'\n    },\n    {\n      pattern: '(\\\\W|^)cm<sup>-1</sup>',\n      replace: '$1cm<sup>–1</sup>'\n    },\n  ],\n  _ir: [\n    {\n      pattern: '(\\\\W|^)cm-1',\n      replace: '$1cm<sup>–1</sup>'\n    },\n    {\n      pattern: '(\\\\W|^)cm<sup>-1</sup>',\n      replace: '$1cm<sup>–1</sup>'\n    },\n  ],\n  'chmo:0000470': [\n    {\n      pattern: '(\\\\W)m/z(\\\\W|$)',\n      replace: '$1*m/z*$2'\n    },\n    {\n      pattern: '(\\\\W)calc\\\\.(\\\\W|$)',\n      replace: '$1calcd$2'\n    },\n    {\n      pattern: '(\\\\W)calcd(\\\\W|$)',\n      replace: '$1Calcd$2'\n    },\n    {\n      pattern: '\\\\. HRMS(\\\\W)',\n      replace: '; HRMS$1'\n    },\n    {\n      pattern: ', found',\n      replace: '. Found'\n    },\n    {\n      pattern: 'HRMS \\\\(((C|H|O|N|S)(\\\\d{1,2}))+\\\\)',\n      replace: markdownChemicalFormular\n    },\n  ],\n  _mass: [\n    {\n      pattern: '(\\\\W)m/z(\\\\W|$)',\n      replace: '$1*m/z*$2'\n    },\n    {\n      pattern: '(\\\\W)calc\\\\.(\\\\W|$)',\n      replace: '$1calcd$2'\n    },\n    {\n      pattern: '(\\\\W)calcd(\\\\W|$)',\n      replace: '$1Calcd$2'\n    },\n    {\n      pattern: '\\\\. HRMS(\\\\W)',\n      replace: '; HRMS$1'\n    },\n    {\n      pattern: ', found',\n      replace: '. Found'\n    },\n    {\n      pattern: 'HRMS \\\\(((C|H|O|N|S)(\\\\d{1,2}))+\\\\)',\n      replace: markdownChemicalFormular\n    },\n  ]\n};\n\nconst formatAnalysisContent = function autoFormatAnalysisContentByPattern(analysis) {\n  const content = _.cloneDeep(analysis.extended_metadata.content);\n  let kind = analysis.extended_metadata.kind || '';\n  kind = kind.split('|')[0] || kind;\n  const type = `_${kind.toLowerCase().replace(/ /g, '')}`;\n  let md = deltaToMarkdown(content);\n  let formatPattern = (sampleAnalysesFormatPattern[type] || []);\n  formatPattern = formatPattern.concat(commonFormatPattern);\n  formatPattern.forEach((patt) => {\n    md = searchAndReplace(md, patt.pattern, patt.replace);\n  });\n\n  return markdownToDelta(md);\n};\n\nconst Alphabet = (input = 1) => {\n  const num = parseInt(input, 10);\n  const index = num >= 1 && num <= 26 ? num - 1 : 25;\n  const alphabets = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n  return alphabets[index];\n};\n\nconst SampleCode = (index, materialGp) => {\n  switch (materialGp) {\n    case 'solvents':\n      return `S${index}`;\n    case 'purification_solvents':\n      return `PS${index}`;\n    case 'products':\n      return `P${index}`;\n    default:\n      return Alphabet(index);\n  }\n};\n\nconst instrumentText = (analysis) => {\n  if (typeof analysis === 'undefined' || analysis == null ||\n    typeof analysis.children === 'undefined' || analysis.children == null || analysis.children.length === 0) {\n    return '';\n  }\n  let ttlIns = [];\n  if (analysis.children && analysis.children.length > 0) {\n    ttlIns = _.filter(analysis.children, o => o.extended_metadata &&\n      o.extended_metadata.instrument && o.extended_metadata.instrument.trim().length > 0);\n  }\n  return ` Instrument: ${ttlIns.length}/${analysis.children.length}`;\n};\n\nconst getElementSegments = (elementName, tabs) => {\n  let segmentKlasses = (UserStore.getState() && UserStore.getState().segmentKlasses) || [];\n  const currentUser = (UserStore.getState() && UserStore.getState().currentUser) || {};\n  let labels = segmentKlasses.filter(s => s.element_klass.name == elementName).map(s => s.label);\n  if (!MatrixCheck(currentUser.matrix, 'segment')) {\n    return tabs.filter((key) => !labels.includes(key));\n  }\n  return _.uniq(tabs.concat(labels));\n}\n\n// the requirements for file types as given\nconst isFileTypePass = (analysisType, attachments) => {\n  const baseType = ['jpg', 'jpeg', 'png', 'tiff', 'svg'];\n  const nmrType = ['jcamp', 'dx', 'jdx'];\n  let files = [];\n  switch (analysisType) {\n    case '1H NMR':\n    case chmoConversions.nmr_1h.termId:\n    case '13C NMR':\n    case chmoConversions.nmr_13c.termId:\n    case '15N NMR':\n    case 'NMR':\n    case 'IR':\n    case chmoConversions.ir.termId:\n      files = attachments.filter(f => baseType.includes(f.filename.split('.').pop().toLowerCase()) && !f.is_deleted);\n      if (files.length < 1) return false;\n      files = attachments.filter(f => nmrType.includes(f.filename.split('.').pop().toLowerCase()) && !f.is_deleted);\n      if (files.length < 1) return false;\n      break;\n    case 'EA':\n    case chmoConversions.ea.termId:\n    case 'X-Ray':\n    case 'Crystall-Structure':\n    case chmoConversions.crystal_structure.termId:\n      files = attachments.filter(f => baseType.includes(f.filename.split('.').pop().toLowerCase()) && !f.is_deleted);\n      if (files.length < 1) return false;\n      break;\n    default:\n      break;\n  }\n  return true;\n};\n\n// at least one dataset has to be attached\n// in dataset: instrument has to be given\nconst isDatasetPass = (analysis) => {\n  const dataset = analysis.children;\n  const attachments = dataset.filter(d => d.attachments.length > 0 && !d.is_deleted);\n  if (attachments.length < 1) return false;\n  const instruments = dataset.filter(d => d.extended_metadata && (d.extended_metadata.instrument || '').trim() !== '' && !d.is_deleted);\n  if (instruments.length < 1) return false;\n  const analysisType = (analysis.extended_metadata.kind || '').split('|').shift().trim();\n  const files = attachments.filter(d => isFileTypePass(analysisType, d.attachments));\n  if (files.length < 1) return false;\n  return true;\n};\n\nconst isNmrPass = (analysis, sample) => {\n  const nmrStr = analysis.extended_metadata && contentToText(analysis.extended_metadata.content);\n  const nmrType = analysis.extended_metadata && (analysis.extended_metadata.kind || '').split('|').shift().trim();\n  if (nmrType !== '1H NMR' && nmrType !== '13C NMR' && nmrType !== chmoConversions.nmr_1h.termId && nmrType !== chmoConversions.nmr_13c.termId) return true;\n  if (nmrType === '1H NMR' || nmrType === chmoConversions.nmr_1h.termId) {\n    return hNmrCheckMsg(sample.molecule.sum_formular, nmrStr) === '';\n  } else if (nmrType === '13C NMR' || nmrType === chmoConversions.nmr_13c.termId) {\n    return cNmrCheckMsg(sample.molecule.sum_formular, nmrStr) === '';\n  }\n  return true;\n};\n\nexport {\n  rfValueFormat,\n  hNmrCheckMsg,\n  cNmrCheckMsg,\n  hNmrCount,\n  cNmrCount,\n  msCheckMsg,\n  SameEleTypId,\n  UrlSilentNavigation,\n  sampleAnalysesFormatPattern,\n  commonFormatPattern,\n  Alphabet,\n  SampleCode,\n  formatAnalysisContent,\n  atomCountInFormula,\n  atomCountInNMRDescription,\n  atomCountCInNMRDescription,\n  emwInStr,\n  instrumentText,\n  getElementSegments,\n  isNmrPass,\n  isDatasetPass,\n};\n","const searchAndReplace = (md, pattern, regexReplace) => {\n  const regexMatch = new RegExp(pattern, 'g');\n\n  const match = md.match(regexMatch);\n  if (typeof regexReplace === 'function' && match != null) {\n    const funcOutput = regexReplace(match[0]);\n    md = md.replace(match, funcOutput);\n  } else {\n    md = md.replace(regexMatch, regexReplace);\n  }\n\n  return md;\n};\n\nexport {\n  searchAndReplace,\n};\n\n","import base64 from 'base-64';\n\nconst getFileName = (response) => {\n  const disposition = response.headers.get('Content-Disposition');\n\n  if (disposition && disposition.indexOf('attachment') !== -1) {\n    const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n    const matches = filenameRegex.exec(disposition);\n    if (matches != null && matches[1]) {\n      return matches[1].replace(/['\"]/g, '');\n    }\n  }\n}\n\nconst downloadBlob = (file_name, blob) => {\n  const url = window.URL.createObjectURL(blob);\n\n  const a = document.createElement('a');\n  a.style = 'display: none';\n  a.href = url;\n  a.download = file_name;\n\n  document.body.appendChild(a);\n  a.click();\n  window.URL.revokeObjectURL(url);\n};\n\nconst parseBase64ToArrayBuffer = (encodedData) => {\n  const decodedData = base64.decode(encodedData);\n  const bufferLength = decodedData.length;\n  let bytesArray = new Uint8Array(bufferLength);\n  for (let i = 0; i < bufferLength; i++) {\n    bytesArray[i] = decodedData.charCodeAt(i);\n  }\n  return bytesArray.buffer;\n};\n\nexport { getFileName, downloadBlob, parseBase64ToArrayBuffer };\n","const Functions = {\n  getMetaContent(name) {\n    const metas = document.getElementsByTagName('meta');\n\n    for (var i = 0; i<metas.length; i++) {\n      if (metas[i].getAttribute(\"name\") == name) {\n        return metas[i].getAttribute(\"content\");\n      }\n    }\n\n    return '';\n  },\n\n  downloadFile(file) {\n    const { contents, name } = file;\n    const link = document.createElement('a');\n    link.download = name;\n    link.href = contents;\n    const event = new window.MouseEvent('click', {\n      'view': window,\n      'bubbles': true,\n      'cancelable': true\n    });\n    link.dispatchEvent(event);\n  },\n\n\n};\n\nmodule.exports = Functions;\n","const keepObjsAsIds = (oriSelectedObjs, newElems, ids, type, defaultTags) => {\n  const allObjs = oriSelectedObjs.concat(newElems)\n    .filter(obj => obj != null) || [];\n  const allObjIds = allObjs.map(obj => `${obj.id}_${obj.type}`);\n  return allObjs.map((obj, pos) => {\n    const identifier = `${obj.id}_${obj.type}`;\n    if (allObjIds.indexOf(identifier) !== pos) { // rm duplicate\n      return null;\n    }\n    if (obj.type !== type) {\n      return obj;\n    }\n    if (obj.type === type && ids.indexOf(obj.id) !== -1) {\n      return obj;\n    }\n    if (defaultTags[`${obj.type}Ids`].indexOf(obj.id) !== -1) {\n      return obj;\n    }\n    return null;\n  }).filter(obj => obj != null) || [];\n};\n\nconst UpdateSelectedObjs = (newTags, newObjs, defaultTags, oriObjs = []) => {\n  const { sampleIds, reactionIds } = newTags;\n  const { samples, reactions } = newObjs;\n  let selectedObjs = keepObjsAsIds(oriObjs,\n    samples, sampleIds, 'sample', defaultTags);\n  selectedObjs = keepObjsAsIds(selectedObjs,\n    reactions, reactionIds, 'reaction', defaultTags);\n  return selectedObjs;\n};\n\nconst GetTypeIds = (objs, type) => {\n  return objs.map((obj) => {\n    if (obj.type === type) {\n      return obj.id;\n    }\n    return null;\n  }).filter(r => r !== null);\n};\n\nconst UserSerial = (molecule, molSerials = []) => {\n  let output = 'xx';\n  molSerials.forEach((ms) => {\n    if (ms.mol.id === molecule.id && ms.value) output = ms.value;\n  });\n  return output;\n};\n\nconst OrderPreviewObjs = (oriPreviewObjs, selectedObjs, newPreviewObjs) => {\n  const previewObjs = [...oriPreviewObjs, ...newPreviewObjs];\n  return (\n    selectedObjs.map(o => (\n      previewObjs.map(\n        p => ((p.id === o.id && p.type === o.type) ? p : null)\n      ).filter(r => r !== null)[0]\n    )).filter(r => r !== null)\n  );\n};\n\nconst LoadPreviewIds = (reportState) => {\n  const { selectedObjTags, defaultObjTags, previewObjs } = reportState;\n  const sids = [...selectedObjTags.sampleIds, ...defaultObjTags.sampleIds];\n  const rids = [...selectedObjTags.reactionIds, ...defaultObjTags.reactionIds];\n  let psids = [];\n  let prids = [];\n  previewObjs.forEach((o) => {\n    if (o.type === 'sample') {\n      psids = [...psids, o.id];\n    } else {\n      prids = [...prids, o.id];\n    }\n  });\n  const lsids = sids.filter(x => !psids.includes(x));\n  const lrids = rids.filter(x => !prids.includes(x));\n  const targets = {\n    sample: { checkedIds: lsids },\n    reaction: { checkedIds: lrids },\n  };\n  return targets;\n};\n\nconst CapitalizeFirstLetter = (str) => {\n  if (str && str.length > 0) {\n    let charIdxs = [];\n    [...str].forEach((t, idx) => {\n      if (/^[a-zA-Z]$/.test(t)) {\n        charIdxs = [...charIdxs, idx];\n      }\n    });\n    const charIdx = charIdxs[0];\n    if (charIdx >= 0) {\n      return (\n        str.slice(0, charIdx) +\n        str.charAt(charIdx).toUpperCase() +\n        str.slice(charIdx + 1)\n      );\n    }\n  }\n  return str\n};\n\nexport {\n  UpdateSelectedObjs, GetTypeIds, UserSerial, OrderPreviewObjs, LoadPreviewIds,\n  CapitalizeFirstLetter,\n};\n","import { FN } from '@complat/react-spectra-editor';\nconst acceptables = ['jdx', 'dx', 'jcamp', 'mzml', 'mzxml', 'raw', 'cdf', 'zip'];\n\nconst JcampIds = (container) => {\n  let origJcampIds = [];\n  let geneJcampIds = [];\n  let editedJcampsIds = [];\n\n  container.children.forEach((dt) => {\n    dt.attachments.forEach((att) => {\n      try {\n        const fns = att.filename.split('.');\n        const ext = fns[fns.length - 1];\n        const isJcamp = acceptables.indexOf(ext.toLowerCase()) >= 0;\n        const typ = fns.length > 1 ? fns[fns.length - 2] : false;\n        const notOrig = typ === 'peak' || typ === 'edit';\n        if (isJcamp) {\n          if (notOrig) {\n            geneJcampIds = [...geneJcampIds, att.id];\n            editedJcampsIds = [...editedJcampsIds, att.id];\n          } else {\n            origJcampIds = [...origJcampIds, att.id];\n          }\n        }\n      } catch (err) {\n        // just ignore\n      }\n    });\n  });\n  return { orig: origJcampIds, gene: geneJcampIds, edited: editedJcampsIds };\n};\n\nconst extractJcampFiles = (container) => {\n  let files = [];\n  container.children.forEach((dt) => {\n    dt.attachments.forEach((att) => {\n      try {\n        const fns = att.filename.split('.');\n        const ext = fns[fns.length - 1];\n        const isJcamp = acceptables.indexOf(ext.toLowerCase()) >= 0;\n        const isApp = [\n          'idle', 'queueing', 'done',\n          'backup', 'image',\n          'failure', 'non_jcamp',\n        ].indexOf(att.aasm_state) < 0;\n        if (isJcamp && isApp) {\n          const file = Object.assign({}, att, {\n            idDt: dt.id,\n          });\n          files = [...files, file];\n        }\n      } catch (err) {\n        // just ignore\n      }\n    });\n  });\n  return files;\n};\n\nconst extractJcampWithFailedFiles = (container) => {\n  let files = [];\n  container.children.forEach((dt) => {\n    dt.attachments.forEach((att) => {\n      try {\n        const fns = att.filename.split('.');\n        const ext = fns[fns.length - 1];\n        const isJcamp = acceptables.indexOf(ext.toLowerCase()) >= 0;\n        const isApp = [\n          'idle', 'queueing', 'done',\n          'backup', 'image', 'non_jcamp',\n        ].indexOf(att.aasm_state) < 0;\n        if (isJcamp && isApp) {\n          const file = Object.assign({}, att, {\n            idDt: dt.id,\n          });\n          files = [...files, file];\n        }\n      } catch (err) {\n        // just ignore\n      }\n    });\n  });\n  return files;\n};\n\nconst extractNMRiumFiles = (container) => {\n  let files = [];\n  container.children.forEach((dt) => {\n    dt.attachments.forEach((att) => {\n      try {\n        const fns = att.filename.split('.');\n        const ext = fns[fns.length - 1];\n        const isNMRium = ext.toLowerCase() === 'nmrium';\n\n        if (isNMRium) {\n          const file = Object.assign({}, att, {\n            idDt: dt.id,\n          });\n          files = [...files, file];\n        }\n      } catch (err) {\n        // just ignore\n      }\n    });\n  });\n  return files;\n};\n\nconst extractAnalysesId = (sample, container) => {\n  let idAe = null;\n  sample && (sample.constructor.name != 'Object') && sample.analysesContainers()?.forEach((ae) => {\n    ae.children.forEach((ai) => {\n      if (container.id === ai.id) {\n        idAe = ae.id;\n      }\n    });\n  });\n  return idAe;\n};\n\nconst BuildSpcInfos = (sample, container) => {\n  if (!sample || !container) return [];\n  const files = extractJcampFiles(container);\n  if (files.length < 1) return [];\n  const idAe = extractAnalysesId(sample, container);\n  return files.map((file) => (\n    {\n      value: null,\n      label: file.filename,\n      title: sample.short_label,\n      idSp: sample.id,\n      idAe,\n      idAi: container.id,\n      idDt: file.idDt,\n      idx: file.id,\n      svg: sample.svgPath,\n    }\n  ));\n};\n\nconst BuildSpcInfosForNMRDisplayer = (sample, container) => {\n  if (!sample || !container) return [];\n  let files = extractJcampWithFailedFiles(container);\n  const nmriumFiles = extractNMRiumFiles(container);\n  files.push(...nmriumFiles);\n  if (files.length < 1) return [];\n  const idAe = extractAnalysesId(sample, container);\n  return files.map((file) => (\n    {\n      value: null,\n      label: file.filename,\n      title: sample.short_label,\n      idSp: sample.id,\n      idAe,\n      idAi: container.id,\n      idDt: file.idDt,\n      idx: file.id,\n    }\n  ));\n};\n\nconst listNMROntology = (chmos, storedSet, parentIsNMR = false) => {\n  if (Array.isArray(chmos)) {\n    chmos.forEach((obj) => {\n      const { children } = obj;\n      if (children && children.length > 0) {\n        children.forEach((child) => {\n          listNMROntology(child, storedSet);\n        });\n      } else {\n        return storedSet;\n      }\n    });\n  } else {\n    const { children, value } = chmos;\n    let isNMR = parentIsNMR;\n    if (value && (value.toLowerCase().includes('nuclear magnetic resonance') || parentIsNMR)) {\n      storedSet.add(value);\n      isNMR = true;\n    } else if(typeof chmos === 'string' && (chmos.toLowerCase().includes('nuclear magnetic resonance') || parentIsNMR)) {\n      storedSet.add(value);\n      isNMR = true;\n    } else {\n      isNMR = false;\n    }\n    if (children && children.length > 0) {\n      children.forEach((child) => {\n        listNMROntology(child, storedSet, isNMR);\n      });\n    } else {\n      return storedSet;\n    }\n  }\n  return storedSet;\n};\n\nconst isNMRKind = (container, chmos = []) => {\n  if (!(container && container.extended_metadata && container.extended_metadata.kind)) return false;\n  const { extended_metadata } = container; // eslint-disable-line\n  const { kind } = extended_metadata; // eslint-disable-line\n  let setToBeStored = new Set([]);\n  const ontologies = Array.from(listNMROntology(chmos, setToBeStored));\n  const filtered = ontologies.filter((ontology) => {\n    return kind === ontology || kind.toLowerCase().includes(ontology);\n  });\n  return filtered.length > 0;\n};\n\nconst cleaningNMRiumData = (nmriumData) => {\n  if (!nmriumData) return null;\n  const cleanedNMRiumData = { ...nmriumData };\n\n  const { data } = cleanedNMRiumData;\n  if (!data) return cleanedNMRiumData;\n\n  const { spectra } = data;\n  if (!spectra) return cleanedNMRiumData;\n\n  const newSpectra = spectra.map((spc) => {\n    const tmpSpc = { ...spc };\n    delete tmpSpc.originalData;\n    return tmpSpc;\n  });\n\n  data.spectra = [...newSpectra];\n\n  return cleanedNMRiumData;\n};\n\nconst inlineNotation = (layout, data, metadata) => {\n  let formattedString = '';\n  let quillData = [];\n  if (!data) return { quillData, formattedString };\n\n  const {\n    scanRate, voltaData, sampleName\n  } = data;\n  const {\n    cvConc, cvSolvent, cvSolventOthers, cvRef, cvRefOthers, cvScanRate,\n  } = metadata;\n\n  switch (layout) {\n    case FN.LIST_LAYOUT.CYCLIC_VOLTAMMETRY: {\n      if (!voltaData) {\n        break;\n      }\n      let refString = '';\n      let nonRefString = '';\n      let refOps = [];\n      const nonRefOps = [];\n      const { listPeaks, xyData } = voltaData;\n      const { x } = xyData;\n      listPeaks.forEach((item) => {\n        const {\n          isRef, e12, max, min,\n        } = item;\n        const e12Str = e12 ? FN.strNumberFixedLength(e12, 3) : '0';\n        let scanRateStr = cvScanRate ? cvScanRate : '0';\n        scanRateStr = scanRateStr === '0' && scanRate ? FN.strNumberFixedLength(scanRate, 3) : scanRateStr;\n        if (isRef) {\n          const posNegString = x[0] > x[1] ? 'neg.' : 'pos.';\n          const concentrationStr = cvConc || '<conc. of sample>';\n          const solventStr = (cvSolvent === 'others' ? cvSolventOthers : cvSolvent) || '<solvent>';\n          let internalRefStr = \"(Fc+/Fc)\";\n          refOps = [\n            { insert: `CV (${concentrationStr} in ${solventStr} vs. Ref ` },\n            { insert: `(Fc` },\n            { insert: '+', attributes: { script: 'super' } },\n            { insert: `/Fc) ` },\n            { insert: `= ${e12Str} V, v = ${scanRateStr} V/s, to ${posNegString}):` },\n          ];\n          if (cvRef === 'decamethylferrocene') {\n            internalRefStr = \"(Me10Fc+/Me10Fc)\";\n            refOps = [\n              { insert: `CV (${concentrationStr} in ${solventStr} vs. Ref ` },\n              { insert: `(Me` },\n              { insert: '10', attributes: { script: 'sub' } },\n              { insert: `Fc` },\n              { insert: '+', attributes: { script: 'super' } },\n              { insert: `/Me` },\n              { insert: '10', attributes: { script: 'sub' } },\n              { insert: `Fc) ` },\n              { insert: `= ${e12Str} V, v = ${scanRateStr} V/s, to ${posNegString}):` },\n            ];\n          }\n          else if (cvRefOthers) {\n            internalRefStr = `(${cvRefOthers})`;\n            refOps = [\n              { insert: `CV (${concentrationStr} in ${solventStr} vs. Ref ${internalRefStr} ` },\n              { insert: `= ${e12Str} V, v = ${scanRateStr} V/s, to ${posNegString}):` },\n            ];\n          }\n          refString = `CV (${concentrationStr} in ${solventStr} vs. Ref ${internalRefStr} = ${e12Str} V, v = ${scanRateStr} V/s, to ${posNegString}):`;\n\n        } else {\n          const delta = (max && min) ? FN.strNumberFixedLength(Math.abs(max.x - min.x) * 1000, 3) : '0';\n          nonRefString += `\\nE1/2 = ([${sampleName}] , ΔEp) = ${e12Str} V (${delta} mV)`;\n          const currentNoneOps = [\n            { insert: '\\nE' },\n            { insert: '1/2', attributes: { script: 'sub' } },\n            { insert: ` = ([${sampleName}] , ΔE` },\n            { insert: 'p', attributes: { script: 'sub' } },\n            { insert: `) = ${e12Str} V (${delta} mV)` },\n          ];\n          nonRefOps.push(...currentNoneOps);\n        }\n      });\n\n      formattedString = refString + nonRefString;\n      quillData = [...refOps, ...nonRefOps];\n      break;\n    }\n    default:\n      break;\n  }\n\n  return { quillData, formattedString };\n};\n\nexport { BuildSpcInfos, BuildSpcInfosForNMRDisplayer, JcampIds, isNMRKind, cleaningNMRiumData, inlineNotation }; // eslint-disable-line\n","const TIME_UNITS = {\n  SECONDS: 's',\n  MINUTES: 'm',\n  HOURS: 'h'\n};\n\nconst TON_UNITS = {\n  PER_SECOND: 'TON/s',\n  PER_MINUTE: 'TON/m',\n  PER_HOUR: 'TON/h'\n};\n\nconst TEMPERATURE_UNITS = {\n  KELVIN: 'K',\n  FAHRENHEIT: '°F',\n  CELSIUS: '°C'\n};\n\nconst IDEAL_GAS_CONSTANT = 0.0821;\nconst PARTS_PER_MILLION_FACTOR = 1_000_000;\nconst DEFAULT_TEMPERATURE_IN_KELVIN = 294; // Assuming 21°C is used in the original formula\n\nconst handleFloatNumbers = (number, decimalPlaces) => {\n  const numericValue = Number(number);\n  if (Number.isNaN(numericValue)) return null;\n\n  const roundedValue = Math.round(Math.abs(number) * 10 ** decimalPlaces)\n    / 10 ** decimalPlaces;\n  return parseFloat(number < 0 ? -roundedValue : roundedValue);\n};\n\nconst convertTemperature = (valueToFormat, currentUnit) => {\n  const numericValue = Number(valueToFormat);\n  if (Number.isNaN(numericValue)) return null;\n\n  const kelvinToCelsius = (value) => value - 273.15;\n  const celsiusToFahrenheit = (value) => ((value * 9) / 5) + 32;\n  const fahrenheitToKelvin = (value) => (((value - 32) * 5) / 9) + 273.15;\n\n  let formattedValue = valueToFormat;\n  let restOfString = '';\n  let convertedValue;\n\n  const decimalPlaces = 4;\n  if (typeof valueToFormat === 'string') {\n    const regex = /(-?\\d+\\.\\d+|-?\\d+)(.*)/;\n    const match = valueToFormat.match(regex);\n    if (match) {\n      formattedValue = match[1];\n      restOfString = ` ${match[2].trim()}` || '';\n    }\n  }\n  const conversions = {\n    K: { convertedUnit: TEMPERATURE_UNITS.CELSIUS, conversionFunc: kelvinToCelsius },\n    '°C': { convertedUnit: TEMPERATURE_UNITS.FAHRENHEIT, conversionFunc: celsiusToFahrenheit },\n    '°F': { convertedUnit: TEMPERATURE_UNITS.KELVIN, conversionFunc: fahrenheitToKelvin },\n  };\n  const { convertedUnit, conversionFunc } = conversions[currentUnit];\n  convertedValue = conversionFunc(formattedValue);\n  formattedValue = formattedValue !== '' ? convertedValue : '';\n  formattedValue = handleFloatNumbers(formattedValue, decimalPlaces);\n  convertedValue = `${formattedValue}${restOfString}`;\n  return [convertedValue, convertedUnit];\n};\n\nconst convertTemperatureToKelvin = (temperature) => {\n  const { unit, value } = temperature || {};\n  const temperatureValue = parseFloat(value);\n  if (Number.isNaN(temperatureValue)) return null;\n\n  switch (unit) {\n    case TEMPERATURE_UNITS.FAHRENHEIT:\n      return Math.abs((((temperatureValue - 32) * 5) / 9) + 273.15);\n    case TEMPERATURE_UNITS.CELSIUS:\n      return Math.abs(temperatureValue + 273.15);\n    case TEMPERATURE_UNITS.KELVIN:\n      return Math.abs(temperatureValue);\n    default:\n      throw new Error(`Unsupported temperature unit: ${unit}`);\n  }\n};\n\nconst hoursToMinutes = (value) => value * 60;\nconst hoursToSeconds = (value) => value * 3600;\nconst minutesToSeconds = (value) => (value * 60);\nconst minutesToHours = (value) => (value / 60);\nconst secondsToHours = (value) => (value / 3600);\nconst secondsToMinutes = (value) => (value / 60);\n\nconst convertTime = (valueToFormat, currentUnit) => {\n  const numericValue = Number(valueToFormat);\n  if (Number.isNaN(numericValue)) return null;\n  const decimalPlaces = 4;\n  const conversions = {\n    h: { convertedUnit: TIME_UNITS.MINUTES, conversionFunc: hoursToMinutes },\n    m: { convertedUnit: TIME_UNITS.SECONDS, conversionFunc: minutesToSeconds },\n    s: { convertedUnit: TIME_UNITS.HOURS, conversionFunc: secondsToHours },\n  };\n\n  const { convertedUnit, conversionFunc } = conversions[currentUnit];\n  const convertedValue = conversionFunc(valueToFormat);\n  let formattedValue = valueToFormat !== '' ? convertedValue : '';\n  formattedValue = handleFloatNumbers(formattedValue, decimalPlaces);\n  return [formattedValue, convertedUnit];\n};\n\nconst calculateFeedstockVolume = (amount, purity) => (\n  amount * IDEAL_GAS_CONSTANT * DEFAULT_TEMPERATURE_IN_KELVIN\n) / purity;\n\nconst calculateGasVolume = (molAmount, gasPhaseData) => {\n  const { part_per_million: ppm, temperature } = gasPhaseData;\n  const temperatureInKelvin = convertTemperatureToKelvin(temperature);\n\n  if (!temperatureInKelvin || temperatureInKelvin <= 0 || !ppm || ppm <= 0) {\n    return 0;\n  }\n\n  return (molAmount * IDEAL_GAS_CONSTANT * temperatureInKelvin) / (ppm / PARTS_PER_MILLION_FACTOR);\n};\n\nconst calculateMolesFromMoleculeWeight = (amountGram, molecularWeight) => (amountGram / molecularWeight);\n\nconst calculateVolumeForFeedstockOrGas = (amountGram, molecularWeight, purity, gasType, gasPhaseData) => {\n  const molAmount = calculateMolesFromMoleculeWeight(amountGram, molecularWeight);\n\n  if (gasType === 'gas') {\n    return calculateGasVolume(molAmount, gasPhaseData);\n  }\n\n  return calculateFeedstockVolume(molAmount, purity);\n};\n\nconst calculateGasMoles = (volume, ppm, temperatureInKelvin) => (ppm * volume)\n / (IDEAL_GAS_CONSTANT * temperatureInKelvin * PARTS_PER_MILLION_FACTOR);\n\nconst calculateFeedstockMoles = (volume, purity) => (volume * purity) / (\n  IDEAL_GAS_CONSTANT * DEFAULT_TEMPERATURE_IN_KELVIN);\n\nconst updateFeedstockMoles = (purity, amountLiter, currentAmountLiter) => {\n  const volume = amountLiter || currentAmountLiter;\n  if (!volume) {\n    return null;\n  }\n\n  const moles = calculateFeedstockMoles(volume, purity);\n  return moles;\n};\n\nconst calculateTON = (moles, moleOfCatalystReference) => {\n  let value;\n  if (!moleOfCatalystReference) {\n    value = moleOfCatalystReference;\n  } else {\n    value = moles || moles === 0 ? moles / moleOfCatalystReference : null;\n  }\n  return value;\n};\n\nconst calculateTONPerTimeValue = (timeValue, timeUnit) => {\n  const numericValue = Number(timeValue);\n  if (Number.isNaN(numericValue)) return null;\n\n  switch (timeUnit) {\n    case TIME_UNITS.SECONDS:\n      return {\n        hours: secondsToHours(timeValue),\n        minutes: secondsToMinutes(timeValue),\n        seconds: timeValue\n      };\n    case TIME_UNITS.MINUTES:\n      return {\n        hours: minutesToHours(timeValue),\n        minutes: timeValue,\n        seconds: minutesToSeconds(timeValue)\n      };\n    case TIME_UNITS.HOURS:\n      return {\n        hours: timeValue,\n        minutes: hoursToMinutes(timeValue),\n        seconds: hoursToSeconds(timeValue)\n      };\n    default:\n      throw new Error(`Unsupported time unit: ${timeUnit}`);\n  }\n};\n\nconst determineTONFrequencyValue = (tonValue, tonFrequencyUnit, timeValues, defaultValue) => {\n  if (tonValue === undefined || tonValue === null) {\n    return null;\n  }\n  if (tonValue === 0) {\n    return 0;\n  }\n\n  switch (tonFrequencyUnit) {\n    case TON_UNITS.PER_SECOND:\n      return timeValues.seconds ? tonValue / timeValues.seconds : defaultValue;\n    case TON_UNITS.PER_MINUTE:\n      return timeValues.minutes ? tonValue / timeValues.minutes : defaultValue;\n    case TON_UNITS.PER_HOUR:\n      return timeValues.hours ? tonValue / timeValues.hours : defaultValue;\n    default:\n      return defaultValue;\n  }\n};\n\nconst convertTurnoverFrequency = (valueToFormat, currentUnit) => {\n  const numericValue = Number(valueToFormat);\n  if (Number.isNaN(numericValue)) return null;\n\n  const decimalPlaces = 4;\n\n  const conversions = {\n    'TON/h': { convertedUnit: TON_UNITS.PER_MINUTE, conversionFunc: hoursToMinutes },\n    'TON/m': { convertedUnit: TON_UNITS.PER_SECOND, conversionFunc: minutesToSeconds },\n    'TON/s': { convertedUnit: TON_UNITS.PER_HOUR, conversionFunc: secondsToHours },\n  };\n\n  const { convertedUnit, conversionFunc } = conversions[currentUnit];\n  const convertedValue = conversionFunc(valueToFormat);\n  let formattedValue = valueToFormat !== '' ? convertedValue : '';\n  formattedValue = handleFloatNumbers(formattedValue, decimalPlaces);\n  return [formattedValue, convertedUnit];\n};\n\nexport {\n  // eslint-disable-next-line import/prefer-default-export\n  handleFloatNumbers,\n  convertTemperature,\n  convertTemperatureToKelvin,\n  convertTime,\n  calculateFeedstockVolume,\n  calculateGasVolume,\n  calculateMolesFromMoleculeWeight,\n  calculateVolumeForFeedstockOrGas,\n  calculateGasMoles,\n  calculateFeedstockMoles,\n  updateFeedstockMoles,\n  calculateTON,\n  calculateTONPerTimeValue,\n  determineTONFrequencyValue,\n  convertTurnoverFrequency,\n};\n","const previewContainerImage = (\n  container,\n  noAttSvg = '/images/wild_card/no_attachment.svg',\n  noAvaSvg = '/images/wild_card/not_available.svg'\n) => {\n  const rawImg = (container.preview_img || {}).preview;\n  switch (rawImg) {\n    case null:\n    case undefined:\n      return noAttSvg;\n    case 'not available':\n      return noAvaSvg;\n    default:\n      return `data:image/png;base64,${rawImg}`;\n  }\n};\n\nconst previewAttachmentImage = (\n  attachment,\n  noAvaSvg = '/images/wild_card/not_available.svg'\n) => {\n  if (attachment.thumb) {\n    return `/images/thumbnail/${attachment.identifier}`;\n  }\n  return noAvaSvg;\n};\n\nexport { previewContainerImage, previewAttachmentImage };\n","import _ from 'lodash';\n\nconst contentToText = (content) => {\n  if (typeof (content) === 'undefined' || !content ||\n    typeof (content.ops) === 'undefined' || !content.ops) {\n    return '';\n  }\n  return (content.ops || []).reduce((txt, operation) => {\n    if (typeof operation.insert !== 'string') { return txt + ' ' };\n    return txt + operation.insert;\n  }, '');\n};\n\nconst keepSupSub = (value) => {\n  const content = [];\n  value.ops.forEach((op) => {\n    if (typeof op.insert === 'string' && op.insert !== '\\n') {\n      if (op.attributes\n            && op.attributes.script\n            && (op.attributes.script === 'super'\n                || op.attributes.script === 'sub')) {\n        content.push({\n          insert: op.insert,\n          attributes: { script: op.attributes.script }\n        });\n      } else {\n        content.push({ insert: op.insert });\n      }\n    }\n  });\n  content.filter(op => op).push({ insert: '\\n' });\n  // NB: what is this for?\n  // if (content.length === 1) {\n  //   content.unshift({ insert: '-' });\n  // }\n  return content;\n};\n\nconst rmRedundantSpaceBreak = (target) => {\n  return target.replace(/\\n/g, '').replace(/\\s\\s+/g, ' ');\n};\n\nconst rmOpsRedundantSpaceBreak = (ops) => {\n  const clearOps = ops.map((op) => {\n    op.insert = rmRedundantSpaceBreak(op.insert);\n    return op;\n  });\n  return clearOps;\n};\n\nconst rmDeltaRedundantSpaceBreak = (delta) => {\n  const clearOps = rmOpsRedundantSpaceBreak(delta.ops);\n  return { ops: clearOps };\n};\n\nconst frontBreak = (content) => {\n  const res = [{ insert: '\\n' }, ...content];\n  return res;\n};\n\nconst mapValueToGroupRegex = (content, matchedGroup) => {\n  let newContent = _.cloneDeep(content);\n  matchedGroup.forEach((m, idx) => {\n    newContent = newContent.map((d) => {\n      const patt = `#{${idx + 1}}`;\n      const insertString = d.insert;\n      const dd = { ...d };\n      dd.insert = insertString.replace(patt, m || '');\n      return dd;\n    });\n  });\n\n  return newContent;\n};\n\nexport {\n  contentToText,\n  keepSupSub,\n  rmDeltaRedundantSpaceBreak,\n  rmOpsRedundantSpaceBreak,\n  rmRedundantSpaceBreak,\n  frontBreak,\n};\n","import React from 'react';\n\nconst minusRender = (name) => (\n  <span key={`${name}_key`} id={`${name}_id`} style={{ marginRight: '10px', cursor: 'pointer' }}>\n    <i className=\"fa fa-minus\" />\n  </span>\n);\n\nconst reactionToolbarSymbol = [\n  {\n    name: 'ndash',\n    ops: [\n      { insert: '–' },\n    ],\n    render: minusRender,\n  },\n  {\n    name: 'water-free',\n    ops: [\n      { insert: 'The reaction has been conducted in dry glass ware under inert atmosphere.' },\n    ],\n  },\n  {\n    name: 'resin-solvent',\n    ops: [\n      { insert: 'The resin (xxx mg, loading = X.XX g/mol, XX.X mmol) was swollen in xx mL of SOLVENT for xx min at room temperature.' },\n    ],\n  },\n  {\n    name: 'resin-solvent-reagent',\n    ops: [\n      { insert: 'The resin (xxx mg, loading = X.XX g/mol, XX.X mmol) was filled into a 10 mL crimp cap vial and was swollen in xx mL of SOLVENT. After xx min, xxx.x mg of REAGENT (XX.X mmol, XX.X equiv.) and XX.X mg of REAGENT (XX.X mg, XX.X mmol, X.XX equiv.) were added. The reaction mixture was shaken at XX °C for XX h.' },\n    ],\n  },\n  {\n    name: 'hand-stop',\n    ops: [\n      { insert: 'After complete conversion of the starting material, the reaction was quenched ' },\n      {\n        insert: 'via',\n        attributes: { italic: true },\n      },\n      { insert: ' careful addition of saturated NaHCO' },\n      {\n        insert: '3',\n        attributes: { script: 'sub' },\n      },\n      { insert: '-solution.' },\n    ],\n  },\n  {\n    name: 'reaction-procedure',\n    ops: [\n      { insert: 'The reaction mixture was poured into a glass funnel with filter paper and the polymer beads were washed XX times according to the following procedure: (1) SOLVENT [x repetitions] (2)  SOLVENT [x repetitions] (3)  SOLVENT [x repetitions] (4)  SOLVENT [x repetitions] (5)  SOLVENT [x repetitions].' },\n    ],\n  },\n  {\n    name: 'gpx-a',\n    ops: [\n      { insert: 'According to GPX, AMOUNT g (XXX mmol, XX equiv.) of STARTING MATERIAL were reacted with XX.X mL (XX.X mg, XX.X mmol, X.XX equiv.) of REAGENT und X.XX mg (24.0 mmol, 5.00 equiv.) of REAGENT in XX mL of SOLVENT at XX °C for XX h.' },\n    ],\n  },\n  {\n    name: 'gpx-b',\n    ops: [\n      { insert: 'According to GPX, AMOUNT g (XXX mmol, XX equiv.) of STARTING MATERIAL were reacted with XX.X mL (XX.X mg, XX.X mmol, X.XX equiv.) of REAGENT und X.XX mg (24.0 mmol, 5.00 equiv.) of REAGENT in XX mL of SOLVENT at XX °C for XX h.' },\n    ],\n  },\n  {\n    name: 'washed-nahco3',\n    ops: [\n      { insert: 'The reaction mixture was poured into a separation funnel and the organic layer was washed successively with xx mL of NaHCO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '3',\n      },\n      { insert: '-solution, xx mL of brine and xx mL of water. The aqueous layers were recombined and reextracted with ethyl acetate.\\nThe organic layers were collected and were dried by the addition of Na' },\n      {\n        attributes: { script: 'sub' },\n        insert: '2',\n      },\n      { insert: 'SO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '/MgSO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '. The mixture was filtered through a glass funnel and the solvent was evaporated under reduced pressure.' },\n    ],\n  },\n  {\n    name: 'acidified-hcl',\n    ops: [\n      { insert: 'The reaction mixture was poured into a separation funnel and was acidified by the addition of 1 M HCl. The aqueous layer was collected and adjusted to pH 8-9 by addition of saturated NaHCO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '3',\n      },\n      { insert: '-solution. xx mL of SOLVENT were added and the aqueous phase was extracted three times. After washing with brine and water, the organic layers were collected and were dried by the addition of Na' },\n      {\n        attributes: { script: 'sub' },\n        insert: '2',\n      },\n      { insert: 'SO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '/MgSO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '. The mixture was filtered through a glass funnel and the solvent was evaporated under reduced pressure.' },\n    ],\n  },\n  {\n    name: 'tlc-control',\n    ops: [\n      { insert: 'The progress of the reaction was observed via TLC control (cyclohexane:ethyl acetate; xx:xx; R' },\n      {\n        attributes: {\n          italic: true,\n          script: 'sub',\n        },\n        insert: 'f = ',\n      },\n      { insert: '0.XX).' },\n    ],\n  },\n  {\n    name: 'dried',\n    ops: [\n      { insert: 'The combined organic layers were dried by the addition of Na' },\n      {\n        attributes: { script: 'sub' },\n        insert: '2',\n      },\n      { insert: 'SO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '/MgSO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '. The mixture was filtered through a glass funnel and the solvent was evaporated under reduced pressure.' },\n    ],\n  },\n  {\n    name: 'isolated',\n    ops: [\n      { insert: 'The target compound was isolated by filtering of the resulting mixture through a glass funnel and was washed AMOUNT times with SOLVENT.' },\n    ],\n  },\n  {\n    name: 'residue-purified',\n    ops: [\n      { insert: 'The crude residue was purified ' },\n      {\n        attributes: { italic: true },\n        insert: 'via',\n      },\n      { insert: ' column chromatography (cyclohexane:ethyl acetate; xx:xx → cyclohexane:ethyl acetate; xx:xx). The target compound was isolated as a colorless solid in xx% yield (xx mg, xx mmol). R' },\n      {\n        attributes: {\n          italic: true,\n          script: 'sub',\n        },\n        insert: 'f = ',\n      },\n      { insert: '0.XX (cyclohexane:ethyl acetate).' },\n    ],\n  },\n  {\n    name: 'residue-adsorbed',\n    ops: [\n      { insert: 'The crude residue was adsorbed on a small amount of silica gel/Celite and was purified ' },\n      {\n        attributes: { italic: true },\n        insert: 'via',\n      },\n      { insert: ' column chromatography (cyclohexane:ethyl acetate; xx:xx → cyclohexane:ethyl acetate; xx:xx). The target compound was isolated as a colorless solid in xx% yield (xx mg, xx mmol). R' },\n      {\n        attributes: {\n          italic: true,\n          script: 'sub',\n        },\n        insert: 'f = ',\n      },\n      { insert: '0.XX (cyclohexane:ethyl acetate).' },\n    ],\n  },\n  {\n    name: 'residue-dissolved',\n    ops: [\n      { insert: 'The crude residue was dissolved in a small amount of SOLVENT and was purified ' },\n      {\n        attributes: { italic: true },\n        insert: 'via',\n      },\n      { insert: ' column chromatography (cyclohexane:ethyl acetate; xx:xx → cyclohexane:ethyl acetate; xx:xx). The target compound was isolated as a colorless STATE in xx% yield (xx mg, xx mmol). R' },\n      {\n        attributes: {\n          italic: true,\n          script: 'sub',\n        },\n        insert: 'f = ',\n      },\n      { insert: '0.XX (cyclohexane:ethyl acetate).' },\n    ],\n  },\n];\n\nconst ops1HHead = (freqStr = '', solvent = '') => (\n  [\n    { attributes: { script: 'super' }, insert: '1' },\n    { insert: `H NMR (${freqStr}${solvent}ppm) δ = ` },\n  ]\n);\n\nconst ops13CHead = (freqStr = '', solvent = '') => (\n  [\n    { attributes: { script: 'super' }, insert: '13' },\n    { insert: `C NMR (${freqStr}${solvent}ppm) δ = ` },\n  ]\n);\n\nconst ops15NHead = (freqStr = '', solvent = '') => (\n  [\n    { attributes: { script: 'super' }, insert: '15' },\n    { insert: `N NMR (${freqStr}${solvent}ppm) δ = ` },\n  ]\n);\n\nconst ops19FHead = (freqStr = '', solvent = '') => (\n  [\n    { attributes: { script: 'super' }, insert: '19' },\n    { insert: `F NMR (${freqStr}${solvent}ppm) δ = ` },\n  ]\n);\n\nconst ops29SiHead = (freqStr = '', solvent = '') => (\n  [\n    { attributes: { script: 'super' }, insert: '29' },\n    { insert: `Si NMR (${freqStr}${solvent}ppm) δ = ` },\n  ]\n);\n\nconst ops31PHead = (freqStr = '', solvent = '') => (\n  [\n    { attributes: { script: 'super' }, insert: '31' },\n    { insert: `P NMR (${freqStr}${solvent}ppm) δ = ` },\n  ]\n);\n\nconst opsCommonTail = () => (\n  [\n    { insert: '. ' },\n  ]\n);\n\nconst opsIRHead = () => (\n  [\n    { insert: 'IR (ATR, ṽ) = ' },\n  ]\n);\n\nconst opsIRTail = () => (\n  [\n    { insert: ' cm' },\n    { attributes: { script: 'super' }, insert: '–1' },\n    { insert: '. ' },\n  ]\n);\n\nconst opsRAMANHead = () => (\n  [\n    { insert: 'RAMAN (ṽ) = ' },\n  ]\n);\n\nconst opsRAMANTail = () => (\n  [\n    { insert: ' cm' },\n    { attributes: { script: 'super' }, insert: '–1' },\n    { insert: '. ' },\n  ]\n);\n\nconst opsUVVISHead = () => (\n  [\n    { insert: 'UV-VIS (absorption, solvent), λmax = ' },\n  ]\n);\n\nconst opsHPLCUVVISHead = () => (\n  [\n    { insert: 'HPLC UV/VIS (λmax) = ' },\n  ]\n);\n\nconst opsUVVISTail = () => (\n  [\n    { insert: ' nm' },\n    { insert: '. ' },\n  ]\n);\n\nconst opsHPLCUVVISTail = () => (\n  [\n    { insert: ' ' },\n    { insert: '. ' },\n  ]\n);\n\nconst sampleAnalysesContentSymbol = [\n  {\n    name: 'ndash',\n    render: minusRender,\n    ops: [\n      { insert: '–' },\n    ],\n  },\n  {\n    name: 'h-nmr',\n    ops: ops1HHead([]),\n  },\n  {\n    name: 'c-nmr',\n    ops: ops13CHead([]),\n  },\n  {\n    name: 'ir',\n    ops: [...opsIRHead(), ...opsIRTail()],\n  },\n  {\n    name: 'uv',\n    ops: [\n      { insert: 'UV-VIS (CH' },\n      { attributes: { script: 'sub' }, insert: '2' },\n      { insert: 'Cl' },\n      { attributes: { script: 'sub' }, insert: '2' },\n      { insert: '), λ' },\n      { attributes: { script: 'sub' }, insert: 'max' },\n      { insert: '(log ε) = .' },\n    ],\n  },\n  {\n    name: 'ea',\n    ops: [\n      { insert: 'EA (): Calcd C ; H ; N ; O . Found C ; H ; N ; O .' },\n    ],\n  },\n];\n\nconst opsMSHead = (solventOps = []) => ( // eslint-disable-line\n  []\n);\n\nconst opsMSTail = () => (\n  []\n);\n\nconst opsDLSIntensityHead = () => (\n  [\n    { insert: 'DLS: ' },\n  ]\n);\n\nconst opsEmmissionHead = () => (\n  [\n    { insert: 'Emission: ' },\n  ]\n);\n\nconst opsXRDHead = () => (\n  [\n    { insert: 'XRD ' },\n  ]\n);\n\nconst opsCommonHead = () => (\n  []\n);\n\nconst SpectraOps = {\n  PLAIN: { head: [], tail: [] },\n  '1H': { head: ops1HHead, tail: opsCommonTail },\n  '13C': { head: ops13CHead, tail: opsCommonTail },\n  '15N': { head: ops15NHead, tail: opsCommonTail },\n  '19F': { head: ops19FHead, tail: opsCommonTail },\n  '29Si': { head: ops29SiHead, tail: opsCommonTail },\n  '31P': { head: ops31PHead, tail: opsCommonTail },\n  IR: { head: opsIRHead, tail: opsIRTail },\n  RAMAN: { head: opsRAMANHead, tail: opsRAMANTail },\n  'UV/VIS': { head: opsUVVISHead, tail: opsUVVISTail },\n  'HPLC UV/VIS': { head: opsHPLCUVVISHead, tail: opsHPLCUVVISTail },\n  MS: { head: opsMSHead, tail: opsMSTail },\n  Emissions: { head: opsEmmissionHead, tail: opsCommonTail },\n  'DLS ACF': { head: opsCommonHead, tail: opsCommonTail },\n  'DLS intensity': { head: opsDLSIntensityHead, tail: opsCommonTail },\n  'X-RAY DIFFRACTION': { head: opsXRDHead, tail: opsCommonHead }\n};\n\nconst reactionAnalysesMacros = {\n  ndash: {\n    ops: [\n      { insert: '–' },\n    ],\n  },\n  'water-free': {\n    ops: [\n      { insert: 'The reaction has been conducted in dry glass ware under inert atmosphere.' },\n    ],\n  },\n  'resin-solvent': {\n    ops: [\n      { insert: 'The resin (xxx mg, loading = X.XX g/mol, XX.X mmol) was swollen in xx mL of SOLVENT for xx min at room temperature.' },\n    ],\n  },\n  'resin-solvent-reagent': {\n    ops: [\n      { insert: 'The resin (xxx mg, loading = X.XX g/mol, XX.X mmol) was filled into a 10 mL crimp cap vial and was swollen in xx mL of SOLVENT. After xx min, xxx.x mg of REAGENT (XX.X mmol, XX.X equiv.) and XX.X mg of REAGENT (XX.X mg, XX.X mmol, X.XX equiv.) were added. The reaction mixture was shaken at XX °C for XX h.' },\n    ],\n  },\n  'hand-stop': {\n    ops: [\n      { insert: 'After complete conversion of the starting material, the reaction was quenched ' },\n      {\n        insert: 'via',\n        attributes: { italic: true },\n      },\n      { insert: ' careful addition of saturated NaHCO' },\n      {\n        insert: '3',\n        attributes: { script: 'sub' },\n      },\n      { insert: '-solution.' },\n    ],\n  },\n  'reaction-procedure': {\n    ops: [\n      { insert: 'The reaction mixture was poured into a glass funnel with filter paper and the polymer beads were washed XX times according to the following procedure: (1) SOLVENT [x repetitions] (2)  SOLVENT [x repetitions] (3)  SOLVENT [x repetitions] (4)  SOLVENT [x repetitions] (5)  SOLVENT [x repetitions].' },\n    ],\n  },\n  'gpx-a': {\n    ops: [\n      { insert: 'According to GPX, AMOUNT g (XXX mmol, XX equiv.) of STARTING MATERIAL were reacted with XX.X mL (XX.X mg, XX.X mmol, X.XX equiv.) of REAGENT und X.XX mg (24.0 mmol, 5.00 equiv.) of REAGENT in XX mL of SOLVENT at XX °C for XX h.' },\n    ],\n  },\n  'gpx-b': {\n    ops: [\n      { insert: 'According to GPX, AMOUNT g (XXX mmol, XX equiv.) of STARTING MATERIAL were reacted with XX.X mL (XX.X mg, XX.X mmol, X.XX equiv.) of REAGENT und X.XX mg (24.0 mmol, 5.00 equiv.) of REAGENT in XX mL of SOLVENT at XX °C for XX h.' },\n    ],\n  },\n  'washed-nahco3': {\n    ops: [\n      { insert: 'The reaction mixture was poured into a separation funnel and the organic layer was washed successively with xx mL of NaHCO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '3',\n      },\n      { insert: '-solution, xx mL of brine and xx mL of water. The aqueous layers were recombined and reextracted with ethyl acetate.\\nThe organic layers were collected and were dried by the addition of Na' },\n      {\n        attributes: { script: 'sub' },\n        insert: '2',\n      },\n      { insert: 'SO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '/MgSO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '. The mixture was filtered through a glass funnel and the solvent was evaporated under reduced pressure.' },\n    ],\n  },\n  'acidified-hcl': {\n    ops: [\n      { insert: 'The reaction mixture was poured into a separation funnel and was acidified by the addition of 1 M HCl. The aqueous layer was collected and adjusted to pH 8-9 by addition of saturated NaHCO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '3',\n      },\n      { insert: '-solution. xx mL of SOLVENT were added and the aqueous phase was extracted three times. After washing with brine and water, the organic layers were collected and were dried by the addition of Na' },\n      {\n        attributes: { script: 'sub' },\n        insert: '2',\n      },\n      { insert: 'SO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '/MgSO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '. The mixture was filtered through a glass funnel and the solvent was evaporated under reduced pressure.' },\n    ],\n  },\n  'tlc-control': {\n    ops: [\n      { insert: 'The progress of the reaction was observed via TLC control (cyclohexane:ethyl acetate; xx:xx; R' },\n      {\n        attributes: {\n          italic: true,\n          script: 'sub',\n        },\n        insert: 'f = ',\n      },\n      { insert: '0.XX).' },\n    ],\n  },\n  dried: {\n    ops: [\n      { insert: 'The combined organic layers were dried by the addition of Na' },\n      {\n        attributes: { script: 'sub' },\n        insert: '2',\n      },\n      { insert: 'SO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '/MgSO' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '. The mixture was filtered through a glass funnel and the solvent was evaporated under reduced pressure.' },\n    ],\n  },\n  isolated: {\n    ops: [\n      { insert: 'The target compound was isolated by filtering of the resulting mixture through a glass funnel and was washed AMOUNT times with SOLVENT.' },\n    ],\n  },\n  'residue-purified': {\n    ops: [\n      { insert: 'The crude residue was purified ' },\n      {\n        attributes: { italic: true },\n        insert: 'via',\n      },\n      { insert: ' column chromatography (cyclohexane:ethyl acetate; xx:xx → cyclohexane:ethyl acetate; xx:xx). The target compound was isolated as a colorless solid in xx% yield (xx mg, xx mmol). R' },\n      {\n        attributes: {\n          italic: true,\n          script: 'sub',\n        },\n        insert: 'f = ',\n      },\n      { insert: '0.XX (cyclohexane:ethyl acetate).' },\n    ],\n  },\n  'residue-adsorbed': {\n    ops: [\n      { insert: 'The crude residue was adsorbed on a small amount of silica gel/Celite and was purified ' },\n      {\n        attributes: { italic: true },\n        insert: 'via',\n      },\n      { insert: ' column chromatography (cyclohexane:ethyl acetate; xx:xx → cyclohexane:ethyl acetate; xx:xx). The target compound was isolated as a colorless solid in xx% yield (xx mg, xx mmol). R' },\n      {\n        attributes: {\n          italic: true,\n          script: 'sub',\n        },\n        insert: 'f = ',\n      },\n      { insert: '0.XX (cyclohexane:ethyl acetate).' },\n    ],\n  },\n  'residue-dissolved': {\n    ops: [\n      { insert: 'The crude residue was dissolved in a small amount of SOLVENT and was purified ' },\n      {\n        attributes: { italic: true },\n        insert: 'via',\n      },\n      { insert: ' column chromatography (cyclohexane:ethyl acetate; xx:xx → cyclohexane:ethyl acetate; xx:xx). The target compound was isolated as a colorless STATE in xx% yield (xx mg, xx mmol). R' },\n      {\n        attributes: {\n          italic: true,\n          script: 'sub',\n        },\n        insert: 'f = ',\n      },\n      { insert: '0.XX (cyclohexane:ethyl acetate).' },\n    ],\n  },\n};\n\nconst sampleAnalysesMacros = {\n  ndash: {\n    ops: [\n      { insert: '–' },\n    ],\n  },\n  'h-nmr': {\n    ops: ops1HHead([]),\n  },\n  'c-nmr': {\n    ops: ops13CHead([]),\n  },\n  ir: {\n    ops: [...opsIRHead(), ...opsIRTail()],\n  },\n  uv: {\n    ops: [\n      { insert: 'UV-VIS (CH' },\n      { attributes: { script: 'sub' }, insert: '2' },\n      { insert: 'Cl' },\n      { attributes: { script: 'sub' }, insert: '2' },\n      { insert: '), λ' },\n      { attributes: { script: 'sub' }, insert: 'max' },\n      { insert: '(log ε) = .' },\n    ],\n  },\n  ea: {\n    ops: [\n      { insert: 'EA (): Calcd C ; H ; N ; O . Found C ; H ; N ; O .' },\n    ],\n  },\n  ei: {\n    ops: [\n      { insert: 'MS (EI, 70 eV, XX °C), m/z (%):' },\n    ],\n  },\n  fab: {\n    ops: [\n      { insert: 'MS (FAB, 3-NBA), m/z (%):' },\n    ],\n  },\n  esi: {\n    ops: [\n      { insert: 'MS (ESI), m/z (%):' },\n    ],\n  },\n  apci: {\n    ops: [\n      { insert: 'MS (APCI, CH' },\n      {\n        attributes: { script: 'sub' },\n        insert: '3',\n      },\n      { insert: 'COONH' },\n      {\n        attributes: { script: 'sub' },\n        insert: '4',\n      },\n      { insert: '), m/z (%): ' },\n    ],\n  },\n  asap: {\n    ops: [\n      { insert: 'MS (ASAP), m/z (%):' },\n    ],\n  },\n  maldi: {\n    ops: [\n      { insert: 'MS (MALDI-TOF), m/z (%):' },\n    ],\n  },\n  'm+': {\n    ops: [\n      { insert: '[M]' },\n      { insert: '+', attributes: { script: 'super' } },\n    ],\n  },\n  hr: {\n    ops: [\n      { insert: 'HRMS (): calcd , found .' },\n    ],\n  },\n  'hr-ei': {\n    ops: [\n      { insert: \"HRMS (EI): \" },\n      { insert: \"m/z\", attributes: { italic: true } },\n      { insert: \" = calcd for \" },\n      { insert: \"sum-formula\", attributes: { bold: true } },\n      { insert: \" [M]\" },\n      { insert: \"+\", attributes: { script: \"super\" } },\n      { insert: \": \" },\n      { insert: \"MASS\", attributes: { bold: true } },\n      { insert: \"; found \" },\n      { insert: \"MASS\", attributes: { bold: true } },\n      { insert: \".\" }\n    ],\n  },\n  'hr-fab': {\n    ops: [\n      { insert: \"HRMS (FAB, matrix NBA): \" },\n      { insert: \"m/z\", attributes: { italic: true } },\n      { insert: \" = calcd for \" },\n      { insert: \"sum-formula\", attributes: { bold: true } },\n      { insert: \" [M+H]\" },\n      { insert: \"+\", attributes: { script: \"super\" } },\n      { insert: \": \" },\n      { insert: \"MASS\", attributes: { bold: true } },\n      { insert: \"; found: \" },\n      { insert: \"MASS\", attributes: { bold: true } },\n      { insert: \".\" }\n    ],\n  },\n};\n\nconst defaultMacroToolbar = ['ndash', 'h-nmr', 'c-nmr', 'ir', 'uv', 'ea'];\nconst defaultMacroDropdown = {\n  MS: [\n    'ei', 'fab', 'esi', 'apci', 'asap', 'maldi', 'm+', 'hr', 'hr-ei', 'hr-fab'\n  ]\n};\n\nexport {\n  reactionToolbarSymbol,\n  sampleAnalysesContentSymbol,\n  SpectraOps,\n  sampleAnalysesMacros,\n  reactionAnalysesMacros,\n  defaultMacroDropdown,\n  defaultMacroToolbar\n};\n","import UIStore from 'src/stores/alt/stores/UIStore';\nimport CollectionStore from 'src/stores/alt/stores/CollectionStore';\nimport UIActions from 'src/stores/alt/actions/UIActions';\nimport UserActions from 'src/stores/alt/actions/UserActions';\nimport ElementActions from 'src/stores/alt/actions/ElementActions';\nimport ElementStore from 'src/stores/alt/stores/ElementStore';\nimport UserStore from 'src/stores/alt/stores/UserStore';\nimport DetailActions from 'src/stores/alt/actions/DetailActions';\nimport { elementNames } from 'src/apps/generic/Utils';\n\nconst collectionShow = (e) => {\n  UIActions.showElements.defer();\n  UserActions.fetchCurrentUser();\n  UserActions.fetchUserLabels();\n  const { profile } = UserStore.getState();\n  if (!profile) {\n    UserActions.fetchProfile();\n  }\n  const uiState = UIStore.getState();\n  const currentSearchSelection = uiState.currentSearchSelection;\n  const currentSearchByID = uiState.currentSearchByID;\n  const collectionId = e.params['collectionID'];\n  let collectionPromise = null;\n  if (collectionId === 'all') {\n    collectionPromise = CollectionStore.findAllCollection();\n  } else {\n    collectionPromise = CollectionStore.findById(collectionId);\n  }\n\n  collectionPromise.then((result) => {\n    const collection = result && result.collection;\n\n    if (currentSearchSelection) {\n      UIActions.selectCollectionWithoutUpdating(collection);\n      ElementActions.fetchBasedOnSearchSelectionAndCollection({\n        selection: currentSearchSelection,\n        collectionId: collection.id,\n        isSync: !!collection.is_sync_to_me });\n    } else {\n      if (currentSearchByID) {\n        UIActions.clearSearchById();\n      }\n      UIActions.selectCollection(collection);\n    }\n\n    // if (!e.params['sampleID'] && !e.params['reactionID'] &&\n        // !e.params['wellplateID'] && !e.params['screenID']) {\n    UIActions.uncheckAllElements({ type: 'sample', range: 'all' });\n    UIActions.uncheckAllElements({ type: 'reaction', range: 'all' });\n    UIActions.uncheckAllElements({ type: 'wellplate', range: 'all' });\n    UIActions.uncheckAllElements({ type: 'screen', range: 'all' });\n    elementNames(false).then((klassArray) => {\n      klassArray.forEach((klass) => {\n        UIActions.uncheckAllElements({ type: klass, range: 'all' });\n      });\n    });\n    // }\n  });\n};\n\nconst collectionShowCollectionManagement = () => {\n  UIActions.showCollectionManagement();\n};\n\nconst scollectionShow = (e) => {\n  UIActions.showElements();\n  UserActions.fetchCurrentUser();\n  UserActions.fetchUserLabels();\n  const { profile } = UserStore.getState();\n  if (!profile) {\n    UserActions.fetchProfile();\n  }\n  const uiState = UIStore.getState();\n  const currentSearchSelection = uiState.currentSearchSelection;\n  const currentSearchByID = uiState.currentSearchByID;\n  const collectionId = e.params['collectionID'];\n  let collectionPromise = null;\n  collectionPromise = CollectionStore.findBySId(collectionId);\n\n  collectionPromise.then((result) => {\n    const collection = result.sync_collections_user;\n\n    if (currentSearchSelection) {\n      UIActions.selectCollectionWithoutUpdating(collection);\n      ElementActions.fetchBasedOnSearchSelectionAndCollection({\n        selection: currentSearchSelection,\n        collectionId: collection.id,\n        isSync: !!collection.is_sync_to_me });\n    } else {\n      UIActions.selectSyncCollection(collection);\n      if (currentSearchByID) {\n        UIActions.clearSearchById();\n      }\n    }\n\n    // if (!e.params['sampleID'] && !e.params['reactionID'] && !e.params['wellplateID'] && !e.params['screenID']) {\n    UIActions.uncheckAllElements({ type: 'sample', range: 'all' });\n    UIActions.uncheckAllElements({ type: 'reaction', range: 'all' });\n    UIActions.uncheckAllElements({ type: 'wellplate', range: 'all' });\n    UIActions.uncheckAllElements({ type: 'screen', range: 'all' });\n    elementNames(false).then((klassArray) => {\n      klassArray.forEach((klass) => {\n        UIActions.uncheckAllElements({ type: klass, range: 'all' });\n      });\n    });\n\n    // }\n  });\n};\n\nconst reportShowReport = () => {\n  ElementActions.showReportContainer();\n};\n\nconst predictionShowFwdRxn = () => {\n  ElementActions.showPredictionContainer();\n};\n\nconst sampleShowOrNew = (e) => {\n  const { sampleID, collectionID } = e.params;\n  const { selecteds, activeKey } = ElementStore.getState();\n  const index = selecteds.findIndex((el) => el.type === 'sample' && el.id === sampleID);\n\n  if (sampleID === 'new') {\n    ElementActions.generateEmptySample(collectionID);\n  } else if (sampleID === 'copy') {\n    ElementActions.copySampleFromClipboard.defer(collectionID);\n  } else if (index < 0) {\n    ElementActions.fetchSampleById(sampleID);\n  } else if (index !== activeKey) {\n    DetailActions.select(index);\n  }\n  // UIActions.selectTab(1);\n};\n\nconst cellLineShowOrNew = (e) => {\n  if(e.params.new_cellLine||(e.params.new_cellLine===undefined&&e.params.cell_lineID===\"new\")){\n     ElementActions.generateEmptyCellLine(e.params.collectionID,e.params.cell_line_template);\n  }else{\n    if(e.params.cellLineID){\n     e.params.cellLineId=e.params.cellLineID\n    }\n     ElementActions.tryFetchCellLineElById.defer(e.params.cellLineId);\n  }\n}\n\nconst reactionShow = (e) => {\n  const { reactionID, collectionID } = e.params;\n  const { selecteds, activeKey } = ElementStore.getState();\n  const index = selecteds.findIndex((el) => el.type === 'reaction' && el.id === reactionID);\n  // UIActions.selectTab(2);\n  if (reactionID === 'new') {\n    ElementActions.generateEmptyReaction(collectionID);\n  } else if (reactionID === 'copy') {\n    //ElementActions.copyReactionFromClipboard(collectionID);\n  } else if (index < 0) {\n    ElementActions.fetchReactionById(reactionID);\n  } else if (index !== activeKey) {\n    DetailActions.select(index);\n  }\n};\n\nconst reactionShowSample = (e) => {\n  const { reactionID, sampleID } = e.params;\n  ElementActions.editReactionSample(reactionID, sampleID);\n};\n\nconst wellplateShowOrNew = (e) => {\n  const { wellplateID, collectionID } = e.params;\n  const { selecteds, activeKey } = ElementStore.getState();\n  const index = selecteds.findIndex((el) => el.type === 'wellplate' && el.id === wellplateID);\n\n  if (wellplateID === 'new') {\n    ElementActions.generateEmptyWellplate(collectionID);\n  } else if (wellplateID === 'template') {\n    ElementActions.generateWellplateFromClipboard.defer(collectionID);\n  } else if (index < 0) {\n    ElementActions.fetchWellplateById(wellplateID);\n  } else if (index !== activeKey) {\n    DetailActions.select(index);\n  }\n};\n\nconst wellplateShowSample = (e) => {\n  const { wellplateID, sampleID } = e.params;\n  ElementActions.editWellplateSample(wellplateID, sampleID);\n};\n\nconst screenShowOrNew = (e) => {\n  const { screenID, collectionID } = e.params;\n  const { selecteds, activeKey } = ElementStore.getState();\n  const index = selecteds.findIndex((el) => el.type === 'screen' && el.id === screenID);\n\n  if (screenID === 'new') {\n    ElementActions.generateEmptyScreen(collectionID);\n  } else if (screenID === 'template') {\n    ElementActions.generateScreenFromClipboard.defer(collectionID);\n  } else if (index < 0) {\n    ElementActions.fetchScreenById(screenID);\n  } else if (index !== activeKey) {\n    DetailActions.select(index);\n  }\n};\n\nconst devicesAnalysisCreate = (e) => {\n  const { deviceId, analysisType } = e.params;\n  ElementActions.createDeviceAnalysis(deviceId, analysisType);\n};\n\nconst devicesAnalysisShow = (e) => {\n  const { analysisId } = e.params;\n  ElementActions.fetchDeviceAnalysisById(analysisId);\n};\n\nconst deviceShow = (e) => {\n  const { deviceId } = e.params;\n  ElementActions.fetchDeviceById(deviceId);\n};\n\nconst deviceShowDeviceManagement = () => {\n  UIActions.showDeviceManagement();\n};\n\nconst researchPlanShowOrNew = (e) => {\n  const { research_planID, collectionID } = e.params;\n  const { selecteds, activeKey } = ElementStore.getState();\n  const index = selecteds.findIndex(el => el.type === 'research_plan' && el.id === research_planID);\n\n  if (research_planID === 'new') {\n    ElementActions.generateEmptyResearchPlan(collectionID);\n  } else if (research_planID === 'copy') {\n    //\n  } else if (index < 0) {\n    ElementActions.fetchResearchPlanById(research_planID);\n  } else if (index !== activeKey) {\n    DetailActions.select(index);\n  }\n};\n\nconst metadataShowOrNew = (e) => {\n  const { collectionID } = e.params;\n  const { selecteds, activeKey } = ElementStore.getState()\n\n  // check if the metadata detail tab is alredy open\n  const index = selecteds.findIndex(el => el.collection_id == collectionID)\n  if (index < 0) {\n    // not found, fetch the metadata from the server\n    ElementActions.fetchMetadata(collectionID);\n  } else if (index != activeKey) {\n    // not active, activate tab\n    DetailActions.select(index)\n  }\n};\n\nconst genericElShowOrNew = (e, type) => {\n  const { collectionID } = e.params;\n  let itype = '';\n  if (typeof type === 'undefined' || typeof type === 'object' || type == null || type == '') {\n    const keystr = e.params && Object.keys(e.params).filter(k => k != 'collectionID' && k.includes('ID'));\n    itype = keystr && keystr[0] && keystr[0].slice(0,-2);\n  } else {\n    itype = type;\n  }\n\n  const genericElID = e.params[`${itype}ID`];\n  if (genericElID === 'new') {\n    ElementActions.generateEmptyGenericEl(collectionID, itype);\n  } else if (genericElID === 'copy') {\n    //\n  } else {\n\n    ElementActions.fetchGenericElById(genericElID, itype);\n  }\n};\n\nconst elementShowOrNew = (e) => {\n  const type = e.type;\n  switch(type) {\n    case 'sample':\n      sampleShowOrNew(e);\n      break;\n    case 'reaction':\n      reactionShow(e);\n      break;\n    case 'wellplate':\n      wellplateShowOrNew(e);\n      break;\n    case 'screen':\n      screenShowOrNew(e);\n      break;\n    case 'research_plan':\n      researchPlanShowOrNew(e);\n      break;\n    case 'metadata':\n      metadataShowOrNew(e);\n      break;\n    case 'cell_line':\n      cellLineShowOrNew(e);\n      break;\n    default:\n      if (e && e.klassType == 'GenericEl') {\n        genericElShowOrNew(e, type);\n        break;\n      }\n      return null;\n  }\n  return null;\n};\n\nexport {\n  collectionShow,\n  scollectionShow,\n  collectionShowCollectionManagement,\n  reportShowReport,\n  sampleShowOrNew,\n  reactionShow,\n  reactionShowSample,\n  wellplateShowOrNew,\n  wellplateShowSample,\n  screenShowOrNew,\n  devicesAnalysisCreate,\n  devicesAnalysisShow,\n  deviceShow,\n  deviceShowDeviceManagement,\n  researchPlanShowOrNew,\n  metadataShowOrNew,\n  elementShowOrNew,\n  predictionShowFwdRxn,\n  genericElShowOrNew,\n  cellLineShowOrNew\n};\n","// Format data for react-select component when using with users data as returned by the API\n// input: { users: [{ id: 1, name: 'John Doe', initials: 'JD', type: 'Person' }, ...]}\n// output: { options: [{ value: 1, label: 'John Doe (JD - Person)' }, ...]}\n\nconst buildLabel = (user, withType = false) => (\n  withType ? `${user.name} (${user.initials} - ${user.type})` : `${user.name} (${user.initials})`\n);\n\nconst filterCurrentUser = (data, currentUserId = null) => {\n  const { users } = data;\n  if (!currentUserId) { return users || []; }\n  return (users || []).filter((user) => user.id !== currentUserId);\n};\n\nconst selectUserOptionFormater = ({ data = {}, withType = false, currentUserId = null }) => {\n  const users = filterCurrentUser(data, currentUserId);\n  const usersEntries = (users).map((user) => ({\n    id: user.id,\n    value: user.id,\n    name: user.name,\n    initials: user.initials,\n    label: buildLabel(user, withType),\n  }));\n  return { options: usersEntries };\n};\n\nconst selectedUserFormater = (users) => {\n  if (users.length < 1) { return { options: [] }; }\n\n  const usersEntries = (users).map((user) => ({\n    id: user.id,\n    value: user.id,\n    initials: user.initials,\n    name: user.name,\n    label: buildLabel(user, false),\n  }));\n  return { options: usersEntries };\n}\n\nconst filterCurrentDevice = (data, currentDeviceId = null) => {\n  const { devices } = data;\n  if (!currentDeviceId) { return devices || []; }\n  return (devices || []).filter((device) => device.id !== currentDeviceId);\n};\n\nconst selectDeviceOptionFormater = ({ data = {}, withType = false, currentDeviceId = null }) => {\n  const devices = filterCurrentDevice(data, currentDeviceId);\n  const deviceEntries = (devices).map((device) => ({\n    value: device.id,\n    name: device.name,\n    label: `${device.name} (${device.initials})`,\n  }));\n  return { options: deviceEntries };\n};\n\nexport {\n  selectUserOptionFormater, selectDeviceOptionFormater, selectedUserFormater\n};\n","import moment from 'moment';\n\n// see config/locale/en.yml for the format\nconst elnTimestampFormat = 'DD.MM.YYYY, HH:mm:ss Z';\n\nconst regExpTimestamp = /^\\d{2}\\.\\d{2}\\.\\d{4}, \\d{2}:\\d{2}:\\d{2}/;\n\nconst parseDate = (dateString) => {\n  if (regExpTimestamp.test(dateString)) {\n    const date = moment(dateString, elnTimestampFormat);\n    if (date.isValid()) {\n      return date;\n    }\n  }\n  // assume ISO 8601 format\n  return moment(dateString);\n};\n\nconst formatDate = (dateString) => {\n  const date = parseDate(dateString);\n\n  const localDate = date.local();\n\n  const formattedDate = localDate.format('llll');\n\n  return formattedDate;\n};\n\n// return `Created at: ${formattedCreatedAt} | Updated at: ${formattedUpdatedAt}`;\nconst formatTimeStampsOfElement = (element) => {\n  const { created_at, updated_at } = element;\n  const formattedCreatedAt = formatDate(created_at);\n  const formattedUpdatedAt = formatDate(updated_at);\n  return `Created ${formattedCreatedAt} - Updated ${formattedUpdatedAt}`;\n};\n\n// convert date to unix timestamp\n// @param {string} dateString - date string\n// @return {number, null} - unix timestamp\n// false if dateString is not a valid date\nconst dateToUnixTimestamp = (dateString) => {\n  const date = new Date(dateString);\n  if (!isNaN(date.getTime())) {\n    return Math.floor(date.getTime() / 1000);\n  }\n  return null;\n};\n\nexport {\n  elnTimestampFormat,\n  parseDate,\n  formatDate,\n  formatTimeStampsOfElement,\n  dateToUnixTimestamp,\n};\n","var map = {\n\t\"./af\": 8311,\n\t\"./af.js\": 8311,\n\t\"./ar\": 89539,\n\t\"./ar-dz\": 71494,\n\t\"./ar-dz.js\": 71494,\n\t\"./ar-kw\": 15062,\n\t\"./ar-kw.js\": 15062,\n\t\"./ar-ly\": 61771,\n\t\"./ar-ly.js\": 61771,\n\t\"./ar-ma\": 64354,\n\t\"./ar-ma.js\": 64354,\n\t\"./ar-sa\": 7304,\n\t\"./ar-sa.js\": 7304,\n\t\"./ar-tn\": 25978,\n\t\"./ar-tn.js\": 25978,\n\t\"./ar.js\": 89539,\n\t\"./az\": 66091,\n\t\"./az.js\": 66091,\n\t\"./be\": 37965,\n\t\"./be.js\": 37965,\n\t\"./bg\": 95755,\n\t\"./bg.js\": 95755,\n\t\"./bm\": 3941,\n\t\"./bm.js\": 3941,\n\t\"./bn\": 96988,\n\t\"./bn-bd\": 16479,\n\t\"./bn-bd.js\": 16479,\n\t\"./bn.js\": 96988,\n\t\"./bo\": 78627,\n\t\"./bo.js\": 78627,\n\t\"./br\": 11176,\n\t\"./br.js\": 11176,\n\t\"./bs\": 22495,\n\t\"./bs.js\": 22495,\n\t\"./ca\": 41576,\n\t\"./ca.js\": 41576,\n\t\"./cs\": 82722,\n\t\"./cs.js\": 82722,\n\t\"./cv\": 68365,\n\t\"./cv.js\": 68365,\n\t\"./cy\": 68016,\n\t\"./cy.js\": 68016,\n\t\"./da\": 31595,\n\t\"./da.js\": 31595,\n\t\"./de\": 34063,\n\t\"./de-at\": 60973,\n\t\"./de-at.js\": 60973,\n\t\"./de-ch\": 57939,\n\t\"./de-ch.js\": 57939,\n\t\"./de.js\": 34063,\n\t\"./dv\": 99058,\n\t\"./dv.js\": 99058,\n\t\"./el\": 72717,\n\t\"./el.js\": 72717,\n\t\"./en-au\": 50482,\n\t\"./en-au.js\": 50482,\n\t\"./en-ca\": 55520,\n\t\"./en-ca.js\": 55520,\n\t\"./en-gb\": 59869,\n\t\"./en-gb.js\": 59869,\n\t\"./en-ie\": 81802,\n\t\"./en-ie.js\": 81802,\n\t\"./en-il\": 33601,\n\t\"./en-il.js\": 33601,\n\t\"./en-in\": 49471,\n\t\"./en-in.js\": 49471,\n\t\"./en-nz\": 53476,\n\t\"./en-nz.js\": 53476,\n\t\"./en-sg\": 76454,\n\t\"./en-sg.js\": 76454,\n\t\"./eo\": 90660,\n\t\"./eo.js\": 90660,\n\t\"./es\": 7712,\n\t\"./es-do\": 49124,\n\t\"./es-do.js\": 49124,\n\t\"./es-mx\": 92372,\n\t\"./es-mx.js\": 92372,\n\t\"./es-us\": 88781,\n\t\"./es-us.js\": 88781,\n\t\"./es.js\": 7712,\n\t\"./et\": 8213,\n\t\"./et.js\": 8213,\n\t\"./eu\": 89974,\n\t\"./eu.js\": 89974,\n\t\"./fa\": 54965,\n\t\"./fa.js\": 54965,\n\t\"./fi\": 89245,\n\t\"./fi.js\": 89245,\n\t\"./fil\": 18709,\n\t\"./fil.js\": 18709,\n\t\"./fo\": 27295,\n\t\"./fo.js\": 27295,\n\t\"./fr\": 21020,\n\t\"./fr-ca\": 66701,\n\t\"./fr-ca.js\": 66701,\n\t\"./fr-ch\": 1958,\n\t\"./fr-ch.js\": 1958,\n\t\"./fr.js\": 21020,\n\t\"./fy\": 19469,\n\t\"./fy.js\": 19469,\n\t\"./ga\": 16508,\n\t\"./ga.js\": 16508,\n\t\"./gd\": 98183,\n\t\"./gd.js\": 98183,\n\t\"./gl\": 85167,\n\t\"./gl.js\": 85167,\n\t\"./gom-deva\": 78378,\n\t\"./gom-deva.js\": 78378,\n\t\"./gom-latn\": 16629,\n\t\"./gom-latn.js\": 16629,\n\t\"./gu\": 84672,\n\t\"./gu.js\": 84672,\n\t\"./he\": 50715,\n\t\"./he.js\": 50715,\n\t\"./hi\": 21143,\n\t\"./hi.js\": 21143,\n\t\"./hr\": 92962,\n\t\"./hr.js\": 92962,\n\t\"./hu\": 78923,\n\t\"./hu.js\": 78923,\n\t\"./hy-am\": 30686,\n\t\"./hy-am.js\": 30686,\n\t\"./id\": 33041,\n\t\"./id.js\": 33041,\n\t\"./is\": 40276,\n\t\"./is.js\": 40276,\n\t\"./it\": 54145,\n\t\"./it-ch\": 58429,\n\t\"./it-ch.js\": 58429,\n\t\"./it.js\": 54145,\n\t\"./ja\": 21961,\n\t\"./ja.js\": 21961,\n\t\"./jv\": 51276,\n\t\"./jv.js\": 51276,\n\t\"./ka\": 39456,\n\t\"./ka.js\": 39456,\n\t\"./kk\": 11890,\n\t\"./kk.js\": 11890,\n\t\"./km\": 10804,\n\t\"./km.js\": 10804,\n\t\"./kn\": 22653,\n\t\"./kn.js\": 22653,\n\t\"./ko\": 12734,\n\t\"./ko.js\": 12734,\n\t\"./ku\": 12412,\n\t\"./ku.js\": 12412,\n\t\"./ky\": 12536,\n\t\"./ky.js\": 12536,\n\t\"./lb\": 20806,\n\t\"./lb.js\": 20806,\n\t\"./lo\": 84145,\n\t\"./lo.js\": 84145,\n\t\"./lt\": 20544,\n\t\"./lt.js\": 20544,\n\t\"./lv\": 2410,\n\t\"./lv.js\": 2410,\n\t\"./me\": 52510,\n\t\"./me.js\": 52510,\n\t\"./mi\": 49162,\n\t\"./mi.js\": 49162,\n\t\"./mk\": 50944,\n\t\"./mk.js\": 50944,\n\t\"./ml\": 67797,\n\t\"./ml.js\": 67797,\n\t\"./mn\": 52851,\n\t\"./mn.js\": 52851,\n\t\"./mr\": 86671,\n\t\"./mr.js\": 86671,\n\t\"./ms\": 39864,\n\t\"./ms-my\": 71731,\n\t\"./ms-my.js\": 71731,\n\t\"./ms.js\": 39864,\n\t\"./mt\": 32301,\n\t\"./mt.js\": 32301,\n\t\"./my\": 35098,\n\t\"./my.js\": 35098,\n\t\"./nb\": 79908,\n\t\"./nb.js\": 79908,\n\t\"./ne\": 26929,\n\t\"./ne.js\": 26929,\n\t\"./nl\": 7290,\n\t\"./nl-be\": 99038,\n\t\"./nl-be.js\": 99038,\n\t\"./nl.js\": 7290,\n\t\"./nn\": 70512,\n\t\"./nn.js\": 70512,\n\t\"./oc-lnc\": 45468,\n\t\"./oc-lnc.js\": 45468,\n\t\"./pa-in\": 1683,\n\t\"./pa-in.js\": 1683,\n\t\"./pl\": 89876,\n\t\"./pl.js\": 89876,\n\t\"./pt\": 7836,\n\t\"./pt-br\": 11245,\n\t\"./pt-br.js\": 11245,\n\t\"./pt.js\": 7836,\n\t\"./ro\": 48275,\n\t\"./ro.js\": 48275,\n\t\"./ru\": 27725,\n\t\"./ru.js\": 27725,\n\t\"./sd\": 40427,\n\t\"./sd.js\": 40427,\n\t\"./se\": 75332,\n\t\"./se.js\": 75332,\n\t\"./si\": 65936,\n\t\"./si.js\": 65936,\n\t\"./sk\": 86362,\n\t\"./sk.js\": 86362,\n\t\"./sl\": 63875,\n\t\"./sl.js\": 63875,\n\t\"./sq\": 73128,\n\t\"./sq.js\": 73128,\n\t\"./sr\": 91873,\n\t\"./sr-cyrl\": 42336,\n\t\"./sr-cyrl.js\": 42336,\n\t\"./sr.js\": 91873,\n\t\"./ss\": 946,\n\t\"./ss.js\": 946,\n\t\"./sv\": 92477,\n\t\"./sv.js\": 92477,\n\t\"./sw\": 8734,\n\t\"./sw.js\": 8734,\n\t\"./ta\": 58971,\n\t\"./ta.js\": 58971,\n\t\"./te\": 38143,\n\t\"./te.js\": 38143,\n\t\"./tet\": 77251,\n\t\"./tet.js\": 77251,\n\t\"./tg\": 22273,\n\t\"./tg.js\": 22273,\n\t\"./th\": 24428,\n\t\"./th.js\": 24428,\n\t\"./tk\": 82709,\n\t\"./tk.js\": 82709,\n\t\"./tl-ph\": 27085,\n\t\"./tl-ph.js\": 27085,\n\t\"./tlh\": 67418,\n\t\"./tlh.js\": 67418,\n\t\"./tr\": 85966,\n\t\"./tr.js\": 85966,\n\t\"./tzl\": 32160,\n\t\"./tzl.js\": 32160,\n\t\"./tzm\": 30935,\n\t\"./tzm-latn\": 88289,\n\t\"./tzm-latn.js\": 88289,\n\t\"./tzm.js\": 30935,\n\t\"./ug-cn\": 24256,\n\t\"./ug-cn.js\": 24256,\n\t\"./uk\": 15912,\n\t\"./uk.js\": 15912,\n\t\"./ur\": 49223,\n\t\"./ur.js\": 49223,\n\t\"./uz\": 70895,\n\t\"./uz-latn\": 40249,\n\t\"./uz-latn.js\": 40249,\n\t\"./uz.js\": 70895,\n\t\"./vi\": 14893,\n\t\"./vi.js\": 14893,\n\t\"./x-pseudo\": 39997,\n\t\"./x-pseudo.js\": 39997,\n\t\"./yo\": 59200,\n\t\"./yo.js\": 59200,\n\t\"./zh-cn\": 29962,\n\t\"./zh-cn.js\": 29962,\n\t\"./zh-hk\": 16294,\n\t\"./zh-hk.js\": 16294,\n\t\"./zh-mo\": 84539,\n\t\"./zh-mo.js\": 84539,\n\t\"./zh-tw\": 66606,\n\t\"./zh-tw.js\": 66606\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 23888;"],"names":["Rails","require","NavHead","Navbar","Brand","NavDropdown","title","className","id","MenuItem","eventKey","href","target","divider","AdminNavigation","props","state","currentUser","toggleTree","bind","onChange","componentDidMount","UserStore","listen","this","UserActions","fetchCurrentUser","componentWillUnmount","unlisten","setState","navHeader","Header","Text","style","cursor","fontStyle","onClick","render","fluid","Nav","navbar","UserAuth","clear","NavNewSession","authenticityToken","DocumentHelper","React","AdminFetcher","fetchLocalCollector","fetch","credentials","then","response","json","catch","errorMessage","console","log","checkDiskSpace","resetUserPassword","params","user_id","otherParams","method","headers","Accept","body","JSON","stringify","createUserAccount","updateUser","deleteUser","restoreAccount","fetchUsers","fetchUsersByNameType","name","type","limit","URLSearchParams","updateAccount","olsTermDisableEnable","status","importOlsTerms","file","data","FormData","append","fetchGroupsDevices","updateGroup","deleteGroupRelation","createGroupDevice","fetchMatrices","updateMatrice","fetchJobs","error","restartJob","AdminDashboard","diskAvailable","diskPercentUsed","showDiskInfo","handleDiskspace","result","mb_available","percent_used","renderDiskInfo","color","Panel","InputGroup","Addon","FormControl","defaultValue","readOnly","GenericAdminModal","handleAuthAdmin","renderButton","_params","_user","user","map","p","i","Button","key","ALL_TYPES","bsSize","bsStyle","toLowerCase","renderDescription","value","fnCb","auth_generic_admin","updatedUser","fnShowModal","generic_admin","elements","segments","datasets","Modal","show","onHide","closeButton","Title","Body","ButtonToolbar","Component","MessageAlert","message","length","Alert","A","onDismiss","propTypes","PropTypes","isRequired","defaultProps","propType","loadUserByName","input","res","selectUserOptionFormater","Promise","resolve","options","handleResetPassword","random","handleShowAlert","rp","pwd","email","validateEmail","mail","test","editTooltip","Tooltip","resetPasswordTooltip","resetPasswordInstructionsTooltip","confirmUserTooltip","disableTooltip","enableTooltip","converterEnableTooltip","converterDisableTooltip","templateModeratorEnableTooltip","templateModeratorDisableTooltip","moleculeModeratorEnableTooltip","moleculeModeratorDisableTooltip","accountActiveTooltip","accountInActiveTooltip","UserManagement","handleOnDropUserFile","includes","processingSummaryUserFile","newUsers","row","handleOnErrorUserFile","err","handleOnRemoveUserFile","handleRestoreAccount","deletedUsers","trim","nameAbbreviation","messageRestoreAccountModal","showError","name_abbreviation","users","alertMessage","showSuccess","setTimeout","handleRestoreAccountClose","updateFilter","prevState","filterCriteria","selectedUsers","showMsgModal","showNewUserModal","showEditUserModal","showGenericAdminModal","showRestoreAccountModal","messageNewUserModal","messageEditUserModal","handleFetchUsers","handleMsgShow","handleMsgClose","handleNewUserShow","handleNewUserClose","handleSelectUser","messageSend","handleCreateNewUser","handleEditUserShow","handleEditUserClose","handleUpdateUser","handleRestoreAccountShow","handleGenericAdminModal","handleGenericAdminModalCb","handleDismissAlert","tableBodyRef","current","availableSpace","window","innerHeight","getBoundingClientRect","top","maxHeight","u","handleEnableDisableAccount","lockedAt","enable","handleConverterAdmin","isConverterAdmin","updateProfile","converter_admin","handleTemplatesModerator","isTemplatesModerator","is_templates_moderator","handleMoleculesModerator","isMoleculesEditor","molecule_editor","handleActiveInActiveAccount","isActive","account_active","val","handleConfirmUserAccount","confirm_user","handleReConfirmUserAccount","reconfirm_user","validateUserInput","password","first_name","firstname","last_name","lastname","nameAbbr","passwordConfirm","handleCreateNewUsersFromFile","validUserFile","promisedNewUsers","createNewUserFromFile","allSettled","userResults","showProcessingSummaryUserFile","reason","u_email","u_firstname","u_lastname","u_abbr","u_type","index","findIndex","handleDeleteUser","splice","initials","updateDropdownFilter","field","newUser","nameabbr","userResult","Array","isArray","fileHeader","meta","fields","validHeader","every","parsingErrorMessage","forEach","parsingErrors","errors","validTypes","invalidTypeMessage","userType","sortedUserEmails","sort","duplicateUserEmails","Set","add","size","from","values","summary","myMessage","userIds","g","push","MessagesFetcher","channelIndividualUsers","channel_id","content","user_ids","createMessage","renderMessageModal","overflow","Form","FormGroup","controlId","ControlLabel","componentClass","placeholder","rows","inputRef","ref","multi","isLoading","backspaceRemoves","valueKey","labelKey","matchProp","promptTextCreator","loadOptions","renderNewUserModal","Tabs","Tab","horizontal","Col","sm","maxLength","smOffset","Table","striped","bordered","hover","onDrop","onError","config","header","skipEmptyLines","addRemoveButton","onRemoveFile","whiteSpace","overflowY","Footer","renderEditUserModal","Container","defaultActiveKey","NavItem","Content","animation","Pane","disabled","bsClass","renderRestoreAccountModal","onFocus","validationState","item","deleted_at","renderGenericAdminModal","filteredUsers","filter","Object","keys","String","tcolumn","position","zIndex","backgroundColor","height","verticalAlign","width","display","justifyContent","e","tbody","idx","userId","OverlayTrigger","placement","overlay","locked_at","confirmed_at","unconfirmed_email","renderReConfirmButton","current_sign_in_at","DeleteGroupDeviceButton","onChangeGroupData","groups","onChangeDeviceData","devices","currentState","confirmDelete","rootType","actionType","groupRec","userRec","isRoot","rmUsers","action","destroy_obj","rm_users","msg","popover","Popover","handleClick","ButtonGroup","root","trigger","AdminGroupElement","showUsers","showDevices","toggleUsers","toggleDevices","setGroupAdmin","setAdmin","admin_id","set_admin","admins","usrIdx","o","renderGroupButtons","group","onShowModal","renderGroupUserButtons","isAdmin","a","adminTooltip","groupElement","adminIcon","fontWeight","x","join","colSpan","Heading","GroupsDevices","showModal","showCreateModal","loadUserByNameType","handleShowModal","handleClose","handleShowCreateModal","handleCloseGroup","handleGroupChange","list","fetchDevices","AdminDeviceFetcher","fetchDevicesByName","selectDeviceOptionFormater","withType","createGroup","param","firstInput","lastInput","abbrInput","emailInput","alert","addToRoot","add_users","renderGroups","responsive","condensed","renderCreateModal","m","renderModal","MessagePublish","channels","selectedChannel","toggleChannelList","handleChannelChange","fetchChannels","c","subject","label","b","autoFocus","document","addEventListener","domElement","getElementById","ReactDOM","MsgPub","OlsTerms","selectName","expandedKeys","autoExpandParent","checkStrictly","checkedKeys","orgCheckedKeys","enableIds","disableIds","initialOls","onExpand","onCheck","handleSaveBtn","handleSelectName","handleAssociateBtn","handleFileDrop","attach","handleAttachmentRemove","dropzoneOrfilePreview","border","textAlign","paddingTop","addToChecked","cks","parent","is_enabled","children","node","UsersFetcher","fetchOls","ols_terms","checkedObj","checked","difference","olsName","owl_name","Row","maxWidth","margin","md","DropdownButton","onSelect","checkable","treeData","jsonTooltip","Notification","NotificationActions","level","lvl","dismissible","uid","uuid","MatrixManagement","matrices","matrice","showEditModal","showJsonModal","showJsonBtn","includeUsers","excludeUsers","edit","editJson","handleChange","handleIncludeUser","handleExcludeUser","handleSave","handleJsonSave","handleJsonClose","onChangeJson","configs","jsObject","enabled","m_label","include_ids","exclude_ids","renderList","include_users","exclude_users","renderEditModal","defaultIncludeUsers","defaultExcludeUsers","Checkbox","inline","renderJsonModal","RemoveRowBtn","removeRow","active","AddRowBtn","addRow","TextTemplate","handleInputChange","selectedTemplate","text","icon","reactQuillRef","onSelectionChanged","onGridReady","onCellValueChanged","onChangeText","onChangeIcon","saveTemplate","columnDefs","editable","minWidth","headerName","colId","headerComponent","headerComponentParams","cellRenderer","cellRendererParams","UNSAFE_componentWillReceiveProps","newProps","fetchedTemplates","selectedRows","gridApi","getSelectedRows","selectedNameIdx","t","newSelectedTemplate","cloneDeep","componentDidUpdate","sizeColumnsToFit","api","templateName","fetchTemplate","oldValue","newValue","updateTemplate","delta","getContents","deltaLength","removeTrailingNewline","Delta","retain","delete","compose","ops","removeTemplate","addTemplate","predefinedTemplateNames","suppressHorizontalScroll","defaultColDef","resizable","rowSelection","rowData","marginLeft","TextTemplateIcon","template","QuillEditor","event","marginTop","TextTemplateContainer","TextTemplatesFetcher","fetchPredefinedTemplateNames","templateNames","n","startEditingCell","rowIndex","colKey","fetchPredefinedTemplateByNames","concat","deletePredefinedTemplateByName","updatePredefinedTemplates","newTemplates","tipRestartJob","DelayedJobs","jobs","handleFetchJob","handleRestartFetch","renderShowBtn","job","queue","handler","split","run_at","failed_at","attempts","priority","last_error","ChemSpectraFetcher","fetchSpectraLayouts","ok","updateDataTypes","newDataTypes","requestData","datatypes","fetchUpdatedSpectraLayouts","SPECTRA_DATA_TYPE","Error","entries","ChemSpectraLayouts","layouts","newDataType","layout","dataType","defaultLayouts","showNewTypeLayoutModal","handleAddDataType","handleDeleteDataType","handleShowNewTypeLayoutModal","handleCloseNewTypeLayoutModal","getLayoutOptionsAndMapping","handleSelectLayout","selectedOption","existingLayout","find","trimEnd","transformedData","reduce","acc","dataTypeToDelete","entry","current_data_types","default_data_types","layoutsMapping","layoutsOptions","variant","some","dataTypes","observer","devicesStore","useContext","StoreContext","device","verificationOptions","verificationStatusValue","f","verification_status","changeDevice","valid_name","valid_name_abbreviation","serial_number","isClearable","visibility","toggleLoading","setIsLoading","handleUser","isMulti","is_loading","loadingMessage","selectedUserFormater","people","onMenuOpen","onMenuClose","useState","localCollectorValues","setLocalCollectorValues","clipboard","Clipboard","useEffect","listLocalCollector","destroy","deviceModalVisible","methodOptions","authenticationOptions","methodValue","authenticationValue","datacollector_method","datacollector_authentication","methodValueCheck","readonlyKeyName","userValue","datacollector_user","hostValue","datacollector_host","keyFileValue","datacollector_key_name","numberOfFilesValue","datacollector_number_of_files","dir","datacollector_dir","userLevelSelected","datacollector_user_level_selected","dirValue","tipCopyClipboard","ListLocalCollector","path","valid_datacollector_method","valid_datacollector_user","endsWith","valid_datacollector_host","valid_datacollector_key_name","valid_datacollector_dir","min","startsWith","setChangeNovncPassword","RenderStoredTarget","novnc_target","novnc_token","RenderCurrentTarget","passwordValue","change_novnc_password","novnc_password","novnc_password_decrypted","valid_novnc_target","deviceMetadataStore","deviceMetadata","device_metadata","device_id","changeDeviceMetadata","dataCiteStateOptions","data_cite_state","dataCiteStateValue","updateDeviceMetadataDate","changeDeviceMetadataDate","doi","changeErrorMessage","error_message","updateDeviceMetadata","syncDeviceMetadataFromDataCite","url","landing_page","publication_year","description","dates","dateForms","dateItem","date","dateType","currentDates","removeDeviceMetadataDate","deviceMetaDataDates","newDates","data_cite_version","data_cite_updated_at","formatDate","syncDeviceMetadataToDataCite","disableTab","create_or_update","successMessage","success_message","withAlertClass","buttonsWithAlertClass","minimizedClass","modalMinimized","deviceParams","datacollectorFields","collectUserOrGroupIds","prepareDeviceParams","handleValidationState","errorMessages","nameValue","nameAbbreviationValue","keyNameValue","active_tab_key","novncTarget","saveDevice","removeErrors","updateDevice","createDevice","saveDeviceMetadata","handleCancel","hideDeviceModal","clearDevice","setActiveTabKey","clearDeviceMetadata","changeSuccessMessage","handle","backdrop","dialogas","toggleModalMinimized","activeKey","load","testSFTPButton","tipTestConnect","setDeviceTestingId","testSFTP","device_testing_id","clearDatacollectorSettingsButton","tooltip","clearPopover","clearDataCollector","clearDatacollector","clearNovncSettingsButton","clearNovncSettings","deleteButton","object","deletePopover","deleteDevice","deleteDeviceRelation","listActionButtons","setCreateOrUpdate","setDevice","showDeviceModal","showEditDeviceModal","deviceId","classList","toggle","datacollectorText","novncText","token","showBasicConfig","listUsersAndGroups","editTip","newTip","deleteTip","ThirdPartyApp","showMsgModalEdit","showMsgModalDelete","messageNewThirdPartyAppModal","thirdPartyApps","currentName","currentIP","currentFileTypes","currentID","closeNewThirdPartyAppModal","closeEditThirdPartyAppModal","closeDeleteThirdPartyAppModal","ThirdPartyAppFetcher","fetchThirdPartyApps","newApp","fileTypes","createOrUpdateThirdPartyApp","deleteThirdPartyApp","showNewThirdPartyAppModal","showEditThirdPartyAppModal","app","tpa","showDeleteThirdPartyAppModal","checkInput","ip","appId","slice","renderDeleteThirdPartyAppModal","renderEditThirdPartyAppModal","nameRef","urlRef","fileTypesRef","newState","AdminHome","showTree","pageIndex","contentClassName","handleSelect","mainContent","renderDashboard","renderUserManagement","renderMessagePublish","renderGroupMgnt","renderOlsTerms","renderContent","renderTextTemplates","renderDevices","renderTemplateManagement","renderDelayedJobs","renderChemSpectraLayouts","renderThirdPartyApp","tree","stacked","component","TemplateManagement","Grid","Notifications","DndProvider","backend","HTML5Backend","toUpperCase","csElement","editorOnly","FocusNovnc","handleFocus","handleBlur","handleCursor","handleForceScreenResizing","connected","isNotFocused","forceCursor","isForcedScreenResizing","focusedColor","normalColor","BlurBtn","FocusBtn","ScreenResizingBtn","marginRight","UsersConnected","watching","using","padding","Navigation","toggleDeviceList","modalProps","ConnectedBtn","float","fontSize","DisconnectedBtn","CnC","selected","showDeviceList","rfb","autoBlur","autoDisconnect","connections","UserStoreChange","connect","disconnected","handleScreenSizeChanging","handleMouseEnter","handleMouseLeave","clearTimers","fetchConnections","DeviceStore","DeviceActions","fetchNoVNCDevices","shouldComponentUpdate","nextState","disconnect","removeEventListener","UserStoreState","clearTimeout","tempRFB","viewOnly","focus","scaleViewport","disconnectTime","blurTime","canvas","RFB","repeaterID","shared","reconnect","show_dot","focusOnClick","setInterval","uniq","line","conn","fromEntries","k","clearInterval","indicatorClassName","mainContentClassName","deviceClick","dev","selectedId","sortedDevices","role","tabIndex","onMouseEnter","onMouseLeave","ConverterFetcher","deleteProfile","profile","fetchProfiles","fetchOptions","fetchTables","contentType","createProfile","requestOptions","info","ConverterAdmin","client","selectedFile","profiles","createdModal","deleteModal","showCreateView","showUpdateView","showImportView","showCreatedModal","hideCreatedModal","showDeleteModal","hideDeleteModal","storeProfile","downloadProfile","updateFile","uploadFile","importFile","dispatchView","all","ConverterApi","GenericDSsFetcher","listDatasetKlass","responses","klass","kl","pr","properties_release","ols","ols_term_id","identifiers","identifier","createElement","encodeURIComponent","download","appendChild","click","removeChild","files","loaded","tables","parse","reader","FileReader","readAsText","onload","fileProfile","onFileChangeHandler","onSubmitFileHandler","FN_ID","GenericDatasetsAdmin","tab","modal","revisions","repoData","handleShowState","closeModal","handleActivateKlass","handleSubmit","delRevision","fetchRevisions","handleCreateRepo","handleShowRepo","fetchElements","getShowState","att","act","is_active","deActivateKlass","notification","cb","_element","element","fetchKlassRevisions","curr","assign","properties_template","deleteKlassRevision","klass_id","LoadingActions","start","fetchRepo","stop","createRepo","_release","release","submit","update","Constants","GENERIC_TYPES","DATASET","isSuccess","renderGrid","els","orderBy","Designer","fnCopy","fnCreate","fnSubmit","fnActive","fnDerive","fnUpdate","preview","fnDelRevisions","fnRevisions","genericType","gridData","userName","fnModalClose","fnModalOpen","klasses","validateKlass","validateInput","klass_prefix","icon_name","GenericElementsAdmin","handleCreateKlass","handleUpdateKlass","handleDeleteKlass","handleUploadKlass","handleDownloadKlass","GenericElsFetcher","_response","notify","is_generic","el","createElementKlass","finally","inputs","updateElementKlass","confirm","deleteKlass","GenericKlassFetcher","downloadKlass","uploadKlass","fetchElementKlasses","ELEMENT","fnDelete","fnUpload","fnDownload","klass_element","GenericSegmentsAdmin","propTabKey","fetchData","GenericSgsFetcher","listSegmentKlass","segmentResult","klassResult","place","createKlass","updateSegmentKlass","SEGMENT","contentComponents","GenericElements","GenericSegments","GenericDatasets","FunctionLocation","createMenu","menu","GenericMenu","staticTop","Toggle","Collapse","pullRight","Unauthorized","SyncBtn","delayShow","RepoNewModal","fnClose","loadEls","cache","autoDismiss","GenericDSMisType","getState","MatrixCheck","matrix","renderFlowModal","generic","isToggle","shortLabel","short_label","segmentKlasses","s","segment_klass_id","properties","UIActions","rerenderGenericWorkflow","elementNames","generics","elnElements","_action","routes","Aviator","navigate","PublicActions","openRepositoryPage","setSearchParams","advType","advValue","page","searchOptions","getReactions","defer","RepoNavListTypes","REACTION","getMolecules","listType","MOLECULE_ARCHIVE","articles","displayArticle","editArticle","editHowTo","displayDataset","datasetId","displayMolecule","moleculeId","tag","suffix","displayReaction","reactionId","displayCollection","collectionId","PublicFetcher","queryPid","query","uri","replace","version","splitIndex","indexOf","inchikey","substring","queryInchikey","ReviewActions","displayReviewReaction","displayReviewSample","sampleId","EmbargoActions","displayReviewEmbargo","elementType","elementId","howtos","displayHowTo","alt","src","location","match","aviItem","listSharedCollections","onUIChange","UIStore","fetchUserLabels","fetchOmniauthProviders","omniauthProviders","modalParams","updateModalProps","userBar","EmbargoStore","selectEmbargoId","bundles","selectType","selectState","searchType","searchValue","review_info","bindListeners","handleEmbargoMove","moveEmbargo","handleEmbargoAssign","assignEmbargo","handleEmbargoRelease","releaseEmbargo","deleteEmbargo","handleFetchBundles","fetchEmbargoBundle","handleDisplayEmbargoElement","handleGetEmbargoElements","getEmbargoElements","handleGetEmbargoElement","getEmbargoElement","close","deleteEl","currentElement","publication","review_level","sample","selectEmbargo","guestPage","queryId","review","silent","results","getEmbargoBundle","getElements","perPage","col_id","is_new_embargo","new_embargo","handleRefreshEmbargoBundles","cols","repository","current_user","col","embargo_id","embargo","RepoEmbargoDetails","onStoreChange","switchTypeRender","RepoReactionDetails","reaction","canComment","showComment","btnAction","isReview","RepoSampleDetails","Doi","navigator","writeText","MetadataModal","metadata","onCloseFn","contentUrl","dialogClassName","Label","fontFamily","Utils","contents","InfoModal","taggable_data","affiliationMap","AffiliationMap","affiliation_ids","col_doi","la","isPublished","author_ids","element_id","contributor","contributors","creators","affiliations","edois","dois","edoi","element_type","ElementDoi","element_dois","EmbargoCommentsModal","onSave","comment","onSaveFn","history","historyTbl","his","timestamp","username","summaryInput","renderOverview","states","flexDirection","StateLabel","alignItems","Reaction","Sample","renderRecord","rec","recId","taggableData","reviewed","accepted","pending","viewDetailBtn","is_reviewer","is_submitter","submitters","RepoConst","U_TYPE","ANONYMOUS","viewComment","orcid","ORCID","wordWrap","creator","affiliationIds","renderAuthors","names","affiliationId","ind","renderAffiliations","RepoEmbargoOverview","collections","btnMessage","_msg","_btn","RepoEmbargo","moveElement","newEmbargo","showConfirmModal","showMoveModal","showInfoModal","showCommentsModal","showAuthorModal","showMetadataModal","handleElementSelection","handleEmbargoAccount","handleEmbargoDelete","handleMoveEmbargo","handleMoveShow","handleMoveClose","handleInfoShow","handleInfoClose","handleAuthorShow","handleAuthorClose","handleMetadataShow","handleMetadataClose","handleEmbargoChange","handleCommentsShow","handleCommentsClose","handleCommentsSave","handleOverview","EmbargoFetcher","refreshEmbargo","onClickDelete","RepositoryFetcher","repoReviewPublish","selectedValue","published_by","generateEmbargoAccount","isSubmitter","shouldPerform","rendeActionBtn","acceptedEl","actionButtons","filterDropdown","paddingLeft","marginBottom","renderSearch","hasComment","clearable","RepoReviewAuthorsModal","isEmbargo","schemeOnly","taggData","renderMoveModal","allBundles","metadata_xml","isOwner","r","ElAspect","ConfirmModal","RepoCollectionDetails","loadSVG","prevProps","snapshot","Elist","cid","fetchEmbargoElement","listClass","published_samples","sample_id","svg","authorInfo","pub_id","getFormattedISODate","published_at","ana_cnt","infoTag","RepoCollection","fetchEmbargoElements","PublicStore","pathname","pop","embargoId","publishedStatics","stsSample","el_type","ex_type","stsSampleReview","stsSampleEmbargo","stsReaction","stsReactionReview","stsReactionEmbargo","stsAnalysisSort","e_cnt","reverse","stsAnalysisCnt","Number","accumulator","currentValue","tooltipView","pubPage","SAMPLE","lg","timeInterval","_date","Date","constructor","getTime","seconds","Math","floor","intrvlCount","intrvlType","lastPublished","svgPathSample","sample_svg_file","molecule","molecule_svg_file","pubTagSample","svgPathReaction","reaction_svg_file","pubTagReaction","Carousel","indicators","interval","Item","Caption","doi_reg_at","queued_at","count","ReviewerCard","photo","tel","ContactEmail","ReviewGuidelines","rel","RepoCardReviewers","setData","reviewers","cards","RepoCardReviewerIntro","RepoCardReviewerIntroBtn","flex","constructHolder","searchBy","searchIn","authors","ontologies","searchIcon","chemotion_id","sample_name","sample_short_label","sample_external_label","polymer_type","reaction_name","reaction_status","reaction_short_label","reaction_rinchi_string","wellplate_name","screen_name","iupac_name","inchistring","cano_smiles","sum_formula","requirements","conditions","element_short_label","getLabelIcon","updateLabel","_searchBy","_label","_method","constructSearchParams","advFlag","selection","original","isSearch","setSearchBy","setSearchIn","setSearchValue","setSearchOptions","asyncRef","useRef","onChangeSearchBy","onChangeSearchIn","xs","smHidden","xsHidden","Well","Radio","showStructureEditor","SuggestionsFetcher","fetchSuggestionsForCurrentUser","search_by_method","fetchAdvancedValues","capitalizeFirstLetter","_value","pageParams","constructParams","publicSearch","maParams","getSearchReactions","defaultSearchValue","getSearchMolecules","styles","container","baseStyles","Infos","img","Partners","end","imgSrc","Thumbnail","PartnerInfo","features","fa","intro","license","oai","dataQuality","peer","store","labimotion","RepoHome","showReviewers","onShow","PublicState","flexWrap","extraStyle","extra","RepoElementDetails","isCI","pubData","hasXvial","hasX","xvial_count","hasXCom","xvial_com","xvialTag","RepoReactionList","isPubElement","klassName","popHover","rootClose","svgTag","svgPath","pubchemTag","pubchem_cid","pubchem_tag","author_name","RepoMoleculeList","pubchemInfo","isPop","popW","Formula","formula","sum_formular","ExtIcon","PubchemLabels","RepoMoleculeArchive","xvial_archive","provided_by","renderReaction","hints","scheme","moleculeArchive","TabTip","handleSelectAdvType","RepoPubl","inputDisabled","queryMolfile","tanimotoThreshold","selectUsers","showSearch","changeSort","handleClearSearchSelection","handleStructureEditorCancel","handleSelectAdvValue","showAdvancedSearch","closeAdvancedSearch","renderAdvancedSearch","advSearchClick","loadAdvValuesByName","handleShowSearch","selectPublicCollection","handleSearchTypeChange","hideStructureEditor","onPerPageChange","getList","ps","SCHEME","clearSearchSelection","renderMenuItems","handleTanimotoChange","isNaN","handleSelectionChange","structureSearch","molfile","search_type","tanimoto_threshold","structure_search","handleStructureEditorSave","molfileLines","perPageInput","onPaginationSelect","pages","pagination","items","minPage","max","maxPage","Pagination","First","Prev","tpage","Ellipsis","Next","Last","renderSwitch","listOptions","valSelect","userLabel","isPublish","backspaceRemovesValue","defaultOptions","control","base","minHeight","borderRadius","multiValue","opacity","multiValueLabel","simpleValue","searchable","customClass","stSearchTooltip","clearTooltip","buttonAfter","submitAddons","searchSimilarRadio","searchTanimotoInput","searchSubstructureRadio","searchTooltip","innerDropdown","StructureEditorModal","noSubmit","onCancel","submitBtnText","AutoCompleteInput","inputAttributes","suggestionsAttributes","suggestions","autoComplete","onSelectionChange","buttonBefore","molecules","reactions","pullLeft","renderMoleculeArchive","renderMolecule","elementList","RepoReviewDetails","ReviewStore","RepoReview","showReviewModal","showCommentModal","reviewData","listTypeOptions","orgInfo","showEmbargoModal","selectedElement","selectedEmbargo","handleSelectType","handleSearchNameInput","onEmbargoBtnClick","onEmbargoBtnSave","handleSubmitReview","handleReviewUpdate","handleCommentUpdate","setUserLabel","checklist","reviewComments","reviewPublish","rr","updateReview","commentInput","origInfo","cinfo","updateComment","selectLabel","preventDefault","stopPropagation","fetchReviewSearchOptions","handleKeyDown","keyCode","loadValuesByType","fetchReviewSearchValues","searchTypeTbl","searchValueTbl","onKeyDown","searchTbl","renderEmabrgoModal","renderReviewModal","obj","RepoReviewModal","onSubmit","onUpdate","renderCommentModal","RepoCommentModal","embargoBtn","scheme_only","getFormattedISODateTime","submit_at","isReviewer","renderElement","submitter_id","CardIcons","CardAbout","cpmail","frameborder","RepoDirective","setContent","html","Parser","RepoPreservation","borderColor","background","RepoImprint","renderEditRead","article","isEditor","RepoNewsroom","initial","ArticleFetcher","is_article_editor","d","created_at","LatestNews","NewsList","right","imageUrl","cover_image","mainImage","firstParagraph","creator_name","DateFormatYMDLong","NewsTBox","RepoHowTo","initialHowTo","is_howto_editor","NewsColSmall","howto","textOverflow","updated_at","RStore","navigateReview","navigateEmbargoReview","subPage","open","menuSelected","TemplateRenderer","downloadName","filename","now","setSelected","getFullYear","getMonth","padStart","getDate","getHours","getMinutes","getSeconds","sortable","iconStyle","segment","element_klass","dataset","hide","valueFormatter","parseInt","clickMenu","GenericBaseFetcher","GenGridBase","matomoUrl","process","_mtm","getElementsByTagName","async","parentNode","insertBefore","justified","bottom","left","sessSysInfoClosed","infoLink","setShow","sessionStorage","getItem","flexGrow","setItem","Home","embedMatomo","initialize","fetchOlsChmo","publicState","renderGuestPage","RepoNewsEditor","RepoNewsReader","RepoHowToEditor","RepoHowToReader","paddingBottom","LoadingModal","pushStateEnabled","setRoutes","MoleculeModeratorComponent","isNew","molName","molNames","molecule_names","handleCloseModal","onSaveName","onAddName","m_name","name_id","MoleculesFetcher","saveMoleculeName","handleEditor","svg_file","handleEditorSave","nameObj","deleteMoleculeName","renderDeleteButton","renderEditButton","componentEditor","tbodyHeader","tbodyContent","na","pageNav","fixedTop","pageNotify","MoleculeModerator","handleSearch","updateMolfileSVG","getByInChiKey","refInChiKey","isChemdraw","smiles","renewSVGFile","svg_path","formSearch","pageComponent","rmRefreshed","analysis","refreshed","layoutsWillShowMulti","FN","LIST_LAYOUT","CYCLIC_VOLTAMMETRY","SEC","AIF","ViewSpectra","SpectraStore","writeCommon","writePeakOp","writeMpyOp","writeCloseCommon","writeClosePeakOp","writeCloseMpyOp","saveOp","saveCloseOp","refreshOp","closeOp","predictOp","buildOpsByLayout","renderSpectraEditor","renderEmpty","renderTitle","formatPks","getContent","getSpcInfo","getQDescVal","buildOthers","onSpectraDescriptionChanged","isShowMultipleSelectFile","updateROPredict","onChangeElement","origState","updatedElement","opsSolvent","shift","insert","attributes","script","onDSSelectChange","spcInfos","sis","idDt","si","SpectraActions","SelectIdx","getDSList","spcDts","dcs","datasetContainers","spcMetas","arrSpcIdx","spcs","jcamp","spcIdx","listMuliSpcs","listEntityFiles","spc","entity","predictions","curveIdx","selectedIdx","analysesContainers","ae","idAe","ai","idAi","extended_metadata","peaks","isAscend","decimal","isIntensity","integration","curveSt","waveLength","layoutOpsObj","SpectraOps","selectedShift","shifts","selectedIntegration","integrations","buildData","temperature","observeFrequency","editPeak","autoPeak","freq","freqStr","boundary","maxY","minY","mBody","peaksBody","solventDecimal","is13CLayout","solvent","toFixed","head","tail","formatMpy","multiplicity","selectedMutiplicity","multiplicities","refArea","refFactor","shiftVal","ms","stack","is","macs","mpyType","xExtent","xL","xU","area","center","calcMpyCenter","bIdx","mxA","mxB","couplings","js","it","round","j","italic","atomCount","isMpy","scan","thres","keepPred","cyclicvoltaSt","axesUnitsSt","detectorSt","dscMetaData","handleSampleChanged","isCyclicVoltaLayout","notationVoltammetry","firstOps","spectraList","listCurves","selectedVolta","feature","scanRate","InlineMetadata","voltaData","listPeaks","xyData","sampleName","inlineNotation","quillData","ElementActions","fetchSampleById","simulatenmr","fPeaks","rmRef","peaksStr","toPeakStr","predict","waveLengthStr","cyclicvolta","axesUnitsStr","detector","isSaveCombined","previousSpcInfos","SaveToFile","ToggleModal","getPeaksByLayout","CarbonFeatures","selectedMultiplicity","nmrMpyCenters","stk","CalcMpyCenter","y","targetPeaks","InferRunning","InferSpectrum","can_update","et","ResearchPlan","updatable","baseOps","isPublic","others","addOthersCb","AddOthers","fetched","renderInvalid","isExist","currEntity","multiEntities","entityFileNames","undefined","operations","descriptions","forecast","btnCb","refreshCb","SpectraEditor","molSvg","theoryMass","molecule_molecular_weight","canChangeDescription","onDescriptionChanged","userManualLink","cv","modalTitle","isShowMultiSelect","dsOptions","treeCheckable","maxTagCount","reversedValue","specElements","getElementsByClassName","getKeysOfMap","citationMap","createCitationTypeMap","cellLineCitationTypeMap","CitationTypeMap","citedOwn","def","short","datacite","citedRef","dataCite","referTo","uncategorized","literatureOfSource","additionalLiterature","CitationTypeEOL","RefByUserInfo","litype","lid","LiteralType","LiteratureInput","literature","isLiteratureValid","AddButton","onLiteratureAdd","Literature","sanitizeDoi","doiValid","sanitized","literatureContent","onlyText","refs","bibliography","bibtex","citation","litBibtex","indexData","substr","lastIndexOf","Cite","format","year","Citation","isbn","link","wordBreak","CitationUserRow","user_name","groupByCitation","literatures","keySeq","toArray","get","array","sortByElement","ImageAnnotationEditButton","allowedFileTypes","tooltipText","imageEditModalShown","chosenAttachment","attachment","imageName","extension","Attachment","ImageAnnotationModalSVG","canSave","isShow","iframe","onLoad","subWindow","contentWindow","subDocument","svgEditor","setBackground","localStorage","removeItem","styleOverride","querySelector","innerHTML","paletteShadowDOM","shadowRoot","querySelectorAll","elem","setAttribute","paletteHolder","buttonsToRemoveOnSight","remove","DocumentPropertiesEntry","removeAttribute","targetNode","MutationObserver","mutationList","mutation","addedNodes","observe","childList","subtree","allowedKeys","currentKey","ctrlKey","code","nodeName","stopImmediatePropagation","iframeStyle","getAttribute","newStyle","updatedAnnotation","svgCanvas","setSvgString","svgString","decodeURIComponent","str","ret","safeParseJson","updateCanvas","handleOnClose","SaveEditedImageWarning","visible","warningStyle","warningMessage","attachmentThumbnail","pubSrc","imageStyle","objectFit","boxShadow","transition","previewObject","popObject","disableClick","hasPop","showPopImage","fetchNeeded","isImageFile","fileName","formatFileSize","sizeInB","downloadButton","Menu","handleDownloadOriginal","handleDownloadAnnotated","option","getHandlerUrl","MouseEvent","view","bubbles","cancelable","dispatchEvent","handleOpenLocally","removeButton","onDelete","moveBackButton","onBack","annotateButton","editButton","attachmentEditor","isEditing","editDisable","handleEdit","exts","spinningLock","importButton","showImportConfirm","importDisabled","importButtonRefs","showImportConfirmFunction","hideImportConfirmFunction","confirmAttachmentImportFunction","importTooltip","confirmTooltip","glyph","customDropzone","sortingAndFilteringUI","sortDirection","handleSortChange","toggleSortDirection","handleFilterChange","isSortingEnabled","isUUID","filterOptions","itemType","itemSubtype","subtype","noChoice","ThirdPartyAppButton","menuItems","setMenuItems","mime","content_type","filteredOptions","fetchAttachmentToken","generatedMenuItems","SharingShortcuts","permissionLevel","sampleDetailLevel","reactionDetailLevel","wellplateDetailLevel","screenDetailLevel","partner","collaborator","reviewer","supervisor","ManagingModalSharing","elementDetailLevel","onUserChange","handleSharing","isElementSelectionEmpty","checkedAll","checkedIds","uncheckedIds","isSelectionEmpty","uiState","isSampleSelectionEmpty","isReactionSelectionEmpty","isWellplateSelectionEmpty","wellplate","isScreenSelectionEmpty","screen","isCelllineSelectionEmpty","cell_line","klassArray","filterParamsWholeCollection","currentCollection","filterParams","included_ids","excluded_ids","collection_id","research_plan","currentSearchSelection","filterParamsFromUIState","collection_attributes","permission_level","sample_detail_level","reaction_detail_level","wellplate_detail_level","screen_detail_level","element_detail_level","collAction","fullParams","elements_filter","CollectionActions","createSharedCollections","updateSharedCollection","editSync","createSync","handleShortcutChange","permAndDetLevs","handlePLChange","handleDLChange","fetchUsersByName","currentUserId","displayWarning","UserInfoIcon","PermissionIcons","pl","MyCollections","deleted_ids","collection","isChange","addSubcollection","CollectionStore","fetchUnsharedCollectionRoots","unsharedRoots","hasChildren","handleLabelChange","bulkUpdate","child","bulkUpdateUnsharedCollections","actions","onMouseDown","addCollectionButton","doSync","addSubcollectionButton","deleteCollection","renderSync","syncOut","sync_collections_users","deleteSync","is_syncd","findParentById","removeNodeById","appendChildrenToParent","onClickNode","is_locked","handleModalHide","renderNode","mPs","mPsC","isNodeCollapsed","MySharedCollections","fetchSharedCollectionRoots","sharedRoots","oldTree","editShare","actNode","SharedWithMeCollections","fetchRemoteCollectionRoots","remoteRoots","shared_by","shared_to","rejectShared","draggable","SyncWithMeCollections","fetchSyncInCollectionRoots","syncInRoots","rejectSync","onExit","string","TabLayoutCell","cell","connectDragSource","connectDropTarget","isElementDetails","isHidden","isCollectionTab","cellIcon","cellTitle","capitalizeWords","cellDescription","genericElements","genericEls","genericElement","desc","dropEffect","flow","DragSource","DragDropItemTypes","LAYOUT","beginDrag","monitor","dragSource","isDragging","DropTarget","drop","moveLayout","dropTarget","TabLayoutContainer","Immutable","hidden","dragItem","hoverItem","ArrayUtils","pushUniq","removeFromListByValue","tabTitles","segmentTabs","visibleCells","defTitle","hiddenCells","getArrayFromLayout","addInventoryTab","availableTabs","analyses","attachments","layoutKeys","segmentAvailableTabs","getElementSegments","inventory","leftover","order","abs","first","getVisibilityList","filterTabLayout","layoutState","CollectionTabs","profileData","tabRef","onClickCollection","clickedOnBack","onUserStoreChange","fetchProfile","handleModalOptions","_","tabs_segment","cCol","layoutSegments","_e","currentCollectionId","createTabsSegment","ancestry","ch","tabTitlesMap","qc_curation","computed_props","nmr_sim","lay","tabContents","UserInfos","tipUsers","GatePushBtn","transmitting","ovltg","resp","tooltipContent","encodeURI","origin","ovlg","ov","CollectionSubtree","isRemote","inventoryPrefix","inventory_prefix","toggleExpansion","nextProps","isVisible","is_synchronized","descendant_ids","visibleRootsIds","selectedCssClass","subtrees","expandButton","Glyphicon","takeOwnershipButton","isTakeOwnershipAllowed","isSync","sharer","handleTakeOwnership","takeOwnership","collectionID","urlForCurrentElement","collectionShow","scollectionShow","ElementStore","descendantIds","newIds","updateCollectrionTree","synchronizedIcon","sharedUsers","ls","sicon","ricon","labeling","gated","colVisibleTooltip","CollectionTree","handleSectionToggle","collecState","lockedRoots","ownCollectionVisible","sharedWithCollectionVisible","sharedToCollectionVisible","syncCollectionVisible","fetchLockedCollectionRoots","lockedSubtrees","roots","removeOrphanRoots","newRoots","unsharedSubtrees","sharedSubtrees","labelledRoots","$set","labelRoot","subTreeLabels","remoteSubtrees","remoteSyncInSubtrees","sharedToOrBy","rootCollection","convertToSlug","subtreesVisible","collectionManagementButton","handleCollectionManagementToggle","toggleCollectionManagement","showCollectionManagement","publicRoots","preservePublic","is_public","publicSubtrees","syncChemotionVisible","orderedRoots","ownCollectionDisplay","ElementAllCheckbox","showOptions","currentOption","toggleCheckbox","selectAll","range","newChecked","checkAllElements","uncheckAllElements","ui","checkMarkClass","checkMark","optionStyle","ElementContainer","sourceType","MOLECULE","GENERALPROCEDURE","WELLPLATE","RESEARCH_PLAN","ElementCheckbox","updateCheckedStatus","isChecked","checkElement","uncheckElement","ElementCollectionLabels","handleOnClick","preventOnClick","labelStyle","is_shared","formatLabels","labels","renderCollectionsLabels","collectionName","collection_labels","shared_labels","sync_labels","shared_by_id","total_shared_collections","collectionOverlay","ElementAnalysesLabels","analysesLabels","unconfirmedTitle","Unconfirmed","unconfirmed","confirmedTitle","Confirmed","confirmed","labelWithPopover","experiment","label_popover","total","regExp","key_syn","exec","SvgWithPopover","renderPreview","isSVG","duration","resize","previewObj","txtOnly","formatSection","section","words","getSectionComments","comments","cmt","getAllComments","selectCurrentUser","commentActivation","CommentIcon","commentCount","reactionRole","showDetails","klassType","elementShowOrNew","reactionStatus","_icons","lineHeight","ElementsTableEntries","keyboardElementIndex","entriesOnKeyDown","KeyboardStore","context","documentKeyDownCode","isElementChecked","isValNotInArray","isValInArray","isElementSelected","isCurrEleDropType","generalProcedure","dragHandle","dropSourceType","isDropForSample","isDropForWellPlate","isDropForResearchPlan","isDropForGP","isDropForScreen","previewColumn","classNames","classnames","svgContainerStyle","showPreviews","thumb_svg","dragColumn","showDragColumn","borderTop","sampleMoleculeName","variations","reactionVariations","reactionPublished","comment_count","sampleAnalysesLabels","is_top_secret","topSecretIcon","ElementReactionLabels","showWarning","clicked","closeWarning","elementWarning","tryFetchReactionById","reaction_id","ElementWellplateLabels","tryFetchWellplateById","wellplate_id","GenericElementLabels","elInfo","tryFetchGenericElById","ChemrepoLabels","chemrepoId","ComputedPropLabel","cprops","statusIcon","ClipboardCopyText","clipText","contains_residues","molecule_formula","decoupled","moleculeName","showed_name","stereo","stereoInfo","sumFormulaCom","customText","polymerName","charAt","buildFlattenSampleIds","displayedMoleculeGroup","flatIndex","flattenSamplesId","groupSample","numSamples","sampleShowOrNew","sampleID","targets","targetType","TopSecretIcon","XvialIcon","overlayToggle","MoleculeHeader","showIndicator","collId","molecule_iupac_name","svgPreview","chem_repo","tagData","molecule_computed_props","ElementsTableSampleEntries","moleculeGroupsShown","keyboardIndex","keyboardSeletectedElementId","sampleOnKeyDown","moleculelist","samples","molId","moleculeSort","forceUpdate","collapseAll","nextUi","handleMoleculeToggle","onChangeCollapse","showMoreSamples","renderSamples","sampleRows","gap","xvial","num","showDecoupledIcon","renderMoleculeGroup","moleculeGroup","showGroup","ReactionsHeader","GenericElementsHeader","ElementsTableGroupedEntries","reactionsOnKeyDown","sortedElementIds","keyboardSelectedElementId","elementsShown","updateTargetType","handleGroupToggle","genericEl","groupedElements","elementsGroup","prototype","hasOwnProperty","call","groupElements","layer","layers","renderReactionElements","renderGenericElements","renderGroup","groupHeader","tableContent","CellLineGroup","cellLineItems","buildFromElements","cellLineElements","cellLineGroups","cellLine","addCelllineToGroup","matchingGroups","findMatchingGroups","addCellLineToNewGroup","groupInFocus","matchingGroup","cellLineToCheck","firstItemInGroup","cellLineName","source","CellLineItemEntry","cellLineItem","itemName","amount","passage","contamination","CellLinePropTypeTableEntry","organism","disease","tissue","bioSafetyLevel","cryopreservationMedium","gender","new_cellLine","cellLineId","CELL_LINE","CellLineEntry","detailedInformation","showEntries","getBorderStyle","renderItemEntries","renderNameHeader","firstCellLineItem","renderArrow","renderDetailedInfoButton","renderCreateSubSampleButton","arrowType","renderDetailedInfos","renderProperty","buttonActive","is_sync_to_me","creationEvent","cell_lineID","cell_line_template","propertyName","propertyValue","floating","CellLineContainer","ElementsTable","handleScrollToElement","elementRef","scrollTo","behavior","initState","filters","elementsSort","direction","changeCollapse","changeSampleSort","changeSorting","updateFilterAndUserProfile","changeElementsFilter","updateUserProfile","changeElementsGroup","changeElementsSort","changeSortDirection","newSortDirection","collapseButton","collapseIcon","renderSamplesHeader","productOnly","toggleProductOnly","renderChangeSortDirectionIcon","sortDirectionIcon","changeSortDirectionTitle","sortDirectionTooltip","renderReactionsHeader","optionsHash","none","sortColumn","rinchi_short_key","rxno","sortDirectionText","sortTitle","sortTooltip","sortIconClass","sortIcon","sortContent","renderGenericElementsHeader","allowedTypes","layerEntry","renderHeader","filterCreatedAt","showReport","fromDate","toDate","searchLabel","typeSpecificHeader","filterTitle","filterIconClass","filterTooltip","filterIcon","changeDateFilter","placeholderText","setFromDate","popperPlacement","dateFormat","setToDate","searchResult","onChangeUI","timer","handlePaginationSelect","setPagination","handleNumberOfResultsChange","changeNumberOfResultsShown","refreshElements","stopEvent","number_of_results","currentSearchByID","currentId","isSearchResult","currentStateProductOnly","stateChange","elementsState","stateElements","stateCurrentElement","elementsDidChange","deepEqual","currentElementDidChange","setFilterCreatedAt","setProductOnly","handleDelayForNumberOfResults","numberOfResultsInput","onBlur","currentPage","renderEntries","elementsTableEntries","overview","ElementsTableSettings","currentType","showSampleExternalLabel","showSampleShortLabel","showSampleName","tableSchemePreviews","showTabLayoutContainer","onCloseTabLayoutContainer","handleToggleSampleExt","handleToggleSampleShortLabel","handleToggleSampleName","handleToggleScheme","onChangeUser","toggleTabLayoutContainer","show_external_name","show_sample_name","show_sample_short_label","updateLayout","show_previews","cur_previews","toggleShowPreviews","tabLayoutContainerElement","userProfile","wd","sampleSettings","popoverSettings","button","tabLayoutButton","Overlay","shouldUpdatePosition","inputHash","resultHash","sortedLayout","set","ElementsList","totalElements","currentTab","totalCheckedElements","handleTabSelect","selectTab","KeyboardActions","contextChange","currentTabIndex","genericKlasses","elementUI","nextCount","previousState","handleRemoveSearchResult","searchStore","changeShowSearchResultListValue","clearSearchById","selectSyncCollection","selectCollection","getSortedHash","constEls","elementState","removeSearchResultAlert","search","navItems","iconClass","ttl","navItem","tabContent","elementsTableSettings","contextType","ComputeTaskFetcher","fetchAll","camelizeKeys","compute_tasks","checkState","taskId","check","revokeTask","revoke","deleteTask","ComputeTaskActions","dispatch","ComputeTaskStore","tasks","handleFetchAll","handleUpdateTask","handleDeleteTask","newTask","task","deletedTask","statusMap","not_computed","ComputeTask","navigateSample","collectionMatch","displayStatus","updatedAt","ComputeTaskContainer","onChangeComputeTask","onClose","DetailActions","DeviceManagement","activeAccordionDevice","closeDeviceManagement","handleCloseDeviceManagement","AddDeviceButton","Devices","getStores","getPropsFromStores","connectToStores","styleByDeviceState","isEdited","PanelGroup","accordion","changeActiveAccordionDevice","DeviceHeader","Device","styleBySelectedType","types","handleTypeClick","toggleDeviceType","handleChangeDeviceProp","prop","changeDeviceProp","bottomSpacer","updateChecksum","onChangeState","handleRemoveDevice","toggleFullScreen","isPendingToSave","collapsible","QuillViewer","viewer","initQuill","oldVal","newVal","setContents","quillViewer","theme","Quill","oriValue","keepSupSub","btns","tryParse","ElementAnalyses","kind","FormatComponentHeader","onFormat","FormatComponent","Accordion","findArrIndex","tagEl","criteria","arr","elIndex","reOrderArr","sourceTagEl","targetTagEl","sourceIndex","targetIndex","arrWoSource","splSettings","rxnSettings","siRxnSettings","ReportStore","checkedAllSplSettings","checkedAllRxnSettings","checkedAllSiRxnSettings","checkedAllConfigs","processingReport","defaultObjTags","sampleIds","reactionIds","selectedObjTags","selectedObjs","previewObjs","selMolSerials","imgFormat","archives","fileDescription","processings","prdAtts","attThumbNails","templateOpts","handleUpdateSplSettings","ReportActions","updateSplSettings","handleToggleSplSettingsCheckAll","toggleSplSettingsCheckAll","handleUpdateRxnSettings","updateRxnSettings","handleToggleRxnSettingsCheckAll","toggleRxnSettingsCheckAll","handleUpdateSiRxnSettings","updateSiRxnSettings","handleToggleSiRxnSettingsCheckAll","toggleSiRxnSettingsCheckAll","handleUpdateConfigs","updateConfigs","handleToggleConfigsCheckAll","toggleConfigsCheckAll","handleGenerateReport","generateReport","handleUpdateCheckedTags","updateCheckedTags","handleMove","move","handleUpdateImgFormat","updateImgFormat","handleGetArchives","getArchives","handleUpdateFileName","updateFileName","handleUpdateFileDescription","updateFileDescription","handleUpdateActiveKey","updateActiveKey","handleDownloadReport","downloadReport","handleUpdateProcessQueue","updateProcessQueue","handleUpdateTemplate","handleClone","clone","handleDelete","handleRemove","handleReset","reset","handleUpdMSVal","updMSVal","handleUpdateThumbNails","updateThumbNails","handleUpdateDefaultTags","updateDefaultTags","handleLoadReview","loadReview","handleFetchTemplate","fetchTemplates","newSelectedObjs","orderObjsForTemplate","newPrdAtts","extractPrdAtts","initFileName","oldObjs","oldSelectedObjs","frontObjs","rearObjs","newCheckValue","newArchives","report","getProcessings","loadingIcon","ids","downloadable","mergeMemoryFetchObjs","newObjs","fetchSpls","in_browser_memory","fetchRxns","memSpls","memRxns","newTags","targetObjs","UpdateSelectedObjs","finalObjs","molSerials","updMolSerials","isEqTypeId","sourceTag","targetTag","stdReportPrefix","prefix","datetime","moment","validValue","validName","ext","markReaded","archive","unread","updatedArchives","updatedIds","newProcessings","orderObjsForArchive","objs","od","file_description","img_format","ss","sample_settings","rs","reaction_settings","siRs","si_reaction_settings","orderedArObjs","objects","orderedArTpObjs","mol_serials","diagram","reaction_description","material","purification","boolOrUdfTrue","dangerous_products","tlc","observation","Name","CAS","Smiles","InChI","EA","page_break","inp","dTags","sTags","currentObjs","tmpSDTags","tmpSSTags","tmpRDTags","tmpRSTags","deletedId","extractMolSerials","oldSelMolSerials","newSelMolSerials","msMolFromSelected","newMol","osm","mol","nonGpRxns","rxns","msMols","starting_materials","reactants","products","createMSMol","uniqSortById","sumFormula","iupacName","extractPrdsAtts","atts","prd","prdId","extractAtts","showedName","thumbs","thumbnails","defaultTags","OrderPreviewObjs","templates","extractAnalyses","listEls","listObjs","rAna","ana","container_type","samplesAna","FormatContainer","isSaved","onChangeRp","reportState","formatAnalyses","formatAnalysisContent","flattenObjs","cur","updateContainerContent","ConfirmClose","showTooltip","onClickButton","getTargetButton","forceClose","sharedProps","containter","TextTemplateActions","fetchTextTemplates","elementName","updateTextTemplates","elName","TextTemplateStore","Map","researchPlan","reactionDescription","OrderedSet","fetchedPredefinedTemplates","handleFetchTextTemplates","handleFetchPredefinedTemplateNames","handleUpdateTextTemplates","handleFetchTemplateByNames","templateType","templateVal","fromJS","solventOptions","defaultMultiSolventsSmilesOptions","external_label","density","purificationOptions","statusOptions","dangerousProductsOptions","confirmOptions","kindOptions","rolesOptions","conditionsOptions","temperatureOptions","durationOptions","stereoAbsOptions","stereoRelOptions","chemicalStatusOptions","amountSearchOptions","postpone","fn","isDelta","ReactQuill","generation","dirtyProps","cleanProps","allProps","isControlled","shouldComponentRegenerate","validateProps","getEditor","getEditingArea","getEditorConfig","getEditorContents","getEditorSelection","setEditorContents","setEditorReadOnly","setEditorSelection","createEditor","destroyEditor","hookEditor","instantiateEditor","unhookEditor","renderEditingArea","blur","onEditorChange","onEditorChangeText","onEditorChangeSelection","editor","otherValue","prevContents","nextContents","isEqual","propKey","getSelection","regenerationSnapshot","lastDeltaChangeSet","noChild","only","bounds","formats","modules","scrollingContainer","editingArea","nodeType","sel","convert","getLength","setSelection","disable","unprivilegedEditor","getHTML","getText","getBounds","makeUnprivilegedEditor","on","off","scroll","domNode","setEditorTabIndex","eventName","rangeOrDelta","oldRangeOrDelta","nextSelection","currentSelection","hasGainedFocus","hasLostFocus","onChangeSelection","preserveWhitespace","instance","onKeyPress","onKeyUp","EventHanlder","DynamicToolbarEditor","toolbarId","toString","toolbar","innerRef","otherProps","ToolbarIcon","dropdownSvg","viewBox","points","ToolbarDropdown","expanded","pickerSpan","pickerLabel","genId","ddQuillId","sheets","styleSheets","sheet","getTextWidth","toggleExpand","cssRule","ruleId","insertRule","requiredWidth","contains","deleteRule","font","getContext","measureText","ddLabel","itemValues","ddItems","v","expandedClass","TextTemplateToolbar","predefinedTemplates","applyTemplate","iconNames","_toolbar","dropdownNames","getNamesFromTemplate","predefinedTemplate","dropdownLabel","_k","customStyles","css","getIconAndDropdown","dropdownTemplates","ToolbarTemplateCreator","toolbarSelectRef","iconTemplates","toolbarDdSelectRefs","dd","toolbarTitleRefs","setTitleRef","onChangeDropdown","createDropdownTemplate","removeDropdownTemplate","saveUserTemplates","tempOnChange","dataValues","refIdx","titleRef","newDd","newDropdowTemplates","userTemplate","selectRefs","titleRefs","tempName","templateOptions","iconSelected","dropdownTemplateSelector","selectRef","ddSelected","isSearchable","closeMenuOnSelect","toolbarOptions","AnalysisEditor","templateStore","toJS","fetchedNames","fetchPredefinedTemplates","onChangeTemplateStore","onChangeContent","autoFormatContent","quillOnChange","namesToFetch","flat","templateStoreFetched","quillEditor","quill","macro","elementOps","insertDelta","macroDelta","autoFormatIcon","templateCreatorPopover","onCloseTemplateCreator","ContainerComponent","textTemplate","handleTemplateChange","handleAddLink","handleRemoveLink","ev","isChanged","currentTarget","hyperlinks","analysisMethodTitle","ontologyName","onSelectChange","selectedDisable","ContainerDatasets","HyperLinksSection","onAddLink","onRemoveLink","EditorAnalysisBtn","hasJcamp","hasChemSpectra","toggleSpectraModal","confirmRegenerate","SplitButton","onToggle","newHeader","insText","instrumentText","previewImg","previewContainerImage","contentOneLine","fetchId","preview_img","ImageModal","fnRemove","fnChange","jcampIds","JcampIds","orig","BuildSpcInfos","LoadSpectra","Regenerate","headerBtnGroup","Quill2Viewer","AiHeaderDeleted","fnUndo","noAct","AiHeader","GenericContainerGroup","linkedAis","ais","is_deleted","GenericElDetailsContainers","activeContainer","handleAccordionOpen","handleAdd","handleSpChange","handleUndo","handleElChanged","buildEmpty","newKey","addButton","renderNoAct","analysesContainer","CollectionSelect","onColChange","onColSelectChange","ColOptions","makeTree","depth","cAllTree","newOptions","leaf","indent","repeat","CopyElementModal","selectedCol","defCol","handleModalClose","handleModalShow","copyElement","ClipboardActions","fetchElementAndBuildCopy","copyReaction","copyResearchPlan","canCopy","can_copy","downloadTooltip","defaultImgStyle","GenericAttachments","editorInitial","onEdit","fileType","last","docType","documentType","EditorFetcher","startEditing","attachment_id","only_office_token","aasm_state","findKey","installed","renderRemoveAttachmentButton","renderListGroupItem","updateTime","setTime","thumbnail","imgStyle","is_new","styleEditor","SpinnerPencilIcon","renderAttachments","ListGroup","ListGroupItem","renderDropzone","RevisionViewerBtn","setShowModal","PreviewModal","fnRetrieve","revision","pascalize","deleteRevisions","fetcher","fetcherFn","camelize","GenericSGDetails","handleReload","handleExport","handleRetrieveRevision","exportElement","changed","elementalPropertiesItem","fnNavi","layersLayout","GenInterface","extLayers","isPreview","isActiveWF","elementalToolbar","GenButtonExport","fnExport","GenFlowViewerBtn","fnClick","GenButtonReload","fnReload","uiCtrl","onNaviClick","collectionUrl","fetchReactionById","fetchGenericElById","addSegmentTabs","contentMap","Segment","getAsUriParameters","CalendarEntryFetcher","getEntries","getEventableUsers","deleteById","create","GET_ENTRIES_LOADING","UPDATE_ENTRY_LOADING","DELETE_ENTRY_LOADING","transformEntryForApi","start_time","toISOString","end_time","created_by","eventable_type","eventableType","eventable_id","eventableId","notify_user_ids","notifyUsers","transformEntryFromApi","user_email","user_name_abbreviation","element_klass_icon","element_klass_name","element_name","accessible","notified_users","CalendarActions","startLoading","showCalendar","setViewParams","hideCalendar","with_shared_collections","showSharedCollectionEntries","clearEventableUsers","requestParams","apiEntries","createEntry","updateEntry","deleteEntry","navigateToElement","CalendarTypes","default","Screen","CalendarStore","collectionUsers","handleShow","handleHide","handleLoading","isUpdate","OpenCalendarButton","weekStart","weekEnd","setDate","getDay","isPanelHeader","ElementDetailSortTab","collectionTabs","onTabPositionChanged","tabSegment","updateTabsSegment","cId","layoutName","tabs","buttonInfo","isEmpty","div_ref","thisDiv","GenericElDetails","activeTab","handleAttachmentDrop","handleAttachmentDelete","handleAttachmentEdit","handleSegmentsChange","handleGenericElChanged","tabKey","showGenericWorkflowModal","setCurrentElement","closeView","GenericEl","isValidated","createGenericEl","updateGenericEl","fromFile","isDelete","currentAttachment","se","GenButtonDrawflow","fnSave","isEditable","isRequire","lys","aiComs","ly","aiComp","propertiesTab","containersTab","attachmentsTab","copyBtn","saveBtnDisplay","datetp","submitLabel","segTabs","SegmentTabs","merge","tabContentList","tabKeyContentList","cropDimension","loc","startLoc","minLoc","maxLoc","Highlight","drawing","drawArea","x_start","y_start","xMode","yMode","xyMode","stopDrawing","onParentMouseDown","getMousePosition","getDrawArea","innerWidth","xStart","yStart","out","onBrushStart","yRect","onBrushEnd","xScale","ScaleUtils","getAttributeScale","yScale","domainArea","invert","nativeEvent","offsetX","offsetY","onParentMouseMove","pos","newDrawArea","transform","pointerEvents","fill","AbstractSeries","CustomAxisLabel","xAxis","yLabelOffset","xLabelOffset","allow","displayName","requiresSVG","previewStyle","ComputedPropsGraph","hintValue","lastDrawLocation","setHint","removeHint","yAxis","referencePoints","refData","xAxisLabel","yAxisLabel","xDomain","yDomain","dataInfo","refInfo","onValueMouseOver","onValueMouseOut","SvgFileZoomPan","unit","TableEditBtn","dataLength","onEditBtnClick","btnIcon","GraphReferenceTable","onRefsChanged","autoSizeAll","updateData","rIdx","isAdd","isDestroyed","allColumnIds","getAllGridColumns","column","autoSizeColumns","xLabel","yLabel","cellEditor","domLayout","etlReferences","defaultTemplate","xAxisType","yAxisType","referenceDesc","graphSettings","mean_abs_potential","lumo","homo","ea","dipol_debye","ComputedPropsGraphContainer","curTemplateIdx","graphTemplates","onTemplateChange","onXAxisChange","onYAxisChange","updateReferences","deleteTemplate","onDescChange","userState","newGraphTemplates","templ","newTempl","tIdx","newTemplateIdx","graphData","dat","axisSelectOptions","GraphContainer","selectedComputedProps","graph","cprop","LiteraturesFetcher","fetchElementReferences","is_all","lits","l","literal_id","postElementReference","deleteElementReference","refId","urlParams","updateReferenceType","fetchDOIMetadata","fetchReferencesByCollection","collectionRefs","sampleRefs","reactionRefs","researchPlanRefs","lit","postReferencesByUIState","selectedRefs","CloseBtn","clipboardTooltip","ElementLink","getCurrentRequest","uriArray","namedParams","ElementTypeLink","CitationTable","sortedIds","removeCitation","prevCit","sameRef","sameElement","LiteratureDetails","literatureMap","sorting","handleUIStoreChange","handleLiteratureAdd","handleLiteratureRemove","prevSample","prevReaction","unCheckedIds","removeByUid","contentSamples","contentReactions","contentElements","uniqBy","paddingRight","LiteratureMap","MetadataHeader","subjectAreas","MetadataGeneral","onAdd","onRemove","datasetUrl","fileUrl","subjectArea","controlledSubjectAreaName","menuPortalTarget","menuPortal","keywords","keyword","MetadataCreator","givenName","familyName","affliation","affiliationIndex","affiliation","MetadataCreators","contributorTypes","MetadataContributor","contributorType","MetadataContributors","alternateIdentifierTypes","MetadataAlternateIdentifier","alternateIdentifier","alternateIdentifierType","MetadataAlternateIdentifiers","alternateIdentifiers","relatedIdentifierTypes","relationTypes","MetadataRelatedIdentifier","relatedIdentifier","relatedIdentifierType","relationType","MetadataRelatedIdentifiers","relatedIdentifiers","controlledRightsList","MetadataRights","rights","controlledRights","additionalRights","MetadataRightsHolder","rightsHolder","MetadataRightsList","rightsHolders","funderIdentifierTypes","MetadataFundingReference","fundingReference","funderIdentifierType","funderName","funderIdentifier","awardTitle","awardNumber","awardURI","MetadataFundingReferences","fundingReferences","MetadataContainer","subfield","subindex","subsubfield","change","storeMetadata","Metadata","PredictionStore","inputEls","defaultEls","outputEls","handleInfer","PredictionActions","infer","handleUpdateUI","updateUI","defaultSmis","rspSmis","uniqLoadSmis","maxNumEls","svgContainer","overflowX","svgBox","svgTxt","emptyBox","titleStr","defaultExpanded","molecule_cano_smiles","contentBlock","stripBStyle","rank","selectContainer","uncheckWholeSelection","ContentTemplate","ContentInputs","ContentOutputs","clickToClose","clickToReset","ResetBtn","PredictBtn","disableBtn","PredictionContainer","panelHeader","combState","predictionState","prediction","SubmissionCheck","validates","failure","true","false","AnalysisIdstoPublish","analysisArray","publish","AnalysisHeaderSample","sampleSvgFile","skimAnalysis","isNmrPass","isDatasetPass","publishOptions","PublishReactionModal","selectedReviewers","showSelectionReviewer","collaborations","showPreview","showScheme","showRinchi","showProp","showTlc","selectedLicense","cc0Consent","consent1","consent2","noSolvent","noAmountYield","noEmbargo","schemeDesc","publishType","convertDurationDisplay","handlePublishReaction","handleReserveDois","handleSelectReviewer","handleAnalysesChecked","toggleScheme","toggleRinchi","toggleProp","toggleTlc","loadReferences","loadBundles","selectReferences","handleRefCheck","handleLicenseChange","handleNoSolventCheck","handleNoAmountYieldCheck","handleCC0ConsentChange","handlePublishTypeChange","handleYieldChange","handlePropertiesChange","handleUnitChange","loadMyCollaborations","userText","convertTemperature","durationDisplay","nextValue","nextUnit","product","equivalent","temperature_unit","handleNoEmbargoCheck","fetchEmbargoCollections","CollaboratorFetcher","fetchMyCollaborations","aff","current_affiliations","abb","onHandleAnalysesCheck","validateAnalyses","pas","authorCount","refBehalfAsAuthor","isFullyPublish","refMeAsAuthor","RepositoryActions","publishReaction","coauthors","addMe","publishReactionReserveDois","ReactionsFetcher","fetchById","onPublishRefreshClose","us","af","department","organization","country","addReviewers","reviewerInfo","toggleDiv","citationTable","sids","sortedUniq","chkDisabled","chkDesc","selectedType","validatePub","hasSt","hasSv","solvents","hasProduct","doStValidation","st","prod","validateYield","canPublish","validateInfo","validateObjs","validated","selectedAnalysesCount","analysesView","analysesReaction","analysesViewReaction","analysesType","analysesReactionProductsDOIs","arrP","tmpProduct","tmp","tmpTag","reserved_doi","productDOI","publishTypeAs","opts","awareEmbargo","onEmbargoChange","onLicenseChange","onCC0ConsentChange","cc0Deed","onYieldChange","onPropertiesChange","onUnitChange","flatten","ElementResearchPlanLabels","research_plans","plans","researchPlanOverlay","metPrefSymbols","metPref","metPreConv","fromMP","toMP","getMolFromGram","gram","aux","loading","molarity","purity","molecularWeight","getGramFromMol","getReferenceMaterial","variationsRow","variationsRowCopy","potentialReferenceMaterials","startingMaterials","isReference","computeEquivalent","referenceMaterial","mass","computePercentYield","reactionHasPolymers","stoichiometryCoefficient","coefficient","getReactionMaterials","reactionCopy","materialTypes","materialsByType","materialType","reactionAttributeName","getReactionMaterialsIDs","reactionMaterials","getMaterialData","materialCopy","amount_g","getStandardUnit","amount_mol","volume","amount_l","reference","residues","custom_info","molarity_value","yield","MaterialOverlay","cellData","colDef","currentEntryWithDisplayUnit","displayUnit","convertUnit","toPrecision","getMaterialColumnGroupChild","volumeUnits","massUnits","amountUnits","tooltipField","tooltipComponent","cellDataType","getCellDataType","updateVariationsRowOnReferenceMaterialChange","updatedVariationsRow","updatedRow","materialName","productName","productMaterial","updateYields","AgGridReact","temperatureUnits","durationUnits","fromUnit","toUnit","convertDuration","amountUnitPrefixes","mg","μg","convertAmount","ml","μl","mmol","getVariationsRowName","reactionLabel","variationsRowId","getSequentialId","createVariationsRow","dispValue","durationValue","dispUnit","durationUnit","temperatureValue","valueUnit","temperatureUnit","notes","has_polymers","updateColumnDefinitions","columnDefinitions","property","updatedColumnDefinitions","columnDefinition","groupId","getReactionAnalyses","getAnalysesOverlay","analysesIDs","allReactionAnalyses","AnalysisOverlay","AnalysisVariationLink","analysisID","linkedVariations","AnalysesCellRenderer","AnalysesCellEditor","onValueChange","stopEditing","selectedAnalysisIDs","setSelectedAnalysisIDs","reactionShortLabel","analysesSelection","selectActiveAnalysis","analysisIndex","selectActiveAnalysisTab","fixDigit","precision","precLimit","validDigit","numStr","headLen","tailLen","largerThanOne","smallerThanOne","correctPrefix","parseNumericString","numberString","NaN","sanitizedNumberString","finalPeriodIndex","replaceAll","RowToolsCellRenderer","copyRow","Badge","EquivalentFormatter","EquivalentParser","PropertyFormatter","valueInDisplayUnit","PropertyParser","MaterialFormatter","MaterialParser","columnGroup","updatedCellData","percentYield","updatedAux","updateNonReferenceMaterialOnMassChange","NoteCellEditor","note","setNote","MenuHeader","setSort","setColumnDefinitions","ascendingSort","setAscendingSort","descendingSort","setDescendingSort","noSort","setNoSort","setName","setEntry","units","setUnits","setUnit","onSortChanged","isSortAscending","isSortDescending","onSortRequested","shiftKey","unitSelection","newUnit","newColumnDefinitions","entrySelection","entryKeys","newEntry","newUnits","sortMenu","onTouchEnd","ReactionVariations","currentMaterials","updatedVariations","onReactionChange","gridRef","_setReactionVariations","setAllReactionAnalyses","setReactionMaterials","lockPosition","cellEditorPopup","tooltipValueGetter","cellEditorPopupPosition","marryChildren","materials","dataTypeDefinitions","useMemo","extendsDataType","baseDataType","valueParser","defaultColumnDefinitions","wrapHeaderText","autoHeaderHeight","setReactionVariations","updatedReactionVariations","updatedReactionMaterials","materialIDs","materialColumnGroup","childID","updateColumnDefinitionsMaterials","addMissingMaterialsToVariations","updatedAllReactionAnalyses","updateAnalyses","useCallback","copiedRow","copyVariationsRow","updateRow","oldRow","updateVariationsRow","hasPolymers","fitColumnToContent","rowDragEntireRow","rowDragManaged","suppressPropertyNamesCheck","tooltipShowDelay","popupParent","readOnlyEdit","onCellEditRequest","onFirstDataRendered","autoSizeAllColumns","onColumnHeaderClicked","buildRow","typeMap","unis","cnt","flexBasis","updId","cands","changeTypeBtn","checkElementStatus","w","DetailsTabLiteratures","createEmptyLiterature","handleTypeUpdate","fetchISBNMetadata","fetchMetadata","fetchedLiterature","rType","newlit","objliterature","doi_isbn","newLiterature","issued","URL","isInvalidDoi","isInvalidIsbn","citationTypeMap","CellLine","SpectraEditorButton","confirmRegenerateEdited","hasEditedJcamp","toggleNMRDisplayerModal","hasNMRium","ReactionDetailsContainers","activeAnalysis","containerRefs","handleOnClickRemove","onUIStoreChange","scrollIntoView","block","handleReactionChange","schemaChanged","hasNmriumWrapper","chmos","isNMRKind","PrintCodeButton","ident","spcInfosForNMRDisplayer","BuildSpcInfosForNMRDisplayer","ToggleModalNMRDisplayer","LoadSpectraForNMRDisplayer","containerHeader","chmoConversions","nmr_1h","termId","nmr_13c","nmrStr","contentToText","hNmrCount","cNmrCount","nmrMsg","analyses_container","titleKind","titleStatus","containerHeaderDeleted","NMRiumDisplayer","qCheckPass","qCheckFail","atomNum","SpectraEditorBtn","AnalysisModeBtn","mode","toggleMode","isDisabled","orderModeBtn","editModeBtn","HeaderDeleted","mKind","mStatus","undoBtn","HeaderNormal","serial","toggleAddToReport","nmrMissing","statusChk","can_publish","tip","inReport","onToggleAddToReport","xm","typeMissing","statusMissing","datasetMissing","addToLabelBtn","public_analysis","defaultChecked","edited","enableMoleculeViewer","MolViewerSet","PK","RegenerateEdited","MolViewerListBtn","stopBubble","hNmrCheckMsg","cNmrCheckMsg","msCheckMsg","exact_molecular_weight","qCheckMsg","CONTAINER","sId","targetProps","tgTag","scTag","isOver","canDrop","borderStyle","borderWidth","oPanelCN","RndNotAvailable","RndNoAnalyses","renderCommentButton","handleCommentButtonClick","disableMode","RndOrder","orderContainers","panelOnSelect","RndEdit","handleCommentTextChange","commentBoxVisible","setCommentBoxVisible","renderCommentBox","headerDeletedFunc","headerNormalFunc","SampleDetailsContainers","isEqCId","indexedContainers","buildEmptyAnalyContainer","sortedContainers","newContainer","sortedConts","newSortConts","newIndexedConts","containers","sortArrByIndex","prevKey","analyContainer","NumeralInputWithUnitsCompo","metricPrefix","currentPrecision","valueString","showString","_handleValueChange","_onChangeCallback","_handleInputValueChange","inputField","selectionStart","lastChar","mc","matchMinus","_handleInputValueFocus","_handleInputValueBlur","togglePrefix","currentUnit","onMetricsChange","metricUnit","metricPrefixes","mp","nanOrInfinity","isFinite","unitDisplayMode","bsStyleBtnAfter","labelWrap","prefixSwitch","matTarget","tagProps","dropSample","dropMaterial","srcItem","srcType","getItemType","materialGroup","MATERIAL","notApplicableInput","iupacNameTooltip","refreshSvgTooltip","AddtoDescToolTip","solvConcentration","solventVolume","concn","Material","createParagraph","handleAmountUnitChange","handleMetricsChange","gasFieldsUnitsChanged","handleCoefficientChange","debounceHandleAmountUnitChange","debounce","yieldOrConversionRate","handleMaterialClick","UrlSilentNavigation","showReactionMaterial","materialVolume","molarity_unit","has_density","has_molarity","metric","metrics","permitOn","lockEquivColumn","gas_type","amount_unit","materialLoading","showLoadingColumn","error_loading","handleLoadingChange","materialRef","handleReferenceChange","materialShowLabel","handleShowLabelChange","show_label","recalculateYieldForGasProduct","vesselVolume","GasPhaseReactionStore","reactionVesselSizeValue","refMaterial","findFeedstockMaterial","feedstockMolValue","calculateFeedstockMoles","calculateYield","conversionRateField","condition","conversion_rate","allowedConversionRateValue","handleConversionRateChange","displayYieldField","equivalentOrYield","handleEquivalentChange","gaseousInputFields","gasPhaseData","gas_phase_data","getFieldData","isTimeField","isFieldReadOnly","updateValue","getFormattedValue","handleGasFieldsChange","turnover_number","part_per_million","time","pseudoField","gaseousProductRow","handleExternalLabelChange","materialId","externalLabel","handleExternalLabelCompleted","handleAmountChange","handleAmountTypeChange","amountType","newLoading","conversionRate","molecule_name_hash","gUnit","lUnit","molUnit","grm","vol","solVol","mlt","eqv","yld","ton","tofUnit","turnover_frequency","tofValue","handleAddToDesc","paragraph","handleDrySolventChange","dry_solvent","amountField","massBsStyle","delay","generateMolecularWeightTooltipText","error_mass","generalMaterial","deleteMaterial","isTarget","molecular_mass","molecular_weight","metricMol","metricMolConc","inputsStyle","permitCls","materialNameWithIupac","switchTargetReal","gaseous","isProduct","theoreticalMassPart","maxAmount","toggleTarget","solventMaterial","mw","drySolvTooltip","purificationSolventVolume","is_published","handleGasTypeChange","gasType","gasTypeValue","feedstockStatus","moleculeIupacName","iupacStyle","materialDisplayName","serialCode","SampleCode","MaterialCalculations","amount_ml","adjusted_amount_g","adjusted_amount_mol","adjusted_loading","adjusted_equivalent","ionic_liquids","reagents_kombi","ferrocene","dppf","EDC","Acenaphthylene","acetone","acetonitrile","Acetylacetone","AlkylFluor","Allylchlorodimethylsilane","Allyloxytrimethylsilane","Allyltriethoxysilane","Allyltriethylsilane","Allyltriisopropylsilane","Allyltrimethoxysilane","Allyltrimethylsilane","Allyltriphenyltin","Ammonia","ammoniumthiosulfate","Bathophenanthroline","benzene","Benzyltrimethylsilane","BERYLLIUM","BF3","BPin","Bistrifluoroacetamide","Bromine","Bromotrichloromethane","Bromotrimethylsilane","Butyllithium","Cerium","Chloranil","Chlorodicyclohexylphosphine","Chlorodiisopropylphosphine","Chlorodimethylvinylsilane","Chlorodiphenylphosphine","Chloroform","Chloromethyldimethylphenylsilane","Chloropentamethyldisilane","Chlorotriethoxysilane","Choline","Chromium","Cinchonidine","Cinchonine","Cobalt","Copper","Cyanomethylenetributylphosphorane","cyclohexane","Cyclohexyldiphenylphosphine","Cyclooctene","cyclopentane","Cyclopentylmethylether","Decamethylcyclopentasiloxane","Decamethyltetrasiloxane","Decyltriethoxysilane","Decyltrimethoxysilane","Diacetoxydimethylsilane","Diallyldimethylsilane","Dichlorocyclohexylmethylsilane","Dichlorodecylmethylsilane","Dichlorododecylmethylsilane","Dichlorohexylmethylsilane","Dichloromethylvinylsilane","Dichlorophenylphosphine","Dicyclohexylphenylphosphine","Dicyclopentadiene","Diethoxydimethylsilane","Diethoxydiphenylsilane","Diethoxymethylsilane","Diethoxymethylvinylsilane","Et2O","Diethylamine","NEt2","Diethylenetriamine","Diethylphenylphosphine","Diisobutyldimethoxysilane","Diisopropylamine","DIPA","Dimesitylfluoroborane","Dimethoxydimethylsilane","Dimethoxydiphenylsilane","Dimethoxymethylvinylsilane","Dimethylamin","NMe2","Dimethyldiphenylsilane","Dimethyldivinylsilane","Dimethylformamide","DMF","Dimethylphenylsilane","Dimethyltitanocene","Diphenyldichlorogermane","Diphenylpropylphosphine","Diphenylsilane","Diphenylsilanediol","Dipivaloylmethane","DTBP","DMSO","Dodecamethylcyclohexasiloxane","Dodecamethylpentasiloxane","Dodecyltriethoxysilane","Dodecyltrimethoxysilane","ethanol","EtOH","Ethoxydiphenylphosphine","Ethoxytriethylsilane","Ethylamine","Ethyldiphenylphosphine","Ethyllithium","Europium","Gold","Hafnium","Hexachlorodisilane","Hexadecamethylcyclooctasiloxane","Hexadecyltrimethoxysilane","Hexafluoroacetylacetone","Hexamethylbenzene","Hexamethylcyclotrisiloxane","Hexamethyldisilane","Hexamethyldisiloxane","Hexamethylditin","Hexamethylenetetramine","Hexaphenylcyclotrisiloxane","Hexaphenyldisilane","Hexaphenyldisiloxane","Hexyllithium","Hexyltriethoxysilane","Hexyltrimethoxysilane","HI","HCl","H2O2","Imidazole","Indan","Indene","Indoline","Iodine","Iodosodilactone","Iridium","Iron","Fe","FeOH","FeCl3","Isobutyllithium","isopropanpol","iPr","Isopropyldiphenylphosphine","Isopropyllithium","Lanthanum","LiBH4","LiBr","LiCl","LDA","LiOH","LiOMe","LiBF4","MgBr2","MgCO3","MgCl2","MgI2","MgSO4","Manganese","MnSO4","Methallyltrimethylsilane","methanol","MeOH","Methoxydiphenylphosphine","Methoxymethyltrimethylsilane","Methoxytrimethylsilane","Methylamine","Methyldiphenylphosphine","Methyldiphenylsilane","MeMgBr","MeMgCl","MeMgI","Molybdenum","Morpholine","DCC","DIC","DIPEA","NBS","BuLi","NCS","Neodymium","Nickel","HNO3","nitromethane","MeNO2","Octadecamethylcyclononasiloxane","Octadecyltriethoxysilane","Octadecyltrimethoxysilane","Octamethylcyclotetrasiloxane","Octamethyltrisiloxane","Octaphenylcyclotetrasiloxane","Octaphenyloctasilsesquioxane","Osmium","OsO4","Oxone","Oxygen","O2","Ozone","O3","PdC","PdCl2","Pentafluorophenol","pentane","Pentyltriethoxysilane","HIO4","Perylene","Phenylsilane","Phthalocyanine","Piperidine","Platinum","KOAc","KBH4","K2CO3","KCl","KCN","KF","KOH","KI","KOMe","KNO3","KMnO4","Pyridine","Quincoridine","Quincorine","Quinidine","Quinine","Quinuclidine","Rhenium","Rhodium","Ruthenium","RuCl3","Samarium","Scandium","SeO2","Silver","NaNH2","NaN3","NaBH4","NaBr","Na2CO3","NaCl","NaCN","NaOEt","NaF","NaH","NaOH","NaI","NaOMe","NaNO3","NaMnO4","Na2O2","sulfolane","SO3","H2SO4","SO2Cl2","Terbium","TBHP","tBuLi","Tetraallyltin","Tetrabromofluorescein","Tetrabutylgermane","Tetrabutyltin","Tetracyanoethylene","Tetradecamethylcycloheptasiloxane","Tetraethylgermane","Tetraethylsilane","Tetrahydroxydiboron","tetrahydroxytitanium","Tetrakis","Tetramethylgermane","Tetramethylsilane","TMS","Tetraphenylcyclopentadienone","Tetraphenylgermane","Tetraphenylporphyrin","Tetraphenylsilane","Tetraphenyltin","THF","Thulium","Titanium","toluene","Triacetoxyborohydride","Triacetoxyethylsilane","Tribenzylsilane","Tributylamine","Tributylchlorosilane","Tributylsilane","Trichlorocyclopentylsilane","Tricyclohexylphosphine","Triethoxyethylsilane","Triethoxyfluorosilane","Triethoxymethylsilane","Triethoxyphenylsilane","Triethoxyvinylsilane","Triethylamine","Triethylchlorogermane","Triethylenetetramine","Triethylsilane","TES","Triethylsilanol","Triethylsilylacetylene","Triethylvinylsilane","TFA","TFAA","Trifluoroacetylacetone","Trifluoromethanesulfonanilide","Trihexylphosphine","Trihexylsilane","Triisopropylsilane","Triisopropylsilylacetylene","Trimethoxyphenylsilane","Trimethylchlorogermane","Trimethylethoxysilane","Trimethylphenylsilane","Trimethylphosphine","TMSCl","TMSA","TMSN3","Trimethylsilylacetylene","Trimethylsilylcyclopentadiene","Triphenylantimony","Triphenylarsine","Triphenylchlorogermane","Triphenylphosphine","Triphenylsilane","Triphenylsilanol","Triphenylvinylsilane","Triphosgene","Tungsten","Vanadium","Vinyltrimethoxysilane","Vinyltrimethylsilane","water","Ytterbium","Yttrium","Zirconium","Boc2O","ToggleButton","isToggledInitial","onLabel","offLabel","onColor","offColor","tooltipOn","tooltipOff","isToggled","setIsToggled","buttonColor","toolTipMessage","newToggledState","MaterialGroup","addDefaultSolvent","headIndex","switchEquiv","switchYield","SolventsMaterialGroup","GeneralMaterialGroup","SwitchEquivButton","isReactants","tr","reaction_coefficient","eq","reagentList","reagentDd","smi","fetchBySmi","Molecule","conversionOrYield","refTHead","addSampleButton","addSampleToMaterialGroup","ionicLiquid","drySolvent","solventDensity","isCorrectType","MaterialGroupContainer","D3LineChart","drawChart","d3","decimalData","timeArray","hours","parseFloat","minutes","yMin","yMax","yExtent","linear","domain","linePath","zoomed","select","makeXaxis","tickSize","tickFormat","makeYaxis","attr","zoom","viewBoxWidth","viewBoxHeight","tween","ix","iy","axis","scale","orient","ticks","datum","LineChart","LineChartContainer","getDOMNode","EditableCell","editing","handleDoubleClick","onCellValueChange","inputOnChange","inputPlaceholder","displayValue","cellContent","onDoubleClick","EditableTable","newTime","newTemperature","handleTimeOnchange","handleTemperatureOnchange","handleNewTimeInput","handleNewTemperatureInput","checkDefaultTime","checkDefaultTemperature","updateTemperature","newData","ReactionDetailsMainProperties","showTemperatureChart","toggleTemperatureChart","onInputChange","changeUnit","temperatureTooltip","temperatureDisplay","temperature_display","tempUnitLabel","TempChartRow","isMethodDisabled","wrappedEvent","HelpInfo","optionalElement","observationPurification","hplc","solventsTL","PrivateNoteElement","isSaving","fetchNote","PrivateNote","PrivateNoteFetcher","fetchByNoteableId","saveNote","newNote","noteable_id","noteable_type","noteInput","dummy","handlePrivateNoteChanged","ReactionDetailsPurification","handlePurificationChange","handleOnReactionChange","handleOnSolventSelect","handlePSolventChange","deletePSolvent","dropPSolvent","handleMultiselectChange","obs","selectedVal","predefinedObs","localeCompare","predefined","concat_text_observation","changeEvent","sampleById","setAmount","srcSample","tagMaterial","tagGroup","extLabel","splitSample","buildNew","addMaterialAt","selectedOptions","tlc_solvents","additionQuillRef","purification_solvents","ReactionDescriptionEditor","gpTarget","oriRxn","nextRxn","extractNameFromOri","updRxnOriName","changeCurrentElement","GpContent","showReaction","dndStyle","ReactionDetailsDuration","setCurrentTime","copyToDuration","handleDurationChange","currentTime","toLocaleString","changeDurationUnit","fromStartStop","durationCalc","timePlaceholder","timestamp_start","timestamp_stop","refDuration","ReactionDetailsScheme","shouldDisplayYield","cCon","reactionDescTemplate","onChangeRole","renderRole","addSampleTo","handleOnConditionSelect","reactionVesselSize","updateVesselSize","updateVesselSizeOnBlur","changeVesselSizeUnit","resetGasPhaseStore","isNewSample","buildChildWithoutCounter","buildChild","insertSolventExtLabel","renderGPDnD","renderRolesOptions","opt","renderRoleSelect","optionRenderer","accordTo","refMaterialGroup","updatedReactionForReferenceChange","updateDraggedMaterialGasType","srcMat","srcGroup","tagMat","updatedSample","moveMaterial","GasPhaseReactionActions","setReactionVesselSize","setCatalystReferenceMole","handleMaterialsChange","updatedReactionForShowLabelChange","updatedReactionForAmountChange","updatedReactionForAmountUnitChange","updatedReactionForMetricsChange","updatedReactionForLoadingChange","updatedReactionForCoefficientChange","updatedReactionForAmountTypeChange","updatedReactionForEquivalentChange","updatedReactionForExternalLabelChange","updatedReactionForDrySolventChange","updatedReactionForGasTypeChange","updatedReactionForGasProductFieldsChange","updatedReactionForGasFieldsUnitsChange","updatedReactionForConversionRateChange","insertOps","elementDelta","updatedReactionWithSample","updatedSamplesForExternalLabelChange","updatedSamplesForDrySolventChange","markSampleAsReference","updatedSamplesForReferenceChange","toggleShowLabelForSample","updatedSamplesForShowLabelChange","setAmountAndNormalizeToGram","updatedSamplesForAmountChange","setUnitMetrics","updatedSamplesForCoefficientChange","updatedSamplesForEquivalentChange","calculateEquivalentForProduct","stoichiometryCoeff","calculateEquivalentForGasProduct","triggerNotification","isFeedstockMaterialPresent","updatedSamplesForGasTypeChange","amount_value","updateGasMoles","gasPhaseTime","tonValue","updateTONPerTimeValue","updatedSamplesForGasProductFieldsChange","convertedValues","convertTime","convertTurnoverFrequency","updatedSamplesForConversionRateChange","calculateEquivalent","refM","checkMassMolecule","referenceM","updatedS","errorMsg","mFull","mwb","deltaM","massA","massExperimental","maxTheoAmount","checkMassPolymer","massAnalyses","fconv_loading","isDecoupled","rId","belongTo","setRefreshCoefficient","referenceAmount","updatedGasPhaseData","updateFunction","solventCollapseBtn","arrow","vertical","conditionsCollapseBtn","updatesEquivalentForGasProductSamples","valueInLiter","vessel_size","minPadding","editedSample","allHaveNoConversion","headReactants","in","StringTag","arrComponents","subVal","ReactionDetailsProperties","solventsItems","unshift","rf_value","tlc_description","floatFormatter","MaterialNameWithIupac","WasteCheckbox","toggleWaste","waste","GreenMaterialGroup","onCoefficientChanged","refreshCells","autoHeight","getNonWaste","sumReducer","GreenMetrics","startsAmount","selectedStartsAmount","reactantsAmount","selectedReactantsAmount","solventsAmount","selectedSolventsAmount","pSolventsAmount","selectedPSolventsAmount","prodsAmount","selectedProductsAmount","sef","cef","cuef","aesm","aep","caep","cae","enableColResize","headerHeight","GreenChemistry","updateGroupData","factor","ExportSamplesBtn","startExport","CollectionsFetcher","expotSamples","ScifinderSearch","BTNS","substances","references","suppliers","btn","_type","rxn","molBreak","rl","xl","molfiles","_starting_materials","_reactants","_products","ctype","fetchSciFinder","host","renderButtons","Comment","commentable_id","commentable_type","buildWithElement","serialize","submitter","resolver_name","_content","_commentable_id","_created_by","_commentable_type","_status","_submitter","_resolver_name","_section","Element","classify","CommentFetcher","commentId","CommentManagementServices","COMMENT_BY_ID","fetchByCommentableId","commentableId","commentableType","COMMENT_BY_COMMENTABLE","prms","CREATE_COMMENT","UPDATE_COMMENT","DELETE_COMMENT","CommentActions","setCommentSection","fetchComments","toggleCommentModal","toggleCommentSection","CommentStore","handleToggleCommentModal","showCommentSection","handleSetCommentSection","handleFetchComments","handleToggleCommentSection","HeaderCommentSection","commentState","headerSection","sectionComments","CommentButton","setCommentState","CommentList","commentsTbl","CommentSection","DeleteComment","CommentDetails","disableEditComment","markCommentResolved","commentByCurrentUser","editComment","deleteComment","allComments","CommentModal","commentBody","commentObj","saveComment","scrollToTop","modalRef","toggleCollapse","commentsCollapseAll","handleClickOutside","renderCommentTable","enableUserSelectHack","nameInput","ReactionDetailsRepoComment","onReviewUpdate","canClose","buttons","ReactionDetails","activeAnalysisTab","sfn","hasSfn","showPublishReactionModal","commentScreen","handlePublishReactionModal","forcePublishRefreshClose","handleCommentScreen","handleFullScreen","handleValidation","handleResetValidation","handleModalAnalysesCheck","unseal","handleGaseousChange","updateReactionSvg","gaseousReaction","nextReaction","reactionFromNextProps","reactionFromNextState","nextActiveTab","nextActiveAnalysisTab","nextVisible","reactionFromCurrentState","sealed","hasAnalyses","startingMaterisls","pt","validatePt","validateMolecule","toggleCommentScreen","preferred_label","createReaction","updateReaction","reactionIsValid","hasMaterials","SMGroupValid","updateMaxAmountOfProducts","rfValueFormat","nameFromRole","newReaction","setReactionByType","handleProductClick","getCurrentURI","handleProductChange","updateMaterial","productLink","productData","reactionTab","unmountOnExit","handleSelectActiveAnalysisTab","reactionSVG","svgProps","reactionHeader","hasChanged","titleTooltip","formatTimeStampsOfElement","colLabel","rsPlanLabel","validation","fnUnseal","materialsSvgPaths","ReactionSvgFetcher","fetchByMaterialsSvgPaths","reaction_svg","updateReactionVesselSize","findReactionVesselSizeCatalystMaterialValues","catalystMoles","vesselSize","schemeTitle","tabContentsMap","checksum","onElementChange","green_chemistry","stb","visIdx","exportButton","panelStylePre","panelStyle","validationBlock","fullScreen","CheckBoxs","toggleCheckAll","customStyle","checkBoxs","setting","CheckBox","lgth","toggleSplSettings","toggleSplSettingsAll","toggleRxnSettings","toggleRxnSettingsAll","stdSetting","toggleSiRxnSettings","toggleSiRxnSettingsAll","rxlSetting","suiSetting","SectionReaction","settings","dangerousProducts","has_analyses","analysesPresent","showPuri","showDang","dangerouspro","StatusContent","SVGContent","isProductOnly","Showallchemi","MaterialContent","SolventContent","DescriptionContent","PurificationContent","puri","DangerourProductsContent","dang","TLCContent","tlcDescription","tlcSolvents","rfValue","ObservationContent","AnalysesContent","LiteratureContent","productsSvg","materialCalc","equiv_or_yield","table","dataRows","separator","puriText","dangText","showRecDes","init","sum","contentJSON","reactiondesc","counter","ProcedureRow","clean_desc","rmDeltaRedundantSpaceBreak","onlyBlank","deltaUserSerial","UserSerial","bold","comma","smn","deltaSampleMoleculeName","prdIdentifier","productContent","elemental_compositions","ec","productEA","cas","xref","deltaName","pFormula","pCAS","pMMass","MolecularMas","pEMass","ExactMass","pEA","pSmiles","pInChI","dSmiles","dInChI","ProductsInfo","disableAll","isDisableAll","materailsContent","stAndRe","prevContent","elm","Alphabet","stAndReContent","solvCon","solventsContent","prodCon","porductsContent","endingSymbol","symbol","rmHeadSpace","rmTailSpace","opsTailWithSymbol","DangerBlock","rmOpsRedundantSpaceBreak","dangContent","ContentBlock","synName","synNameContent","descContent","obsvTlc","tlcContent","frontBreak","obsvTlcContent","analysesContent","rdoi","doiContent","bibContent","bib","nodes","childNodes","docFragment","textContent","ZoteroBlock","bibs","SynthesisRow","TitleProduct","serialContent","thumb","ContentAtts","isImg","tn","RowProduct","SectionSpectrum","UNSAFE_componentWillUpdate","attArrIds","prdAtt","attIds","renderContents","rlRowCont","rowId","rlRowTp","tableBody","long","rinchi_long_key","web","rinchi_web_key","rowContent","CapitalizeFirstLetter","SectionDoiList","initGetDoi","ReportsFetcher","getDois","doiTbl","ds","objToKeyValPairs","ob","stdPreviews","splSettingsPairs","rxnSettingsPairs","configsPairs","previewsContent","setPairs","suiPreviews","SectionSiSynthesisStdRxn","suiStdRxnPreviews","rxlPreviews","doiPreviews","orderTarget","sourceProps","GENERAL","isStdTemplate","headerTitle","allContent","suiContent","ordersContent","CommonInput","onCompleteEdit","Serial","oddClass","stdSerials","suiSerials","molSer","doiSerials","reportStatusBtn","downloadTP","processTP","downloadBtn","archiveId","clickDownloadReport","processBtn","deleteBtn","deleteTP","clickToDelete","cloneBtn","cloneTP","clickToClone","rxlTooltip","templateLable","newLabel","file_name","EpsWarning","onImgFormatChange","ImgFormat","FileDescription","FileName","TemplateRender","report_type","toggleConfigs","toggleConfigsAll","stdConfig","spcConfig","filteredConfigs","suiConfig","suiStdRxnConfig","doiConfig","objTags","abstractSettings","abstractConfigs","templateId","GenerateReportBtn","allState","updateQueue","hasObj","showGeneReportBtn","settting","paramize","fetchPreviewTabs","ReportContainer","archivesTitle","unreadIds","unReadBadge","_templateOpts","alertTemplateNotFound","templateOpt","tabStyle","handleTemplateChanged","EmbeddedWellplate","cellStyle","confirmRemove","openWellplate","wellplateID","wellplateShowOrNew","hideImportConfirm","confirmWellplateImport","importWellplate","renderReadoutHeaders","readoutTitles","readout_titles","renderImportWellplateButton","renderReadoutFields","well","readouts","readout","renderWellplateMain","wells","sample_title","positions","renderPanelHeading","deleteWellplate","expandIconClass","Wellplate","ResearchPlanWellplates","handleWellplateClick","renderDropZone","wellplates","dropWellplate","ResearchPlanMetadata","researchPlanMetadata","alternate_identifier","related_identifier","geo_location","funding_reference","parentResearchPlan","parentResearchPlanMetadata","handleFieldChange","saveResearchPlanMetadata","ResearchPlansFetcher","postResearchPlanMetadata","research_plan_id","research_plan_metadata","updateResearchPlanMetadataDataCiteState","newItemByType","descriptionType","geoLocationPoint","latitude","longitude","addResearchPlanMetadataArrayItem","newItem","newCollection","removeResearchPlanMetadataArrayItem","updateResearchPlanMetadataArrayItem","fieldname","updateResearchPlanMetadataGeoLocation","locationItem","fundingReferenceItem","dataCiteState","ImageAttachmentFilter","filterAttachmentsWhichAreInBody","rpBody","uuidsOfImageAttachments","public_name","ResearchPlanDetailsAttachments","filterText","filterAndSortAttachments","sortBy","filteredAttachments","createAttachmentPreviews","onImport","confirmAttachmentImport","onAttachmentImportComplete","researchPlanId","importTableFromSpreadsheet","comparison","filesize","dateA","parseDate","dateB","valueOf","AttachmentFetcher","fetchThumbnail","attachmentId","renderImageEditModal","newAnnotation","getSvgString","combinedAttachments","attachmentNotificationStore","getCombinedAttachments","onUndoDelete","alignSelf","buttonObjects","ResearchPlanDetailsAddField","ResearchPlanDetailsDropTarget","RESEARCH_PLAN_FIELD","ResearchPlanDetailsDragSource","endDrag","getDropResult","ResearchPlanDetailsFieldRichText","renderEdit","renderStatic","ResearchPlanDetailsFieldKetcher","loadingMolecule","sdf_file","updateSVGFile","renderStructureEditorModal","ImageFileDropHandler","handleDrop","identifierOfAncestor","getIdentifierOfAncestor","attachmentFromFile","createAttachmentFromFile","old_value","valueOfField","ancestor","is_image_field","ResearchPlanDetailsFieldImage","onElementStoreChange","generateSrcOfImage","selecteds","researchPlanWithImageEntry","getBodyElementById","imageEntry","handleResizeChange","getAttachmentByIdentifier","is_annotationUpdated","imageSrc","accept","multiple","isLegacyImage","publicName","fetchImageAttachmentByIdentifier","annotated","CustomHeader","ascSort","descSort","clickToRename","columnClicked","handleColumnNameModalShow","enableSorting","ResearchPlanDetailsFieldTableColumnNameModal","columnNameValue","columnNameError","columns","handleColumnNameChange","HelpBlock","columnName","MeasurementCandidate","_selector","_canExport","sample_identifier","ResearchPlanDetailsFieldTableMeasurementExportModal","measurementCandidates","_measurementCandidates","getResearchPlanIdFromPath","_prevState","_snapshot","equal","researchPlanMatch","selectedCandidates","candidate","measurements","createMeasurements","measurement","readyForSubmit","candidatesSelected","researchPlanIdPresent","_selectAllButton","_toggleCandidate","_selectAll","candidate_has_no_errors","candidate_matches_prefix","prefixes","_readouts","readoutSelectors","_sampleColumnField","sampleColumn","matcher","valueMatcher","unitColumn","otherColumn","RegExp","valueColumn","candidates","sampleColumnField","uuidv4","_validateCandidate","ResearchPlanDetailsFieldTableSchemasModal","schemaNameValue","schemaNameError","handleSchemaNameChange","onUse","schemaTable","schemas","schema","ResearchPlanDetailsFieldTable","cellValueChanged","forEachNode","getColumnDefs","columnStates","getColumnState","applyColumnState","currentlyCollapsedInEditMode","startCollapsed","currentlyCollapsedInViewMode","columnNameModal","schemaModal","measurementExportModal","rowClicked","isDisable","uniqueId","buildColumn","handleColumnNameModalSubmit","handleColumnInsert","handleColumnRename","handleColumnNameModalHide","setGridOption","handleColumnResize","columnIdx","handleColumnDelete","handleRowInsert","rowIdx","handleRowDelete","handleSchemaModalShow","fetchTableSchemas","handleSchemasModalSubmit","schemaName","createTableSchema","handleSchemasModalHide","_handleMeasurementExportModalShow","_handleMeasurementExportModalHide","handleSchemasModalUse","handleSchemasModalDelete","deleteTableSchema","rowGetter","onSaveGridColumnState","sortedRows","forEachNodeAfterFilterAndSort","onSaveGridRow","addNewRow","applyTransaction","removeThisRow","removeThisColumn","onCellContextMenu","handleRenameClick","handlePaste","readText","lines","startUpdate","columnIndex","handleInsertColumnClick","onCellMouseOver","onCellMouseOut","toggleTemporaryCollapse","temporaryCollapseToggleButton","collapsed","collapseToggleIconClass","collapseToggleTitle","permanentCollapseToggleButton","onExport","contextMenuId","nextUniqueId","rowDrag","cellClass","gridWrapperClassName","animateRows","rowDragMultiRow","onCellEditingStopped","onColumnMoved","onColumnResized","onRowDragEnd","rowHeight","singleClickEdit","stopEditingWhenCellsLoseFocus","suppressDragLeaveHidesColumns","lastColumn","th","td","openSampleByShortLabel","openReactionByShortLabel","debug","SamplesFetcher","findByShortLabel","hasAuth","noAuth","elementError","ResearchPlanDetailsFieldSample","idle","showSample","renderSample","image","outline","sampleStyle","ResearchPlanDetailsFieldReaction","reactionStyle","ResearchPlanDetailsField","fieldHeader","tableIndex","onCopyToMetadata","copyableFields","copyToMetadataButton","fieldName","ResearchPlanDetailsBody","bodyFooter","ResearchPlanDetailsName","renderCopyToMetadataButton","ResearchPlanDetailsContainers","handleResearchPlanChange","ResearchPlanDetails","handleSwitchMode","handleNameChange","handleBodyChange","handleBodyAdd","clearMessages","createResearchPlan","updateResearchPlan","idOfFieldToReplace","upsertAttachments","handleBodyDrop","addBodyField","handleBodyDelete","removeFieldFromBody","newAttachments","updatedAttachments","handleAttachmentUndoDelete","exportFormat","export","handleExportField","exportTable","handleCopyToMetadata","args","handleAttachmentImportComplete","unionBy","wellplateIndex","wellplateId","importWellplateIntoResearchPlan","renderExportButton","Dropdown","renderResearchPlanMain","viewTooltip","EditButton","ViewButton","btnMode","renderAnalysesTab","renderAttachmentsTab","rootCol","is_copy","QcActions","setLoading","loadInfers","fetchFiles","QcStore","infers","handleLoadInfers","handleSetLoading","prevInfers","nextInfers","PubchemSigns","objPath","objWidth","objHeight","objTitle","xmlns","xmlnsXlink","xlinkHref","PubchemLcss","informArray","sourceRoot","imgWH","imgs","picArry","Value","StringWithMarkup","extract","Markup","Extra","inform","htmlDoc","DOMParser","parseFromString","StringValue","signs","ReferenceNumber","ElementalComposition","elementsList","elemental_composition","relatedLoading","compositonTableHeader","formula_changed","NumeralInput","numeralValue","_convertValueToNumeralValue","numeralFormat","Numeral","formatedValue","unformatedValue","unformat","addonAfterWrapper","buttonAfterWrapper","addonAfter","ElementalCompositionCustom","checkElementsSum","el_composition","handleElementsListChanged","handleElementalChanged","concat_formula","hideLoading","composition_type","ElementalCompositionGroup","el_composition_custom","display_error","formulaChanged","custom","PolymerSection","handleAmountChanged","handleCustomInfoNumericChanged","residue","loading_type","external_loading","mw_defined","handleCustomInfoChanged","handlePRadioChanged","e_compositon","handlePolymerTypeSelectChanged","handleSurfaceTypeSelectChanged","checkInputStatus","polymerFormula","customInfoRadio","additionalLoadingInput","rel_composition","rel_loading","polymerLoading","reaction_product","polymerType","surfaceType","surface_type","polymerCrossLinkage","cross_linkage","ToggleSection","NumericInputUnit","numericValue","setValue","conversionMap","convertedUnit","conversionFactor","toggleInput","convertedValue","valueToFormat","formattedValue","multiplier","weightConversion","handleFloatNumbers","convertValue","unitSwitch","newInput","handleInputValueChange","TextRangeWithAddon","reg","handleInputFocus","handleInputBlur","nums","lower","upper","addon","tipOnText","SolventDetails","deleteSolvent","onChangeSolvent","ratio","SampleSolventGroup","sampleSolvents","solv","menuContainerStyle","SampleDetailsSolventsDnd","SampleDetailsSolvents","updateSolvent","addSolvent","SampleForm","infoMessage","molarityBlocked","isMolNameLoading","moleculeFormulaWas","handleFieldChanged","updateMolName","updateStereoAbs","updateStereoRel","addMolName","handleRangeChanged","handleSolventChanged","fetchNextInventoryLabel","matchSelectedCollection","markSumFormulaUndefined","handleMassCalculation","calculateMolecularMass","handleMolarityChanged","setMolarity","handleDensityChanged","setDensity","handleMolecularMassChanged","setMolecularMass","structureEditorButton","infoButton","topSecretCheckbox","topSecretInput","drySolventCheckbox","decoupledCheckbox","decoupledInput","openMolName","updateMoleculeNames","molecule_name","stereoAbsInput","stereoRelInput","moleculeInput","mnos","mno","newMolecule","_molecule","mid","moleculeNames","onOpen","onNewOptionClick","updateRange","InventoryFetcher","fetchInventoryOfCollection","flash_point","decoupleMolecule","btnCalculateMolecularMass","markUndefinedButton","handleError","clearMolecularMass","MoleculeFetcher","calculateMolecularMassFromSumFormula","textInput","formControlStyle","nextInventoryLabel","overlayMessage","inputWithUnit","isPolymer","polyDisabled","sampleSolvent","solventInput","attachedAmountInput","numInput","notApplicable","gasSample","feedstockSample","prefixAmountG","prefixAmountMol","prefixAmountL","warn","numInputWithoutTable","mpx","sampleAmount","volumeBlocked","sampleDescription","descriptionInput","additionalProperties","melting_point_display","boiling_point_display","assignAmountType","enableSampleDecoupled","customizableField","dateFormatter","toLocaleDateString","month","day","SampleComputedProps","headerTooltip","valueGetter","tddft","s1_energy","t1_energy","delta_est","s1_osc","tadf_rate","suppressCellFocus","ComputedPropsContainer","showGraph","compute","onClickComputeBtn","computePropsFromSmiles","toggleGraph","lastCProp","confirmText","isDavGood","dav","isQckGood","qck","ansQck","isQcpGood","conclusionOwn","evalScore","ansHnmr","ansCnmr","ansMs","ansIr","curation","isOneDavFail","isAllQckGood","isQcpGoodBothHnmrCnmr","isQcpGoodBothMsIr","isQcpGoodHnmrOrCnmr","isQcpGoodMsOrIr","evalScoreStd1","AreaTitle","evalCurTitle","tpMsg","score","evalMsg","LineScore","clsName","evalLabel","scoreTxt","evalScoreTxt","tpBadge","txt","BadgeSuccess","BadgeFail","BadgeDefault","LineTitle","statusLabel","LineQcp","qcp","ansMac","ansOwn","matchMass","ansMac80","ansOwn80","ansMacF90","ansOwnF90","LineQck","LineDav","AreaSummary","infoTp","QcMolView","iconTp","iconByBool","iconByMargin","iconTpMs","statusTp","iconStatus","numFormat","digit","realFormat","makeDav","hasFiles","hasValidFiles","tableNmr","atom","real","diff","statusOwner","formatQV","BlockHnmr","exist","sigSent","sigReal","numAll","numAcpMac","numAcpOwn","countExpAtoms","countIdnAtoms","BlockCnmr","BlockMS","conclusion","emMass","colorStyles","tableIr","fgs","confidence","fg","colorLabel","sma","BlockIr","numFg","numFg80","numFg90","posMac80","posOwn80","posMac90","posOwn90","negMac90","negOwn90","numMac","numOwn","iconNmr","ansNmr","BlockConclusion","iconIr","prismQcs","qcs","irQc","msQc","hrmsQc","hnmrQc","cnmrQc","inferO","targetPred","targetTyp","hasInfer","valids","dt","pred","output","extractInfer","buildQcs","emm","molecule_exact_molecular_weight","makeQcp","ys","emw","isMatchMass","formatedMS","getDesc","evaluateMs","opStr","emwInStr","makeQck","svgs","reals","extractSignal","numWarMac","numRjtMac","numMisMac","countSignal","evaluateNmr","nmrQc","is1H","atomCountInFormula","atomCountInNMRDescription","atomCountCInNMRDescription","QcContent","negMac80","negOwn80","evaluateIr","QcMain","renderQcBtn","renderQcContent","iconClsName","NmrSimFetcher","fetchNmrdbById","NmrSimActions","updateNmrdb","needToFetch","spectrum","resetNMR","NmrSimStore","currentNmr","data13C","data1H","synced","handleUpdateNmrdb","handleResetNMR","response_1h","data1h","decodeNmrdb1H","assignNmrdb","response_13c","decodeNmrdb13C","spectrum13C","Jcampconverter","xy","spectra","yFormat","chart","$","aspect","targetWidth","LineChartWrapper","d3Ref","ViewAtNmrdb","is13C","smile","nmrdbLink","LinkToNmrdb","NmrSimTab","nmrSpectrum","nmrType","showChartNmrdb","chartOrWarning","warning","validateCas","boolean","filterCas","isnum","firstHyphenIndex","secondHyphenIndex","addHyphensToCas","digits","checkCasDigit","apiCall","FastInput","refInput","searchString","getCas","apiEndpoint","requestMethod","jsonTranformation","BaseFetcher","withoutBodyData","cjson","pjson","Fault","Code","fnHandle","PropertyTable","Properties","CanonicalSMILES","MeasurementsTable","navigateToSource","source_type","source_id","researchPlanShowOrNew","research_planID","measurementsStore","ancestor_ids","dataForSampleAvailable","sampleHeader","columnsForRow","_sampleOutput","_uniqueDescriptions","_measurementsWithDescription","measurementsForSample","descriptionColumn","descriptionColumns","measurementsForSamples","_measurementOutput","_navigateToSource","ConfirmDeletionModal","confirmationText","onConfirm","MeasurementsList","measurementToDelete","deleteMeasurement","hideConfirmationModal","renderEntry","measurementDisplay","MeasurementsTab","displayMode","loadMeasurementsForSample","renderDisplaySwitcher","dataForSampleHierarchyAvailable","displaySwitcher","displayData","Chemical","chemical_data","buildChemical","parameter","chemicalData","_chemical_data","_cas","ChemicalFetcher","fetchChemical","fetchSafetySheets","queryParams","vendor","queryOption","language","saveSafetySheets","safetyPhrases","chemicalProperties","openTab","setOpenTab","ChemicalTab","querySafetySheets","loadingQuerySafetySheets","searchStr","chemical","vendorValue","safetySheetLanguage","safetySheets","displayWell","stylePhrases","HazardPhrases","h_statements","precautionaryPhrases","p_statements","pictogramsArray","pictograms","fetchSafetyPhrases","fetchChemicalProperties","loadChemicalProperties","alfaProductInfo","merckProductInfo","mapToSampleProperties","querySafetyPhrases","renderChildElements","alfa_link","merck_link","checkMarkButton","copyButton","saveSafetySheetsButton","renderChemicalProperties","renderSafetySheets","savedSds","safetySheetPath","sdsStatus","mappedSafetySheets","alfa_product_number","merck_product_number","isValidDocument","renderSafetyPhrases","fetchedSafetyPhrases","phrases","handlePropertiesModal","checkSaveIconThermofischer","checkSaveIconMerck","loadingSaveSafetySheets","openInventoryInformationTab","openSafetyTab","openLocationTab","viewChemicalPropertiesModal","viewModalForVendor","updateDisplayWell","saveInventory","handleSubmitSave","editChemical","saveInventoryAction","parameters","alfaIndex","merckIndex","updateCheckMark","handleCheckMark","handleVendorOption","handleQueryOption","handleLanguageOption","paramObj","updateSampleProperty","rangeValues","lowerBound","NEGATIVE_INFINITY","upperBound","POSITIVE_INFINITY","boiling_point","melting_point","densityNumber","form","refractive_index","solubility","updateSample","chemicalStatus","conditionalOverlay","checkLabel","alfa_product_link","merck_product_link","locationInput","subLabel","modifyStr","ParentLabel","saveSdsFile","productInfo","vendorProduct","vendor_product","vendorParams","productNumber","pathArr","pathParams","sdsInfo","sdsLink","hasAlfaLink","Boolean","hasMerckLink","chooseVendor","closePropertiesModal","inventoryCollapseBtn","safetyCollapseBtn","locationCollapseBtn","inventoryInformationTab","locationTab","querySafetySheetButton","checkSavedSds","safetyTab","renderWarningMessage","renderPropertiesModal","fetchedChemicalProperties","PublishSampleModal","showSelectionUser","showSelectionAnalysis","handlePublishSample","validateSubmission","publishedAnalyses","plural","publishSample","publishSampleReserveDois","SampleDetailsRepoComment","fetchSample","rangeCheck","SampleDetails","isChemicalEdited","showElementalComposition","showChemicalIdentifiers","qrCodeSVG","isCasLoading","validCas","showMolfileModal","trackMolfile","smileReadonly","quickCreator","showInchikey","pageMessage","showPublishSampleModal","enableComputedProps","enableNmrSim","isCASNumberValid","handleMolfileShow","handleMolfileClose","toggleInchi","fetchQcWhenNeeded","decoupleChanged","handleFastInput","handleAssociateClick","handleRepoXvial","handleImportedReadoutChanged","imported_readout","smilesInput","handleMoleculeBySmile","molecule_id","molfileInput","inchistringInput","ob_log","handleInventorySample","inventory_sample","svgFile","fetchError","fetchSuccess","fetchMolecule","fetchFunction","fetchByMolfile","inventory_label","checkMolfileChange","decoupleCheck","matGroup","createSampleForReaction","updateSampleForReaction","updateSampleForWellplate","createSample","cleanBoilingMelting","handleElementalSectionToggle","handleChemIdentSectionToggle","handleSubmitInventory","handleExportAnalyses","downloadZipBySample","onCasSelectOpen","casArr","getMoleculeCas","sampleFooter","belongToReaction","downloadAnalysesBtn","sampleIsValid","saveAndCloseBtn","saveBtn","structureEditorModal","hasParent","parent_id","children_count","saveSampleOrInventory","sampleInventoryTab","sampleContainerTab","newSample","fromSample","sampleLiteratureTab","sampleImportReadoutTab","measurementsTab","moleculeComputedProps","isInStore","qualityCheckTab","nmrSimTab","isValid","is_scoped","elementalPropertiesItemHeader","elementalPropertiesItemContent","chemicalIdentifiersItemHeader","chemicalIdentifiersItemContent","moleculeInchi","moleculeCanoSmiles","moleculeMolfile","chemicalIdentifiersItem","samplePropertiesTab","customKeys","optical_rotation","rfvalue","rfsovents","supplier","private_notes","updateKey","moleculeCas","updateCas","saveButton","sampleUpdateCondition","floppyTag","timesTag","saveAndCloseSample","isChemicalTab","elementToSave","saveAndClose","save","saveForChemical","inventorySample","decoupleCb","transferToDeviceButton","selectedDeviceId","addSampleToDevice","sampleInfo","pubchemLcss","pubchem_lcss","Record","Reference","echa","SourceName","Section","TOCHeading","Information","pubchemCid","lcssSign","sampleAverageMW","sampleExactMW","svgOrLoading","molecule_inchistring","inchiLabel","inchiTooltip","molecule_inchikey","isPub","moleculeCreatorTooltip","initiateAnalysisButton","initiateAnalysisWithKind","a1","buildAnalysis","a2","a3","addAnalysis","sampleSvgPath","MolViewerBtn","fileContent","viewType","decouple","renderMolfileModal","molfileInputModal","isRepoSecretExternalLabel","is_repo_public","validateAssociate","messageBlock","ScreenDetailsContainers","handleScreenChanged","InfoLabel","EmbeddedResearchPlanDetails","handleUpdateResearchPlan","openResearchPlan","researchPlanID","numberOfAnalyses","subcontainer","deleteResearchPlan","saveResearchPlan","attachmentCount","ScreenResearchPlans","handleResearchPlanClick","handleAddResearchPlan","screen_id","getScreenIdFromPath","addResearchPlanToScreen","screenMatch","researchPlans","expandedResearchPlanId","dropResearchPlan","ScreenWellplates","buildUnassignedNodes","researchplans","newNodes","plan","nodeIds","ResearchplanFlowEditor","initialEditorData","toggleModal","labelInput","reactFlowInstance","useReactFlow","updateNodeInternals","useUpdateNodeInternals","initialNodes","initialEdges","edges","initialUnassignedNodes","setNodes","setEdges","unassignedNodes","setUnassignedNodes","currentEdge","setCurrentEdge","onNodesChange","changes","nds","applyNodeChanges","onEdgesChange","eds","applyEdgeChanges","onConnect","newEdge","animated","addEdge","onEdgeClick","_event","edge","onPaneClick","onEnter","showInteractive","newNode","handleClickToAddNode","toObject","cleanedNodes","defaultNodesWithoutLabel","initialData","defaultEdges","showEditor","previewFlowInstance","setPreviewFlowInstance","buildNodes","researchplan","defaultNodes","fitView","onInit","onNodeDoubleClick","flowConfiguration","elementsSelectable","nodesDraggable","nodesConnectable","panOnDrag","zoomOnScroll","zoomOnDoubleClick","selectNodesOnDrag","ScreenDetails","updateComponentGraphData","createScreen","updateScreen","researchPlanIndex","updateEmbeddedResearchPlan","screenHeader","propertiesFields","componentGraphData","switchToResearchPlanTab","expandResearchPlan","scrollToResearchPlan","_mouseEvent","WellContainer","hideOverlay","containerStyle","color_code","WELL","swapWells","WellplateLabels","alphabet","sampleNameLabel","wellplateShowSample","handleSampleClick","sampleImportedReadout","removeSampleFromWell","handleWellLabel","handleColorPicker","selectedColor","saveColorCode","bcStyle","wellLabels","renderWellContent","circleSize","onChangeComplete","WellOverlay","boxSizing","showOverlay","overlayTarget","overlayWell","overlayPlacement","onScroll","firstWell","secondWell","handleWellsChange","firstWellId","secondWellId","temp","droppedSample","wellId","ceil","setWellLabel","WellplatesFetcher","updateWellLabel","toggleOverlay","isWellActive","updateWellColorCode","setColorPicker","hex","WellplateList","handleReadoutOfWellChange","inputContainerStyle","inputFieldStyle","importedReadout","svgNode","Option","WellplateSizeDropdown","currentSize","selectOptionOfWellplate","changeSizeOption","triggerUIUpdate","changeSize","CustomSizeModal","isInteger","propertyIsInvalid","MAX_DIMENSION","updateDimensionsFromWellplate","applySizeChange","updateDimension","dimension","renderApplyButton","invalidStyleClass","renderSize","Static","showCustomSizeModal","xsOffset","WellplateProperties","deleteButtonRefs","showDeleteReadoutConfirm","changeProperties","showDeleteReadoutTitleConfirm","hideDeleteReadoutTitleConfirm","addReadoutTitle","handleAddReadout","deleteReadoutTitle","handleRemoveReadout","currentTitles","updateReadoutTitle","renderDeleteReadoutTitleButton","readoutTitle","WellplateDetailsContainers","handleWellplateChanged","templateInfo","WellplateDetailsAttachments","handleTemplateDownload","renderTemplateDownload","WellplateDetails","showWellplate","nextWellplate","createWellplate","updateWellplate","handlePrint","html2pdf","handleChangeProperties","handleTabChange","handleAttachmentImport","importWellplateSpreadsheet","handleAttachmentDownload","wellplateHeader","onDownload","printButtonDisabled","designer","WellplateModel","CollectionUtils","isReadOnly","isShared","CellLineName","nameSuggestions","CellLinesFetcher","getAllCellLineNames","renderNameSuggestion","cellLineDetailsStore","cellLines","currentEntry","changeCellLineName","getCellLineMaterialById","setMaterialProperties","defaultInputValue","Amount","initialValue","invalidInput","getStyleClass","isAmountValid","renderDecimalRepresentation","changeAmount","renderScienceViewButton","toExponential","scienceViewButton","InvalidPropertyWarning","propsToCheck","validationInfo","checkInputValidity","GeneralProperties","openPanel","renderOptionalAttribute","attributeName","onChangeCallBack","renderAttribute","optional","numeric","styleClass","renderBiosafetyLevel","changeBioSafetyLevel","renderAmount","styleClassUnit","unitComponent","renderPanelHeaderIcon","panelName","class","changeSource","changeDisease","changeOrganism","changeTissue","growthMedium","changeGrowthMedium","changeMutation","changeVariant","changeCryoMedium","optimalGrowthTemperature","changeOptimalGrowthTemp","changeGender","cellType","changeCellType","materialDescription","changeMaterialDescription","changePassage","changeContamination","changeItemName","itemDescription","changeItemDescription","OrderModeHeader","renderDeletedContainer","renderNotDeletedContainer","renderImagePreview","dragHooks","startDragFunction","endDragFunction","currentAnalysisContainer","switchPositionOfChildContainer","OrderModeRow","hoverOverItem","EditModeHeader","handleUndoDeletionOfContainer","handleDeleteContainer","EditModeRow","handleClickOnPanelHeader","AnalysesContainer","handleHoverOver","addEmptyContainer","containerId","handleStartDrag","draggingContainer","handleEndDrag","lastHoveredContainer","handleModeToggle","setChanged","renderAddButton","renderOrderModeButton","buttonText","buttonIcon","renderContainerPanel","analysisRows","CellLineDetails","mobXItem","adoptPropsFromMobXModel","createCellLine","updateCellLine","removeCellLineFromStore","renderHeaderContent","renderCloseHeaderButton","renderEnlargenButton","renderSaveButton","closeAfterClick","icons","renderSubmitButton","disabledButton","enabledButton","convertCellLineToModel","tabInfoHash","iconEl","deviceCtrl","literature_map","ElementDetails","deletingElement","offsetTop","handleResize","onDetailChange","checkSpectraMessage","scrollX","scrollY","windowHeight","spectraMsg","showedSpcMsgID","message_id","_el","isPending","publish_pending","getPublicationId","tabTitle","elKey","focusing","iconElement","fScrnClass","selectedElements","Elements","handleOnChange","InboxStore","handleNextClick","currentUnsortedBoxPage","inbox","numberOfAttachments","checkedDeviceIds","checkedDeviceAll","inboxModalVisible","inboxVisible","itemsPerPage","currentContainerPage","currentDeviceBoxPage","dataItemsPerPage","totalPages","activeDeviceBoxId","inboxSize","handleToggleInboxModal","InboxActions","toggleInboxModal","handleShowInboxModal","showInboxModal","handleFetchInbox","fetchInbox","handleFetchInboxCount","fetchInboxCount","handleFetchInboxContainer","fetchInboxContainer","handleRemoveAttachmentFromList","removeAttachmentFromList","handleRemoveUnlinkedAttachmentFromList","removeUnlinkedAttachmentFromList","handleRemoveDatasetFromList","removeDatasetFromList","handleDeleteAttachment","deleteAttachment","handleBulkDeleteAttachment","bulkDeleteAttachments","deleteContainer","handleBackToInbox","backToInbox","handleDeleteContainerLink","deleteContainerLink","handleCheckedAll","handleCheckedIds","handleCheckDeviceAttachments","checkDeviceAttachments","handleCheckedDeviceIds","handleCheckedDeviceAll","handlePrevClick","prevClick","nextClick","handleUpdateCreateElementDict","handleUpdateCreateElement","handleConfirmDelete","handleDeleteElement","deleteElementsByUIState","handleSetPagination","setInboxPagination","setInboxVisible","setActiveDeviceBoxId","handleFetchInboxUnsorted","fetchInboxUnsorted","handleChangeInboxFilter","changeInboxFilter","handleChangeInboxSize","changeInboxSize","emitChange","payload","sync","countAttachments","unlinked_attachments","inbox_count","updatedChildren","deviceBox","device_box","fromUnsorted","parentIndex","inboxItem","newInbox","newParent","updatedInbox","getAttachments","all_attachments","apply","updateCache","force","waitFor","dispatchToken","deviceBoxId","startIndex","endIndex","currentAttachments","checkedId","currentDeviceBox","allDatasetIdsFlat","allAttachments","allAttachmentsFlat","newCheckedIds","isSelected","MoveToAnalysisButton","matchingAnalyses","fetchMatchingSamples","InboxFetcher","toggleTooltip","matchingAnalysesCount","removeAttachment","DATA","UNLINKED_DATA","moveToAnalysis","assignToAnalysis","renderAnalysesButtons","renderMoveButton","align","abortButton","AttachmentContainer","inboxState","deletingTooltip","toggleAttachmentsCheckbox","isAttachmentChecked","largerInbox","textStyle","trash","checkBox","filenameTooltip","DatasetContainer","deleteDataset","deleteContainerLinkUnselected","confirmDeleteDataset","confirmDeleteAttachments","onDatasetSelect","attCount","datasetCheckbox","currentDataSetPage","DeviceBox","updatedPage","handleDatasetSelect","toggleSelectAllFiles","deleteCheckedDataset","deviceBoxVisible","handleDeviceBoxClick","newCheckedDeviceIds","attachmentIndex","currentItemsCount","itemsDeleted","attachmentIdsToDelete","checkedDeviceId","datasetToDelete","deleteDeviceBox","renderCheckAll","UnsortedDataset","datasetContainer","firstAttach","attachmentList","attachName","splitted","onModalHide","uploadToInbox","listGroupItem","removeAttachmentButton","dropzone","UnsortedDatasetModal","UnsortedBox","sortUnsortedItem","currentItems","toggleSelectAllCheckbox","deleteCheckedAttachment","unsortedVisible","handleFileModalOpen","handleFileModalHide","handleUploadButton","unsortedBox","unsorted_box","folderClass","uploadModal","uploadButton","InboxModal","handleSizingIconClick","newColMdValue","colMdValue","getSizeLabel","changeSortColumn","handleMouseDown","handleMouseMove","handleMouseUp","div","clientX","clientY","renderPagination","pageNumbers","handlePageChange","renderSizingIcon","onClickInbox","pageNumber","collectorAddress","refreshInbox","inboxSubtrees","boxes","collectorAddressInfoButton","CopyToClipboard","renderSortButton","showCollectionTree","panelClass","inboxDisplay","CalendarEntryEditor","onClickBackground","navigationLink","titleInput","onShowLink","saveEntry","calendarTypes","notifyUserList","notAccessible","clearIcon","currentView","setCurrentViewForEventRenderer","capitalize","CalendarEvent","shortTitle","AllViews","Views","agendaHeaderFormat","culture","localizer","agendaDateFormat","dayFormat","dayRangeHeaderFormat","monthHeaderFormat","dayHeaderFormat","weekdayFormat","momentLocalizer","DragAndDropCalendar","withDragAndDrop","BaseCalendar","ModalWidth","ModalHeight","ColorCache","DragThreshold","getPreviewStyleArgs","getWindowStyleOffsets","allDayAccessor","idToColorComponent","getEntryColor","getGreen","getGreenBlue","getRedGreen","getRedBlue","canEditEntry","buildNewEntry","onHandleTimeUpdate","getEventableIcon","eventStyleGetter","Calendar","scrollTime","setHours","setMinutes","showTimeSlotEditor","currentEntryEditable","backgroundClickToClose","startDrag","dragging","dragDisabled","windowPreviewState","windowPreviewStateLast","windowPreviewArgs","windowStyleArgs","windowOffsets","isFullScreen","showOwnEntries","onRangeChange","closeCalendar","selectEntry","selectSlotEvent","closeItemEditor","handleEntryKeyUpdate","onStartDrag","onLockBackgroundClose","onFullScreen","onShowOwnEntries","onDrag","onDragStop","enableDrag","disableDrag","draggleHtmlRef","evType","tagName","partialWindow","documentElement","clientWidth","clientHeight","targetRect","SmallScreen","hideFactor","newRange","lastDate","filterEntries","smallScreen","defaultPosition","filteredEntries","dragPosition","onStart","onStop","components","events","views","startAccessor","endAccessor","selectable","onView","onSelectEvent","onSelectSlot","onEventDrop","onEventResize","step","scrollToTime","eventPropGetter","showMultiDayTimes","ProgressModal","LoadingStore","loadingWithProgress","filePool","progressValue","ProgressBar","progress","togglePanel","searchResultsCount","toggleSearch","toggleSearchResults","clearTabCurrentPage","handleClear","clearSearchResults","showErrorMessage","detail_search_values","detailSearchValues","searchValues","searchModalSelectedForm","publicationSearchValues","advancedSearchValues","changeSearchFilter","storedFilter","searchFilters","filterSearchValues","addErrorMessage","showSearchResults","removeErrorMessage","advanced_params","page_size","loadSearchResults","clearSearchAndTabResults","searchValuesByFilters","searchResultVisible","sub_fields","sub_values","sub","subContent","value_system","col_name","searchValuesBySubFields","changeSearchValues","panelVariables","defaultClassName","invisibleClassName","search_result_panel_visible","inactiveSearchClass","searchVisible","inactiveResultClass","search_icon","resultIcon","result_icon","searchTitle","resultTitle","advanced","option_layers","screens","mapperFields","unitMapperFields","searchElement","mapperOptions","fieldOptions","SelectFieldData","specialMatcherFields","selectedFieldOption","logicalOperators","rxnos","formElement","addAdvancedSearchValue","formElementValue","fieldColumn","temperatureConditions","durationConditions","checkValueForNumber","filterTreeNode","defaultValueField","allowClear","dropdownStyle","valueField","dsKlasses","layoutTabs","genericFields","genericSelectOptions","fieldsByTab","datasetOptions","datasetSelectOptions","inventoryData","SampleInventoryFieldData","analysesData","AnalysesFieldData","measurementData","MeasurementFieldData","validFieldTypes","defaultDetailSearchValues","addGenericFieldsByLayers","mappedValues","select_options","dataset_select","currentGenericElement","element_table","pushSegmentToSegmentField","tabFields","labelWithInfo","optionsForSelect","genericOptions","optionKey","datasetOptionsByKey","term_id","FieldOptions","getGenSI","selectOption","ButtonOrAddOn","subFieldId","dangerouslySetInnerHTML","__html","componentHeadline","searchValueByStoreOrDefaultValue","handleSubFieldChanged","setSearchStoreValues","handleTableFieldChanged","subValue","optionField","valueSystem","valueByType","removeDetailSearchValue","cleanedValue","subValuesForSearchValue","matchByField","searchSubValuesLength","typesWithSubValues","addDetailSearchValue","subValues","activeUnitIndex","nextUnitIndex","fieldsByType","keyLabel","checkboxInput","selectInput","textWithAddOnInput","rxnoChmosInput","systemDefinedInput","subFields","inputGroupInput","selectedFieldValue","selectedUnitValue","tableInputFields","subGroupWithAddOnFields","solventSelect","handleSelectTab","changeActiveTabKey","addTabToTabFields","cond_fields","mapOptions","activeTabKey","tabResult","openDetail","tabCurrentPage","tab_current_page","currentPageNumber","changeTabCurrentPage","contentList","resultsByPage","tabResultByPage","tabSearchResultValues","searchByIds","id_params","model_name","total_elements","with_filter","list_filter_params","per_page","loadSearchResultTab","copyToClipboard","clipboardText","shortLabelWithMoreInfos","infos","previous","previousMolecule","splittedIds","number","searchResultValues","visibleTabs","setVisibleTabs","setCurrentTabIndex","handleAdoptResult","preparedResult","prepareResultForDispatch","setSearchById","dispatchSearchResult","handleAdopt","adoptResultAndOpenDetail","resultObject","firstElements","SearchValuesList","resultErrorMessage","showResultErrorMessage","ResultsCount","SearchResultTabContainer","itemClass","searchResultNavItem","ResultButtons","panelVars","advancedValues","lastInputRow","handleChangeElement","changeSearchElement","SelectSearchTable","ToggleButtonGroup","SwitchToAdvancedOrDetailSearch","advancedOrDetail","activeClass","changeSearchType","htmlFor","dynamicRow","renderDynamicRow","StructureEditor","structure","setMolfileInFrame","setMfFuncName","getMfFuncName","getMfWithCallback","getSVGFuncName","getSVGWithCallback","ketcherRailsValues","searchModalVisible","structureDef","changeKetcherRailsValue","tanimoto","searchValuesByMolfile","PublicationFieldData","citationOptions","addPublicationSearchValue","Components","TextSearch","ketcher","KetcherRailsForm","referenceValues","empty","Spinner","searchModalMinimized","searchTypeTextClass","searchTypePublicationClass","searchTypeStructureClass","changeSearchModalSelectedForm","toggleSearchModalMinimized","fallback","Search","setSearchSelection","fetchBasedOnSearchSelectionAndCollection","showGenericElCriteria","showSearchModal","MoveOrAssignButton","assignDisabled","moveDisabled","RemoveOrDeleteButton","removeDisabled","deleteDisabled","ShareButton","PermissionsFetcher","fetchPermissionStatus","PermissionActions","PermissionStore","sharing_allowed","deletion_allowed","remove_allowed","handleFetchPermissionStatus","ManagingModalCollectionActions","collectionOptions","previousProps","writableColls","colls","coll","collectionEntries","cState","cUnshared","cShared","cSynced","sharedR","syncInR","cAll","ui_state","submitButton","ManagingModalDelete","deleteSubsamples","handleCheck","ManagingModalRemove","ManagingModalTopSecret","upState","stateObj","List","ManagingActions","handleButtonClick","onPermissionChange","initializeAsyncState","collectionChanged","hasSel","checkUIState","upStateResult","genericNames","updateElementsCollection","removeElementsCollection","assignElementsCollection","deleteElements","isAll","noSel","CreateButton","sampleCount","wellplateCount","createBtn","getSampleFilter","filterParamsFromUIStateByElementType","getReactionId","getCellLineId","isCopySampleDisabled","sampleFilter","copySample","fetchSamplesByUIStateAndLimit","isCopyReactionDisabled","copyReactionFromId","isCopyCellLineDisabled","copyCellLine","copyCellLineFromId","createWellplateFromSamples","bulkCreateWellplates","wellplateInput","bulkCreateWellplatesFromSamples","createWellplateModal","createScreenFromWellplates","fetchWellplatesByUIState","createElementOfType","noWellplateSelected","itemTables","sl","ael","showReportContainer","showFormatContainer","showPredictionContainer","showComputedPropsGraph","ReportUtilButton","enableReactionPredict","predDiv","showLiteratureDetail","ModalImport","importSampleAs","attachmentFile","attachment_file","filterUIState","ModalExport","chemicals","checkedAllColumns","toggleColumns","toggleColumnsSample","toggleColumnsReaction","toggleColumnsMolecule","toggleColumnsWellplate","toggleColumnsAnalyses","toggleColumnsChemicals","toggleColumnsAll","toggleColumnsAllSample","toggleColumnsAllReaction","toggleColumnsAllMolecule","toggleColumnsAllWellplate","toggleColumnsAllAnalyses","toggleColumnsAllChemicals","buttonBar","sdfChemicalExport","filteredColumns","dropup","createDownloadFile","exportType","exportSelections","filteredtables","chainedItems","ModalReactionExport","ModalExportCollection","checkboxes","embargoRoots","gatherCheckboxes","processing","handleCheckAll","handleCheckboxChange","rootId","hasChecked","sync_collections","nested","renderCollections","renderSubtrees","renderEmbargoCollections","renderUserSubtrees","renderSharedCollections","renderButtonBar","bStyle","bClass","bTitle","full","ModalExportRadarCollection","MetadataFetcher","editAction","renderMetadata","archiveUrl","ModalImportCollection","ExportImportButton","showRadar","hasRadar","editMetadataFunction","exportCollectionToRadarFunction","exportFunction","exportReactionFunction","importSampleFunction","exportCollectionFunction","importCollectionFunction","importAsChemical","importSamplesFromFile","customModal","exportCollectionsToFile","importCollectionsFromFile","exportCollectionToRadar","ScanCodeButton","showQrReader","scanError","scanInfo","startBarcodeScan","startQrCodeScan","handleKeyPress","downloadPrintCodesPDF","tmpJson","initializeBarcodeScan","Quagga","inputStream","decoder","readers","barcode","codeResult","handleScan","qrReader","onScan","checkJSONResponse","stopQuagga","codeInput","code_log","root_code","which","scanInput","scanModal","scanAlert","selectedConfig","PDFDocument","mergedPdf","pdfPromises","newUrl","configValue","PrintCodeFetcher","fetchMergedPrintCodes","pdfBytes","pdfToMerge","copyPages","getPageIndices","addPage","mergedPdfBytes","blob","Blob","createObjectURL","disabledPrint","changeUrl","urlTitle","handleNotification","nots","needCallback","infoTimeString","newText","sender_name","callback","acknowledgedMessage","report_id","refreshComputedProp","fetchResearchPlanById","NoticeButton","dbNotices","messageEnable","messageAutoInterval","lastActivityTime","idleTimeout","serverVersion","localVersion","envConfiguration","messageAck","detectActivity","startActivityDetection","nextNots","notIds","nextNotIds","newMessages","remMessages","stopActivityDetection","fetchMessages","messages","messageFetch","documentIndex","applicationTag","scripts","applicationTagValue","configuration","ackAll","ackIds","ack","clientLastActivityTime","addMessage","renderBody","bMessages","not","noticeNum","btnStyle","btnClass","PermissionConst","sampleTasksStore","sampleTasks","openSampleTaskCount","showSampleTaskInbox","ContextActions","isCreateDisabled","NavigationModal","hideModal","colMenuTooltip","toggleCollectionTree","fetchGenericEls","extraRules","sampleTask","setSample","showDeletionConfirmationDialog","setShowDeletionConfirmationDialog","useDrop","dropRef","removeSample","saveSampleTask","assignSample","display_name","scan_results","scan_result","measurement_value","measurement_unit","sample_task_result","result_value","result_unit","contentForSampleTask","reasons","required_scan_results","missing_scan_results","sampleTaskStillOpenReasons","confirmationResult","deleteSampleTask","dropConfig","getSampleFromItem","sampleTaskForSample","sendErrorNotification","createSampleTask","singleScanDropRef","doubleScanDropRef","sampleDropzone","display_value","hideSampleTaskInbox","sortedSampleTasks","ProfilesFetcher","uploadUserTemplates","deleteUserTemplate","createAddAttachmentidToNewUserTemplate","deleteIdx","template_details","removeUserTemplate","listOfLocalid","localItem","updateUserTemplateDetails","listOfLocalNames","struct","onEventListen","updateUserKetcher2Options","App","_props","showGenericWorkflow","propGenericWorkflow","handleUiStoreChange","documentKeyDown","handleReviewStoreChange","fetchOlsRxno","fetchOlsBao","setUsertemplates","fetchSegmentKlasses","fetchDatasetKlasses","fetchEditors","fetchKetcher2Options","patchExternalLibraries","handleStorageChange","removeLocalStorageEventListener","storageListener","OnEventListen","plugins","parseType","predicate","extends","collectionTree","FlowViewerModal","fnHide","routesUtils","showMetadata","showOrNew","showDeviceManagement","showFwdRxnPrediction","appRoutes","Sentry","sendClientReports","dsn","Integrations","tracesSampleRate","Provider","RootStore","LoginOptions","fetchUserOmniauthProviders","userProviders","providers","setProviders","credential","setCredential","scifinderCredential","access_token","expires_at","InventoryLabelSettings","prefixValue","setPrefixValue","setNameValue","counterValue","setCounterValue","setOptions","selectedCollections","setSelectedValue","currentInventoryCollection","setInventoryLabels","spinner","setSpinner","setErrorMessage","assignOptions","inventoryCollections","assignedOptions","groupLabel","groupObject","fetchLabelsAndCollections","combinedData","inventory_collections","optionsArray","updateUserSettings","collectionsIds","collectionIds","updateInventoryLabel","collection_ids","error_type","updatedCollectionInventories","updateInventoryLabelsArray","handleSelectOptionChange","selectedIds","findCollectionIds","collectionGroup","findInventory","selectionMode","prefixString","inputValue","parsedValue","UserCounter","fetchKlasses","handleCounterChange","handleUpdate","counters","updateUserCounter","genericEntities","counterBody","nextNum","CitationType","NotificationStore","notificationSystem","handleRemoveByUid","handleNotificationImportSamplesFromFile","handleUploadErrorNotify","uploadErrorNotify","handleSetComponentReference","setComponentReference","addNotification","removeNotification","handleClearNotifications","clearNotifications","sdf","OlsTreeSelect","OnSelectChange","cleanedOlsEntry","removeArtificalId","parts","bao","treeDefaultExpandedKeys","gcms","ir","crystal_structure","quillViewerRef","viewerRef","specialCharacters","toolbarSymbol","updateEditorValue","handleEditorValue","renderCharacters","debouncedOnChange","nextVal","oldContents","bounce","toolbarItems","cursorPosition","insertText","quillOptions","handlers","oldDelta","selector","renderQuillToolbarGroup","fToolbarOptions","extraToolbarOptions","formatGroup","getOwnPropertyNames","elementValue","character","renderCustomToolbar","customToolbarElement","renderCustomDropdown","toolbarDropdown","customToolbar","UserLabelModal","defaultColor","handelNewLabel","handleSaveLabel","handleBackButton","handleAcessChange","handleEditLabelClick","access_level","descInput","colorInput","updateUserLabel","renderUserLabels","badgeStyle","accessLabel","renderLabels","renderLabel","accessList","showLabelModal","EditUserLabels","selectedLabels","handleSelectChange","setUserLabels","curLableIds","user_labels","defaultLabels","ll","labelOptions","ReviewUserLabels","reviewLabel","ShowUserLabels","showLabels","elementLabels","SearchUserLabels","DateInfo","preText","formattedPublishedDate","formattedSubmittedDate","formattedUpdatedDate","em","molecularMass","exactMolecularWeight","INCHIKEY_DUMMY","getCollectionIcon","_collectionLabel","collectionIcons","ExtInfo","LicenseIcon","hasCoAuthors","presentHref","presentAlt","presentPath","cc0Alt","PublicAnchor","anchorId","PublicCommentModal","modalShow","pageType","pageId","reviewerComment","userInfo","btnTbl","commentModal","_labels","PublicReactionProperties","reactionTemperature","reactionDuration","CalcDuration","indicatorStyle","PublicReactionTlc","UnsealBtn","getElementType","al","PublishBtnReaction","publishedId","public_reaction","notPublishable","btnTip","btnTipNotPub","PublishBtn","public_sample","isPoly","_contains_residues","ReviewPublishBtn","isDecline","decline","isEdit","reviewBtn","commentBtn","OrigElnTag","elnInfo","eln_info","PublishedTag","tagType","clickType","LabelPublication","publishedBy","openUrl","pub","pubCreatedAt","ChemotionTag","firstOnly","chemotionTag","chemotion","chemotion_first","last_published_at","formattedTime","SvgPath","SVGView","UserCommentModal","isLogin","setModalShow","commentInputRef","userComment","freeze","P_STATE","ACCEPTED","PENDING","REVIEWED","addAffTooltip","removeAffTooltip","affbody","countries","organizations","departments","onAddAff","onDeleteAff","affs","mainAff","aid","removeBtn","lineAff","moreAff","isCreatable","secAff","leaders","selectedAuthors","handleSelectAuthors","onAddNewAuthor","onAddNewReviewer","loadOrcid","handleDeleteAuthor","handleDeleteLeader","collaborationsResult","countriesResult","organizationsResult","departmentsResult","formatAffiliations","leader","newLeaders","author","selCol","affIds","ca","newAuthor","flattenDeep","newLeader","findAndCreateAff","aff_output","cx","saveRepoAuthors","loadOrcidByUserId","orcids","cix","authorIds","btnReviewer","renderLeaders","tbodyLeaders","onClickYes","tbodyAuthors","stateStyle","formatPercentage","numValue","MAGrid","xvialCompounds","fnSelect","suppressMovable","getRowStyle","x_data","xid","selectedRow","x_short_label","CompoundList","xvialCom","selectXvial","allowed","hasData","MARequestModal","allowRequest","requestModalShow","setRequestModalShow","rInput","setRInput","compound","MADataModal","saveCallback","dataModalShow","setDataModalShow","setNewData","newComp","setNewComp","xcomp","_result","rangeRegex","startValue","endValue","taggable_type","getAuthorLabel","formatPhysicalProps","meltingPoint","getFormattedRange","boilingPoint","showPhysicalProps","submitException","elementExceptions","rules","exception","rule","checkSegment","klass_label","required","checkLayer","requiredFields","ColoredOverlay","DeleteConfirmBtn","onClickNo","tipPlacement","compact","ExactFormula","sFormula","mFormula","REQUIRED_TIP","CONTRIBUTOR_TIP","SCHEME_TIP","DESCRIPTION_TIP","ADDITIONAL_INFO_TIP","requiredField","additionalInformation","helpDescs","handleLinkInputChange","removeLinkButton","listLinkItem","renderHyperLinkInput","renderHyperLinkList","hyperLinks","pdfjs","GlobalWorkerOptions","workerSrc","fetchSrc","isPdf","numOfPages","fetchImage","handleImageError","onDocumentLoadSuccess","previousPage","nextPage","changePage","numPages","offset","fetchImageAttachment","fileSrc","fetchFilename","isEvalSupported","onLoadSuccess","pdf","CONFIG_ID","UserMatrixCheck","PrintCodeModal","setPreview","urlError","setUrlError","setJson","loadData","errorHandler","tmpUrlError","buildURL","configKey","fetchPrintCodes","setSelectedConfig","isOpen","SelectionField","permitWrite","ContainerDatasetField","handleModalOpen","downloadClick","downloadZip","gdsClick","downloadDataset","gdsDownload","klass_ols","absOlsTermId","targetContainerDataField","dropTargetTypes","dataTarget","collectTarget","GenericDS","dataset_klass_id","datasetKlassId","klassOls","klassLabel","GenericDSDetails","genericDS","LayerPlain","absOlsTermLabel","InstrumentsFetcher","fetchInstrumentsForCurrentUser","instruments","ContainerDatasetModalContent","updateAttachmentsFromContext","filterAttachments","valueBeforeFocus","timeoutReference","prevMessages","attachmentGroups","Original","BagitZip","Combined","Processed","timeout","doneInstrumentTyping","handleDSChange","handleAttachmentBackToInbox","classifyAttachments","prevAttachments","instrument","newAttachment","is_pending","handleInstrumentValueChange","onInstrumentChange","resetInstrumentComponent","filterTextLower","filteredGroups","subGroup","Pending","baseName","showInstruments","fetchInstruments","debounced","selectInstrument","focusInstrument","newFocus","abortAutoSelection","renderInstruments","renderAttachmentRow","hasProcessedAttachments","groupName","instRef","getAttachmentsOfMessages","ContainerDatasetModal","toggleNameEditing","isNameEditing","datasetInput","localName","instrumentIsEmpty","newName","attachmentTooltip","metadataTooltip","AttachmentsButton","MetadataButton","flexShrink","AttachmentDropzone","targetAttachmentDropzone","handleAddWithAttachments","analysisContainer","NewSession","signUp","disable_signup","signIn","disable_db_login","acceptCharset","confirmButton","gotItButton","addUserButton","flexRow","lightRow","darkRow","tableData","GroupElement","hideAdminAlert","showAdminAlert","showRowAdd","adminPopoverTarget","usersToggled","rowAddToggled","toggleRowAdd","add_admin","rm_admin","currentGroup","onChangeData","onDeleteGroup","onDeleteUser","admin","addUser","destroy_group","renderAdminButtons","renderUserButtons","isCurrentUserAdmin","canDelete","adminButtonStyle","showInfo","containerPadding","UserSettingsFetcher","getAutoCompleteSuggestions","getAllAffiliations","createAffiliation","updateAffiliation","deleteAffiliation","setAffiliations","countryOptions","setCountryOptions","orgOptions","setOrgOptions","deptOptions","setDeptOptions","groupOptions","setGroupOptions","inputError","setInputError","setErrorMsg","currentEntries","to","prevItems","onChangeHandler","updatedAffiliations","newInputErrors","handleSaveButtonClick","handleCreateOrUpdateAffiliation","prev","Creatable","DropdownIndicator","IndicatorSeparator","choice","allowCreate","clearButtonTitle","showPopperArrow","showMonthYearPicker","handleDeleteAffiliation","sortList","addUserTooltip","refreshOrcidTooltip","AuthorModal","showNewUser","findUsers","findOrcid","handleAddUser","onRefreshOrcidAff","affOption","addCollaboratorAff","aff_id","deleteCollaboratorAff","refreshOrcidAff","firstName","lastName","search_key","fetchUsersByNameFirst","fetchandAddCollaboratorByOrcid","AddMyCollaboration","createAdd","nilFields","createAddMyCollaboration","handleDeleteCollaborator","deleteCollaboration","searchTbody","orcidRefreshBtn","refreshAffByOrcid","newAff","newUserPanel","handleDeleteGroup","currentGroupId","currentGroups","cg","findIdx","findAdmin","handleAffiliationsHide","showAffiliations","showAuthorsModal","currentDevices","showSubscription","currentSubscriptions","showDeviceMetadataModal","handleLabelShow","handleLabelClose","handleAuthorsShow","handleAuthorsClose","handleSubscriptionShow","handleSubscriptionClose","handleDeviceMetadataModalShow","handleDeviceMetadataModalClose","handleAffiliationsShow","logout","handlefetchDeviceMetadataByDeviceId","deviceID","fetchDeviceMetadataByDeviceId","fetchCurrentGroup","fetchCurrentDevices","fetchChannelWithUser","groupFirstName","groupLastName","groupAbbreviation","subscribe","subscribeChannel","actSubscription","group_param","renderDeviceButtons","tBodyGroups","tBodyDevices","renderSubscribeModal","renderDeviceMetadataModal","readonly","templatesLink","moderatorLink","showSuggestions","suggestionFocus","inputWidth","keyboardContext","doneTyping","initInputWidth","offsetWidth","focusNewSuggestionIndex","newSuggestionIndex","focusSuggestion","sF","isString","newFocusDom","listSuggestions","scrollTop","offsetHeight","resetComponent","fetchSuggestions","handleValueChange","keyboardState","selectSuggestion","selectedSuggestion","selectedName","renderSuggestions","cell_line_material_name","cell_line_sample_name","suggestion","suggestionType","typeLabel","inchiString","alist","nmriumData","is2D","iframeRef","receiveMessage","handleNMRDisplayerLoaded","sendJcampDataToNMRDisplayer","loadNMRDisplayerHostInfo","requestDataToBeSaved","requestPreviewImage","savingNMRiumWrapperData","findDisplayingSpectra","findDisplayingSpectrumID","buildPeaksBody","readNMRiumData","isIframeLoaded","showModalNMRDisplayer","UIFetcher","fetchNMRDisplayerHost","nmrium_url","nmriumOrigin","nmriumWrapperHost","is2DNMR","eventData","eventDataType","cleaningNMRiumData","blobData","iframeCurrent","postMessage","fetchedFiles","listFileContents","dataToBeSent","buildDataToBeSent","spectraInfos","fileToBeShowed","bufferData","parseBase64ToArrayBuffer","blobToBeSent","dataItem","File","arrNMRiumSpecs","nmriumSpec","arrNMRiumFiles","nmriumDataEncoded","decodedData","base64","imageBlobData","specInfo","fileNameWithoutExt","imageAttachment","prepareImageAttachment","nmriumAttachment","prepareNMRiunDataAttachment","listFileNameToBeDeleted","datasetToBeUpdated","prepareDatasets","prepareAnalysisMetadata","fileNameToBeDeleted","listDatasetFiltered","datasetAttachments","fileNameNoExt","dataAsJson","ArrayBuffer","isView","blobDataToBeSaved","buildPeaksBodyObject","displayingSpectra","firstSpectrum","nucleus","peak","correlations","displayingSpectrumID","isFid","experimentID","renderNMRium","allowFullScreen","renderModalTitle","forecReadOnly","hasSpectra","WebkitFilter","ketcher2","chemdraw","getMolfileFunction","marvinjs","loadScript","scriptId","obScript","onerror","rmScript","loadScripts","es","cbError","cbLoaded","loadId","ChemDrawEditor","cdAttached","cdFailed","extJs","loadError","cd","getEditorFunction","extConf","licenseUrl","StyleSheet","cdManager","RevvitySignals","ChemdrawWebManager","perkinelmer","errorCallback","iH","MarvinjsEditor","attachEditor","attachError","attached","mv","sketcherInstance","setDisplaySettings","toolbars","importStructure","MarvinJSUtil","getPackage","onReady","extSrc","KetcherEditor","iS","initMol","loadContent","eventType","setMolecule","CommonTemplateItem","onClickItem","CommonTemplatesList","memo","func","timeoutId","onClickHandle","selectedItem","commonTemplateModal","setCommonTemplateModal","searchQuery","setSearchQuery","setFilteredOptions","toolTip","lowerCaseQuery","filtered","marginVertical","onSelectItem","CommonTemplatesFetcher","fetchCommonTemplates","notifyError","availableEditors","available","EditorAttrs","createEditorInstance","Editor","iframeHeight","EditorList","WarningBox","handleCancelBtn","hideWarning","eId","matriceConfigs","default_structure_editor","commonTemplatesList","selectedShape","selectedCommonTemplate","deleteAllowed","editors","_state","structureEditors","grantEditors","createEditors","handleEditorSelection","resetEditor","updateEditor","exportStructure","mMol","ImageExporter","imageType","getMolfile","generateImage","outputFormat","imgfile","fetchSVG","initializeEditor","_editors","kks","_editor","cancelBtnText","buttonToolStyle","useEditor","editorOptions","copyContentToClipboard","DEFAULT_EDITOR","UserSetting","setEditors","changing","setEditor","listEditors","applyPublish","prodAna","MolViewerModal","newContent","moleculeViewer","featureEnabled","MolViewer","molContent","fnInit","INFO","MolViewerListModal","setMolContent","setActiveKey","dsName","modalBody","setModalBody","handleFile","openModal","renderBtn","propsDisabled","tipDesc","dc","JSMOL","NGL","ThirdPartyAppServices","TPA_ENDPOINT","_httpOptions","fetchDeviceById","deleteRelation","fileFromAttachment","attachable_id","attachable_type","fetchThumbnails","fetchJcamp","getFileListfrom","allFiles","filterAllAttachments","tmpArray","updateAttachables","attachableType","attachableId","dels","statusText","uploadFiles","error_messages","uploadCompleted","stopLoadingWithProgress","uploadChunk","chunk","formData","updateLoadingProgress","startLoadingWithProgress","chunkSize","chunksCount","beginingOfTheChunk","endOfTheChunk","spark","SparkMD5","totalStep","getFileContent","buffer","Uint8Array","readAsArrayBuffer","disposition","matches","revokeObjectURL","notifyExImportStatus","saveSpectrum","attId","shiftSelectX","shiftRefName","shiftRefValue","axesUnits","decamelizeKeys","fetchedFilesIdxs","combineSpectra","errMsg","inferSpectrum","regenerateSpectrum","generated","gene","regenerateEditedSpectrum","extraParams","extras","spectra_ids","front_spectra_idx","withBodyData","bodyData","fetchByCollectionId","ElKlass","dateToUnixTimestamp","addQuery","createFromRestResponse","updateAnnotationsInContainer","updateTasks","updateTask","updateAnnotationsOfAttachments","updateAnnotations","extractApiParameter","cell_line_sample_id","growth_medium","material_names","cell_type","biosafety_level","optimal_growth_temp","cryo_pres_medium","material_description","successfullyCreatedParameter","successfullyCopiedParameter","successfullyUpdatedParameter","successfullySplittedParameter","errorMessageParameter","uploadAttachments","uploadGenericFiles","cell_lines_count","loadedCellLineSample","splitAsSubCellLines","promises","fetchLockedRoots","fetchUnsharedRoots","fetchSharedRoots","fetchRemoteRoots","fetchSyncRemoteRoots","createUnsharedCollection","downloadBlob","createExportJob","createImportJob","fetchTabsLayout","updateTabsLayout","ContainerFetcher","container_id","DeviceFetcher","changeSelectedDevice","fetchAnalysisById","analysisId","DeviceAnalysis","devices_analysis","createAnalysis","updateAnalysis","analysisType","experiments","generateExperimentConfig","buildConfig","execData","fetchKlass","updateDatasetTemplate","fetchKlassOpen","getFileName","hasAttach","isElement","segFiles","seg","segMap","elMap","shouldUploadAttachments","prepareAttachmentParam","updateOrCreate","promise","fetchElementRevisions","fetchSegmentRevisions","fetchElementKlass","updateElementTemplate","newFiles","delFiles","reject","fetchRepoKlassList","syncTemplate","updateSegmentTemplate","isCntOnly","fetchInboxByContainer","isAck","fetchSpectraMessages","channelType","svgfile","fetchCas","updateNames","newMolName","escape","is_chemdraw","svg_name","molecularFormula","encodedMolecularFormula","arrayBuffer","substrings","privateNote","materials_svg_paths","userLabels","defaultAnalysisPublish","rReaction","fetchResearchPlansForElements","reactionFiles","productsFiles","updateAnnotationsInReaction","fetchArchives","deleteArchive","archive_id","fetchDownloadable","route","rResearchPlan","convertTemporaryImageFieldsInBody","getNewAttachments","getMarkedAsDeletedAttachments","containerFiles","updateImageFile","image_file","updatedResearchPlan","_checksum","rSample","updatedQueryParams","splitAsSubsamples","importSamplesFromFileConfirm","mapped_keys","updateXvial","ScreensFetcher","rScreen","addResearchPlan","SearchFetcher","is_sync","molecule_sort","cell_lines","fetchBasedOnSearchResultIds","collectId","decamelize","newObj","text_templates","TPA_ENDPOINT_ADMIN","file_types","attID","appID","fetchByUIState","loadReport","loadType","tParams","genericOnly","fetchElementKlassNames","listUserLabels","fetchUserKetcher2Options","rWellplate","splitAsSubwellplates","FaBtn","EditorBtn","EditorBaseBtn","RepoHowToDragSource","HOWTO","sid","stelle","RepoHowToDropTarget","EditorRichText","EditorImage","pfad","editor_type","EditorStelle","renderComponent","art","AnalysesExperiment","devices_analysis_id","holder_id","on_day","sample_analysis_id","deviceAnalysisId","holderId","onDay","numberOfScans","number_of_scans","sweepWidth","sweep_width","analysisBarcode","analysis_barcode","sampleShortLabel","deviceSampleId","devices_sample_id","sampleAnalysisId","configMap","conditionedNight","conditionedPriority","filePreview","NO_PREVIEW_AVAILABLE_PATH","buildCopy","_attachments","_preview","idToMove","idOfPredecessor","indexOfMovedContainer","indexOfPredecContainer","containerToMove","deleted","devices_analyses","DeviceSample","devicesAnalyses","analysis_type","deviceSample","buildID","fieldsToOmit","tThis","rp_ids","sha256","cs","isRestricted","is_restricted","paramsWithoutNullEntries","analysisContainers","aec","aics","aic","dts","quillDefault","element_klass_id","buildNewShortLabel","buildInitWF","wfLayers","_element_klass_id","copy","newEl","copyFromCollectionId","resetProperties","fieldsDrag","flatMap","vaildFieldsDrag","el_id","vaildFields","_name","_element_klass","_klass_name","_properties","_segments","_klass_uuid","klass_uuid","_uuid","addKeyword","addSubjectAreas","addAffiliation","addCreator","addContributor","addAlternateIdentifier","addRelatedIdentifier","addRightsHolder","addRights","addFundingReferences","_noteable_id","_noteable_type","TemperatureUnit","TemperatureDefault","MomentUnit","LegMomentUnit","DurationUnit","DurationDefault","memValue","memUnit","as","durationDiff","startAt","stopAt","precise","buildReactionShortLabel","reactions_count","reaction_name_prefix","serializeMaterial","_duration","_durationDisplay","composedDelta","_temperature","oldUnit","theArray","copyFromSampleAndCollectionId","rebuildProductName","copyFromReactionAndCollectionId","addMaterial","newMaterial","materialPolicy","rebuildReference","setPositions","srcMaterial","srcGp","tagGp","newSrcMaterial","swapMaterial","srcIdx","tagIdx","groupWoSrc","newGroup","oldGroup","isSplit","start_parent","shortLabelPolicy","namePolicy","split_label","fromCharCode","charCodeAt","_setAsReferenceMaterial","_updateEquivalentForMaterial","_coerceToSamples","hasSample","refreshCoefficient","cats","mat","refreshEquivalent","refMat","ori","oriSLabel","sLabel","sLNum","startingMaterialsList","referenceSample","calculateMaxAmount","catalyst","findCatalystMaterial","calculateCatalystMoles","moles","target_amount_unit","target_amount_value","real_amount_unit","real_amount_value","_variations","newDuration","dUnit","threshold","asWeeks","asDays","asHours","asMinutes","asSeconds","highestUnitFromDuration","arrayData","maxTemp","minTemp","_short_label","_tlc_solvents","_solvents","_purification_solvents","_publication","_literatures","_research_plans","totalVolume","unpublishableSamples","wellplate_ids","wellplateIDs","attachmentsToAdd","idsOfAttachmentsInResearchPlan","attachmentInResearchPlan","attachInRP","markAttachmentAsDeleted","attachmentToDelete","fieldId","copyFromResearchPlanAndCollectionId","attachment_count","wp","_mode","_wellplates","prepareRangeBound","argsNew","structure_only","keepResidueInfo","keepExternalLabel","filterSampleData","filterResidueData","filterElementalComposition","elemComp","setDefaultResidue","residue_type","samples_count","defaultStereo","attached_amount_mg","getChildrenCount","buildSplitShortLabel","is_split","molecule_name_id","boiling_point_upperbound","boiling_point_lowerbound","melting_point_upperbound","melting_point_lowerbound","extLabelClass","isRepoSecret","iupac_name_tag","convertToGram","setMetrics","defaultAmountType","calculateFeedstockOrGasMoles","amountLiter","fetchReactionVesselSizeFromStore","updateFeedstockMoles","temperatureInKelvin","convertTemperatureToKelvin","updateTONValue","calculateGasMoles","tonFrequencyUnit","timeValues","calculateTONPerTimeValue","determineTONFrequencyValue","fetchCatalystMoleFromStore","catalystReferenceMolValue","moleOfCatalystReference","calculateTON","convertGramToUnit","calculateVolumeForFeedstockOrGas","amountValue","extra_params","refAmount","coeffQuotient","newSolvent","tmpSolvents","solventData","solventToDelete","filteredIndex","solventToUpdate","_is_top_secret","_dry_solvent","_destroy","_is_repo_public","_external_label","_preferred_label","_location","_description","_metrics","_molarity_value","_molarity_unit","_imported_readout","_current_amount_type","amount_type","_target_amount_value","_target_amount_unit","_real_amount_value","_real_amount_unit","_purity","temp_svg","polymer_formula","error_polymer_type","labelText","_equivalent","_scheme_yield","scheme_yield","_conc","conc","_maxAmount","jsonSolvent","_solvent","_gas_phase_data","initializeGasPhaseData","component_graph_data","buildFromWellplatesAndCollectionId","clipboardWellplates","research_plan_ids","researchPlanIDs","_collaborator","_requirements","_conditions","segment_klass","newSegments","_segment","StructureDef","defaultGetMolfileFunction","frame","frames","mf","getSmiFuncName","getSmiWithCallback","inchi","buildStructureDef","_structureDef","_sample","buildFromSamplesAndCollectionId","clipboardSamples","oldWells","_wells","columnOfIndex","shortLabelIn","itemComment","cellline_material","copyMaterialFrom","mobx","createOrUpdate","createOrUpdateHowTo","deleteHowTo","updateEditorImage","editorType","fetchEmbargo","emb","embargoVal","repoFetchEmbargoElements","repoFetchEmbargoElement","isSubmit","fetchPublicMolecules","paramAdvType","paramAdvValue","fetchPublicReactions","searchPublicMolecules","publicMolecules","searchPublicReactions","publicReactions","fetchLastPublished","fetchLastPublishedSample","fetchDataset","advValues","fetchReaction","getLD","convertMolfile","abortController","AbortController","abort","signal","analysesIds","publishReactionScheme","fetchReviewElements","strApi","saveComments","previewMetadata","zipPreviewMetadata","saveReviewLabel","RepoContainerDatasets","getDerivedStateFromProps","DropdownButtonSelection","InputButtonField","onBtnClick","btnField","btnValue","RepoUserComment","sendEmail","RepoPublicComment","registedCompoundTooltip","RepoXvialButton","request","checkRequest","compoundLink","dataModal","requestModal","editLink","requestLink","RepoSpectraBtn","loadSpectra","RepoNmriumBtn","loadSpectraForNMRDisplayer","sInfos","spcChemSpectra","nInfos","spcNmrium","nmrium","RepoPreviewImage","nClass","RepoNmrium","RepoSpectra","LdData","isZoomEnabled","setIsZoomEnabled","hideInfo","CollectionDesc","Chemotion","Reviewing","Reviewed","ChemotionId","ClipboardCopyBtn","SchemeWord","HomeFeature","baseType","isFileTypePass","DownloadMetadataBtn","DownloadJsonBtn","EmbargoCom","embargoDesc","deed","cp","presentLicense","LicenseLegalCode","stye","PublishTypeAs","onMoveClick","MoveEmbargoedBundle","timeZone","DateFormatDMYTime","dtJSON","toJSON","utc","EditorTips","IconToMyDB","tooltipTitle","createLinkButton","baseUrl","ChecklistPanel","dglr","glr","dtbl","tbl","ddes","des","dafm","afm","dact","dohd","ohd","groupleader","leader_names","isGL","SidToPubChem","OrcidIcon","ElementIcon","AnalysesTypeJoinLabel","analysesTypeJoin","AuthorList","ContributorInfo","showHelp","contributorBlock","AffiliationList","ClipboardCopyLink","MoleculeInfo","nameOrFormula","zoomSvg","RenderAnalysisHeader","updateRepoXvial","doiLink","full_doi","iupacUserDefined","crsId","ref_added_by","PublicLabels","listStyle","RepoSegment","ToggleIndicator","ReactionRinChiKey","bodyAttrs","showIndicatorRinchi","rinchi_string","InputFieldYield","InputFieldDuration","InputFieldTemperture","ReactionTableEdit","schemes","sumSolvents","ns","mat_group","matType","equivYield","ReactionPropertiesEdit","ReactionSchemeOnlyInfo","ReactionInfo","additionInfo","contentlength","additionlength","descQV","addQV","RepoReactionSchemeInfo","RenderPublishAnalysesPanel","dataset_doi","crdLink","RenderPublishAnalyses","idyLogin","aId","aCount","PublishAnalysesTag","generateTitle","statusMsg","typeChk","analysesIcon","ReactionTable","DatasetDetail","moleculeView","elementView","datasetView","ClosePanel","CommentBtn","RepoCommentBtn","onClickPreview","onClickCurrentTime","onClickClose","onClickSave","handleDismiss","onShowDeleteModal","onEditorBtnClick","onEditorBaseBtnClick","onStelleDrop","onStelleRemove","onStelleInputChange","handleImage","pfad_image","deleteNewButton","coverImage","tPublished","tUpdated","stelles","NewsroomTemplate","news","alignContent","showSA","showRA","commentField","originInfo","toggleSA","toggleRA","handleToggle","handleReviewBtn","handleCommentBtn","handleReviewModal","handleCommentModal","refreshPubElements","reactionInfo","propsCanComment","addinfoContent","onComment","propInfo","renderAnalysisView","pdInfos","pd_infos","productHeader","specSample","anaInfo","ana_infos","renderProductAnalysisView","_sid","_references","refArray","referencesText","showDOI","preapproved","idyReview","pub_info","colDoiPrefix","embargoLink","buttonFunc","currComment","productSwitch","showSwitch","setSwitch","_isReview","rLabel","useName","dmv","_sumSolvents","RepoMetadataModal","loadMetadata","mt","RepoUserLabelModal","handleSelectLabels","handleSaveLabels","RepoReviewButtonBar","authorModel","hasComments","pubState","btnBsStyle","btnTooltip","showButton","MARegisteredTooltip","compNum","setExpanded","information","DecoupleInfo","handleAnalysesLink","handleMaterialLink","sampleTypeDescription","referencesPhysicalProp","reactionLink","reaction_ids","analyticalLink","materialLink","scrollView","anchor","hash","anchorElement","RepoSample","expandSA","panelRef","renderAnalyses","molecule_iupac","Jumbotron","comp_num","details","setToggle","listSegment","oriEl","nextEl","mn","updateMoleculeCas","newCas","Report","Format","Graph","buildEmptyScatter","graphType","DeviceControl","Prediction","handleFetch","fetchAllDevices","changeSelectedDeviceId","setSelectedDeviceId","addSampleWithAnalysisToDevice","removeSampleFromDevice","toggleTypeOfDeviceSample","fetchDeviceAnalysisById","openDeviceAnalysis","saveDeviceAnalysis","createDeviceAnalysis","duplicateAnalysisExperiment","changeAnalysisExperimentProp","deleteAnalysisExperiment","showDeviceControl","notificationObject","fetchGenericElsByCollectionId","collectionIsSync","generateEmptyGenericEl","splitElements","fetchSamplesByCollectionId","fetchReactionsByCollectionId","fetchWellplatesByCollectionId","fetchScreensByCollectionId","fetchResearchPlansByCollectionId","fetchCellLinesByCollectionId","handleSvgReactionChange","editReactionSample","reactionID","generateEmptySample","tryFetchCellLineElById","generateEmptyCellLine","cellLineSample","copySampleFromClipboard","sampleCoefficient","fetchMoleculeByMolfile","generateEmptyReaction","openReactionDetails","generateWellplateFromClipboard","generateEmptyWellplate","editWellplateSample","fetchWellplateById","afterComplete","generateScreenFromClipboard","fetchScreenById","generateEmptyScreen","generateEmptyResearchPlan","showComputedPropsTasks","removeElements","newCurrentElement","deselectCurrentElement","createPrivateNote","updatePrivateNote","handleGasButtonStatusChange","PredictionsFetcher","fetchInfer","smis","sampleMemoryIds","sampleDefaultIds","sampleCheckedIds","elementAdded","elementSubs","selectedTags","rsp","newSpls","allSpls","inpSpls","ReportTemplateFetcher","fetchTemplateById","createTemplate","oriQueue","GetTypeIds","reactionCheckedIds","dfSIds","dfRIds","LoadPreviewIds","idxs","spcInfo","WriteStart","WriteStop","jcamps","showElements","toggleAdvancedSearch","syncCollection","selectElement","deselectAllElementsOfType","deselectAllElements","selectCollectionWithoutUpdating","bool","authenticity_token","reload","storageKey","user_templates","fetchUnitsSystem","module","exports","displayEmbargo","colData","last_published","lastPublishedSample","advVal","moleculeData","reactionData","published_statics","showCommendModal","handleInitialize","handleGetMolecules","handleGetReactions","handleSearchMolecules","handleSearchReactions","handlePublishedStatics","handleLastPublished","handleLastPublishedSample","handleOpenRepositoryPage","handleDisplayDataset","handleDisplayMolecule","handleDisplayReaction","handleReceiveSearchresult","handleArticles","handleEditArticle","handleDisplayArticle","handleHowTos","handleEditHowTo","handleDisplayHowTo","handleGetElements","handleRefreshPubElements","handleDisplayCollection","handlePublicSearch","handleSetSearchParams","handleFetchOlsChmo","moleculeList","suf","reactionList","collectionList","handleDisplayReviewReaction","handleDisplayReviewSample","handelReviewPublish","handelUpdateComment","handleFetchSample","handleSetUserLabel","handleSaveReviewLabel","handleFetchLockedCollectionRoots","handleFetchUnsharedCollectionRoots","handleFetchSharedCollectionRoots","handleFetchRemoteCollectionRoots","handleFetchSyncInCollectionRoots","handleCreateSharedCollections","handleBulkUpdateUnsharedCollections","handleUpdateSharedCollection","handleCreateUnsharedCollection","handleRejectSharedCollection","handleRejectSyncdCollection","handleUpdateCollectrionTree","syncCollections","findById","foundCollection","findBySId","findAllCollection","ClipboardStore","handleFetchSamplesByUIStateAndLimit","handleFetchWellplatesByUIState","SvgCellRenderer","SelectCellRenderer","SelectCellEditor","getValue","afterGuiAttached","setFocusedCell","eGC","eGridCell","scaled_value","onChangeListener","defaultSelected","onHeaderSelect","ModalImportConfirm","custom_data_keys","filtered_mapped_keys","processRows","newRow","customHeader","pinned","cellEditorParams","handleFetchAllDevices","handleFetchDeviceById","handleCreateDevice","handleSaveDevice","handleDeleteDevice","handleToggleDeviceType","handleChangeActiveAccordionDevice","handleChangeSelectedDeviceId","handleSetSelectedDeviceId","handleSetRefreshCoefficient","handleAddSampleToDevice","handleAddSampleWithAnalysisToDevice","handleRemoveSampleFromDevice","handleToggleTypeOfDeviceSample","handleFetchDeviceAnalysisById","handleSaveDeviceAnalysis","handleOpenDeviceAnalysis","handleCreateDeviceAnalysis","handleChangeAnalysisExperimentProp","handleDeleteAnalysisExperiment","handleDuplicateAnalysisExperiment","handleFetchBasedOnSearchSelection","handleFetchBasedOnSearchResultIds","handleDispatchSearchResult","handleFetchGenericElsByCollectionId","handleFetchGenericElById","handleCreateGenericEl","handleCreateCellLine","handleFetchSamplesByCollectionId","handleFetchReactionsByCollectionId","handleFetchWellplatesByCollectionId","handleFetchScreensByCollectionId","handlefetchResearchPlansByCollectionId","handlefetchCellLinesByCollectionId","handleFetchSampleById","handleCreateSample","handleCreateSampleForReaction","handleEditReactionSample","handleEditWellplateSample","handleUpdateSampleForReaction","handleUpdateSampleForWellplate","handleCopySampleFromClipboard","handleAddSampleToMaterialGroup","handleShowReactionMaterial","handleImportSamplesFromFile","handleImportSamplesFromFileConfirm","handleSetCurrentElement","handleDeselectCurrentElement","handleChangeSorting","handleChangeElementsFilter","handleFetchReactionById","handleTryFetchById","handleFetchCellLineById","handleCloseWarning","handleCreateReaction","handleCopyReactionFromId","handleCopyReaction","handleCopyResearchPlan","handleCopyElement","handleCopyCellLine","handleOpenReactionDetails","handleBulkCreateWellplatesFromSamples","handleFetchWellplateById","handleImportWellplateSpreadsheet","handleCreateWellplate","handleGenerateWellplateFromClipboard","handleGenerateScreenFromClipboard","handleAddResearchPlanToScreen","handleFetchScreenById","handleCreateScreen","handlefetchResearchPlanById","handleCreateResearchPlan","handleImportWellplateIntoResearchPlan","handleImportTableFromSpreadsheet","handleCreatePrivateNote","handleUpdatePrivateNote","handleUnselectCurrentElement","handleRefreshElements","handleGenerateEmptyElement","handleFetchMoleculeByMolfile","handleFetchMetadata","handleDeleteElements","handleUpdateElementsCollection","handleAssignElementsCollection","handleRemoveElementsCollection","handleSplitAsSubsamples","handleSplitElements","handleSplitAsSubwellplates","handleSplitAsSubCellLines","handleDeletingElements","handleChangeCurrentElement","handleGetMoleculeCas","handleUpdateMoleculeNames","handleUpdateMoleculeCas","handleUpdateLinkedElement","handleRefreshSyncCollections","handleUpdateElement","handleUpdateEmbeddedResearchPlan","handleRefreshComputedProp","findDeviceIndexById","deviceKey","newDevice","savedDeviceSample","deviceAnalysis","newExperiment","sampleKey","createSampleAnalysis","createAnalysisExperiment","sampleAnalysis","samplesOfAnalysisType","experimentKey","handlefetchBasedOnStructureAndCollection","fetchElementsByCollectionIdandLayout","navigateToNewElement","deleteCurrentElement","handleFetchResidueByMolfile","updatedCoefficient","found","rid","elementIndex","newSelecteds","updateElement","refreshReactionsListForSpecificReaction","handleCreateReactionLiterature","handleDeleteReactionLiterature","fetchLiteraturesByReactionId","handleFetchLiteraturesByReactionId","handleRefreshElementsForSearchById","lastMsg","filter_created_at","from_date","to_date","user_label","product_only","resetCurrentElement","isDeletableTyps","isDeletable","synchronizeElements","addElement","UpdateMolecule","UpdateResearchPlanAttaches","handleUpdateResearchPlanAttaches","UpdateWellplateAttaches","updatedWellplate","handleUpdateWellplateAttaches","UpdateScreen","updatedScreen","handleUpdateScreen","openedReaction","SameEleTypId","nextSample","previousSample","addEl","updateEl","deleteElement","newSelected","currentNotDeleted","intersectionWith","currentIdx","foundDate","max_potential","min_potential","mean_potential","private_note","bindActions","handleDocumentKeyDown","handleContextChange","handleStart","handleStop","handleStartLoadingWithProgress","handleStopLoadingWithProgress","handleUpdateLoadingProgress","defaultPred","writing","handleToggleModal","handleLoadSpectra","handleSaveToFile","handleRegenerate","handleInferSpectrum","handleInferRunning","handleWriteStart","handleWriteStop","handleSelectIdx","handleAddOthers","handleRegenerateEdited","handleToggleModalNMRDisplayer","handleLoadSpectraForNMRDisplayer","decodeSpectrum","raw","ExtractJcamp","decodeSpectra","returnFiles","sortedSpcInfo","sortedSpcIdxs","newArrSpcIdx","spci","fetchedSpcMetas","fsm","fetchedIdx","prevIdx","fsi","newSpcInfos","newSpcMetas","replacePredictions","targetPreds","running","preds","origData","jcampData","handleSelectActiveAnalysis","handleSelectCollection","handleSelectSyncCollection","handleCheckAllElements","handleToggleShowPreviews","handleToggleAdvancedSearch","handleCheckElement","handleUncheckElement","handleUncheckAllElements","handleDeselectAllElementsOfType","handleSelectElement","handleDeselectAllElements","handleSetSearchSelection","handleSetSearchById","handleSelectCollectionWithoutUpdating","handleClearSearchById","handleShowCollectionManagement","handleShowElements","handleToggleCollectionManagement","handleUncheckWholeSelection","handleChangeNumberOfResultsShown","handleShowDeviceManagement","handleShowModalChange","handleHideModal","handleSetFilterCreatedAt","handleSetFromDate","handleSetToDate","handleSetProductOnly","handleRerenderGenericWorkflow","handleShowGenericWorkflowModal","handleSelectPublicCollection","curPageIds","checkedMap","clearSearch","noFetch","handleSelectCollectionForSearchById","modelName","withFilter","handleFetchOlsRxno","handleFetchOlsBao","handleFetchGenericEls","handleFetchCurrentUser","handleFetchUserLabels","handleFetchProfile","handleFetchEditors","handleUpdateUserProfile","handleFetchNoVNCDevices","handleSegementKlasses","handleDatasetKlasses","handleOmniauthProviders","omniauth_providers","extra_rules","Measurement","MeasurementsFetcher","fetchMeasurementHierarchy","sample_or_sample_id","raw_data","measurementId","SampleHeaderForMeasurement","model","identifierNumber","integer","MeasurementsStore","sampleHeaders","self","_storeMeasurementsForSample","rawData","rawMeasurement","success","_deleteMeasurementFromStore","SampleTaskFetcher","openSampleTasks","_fetchSampleTasks","sample_task_id","requiredScanResults","sample_tasks","ScanResult","SampleTask","maybeNull","SampleTasksStore","inbox_visible","loadOpenSampleTasks","SampleTasksFetcher","done","createdSampleTask","taskA","taskB","CellLineAnalysis","late","setDescription","CellLineItem","newChanged","CellLineDetailsStore","newItemName","newGrowthMedium","newSource","newAmount","newContamination","newPassage","newCellLineName","newMutation","newDisease","newOrganism","newDesc","newTissue","newTemp","newVariant","newBioSafetyLevel","newCryoMedium","newGender","newType","convertJsModelToMobxModel","jsCellLineModel","has","analysisAmount","SearchResult","frozen","SearchFilter","defaultSearchValues","defaultPublicationValues","defaultKetcherValues","SearchStore","search_modal_visible","search_modal_minimized","search_modal_selected_form","search_element","advanced_search_values","ketcher_rails_values","publication_search_values","search_results","tab_search_results","search_results_visible","search_visible","search_filters","search_values","enumeration","show_search_result_list","result_error_messages","errorExists","addSearchResult","hideSearchModal","showMinimizedSearchModal","resetAdvancedSearchValue","resetPublicationSearchValue","elementValues","ketcherValues","resetKetcherRailsValues","tabSearchResult","hideSearchResults","filtered_options","datacollector_fields","DevicesStore","device_modal_visible","modal_minimized","loadDevices","setDevices","deviceById","changeSuccess_message","key_file","changedDevice","errorKey","devicesValues","AdminDeviceMetadataFetcher","postDeviceMetadata","newDeviceMetadata","publisher","manufacturers","owners","doi_sequence","data_cite_prefix","data_cite_created_at","data_cite_last_response","data_cite_creator_name","DeviceMetadataStore","loadDeviceMetadata","setDeviceMetadata","messageAttachment","union","messageContent","messageModel","channel_type","sender_id","receiver_id","is_ack","AttachmentNotificationStore","messageAmount","newMessage","existingMessage","channelTypeCorrect","attachmentsFromElement","elementContext","attachmentAlreadyInElement","forCurrentElement","copiedAttachment","cellLineDetails","attachmentNotifications","removeFromListByIndex","flatten2D","array_2d","aIndex","bIndex","ELEMENT_FIELD","GENERIC_GRID","getMetaContent","metas","dtConverter","underline","super","bullet","ordered","changeAttribute","attribute","entering","applyAttribute","mdConverter","makeDelta","literal","lineAttribute","rf","hForm","reduceByPeak","splitData","within","splitDotPhrase","countHWithinBracket","peakContent","bracketContent","simpleCount","countCWithinBracket","xCount","phraseArr","hs","missed","cNmrStr","cwb","countInFormula","countInDesc","msStr","detected","isEmwInMargin","exactMolWeight","next","elementString","markdownChemicalFormular","commonFormatPattern","pattern","sampleAnalysesFormatPattern","_13cnmr","_1hnmr","_ea","_ir","_mass","mdString","op","attrVal","replaceText","groupCount","lastOrder","repText","formatPattern","patt","regexReplace","regexMatch","funcOutput","searchAndReplace","walker","commonmark","deltas","lineAttributes","mdConv","converter","endNewLine","markdownToDelta","materialGp","ttlIns","encodedData","bufferLength","bytesArray","Functions","downloadFile","keepObjsAsIds","oriSelectedObjs","newElems","allObjs","allObjIds","oriObjs","oriPreviewObjs","newPreviewObjs","rids","psids","prids","charIdxs","charIdx","acceptables","origJcampIds","geneJcampIds","editedJcampsIds","fns","isJcamp","typ","extractAnalysesId","isApp","extractJcampFiles","idSp","extractJcampWithFailedFiles","nmriumFiles","extractNMRiumFiles","listNMROntology","storedSet","parentIsNMR","isNMR","setToBeStored","ontology","cleanedNMRiumData","newSpectra","tmpSpc","originalData","formattedString","cvConc","cvSolvent","cvSolventOthers","cvRef","cvRefOthers","cvScanRate","refString","nonRefString","refOps","nonRefOps","isRef","e12","e12Str","strNumberFixedLength","scanRateStr","posNegString","concentrationStr","solventStr","internalRefStr","currentNoneOps","TIME_UNITS","TON_UNITS","TEMPERATURE_UNITS","IDEAL_GAS_CONSTANT","PARTS_PER_MILLION_FACTOR","decimalPlaces","roundedValue","restOfString","K","conversionFunc","hoursToMinutes","hoursToSeconds","minutesToSeconds","minutesToHours","secondsToHours","h","amountGram","molAmount","calculateMolesFromMoleculeWeight","ppm","calculateGasVolume","calculateFeedstockVolume","currentAmountLiter","timeValue","timeUnit","noAttSvg","noAvaSvg","rawImg","operation","minusRender","ops1HHead","ops13CHead","opsCommonTail","opsIRHead","opsIRTail","opsCommonHead","PLAIN","IR","RAMAN","MS","solventOps","Emissions","collectionShowCollectionManagement","sync_collections_user","reportShowReport","predictionShowFwdRxn","cellLineShowOrNew","cellLineID","reactionShow","reactionShowSample","screenShowOrNew","screenID","devicesAnalysisCreate","devicesAnalysisShow","deviceShow","deviceShowDeviceManagement","metadataShowOrNew","genericElShowOrNew","itype","keystr","genericElID","buildLabel","filterCurrentUser","currentDeviceId","filterCurrentDevice","regExpTimestamp","dateString","local","webpackContext","req","webpackContextResolve","__webpack_require__"],"sourceRoot":""}