synapse-react-client 4.0.44 → 4.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SWC.index.d.ts +1 -1
- package/dist/SWC.index.js +2 -2
- package/dist/SWC.index.js.map +1 -1
- package/dist/aridhia-queries/AridhiaKeyFactory.d.ts +1 -0
- package/dist/aridhia-queries/AridhiaKeyFactory.d.ts.map +1 -1
- package/dist/aridhia-queries/AridhiaKeyFactory.js +3 -0
- package/dist/aridhia-queries/AridhiaKeyFactory.js.map +1 -1
- package/dist/aridhia-queries/aridhiaTokenExchange.js +6 -6
- package/dist/aridhia-queries/index.d.ts +1 -0
- package/dist/aridhia-queries/index.d.ts.map +1 -1
- package/dist/aridhia-queries/index.js +11 -10
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts +19 -0
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js +14 -0
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js.map +1 -0
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +6 -4
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.d.ts +2 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.js +126 -125
- package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementListItem.d.ts +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementListItem.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementListItem.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +28 -16
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +99 -97
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +11 -8
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/RequestDataStep.d.ts +1 -4
- package/dist/components/AccessRequirementList/RequestDataStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/RequestDataStep.js +15 -18
- package/dist/components/AccessRequirementList/RequestDataStep.js.map +1 -1
- package/dist/components/AccessTokenPage/AccessTokenPage.js +1 -1
- package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +1 -1
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSectionForm.js +17 -13
- package/dist/components/Aridhia/DarWizard/DarSectionForm.js.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts +3 -3
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +33 -34
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -1
- package/dist/components/Aridhia/fairFormToRjsf.js +1 -1
- package/dist/components/Aridhia/fairFormToRjsf.js.map +1 -1
- package/dist/components/Authentication/LastLoginInfo.js +1 -1
- package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
- package/dist/components/CertificationQuiz/CertificationQuiz.js +1 -1
- package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
- package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +1 -1
- package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
- package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js +1 -1
- package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
- package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +6 -6
- package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.d.ts.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js +4 -4
- package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js +4 -4
- package/dist/components/CitationPopover/CitationPopoverContent.js +4 -4
- package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
- package/dist/components/ComponentCollapse.d.ts.map +1 -1
- package/dist/components/ComponentCollapse.js +2 -1
- package/dist/components/ComponentCollapse.js.map +1 -1
- package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.d.ts.map +1 -1
- package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js +52 -49
- package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.js +231 -219
- package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
- package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -1
- package/dist/components/DataGrid/SyncGridWithSourceButton.js +5 -4
- package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +7 -5
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
- package/dist/components/DataGrid/components/ExportCsvFromGridButton.js +4 -4
- package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsButton.js +4 -4
- package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js +12 -8
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
- package/dist/components/DataGrid/components/UploadCsvToGridButton.js +1 -1
- package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
- package/dist/components/DataGrid/hooks/useGridUndoRedo.js +5 -5
- package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/applyModelChange.js +14 -14
- package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.js +1 -1
- package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
- package/dist/components/DataGrid/utils/splitPatch.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/splitPatch.js +22 -13
- package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
- package/dist/components/DownloadCart/DownloadCartPage.js +1 -1
- package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +2 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +1 -3
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +16 -10
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
- package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -1
- package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
- package/dist/components/EntityFinder/EntityFinder.js +4 -4
- package/dist/components/EntityFinder/EntityIdTextField.js +1 -1
- package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
- package/dist/components/EntityFinder/tree/VirtualizedTree.d.ts.map +1 -1
- package/dist/components/EntityFinder/tree/VirtualizedTree.js +5 -4
- package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js +1 -1
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
- package/dist/components/EntityTreeTable/components/EntityNameCell.d.ts.map +1 -1
- package/dist/components/EntityTreeTable/components/EntityNameCell.js +2 -1
- package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
- package/dist/components/EntityUpload/FileUploadProgress.d.ts.map +1 -1
- package/dist/components/EntityUpload/FileUploadProgress.js +11 -7
- package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
- package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.d.ts.map +1 -1
- package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js +4 -3
- package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
- package/dist/components/ExperimentalMode/ExperimentalMode.js +1 -1
- package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
- package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js +1 -1
- package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +2 -1
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -1
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +2 -1
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -1
- package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/FieldLibrary.js +2 -1
- package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -1
- package/dist/components/FormTemplateEditor/FieldLibraryRow.js +4 -4
- package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -1
- package/dist/components/FormTemplateEditor/FormStructurePanel.js +1 -1
- package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -1
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +1 -1
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -1
- package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/StepCard.js +15 -10
- package/dist/components/FormTemplateEditor/StepCard.js.map +1 -1
- package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/StepFieldRow.js +11 -6
- package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -1
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +2 -1
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -1
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -1
- package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.d.ts +9 -0
- package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.d.ts.map +1 -0
- package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.js +45 -0
- package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.js.map +1 -0
- package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.d.ts +22 -0
- package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.d.ts.map +1 -0
- package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.js +139 -0
- package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.js.map +1 -0
- package/dist/components/Forum/ForumTable.d.ts +17 -5
- package/dist/components/Forum/ForumTable.d.ts.map +1 -1
- package/dist/components/Forum/ForumTable.js +94 -77
- package/dist/components/Forum/ForumTable.js.map +1 -1
- package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +45 -45
- package/dist/components/GenericCard/PortalDOI/PortalDOI.js +5 -5
- package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.js +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
- package/dist/components/HelpPopover/HelpPopover.js +1 -1
- package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
- package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
- package/dist/components/IconSvg/IconSvg.js +154 -47
- package/dist/components/IconSvg/IconSvg.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ButtonTemplate.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js +19 -16
- package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +2 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts +9 -0
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts.map +1 -0
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js +21 -0
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js.map +1 -0
- package/dist/components/Markdown/MarkdownCollapse.d.ts.map +1 -1
- package/dist/components/Markdown/MarkdownCollapse.js +3 -1
- package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
- package/dist/components/OAuthClientManagement/OAuthManagement.js +14 -13
- package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
- package/dist/components/PortalList/PortalCard.d.ts.map +1 -1
- package/dist/components/PortalList/PortalCard.js +6 -5
- package/dist/components/PortalList/PortalCard.js.map +1 -1
- package/dist/components/PortalList/PortalList.js +4 -4
- package/dist/components/PortalList/PortalList.js.map +1 -1
- package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.js +6 -6
- package/dist/components/QueryBuilder/FilterConditionRow.js +4 -4
- package/dist/components/QueryCountButton/QueryCountButton.js +5 -5
- package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
- package/dist/components/ReleaseCard/ReleaseCardLarge.js +5 -5
- package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.d.ts.map +1 -1
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +142 -108
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
- package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.d.ts.map +1 -1
- package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js +15 -15
- package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js.map +1 -1
- package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.d.ts.map +1 -1
- package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js +57 -55
- package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
- package/dist/components/ShareThisPage/ShareThisPage.js +4 -4
- package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
- package/dist/components/SustainabilityScorecard/DialLayout.js +1 -1
- package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
- package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js +1 -1
- package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChat.js +1 -1
- package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.js +2 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
- package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js +1 -1
- package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js.map +1 -1
- package/dist/components/SynapseFooter/SynapseFooter.js +1 -1
- package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js +1 -1
- package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.d.ts.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +2 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseInActionItem.js +4 -4
- package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js +1 -1
- package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +4 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
- package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +1 -1
- package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.d.ts.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +12 -9
- package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +140 -140
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js +1 -1
- package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +9 -9
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js +6 -4
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
- package/dist/components/TanStackTable/ColumnHeader.js +1 -1
- package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js +1 -1
- package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.d.ts.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js +4 -3
- package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
- package/dist/components/Webhook/WebhookDashboard.js +1 -1
- package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
- package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
- package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
- package/dist/components/dataaccess/AccessRequirementTable.js +1 -1
- package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
- package/dist/components/dataaccess/EDucTemplateTable.d.ts.map +1 -1
- package/dist/components/dataaccess/EDucTemplateTable.js +13 -11
- package/dist/components/dataaccess/EDucTemplateTable.js.map +1 -1
- package/dist/components/dataaccess/FormTemplateTable.js +6 -6
- package/dist/components/dataaccess/FormTemplateTable.js.map +1 -1
- package/dist/components/dataaccess/ReviewerDashboard.js +17 -17
- package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
- package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +4 -4
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +4 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
- package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
- package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
- package/dist/components/download_list/DownloadDetails.d.ts.map +1 -1
- package/dist/components/download_list/DownloadDetails.js +12 -10
- package/dist/components/download_list/DownloadDetails.js.map +1 -1
- package/dist/components/entity/metadata/AnnotationsTable.js +1 -1
- package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
- package/dist/components/entity/page/CreatedByModifiedBy.js +1 -1
- package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
- package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
- package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +1 -1
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
- package/dist/components/error/ErrorChip.d.ts.map +1 -1
- package/dist/components/error/ErrorChip.js +2 -1
- package/dist/components/error/ErrorChip.js.map +1 -1
- package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +14 -14
- package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js +4 -4
- package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
- package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -1
- package/dist/features/curator/dashboard/components/NextStepButton.js +7 -6
- package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +8 -8
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +4 -4
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +4 -4
- package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js +4 -4
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js +10 -10
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js.map +1 -1
- package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js +1 -1
- package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts +5 -0
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts.map +1 -1
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js +37 -26
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +8 -0
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.js +52 -41
- package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/discussionHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/discussionHandlers.js +40 -33
- package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/entityHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/entityHandlers.js +70 -67
- package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/gridHandlers.js +2 -2
- package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
- package/dist/mocks/msw/server.d.ts.map +1 -1
- package/dist/mocks/msw/server.js +4 -2
- package/dist/mocks/msw/server.js.map +1 -1
- package/dist/synapse-client/SynapseClient.d.ts +10 -0
- package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
- package/dist/synapse-client/SynapseClient.js +486 -482
- package/dist/synapse-client/SynapseClient.js.map +1 -1
- package/dist/synapse-client/index.js +3 -3
- package/dist/synapse-queries/KeyFactory.d.ts +13 -1
- package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
- package/dist/synapse-queries/KeyFactory.js +11 -1
- package/dist/synapse-queries/KeyFactory.js.map +1 -1
- package/dist/synapse-queries/dataaccess/index.js +4 -4
- package/dist/synapse-queries/dataaccess/useAccessRequirements.d.ts.map +1 -1
- package/dist/synapse-queries/dataaccess/useAccessRequirements.js +4 -1
- package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useEDuc.d.ts +19 -5
- package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
- package/dist/synapse-queries/dataaccess/useEDuc.js +29 -21
- package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts +12 -0
- package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts.map +1 -1
- package/dist/synapse-queries/dataaccess/useFormTemplate.js +52 -30
- package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -1
- package/dist/synapse-queries/forum/useForum.d.ts +5 -1
- package/dist/synapse-queries/forum/useForum.d.ts.map +1 -1
- package/dist/synapse-queries/forum/useForum.js +23 -1
- package/dist/synapse-queries/forum/useForum.js.map +1 -1
- package/dist/synapse-queries/index.js +185 -184
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts +5 -3
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts.map +1 -1
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js +12 -15
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js.map +1 -1
- package/dist/synapse-queries/user/useGetUserChallenges.d.ts.map +1 -1
- package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
- package/dist/theme/DefaultTheme.d.ts.map +1 -1
- package/dist/theme/DefaultTheme.js +4 -1
- package/dist/theme/DefaultTheme.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/APIConstants.d.ts.map +1 -1
- package/dist/utils/APIConstants.js.map +1 -1
- package/dist/utils/AppUtils/AppUtils.js +1 -1
- package/dist/utils/AppUtils/AppUtils.js.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
- package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
- package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
- package/dist/utils/functions/getEndpoint.d.ts +1 -0
- package/dist/utils/functions/getEndpoint.d.ts.map +1 -1
- package/dist/utils/functions/getEndpoint.js +3 -3
- package/dist/utils/functions/getEndpoint.js.map +1 -1
- package/dist/utils/types/RequestableAccessRequirement.d.ts +8 -0
- package/dist/utils/types/RequestableAccessRequirement.d.ts.map +1 -0
- package/dist/utils/types/RequestableAccessRequirement.js +9 -0
- package/dist/utils/types/RequestableAccessRequirement.js.map +1 -0
- package/package.json +6 -5
- package/dist/testutils/ReactQueryMockUtils.js +0 -676
- package/dist/testutils/ReactQueryMockUtils.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapsePortalBanners.js","names":[],"sources":["../../../src/components/SynapsePortalBanners/SynapsePortalBanners.tsx"],"sourcesContent":["import {\n useGetEntityPath,\n useGetQueryResultBundleWithAsyncStatus,\n} from '@/synapse-queries'\nimport { useSourceAppConfigs } from '@/utils/hooks'\nimport { BUNDLE_MASK_QUERY_RESULTS } from '@/utils/SynapseConstants'\nimport
|
|
1
|
+
{"version":3,"file":"SynapsePortalBanners.js","names":[],"sources":["../../../src/components/SynapsePortalBanners/SynapsePortalBanners.tsx"],"sourcesContent":["import {\n useGetEntityPath,\n useGetQueryResultBundleWithAsyncStatus,\n} from '@/synapse-queries'\nimport { useSourceAppConfigs } from '@/utils/hooks'\nimport { BUNDLE_MASK_QUERY_RESULTS } from '@/utils/SynapseConstants'\nimport ChevronRightTwoTone from '@mui/icons-material/ChevronRightTwoTone'\nimport { Box, Typography } from '@mui/material'\nimport {\n ColumnSingleValueQueryFilter,\n ColumnSingleValueFilterOperator,\n} from '@sage-bionetworks/synapse-types'\n\nexport type SynapsePortalBannersProps = {\n entityId: string\n dataCatalogEntityId?: string\n sourceAppConfigTableID?: string\n}\n\n/**\n *\n * @param props\n */\nexport default function SynapsePortalBanners({\n entityId,\n dataCatalogEntityId = 'syn61609402',\n sourceAppConfigTableID = 'syn45291362',\n}: SynapsePortalBannersProps) {\n const { data: entityPathData } = useGetEntityPath(entityId)\n // get all EntityHeader ids in the entity path data in a string array\n // Note: we remove the first item from entityPathData.path as it is always the root Synapse folder which we don't want to include\n const entityIdValues: string[] = entityPathData\n ? entityPathData.path.map(header => header.id).slice(1)\n : [entityId]\n\n const dataCatalogAdditionalFilters: ColumnSingleValueQueryFilter[] =\n entityIdValues\n ? [\n {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: 'id',\n operator: ColumnSingleValueFilterOperator.IN,\n values: entityIdValues,\n },\n ]\n : []\n const { data: dataCatalogData } = useGetQueryResultBundleWithAsyncStatus(\n {\n entityId: dataCatalogEntityId,\n query: {\n sql: `SELECT appId, link FROM ${dataCatalogEntityId}`,\n additionalFilters: dataCatalogAdditionalFilters,\n },\n partMask: BUNDLE_MASK_QUERY_RESULTS,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n },\n {\n enabled: !!entityPathData,\n },\n )\n\n const rowSet = dataCatalogData?.responseBody?.queryResult?.queryResults\n const hasPortalBanners = !!rowSet && rowSet?.rows.length > 0\n\n const appIds = rowSet?.rows\n .map(row => row.values[0])\n .filter((v): v is string => !!v) as string[]\n const hasAppIds = appIds && appIds.length > 0\n\n const sourceAppConfigFilters: ColumnSingleValueQueryFilter[] = hasAppIds\n ? [\n {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: 'appId',\n operator: ColumnSingleValueFilterOperator.EQUAL,\n values: appIds,\n },\n ]\n : []\n const sourceAppConfigs = useSourceAppConfigs(\n sourceAppConfigTableID,\n sourceAppConfigFilters,\n )\n const hasSourceAppConfigs = !!sourceAppConfigs && sourceAppConfigs.length > 0\n\n if (!hasAppIds || !hasPortalBanners || !hasSourceAppConfigs) {\n return <></>\n }\n\n // we have source app configs associated to this entity, let's render the banners\n return (\n <Box\n sx={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '20px',\n width: '100%',\n alignItems: 'center',\n }}\n >\n {sourceAppConfigs.map((appConfig, index) => {\n const dataCatalogRow = rowSet.rows.find(row => {\n return row.values[0] === appConfig.appId\n })\n\n const link = dataCatalogRow?.values[1] || appConfig.appURL\n return (\n <Box\n key={index}\n component=\"a\"\n href={link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n flex={1}\n sx={{\n display: 'flex',\n flexWrap: 'nowrap',\n padding: '16px',\n justifyContent: 'space-between',\n border: '1px solid #ccc',\n borderRadius: '8px',\n backgroundColor: '#f9f9f9',\n textDecoration: 'none',\n pointer: 'cursor',\n '&:hover': {\n textDecoration: 'none !important',\n },\n width: '100%',\n alignItems: 'center',\n mt: '10px',\n mb: '10px',\n }}\n >\n <Box\n flex={1}\n sx={{\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n gap: '10px',\n }}\n >\n <Box\n sx={{\n '> *': {\n height: '60px',\n },\n }}\n >\n {appConfig?.logo}\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n mr: '10px',\n }}\n >\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n This resource is part of a Portal\n </Typography>\n <Typography variant=\"body1\">\n {' '}\n Access it on the {appConfig.friendlyName}\n </Typography>\n </Box>\n </Box>\n <ChevronRightTwoTone />\n </Box>\n )\n })}\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;;;AAuBA,SAAwB,EAAqB,EAC3C,aACA,yBAAsB,eACtB,4BAAyB,iBACG;CAC5B,IAAM,EAAE,MAAM,MAAmB,EAAiB,CAAQ,GAGpD,IAA2B,IAC7B,EAAe,KAAK,KAAI,MAAU,EAAO,EAAE,EAAE,MAAM,CAAC,IACpD,CAAC,CAAQ,GAEP,IACJ,IACI,CACE;EACE,cACE;EACF,YAAY;EACZ,UAAU,EAAgC;EAC1C,QAAQ;CACV,CACF,IACA,CAAC,GACD,EAAE,MAAM,MAAoB,EAChC;EACE,UAAU;EACV,OAAO;GACL,KAAK,2BAA2B;GAChC,mBAAmB;EACrB;EACA,UAAA;EACA,cAAc;CAChB,GACA,EACE,SAAS,CAAC,CAAC,EACb,CACF,GAEM,IAAS,GAAiB,cAAc,aAAa,cACrD,IAAmB,CAAC,CAAC,KAAU,GAAQ,KAAK,SAAS,GAErD,IAAS,GAAQ,KACpB,KAAI,MAAO,EAAI,OAAO,EAAE,EACxB,QAAQ,MAAmB,CAAC,CAAC,CAAC,GAC3B,IAAY,KAAU,EAAO,SAAS,GAatC,IAAmB,EACvB,GAZ6D,IAC3D,CACE;EACE,cACE;EACF,YAAY;EACZ,UAAU,EAAgC;EAC1C,QAAQ;CACV,CACF,IACA,CAAC,CAIL,GACM,IAAsB,CAAC,CAAC,KAAoB,EAAiB,SAAS;CAO5E,OALI,CAAC,KAAa,CAAC,KAAoB,CAAC,IAC/B,kBAAA,GAAA,CAAI,CAAA,IAKX,kBAAC,GAAD;EACE,IAAI;GACF,SAAS;GACT,UAAU;GACV,KAAK;GACL,OAAO;GACP,YAAY;EACd;YAEC,EAAiB,KAAK,GAAW,MAO9B,kBAAC,GAAD;GAEE,WAAU;GACV,MATmB,EAAO,KAAK,MAAK,MAC/B,EAAI,OAAO,OAAO,EAAU,KAGxB,GAAgB,OAAO,MAAM,EAAU;GAMhD,QAAO;GACP,KAAI;GACJ,MAAM;GACN,IAAI;IACF,SAAS;IACT,UAAU;IACV,SAAS;IACT,gBAAgB;IAChB,QAAQ;IACR,cAAc;IACd,iBAAiB;IACjB,gBAAgB;IAChB,SAAS;IACT,WAAW,EACT,gBAAgB,kBAClB;IACA,OAAO;IACP,YAAY;IACZ,IAAI;IACJ,IAAI;GACN;aAxBF,CA0BE,kBAAC,GAAD;IACE,MAAM;IACN,IAAI;KACF,SAAS;KACT,UAAU;KACV,gBAAgB;KAChB,KAAK;IACP;cAPF,CASE,kBAAC,GAAD;KACE,IAAI,EACF,OAAO,EACL,QAAQ,OACV,EACF;eAEC,GAAW;IACT,CAAA,GACL,kBAAC,GAAD;KACE,IAAI;MACF,SAAS;MACT,eAAe;MACf,gBAAgB;MAChB,IAAI;KACN;eANF,CAQE,kBAAC,GAAD;MAAY,SAAQ;MAAQ,IAAI,EAAE,YAAY,IAAI;gBAAG;KAEzC,CAAA,GACZ,kBAAC,GAAD;MAAY,SAAQ;gBAApB;OACG;OAAI;OACa,EAAU;MAClB;OACT;MACF;OACL,kBAAC,GAAD,CAAsB,CAAA,CACnB;KA7DE,CA6DF,CAER;CACE,CAAA;AAET"}
|
|
@@ -15,7 +15,7 @@ import { AppliedFacetsChips as u, SearchFacetPanel as d } from "./SearchFacetPan
|
|
|
15
15
|
import { Suspense as f, useCallback as p, useEffect as m, useMemo as h, useState as g } from "react";
|
|
16
16
|
import { Badge as _, Box as v, Button as y, Collapse as te, IconButton as b, InputAdornment as x, Link as S, Skeleton as C, TextField as w, Typography as T } from "@mui/material";
|
|
17
17
|
import { Fragment as E, jsx as D, jsxs as O } from "react/jsx-runtime";
|
|
18
|
-
import
|
|
18
|
+
import k from "@mui/icons-material/ArrowForward";
|
|
19
19
|
import A from "@mui/icons-material/Search";
|
|
20
20
|
import ne from "@mui/icons-material/FilterAltOutlined";
|
|
21
21
|
//#region src/components/SynapseSearchPageResults/SynapseSearchPageResults.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseSearchPageResults.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchPageResults.tsx"],"sourcesContent":["import {\n Box,\n TextField,\n InputAdornment,\n Button,\n Typography,\n IconButton,\n Collapse,\n Badge,\n Skeleton,\n Link,\n} from '@mui/material'\nimport SynapseSearchResultsCard from './SynapseSearchResultsCard'\nimport SearchIcon from '@mui/icons-material/Search'\nimport FilterAltOutlinedIcon from '@mui/icons-material/FilterAltOutlined'\nimport React, {\n useState,\n useEffect,\n useMemo,\n useCallback,\n Suspense,\n} from 'react'\nimport { useSearchInfinite } from '@/synapse-queries/search/useSearch'\nimport {\n SearchQuery,\n KeyRange,\n Hit,\n Facet,\n} from '@sage-bionetworks/synapse-types'\nimport { useDocumentMetadata } from '@/utils/context/DocumentMetadataContext'\nimport { ArrowForward } from '@mui/icons-material'\nimport styles from './SynapseSearchPageResults.module.scss'\nimport { useSuggestion } from '@/synapse-queries/search/useSuggestion'\nimport { Suggestion } from '@sage-bionetworks/synapse-client'\nimport SearchPagePortalBanners from './SearchPagePortalBanners'\nimport { SYNAPSE_ENTITY_ID_REGEX } from '@/utils/functions/RegularExpressions'\nimport { DEFAULT_SEARCH_QUERY } from '@/utils/searchDefaults'\nimport {\n SearchFacetPanel,\n AppliedFacetsChips,\n} from './SearchFacetPanel/SearchFacetPanel'\nimport { shouldShowFacetValue } from './SearchFacetPanel/SearchFacetPanelUtils'\nimport { SkeletonInlineBlock } from '../Skeleton'\nimport { useSynapseContext } from '@/utils'\n\n/**\n * Add a literal facet filter to the query\n */\nfunction addFacetToQuery(\n query: SearchQuery,\n facetName: string,\n facetValue: string,\n): SearchQuery {\n const booleanQuery = query.booleanQuery || []\n\n const isFilterAlreadyApplied = booleanQuery.some(\n kv => kv.key === facetName && kv.value === facetValue,\n )\n\n if (isFilterAlreadyApplied) {\n return query\n }\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n booleanQuery: [\n ...booleanQuery,\n { key: facetName, value: facetValue, not: false },\n ],\n start: 0, // Reset to first page\n }\n}\n\n/**\n * Remove a literal facet filter from the query\n */\nfunction removeFacetFromQuery(\n query: SearchQuery,\n facetName: string,\n facetValue: string,\n): SearchQuery {\n const booleanQuery = query.booleanQuery || []\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n booleanQuery: booleanQuery.filter(\n kv => !(kv.key === facetName && kv.value === facetValue),\n ),\n start: 0,\n }\n}\n\n/**\n * Set a range facet (ex, for modified on, created on)\n */\nfunction setRangeFacetInQuery(\n query: SearchQuery,\n facetName: string,\n minValue: string,\n): SearchQuery {\n const rangeQuery = query.rangeQuery || []\n\n // Remove any existing range for this facet\n const filteredRangeQuery = rangeQuery.filter(kr => kr.key !== facetName)\n\n const maxValue = String(Math.floor(Date.now() / 1000)) // Now in seconds\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n rangeQuery: [\n ...filteredRangeQuery,\n { key: facetName, min: minValue, max: maxValue },\n ],\n start: 0,\n }\n}\n\n/**\n * Remove a range facet from the query\n */\nfunction removeRangeFacetFromQuery(\n query: SearchQuery,\n facetName: string,\n): SearchQuery {\n const rangeQuery = query.rangeQuery || []\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n rangeQuery: rangeQuery.filter(kr => kr.key !== facetName),\n start: 0,\n }\n}\n\n/**\n * Check if a range facet is currently applied\n */\nfunction isRangeFacetApplied(query: SearchQuery, facetName: string): boolean {\n const rangeQuery = query.rangeQuery || []\n return rangeQuery.some(kr => kr.key === facetName)\n}\n\n/**\n * Get the applied range facet value for a given facet name\n */\nfunction getAppliedRangeFacet(\n query: SearchQuery,\n facetName: string,\n): KeyRange | undefined {\n const rangeQuery = query.rangeQuery || []\n return rangeQuery.find(kr => kr.key === facetName)\n}\n\nexport type SynapseSearchPageResultsProps = {\n query?: SearchQuery\n setQuery?: (newQuery: SearchQuery) => void\n}\n\nexport function SynapseSearchPageResults(props: SynapseSearchPageResultsProps) {\n const MIN_SUGGESTION_SCORE = 0.75\n const { query, setQuery } = props\n const { peopleSearchPageUrl } = useSynapseContext()\n const [expanded, setExpanded] = useState(false)\n\n // Set page title (replaces jsniUtils.setPageTitle(DisplayConstants.LABEL_SEARCH) from Java)\n useDocumentMetadata({ title: `Search: ${query?.queryTerm?.join(' ')}` })\n\n // Capture local state to prevent search from executing on every keystroke\n // Join query terms so that textfield input looks correct\n const [searchInputValue, setSearchInputValue] = useState(\n query?.queryTerm?.join(' ') || '',\n )\n\n // Sync input value when query prop changes\n // Join query terms so that textfield input looks correct\n useEffect(() => {\n setSearchInputValue(query?.queryTerm?.join(' ') || '')\n }, [query])\n\n // Execute search\n const {\n data,\n isLoading,\n error,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n } = useSearchInfinite(\n query\n ? {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n size: 50,\n returnFields: ['path'],\n }\n : { queryTerm: [], size: 50, returnFields: ['path'] },\n {\n enabled: !!query?.queryTerm?.[0],\n },\n )\n\n // Update local input state\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchInputValue(event.target.value)\n }\n\n // Update query only when user explicitly searches\n // Split query terms to form array\n const handleSearch = () => {\n if (setQuery) {\n const newQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n queryTerm: searchInputValue\n ? searchInputValue\n .split(' ')\n .map(term => term.trim())\n .filter(Boolean)\n : [],\n start: 0,\n }\n setQuery(newQuery)\n }\n }\n\n // Fetch spelling suggestions for the search terms\n const { data: suggestionData } = useSuggestion(\n { searchTerm: query?.queryTerm },\n\n {\n enabled: !!query?.queryTerm?.[0],\n },\n )\n\n const suggestion = useMemo(() => {\n const suggestionValues = suggestionData?.suggestions\n const terms = query?.queryTerm || []\n\n if (!suggestionValues) return null\n\n // Map original terms to their best suggestions if available\n const suggestionMap = new Map<string, string>()\n let hasSuggestion = false\n\n for (const suggestionList of suggestionValues) {\n const originalTerm = suggestionList.key\n const suggestions = Array.from(suggestionList.values ?? [])\n\n // Among suggestions above the score threshold, pick the highest-frequency term.\n const bestSuggestion = suggestions.reduce<Suggestion | null>(\n (best, current) => {\n if (\n current.score === undefined ||\n current.score < MIN_SUGGESTION_SCORE\n ) {\n return best\n }\n if (!best || (current.frequency ?? 0) > (best.frequency ?? 0)) {\n return current\n }\n return best\n },\n null,\n )\n\n // If a valid suggestion is found and it's different from the original term, add it to the map\n if (bestSuggestion?.term && bestSuggestion.term !== originalTerm) {\n suggestionMap.set(originalTerm!, bestSuggestion.term)\n hasSuggestion = true\n }\n }\n\n if (!hasSuggestion) return null\n\n // Build the corrected search string by replacing misspelled terms\n // Use toLowerCase() because the suggestion API returns keys in lowercase\n const correctedTerms = terms.map(\n term => suggestionMap.get(term.toLowerCase()) || term,\n )\n\n return correctedTerms.join(' ')\n }, [suggestionData, query?.queryTerm])\n\n // Extract entity IDs from search results for relevant portal banner display\n const entityIdsForPortalBanners = useMemo(() => {\n if (!data?.pages || data.pages.length === 0) {\n return []\n }\n\n const entityIds = new Set<string>()\n\n const firstPage = data.pages[0]\n\n if (firstPage?.hits) {\n for (const hit of firstPage.hits) {\n // search result is the top-level Project itself\n if (hit.id) {\n entityIds.add(hit.id)\n }\n\n if (hit.path?.path) {\n for (const pathEntity of hit.path.path.slice(1)) {\n if (pathEntity.id) {\n entityIds.add(pathEntity.id)\n }\n }\n }\n }\n }\n\n const finalIds = Array.from(entityIds)\n\n return finalIds\n }, [data])\n\n const handleUseSuggestion = () => {\n if (setQuery && suggestion) {\n const newQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n queryTerm: suggestion\n .split(' ')\n .map(term => term.trim())\n .filter(Boolean),\n start: 0,\n }\n setQuery(newQuery)\n }\n }\n\n const noResults = data?.pages?.[0]?.hits?.length === 0\n const isSynId = SYNAPSE_ENTITY_ID_REGEX.test(query?.queryTerm?.[0] || '')\n\n // cached facets in local state to prevent them from being cleared when the query changes and new search results are loading\n const [facets, setFacets] = useState<Facet[]>([])\n\n useEffect(() => {\n const newFacets = data?.pages?.[0]?.facets\n if (newFacets) {\n setFacets(newFacets)\n }\n }, [data])\n\n const handleAddFacet = useCallback(\n (facetName: string, facetValue: string) => {\n if (setQuery && query) {\n setQuery(addFacetToQuery(query, facetName, facetValue))\n }\n },\n [query, setQuery],\n )\n\n const handleRemoveFacet = useCallback(\n (facetName: string, facetValue: string) => {\n if (setQuery && query) {\n setQuery(removeFacetFromQuery(query, facetName, facetValue))\n }\n },\n [query, setQuery],\n )\n\n const handleSetRangeFacet = useCallback(\n (facetName: string, minValue: string) => {\n if (setQuery && query) {\n setQuery(setRangeFacetInQuery(query, facetName, minValue))\n }\n },\n [query, setQuery],\n )\n\n const handleRemoveRangeFacet = useCallback(\n (facetName: string) => {\n if (setQuery && query) {\n setQuery(removeRangeFacetFromQuery(query, facetName))\n }\n },\n [query, setQuery],\n )\n\n const isRangeFacetAppliedCallback = useCallback(\n (name: string) => (query ? isRangeFacetApplied(query, name) : false),\n [query],\n )\n\n const getAppliedRangeFacetCallback = useCallback(\n (name: string) => (query ? getAppliedRangeFacet(query, name) : undefined),\n [query],\n )\n\n const appliedFacetsCount =\n (query?.booleanQuery?.filter(kv => shouldShowFacetValue(kv.key, kv.value))\n .length || 0) + (query?.rangeQuery?.length || 0)\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n p: '30px',\n gap: '20px',\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: 'auto',\n gap: '16px',\n }}\n >\n {peopleSearchPageUrl && (\n <Typography variant=\"smallText1\">\n Searching for a user profile? Try our{' '}\n <Link href={peopleSearchPageUrl}>People Search.</Link>\n </Typography>\n )}\n <Box className={styles.searchContainer}>\n <TextField\n placeholder=\"Search…\"\n sx={{ flex: 1 }}\n value={searchInputValue}\n onChange={handleInputChange}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleSearch()\n }\n }}\n slotProps={{\n input: {\n sx: {\n borderRadius: '96px',\n boxShadow: '0px 1px 4px var(--synapse-gray-500)',\n backgroundColor: 'var(--synapse-white)',\n },\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ color: 'secondary.600' }} />\n </InputAdornment>\n ),\n },\n }}\n />\n <Button\n onClick={() => setExpanded(true)}\n variant=\"outlined\"\n startIcon={<FilterAltOutlinedIcon />}\n aria-expanded={expanded}\n aria-controls=\"filter-search-results-panel\"\n sx={{\n color: theme => theme.palette.primary.dark,\n }}\n className={styles.filterButton}\n >\n <Typography\n sx={{\n fontWeight: 700,\n lineHeight: '16px',\n display: 'flex',\n gap: '8px',\n }}\n >\n <span id=\"filter-results-button-label\">\n Filter Search Results\n </span>\n {appliedFacetsCount > 0 && (\n <Badge\n badgeContent={appliedFacetsCount}\n color=\"primary\"\n sx={{\n '& .MuiBadge-badge': {\n position: 'static',\n transform: 'none',\n height: '18px',\n minWidth: '18px',\n },\n }}\n />\n )}\n </Typography>\n </Button>\n </Box>\n <Box>\n {facets.length > 0 && (\n <Collapse\n in={expanded}\n id=\"filter-search-results-panel\"\n aria-labelledby=\"filter-results-button-label\"\n >\n <Box\n sx={{\n border: '1px solid',\n borderColor: 'var(--synapse-gray-100)',\n backgroundColor: 'var(--synapse-white)',\n padding: '25px',\n boxShadow: '0 4px 16px 0 rgba(0, 0, 0, 0.04)',\n pointerEvents: isLoading ? 'none' : 'auto',\n opacity: isLoading ? 0.5 : 1,\n }}\n >\n {query && setQuery && (\n <SearchFacetPanel\n expanded={expanded}\n onCollapse={() => setExpanded(false)}\n disabled={isLoading}\n query={query}\n setQuery={setQuery}\n facets={facets}\n onAddFacet={handleAddFacet}\n onRemoveFacet={handleRemoveFacet}\n onSetRangeFacet={handleSetRangeFacet}\n onRemoveRangeFacet={handleRemoveRangeFacet}\n isRangeFacetApplied={isRangeFacetAppliedCallback}\n getAppliedRangeFacet={getAppliedRangeFacetCallback}\n />\n )}\n </Box>\n </Collapse>\n )}\n </Box>\n </Box>\n <>\n {data && !isSynId && suggestion && (\n <div className={styles.didYouMeanContainer}>\n <div className={styles.didYouMeanCurrentlyShowing}>\n {!noResults && (\n <>\n Currently showing results for{' '}\n <b>{query?.queryTerm?.join(' ')}</b>.\n </>\n )}\n </div>\n <div className={styles.didYouMeanSuggestion}>\n <SearchIcon\n sx={{ color: 'grey.600' }}\n className={styles.searchIcon}\n />\n <Typography variant=\"body1\" className={styles.didYouMeanText}>\n Search for <b className={styles.suggestionText}>{suggestion}</b>{' '}\n instead?\n </Typography>\n <IconButton\n className={styles.didYouMeanArrowContainer}\n onClick={handleUseSuggestion}\n aria-label={`Search for ${suggestion} instead`}\n sx={{\n borderColor: 'primary.main',\n svg: { color: 'primary.main' },\n }}\n >\n <ArrowForward />\n </IconButton>\n </div>\n </div>\n )}\n {noResults && (\n <div className={styles.didYouMeanCurrentlyShowing}>\n No results found for <b>{query?.queryTerm?.join(' ')}</b>.\n </div>\n )}\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n gap: '20px',\n }}\n >\n {isLoading &&\n Array.from({ length: 3 }, () => (\n <Skeleton variant=\"rectangular\" width={'100%'} height={'250px'} />\n ))}\n {error && <div>Error: {error.message}</div>}\n <Suspense\n fallback={<SkeletonInlineBlock width={'100%'} height={'150px'} />}\n >\n <SearchPagePortalBanners entityIds={entityIdsForPortalBanners} />\n </Suspense>\n {query && (\n <Box sx={{ alignSelf: 'flex-start' }}>\n <AppliedFacetsChips\n query={query}\n onRemoveFacet={handleRemoveFacet}\n onRemoveRangeFacet={handleRemoveRangeFacet}\n />\n </Box>\n )}\n {data &&\n data.pages &&\n data.pages.map((page, pageIndex) =>\n page.hits.map((hit: Hit) => {\n const projectPath = hit.path?.path?.[1]\n return (\n <SynapseSearchResultsCard\n searchTerms={query?.queryTerm ?? []}\n key={hit.id + '-' + pageIndex}\n entityId={hit.id}\n name={hit.name}\n entityType={hit.node_type}\n modifiedOn={hit.modified_on}\n description={hit.description}\n locatedIn={projectPath}\n />\n )\n }),\n )}\n {hasNextPage && (\n <Button\n onClick={() => {\n void fetchNextPage()\n }}\n loading={isFetchingNextPage}\n variant=\"contained\"\n sx={{ mt: 2 }}\n >\n {isFetchingNextPage ? 'Loading more...' : 'Load More'}\n </Button>\n )}\n </Box>\n </>\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAgDA,SAAS,GACP,GACA,GACA,GACa;CACb,IAAM,IAAe,EAAM,gBAAgB,CAAC;CAU5C,OAR+B,EAAa,MAC1C,MAAM,EAAG,QAAQ,KAAa,EAAG,UAAU,CAGzC,IACK,IAGF;EACL,GAAG;EACH,GAAG;EACH,cAAc,CACZ,GAAG,GACH;GAAE,KAAK;GAAW,OAAO;GAAY,KAAK;EAAM,CAClD;EACA,OAAO;CACT;AACF;AAKA,SAAS,GACP,GACA,GACA,GACa;CACb,IAAM,IAAe,EAAM,gBAAgB,CAAC;CAE5C,OAAO;EACL,GAAG;EACH,GAAG;EACH,cAAc,EAAa,QACzB,MAAM,EAAE,EAAG,QAAQ,KAAa,EAAG,UAAU,EAC/C;EACA,OAAO;CACT;AACF;AAKA,SAAS,GACP,GACA,GACA,GACa;CAIb,IAAM,KAHa,EAAM,cAAc,CAAC,GAGF,QAAO,MAAM,EAAG,QAAQ,CAAS,GAEjE,IAAW,OAAO,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,CAAC;CAErD,OAAO;EACL,GAAG;EACH,GAAG;EACH,YAAY,CACV,GAAG,GACH;GAAE,KAAK;GAAW,KAAK;GAAU,KAAK;EAAS,CACjD;EACA,OAAO;CACT;AACF;AAKA,SAAS,GACP,GACA,GACa;CACb,IAAM,IAAa,EAAM,cAAc,CAAC;CAExC,OAAO;EACL,GAAG;EACH,GAAG;EACH,YAAY,EAAW,QAAO,MAAM,EAAG,QAAQ,CAAS;EACxD,OAAO;CACT;AACF;AAKA,SAAS,GAAoB,GAAoB,GAA4B;CAE3E,QADmB,EAAM,cAAc,CAAC,GACtB,MAAK,MAAM,EAAG,QAAQ,CAAS;AACnD;AAKA,SAAS,EACP,GACA,GACsB;CAEtB,QADmB,EAAM,cAAc,CAAC,GACtB,MAAK,MAAM,EAAG,QAAQ,CAAS;AACnD;AAOA,SAAgB,EAAyB,GAAsC;CAC7E,IACM,EAAE,UAAO,gBAAa,GACtB,EAAE,2BAAwB,EAAkB,GAC5C,CAAC,GAAU,KAAe,EAAS,EAAK;CAG9C,EAAoB,EAAE,OAAO,WAAW,GAAO,WAAW,KAAK,GAAG,IAAI,CAAC;CAIvE,IAAM,CAAC,GAAkB,KAAuB,EAC9C,GAAO,WAAW,KAAK,GAAG,KAAK,EACjC;CAIA,QAAgB;EACd,EAAoB,GAAO,WAAW,KAAK,GAAG,KAAK,EAAE;CACvD,GAAG,CAAC,CAAK,CAAC;CAGV,IAAM,EACJ,SACA,cACA,UACA,kBACA,gBACA,0BACE,EACF,IACI;EACE,GAAG;EACH,GAAG;EACH,MAAM;EACN,cAAc,CAAC,MAAM;CACvB,IACA;EAAE,WAAW,CAAC;EAAG,MAAM;EAAI,cAAc,CAAC,MAAM;CAAE,GACtD,EACE,SAAS,CAAC,CAAC,GAAO,YAAY,GAChC,CACF,GAGM,MAAqB,MAA+C;EACxE,EAAoB,EAAM,OAAO,KAAK;CACxC,GAIM,WAAqB;EACzB,AAAI,KAYF,EAAS;GAVP,GAAG;GACH,GAAG;GACH,WAAW,IACP,EACG,MAAM,GAAG,EACT,KAAI,MAAQ,EAAK,KAAK,CAAC,EACvB,OAAO,OAAO,IACjB,CAAC;GACL,OAAO;EAEA,CAAQ;CAErB,GAGM,EAAE,MAAM,MAAmB,EAC/B,EAAE,YAAY,GAAO,UAAU,GAE/B,EACE,SAAS,CAAC,CAAC,GAAO,YAAY,GAChC,CACF,GAEM,IAAa,QAAc;EAC/B,IAAM,IAAmB,GAAgB,aACnC,IAAQ,GAAO,aAAa,CAAC;EAEnC,IAAI,CAAC,GAAkB,OAAO;EAG9B,IAAM,oBAAgB,IAAI,IAAoB,GAC1C,IAAgB;EAEpB,KAAK,IAAM,KAAkB,GAAkB;GAC7C,IAAM,IAAe,EAAe,KAI9B,IAHc,MAAM,KAAK,EAAe,UAAU,CAAC,CAGlC,EAAY,QAChC,GAAM,MAEH,EAAQ,UAAU,KAAA,KAClB,EAAQ,QAAQ,MAET,IAEL,CAAC,MAAS,EAAQ,aAAa,MAAM,EAAK,aAAa,KAClD,IAEF,GAET,IACF;GAGA,AAAI,GAAgB,QAAQ,EAAe,SAAS,MAClD,EAAc,IAAI,GAAe,EAAe,IAAI,GACpD,IAAgB;EAEpB;EAUA,OARK,IAIkB,EAAM,KAC3B,MAAQ,EAAc,IAAI,EAAK,YAAY,CAAC,KAAK,CAG5C,EAAe,KAAK,GAAG,IARH;CAS7B,GAAG,CAAC,GAAgB,GAAO,SAAS,CAAC,GAG/B,KAA4B,QAAc;EAC9C,IAAI,CAAC,GAAM,SAAS,EAAK,MAAM,WAAW,GACxC,OAAO,CAAC;EAGV,IAAM,oBAAY,IAAI,IAAY,GAE5B,IAAY,EAAK,MAAM;EAE7B,IAAI,GAAW,MACb;QAAK,IAAM,KAAO,EAAU,MAM1B,IAJI,EAAI,MACN,EAAU,IAAI,EAAI,EAAE,GAGlB,EAAI,MAAM,WACP,IAAM,KAAc,EAAI,KAAK,KAAK,MAAM,CAAC,GAC5C,AAAI,EAAW,MACb,EAAU,IAAI,EAAW,EAAE;EAInC;EAKF,OAFiB,MAAM,KAAK,CAErB;CACT,GAAG,CAAC,CAAI,CAAC,GAEH,WAA4B;EAChC,AAAI,KAAY,KAUd,EAAS;GARP,GAAG;GACH,GAAG;GACH,WAAW,EACR,MAAM,GAAG,EACT,KAAI,MAAQ,EAAK,KAAK,CAAC,EACvB,OAAO,OAAO;GACjB,OAAO;EAEA,CAAQ;CAErB,GAEM,IAAY,GAAM,QAAQ,IAAI,MAAM,WAAW,GAC/C,KAAU,EAAwB,KAAK,GAAO,YAAY,MAAM,EAAE,GAGlE,CAAC,GAAQ,KAAa,EAAkB,CAAC,CAAC;CAEhD,QAAgB;EACd,IAAM,IAAY,GAAM,QAAQ,IAAI;EACpC,AAAI,KACF,EAAU,CAAS;CAEvB,GAAG,CAAC,CAAI,CAAC;CAET,IAAM,KAAiB,GACpB,GAAmB,MAAuB;EACzC,AAAI,KAAY,KACd,EAAS,GAAgB,GAAO,GAAW,CAAU,CAAC;CAE1D,GACA,CAAC,GAAO,CAAQ,CAClB,GAEM,IAAoB,GACvB,GAAmB,MAAuB;EACzC,AAAI,KAAY,KACd,EAAS,GAAqB,GAAO,GAAW,CAAU,CAAC;CAE/D,GACA,CAAC,GAAO,CAAQ,CAClB,GAEM,KAAsB,GACzB,GAAmB,MAAqB;EACvC,AAAI,KAAY,KACd,EAAS,GAAqB,GAAO,GAAW,CAAQ,CAAC;CAE7D,GACA,CAAC,GAAO,CAAQ,CAClB,GAEM,IAAyB,GAC5B,MAAsB;EACrB,AAAI,KAAY,KACd,EAAS,GAA0B,GAAO,CAAS,CAAC;CAExD,GACA,CAAC,GAAO,CAAQ,CAClB,GAEM,KAA8B,GACjC,MAAkB,IAAQ,GAAoB,GAAO,CAAI,IAAI,IAC9D,CAAC,CAAK,CACR,GAEM,KAA+B,GAClC,MAAkB,IAAQ,EAAqB,GAAO,CAAI,IAAI,KAAA,GAC/D,CAAC,CAAK,CACR,GAEM,KACH,GAAO,cAAc,QAAO,MAAM,EAAqB,EAAG,KAAK,EAAG,KAAK,CAAC,EACtE,UAAU,MAAM,GAAO,YAAY,UAAU;CAElD,OACE,kBAAC,GAAD;EACE,IAAI;GACF,SAAS;GACT,eAAe;GACf,OAAO;GACP,GAAG;GACH,KAAK;EACP;YAPF,CASE,kBAAC,GAAD;GACE,IAAI;IACF,SAAS;IACT,eAAe;IACf,QAAQ;IACR,KAAK;GACP;aANF;IAQG,KACC,kBAAC,GAAD;KAAY,SAAQ;eAApB;MAAiC;MACO;MACtC,kBAAC,GAAD;OAAM,MAAM;iBAAqB;MAAoB,CAAA;KAC3C;;IAEd,kBAAC,GAAD;KAAK,WAAW,EAAO;eAAvB,CACE,kBAAC,GAAD;MACE,aAAY;MACZ,IAAI,EAAE,MAAM,EAAE;MACd,OAAO;MACP,UAAU;MACV,YAAW,MAAK;OACd,AAAI,EAAE,QAAQ,WACZ,GAAa;MAEjB;MACA,WAAW,EACT,OAAO;OACL,IAAI;QACF,cAAc;QACd,WAAW;QACX,iBAAiB;OACnB;OACA,gBACE,kBAAC,GAAD;QAAgB,UAAS;kBACvB,kBAAC,GAAD,EAAY,IAAI,EAAE,OAAO,gBAAgB,EAAI,CAAA;OAC/B,CAAA;MAEpB,EACF;KACD,CAAA,GACD,kBAAC,GAAD;MACE,eAAe,EAAY,EAAI;MAC/B,SAAQ;MACR,WAAW,kBAAC,IAAD,CAAwB,CAAA;MACnC,iBAAe;MACf,iBAAc;MACd,IAAI,EACF,QAAO,MAAS,EAAM,QAAQ,QAAQ,KACxC;MACA,WAAW,EAAO;gBAElB,kBAAC,GAAD;OACE,IAAI;QACF,YAAY;QACZ,YAAY;QACZ,SAAS;QACT,KAAK;OACP;iBANF,CAQE,kBAAC,QAAD;QAAM,IAAG;kBAA8B;OAEjC,CAAA,GACL,IAAqB,KACpB,kBAAC,GAAD;QACE,cAAc;QACd,OAAM;QACN,IAAI,EACF,qBAAqB;SACnB,UAAU;SACV,WAAW;SACX,QAAQ;SACR,UAAU;QACZ,EACF;OACD,CAAA,CAEO;;KACN,CAAA,CACL;;IACL,kBAAC,GAAD,EAAA,UACG,EAAO,SAAS,KACf,kBAAC,IAAD;KACE,IAAI;KACJ,IAAG;KACH,mBAAgB;eAEhB,kBAAC,GAAD;MACE,IAAI;OACF,QAAQ;OACR,aAAa;OACb,iBAAiB;OACjB,SAAS;OACT,WAAW;OACX,eAAe,IAAY,SAAS;OACpC,SAAS,IAAY,KAAM;MAC7B;gBAEC,KAAS,KACR,kBAAC,GAAD;OACY;OACV,kBAAkB,EAAY,EAAK;OACnC,UAAU;OACH;OACG;OACF;OACR,YAAY;OACZ,eAAe;OACf,iBAAiB;OACjB,oBAAoB;OACpB,qBAAqB;OACrB,sBAAsB;MACvB,CAAA;KAEA,CAAA;IACG,CAAA,EAET,CAAA;GACF;MACL,kBAAA,GAAA,EAAA,UAAA;GACG,KAAQ,CAAC,MAAW,KACnB,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAvB,CACE,kBAAC,OAAD;KAAK,WAAW,EAAO;eACpB,CAAC,KACA,kBAAA,GAAA,EAAA,UAAA;MAAE;MAC8B;MAC9B,kBAAC,KAAD,EAAA,UAAI,GAAO,WAAW,KAAK,GAAG,EAAK,CAAA;MAAC;KACpC,EAAA,CAAA;IAED,CAAA,GACL,kBAAC,OAAD;KAAK,WAAW,EAAO;eAAvB;MACE,kBAAC,GAAD;OACE,IAAI,EAAE,OAAO,WAAW;OACxB,WAAW,EAAO;MACnB,CAAA;MACD,kBAAC,GAAD;OAAY,SAAQ;OAAQ,WAAW,EAAO;iBAA9C;QAA8D;QACjD,kBAAC,KAAD;SAAG,WAAW,EAAO;mBAAiB;QAAc,CAAA;QAAE;QAAI;OAE3D;;MACZ,kBAAC,GAAD;OACE,WAAW,EAAO;OAClB,SAAS;OACT,cAAY,cAAc,EAAW;OACrC,IAAI;QACF,aAAa;QACb,KAAK,EAAE,OAAO,eAAe;OAC/B;iBAEA,kBAAC,GAAD,CAAe,CAAA;MACL,CAAA;KACT;MACF;;GAEN,KACC,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAvB;KAAmD;KAC5B,kBAAC,KAAD,EAAA,UAAI,GAAO,WAAW,KAAK,GAAG,EAAK,CAAA;KAAC;IACtD;;GAEP,kBAAC,GAAD;IACE,IAAI;KACF,SAAS;KACT,eAAe;KACf,YAAY;KACZ,KAAK;IACP;cANF;KAQG,KACC,MAAM,KAAK,EAAE,QAAQ,EAAE,SACrB,kBAAC,GAAD;MAAU,SAAQ;MAAc,OAAO;MAAQ,QAAQ;KAAU,CAAA,CAClE;KACF,KAAS,kBAAC,OAAD,EAAA,UAAA,CAAK,WAAQ,EAAM,OAAa,EAAA,CAAA;KAC1C,kBAAC,GAAD;MACE,UAAU,kBAAC,IAAD;OAAqB,OAAO;OAAQ,QAAQ;MAAU,CAAA;gBAEhE,kBAAC,GAAD,EAAyB,WAAW,GAA4B,CAAA;KACxD,CAAA;KACT,KACC,kBAAC,GAAD;MAAK,IAAI,EAAE,WAAW,aAAa;gBACjC,kBAAC,GAAD;OACS;OACP,eAAe;OACf,oBAAoB;MACrB,CAAA;KACE,CAAA;KAEN,KACC,EAAK,SACL,EAAK,MAAM,KAAK,GAAM,MACpB,EAAK,KAAK,KAAK,MAAa;MAC1B,IAAM,IAAc,EAAI,MAAM,OAAO;MACrC,OACE,kBAAC,GAAD;OACE,aAAa,GAAO,aAAa,CAAC;OAElC,UAAU,EAAI;OACd,MAAM,EAAI;OACV,YAAY,EAAI;OAChB,YAAY,EAAI;OAChB,aAAa,EAAI;OACjB,WAAW;MACZ,GAPM,EAAI,KAAK,MAAM,CAOrB;KAEL,CAAC,CACH;KACD,KACC,kBAAC,GAAD;MACE,eAAe;OACb,EAAmB;MACrB;MACA,SAAS;MACT,SAAQ;MACR,IAAI,EAAE,IAAI,EAAE;gBAEX,IAAqB,oBAAoB;KACpC,CAAA;IAEP;;EACL,EAAA,CAAA,CACC;;AAET"}
|
|
1
|
+
{"version":3,"file":"SynapseSearchPageResults.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchPageResults.tsx"],"sourcesContent":["import {\n Box,\n TextField,\n InputAdornment,\n Button,\n Typography,\n IconButton,\n Collapse,\n Badge,\n Skeleton,\n Link,\n} from '@mui/material'\nimport SynapseSearchResultsCard from './SynapseSearchResultsCard'\nimport SearchIcon from '@mui/icons-material/Search'\nimport FilterAltOutlinedIcon from '@mui/icons-material/FilterAltOutlined'\nimport React, {\n useState,\n useEffect,\n useMemo,\n useCallback,\n Suspense,\n} from 'react'\nimport { useSearchInfinite } from '@/synapse-queries/search/useSearch'\nimport {\n SearchQuery,\n KeyRange,\n Hit,\n Facet,\n} from '@sage-bionetworks/synapse-types'\nimport { useDocumentMetadata } from '@/utils/context/DocumentMetadataContext'\nimport ArrowForward from '@mui/icons-material/ArrowForward'\nimport styles from './SynapseSearchPageResults.module.scss'\nimport { useSuggestion } from '@/synapse-queries/search/useSuggestion'\nimport { Suggestion } from '@sage-bionetworks/synapse-client'\nimport SearchPagePortalBanners from './SearchPagePortalBanners'\nimport { SYNAPSE_ENTITY_ID_REGEX } from '@/utils/functions/RegularExpressions'\nimport { DEFAULT_SEARCH_QUERY } from '@/utils/searchDefaults'\nimport {\n SearchFacetPanel,\n AppliedFacetsChips,\n} from './SearchFacetPanel/SearchFacetPanel'\nimport { shouldShowFacetValue } from './SearchFacetPanel/SearchFacetPanelUtils'\nimport { SkeletonInlineBlock } from '../Skeleton'\nimport { useSynapseContext } from '@/utils'\n\n/**\n * Add a literal facet filter to the query\n */\nfunction addFacetToQuery(\n query: SearchQuery,\n facetName: string,\n facetValue: string,\n): SearchQuery {\n const booleanQuery = query.booleanQuery || []\n\n const isFilterAlreadyApplied = booleanQuery.some(\n kv => kv.key === facetName && kv.value === facetValue,\n )\n\n if (isFilterAlreadyApplied) {\n return query\n }\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n booleanQuery: [\n ...booleanQuery,\n { key: facetName, value: facetValue, not: false },\n ],\n start: 0, // Reset to first page\n }\n}\n\n/**\n * Remove a literal facet filter from the query\n */\nfunction removeFacetFromQuery(\n query: SearchQuery,\n facetName: string,\n facetValue: string,\n): SearchQuery {\n const booleanQuery = query.booleanQuery || []\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n booleanQuery: booleanQuery.filter(\n kv => !(kv.key === facetName && kv.value === facetValue),\n ),\n start: 0,\n }\n}\n\n/**\n * Set a range facet (ex, for modified on, created on)\n */\nfunction setRangeFacetInQuery(\n query: SearchQuery,\n facetName: string,\n minValue: string,\n): SearchQuery {\n const rangeQuery = query.rangeQuery || []\n\n // Remove any existing range for this facet\n const filteredRangeQuery = rangeQuery.filter(kr => kr.key !== facetName)\n\n const maxValue = String(Math.floor(Date.now() / 1000)) // Now in seconds\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n rangeQuery: [\n ...filteredRangeQuery,\n { key: facetName, min: minValue, max: maxValue },\n ],\n start: 0,\n }\n}\n\n/**\n * Remove a range facet from the query\n */\nfunction removeRangeFacetFromQuery(\n query: SearchQuery,\n facetName: string,\n): SearchQuery {\n const rangeQuery = query.rangeQuery || []\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n rangeQuery: rangeQuery.filter(kr => kr.key !== facetName),\n start: 0,\n }\n}\n\n/**\n * Check if a range facet is currently applied\n */\nfunction isRangeFacetApplied(query: SearchQuery, facetName: string): boolean {\n const rangeQuery = query.rangeQuery || []\n return rangeQuery.some(kr => kr.key === facetName)\n}\n\n/**\n * Get the applied range facet value for a given facet name\n */\nfunction getAppliedRangeFacet(\n query: SearchQuery,\n facetName: string,\n): KeyRange | undefined {\n const rangeQuery = query.rangeQuery || []\n return rangeQuery.find(kr => kr.key === facetName)\n}\n\nexport type SynapseSearchPageResultsProps = {\n query?: SearchQuery\n setQuery?: (newQuery: SearchQuery) => void\n}\n\nexport function SynapseSearchPageResults(props: SynapseSearchPageResultsProps) {\n const MIN_SUGGESTION_SCORE = 0.75\n const { query, setQuery } = props\n const { peopleSearchPageUrl } = useSynapseContext()\n const [expanded, setExpanded] = useState(false)\n\n // Set page title (replaces jsniUtils.setPageTitle(DisplayConstants.LABEL_SEARCH) from Java)\n useDocumentMetadata({ title: `Search: ${query?.queryTerm?.join(' ')}` })\n\n // Capture local state to prevent search from executing on every keystroke\n // Join query terms so that textfield input looks correct\n const [searchInputValue, setSearchInputValue] = useState(\n query?.queryTerm?.join(' ') || '',\n )\n\n // Sync input value when query prop changes\n // Join query terms so that textfield input looks correct\n useEffect(() => {\n setSearchInputValue(query?.queryTerm?.join(' ') || '')\n }, [query])\n\n // Execute search\n const {\n data,\n isLoading,\n error,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n } = useSearchInfinite(\n query\n ? {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n size: 50,\n returnFields: ['path'],\n }\n : { queryTerm: [], size: 50, returnFields: ['path'] },\n {\n enabled: !!query?.queryTerm?.[0],\n },\n )\n\n // Update local input state\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchInputValue(event.target.value)\n }\n\n // Update query only when user explicitly searches\n // Split query terms to form array\n const handleSearch = () => {\n if (setQuery) {\n const newQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n queryTerm: searchInputValue\n ? searchInputValue\n .split(' ')\n .map(term => term.trim())\n .filter(Boolean)\n : [],\n start: 0,\n }\n setQuery(newQuery)\n }\n }\n\n // Fetch spelling suggestions for the search terms\n const { data: suggestionData } = useSuggestion(\n { searchTerm: query?.queryTerm },\n\n {\n enabled: !!query?.queryTerm?.[0],\n },\n )\n\n const suggestion = useMemo(() => {\n const suggestionValues = suggestionData?.suggestions\n const terms = query?.queryTerm || []\n\n if (!suggestionValues) return null\n\n // Map original terms to their best suggestions if available\n const suggestionMap = new Map<string, string>()\n let hasSuggestion = false\n\n for (const suggestionList of suggestionValues) {\n const originalTerm = suggestionList.key\n const suggestions = Array.from(suggestionList.values ?? [])\n\n // Among suggestions above the score threshold, pick the highest-frequency term.\n const bestSuggestion = suggestions.reduce<Suggestion | null>(\n (best, current) => {\n if (\n current.score === undefined ||\n current.score < MIN_SUGGESTION_SCORE\n ) {\n return best\n }\n if (!best || (current.frequency ?? 0) > (best.frequency ?? 0)) {\n return current\n }\n return best\n },\n null,\n )\n\n // If a valid suggestion is found and it's different from the original term, add it to the map\n if (bestSuggestion?.term && bestSuggestion.term !== originalTerm) {\n suggestionMap.set(originalTerm!, bestSuggestion.term)\n hasSuggestion = true\n }\n }\n\n if (!hasSuggestion) return null\n\n // Build the corrected search string by replacing misspelled terms\n // Use toLowerCase() because the suggestion API returns keys in lowercase\n const correctedTerms = terms.map(\n term => suggestionMap.get(term.toLowerCase()) || term,\n )\n\n return correctedTerms.join(' ')\n }, [suggestionData, query?.queryTerm])\n\n // Extract entity IDs from search results for relevant portal banner display\n const entityIdsForPortalBanners = useMemo(() => {\n if (!data?.pages || data.pages.length === 0) {\n return []\n }\n\n const entityIds = new Set<string>()\n\n const firstPage = data.pages[0]\n\n if (firstPage?.hits) {\n for (const hit of firstPage.hits) {\n // search result is the top-level Project itself\n if (hit.id) {\n entityIds.add(hit.id)\n }\n\n if (hit.path?.path) {\n for (const pathEntity of hit.path.path.slice(1)) {\n if (pathEntity.id) {\n entityIds.add(pathEntity.id)\n }\n }\n }\n }\n }\n\n const finalIds = Array.from(entityIds)\n\n return finalIds\n }, [data])\n\n const handleUseSuggestion = () => {\n if (setQuery && suggestion) {\n const newQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n queryTerm: suggestion\n .split(' ')\n .map(term => term.trim())\n .filter(Boolean),\n start: 0,\n }\n setQuery(newQuery)\n }\n }\n\n const noResults = data?.pages?.[0]?.hits?.length === 0\n const isSynId = SYNAPSE_ENTITY_ID_REGEX.test(query?.queryTerm?.[0] || '')\n\n // cached facets in local state to prevent them from being cleared when the query changes and new search results are loading\n const [facets, setFacets] = useState<Facet[]>([])\n\n useEffect(() => {\n const newFacets = data?.pages?.[0]?.facets\n if (newFacets) {\n setFacets(newFacets)\n }\n }, [data])\n\n const handleAddFacet = useCallback(\n (facetName: string, facetValue: string) => {\n if (setQuery && query) {\n setQuery(addFacetToQuery(query, facetName, facetValue))\n }\n },\n [query, setQuery],\n )\n\n const handleRemoveFacet = useCallback(\n (facetName: string, facetValue: string) => {\n if (setQuery && query) {\n setQuery(removeFacetFromQuery(query, facetName, facetValue))\n }\n },\n [query, setQuery],\n )\n\n const handleSetRangeFacet = useCallback(\n (facetName: string, minValue: string) => {\n if (setQuery && query) {\n setQuery(setRangeFacetInQuery(query, facetName, minValue))\n }\n },\n [query, setQuery],\n )\n\n const handleRemoveRangeFacet = useCallback(\n (facetName: string) => {\n if (setQuery && query) {\n setQuery(removeRangeFacetFromQuery(query, facetName))\n }\n },\n [query, setQuery],\n )\n\n const isRangeFacetAppliedCallback = useCallback(\n (name: string) => (query ? isRangeFacetApplied(query, name) : false),\n [query],\n )\n\n const getAppliedRangeFacetCallback = useCallback(\n (name: string) => (query ? getAppliedRangeFacet(query, name) : undefined),\n [query],\n )\n\n const appliedFacetsCount =\n (query?.booleanQuery?.filter(kv => shouldShowFacetValue(kv.key, kv.value))\n .length || 0) + (query?.rangeQuery?.length || 0)\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n p: '30px',\n gap: '20px',\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: 'auto',\n gap: '16px',\n }}\n >\n {peopleSearchPageUrl && (\n <Typography variant=\"smallText1\">\n Searching for a user profile? Try our{' '}\n <Link href={peopleSearchPageUrl}>People Search.</Link>\n </Typography>\n )}\n <Box className={styles.searchContainer}>\n <TextField\n placeholder=\"Search…\"\n sx={{ flex: 1 }}\n value={searchInputValue}\n onChange={handleInputChange}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleSearch()\n }\n }}\n slotProps={{\n input: {\n sx: {\n borderRadius: '96px',\n boxShadow: '0px 1px 4px var(--synapse-gray-500)',\n backgroundColor: 'var(--synapse-white)',\n },\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ color: 'secondary.600' }} />\n </InputAdornment>\n ),\n },\n }}\n />\n <Button\n onClick={() => setExpanded(true)}\n variant=\"outlined\"\n startIcon={<FilterAltOutlinedIcon />}\n aria-expanded={expanded}\n aria-controls=\"filter-search-results-panel\"\n sx={{\n color: theme => theme.palette.primary.dark,\n }}\n className={styles.filterButton}\n >\n <Typography\n sx={{\n fontWeight: 700,\n lineHeight: '16px',\n display: 'flex',\n gap: '8px',\n }}\n >\n <span id=\"filter-results-button-label\">\n Filter Search Results\n </span>\n {appliedFacetsCount > 0 && (\n <Badge\n badgeContent={appliedFacetsCount}\n color=\"primary\"\n sx={{\n '& .MuiBadge-badge': {\n position: 'static',\n transform: 'none',\n height: '18px',\n minWidth: '18px',\n },\n }}\n />\n )}\n </Typography>\n </Button>\n </Box>\n <Box>\n {facets.length > 0 && (\n <Collapse\n in={expanded}\n id=\"filter-search-results-panel\"\n aria-labelledby=\"filter-results-button-label\"\n >\n <Box\n sx={{\n border: '1px solid',\n borderColor: 'var(--synapse-gray-100)',\n backgroundColor: 'var(--synapse-white)',\n padding: '25px',\n boxShadow: '0 4px 16px 0 rgba(0, 0, 0, 0.04)',\n pointerEvents: isLoading ? 'none' : 'auto',\n opacity: isLoading ? 0.5 : 1,\n }}\n >\n {query && setQuery && (\n <SearchFacetPanel\n expanded={expanded}\n onCollapse={() => setExpanded(false)}\n disabled={isLoading}\n query={query}\n setQuery={setQuery}\n facets={facets}\n onAddFacet={handleAddFacet}\n onRemoveFacet={handleRemoveFacet}\n onSetRangeFacet={handleSetRangeFacet}\n onRemoveRangeFacet={handleRemoveRangeFacet}\n isRangeFacetApplied={isRangeFacetAppliedCallback}\n getAppliedRangeFacet={getAppliedRangeFacetCallback}\n />\n )}\n </Box>\n </Collapse>\n )}\n </Box>\n </Box>\n <>\n {data && !isSynId && suggestion && (\n <div className={styles.didYouMeanContainer}>\n <div className={styles.didYouMeanCurrentlyShowing}>\n {!noResults && (\n <>\n Currently showing results for{' '}\n <b>{query?.queryTerm?.join(' ')}</b>.\n </>\n )}\n </div>\n <div className={styles.didYouMeanSuggestion}>\n <SearchIcon\n sx={{ color: 'grey.600' }}\n className={styles.searchIcon}\n />\n <Typography variant=\"body1\" className={styles.didYouMeanText}>\n Search for <b className={styles.suggestionText}>{suggestion}</b>{' '}\n instead?\n </Typography>\n <IconButton\n className={styles.didYouMeanArrowContainer}\n onClick={handleUseSuggestion}\n aria-label={`Search for ${suggestion} instead`}\n sx={{\n borderColor: 'primary.main',\n svg: { color: 'primary.main' },\n }}\n >\n <ArrowForward />\n </IconButton>\n </div>\n </div>\n )}\n {noResults && (\n <div className={styles.didYouMeanCurrentlyShowing}>\n No results found for <b>{query?.queryTerm?.join(' ')}</b>.\n </div>\n )}\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n gap: '20px',\n }}\n >\n {isLoading &&\n Array.from({ length: 3 }, () => (\n <Skeleton variant=\"rectangular\" width={'100%'} height={'250px'} />\n ))}\n {error && <div>Error: {error.message}</div>}\n <Suspense\n fallback={<SkeletonInlineBlock width={'100%'} height={'150px'} />}\n >\n <SearchPagePortalBanners entityIds={entityIdsForPortalBanners} />\n </Suspense>\n {query && (\n <Box sx={{ alignSelf: 'flex-start' }}>\n <AppliedFacetsChips\n query={query}\n onRemoveFacet={handleRemoveFacet}\n onRemoveRangeFacet={handleRemoveRangeFacet}\n />\n </Box>\n )}\n {data &&\n data.pages &&\n data.pages.map((page, pageIndex) =>\n page.hits.map((hit: Hit) => {\n const projectPath = hit.path?.path?.[1]\n return (\n <SynapseSearchResultsCard\n searchTerms={query?.queryTerm ?? []}\n key={hit.id + '-' + pageIndex}\n entityId={hit.id}\n name={hit.name}\n entityType={hit.node_type}\n modifiedOn={hit.modified_on}\n description={hit.description}\n locatedIn={projectPath}\n />\n )\n }),\n )}\n {hasNextPage && (\n <Button\n onClick={() => {\n void fetchNextPage()\n }}\n loading={isFetchingNextPage}\n variant=\"contained\"\n sx={{ mt: 2 }}\n >\n {isFetchingNextPage ? 'Loading more...' : 'Load More'}\n </Button>\n )}\n </Box>\n </>\n </Box>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseSearchResultsCard.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchResultsCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SynapseSearchResultsCard.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchResultsCard.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAc7D,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;IACxC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB,CAAA;AAiBD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,2CAwJ5E;AAED,eAAe,wBAAwB,CAAA"}
|
|
@@ -15,9 +15,12 @@ import { useRef as p } from "react";
|
|
|
15
15
|
import { Box as m, Chip as h, Link as g, Paper as _, Stack as v, Typography as y, styled as b } from "@mui/material";
|
|
16
16
|
import { jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
17
17
|
import { EntityType as C } from "@sage-bionetworks/synapse-client";
|
|
18
|
-
import
|
|
19
|
-
import
|
|
20
|
-
import
|
|
18
|
+
import w from "dayjs";
|
|
19
|
+
import T from "@mui/icons-material/ArticleOutlined";
|
|
20
|
+
import E from "@mui/icons-material/DashboardTwoTone";
|
|
21
|
+
import { useInView as D } from "react-intersection-observer";
|
|
22
|
+
import O from "@mui/icons-material/InfoOutline";
|
|
23
|
+
import k from "@mui/icons-material/Update";
|
|
21
24
|
//#region src/components/SynapseSearchPageResults/SynapseSearchResultsCard.tsx
|
|
22
25
|
var A = b(_, { label: "SynapseSearchResultsCardContainer" })({
|
|
23
26
|
display: "flex",
|
|
@@ -29,7 +32,7 @@ var A = b(_, { label: "SynapseSearchResultsCardContainer" })({
|
|
|
29
32
|
gap: "15px"
|
|
30
33
|
});
|
|
31
34
|
function j(_) {
|
|
32
|
-
let b = p(null), { ref: j, inView: M } =
|
|
35
|
+
let b = p(null), { ref: j, inView: M } = D({
|
|
33
36
|
triggerOnce: !0,
|
|
34
37
|
rootMargin: "250px 0px"
|
|
35
38
|
}), { data: N } = r(_.entityId, void 0, { includeFileHandles: !0 }, { enabled: _.entityType === C.file && M }), P = N?.fileHandles.find((e) => e.isPreview !== !0), F = P?.contentSize ? n(P?.contentSize) : "", I = _.description ? i(_.description) : "";
|
|
@@ -103,18 +106,18 @@ function j(_) {
|
|
|
103
106
|
children: [
|
|
104
107
|
/* @__PURE__ */ S(m, {
|
|
105
108
|
sx: { display: "flex" },
|
|
106
|
-
children: [/* @__PURE__ */ x(
|
|
109
|
+
children: [/* @__PURE__ */ x(k, { className: f.cardMetadataIcon }), /* @__PURE__ */ S(y, {
|
|
107
110
|
className: f.cardMetadataTypographyWithIcon,
|
|
108
111
|
children: [
|
|
109
112
|
"Last updated:",
|
|
110
113
|
" ",
|
|
111
|
-
a(
|
|
114
|
+
a(w.unix(_.modifiedOn), "M/D/YYYY")
|
|
112
115
|
]
|
|
113
116
|
})]
|
|
114
117
|
}),
|
|
115
118
|
I && /* @__PURE__ */ S(m, {
|
|
116
119
|
sx: { display: "flex" },
|
|
117
|
-
children: [/* @__PURE__ */ x(
|
|
120
|
+
children: [/* @__PURE__ */ x(T, { className: f.cardMetadataIcon }), /* @__PURE__ */ x(u, {
|
|
118
121
|
className: `${f.cardMetadataTypographyWithIcon} ${f.cardDescription}`,
|
|
119
122
|
text: I,
|
|
120
123
|
searchTerms: _.searchTerms ?? []
|
|
@@ -122,7 +125,7 @@ function j(_) {
|
|
|
122
125
|
}),
|
|
123
126
|
F && /* @__PURE__ */ S(m, {
|
|
124
127
|
sx: { display: "flex" },
|
|
125
|
-
children: [/* @__PURE__ */ x(
|
|
128
|
+
children: [/* @__PURE__ */ x(O, { className: f.cardMetadataIcon }), /* @__PURE__ */ S(y, {
|
|
126
129
|
className: f.cardMetadataTypographyWithIcon,
|
|
127
130
|
children: ["File size: ", /* @__PURE__ */ x("b", { children: F })]
|
|
128
131
|
})]
|
|
@@ -138,7 +141,7 @@ function j(_) {
|
|
|
138
141
|
className: f.cardMetadataTypographyWithIcon,
|
|
139
142
|
children: ["Located in:", " "]
|
|
140
143
|
}),
|
|
141
|
-
/* @__PURE__ */ x(
|
|
144
|
+
/* @__PURE__ */ x(E, {
|
|
142
145
|
className: f.cardMetadataIcon,
|
|
143
146
|
sx: { marginRight: "4px" }
|
|
144
147
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseSearchResultsCard.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchResultsCard.tsx"],"sourcesContent":["import { useGetEntityBundle } from '@/synapse-queries'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { StyledComponent } from '@emotion/styled'\nimport
|
|
1
|
+
{"version":3,"file":"SynapseSearchResultsCard.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchResultsCard.tsx"],"sourcesContent":["import { useGetEntityBundle } from '@/synapse-queries'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { StyledComponent } from '@emotion/styled'\nimport ArticleOutlined from '@mui/icons-material/ArticleOutlined'\nimport DashboardTwoTone from '@mui/icons-material/DashboardTwoTone'\nimport InfoOutline from '@mui/icons-material/InfoOutline'\nimport UpdateIcon from '@mui/icons-material/Update'\nimport {\n Box,\n Chip,\n Link,\n Paper,\n PaperProps,\n Stack,\n styled,\n Typography,\n} from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport dayjs from 'dayjs'\nimport { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { EntityDownloadButton } from '../EntityDownloadButton/EntityDownloadButton'\nimport { FileHandleWithPreview } from '../EntityFinder/details/view/table/TableCellTypes'\nimport { EntityTypeIcon } from '../EntityIcon'\nimport FavoriteButton from '../favorites/FavoriteButton'\nimport { markdownToPlainText } from '../Markdown/MarkdownUtils'\nimport { searchResultsCardChipStyles } from './chipStyles'\nimport HasAccessChip from './HasAccessChip'\nimport { HighlightedTypography } from './HighlightedTypography'\nimport styles from './SynapseSearchResultsCard.module.scss'\n\nexport type SynapseSearchResultsCardProps = {\n entityId: string\n name: string\n description?: string\n entityType: EntityType\n modifiedOn: number\n locatedIn?: { name: string; id: string }\n searchTerms?: string[]\n}\n\nconst SynapseSearchResultsCardContainer: StyledComponent<PaperProps> = styled(\n Paper,\n {\n label: 'SynapseSearchResultsCardContainer',\n },\n)({\n display: 'flex',\n flexDirection: 'column',\n minHeight: '250px',\n width: '100%',\n borderRadius: '10px',\n padding: '32px',\n gap: '15px',\n})\n\nexport function SynapseSearchResultsCard(props: SynapseSearchResultsCardProps) {\n const downloadConfirmationRef = useRef<HTMLDivElement>(null)\n\n const { ref, inView } = useInView({\n triggerOnce: true,\n rootMargin: '250px 0px',\n })\n\n const { data: entityBundle } = useGetEntityBundle(\n props.entityId,\n undefined,\n { includeFileHandles: true },\n { enabled: props.entityType === EntityType.file && inView },\n )\n\n const file = entityBundle?.fileHandles.find(\n (file: FileHandleWithPreview) => file.isPreview !== true,\n )\n\n const friendlySize = file?.contentSize\n ? calculateFriendlyFileSize(file?.contentSize)\n : ''\n\n const plainDescription = props.description\n ? markdownToPlainText(props.description)\n : ''\n\n return (\n <SynapseSearchResultsCardContainer ref={ref}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n width: '100%',\n }}\n >\n <Link\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${props.entityId}`}\n sx={{\n textDecoration: 'underline 2px',\n textUnderlineOffset: '9px',\n }}\n >\n <HighlightedTypography\n className={styles.cardTitle}\n variant=\"headline3\"\n text={props.name}\n searchTerms={props.searchTerms ?? []}\n />\n </Link>\n\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n alignItems: 'center',\n }}\n >\n <FavoriteButton entityId={props.entityId} />\n <EntityDownloadButton\n entityId={props.entityId}\n name={props.name}\n entityType={props.entityType}\n downloadConfirmationContainer={downloadConfirmationRef}\n />\n </Box>\n </Box>\n {/* Portal target for EntityDownloadButton's download confirmation dialog */}\n <div ref={downloadConfirmationRef} />\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n }}\n >\n <Chip\n icon={\n <EntityTypeIcon\n type={props.entityType}\n wrap={false}\n sx={{ color: '#265149', width: '18px' }}\n />\n }\n label={props.entityType}\n sx={{ ...searchResultsCardChipStyles }}\n />\n <HasAccessChip entityId={props.entityId} />\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: '8px',\n }}\n >\n <Stack sx={{ gap: '20px', minWidth: 0, width: '100%' }}>\n <Box sx={{ display: 'flex' }}>\n <UpdateIcon className={styles.cardMetadataIcon} />\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n Last updated:{' '}\n {formatDate(dayjs.unix(props.modifiedOn), 'M/D/YYYY')}\n </Typography>\n </Box>\n {plainDescription && (\n <Box sx={{ display: 'flex' }}>\n <ArticleOutlined className={styles.cardMetadataIcon} />\n <HighlightedTypography\n className={`${styles.cardMetadataTypographyWithIcon} ${styles.cardDescription}`}\n text={plainDescription}\n searchTerms={props.searchTerms ?? []}\n />\n </Box>\n )}\n\n {friendlySize && (\n <Box sx={{ display: 'flex' }}>\n <InfoOutline className={styles.cardMetadataIcon} />\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n File size: <b>{friendlySize}</b>\n </Typography>\n </Box>\n )}\n {props.locatedIn && (\n <Box\n sx={{ display: 'flex', marginLeft: '24px', alignItems: 'center' }}\n >\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n Located in:{' '}\n </Typography>\n <DashboardTwoTone\n className={styles.cardMetadataIcon}\n sx={{\n marginRight: '4px',\n }}\n />\n <Link\n className={styles.locatedInLink}\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${props.locatedIn?.id}`}\n >\n {props.locatedIn?.name}\n </Link>\n </Box>\n )}\n </Stack>\n </Box>\n </SynapseSearchResultsCardContainer>\n )\n}\n\nexport default SynapseSearchResultsCard\n"],"mappings":"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"}
|
|
@@ -19,12 +19,12 @@ import { useState as p } from "react";
|
|
|
19
19
|
import { Box as m, Button as h } from "@mui/material";
|
|
20
20
|
import { toast as g } from "react-hot-toast";
|
|
21
21
|
import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
22
|
-
import {
|
|
23
|
-
import
|
|
22
|
+
import { useAtom as b } from "jotai";
|
|
23
|
+
import x from "@mui/icons-material/GetAppTwoTone";
|
|
24
24
|
//#region src/components/SynapseTable/RowSelection/RowSelectionControls.tsx
|
|
25
25
|
var S = "SendToAnalysisPlatformRowSelectionControlButton";
|
|
26
26
|
function C(C) {
|
|
27
|
-
let { customControls: w = [], remount: T } = C, { isAuthenticated: E } = e(), [D, O] = p(!1), { entityId: k, versionNumber: A, getCurrentQueryRequest: j } = a(), { data: M } = t(k, A), { data: N } = o(), [P, F] =
|
|
27
|
+
let { customControls: w = [], remount: T } = C, { isAuthenticated: E } = e(), [D, O] = p(!1), { entityId: k, versionNumber: A, getCurrentQueryRequest: j } = a(), { data: M } = t(k, A), { data: N } = o(), [P, F] = b(c), I = u(), { setIsShowingExportToAnalysisPlatformModal: L, enabledExternalAnalysisPlatforms: R } = s(), z = R.length > 0, B = () => {
|
|
28
28
|
F([]), T && T();
|
|
29
29
|
}, V = n(M, r(N?.columnModels));
|
|
30
30
|
return /* @__PURE__ */ v(f, {
|
|
@@ -69,7 +69,7 @@ function C(C) {
|
|
|
69
69
|
})
|
|
70
70
|
}), { duration: Infinity });
|
|
71
71
|
},
|
|
72
|
-
startIcon: /* @__PURE__ */ v(
|
|
72
|
+
startIcon: /* @__PURE__ */ v(x, {}),
|
|
73
73
|
children: "Add to Download List"
|
|
74
74
|
})
|
|
75
75
|
] })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowSelectionControls.js","names":[],"sources":["../../../../src/components/SynapseTable/RowSelection/RowSelectionControls.tsx"],"sourcesContent":["import AddToDownloadListConfirmationAlert from '@/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert'\nimport { useGetAddToDownloadListRequestForCurrentQuery } from '@/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery'\nimport { useGetEntity } from '@/synapse-queries'\nimport { canTableQueryBeAddedToDownloadList } from '@/utils/functions/queryUtils'\nimport
|
|
1
|
+
{"version":3,"file":"RowSelectionControls.js","names":[],"sources":["../../../../src/components/SynapseTable/RowSelection/RowSelectionControls.tsx"],"sourcesContent":["import AddToDownloadListConfirmationAlert from '@/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert'\nimport { useGetAddToDownloadListRequestForCurrentQuery } from '@/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery'\nimport { useGetEntity } from '@/synapse-queries'\nimport { canTableQueryBeAddedToDownloadList } from '@/utils/functions/queryUtils'\nimport GetAppTwoTone from '@mui/icons-material/GetAppTwoTone'\nimport { Box, Button } from '@mui/material'\nimport { Table } from '@sage-bionetworks/synapse-types'\nimport { useAtom } from 'jotai'\nimport { useState } from 'react'\nimport { toast } from 'react-hot-toast'\nimport { useSynapseContext } from '@/utils'\nimport { useQueryContext } from '../../QueryContext'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport { selectedRowsAtom } from '../../QueryWrapper/TableRowSelectionState'\nimport { useGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport {\n getFileColumnModelId,\n SEND_TO_ANALYSIS_PLATFORM_SIGN_IN_MESSAGE,\n} from '../SynapseTableUtils'\nimport { CustomControlButton } from '../CustomControls/CustomControlButton'\nimport { CustomControl } from '../TopLevelControls/TopLevelControls'\nimport { RowSelectionUI } from './RowSelectionUI'\nimport { SignInRequiredModal } from '@/components/SignInRequiredModal/SignInRequiredModal'\n\nconst SEND_TO_ANALYSIS_PLATFORM_BUTTON_ID =\n 'SendToAnalysisPlatformRowSelectionControlButton'\n\nexport type RowSelectionControlsProps = {\n customControls?: CustomControl[]\n remount?: () => void\n}\n\n/**\n * This component is responsible for rendering the RowSelectionUI and the custom controls. Must be wrapped in a\n * QueryContext and a QueryVisualizationContext.\n * @param props\n * @constructor\n */\nexport function RowSelectionControls(props: RowSelectionControlsProps) {\n const { customControls = [], remount } = props\n const { isAuthenticated } = useSynapseContext()\n const [showLoginModal, setShowLoginModal] = useState(false)\n const { entityId, versionNumber, getCurrentQueryRequest } = useQueryContext()\n const { data: entity } = useGetEntity<Table>(entityId, versionNumber)\n const { data: queryMetadata } = useGetQueryMetadata()\n const [selectedRows, setSelectedRows] = useAtom(selectedRowsAtom)\n\n const addToDownloadListRequest =\n useGetAddToDownloadListRequestForCurrentQuery()\n\n const {\n setIsShowingExportToAnalysisPlatformModal,\n enabledExternalAnalysisPlatforms,\n } = useQueryVisualizationContext()\n\n const showExportToAnalysisPlatformButton =\n enabledExternalAnalysisPlatforms.length > 0\n\n const refresh = () => {\n // clear selection\n setSelectedRows([])\n if (remount) {\n remount()\n }\n }\n const fileColumnId = getFileColumnModelId(queryMetadata?.columnModels)\n const showAddToDownloadCart = canTableQueryBeAddedToDownloadList(\n entity,\n fileColumnId,\n )\n\n return (\n <RowSelectionUI\n show={selectedRows.length > 0}\n selectedRowCount={selectedRows.length}\n onClearSelection={() => setSelectedRows([])}\n customControls={\n <>\n {customControls.map(customControl => {\n return (\n <CustomControlButton\n key={customControl.buttonText}\n variant=\"contained\"\n callbackData={{\n tableId: entityId!,\n queryMetadata: queryMetadata,\n selectedRows,\n refresh,\n request: getCurrentQueryRequest(),\n }}\n control={customControl}\n startIcon={customControl.icon}\n />\n )\n })}\n {/* TODO: Generic button */}\n {showExportToAnalysisPlatformButton && (\n <Button\n variant=\"outlined\"\n onClick={() => {\n if (isAuthenticated) {\n setIsShowingExportToAnalysisPlatformModal(true)\n } else {\n setShowLoginModal(true)\n }\n }}\n id={SEND_TO_ANALYSIS_PLATFORM_BUTTON_ID}\n >\n Send to Analysis Platform\n </Button>\n )}\n {showLoginModal && (\n <SignInRequiredModal\n onHide={() => setShowLoginModal(false)}\n content={SEND_TO_ANALYSIS_PLATFORM_SIGN_IN_MESSAGE}\n />\n )}\n {showAddToDownloadCart && (\n <Button\n variant=\"contained\"\n onClick={() => {\n const toastId = toast.custom(\n <Box\n sx={{\n width: '100%',\n }}\n >\n <AddToDownloadListConfirmationAlert\n addToDownloadListRequest={addToDownloadListRequest}\n onClose={() => {\n toast.dismiss(toastId)\n }}\n />\n </Box>,\n {\n duration: Infinity,\n },\n )\n }}\n startIcon={<GetAppTwoTone />}\n >\n Add to Download List\n </Button>\n )}\n </>\n }\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAM,IACJ;AAaF,SAAgB,EAAqB,GAAkC;CACrE,IAAM,EAAE,oBAAiB,CAAC,GAAG,eAAY,GACnC,EAAE,uBAAoB,EAAkB,GACxC,CAAC,GAAgB,KAAqB,EAAS,EAAK,GACpD,EAAE,aAAU,kBAAe,8BAA2B,EAAgB,GACtE,EAAE,MAAM,MAAW,EAAoB,GAAU,CAAa,GAC9D,EAAE,MAAM,MAAkB,EAAoB,GAC9C,CAAC,GAAc,KAAmB,EAAQ,CAAgB,GAE1D,IACJ,EAA8C,GAE1C,EACJ,8CACA,wCACE,EAA6B,GAE3B,IACJ,EAAiC,SAAS,GAEtC,UAAgB;EAGpB,AADA,EAAgB,CAAC,CAAC,GACd,KACF,EAAQ;CAEZ,GAEM,IAAwB,EAC5B,GAFmB,EAAqB,GAAe,YAGvD,CACF;CAEA,OACE,kBAAC,GAAD;EACE,MAAM,EAAa,SAAS;EAC5B,kBAAkB,EAAa;EAC/B,wBAAwB,EAAgB,CAAC,CAAC;EAC1C,gBACE,kBAAA,GAAA,EAAA,UAAA;GACG,EAAe,KAAI,MAEhB,kBAAC,GAAD;IAEE,SAAQ;IACR,cAAc;KACZ,SAAS;KACM;KACf;KACA;KACA,SAAS,EAAuB;IAClC;IACA,SAAS;IACT,WAAW,EAAc;GAC1B,GAXM,EAAc,UAWpB,CAEJ;GAEA,KACC,kBAAC,GAAD;IACE,SAAQ;IACR,eAAe;KACb,AAAI,IACF,EAA0C,EAAI,IAE9C,EAAkB,EAAI;IAE1B;IACA,IAAI;cACL;GAEO,CAAA;GAET,KACC,kBAAC,GAAD;IACE,cAAc,EAAkB,EAAK;IACrC,SAAA;GACD,CAAA;GAEF,KACC,kBAAC,GAAD;IACE,SAAQ;IACR,eAAe;KACb,IAAM,IAAU,EAAM,OACpB,kBAAC,GAAD;MACE,IAAI,EACF,OAAO,OACT;gBAEA,kBAAC,GAAD;OAC4B;OAC1B,eAAe;QACb,EAAM,QAAQ,CAAO;OACvB;MACD,CAAA;KACE,CAAA,GACL,EACE,UAAU,SACZ,CACF;IACF;IACA,WAAW,kBAAC,GAAD,CAAgB,CAAA;cAC5B;GAEO,CAAA;EAEV,EAAA,CAAA;CAEL,CAAA;AAEL"}
|