{"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 \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 \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 \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: ',' or ';' or 'tab'.\n </span>\n </CSVReader>\n </FormGroup>\n <FormGroup>\n <Button bsStyle=\"primary\" onClick={() => this.handleCreateNewUsersFromFile()}>\n Create users \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 \n </Button>\n <Col sm={2}> </Col>\n <Button bsStyle=\"primary\" className=\"col-sm-5\" onClick={() => this.handleUpdateUser(user)}>\n Update \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}> </Col>\n <Button bsStyle=\"danger\" className=\"col-sm-5\" onClick={() => this.handleDeleteUser(user)}>\n Delete \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 \n <i className=\"fa fa-save\" />\n </Button>\n \n <Button bsStyle=\"warning\" onClick={() => this.handleRestoreAccountClose()}>\n Cancel \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 \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 \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 \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 \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 \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 \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 \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 \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 \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 \n <i className=\"fa fa-commenting-o\" />\n </Button>\n \n <Button bsStyle=\"primary\" bsSize=\"small\" onClick={() => this.handleNewUserShow()} data-cy=\"create-user\">\n New User \n <i className=\"fa fa-plus\" />\n </Button>\n \n <Button\n bsStyle=\"primary\"\n bsSize=\"small\"\n onClick={() => this.handleRestoreAccountShow()}\n data-cy=\"restore-user\"\n >\n Restore Account \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> </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\" /> ({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> \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\" /> ({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> \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 \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(', ')} \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 \n ({groups.length}) \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> \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> \n <FormGroup controlId=\"formInlineNameAbbr\">\n <ControlLabel>Name abbreviation* </ControlLabel> \n <FormControl\n type=\"text\"\n inputRef={(m) => { this.abbrInput = m; }}\n placeholder=\"AK-JM\"\n />\n </FormGroup> \n <FormGroup controlId=\"formInlineEmail\">\n <ControlLabel>Email</ControlLabel> \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 \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> \n <Button\n bsStyle=\"primary\"\n onClick={() => this.handleAssociateBtn()}\n >switch mode\n </Button>\n \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 \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 \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 \n </Button>\n \n <Button bsStyle=\"primary\" onClick={() => this.handleSave(matrice)} >\n Update \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 \n </Button>\n \n <Button bsStyle=\"primary\" disabled={!showJsonBtn} onClick={() => this.handleJsonSave(matrice)} >\n Update \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 \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 \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> </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 \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\"> 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\"> \n <b>Current Target</b> \n <RenderStoredTarget />\n </span>\n <br />\n <span className=\"fa fa-info-circle\" aria-hidden=\"true\"> \n <b>Edited Target</b> \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\" /> ({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 \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 \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 \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 \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 \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 \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 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 \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 \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 \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'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 \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 \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\" /> 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\" /> 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\" /> 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\" /> 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\" /> 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: {la} </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} <span className=\"tit\">published</span></div>\n <div style={{ display: 'flex' }}>\n <div>Top 3: </div>\n <div className=\"italic-desc\">\n {stsAnalysisSort[0].e_cnt} {stsAnalysisSort[0].ex_type}\n <br />\n {stsAnalysisSort[1].e_cnt} {stsAnalysisSort[1].ex_type}\n <br />\n {stsAnalysisSort[2].e_cnt} {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 > 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'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}> </Col>\n <Col md={12} sm={12}>{cards}</Col>\n <Col md={0} sm={12}> </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} (<i className={searchIcon[key].icon} aria-hidden=\"true\" /> {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> </Col>\n <Col md={8} sm={12} xs={12} className=\"search-keyword\">\n <Well bsSize=\"small\">\n <span>Search by</span>\n \n <FormGroup>\n <Radio name=\"radioSearchBy\" value=\"authors\" checked={searchBy === 'authors'} inline onChange={onChangeSearchBy}>\n <i className=\"fa fa-user\" aria-hidden=\"true\" /> 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\" /> Ontology\n </Radio>{' '}\n <Radio name=\"radioSearchBy\" value=\"sample\" checked={searchBy === 'sample'} inline onChange={onChangeSearchBy}>\n <i className=\"icon-sample\" /> Substance\n </Radio> or <Button bsSize=\"small\" onClick={onDrawStructure}><i className=\"fa fa-paint-brush\" aria-hidden=\"true\" /> Draw Structure</Button>\n </FormGroup>\n </Well>\n \n <Well bsSize=\"small\">\n <span>in</span>\n \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> </Col>\n </Row>\n <Row style={{ marginBottom: '10px' }}>\n <Col md={2}> </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'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}> </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\" /> {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 Similarity Search \n </Radio>\n \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\" /> <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\" /> <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 /> : ''} {e.title}\n </span>\n By {e.published_by} at \n {getFormattedISODateTime(e.submit_at)} {StateLabel(e.state)} {StateLabel(e.embargo)}\n {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\" /> {e.title}\n </span>\n By {e.published_by} at \n {getFormattedISODateTime(e.submit_at)} {StateLabel(e.state)} {StateLabel(e.embargo)}\n {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>— 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\" /> Edit </a>\n <a style={{ cursor: 'pointer' }} onClick={() => Aviator.navigate(`/home/newsroom/${article.key}`)}><i className=\"fa fa-wpexplorer\" /> 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\" /> 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\" /> {article.creator_name} \n <i className=\"fa fa-calendar\" aria-hidden=\"true\" /> {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\" /> <span> {article.creator_name}</span>\n {renderEditRead(article, isEditor)}\n </div>\n <div className=\"created_at\">\n <span><i className=\"fa fa-calendar\" /> {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\" /> Edit </a>\n <a style={{ cursor: 'pointer' }} onClick={() => Aviator.navigate(`/home/howto/${article.key}`) }><i className=\"fa fa-wpexplorer\" /> 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\" /> 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' }}> HOW TO </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\" /> <span>{howto.creator_name}</span> \n <i className=\"fa fa-calendar\" aria-hidden=\"true\" /> <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 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 <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 <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 <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 Download\n </span>\n .{' '}\n </p>\n </h5>\n <h3>\n Now, let'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\" /> Download</Button>\n </span>\n );\n };\n\n const BelongsToRenderer = (params) => {\n const { data } = params;\n return (\n <>\n {data.element_klass?.label}\n \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 )))\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> </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 \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 \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> {this.props.molecule.inchikey}\n (<b>Chemotion molecule id:</b> {this.props.molecule.id})\n <br />\n <b>Canonical SMILES:</b> {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 <i className=\"fa fa-pencil\" aria-hidden=\"true\" /></Button> \n <Button bsStyle=\"warning\" bsSize=\"sm\" onClick={() => this.handleSave()}>Update molfile and svg <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 \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 <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 \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: \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\" /> 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 {pl>0 ? <i className=\"fa fa-pencil-square-o\"></i> : null}\n {pl>1 ? <i className=\"fa fa-share-alt\"></i> : null}\n {pl>2 ? <i className=\"fa fa-trash\"></i> : null}\n {pl>3 ? <i className=\"fa fa-download\"></i> : null}\n {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 <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 \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} \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)} </i>;\n const ricon = ls[2].substr(1) === '0' ? '' : <i className=\"icon-reaction\"> {ls[2].substr(1)} </i>;\n return label.startsWith('Reviewing') ?\n (\n <div style={{ display: 'inline', color: 'red' }}>\n {ls[0]} {sicon} {ricon}\n </div>\n ) :\n (\n <div style={{ display: 'inline' }}>\n {ls[0]} {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\" /> \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 \n Shared with me \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\" /> \n Synchronized with me \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 {sharedToOrBy == 'shared_to' ? 'with' : 'by'}\n {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\" /> 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 \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 \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 \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 \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} \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&¤tElement.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 \n <Button bsStyle=\"warning\" onClick={this.revokeTask} bsSize=\"xs\">\n <i className=\"fa fa-stop\" />\n </Button>\n \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 \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 < value' /* < renders < in HTML */\n}, {\n label: 'pH > value',\n value: 'pH > value' /* > 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 \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} {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 \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 \n <span>{genericEl.short_label}</span>\n \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 {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 {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 \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 \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\" /> {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' }} /> \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 \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 "Scheme" tab.\n <br />\n Changes in "Scheme" 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 . \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 • \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' }}> (<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' }}> (<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)} {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 {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 \n <i className=\"fa fa-check\" />\n </div>\n);\n\nconst qCheckFail = (msg, kind, atomNum = '') => (\n <div style={{ display: 'inline', color: 'red' }}>\n \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\" /> \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\" /> \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)} {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\" /> \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: </td><td style={{ wordBreak: 'break-all' }}>{material.molecule.iupac_name || ''}</td></tr>\n <tr><td>Name: </td><td style={{ wordBreak: 'break-all' }}>{material.name || ''}</td></tr>\n <tr><td>Ext.Label: </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 \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> <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> </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} 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} 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\" /> <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> <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> \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\" /> 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 \n <span className=\"pseudo-link\"\n onClick={() => this.handleProductClick(product)}\n style={{ cursor: 'pointer' }}\n title=\"Open sample window\">\n <i className=\"icon-sample\" /> {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: <i className=\"icon-reaction\" /> {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\" /> {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> <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> \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 <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\" /> \n {sample.molecule_iupac_name} \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}>"<b>NAME</b>" (<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}>"<b>NAME</b>" (<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> </span>\n {reportStatusBtn(archive)}\n <span> </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 \n Value\n </th>,\n <th style={this.cellStyle} key={`u_${key}`} width=\"10%\">\n {title}\n \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 \n {wellplate.name}\n 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 \n <span>\n {wellplate.short_label}\n \n {wellplate.name}\n </span>\n \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> \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> \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> \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> \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> \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> \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: \n {formatDate(attachment.created_at)}\n </div>\n | \n <div>\n Size: \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 \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\" /> <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 \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 \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} {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 {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 \n <span>{researchPlan.name}</span>\n \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§ion=Top`, '_blank'); }}>\n <img src=\"/images/wild_card/pubchem.svg\" style={{ height: '1.5vh' }} alt=\"\" /> \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 \n \n {Number(value).toFixed(2)}\n \n \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> </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> </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> </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 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} {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 >80%: {numFg80 + numFg90}\n </span>\n </div>\n <div>\n <span>Output true machine (>80%): </span>\n {`${(posMac80 + posMac90)}/${(numMac)}`}\n {iconByMargin(ansMac80, 1)}\n </div>\n <div>\n <span>Output true owner (>80%): </span>\n {`${(posOwn80 + posOwn90)}/${(numOwn)}`}\n {iconByMargin(ansOwn80, 1)}\n </div>\n <div>\n <span>Output false machine (>90%): </span>\n {`${(negMac90)}/${(posMac90 + negMac90)}`}\n {iconByMargin(ansMacF90, 0)}\n </div>\n <div>\n <span>Output false owner (> 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 {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 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 [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 \n {sample.title()}\n \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 <i className=\"icon-reaction\" /></Button>\n <span> or </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> \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 \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> {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 \n {researchPlan.name}\n 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 \n <span>{researchPlan.name}</span>\n \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 <span>{screen.name}</span> \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 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> {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 \n <strong>red</strong>\n column may not be altered at all. The contents of the \n <strong>yellow</strong>\n columns may be altered, the headers may not. The \n <strong>green</strong>\n columns must contain at least one \n <i>_Value</i>\n and \n <i>_Unit</i>\n 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 \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: \n {formatDate(attachment.created_at)}\n </div>\n | \n <div>\n Size: \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 \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 \n <span>{wellplate.name}</span>\n \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 \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 \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 \n {title}\n \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\" /> 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\" /> \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\" /> \n Abort\n </Button>\n </div>\n );\n\n return (\n <span>\n <i className=\"icon-sample\" onClick={() => this.toggleTooltip()} style={{ cursor: \"pointer\" }}> </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\" }}> </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 {trash} \n <i className=\"fa fa-download\" onClick={() => handleAttachmentDownload(attachment)} style={{ cursor: 'pointer' }} />\n \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\" }}> </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 {trash} \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 ‹\n </button>\n <button\n onClick={handleNextClick}\n disabled={currentDataSetPage === totalPages}\n type=\"button\"\n >\n ›\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 \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 \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)} \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 \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: \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 \n {numberOfAttachments}\n \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 \n {entry.element_name}\n \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 \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 \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 \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 \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 \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 \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 Similarity Search \n </Radio>\n \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 ‘{newLabel}’ 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 \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> <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 \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 >> products</Radio>\n <Radio onChange={() => onChange(1)} checked={this.state.value == 1} value={1}>starting_materials.reactants >> products</Radio>\n <Radio onChange={() => onChange(2)} checked={this.state.value == 2} value={2}>starting_materials.reactants.solvents >> products</Radio>\n <Radio onChange={() => onChange(3)} checked={this.state.value == 3} value={3}>starting_materials > reactants > products</Radio>\n <Radio onChange={() => onChange(4)} checked={this.state.value == 4} value={4}>starting_materials > reactants.solvents > products</Radio>\n <Radio onChange={() => onChange(5)} checked={this.state.value == 5} value={5}>starting_materials > reactants > solvents > 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} /> {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\" /> 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 \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} /> {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 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 \n {not.subject}\n \n <span>\n <strong>From: </strong>\n {not.sender_name}\n </span>\n \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 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 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 \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}> </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> Ω </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 \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 \n {elementLabels}\n \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⋅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 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'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 \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 \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 \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 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 \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 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 Click on a row to select the X-Vial. Remember to press the\n 'Save' button if you wish to save the selection.\n </div>\n <Button bsStyle=\"warning\" onClick={() => setDataModalShow(false)}>\n Cancel\n </Button>\n \n <Button bsStyle=\"primary\" onClick={() => save()}>\n Save\n </Button>\n \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> \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 -> add information (solvent, molarity etc.) in the panel for\n the sample -> 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 "room temperature" or "over night/over the weekend" 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'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 "additional information for publication and\n purification details"\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 "A,B, ... P1, P2"\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 "properties" 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\" /> \n Creator\n <i className=\"fa fa-pencil\" aria-hidden=\"true\" /> 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: \n {formatDate(attachment.created_at)}\n </div>\n | \n <div>\n Size: \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 \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 \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 \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 \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 \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 \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 \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\" /> \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\" /> 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\" /> \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%\"> </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 \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 \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 \n <FormGroup controlId=\"formInlineNameAbbr\">\n <ControlLabel>Name abbreviation:</ControlLabel>\n \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 \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%\"> </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%\"> </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 \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 \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 & 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 \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}¬eable_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} {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 \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 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 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 Click on a row to select the X-Vial. Remember to press the\n 'Save' button if you wish to save the selection.\n </div>\n <Button bsStyle=\"warning\" onClick={() => this.closeModal()}>\n Cancel\n </Button>\n \n <Button bsStyle=\"primary\" onClick={() => this.save()}>\n Save\n </Button>\n \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 \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: </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> {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> {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' }}> <i className=\"fa fa-check\" /></div>) : (<div style={{ display: 'inline', color: 'red' }}> (<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' }}> <i className=\"fa fa-check\" /></div>) : (<div style={{ display: 'inline', color: 'red' }}> (<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>: {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 </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> \n <div role=\"button\" style={{ display: 'inline' }} onClick={() => this.setState({ isShow: !isShow })}>\n <i className=\"fa fa-question-circle\" aria-hidden=\"true\" />\n </div> \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> \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 /> : ''} {e.title}\n </span>\n By {e.published_by} at \n {getFormattedISODateTime(e.submit_at)} {user?.type === RepoConst.U_TYPE.ANONYMOUS ? '' : StateLabel(e.state)}\n {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⋅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 <i className=\"fa fa-file-text-o\" aria-hidden=\"true\" /> to open a text editor and add into the content.</li>\n <li>Use <i className=\"fa fa-picture-o\" aria-hidden=\"true\" /> to open a image editor and add into the content.</li>\n <li>Use <i className=\"fa fa-arrows\" aria-hidden=\"true\" /> to change the section order.</li>\n <li>Use <i className=\"fa fa-trash-o\" aria-hidden=\"true\" /> to remove the section from the content.</li>\n <li>In text editor, use <i className=\"fa fa-link\" aria-hidden=\"true\" /> 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} \n <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">table values</Tooltip>}>{dtbl}</OverlayTrigger> \n <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">description</Tooltip>}>{ddes}</OverlayTrigger> \n <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">analysis format</Tooltip>}>{dafm}</OverlayTrigger> \n <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">analysis content</Tooltip>}>{dact}</OverlayTrigger> \n <OverlayTrigger placement=\"bottom\" overlay={<Tooltip id=\"id_icon_tip\">on hold</Tooltip>}>{dohd}</OverlayTrigger> \n {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 <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 \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> \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 \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 \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} /> \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> \n <span className=\"repo-pub-title\"><b>Product</b></span> \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} /> \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} <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} <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' }}> </td>\n <td style={{ width: '12%', textAlign: 'center' }}> </td>\n <td style={{ width: '12%', textAlign: 'center' }}> </td>\n <td style={{ width: '12%', textAlign: 'center' }}> </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} <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 {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> <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} /> \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> \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> </p>\n <b>{kind}</b> \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 {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 /> \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} <ClipboardCopyBtn text={`https://dx.doi.org/${doi?.full_doi}`} />\n </span>\n );\n }\n\n return (\n <h5>\n <b>{title} </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' }}> HOW TO </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\">* </div>\n <div className=\"article_title\">Title</div>\n <div className=\"article_content\"><i className=\"fa fa-exclamation-circle\" aria-hidden=\"true\" /> 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\">* </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\" /> 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' }}> HOW TO </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 {howto.creator_name}\n <p />\n <i className=\"fa fa-calendar\" aria-hidden=\"true\" /> Published on {DateFormatYMDLong(howto.published_at ? howto.published_at : howto.created_at)}, \n updated on {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\">* </div>\n <div className=\"article_title\">Title</div>\n <div className=\"article_content\"><i className=\"fa fa-exclamation-circle\" aria-hidden=\"true\" /> 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\">* </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\" /> 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 Chemotion 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 {news.creator_name}\n <i className=\"fa fa-calendar\" aria-hidden=\"true\" /> {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 \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 \n <i className={`icon-${lit.element_type.toLowerCase()}`} />\n \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 \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 {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 /> : ''} \n <DateInfo\n isPublished={isPublished}\n preText=\"Reaction\"\n pubData={pubData}\n tagData={taggData}\n />\n \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 \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\" /> \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\" /> 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} /> {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\" /> \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 \n <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://www.youtube.com/channel/UCWBwk4ZSXwmDzFo_ZieBcAw?\"><i className=\"fa fa-youtube-play youtube\" /></a>\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\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: </b>\n <ExactFormula sample={sample} molecule={molecule} />\n </h5>\n {em && (\n <h5>\n <b>Exact Mass: </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} /> \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 \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 ? ',' : ''} \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 ? ',' : ''} \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 \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 {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 \n <span className=\"repo-pub-title\">\n <DateInfo\n isPublished={isPublished}\n preText=\"Sample\"\n pubData={pubData}\n tagData={tagData}\n />\n </span>\n \n <SidToPubChem sid={sample.sid} />\n \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 \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 \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 \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} \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 \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":""}