synapse-react-client 4.0.45 → 4.0.47
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.js +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/aridhia-queries/useSubmitAridhiaDar.js +2 -2
- package/dist/aridhia-queries/useSubmitAridhiaDar.js.map +1 -1
- 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.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/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/AccessTokenPage/AccessTokenPage.js +1 -1
- package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
- package/dist/components/AccessTokenPage/CreateAccessTokenModal.js +1 -1
- package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
- package/dist/components/AccountLevelBadges/AccountLevelBadges.js +1 -1
- package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +1 -1
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
- package/dist/components/AclEditor/AclEditor.test-utils.js +3 -5
- package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.js +43 -30
- package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
- package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts +6 -2
- package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts.map +1 -1
- package/dist/components/Aridhia/AridhiaDarStatusPopover.js +101 -31
- package/dist/components/Aridhia/AridhiaDarStatusPopover.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/aridhiaAccessStatusUtils.d.ts +11 -9
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts.map +1 -1
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +24 -13
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.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 +3 -3
- package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeForm.js +1 -1
- package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
- package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
- package/dist/components/Authentication/TOTPForm.js +3 -3
- package/dist/components/Authentication/TOTPForm.js.map +1 -1
- package/dist/components/Authentication/index.d.ts +6 -6
- package/dist/components/Authentication/index.d.ts.map +1 -1
- package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js +1 -1
- package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
- package/dist/components/CardContainer/CardContainer.js +7 -7
- package/dist/components/CardContainer/CardContainer.js.map +1 -1
- package/dist/components/CertificationQuiz/CertificationQuiz.js +1 -1
- package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
- package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js +1 -1
- package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.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/ChallengeSubmission.d.ts.map +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.js +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.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/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
- package/dist/components/CitationPopover/CitationPopoverContent.js +4 -4
- package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
- package/dist/components/CitationPopover/CitationPopoverUtils.js +2 -2
- package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
- package/dist/components/CohortBuilder/CohortBuilder.css +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.d.ts +35 -0
- package/dist/components/CohortBuilder/CohortBuilder.d.ts.map +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.js +108 -0
- package/dist/components/CohortBuilder/CohortBuilder.js.map +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.module.js +10 -0
- package/dist/components/CohortBuilder/CohortBuilder.module.js.map +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.module.scss +20 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.d.ts +16 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.d.ts.map +1 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.js +124 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.js.map +1 -0
- package/dist/components/CohortBuilder/cohortHandOff.d.ts +25 -0
- package/dist/components/CohortBuilder/cohortHandOff.d.ts.map +1 -0
- package/dist/components/CohortBuilder/cohortHandOff.js +26 -0
- package/dist/components/CohortBuilder/cohortHandOff.js.map +1 -0
- package/dist/components/ColumnFilter/ColumnFilter.d.ts.map +1 -1
- package/dist/components/ColumnFilter/ColumnFilter.js +14 -13
- package/dist/components/ColumnFilter/ColumnFilter.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/DataExplorer/DataExplorer.d.ts.map +1 -1
- package/dist/components/DataExplorer/DataExplorer.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/columns/AutocompleteColumn.d.ts +11 -2
- package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
- package/dist/components/DataGrid/columns/AutocompleteColumn.js +115 -109
- package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/NumberColumn.js +1 -1
- package/dist/components/DataGrid/columns/NumberColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts +20 -0
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts.map +1 -0
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.js +18 -0
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.js.map +1 -0
- 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/components/contextMenu.js +3 -3
- package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
- package/dist/components/DataGrid/hooks/useGridUndoRedo.d.ts.map +1 -1
- package/dist/components/DataGrid/hooks/useGridUndoRedo.js +14 -12
- package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
- package/dist/components/DataGrid/hooks/useStack.d.ts +1 -1
- package/dist/components/DataGrid/hooks/useStack.js +2 -2
- package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
- 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.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.js +47 -42
- package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
- package/dist/components/DataGrid/utils/extractColumnValidationMessages.js +7 -7
- package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
- package/dist/components/DataGrid/utils/json-rx/JsonRx.js +2 -2
- package/dist/components/DataGrid/utils/json-rx/JsonRx.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 +3 -2
- 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/DownloadCart/MeetAccessRequirementCard.js +1 -1
- package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
- 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/EntityDownloadConfirmation/EntityDownloadConfirmation.js +5 -5
- package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.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/details/view/DetailsView.d.ts.map +1 -1
- package/dist/components/EntityFinder/details/view/DetailsView.js +4 -4
- package/dist/components/EntityFinder/details/view/DetailsView.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 +4 -4
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
- package/dist/components/EntityHeaderTable/Filter.d.ts.map +1 -1
- package/dist/components/EntityHeaderTable/Filter.js +1 -1
- package/dist/components/EntityHeaderTable/Filter.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/EvaluationRoundEditor.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/FeaturedDataTabs/FacetPlotsCard.d.ts.map +1 -1
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +80 -84
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.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 +7 -7
- 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/schemaFieldUtils.js +2 -2
- package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -1
- package/dist/components/FullTextSearch/FullTextSearch.js +8 -8
- package/dist/components/GenericCard/CardUtils.js.map +1 -1
- package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +46 -46
- package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js.map +1 -1
- package/dist/components/GenericCard/DuoTermTags/duoTerms.js +1 -1
- package/dist/components/GenericCard/DuoTermTags/duoTerms.js.map +1 -1
- 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 +38 -38
- package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
- package/dist/components/GoalsV3/GoalsV3.js +1 -1
- package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
- package/dist/components/HelpPopover/HelpPopover.js +1 -1
- package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
- package/dist/components/HexGrid/HexGrid.d.ts +3 -1
- package/dist/components/HexGrid/HexGrid.d.ts.map +1 -1
- package/dist/components/HexGrid/HexGrid.js +14 -13
- package/dist/components/HexGrid/HexGrid.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/IconSvg/index.d.ts +1 -1
- package/dist/components/IconSvg/index.d.ts.map +1 -1
- package/dist/components/IconSvg/index.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js +3 -3
- package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.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/Markdown/MarkdownEditor.js +1 -1
- package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
- package/dist/components/Markdown/widget/index.d.ts +1 -1
- package/dist/components/Markdown/widget/index.d.ts.map +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
- package/dist/components/ModalDownload/ModalDownload.d.ts.map +1 -1
- package/dist/components/ModalDownload/ModalDownload.js +2 -1
- package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
- package/dist/components/OAuthClientManagement/OAuthManagement.js +14 -13
- package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
- package/dist/components/Plot/BarPlot.js +1 -1
- package/dist/components/Plot/BarPlot.js.map +1 -1
- package/dist/components/Plot/PlotPanelHeader.d.ts +3 -2
- package/dist/components/Plot/PlotPanelHeader.d.ts.map +1 -1
- package/dist/components/Plot/PlotPanelHeader.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/ProgrammaticTableDownload/ProgrammaticTableDownload.js +1 -1
- package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
- package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.js +6 -6
- package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraph.d.ts.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraph.js +3 -3
- package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.js +31 -30
- package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.js +91 -75
- package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.css +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.js +91 -79
- package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.module.js +11 -11
- package/dist/components/QueryBuilder/QueryBuilderControls.module.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.module.scss +2 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +2 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderLimits.d.ts +18 -0
- package/dist/components/QueryBuilder/queryBuilderLimits.d.ts.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderLimits.js +38 -0
- package/dist/components/QueryBuilder/queryBuilderLimits.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +0 -8
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderMetadata.js +6 -9
- package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +5 -4
- package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderTranslation.js +58 -33
- package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -1
- package/dist/components/QueryBuilder/useQBCombinedSql.d.ts.map +1 -1
- package/dist/components/QueryBuilder/useQBCombinedSql.js +4 -4
- package/dist/components/QueryBuilder/useQBCombinedSql.js.map +1 -1
- package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -1
- package/dist/components/QueryBuilder/useQBValueDisplayName.js +5 -5
- package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -1
- package/dist/components/QueryCountButton/QueryCountButton.js +5 -5
- package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
- package/dist/components/QuerySortSelector.js +5 -5
- package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +21 -21
- package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts +20 -0
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts.map +1 -0
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js +50 -0
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js.map +1 -0
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts +5 -3
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts.map +1 -1
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js +7 -3
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
- package/dist/components/QueryWrapper/downloadListFiles.d.ts +25 -0
- package/dist/components/QueryWrapper/downloadListFiles.d.ts.map +1 -0
- package/dist/components/QueryWrapper/downloadListFiles.js +39 -0
- package/dist/components/QueryWrapper/downloadListFiles.js.map +1 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts +16 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts.map +1 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js +50 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js.map +1 -0
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts +4 -1
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts.map +1 -1
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js +15 -28
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
- package/dist/components/QueryWrapper/useOnQueryDataChange.d.ts.map +1 -1
- package/dist/components/QueryWrapper/useOnQueryDataChange.js +7 -6
- package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
- package/dist/components/QueryWrapperErrorBoundary.d.ts +3 -1
- package/dist/components/QueryWrapperErrorBoundary.d.ts.map +1 -1
- package/dist/components/QueryWrapperErrorBoundary.js +26 -21
- package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js +7 -7
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +2 -2
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +34 -32
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js +7 -7
- package/dist/components/QueryWrapperPlotNav/UseRowSet.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/UseRowSet.js +12 -12
- package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
- package/dist/components/ReleaseCard/ReleaseCardLarge.js +5 -5
- package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
- package/dist/components/RowDataTable/CategorizedRowDataTable.css +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts +33 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts.map +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.js +64 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.js.map +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.module.js +8 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.module.js.map +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.module.scss +18 -0
- package/dist/components/RowDataTable/RowDataTable.d.ts +13 -0
- package/dist/components/RowDataTable/RowDataTable.d.ts.map +1 -1
- package/dist/components/RowDataTable/RowDataTable.js +25 -8
- package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
- package/dist/components/RssFeedCards/RssFeedCards.js +1 -1
- package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.d.ts.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js +2 -2
- package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +17 -9
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +39 -30
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +24 -24
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
- package/dist/components/ShareThisPage/ShareThisPage.js +4 -4
- package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
- package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js +8 -8
- 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/SynapseChatMessage.js +1 -1
- package/dist/components/SynapseChat/SynapseChatMessage.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/SynapseForm/NavButtons.js.map +1 -1
- package/dist/components/SynapseForm/StepsSideNav.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/HighlightedTypography.js +1 -1
- package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.d.ts.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js +3 -3
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.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.d.ts.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +38 -44
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +4 -4
- package/dist/components/SynapseTable/SqlEditor.js +7 -7
- package/dist/components/SynapseTable/SynapseTable.js +8 -8
- package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableRenderers.d.ts.map +1 -1
- package/dist/components/SynapseTable/SynapseTableRenderers.js +73 -72
- package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableUtils.js +1 -1
- package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +44 -45
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js +1 -1
- package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.d.ts.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +6 -6
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
- package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +4 -4
- package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js +12 -12
- package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
- package/dist/components/SynapseTable/table-top/ColumnSelection.js +6 -6
- package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts +0 -1
- package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts.map +1 -1
- package/dist/components/SynapseTable/table-top/DownloadOptions.js +64 -57
- package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
- package/dist/components/SynapseTable/usePrefetchTableData.d.ts.map +1 -1
- package/dist/components/SynapseTable/usePrefetchTableData.js +3 -3
- package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +2 -2
- 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/TableColumnSchemaEditorTestUtils.js +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js +2 -2
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +59 -59
- 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/TableColumnSchemaEditor/Validators/DatetimeSchema.js +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
- package/dist/components/TanStackTable/ColumnHeader.js +1 -1
- package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
- package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js +1 -1
- package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
- package/dist/components/TanStackTable/StyledTanStackTable.d.ts.map +1 -1
- package/dist/components/TanStackTable/StyledTanStackTable.js +1 -4
- package/dist/components/TanStackTable/StyledTanStackTable.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/TermsAndConditions/TermsAndConditions.js.map +1 -1
- package/dist/components/TotalQueryResults.js +14 -14
- package/dist/components/Webhook/WebhookDashboard.d.ts.map +1 -1
- package/dist/components/Webhook/WebhookDashboard.js +3 -3
- 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/doi/CreateOrUpdateDoiModal.js +1 -1
- package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
- package/dist/components/download_list/DownloadConfirmationUtils.d.ts +5 -1
- package/dist/components/download_list/DownloadConfirmationUtils.d.ts.map +1 -1
- package/dist/components/download_list/DownloadConfirmationUtils.js +2 -2
- package/dist/components/download_list/DownloadConfirmationUtils.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/ErrorBanner.d.ts.map +1 -1
- package/dist/components/error/ErrorBanner.js +49 -46
- package/dist/components/error/ErrorBanner.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/file/upload/MultiFileUploadProgress.js +5 -5
- package/dist/components/row_renderers/Dataset.d.ts.map +1 -1
- package/dist/components/row_renderers/Dataset.js +6 -6
- package/dist/components/row_renderers/Dataset.js.map +1 -1
- package/dist/components/row_renderers/Funder.js +1 -1
- package/dist/components/row_renderers/Funder.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/ElementWithTooltip.d.ts +6 -1
- package/dist/components/widgets/ElementWithTooltip.d.ts.map +1 -1
- package/dist/components/widgets/ElementWithTooltip.js +22 -14
- package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
- package/dist/components/widgets/RangeSlider/RangeSlider.d.ts.map +1 -1
- package/dist/components/widgets/RangeSlider/RangeSlider.js +1 -1
- package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
- package/dist/components/widgets/SynapseImage.js +1 -1
- package/dist/components/widgets/SynapseImage.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts +16 -5
- package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js +115 -102
- package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendList.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendList.js +4 -2
- package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts +2 -0
- package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainer.d.ts +7 -0
- package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainer.js +47 -45
- package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
- package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js +4 -4
- package/dist/components/widgets/facet-nav/useFacetPlots.d.ts +3 -2
- package/dist/components/widgets/facet-nav/useFacetPlots.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/useFacetPlots.js +16 -15
- package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
- package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js +4 -4
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts +2 -2
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +62 -60
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts +2 -0
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js +10 -10
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts +1 -0
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js +2 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts +3 -2
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterControls.d.ts +3 -2
- package/dist/components/widgets/query-filter/FacetFilterControls.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterControls.js +63 -62
- package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
- package/dist/components/widgets/query-filter/JsonColumnFacetFilters.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js +30 -29
- package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
- package/dist/components/widgets/query-filter/RangeFacetFilter.js +5 -5
- 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/cohortBuilder/cohortBuilderMockProfiles.d.ts +53 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.d.ts.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js +391 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts +41 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js +379 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts +26 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js +112 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js.map +1 -0
- package/dist/mocks/mockAnnotationColumns.d.ts.map +1 -1
- package/dist/mocks/mockAnnotationColumns.js +1 -1
- package/dist/mocks/mockAnnotationColumns.js.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +17 -0
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.js +62 -42
- package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +21 -2
- package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.js +30 -22
- package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts +27 -0
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts.map +1 -0
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.js +158 -0
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.js.map +1 -0
- 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/handlers/subscriptionHandlers.js +1 -1
- package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.js +2 -2
- package/dist/mocks/msw/handlers/userProfileHandlers.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/mocks/query/mockColumnCategoryTable.d.ts +19 -0
- package/dist/mocks/query/mockColumnCategoryTable.d.ts.map +1 -0
- package/dist/mocks/query/mockColumnCategoryTable.js +188 -0
- package/dist/mocks/query/mockColumnCategoryTable.js.map +1 -0
- package/dist/stories/ColorPaletteInspector.d.ts.map +1 -1
- package/dist/stories/ColorPaletteInspector.js +2 -2
- package/dist/stories/ColorPaletteInspector.js.map +1 -1
- package/dist/style/components/facet_nav/_facet-nav-panel.scss +8 -0
- package/dist/style/main.css +1 -1
- package/dist/synapse-queries/auth/useOIDC.js +2 -2
- package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +2 -2
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -1
- package/dist/synapse-queries/challenge/useChallenge.js +2 -2
- package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
- package/dist/synapse-queries/chat/useChat.js +8 -8
- package/dist/synapse-queries/chat/useChat.js.map +1 -1
- package/dist/synapse-queries/curation/task/useCurationTask.js +10 -10
- package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useAccessRequirements.js +24 -24
- package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js +4 -4
- package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useEDuc.js +6 -6
- package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useFormTemplate.js +4 -4
- package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -1
- package/dist/synapse-queries/download/index.js +2 -2
- package/dist/synapse-queries/download/useDownloadList.d.ts +5 -0
- package/dist/synapse-queries/download/useDownloadList.d.ts.map +1 -1
- package/dist/synapse-queries/download/useDownloadList.js +14 -13
- package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
- package/dist/synapse-queries/entity/useEntity.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useEntity.js +20 -20
- package/dist/synapse-queries/entity/useEntity.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToADWorkbench.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useExportToADWorkbench.js +2 -1
- package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToCavatica.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useExportToCavatica.js +3 -2
- package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToPluto.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useExportToPluto.js +2 -1
- package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
- package/dist/synapse-queries/entity/useGetQueryResultBundle.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useGetQueryResultBundle.js +4 -7
- package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
- package/dist/synapse-queries/forum/useReply.js +6 -6
- package/dist/synapse-queries/forum/useReply.js.map +1 -1
- package/dist/synapse-queries/forum/useThread.js +14 -14
- package/dist/synapse-queries/forum/useThread.js.map +1 -1
- package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js +1 -1
- package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
- package/dist/synapse-queries/grid/useGridSession.js +4 -4
- package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
- package/dist/synapse-queries/index.js +177 -176
- package/dist/synapse-queries/oauth/useOAuthClient.js +9 -9
- package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
- package/dist/synapse-queries/portal/usePortal.js +7 -7
- package/dist/synapse-queries/portal/usePortal.js.map +1 -1
- package/dist/synapse-queries/subscription/useSubscription.js +4 -4
- package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
- package/dist/synapse-queries/table/useTableUpdateTransaction.js +2 -2
- package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
- package/dist/synapse-queries/team/useTeam.js +2 -2
- package/dist/synapse-queries/team/useTeam.js.map +1 -1
- package/dist/synapse-queries/team/useTeamList.d.ts.map +1 -1
- package/dist/synapse-queries/team/useTeamList.js +3 -3
- package/dist/synapse-queries/team/useTeamList.js.map +1 -1
- package/dist/synapse-queries/team/useTeamMembers.js +8 -8
- package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
- package/dist/synapse-queries/termsOfService/useTermsOfService.js +2 -2
- package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
- package/dist/synapse-queries/trash/useTrashCan.js +4 -4
- package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
- package/dist/synapse-queries/user/useCertificationQuiz.js +2 -2
- package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
- package/dist/synapse-queries/user/useFavorites.js +4 -4
- package/dist/synapse-queries/user/useFavorites.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/synapse-queries/user/useRevokeCertification.js +2 -2
- package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
- package/dist/synapse-queries/wiki/useWiki.js +10 -10
- package/dist/synapse-queries/wiki/useWiki.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/ContentTypeUtils.js +4 -4
- package/dist/utils/ContentTypeUtils.js.map +1 -1
- package/dist/utils/PermissionLevelToAccessType.js +1 -1
- package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
- package/dist/utils/analytics/useGoogleAnalytics.js +1 -1
- package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
- package/dist/utils/context/DocumentMetadataContext.js +1 -1
- package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
- package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
- package/dist/utils/functions/AccessControlListUtils.js +3 -3
- package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
- package/dist/utils/functions/ArrayUtils.js +2 -2
- package/dist/utils/functions/ArrayUtils.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/FileHandleUtils.js +1 -1
- package/dist/utils/functions/FileHandleUtils.js.map +1 -1
- package/dist/utils/functions/RegularExpressions.js +1 -1
- package/dist/utils/functions/RegularExpressions.js.map +1 -1
- package/dist/utils/functions/StringUtils.d.ts.map +1 -1
- package/dist/utils/functions/StringUtils.js +1 -2
- package/dist/utils/functions/StringUtils.js.map +1 -1
- package/dist/utils/functions/deepLinkingUtils.js +2 -2
- package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
- package/dist/utils/functions/enumerationFacet.d.ts +26 -0
- package/dist/utils/functions/enumerationFacet.d.ts.map +1 -0
- package/dist/utils/functions/enumerationFacet.js +27 -0
- package/dist/utils/functions/enumerationFacet.js.map +1 -0
- package/dist/utils/functions/facetCountUtils.d.ts +12 -0
- package/dist/utils/functions/facetCountUtils.d.ts.map +1 -0
- package/dist/utils/functions/facetCountUtils.js +9 -0
- package/dist/utils/functions/facetCountUtils.js.map +1 -0
- package/dist/utils/functions/getEndpoint.js.map +1 -1
- package/dist/utils/functions/getUserData.js +1 -1
- package/dist/utils/functions/getUserData.js.map +1 -1
- package/dist/utils/functions/queryUtils.d.ts +1 -1
- package/dist/utils/functions/queryUtils.d.ts.map +1 -1
- package/dist/utils/functions/queryUtils.js +26 -22
- package/dist/utils/functions/queryUtils.js.map +1 -1
- package/dist/utils/functions/testDownloadSpeed.d.ts.map +1 -1
- package/dist/utils/functions/testDownloadSpeed.js +17 -26
- package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
- package/dist/utils/functions/unCamelCase.js +1 -1
- package/dist/utils/functions/unCamelCase.js.map +1 -1
- package/dist/utils/hooks/useGetInfoFromIds.js +5 -5
- package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
- package/dist/utils/hooks/useLogin.d.ts.map +1 -1
- package/dist/utils/hooks/useLogin.js +5 -5
- package/dist/utils/hooks/useLogin.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
- package/dist/utils/jsonschema/collectTopLevelProperties.d.ts +6 -0
- package/dist/utils/jsonschema/collectTopLevelProperties.d.ts.map +1 -1
- package/dist/utils/jsonschema/collectTopLevelProperties.js +1 -1
- package/dist/utils/jsonschema/collectTopLevelProperties.js.map +1 -1
- package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts +22 -0
- package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts.map +1 -0
- package/dist/utils/jsonschema/getNumberOrEnumInfo.js +39 -0
- package/dist/utils/jsonschema/getNumberOrEnumInfo.js.map +1 -0
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts +1 -0
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts.map +1 -1
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js +1 -1
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
- package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts +5 -0
- package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts.map +1 -1
- package/dist/utils/jsonschema/getSchemaPropertyInfo.js +30 -15
- package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
- package/dist/utils/jsonschema/submissionContext.js +2 -2
- package/dist/utils/jsonschema/submissionContext.js.map +1 -1
- package/package.json +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldLibrary.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FieldLibrary.tsx"],"sourcesContent":["import {\n Alert,\n Box,\n Button,\n InputAdornment,\n Paper,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport
|
|
1
|
+
{"version":3,"file":"FieldLibrary.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FieldLibrary.tsx"],"sourcesContent":["import {\n Alert,\n Box,\n Button,\n InputAdornment,\n Paper,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport AddIcon from '@mui/icons-material/Add'\nimport SearchIcon from '@mui/icons-material/Search'\nimport { RJSFSchema } from '@rjsf/utils'\nimport { ReactNode, useMemo, useState } from 'react'\nimport {\n listResolvedSchemaProperties,\n propertyKeyToPointer,\n} from '@/utils/jsonschema/submissionContext'\nimport { FieldLibraryRow } from './FieldLibraryRow'\nimport fieldLibraryStyles from './FieldLibrary.module.scss'\n\nexport type FieldLibraryProps = {\n jsonSchema: RJSFSchema\n /** Set of JSON pointers (e.g. `/institution`) currently bound to a step. */\n usedPaths: Set<string>\n selectedPropertyKey: string | null\n onSelectField: (propertyKey: string) => void\n onCreateField: () => void\n}\n\n/**\n * Left pane: a compact list of all schema properties (the \"fields\" the form\n * collects) -- both unconditional and any gated behind an\n * `x-synapse-submissionContext` conditional. Each row is clickable and opens\n * the field definition drawer.\n */\nexport function FieldLibrary({\n jsonSchema,\n usedPaths,\n selectedPropertyKey,\n onSelectField,\n onCreateField,\n}: FieldLibraryProps) {\n const [search, setSearch] = useState('')\n\n const resolvedProperties = useMemo(\n () => listResolvedSchemaProperties(jsonSchema),\n [jsonSchema],\n )\n\n const filtered = useMemo(() => {\n if (!search) return resolvedProperties\n const searchTerm = search.toLowerCase()\n return resolvedProperties.filter(p => {\n const entryAsString =\n `${p.propertyKey} ${p.subSchema.title ?? ''}`.toLowerCase()\n return entryAsString.includes(searchTerm)\n })\n }, [resolvedProperties, search])\n\n let fieldList: ReactNode\n if (resolvedProperties.length === 0) {\n fieldList = (\n <Alert severity=\"info\">\n No fields yet. Click \"New\" to start collecting information.\n </Alert>\n )\n } else if (filtered.length === 0) {\n fieldList = <Alert severity=\"info\">No fields match \"{search}\".</Alert>\n } else {\n fieldList = (\n <Stack spacing={0.75}>\n {filtered.map(p => (\n <Box\n key={p.propertyKey}\n className={fieldLibraryStyles.selectedRow}\n data-selected={selectedPropertyKey === p.propertyKey}\n >\n <FieldLibraryRow\n propertyKey={p.propertyKey}\n property={p.subSchema}\n isRequired={p.isRequired}\n context={p.context}\n isUsedInSteps={usedPaths.has(propertyKeyToPointer(p.propertyKey))}\n onClick={() => onSelectField(p.propertyKey)}\n />\n </Box>\n ))}\n </Stack>\n )\n }\n\n return (\n <Paper variant=\"outlined\" sx={{ p: 2, height: '100%' }}>\n <Box sx={{ mb: 1 }}>\n <Typography variant=\"subtitle2\">Fields</Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n Define the data you want to collect. Click a field to edit it.\n </Typography>\n </Box>\n\n <Stack spacing={1.5}>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <TextField\n placeholder=\"Search fields…\"\n value={search}\n onChange={e => setSearch(e.target.value)}\n size=\"small\"\n fullWidth\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n },\n htmlInput: { 'aria-label': 'Search fields' },\n }}\n />\n <Button\n size=\"small\"\n variant=\"outlined\"\n startIcon={<AddIcon />}\n onClick={onCreateField}\n >\n New\n </Button>\n </Stack>\n\n {fieldList}\n </Stack>\n </Paper>\n )\n}\n"],"mappings":";;;;;;;;;AAoCA,SAAgB,EAAa,EAC3B,eACA,cACA,wBACA,kBACA,oBACoB;CACpB,IAAM,CAAC,GAAQ,KAAa,EAAS,EAAE,GAEjC,IAAqB,QACnB,EAA6B,CAAU,GAC7C,CAAC,CAAU,CACb,GAEM,IAAW,QAAc;EAC7B,IAAI,CAAC,GAAQ,OAAO;EACpB,IAAM,IAAa,EAAO,YAAY;EACtC,OAAO,EAAmB,QAAO,MAE7B,GAAG,EAAE,YAAY,GAAG,EAAE,UAAU,SAAS,KAAK,YACzC,EAAc,SAAS,CAAU,CACzC;CACH,GAAG,CAAC,GAAoB,CAAM,CAAC,GAE3B;CAgCJ,OA/BA,AASE,IATE,EAAmB,WAAW,IAE9B,kBAAC,GAAD;EAAO,UAAS;YAAO;CAEhB,CAAA,IAEA,EAAS,WAAW,IACjB,kBAAC,GAAD;EAAO,UAAS;YAAhB;GAAuB;GAAkB;GAAO;EAAS;MAGnE,kBAAC,GAAD;EAAO,SAAS;YACb,EAAS,KAAI,MACZ,kBAAC,GAAD;GAEE,WAAW,EAAmB;GAC9B,iBAAe,MAAwB,EAAE;aAEzC,kBAAC,GAAD;IACE,aAAa,EAAE;IACf,UAAU,EAAE;IACZ,YAAY,EAAE;IACd,SAAS,EAAE;IACX,eAAe,EAAU,IAAI,EAAqB,EAAE,WAAW,CAAC;IAChE,eAAe,EAAc,EAAE,WAAW;GAC3C,CAAA;EACE,GAZE,EAAE,WAYJ,CACN;CACI,CAAA,GAKT,kBAAC,GAAD;EAAO,SAAQ;EAAW,IAAI;GAAE,GAAG;GAAG,QAAQ;EAAO;YAArD,CACE,kBAAC,GAAD;GAAK,IAAI,EAAE,IAAI,EAAE;aAAjB,CACE,kBAAC,GAAD;IAAY,SAAQ;cAAY;GAAkB,CAAA,GAClD,kBAAC,GAAD;IAAY,SAAQ;IAAU,OAAM;cAAiB;GAEzC,CAAA,CACT;MAEL,kBAAC,GAAD;GAAO,SAAS;aAAhB,CACE,kBAAC,GAAD;IAAO,WAAU;IAAM,SAAS;IAAG,YAAW;cAA9C,CACE,kBAAC,GAAD;KACE,aAAY;KACZ,OAAO;KACP,WAAU,MAAK,EAAU,EAAE,OAAO,KAAK;KACvC,MAAK;KACL,WAAA;KACA,WAAW;MACT,OAAO,EACL,gBACE,kBAAC,GAAD;OAAgB,UAAS;iBACvB,kBAAC,GAAD,EAAY,UAAS,QAAS,CAAA;MAChB,CAAA,EAEpB;MACA,WAAW,EAAE,cAAc,gBAAgB;KAC7C;IACD,CAAA,GACD,kBAAC,GAAD;KACE,MAAK;KACL,SAAQ;KACR,WAAW,kBAAC,GAAD,CAAU,CAAA;KACrB,SAAS;eACV;IAEO,CAAA,CACH;OAEN,CACI;IACF;;AAEX"}
|
|
@@ -4,11 +4,11 @@ import r from "./dragHandle.module.js";
|
|
|
4
4
|
import { FIELD_DRAG_TYPE as i, fieldDragData as a } from "./sortableIds.js";
|
|
5
5
|
import { Box as o, Chip as s, Paper as c, Stack as l, Typography as u } from "@mui/material";
|
|
6
6
|
import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
7
|
+
import { useDraggable as m } from "@dnd-kit/react";
|
|
8
|
+
import h from "@mui/icons-material/DragIndicator";
|
|
9
9
|
//#region src/components/FormTemplateEditor/FieldLibraryRow.tsx
|
|
10
10
|
function g({ propertyKey: g, property: _, isRequired: v, context: y, isUsedInSteps: b, onClick: x }) {
|
|
11
|
-
let S = t(_), C = _.title || g, { ref: w, handleRef: T, isDragging: E } =
|
|
11
|
+
let S = t(_), C = _.title || g, { ref: w, handleRef: T, isDragging: E } = m({
|
|
12
12
|
id: `field:${g}`,
|
|
13
13
|
type: i,
|
|
14
14
|
data: a(g),
|
|
@@ -36,7 +36,7 @@ function g({ propertyKey: g, property: _, isRequired: v, context: y, isUsedInSte
|
|
|
36
36
|
color: b ? "text.disabled" : "text.secondary",
|
|
37
37
|
cursor: b ? "not-allowed" : void 0
|
|
38
38
|
},
|
|
39
|
-
children: /* @__PURE__ */ f(
|
|
39
|
+
children: /* @__PURE__ */ f(h, { fontSize: "small" })
|
|
40
40
|
}), /* @__PURE__ */ p(o, {
|
|
41
41
|
role: "button",
|
|
42
42
|
tabIndex: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldLibraryRow.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FieldLibraryRow.tsx"],"sourcesContent":["import { useDraggable } from '@dnd-kit/react'\nimport { Box, Chip, Paper, Stack, Typography } from '@mui/material'\nimport
|
|
1
|
+
{"version":3,"file":"FieldLibraryRow.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FieldLibraryRow.tsx"],"sourcesContent":["import { useDraggable } from '@dnd-kit/react'\nimport { Box, Chip, Paper, Stack, Typography } from '@mui/material'\nimport DragHandleIcon from '@mui/icons-material/DragIndicator'\nimport { RJSFSchema } from '@rjsf/utils'\nimport {\n SchemaPropertyContext,\n submissionContextLabel,\n} from '@/utils/jsonschema/submissionContext'\nimport styles from './dragHandle.module.scss'\nimport { detectFieldType, fieldTypeLabel } from './schemaFieldUtils'\nimport { FIELD_DRAG_TYPE, fieldDragData } from './sortableIds'\n\nexport type FieldLibraryRowProps = {\n propertyKey: string\n property: RJSFSchema\n isRequired: boolean\n /** Which submission context (per the schema's `x-synapse-submissionContext` convention)\n * gates this property. `ALWAYS` properties show no badge. */\n context: SchemaPropertyContext\n isUsedInSteps: boolean\n onClick: () => void\n}\n\n/**\n * A compact row in the field library. Click anywhere to edit the field's\n * definition; grab the drag indicator on the left to bind it to a step.\n * Rows already bound to a step are non-draggable.\n */\nexport function FieldLibraryRow({\n propertyKey,\n property,\n isRequired,\n context,\n isUsedInSteps,\n onClick,\n}: FieldLibraryRowProps) {\n const type = detectFieldType(property)\n const displayLabel = property.title || propertyKey\n\n const { ref, handleRef, isDragging } = useDraggable({\n id: `field:${propertyKey}`,\n type: FIELD_DRAG_TYPE,\n data: fieldDragData(propertyKey),\n disabled: isUsedInSteps,\n })\n\n return (\n <Paper\n ref={ref}\n variant=\"outlined\"\n className={styles.dragSource}\n data-dragging={isDragging}\n sx={{ p: 1.25 }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Box\n ref={handleRef}\n role=\"button\"\n tabIndex={isUsedInSteps ? -1 : 0}\n aria-label={\n isUsedInSteps ? 'Already in a form step' : 'Drag to add to a step'\n }\n className={styles.dragHandle}\n sx={{\n color: isUsedInSteps ? 'text.disabled' : 'text.secondary',\n cursor: isUsedInSteps ? 'not-allowed' : undefined,\n }}\n >\n <DragHandleIcon fontSize=\"small\" />\n </Box>\n <Box\n role=\"button\"\n tabIndex={0}\n aria-label={`Edit ${displayLabel}`}\n onClick={onClick}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick()\n }\n }}\n sx={{\n flexGrow: 1,\n minWidth: 0,\n display: 'flex',\n alignItems: 'center',\n gap: 0.5,\n cursor: 'pointer',\n borderRadius: 1,\n p: 0.5,\n m: -0.5,\n '&:hover': { backgroundColor: 'action.hover' },\n }}\n >\n <Box sx={{ flexGrow: 1, minWidth: 0 }}>\n <Typography\n variant=\"body2\"\n fontWeight={500}\n noWrap\n title={displayLabel}\n >\n {displayLabel}\n </Typography>\n <Stack\n direction=\"row\"\n spacing={0.5}\n alignItems=\"center\"\n sx={{ mt: 0.25 }}\n >\n <Typography variant=\"caption\" color=\"text.secondary\">\n {fieldTypeLabel(type)}\n </Typography>\n {isRequired && (\n <>\n <Typography variant=\"caption\" color=\"text.secondary\">\n ·\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n Required\n </Typography>\n </>\n )}\n {context !== 'ALWAYS' && (\n <>\n <Typography variant=\"caption\" color=\"text.secondary\">\n ·\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {submissionContextLabel(context)}\n </Typography>\n </>\n )}\n </Stack>\n </Box>\n <Chip\n label={isUsedInSteps ? 'In form' : 'Not in form'}\n size=\"small\"\n color={isUsedInSteps ? 'success' : 'warning'}\n variant=\"outlined\"\n />\n </Box>\n </Box>\n </Paper>\n )\n}\n"],"mappings":";;;;;;;;;AA4BA,SAAgB,EAAgB,EAC9B,gBACA,aACA,eACA,YACA,kBACA,cACuB;CACvB,IAAM,IAAO,EAAgB,CAAQ,GAC/B,IAAe,EAAS,SAAS,GAEjC,EAAE,QAAK,cAAW,kBAAe,EAAa;EAClD,IAAI,SAAS;EACb,MAAM;EACN,MAAM,EAAc,CAAW;EAC/B,UAAU;CACZ,CAAC;CAED,OACE,kBAAC,GAAD;EACO;EACL,SAAQ;EACR,WAAW,EAAO;EAClB,iBAAe;EACf,IAAI,EAAE,GAAG,KAAK;YAEd,kBAAC,GAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,YAAY;IAAU,KAAK;GAAI;aAA3D,CACE,kBAAC,GAAD;IACE,KAAK;IACL,MAAK;IACL,UAAU,IAAgB,KAAK;IAC/B,cACE,IAAgB,2BAA2B;IAE7C,WAAW,EAAO;IAClB,IAAI;KACF,OAAO,IAAgB,kBAAkB;KACzC,QAAQ,IAAgB,gBAAgB,KAAA;IAC1C;cAEA,kBAAC,GAAD,EAAgB,UAAS,QAAS,CAAA;GAC/B,CAAA,GACL,kBAAC,GAAD;IACE,MAAK;IACL,UAAU;IACV,cAAY,QAAQ;IACX;IACT,YAAW,MAAK;KACd,CAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SACjC,EAAE,eAAe,GACjB,EAAQ;IAEZ;IACA,IAAI;KACF,UAAU;KACV,UAAU;KACV,SAAS;KACT,YAAY;KACZ,KAAK;KACL,QAAQ;KACR,cAAc;KACd,GAAG;KACH,GAAG;KACH,WAAW,EAAE,iBAAiB,eAAe;IAC/C;cAtBF,CAwBE,kBAAC,GAAD;KAAK,IAAI;MAAE,UAAU;MAAG,UAAU;KAAE;eAApC,CACE,kBAAC,GAAD;MACE,SAAQ;MACR,YAAY;MACZ,QAAA;MACA,OAAO;gBAEN;KACS,CAAA,GACZ,kBAAC,GAAD;MACE,WAAU;MACV,SAAS;MACT,YAAW;MACX,IAAI,EAAE,IAAI,IAAK;gBAJjB;OAME,kBAAC,GAAD;QAAY,SAAQ;QAAU,OAAM;kBACjC,EAAe,CAAI;OACV,CAAA;OACX,KACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;QAAY,SAAQ;QAAU,OAAM;kBAAiB;OAEzC,CAAA,GACZ,kBAAC,GAAD;QAAY,SAAQ;QAAU,OAAM;kBAAiB;OAEzC,CAAA,CACZ,EAAA,CAAA;OAEH,MAAY,YACX,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;QAAY,SAAQ;QAAU,OAAM;kBAAiB;OAEzC,CAAA,GACZ,kBAAC,GAAD;QAAY,SAAQ;QAAU,OAAM;kBACjC,EAAuB,CAAO;OACrB,CAAA,CACZ,EAAA,CAAA;MAEC;OACJ;QACL,kBAAC,GAAD;KACE,OAAO,IAAgB,YAAY;KACnC,MAAK;KACL,OAAO,IAAgB,YAAY;KACnC,SAAQ;IACT,CAAA,CACE;KACF;;CACA,CAAA;AAEX"}
|
|
@@ -4,8 +4,8 @@ import { createEditableStep as n } from "./utils.js";
|
|
|
4
4
|
import { StepCard as r } from "./StepCard.js";
|
|
5
5
|
import { Alert as i, Box as a, Button as o, Paper as s, Stack as c, Typography as l } from "@mui/material";
|
|
6
6
|
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
7
|
-
import
|
|
8
|
-
import p from "
|
|
7
|
+
import f from "pluralize";
|
|
8
|
+
import p from "@mui/icons-material/Add";
|
|
9
9
|
//#region src/components/FormTemplateEditor/FormStructurePanel.tsx
|
|
10
10
|
function m({ steps: m, jsonSchema: h, unboundProperties: g, formTemplateId: _, onStepsChange: v, onBindField: y }) {
|
|
11
11
|
let b = (e, t) => {
|
|
@@ -45,7 +45,7 @@ function m({ steps: m, jsonSchema: h, unboundProperties: g, formTemplateId: _, o
|
|
|
45
45
|
})] }), /* @__PURE__ */ u(o, {
|
|
46
46
|
size: "small",
|
|
47
47
|
variant: "outlined",
|
|
48
|
-
startIcon: /* @__PURE__ */ u(
|
|
48
|
+
startIcon: /* @__PURE__ */ u(p, {}),
|
|
49
49
|
onClick: x,
|
|
50
50
|
children: "Add step"
|
|
51
51
|
})]
|
|
@@ -54,9 +54,9 @@ function m({ steps: m, jsonSchema: h, unboundProperties: g, formTemplateId: _, o
|
|
|
54
54
|
severity: "error",
|
|
55
55
|
sx: { mb: 1.5 },
|
|
56
56
|
children: [
|
|
57
|
-
|
|
57
|
+
f("required field", w.length, !0),
|
|
58
58
|
" ",
|
|
59
|
-
|
|
59
|
+
f("is", w.length),
|
|
60
60
|
" not bound to a step and must be bound before saving:",
|
|
61
61
|
" ",
|
|
62
62
|
w.map((e) => e.subSchema.title ?? t(e.propertyKey)).join(", "),
|
|
@@ -67,9 +67,9 @@ function m({ steps: m, jsonSchema: h, unboundProperties: g, formTemplateId: _, o
|
|
|
67
67
|
severity: "warning",
|
|
68
68
|
sx: { mb: 1.5 },
|
|
69
69
|
children: [
|
|
70
|
-
|
|
70
|
+
f("field", T.length, !0),
|
|
71
71
|
" ",
|
|
72
|
-
|
|
72
|
+
f("is", T.length),
|
|
73
73
|
" not yet bound to a step. Use a step's \"",
|
|
74
74
|
"Bind field",
|
|
75
75
|
"\" dropdown to add",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormStructurePanel.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FormStructurePanel.tsx"],"sourcesContent":["import { FormTemplateStep } from '@sage-bionetworks/synapse-client'\nimport { Alert, Box, Button, Paper, Stack, Typography } from '@mui/material'\nimport
|
|
1
|
+
{"version":3,"file":"FormStructurePanel.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FormStructurePanel.tsx"],"sourcesContent":["import { FormTemplateStep } from '@sage-bionetworks/synapse-client'\nimport { Alert, Box, Button, Paper, Stack, Typography } from '@mui/material'\nimport AddIcon from '@mui/icons-material/Add'\nimport pluralize from 'pluralize'\nimport { RJSFSchema } from '@rjsf/utils'\nimport {\n propertyKeyToPointer,\n ResolvedSchemaProperty,\n} from '@/utils/jsonschema/submissionContext'\nimport { StepCard } from './StepCard'\nimport {\n BIND_FIELD_LABEL,\n createEditableStep,\n EditableFormTemplateStep,\n moveItem,\n} from './utils'\n\nexport type FormStructurePanelProps = {\n steps: EditableFormTemplateStep[]\n jsonSchema: RJSFSchema\n /** Properties not yet bound to any step in the template. */\n unboundProperties: ResolvedSchemaProperty[]\n /** The FormTemplate's id, if it has been saved. Threaded down to file-field template uploads. */\n formTemplateId: string | undefined\n onStepsChange: (next: EditableFormTemplateStep[]) => void\n onBindField: (propertyKey: string, stepKey: string) => void\n}\n\n/**\n * Right pane: the multi-step form structure. Steps are collapsible cards;\n * each step contains a list of field slots (with inline-expand for slot config)\n * and a \"Bind field\" dropdown listing any library fields not yet bound to a\n * step.\n */\nexport function FormStructurePanel({\n steps,\n jsonSchema,\n unboundProperties,\n formTemplateId,\n onStepsChange,\n onBindField,\n}: FormStructurePanelProps) {\n const handleStepChange = (idx: number, patch: Partial<FormTemplateStep>) => {\n onStepsChange(steps.map((s, i) => (i === idx ? { ...s, ...patch } : s)))\n }\n\n const handleAddStep = () => {\n onStepsChange([...steps, createEditableStep()])\n }\n\n const handleRemoveStep = (idx: number) => {\n onStepsChange(steps.filter((_, i) => i !== idx))\n }\n\n const handleMoveStep = (idx: number, direction: -1 | 1) => {\n onStepsChange(moveItem(steps, idx, direction))\n }\n\n const requiredUnbound = unboundProperties.filter(p => p.isRequired)\n const optionalUnbound = unboundProperties.filter(p => !p.isRequired)\n\n return (\n <Paper variant=\"outlined\" sx={{ p: 2, height: '100%' }}>\n <Box\n sx={{\n mb: 1.5,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n gap: 1,\n }}\n >\n <Box>\n <Typography variant=\"subtitle2\">Steps</Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n Arrange fields into pages requesters will fill out in order.\n </Typography>\n </Box>\n <Button\n size=\"small\"\n variant=\"outlined\"\n startIcon={<AddIcon />}\n onClick={handleAddStep}\n >\n Add step\n </Button>\n </Box>\n\n {requiredUnbound.length > 0 && (\n <Alert severity=\"error\" sx={{ mb: 1.5 }}>\n {pluralize('required field', requiredUnbound.length, true)}{' '}\n {pluralize('is', requiredUnbound.length)} not bound to a step and must\n be bound before saving:{' '}\n {requiredUnbound\n .map(p => p.subSchema.title ?? propertyKeyToPointer(p.propertyKey))\n .join(', ')}\n .\n </Alert>\n )}\n\n {optionalUnbound.length > 0 && (\n <Alert severity=\"warning\" sx={{ mb: 1.5 }}>\n {pluralize('field', optionalUnbound.length, true)}{' '}\n {pluralize('is', optionalUnbound.length)} not yet bound to a step. Use\n a step's \"{BIND_FIELD_LABEL}\" dropdown to add{' '}\n {optionalUnbound.length === 1 ? 'it' : 'them'}.\n </Alert>\n )}\n\n <Stack spacing={1.5}>\n {steps.length === 0 ? (\n <Alert severity=\"info\">\n No steps yet. Click \"Add step\" to create the first one.\n </Alert>\n ) : (\n steps.map((step, stepIdx) => (\n <StepCard\n key={step.uiKey}\n step={step}\n stepIndex={stepIdx}\n isFirst={stepIdx === 0}\n isLast={stepIdx === steps.length - 1}\n unboundProperties={unboundProperties}\n jsonSchema={jsonSchema}\n formTemplateId={formTemplateId}\n defaultExpanded={stepIdx === 0}\n onChange={patch => handleStepChange(stepIdx, patch)}\n onBindField={propertyKey => onBindField(propertyKey, step.uiKey)}\n onMoveUp={() => handleMoveStep(stepIdx, -1)}\n onMoveDown={() => handleMoveStep(stepIdx, 1)}\n onRemove={() => handleRemoveStep(stepIdx)}\n />\n ))\n )}\n </Stack>\n </Paper>\n )\n}\n"],"mappings":";;;;;;;;;AAkCA,SAAgB,EAAmB,EACjC,UACA,eACA,sBACA,mBACA,kBACA,kBAC0B;CAC1B,IAAM,KAAoB,GAAa,MAAqC;EAC1E,EAAc,EAAM,KAAK,GAAG,MAAO,MAAM,IAAM;GAAE,GAAG;GAAG,GAAG;EAAM,IAAI,CAAE,CAAC;CACzE,GAEM,UAAsB;EAC1B,EAAc,CAAC,GAAG,GAAO,EAAmB,CAAC,CAAC;CAChD,GAEM,KAAoB,MAAgB;EACxC,EAAc,EAAM,QAAQ,GAAG,MAAM,MAAM,CAAG,CAAC;CACjD,GAEM,KAAkB,GAAa,MAAsB;EACzD,EAAc,EAAS,GAAO,GAAK,CAAS,CAAC;CAC/C,GAEM,IAAkB,EAAkB,QAAO,MAAK,EAAE,UAAU,GAC5D,IAAkB,EAAkB,QAAO,MAAK,CAAC,EAAE,UAAU;CAEnE,OACE,kBAAC,GAAD;EAAO,SAAQ;EAAW,IAAI;GAAE,GAAG;GAAG,QAAQ;EAAO;YAArD;GACE,kBAAC,GAAD;IACE,IAAI;KACF,IAAI;KACJ,SAAS;KACT,gBAAgB;KAChB,YAAY;KACZ,KAAK;IACP;cAPF,CASE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;KAAY,SAAQ;eAAY;IAAiB,CAAA,GACjD,kBAAC,GAAD;KAAY,SAAQ;KAAU,OAAM;eAAiB;IAEzC,CAAA,CACT,EAAA,CAAA,GACL,kBAAC,GAAD;KACE,MAAK;KACL,SAAQ;KACR,WAAW,kBAAC,GAAD,CAAU,CAAA;KACrB,SAAS;eACV;IAEO,CAAA,CACL;;GAEJ,EAAgB,SAAS,KACxB,kBAAC,GAAD;IAAO,UAAS;IAAQ,IAAI,EAAE,IAAI,IAAI;cAAtC;KACG,EAAU,kBAAkB,EAAgB,QAAQ,EAAI;KAAG;KAC3D,EAAU,MAAM,EAAgB,MAAM;KAAE;KACjB;KACvB,EACE,KAAI,MAAK,EAAE,UAAU,SAAS,EAAqB,EAAE,WAAW,CAAC,EACjE,KAAK,IAAI;KAAE;IAET;;GAGR,EAAgB,SAAS,KACxB,kBAAC,GAAD;IAAO,UAAS;IAAU,IAAI,EAAE,IAAI,IAAI;cAAxC;KACG,EAAU,SAAS,EAAgB,QAAQ,EAAI;KAAG;KAClD,EAAU,MAAM,EAAgB,MAAM;KAAE;;KACb;KAAkB;KAC7C,EAAgB,WAAW,IAAI,OAAO;KAAO;IACzC;;GAGT,kBAAC,GAAD;IAAO,SAAS;cACb,EAAM,WAAW,IAChB,kBAAC,GAAD;KAAO,UAAS;eAAO;IAEhB,CAAA,IAEP,EAAM,KAAK,GAAM,MACf,kBAAC,GAAD;KAEQ;KACN,WAAW;KACX,SAAS,MAAY;KACrB,QAAQ,MAAY,EAAM,SAAS;KAChB;KACP;KACI;KAChB,iBAAiB,MAAY;KAC7B,WAAU,MAAS,EAAiB,GAAS,CAAK;KAClD,cAAa,MAAe,EAAY,GAAa,EAAK,KAAK;KAC/D,gBAAgB,EAAe,GAAS,EAAE;KAC1C,kBAAkB,EAAe,GAAS,CAAC;KAC3C,gBAAgB,EAAiB,CAAO;IACzC,GAdM,EAAK,KAcX,CACF;GAEE,CAAA;EACF;;AAEX"}
|
|
@@ -18,7 +18,7 @@ import { useSaveFormTemplate as p } from "./useSaveFormTemplate.js";
|
|
|
18
18
|
import { useMemo as m, useState as h } from "react";
|
|
19
19
|
import { Accordion as g, AccordionDetails as _, AccordionSummary as ae, Alert as oe, Box as v, Button as y, Divider as b, Grid as x, Paper as S, TextField as C, Typography as w } from "@mui/material";
|
|
20
20
|
import { jsx as T, jsxs as E } from "react/jsx-runtime";
|
|
21
|
-
import
|
|
21
|
+
import D from "@mui/icons-material/ExpandMore";
|
|
22
22
|
import { DragDropProvider as O, DragOverlay as k } from "@dnd-kit/react";
|
|
23
23
|
//#region src/components/FormTemplateEditor/FormTemplateEditorForm.tsx
|
|
24
24
|
function A({ initialTemplate: A, initialJsonSchema: j, onSaved: M, onCancel: N }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormTemplateEditorForm.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FormTemplateEditorForm.tsx"],"sourcesContent":["/*\n * Editing UI for a FormTemplate draft: composes the pure `useFormTemplateDraft` state with save\n * orchestration (`useSaveFormTemplate`) and client-side validation. Receives already-resolved\n * initial data — the caller (`FormTemplateEditor`)\n * owns fetching, so this component never renders a loading state.\n */\nimport { DragDropProvider, DragOverlay } from '@dnd-kit/react'\nimport { FormTemplate } from '@sage-bionetworks/synapse-client'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Alert,\n Box,\n Button,\n Divider,\n Grid,\n Paper,\n TextField,\n Typography,\n} from '@mui/material'\nimport { ExpandMore as ExpandMoreIcon } from '@mui/icons-material'\nimport { RJSFSchema } from '@rjsf/utils'\nimport { useMemo, useState } from 'react'\nimport { displayToast } from '@/components/ToastMessage'\nimport {\n propertyKeyToPointer,\n resolveSchemaPropertyAtPointer,\n} from '@/utils/jsonschema/submissionContext'\nimport { FieldDefinitionDrawer } from './FieldDefinitionDrawer'\nimport { FieldValidationErrorAlert } from './FieldValidationErrorAlert'\nimport { FieldLibrary } from './FieldLibrary'\nimport { FIELD_DRAG_TYPE, readFieldDragData } from './sortableIds'\nimport { FormStructurePanel } from './FormStructurePanel'\nimport { FormTemplatePreview } from './FormTemplatePreview'\nimport { JsonSchemaBodyEditor } from './JsonSchemaBodyEditor'\nimport { detectFieldType, fieldTypeLabel } from './schemaFieldUtils'\nimport {\n formatSchema$id,\n resolveFormTemplateSchemaName,\n} from './formTemplateSchema'\nimport { toFormTemplateSteps } from './utils'\nimport {\n FormTemplateFieldValidationError,\n validateFormTemplateFields,\n} from './formTemplateValidation'\nimport { useFormTemplateDraft } from './useFormTemplateDraft'\nimport { useFormTemplateDrag } from './useFormTemplateDrag'\nimport { useSaveFormTemplate } from './useSaveFormTemplate'\n\nexport type FormTemplateEditorFormProps = {\n /** Existing template to edit, or undefined for creating a new one. */\n initialTemplate?: FormTemplate\n /**\n * The JSON Schema body the template's `schema$id` resolves to. Required when editing an\n * existing template.\n */\n initialJsonSchema?: RJSFSchema\n onSaved?: (template: FormTemplate) => void\n onCancel?: () => void\n}\n\nexport function FormTemplateEditorForm({\n initialTemplate,\n initialJsonSchema,\n onSaved,\n onCancel,\n}: FormTemplateEditorFormProps) {\n const draft = useFormTemplateDraft(initialTemplate, initialJsonSchema)\n const {\n name,\n setName,\n jsonSchema,\n setJsonSchema,\n steps,\n setSteps,\n editingPropertyKey,\n setEditingPropertyKey,\n usedPaths,\n existingPropertyKeys,\n unboundProperties,\n handleCreateField,\n renamePropertyKey,\n handleUpdateProperty,\n handleReplaceProperty,\n handleChangeRequired,\n handleChangeContext,\n handleRemoveProperty,\n bindField,\n previewTemplate,\n } = draft\n const dragHandlers = useFormTemplateDrag(draft)\n\n const { mutateAsync: save, isPending: isSaving } = useSaveFormTemplate()\n const [saveError, setSaveError] = useState<\n FormTemplateFieldValidationError[] | null\n >(null)\n\n const validationErrors = useMemo(\n () => validateFormTemplateFields(toFormTemplateSteps(steps), jsonSchema),\n [steps, jsonSchema],\n )\n\n const handleSave = async () => {\n setSaveError(null)\n try {\n const result = await save({\n initialTemplate,\n initialJsonSchema,\n name,\n jsonSchema,\n steps,\n })\n if (!result.ok) {\n setSaveError(result.validationErrors)\n return\n }\n displayToast(\n initialTemplate\n ? 'Your changes were saved as a new version.'\n : 'The form template was created.',\n 'success',\n { title: 'Template saved' },\n )\n onSaved?.(result.template)\n } catch (error) {\n const clientError = error as SynapseClientError\n if (clientError.status === 412) {\n displayToast(\n 'This template was changed by someone else since you opened it. Reload it to see the latest version, then reapply your changes.',\n 'warning',\n { title: 'Template updated since you started editing' },\n )\n } else {\n displayToast(\n clientError.reason ?? 'An error occurred while saving.',\n 'danger',\n { title: 'Could not save template' },\n )\n }\n }\n }\n\n const editingResolved =\n editingPropertyKey !== null\n ? resolveSchemaPropertyAtPointer(\n jsonSchema,\n propertyKeyToPointer(editingPropertyKey),\n )\n : undefined\n const editingProperty: RJSFSchema | null = editingResolved?.subSchema ?? null\n const editingIsRequired = editingResolved?.isRequired ?? false\n const editingContext = editingResolved?.context ?? 'ALWAYS'\n const editingIsUsedInSteps =\n editingPropertyKey !== null &&\n usedPaths.has(propertyKeyToPointer(editingPropertyKey))\n\n const templateSchemaName = resolveFormTemplateSchemaName(\n name,\n initialTemplate?.schema$id,\n )\n\n return (\n <DragDropProvider {...dragHandlers}>\n <Paper sx={{ p: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n {initialTemplate ? 'Edit Form Template' : 'Create Form Template'}\n </Typography>\n\n <Divider sx={{ mb: 2 }} />\n\n <TextField\n label=\"Internal Name\"\n value={name}\n onChange={e => setName(e.target.value)}\n size=\"small\"\n fullWidth\n helperText=\"Used by ACT to identify and find this template. Not shown to requesters.\"\n sx={{ mb: 1 }}\n />\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n component=\"p\"\n sx={{ mb: 3 }}\n >\n JSON Schema:{' '}\n {initialTemplate?.schema$id ?? formatSchema$id(templateSchemaName)}\n {!initialTemplate && ' (a new version is registered when saved)'}\n </Typography>\n\n <Grid container spacing={2} alignItems=\"stretch\">\n <Grid size={{ xs: 12, md: 4 }}>\n <FieldLibrary\n jsonSchema={jsonSchema}\n usedPaths={usedPaths}\n selectedPropertyKey={editingPropertyKey}\n onSelectField={setEditingPropertyKey}\n onCreateField={handleCreateField}\n />\n </Grid>\n <Grid size={{ xs: 12, md: 4 }}>\n <FormStructurePanel\n steps={steps}\n jsonSchema={jsonSchema}\n unboundProperties={unboundProperties}\n formTemplateId={initialTemplate?.id}\n onStepsChange={setSteps}\n onBindField={bindField}\n />\n </Grid>\n <Grid size={{ xs: 12, md: 4 }}>\n <Box sx={{ position: 'sticky', top: 16 }}>\n <Typography\n variant=\"subtitle2\"\n color=\"text.secondary\"\n gutterBottom\n >\n Live Preview\n </Typography>\n <FormTemplatePreview\n template={previewTemplate}\n jsonSchema={jsonSchema}\n />\n </Box>\n </Grid>\n </Grid>\n\n <Accordion\n sx={{ mt: 3 }}\n disableGutters\n elevation={0}\n variant=\"outlined\"\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant=\"subtitle2\">\n Advanced: Edit raw JSON Schema\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Alert severity=\"info\" variant=\"outlined\" sx={{ mb: 2 }}>\n Direct access to the JSON Schema body. Most editing happens in the\n Fields panel above — use this view for features the simple editor\n doesn't support (nested objects, advanced validation, etc.).\n </Alert>\n <JsonSchemaBodyEditor value={jsonSchema} onChange={setJsonSchema} />\n </AccordionDetails>\n </Accordion>\n\n {validationErrors.length > 0 && (\n <FieldValidationErrorAlert errors={validationErrors}>\n Fix the following before saving:\n </FieldValidationErrorAlert>\n )}\n\n {saveError && <FieldValidationErrorAlert errors={saveError} />}\n\n <Divider sx={{ my: 2 }} />\n\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', gap: 1 }}>\n {onCancel && (\n <Button variant=\"outlined\" onClick={onCancel} disabled={isSaving}>\n Cancel\n </Button>\n )}\n <Button\n variant=\"contained\"\n onClick={() => void handleSave()}\n disabled={!name || isSaving || validationErrors.length > 0}\n >\n {isSaving\n ? 'Saving…'\n : initialTemplate\n ? 'Save Changes'\n : 'Create Template'}\n </Button>\n </Box>\n\n <FieldDefinitionDrawer\n open={editingPropertyKey !== null}\n propertyKey={editingPropertyKey}\n existingKeys={existingPropertyKeys}\n property={editingProperty}\n isRequired={editingIsRequired}\n context={editingContext}\n isUsedInSteps={editingIsUsedInSteps}\n onClose={() => setEditingPropertyKey(null)}\n onUpdate={patch => {\n if (editingPropertyKey)\n handleUpdateProperty(editingPropertyKey, patch)\n }}\n onRenameKey={newKey => {\n if (editingPropertyKey)\n renamePropertyKey(editingPropertyKey, newKey)\n }}\n onReplace={next => {\n if (editingPropertyKey)\n handleReplaceProperty(editingPropertyKey, next)\n }}\n onChangeRequired={isReq => {\n if (editingPropertyKey)\n handleChangeRequired(editingPropertyKey, isReq)\n }}\n onChangeContext={context => {\n if (editingPropertyKey)\n handleChangeContext(editingPropertyKey, context)\n }}\n onRemove={() => {\n if (editingPropertyKey) handleRemoveProperty(editingPropertyKey)\n }}\n />\n </Paper>\n\n <DragOverlay>\n {source => {\n if (source.type !== FIELD_DRAG_TYPE) return null\n const propertyKey = readFieldDragData(source.data)\n if (!propertyKey) return null\n const property = resolveSchemaPropertyAtPointer(\n jsonSchema,\n propertyKeyToPointer(propertyKey),\n )?.subSchema\n if (!property) return null\n return (\n <Paper\n elevation={6}\n sx={{ p: 1.25, cursor: 'grabbing', opacity: 0.95 }}\n >\n <Typography variant=\"body2\" fontWeight={500}>\n {property.title || propertyKey}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {fieldTypeLabel(detectFieldType(property))}\n </Typography>\n </Paper>\n )\n }}\n </DragOverlay>\n </DragDropProvider>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FormTemplateEditorForm.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FormTemplateEditorForm.tsx"],"sourcesContent":["/*\n * Editing UI for a FormTemplate draft: composes the pure `useFormTemplateDraft` state with save\n * orchestration (`useSaveFormTemplate`) and client-side validation. Receives already-resolved\n * initial data — the caller (`FormTemplateEditor`)\n * owns fetching, so this component never renders a loading state.\n */\nimport { DragDropProvider, DragOverlay } from '@dnd-kit/react'\nimport { FormTemplate } from '@sage-bionetworks/synapse-client'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Alert,\n Box,\n Button,\n Divider,\n Grid,\n Paper,\n TextField,\n Typography,\n} from '@mui/material'\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\nimport { RJSFSchema } from '@rjsf/utils'\nimport { useMemo, useState } from 'react'\nimport { displayToast } from '@/components/ToastMessage'\nimport {\n propertyKeyToPointer,\n resolveSchemaPropertyAtPointer,\n} from '@/utils/jsonschema/submissionContext'\nimport { FieldDefinitionDrawer } from './FieldDefinitionDrawer'\nimport { FieldValidationErrorAlert } from './FieldValidationErrorAlert'\nimport { FieldLibrary } from './FieldLibrary'\nimport { FIELD_DRAG_TYPE, readFieldDragData } from './sortableIds'\nimport { FormStructurePanel } from './FormStructurePanel'\nimport { FormTemplatePreview } from './FormTemplatePreview'\nimport { JsonSchemaBodyEditor } from './JsonSchemaBodyEditor'\nimport { detectFieldType, fieldTypeLabel } from './schemaFieldUtils'\nimport {\n formatSchema$id,\n resolveFormTemplateSchemaName,\n} from './formTemplateSchema'\nimport { toFormTemplateSteps } from './utils'\nimport {\n FormTemplateFieldValidationError,\n validateFormTemplateFields,\n} from './formTemplateValidation'\nimport { useFormTemplateDraft } from './useFormTemplateDraft'\nimport { useFormTemplateDrag } from './useFormTemplateDrag'\nimport { useSaveFormTemplate } from './useSaveFormTemplate'\n\nexport type FormTemplateEditorFormProps = {\n /** Existing template to edit, or undefined for creating a new one. */\n initialTemplate?: FormTemplate\n /**\n * The JSON Schema body the template's `schema$id` resolves to. Required when editing an\n * existing template.\n */\n initialJsonSchema?: RJSFSchema\n onSaved?: (template: FormTemplate) => void\n onCancel?: () => void\n}\n\nexport function FormTemplateEditorForm({\n initialTemplate,\n initialJsonSchema,\n onSaved,\n onCancel,\n}: FormTemplateEditorFormProps) {\n const draft = useFormTemplateDraft(initialTemplate, initialJsonSchema)\n const {\n name,\n setName,\n jsonSchema,\n setJsonSchema,\n steps,\n setSteps,\n editingPropertyKey,\n setEditingPropertyKey,\n usedPaths,\n existingPropertyKeys,\n unboundProperties,\n handleCreateField,\n renamePropertyKey,\n handleUpdateProperty,\n handleReplaceProperty,\n handleChangeRequired,\n handleChangeContext,\n handleRemoveProperty,\n bindField,\n previewTemplate,\n } = draft\n const dragHandlers = useFormTemplateDrag(draft)\n\n const { mutateAsync: save, isPending: isSaving } = useSaveFormTemplate()\n const [saveError, setSaveError] = useState<\n FormTemplateFieldValidationError[] | null\n >(null)\n\n const validationErrors = useMemo(\n () => validateFormTemplateFields(toFormTemplateSteps(steps), jsonSchema),\n [steps, jsonSchema],\n )\n\n const handleSave = async () => {\n setSaveError(null)\n try {\n const result = await save({\n initialTemplate,\n initialJsonSchema,\n name,\n jsonSchema,\n steps,\n })\n if (!result.ok) {\n setSaveError(result.validationErrors)\n return\n }\n displayToast(\n initialTemplate\n ? 'Your changes were saved as a new version.'\n : 'The form template was created.',\n 'success',\n { title: 'Template saved' },\n )\n onSaved?.(result.template)\n } catch (error) {\n const clientError = error as SynapseClientError\n if (clientError.status === 412) {\n displayToast(\n 'This template was changed by someone else since you opened it. Reload it to see the latest version, then reapply your changes.',\n 'warning',\n { title: 'Template updated since you started editing' },\n )\n } else {\n displayToast(\n clientError.reason ?? 'An error occurred while saving.',\n 'danger',\n { title: 'Could not save template' },\n )\n }\n }\n }\n\n const editingResolved =\n editingPropertyKey !== null\n ? resolveSchemaPropertyAtPointer(\n jsonSchema,\n propertyKeyToPointer(editingPropertyKey),\n )\n : undefined\n const editingProperty: RJSFSchema | null = editingResolved?.subSchema ?? null\n const editingIsRequired = editingResolved?.isRequired ?? false\n const editingContext = editingResolved?.context ?? 'ALWAYS'\n const editingIsUsedInSteps =\n editingPropertyKey !== null &&\n usedPaths.has(propertyKeyToPointer(editingPropertyKey))\n\n const templateSchemaName = resolveFormTemplateSchemaName(\n name,\n initialTemplate?.schema$id,\n )\n\n return (\n <DragDropProvider {...dragHandlers}>\n <Paper sx={{ p: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n {initialTemplate ? 'Edit Form Template' : 'Create Form Template'}\n </Typography>\n\n <Divider sx={{ mb: 2 }} />\n\n <TextField\n label=\"Internal Name\"\n value={name}\n onChange={e => setName(e.target.value)}\n size=\"small\"\n fullWidth\n helperText=\"Used by ACT to identify and find this template. Not shown to requesters.\"\n sx={{ mb: 1 }}\n />\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n component=\"p\"\n sx={{ mb: 3 }}\n >\n JSON Schema:{' '}\n {initialTemplate?.schema$id ?? formatSchema$id(templateSchemaName)}\n {!initialTemplate && ' (a new version is registered when saved)'}\n </Typography>\n\n <Grid container spacing={2} alignItems=\"stretch\">\n <Grid size={{ xs: 12, md: 4 }}>\n <FieldLibrary\n jsonSchema={jsonSchema}\n usedPaths={usedPaths}\n selectedPropertyKey={editingPropertyKey}\n onSelectField={setEditingPropertyKey}\n onCreateField={handleCreateField}\n />\n </Grid>\n <Grid size={{ xs: 12, md: 4 }}>\n <FormStructurePanel\n steps={steps}\n jsonSchema={jsonSchema}\n unboundProperties={unboundProperties}\n formTemplateId={initialTemplate?.id}\n onStepsChange={setSteps}\n onBindField={bindField}\n />\n </Grid>\n <Grid size={{ xs: 12, md: 4 }}>\n <Box sx={{ position: 'sticky', top: 16 }}>\n <Typography\n variant=\"subtitle2\"\n color=\"text.secondary\"\n gutterBottom\n >\n Live Preview\n </Typography>\n <FormTemplatePreview\n template={previewTemplate}\n jsonSchema={jsonSchema}\n />\n </Box>\n </Grid>\n </Grid>\n\n <Accordion\n sx={{ mt: 3 }}\n disableGutters\n elevation={0}\n variant=\"outlined\"\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant=\"subtitle2\">\n Advanced: Edit raw JSON Schema\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Alert severity=\"info\" variant=\"outlined\" sx={{ mb: 2 }}>\n Direct access to the JSON Schema body. Most editing happens in the\n Fields panel above — use this view for features the simple editor\n doesn't support (nested objects, advanced validation, etc.).\n </Alert>\n <JsonSchemaBodyEditor value={jsonSchema} onChange={setJsonSchema} />\n </AccordionDetails>\n </Accordion>\n\n {validationErrors.length > 0 && (\n <FieldValidationErrorAlert errors={validationErrors}>\n Fix the following before saving:\n </FieldValidationErrorAlert>\n )}\n\n {saveError && <FieldValidationErrorAlert errors={saveError} />}\n\n <Divider sx={{ my: 2 }} />\n\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', gap: 1 }}>\n {onCancel && (\n <Button variant=\"outlined\" onClick={onCancel} disabled={isSaving}>\n Cancel\n </Button>\n )}\n <Button\n variant=\"contained\"\n onClick={() => void handleSave()}\n disabled={!name || isSaving || validationErrors.length > 0}\n >\n {isSaving\n ? 'Saving…'\n : initialTemplate\n ? 'Save Changes'\n : 'Create Template'}\n </Button>\n </Box>\n\n <FieldDefinitionDrawer\n open={editingPropertyKey !== null}\n propertyKey={editingPropertyKey}\n existingKeys={existingPropertyKeys}\n property={editingProperty}\n isRequired={editingIsRequired}\n context={editingContext}\n isUsedInSteps={editingIsUsedInSteps}\n onClose={() => setEditingPropertyKey(null)}\n onUpdate={patch => {\n if (editingPropertyKey)\n handleUpdateProperty(editingPropertyKey, patch)\n }}\n onRenameKey={newKey => {\n if (editingPropertyKey)\n renamePropertyKey(editingPropertyKey, newKey)\n }}\n onReplace={next => {\n if (editingPropertyKey)\n handleReplaceProperty(editingPropertyKey, next)\n }}\n onChangeRequired={isReq => {\n if (editingPropertyKey)\n handleChangeRequired(editingPropertyKey, isReq)\n }}\n onChangeContext={context => {\n if (editingPropertyKey)\n handleChangeContext(editingPropertyKey, context)\n }}\n onRemove={() => {\n if (editingPropertyKey) handleRemoveProperty(editingPropertyKey)\n }}\n />\n </Paper>\n\n <DragOverlay>\n {source => {\n if (source.type !== FIELD_DRAG_TYPE) return null\n const propertyKey = readFieldDragData(source.data)\n if (!propertyKey) return null\n const property = resolveSchemaPropertyAtPointer(\n jsonSchema,\n propertyKeyToPointer(propertyKey),\n )?.subSchema\n if (!property) return null\n return (\n <Paper\n elevation={6}\n sx={{ p: 1.25, cursor: 'grabbing', opacity: 0.95 }}\n >\n <Typography variant=\"body2\" fontWeight={500}>\n {property.title || propertyKey}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {fieldTypeLabel(detectFieldType(property))}\n </Typography>\n </Paper>\n )\n }}\n </DragOverlay>\n </DragDropProvider>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepCard.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/StepCard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,gBAAgB,EACjB,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"StepCard.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/StepCard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,gBAAgB,EACjB,MAAM,kCAAkC,CAAA;AAiBzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,EAGL,sBAAsB,EAEvB,MAAM,sCAAsC,CAAA;AAa7C,OAAO,EAAoB,wBAAwB,EAAY,MAAM,SAAS,CAAA;AAS9E,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,wBAAwB,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,4DAA4D;IAC5D,iBAAiB,EAAE,sBAAsB,EAAE,CAAA;IAC3C,0EAA0E;IAC1E,UAAU,EAAE,UAAU,CAAA;IACtB,iGAAiG;IACjG,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,wDAAwD;IACxD,eAAe,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;IACpD,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,OAAO,EACP,MAAM,EACN,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,eAAe,EACf,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,EAAE,aAAa,2CAoNf"}
|
|
@@ -8,9 +8,14 @@ import { BIND_FIELD_LABEL as m } from "./utils.js";
|
|
|
8
8
|
import { useState as h } from "react";
|
|
9
9
|
import { Box as g, Collapse as _, IconButton as v, MenuItem as y, Paper as b, Stack as ee, TextField as x, Typography as S } from "@mui/material";
|
|
10
10
|
import { jsx as C, jsxs as w } from "react/jsx-runtime";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
11
|
+
import T from "pluralize";
|
|
12
|
+
import E from "@mui/icons-material/ExpandLess";
|
|
13
|
+
import D from "@mui/icons-material/ExpandMore";
|
|
14
|
+
import O from "@mui/icons-material/ArrowDownward";
|
|
15
|
+
import k from "@mui/icons-material/ArrowUpward";
|
|
16
|
+
import A from "@mui/icons-material/Delete";
|
|
17
|
+
import { useDroppable as j } from "@dnd-kit/react";
|
|
18
|
+
import M from "@mui/icons-material/DragIndicator";
|
|
14
19
|
import { useSortable as N } from "@dnd-kit/react/sortable";
|
|
15
20
|
//#region src/components/FormTemplateEditor/StepCard.tsx
|
|
16
21
|
var P = 1;
|
|
@@ -21,7 +26,7 @@ function F({ step: F, stepIndex: I, isFirst: te, isLast: L, unboundProperties: R
|
|
|
21
26
|
group: s,
|
|
22
27
|
type: c,
|
|
23
28
|
accept: [c, a]
|
|
24
|
-
}), { ref: ne, isDropTarget: re } =
|
|
29
|
+
}), { ref: ne, isDropTarget: re } = j({
|
|
25
30
|
id: l(F),
|
|
26
31
|
accept: o,
|
|
27
32
|
collisionPriority: P
|
|
@@ -34,7 +39,7 @@ function F({ step: F, stepIndex: I, isFirst: te, isLast: L, unboundProperties: R
|
|
|
34
39
|
H({ fields: e(F.fields, t, n) });
|
|
35
40
|
}, ae = (e) => {
|
|
36
41
|
H({ fields: F.fields.filter((t, n) => n !== e) });
|
|
37
|
-
}, oe =
|
|
42
|
+
}, oe = T("field", F.fields.length, !0);
|
|
38
43
|
return /* @__PURE__ */ w(b, {
|
|
39
44
|
ref: Y,
|
|
40
45
|
variant: "outlined",
|
|
@@ -56,13 +61,13 @@ function F({ step: F, stepIndex: I, isFirst: te, isLast: L, unboundProperties: R
|
|
|
56
61
|
"aria-label": "Drag to reorder step",
|
|
57
62
|
className: i.dragHandle,
|
|
58
63
|
sx: { color: "text.secondary" },
|
|
59
|
-
children: /* @__PURE__ */ C(
|
|
64
|
+
children: /* @__PURE__ */ C(M, { fontSize: "small" })
|
|
60
65
|
}),
|
|
61
66
|
/* @__PURE__ */ C(v, {
|
|
62
67
|
size: "small",
|
|
63
68
|
onClick: () => J((e) => !e),
|
|
64
69
|
"aria-label": q ? "Collapse step" : "Expand step",
|
|
65
|
-
children: C(q ?
|
|
70
|
+
children: C(q ? E : D, { fontSize: "small" })
|
|
66
71
|
}),
|
|
67
72
|
/* @__PURE__ */ w(g, {
|
|
68
73
|
sx: {
|
|
@@ -90,20 +95,20 @@ function F({ step: F, stepIndex: I, isFirst: te, isLast: L, unboundProperties: R
|
|
|
90
95
|
disabled: te,
|
|
91
96
|
onClick: W,
|
|
92
97
|
"aria-label": "Move step up",
|
|
93
|
-
children: /* @__PURE__ */ C(
|
|
98
|
+
children: /* @__PURE__ */ C(k, { fontSize: "small" })
|
|
94
99
|
}),
|
|
95
100
|
/* @__PURE__ */ C(v, {
|
|
96
101
|
size: "small",
|
|
97
102
|
disabled: L,
|
|
98
103
|
onClick: G,
|
|
99
104
|
"aria-label": "Move step down",
|
|
100
|
-
children: /* @__PURE__ */ C(
|
|
105
|
+
children: /* @__PURE__ */ C(O, { fontSize: "small" })
|
|
101
106
|
}),
|
|
102
107
|
/* @__PURE__ */ C(v, {
|
|
103
108
|
size: "small",
|
|
104
109
|
onClick: K,
|
|
105
110
|
"aria-label": "Remove step",
|
|
106
|
-
children: /* @__PURE__ */ C(
|
|
111
|
+
children: /* @__PURE__ */ C(A, { fontSize: "small" })
|
|
107
112
|
})
|
|
108
113
|
]
|
|
109
114
|
}), /* @__PURE__ */ C(_, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepCard.js","names":[],"sources":["../../../src/components/FormTemplateEditor/StepCard.tsx"],"sourcesContent":["import { useDroppable } from '@dnd-kit/react'\nimport { useSortable } from '@dnd-kit/react/sortable'\nimport {\n FormTemplateField,\n FormTemplateStep,\n} from '@sage-bionetworks/synapse-client'\nimport {\n Box,\n Collapse,\n IconButton,\n MenuItem,\n Paper,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport {\n ArrowDownward as DownIcon,\n Delete as DeleteIcon,\n DragIndicator as DragHandleIcon,\n ExpandLess as ExpandLessIcon,\n ExpandMore as ExpandMoreIcon,\n ArrowUpward as UpIcon,\n} from '@mui/icons-material'\nimport { RJSFSchema } from '@rjsf/utils'\nimport pluralize from 'pluralize'\nimport { useState } from 'react'\nimport {\n pointerToPropertyKey,\n propertyKeyToPointer,\n ResolvedSchemaProperty,\n resolveSchemaPropertyAtPointer,\n} from '@/utils/jsonschema/submissionContext'\nimport dragHandleStyles from './dragHandle.module.scss'\nimport dropTargetStyles from './dropTarget.module.scss'\nimport { StepFieldRow } from './StepFieldRow'\nimport {\n FIELD_DRAG_TYPE,\n slotGroupId,\n SLOT_SORTABLE_TYPE,\n slotSortableId,\n stepSortableId,\n STEP_SORTABLE_GROUP,\n STEP_SORTABLE_TYPE,\n} from './sortableIds'\nimport { BIND_FIELD_LABEL, EditableFormTemplateStep, moveItem } from './utils'\n\n/**\n * The slot list must lose to the slot rows inside it so that dragging over a populated step\n * targets a row (which resolves to a precise insertion index) and only an empty or below-the-last-\n * row region falls through to the list itself.\n */\nconst SLOT_LIST_COLLISION_PRIORITY = 1\n\nexport type StepCardProps = {\n step: EditableFormTemplateStep\n stepIndex: number\n isFirst: boolean\n isLast: boolean\n /** Properties not yet bound to any step in the template. */\n unboundProperties: ResolvedSchemaProperty[]\n /** The full JSON Schema, used to resolve display labels for slot rows. */\n jsonSchema: RJSFSchema\n /** The FormTemplate's id, if it has been saved. Threaded down to file-field template uploads. */\n formTemplateId: string | undefined\n /** If true, render expanded by default (first step). */\n defaultExpanded: boolean\n onChange: (patch: Partial<FormTemplateStep>) => void\n onBindField: (propertyKey: string) => void\n onMoveUp: () => void\n onMoveDown: () => void\n onRemove: () => void\n}\n\nexport function StepCard({\n step,\n stepIndex,\n isFirst,\n isLast,\n unboundProperties,\n jsonSchema,\n formTemplateId,\n defaultExpanded,\n onChange,\n onBindField,\n onMoveUp,\n onMoveDown,\n onRemove,\n}: StepCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded)\n\n // Step is sortable within its group, and also accepts field drops to bind.\n const { ref, handleRef, isDragging, isDropTarget } = useSortable({\n id: stepSortableId(step),\n index: stepIndex,\n group: STEP_SORTABLE_GROUP,\n type: STEP_SORTABLE_TYPE,\n accept: [STEP_SORTABLE_TYPE, FIELD_DRAG_TYPE],\n })\n\n // The slot list is the drop target for slots dragged in from another step, which is the only\n // way to reach a step whose list is empty and therefore has no slot rows to target.\n const { ref: slotListRef, isDropTarget: isSlotDropTarget } = useDroppable({\n id: slotGroupId(step),\n accept: SLOT_SORTABLE_TYPE,\n collisionPriority: SLOT_LIST_COLLISION_PRIORITY,\n })\n\n const handleFieldChange = (\n fieldIdx: number,\n patch: Partial<FormTemplateField>,\n ) => {\n onChange({\n fields: step.fields.map((f, i) =>\n i === fieldIdx ? { ...f, ...patch } : f,\n ),\n })\n }\n\n const handleFieldMove = (fieldIdx: number, direction: -1 | 1) => {\n onChange({ fields: moveItem(step.fields, fieldIdx, direction) })\n }\n\n const handleFieldRemove = (fieldIdx: number) => {\n onChange({ fields: step.fields.filter((_, i) => i !== fieldIdx) })\n }\n\n const fieldCountLabel = pluralize('field', step.fields.length, true)\n\n return (\n <Paper\n ref={ref}\n variant=\"outlined\"\n className={`${dropTargetStyles.dropTarget} ${dragHandleStyles.dragSource}`}\n data-drop-target={isDropTarget}\n data-dragging={isDragging}\n sx={{ p: 1.5 }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Box\n ref={handleRef}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Drag to reorder step\"\n className={dragHandleStyles.dragHandle}\n sx={{ color: 'text.secondary' }}\n >\n <DragHandleIcon fontSize=\"small\" />\n </Box>\n <IconButton\n size=\"small\"\n onClick={() => setExpanded(prev => !prev)}\n aria-label={expanded ? 'Collapse step' : 'Expand step'}\n >\n {expanded ? (\n <ExpandLessIcon fontSize=\"small\" />\n ) : (\n <ExpandMoreIcon fontSize=\"small\" />\n )}\n </IconButton>\n <Box sx={{ flexGrow: 1, minWidth: 0 }}>\n <Typography variant=\"body2\" fontWeight={500} noWrap>\n Step {stepIndex + 1}: {step.title || '(untitled)'}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {fieldCountLabel}\n </Typography>\n </Box>\n <IconButton\n size=\"small\"\n disabled={isFirst}\n onClick={onMoveUp}\n aria-label=\"Move step up\"\n >\n <UpIcon fontSize=\"small\" />\n </IconButton>\n <IconButton\n size=\"small\"\n disabled={isLast}\n onClick={onMoveDown}\n aria-label=\"Move step down\"\n >\n <DownIcon fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onRemove} aria-label=\"Remove step\">\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n\n <Collapse in={expanded} unmountOnExit>\n <Box sx={{ pt: 1.5 }}>\n <TextField\n label=\"Title\"\n value={step.title}\n onChange={e => onChange({ title: e.target.value })}\n size=\"small\"\n fullWidth\n sx={{ mb: 1 }}\n />\n <TextField\n label=\"Description\"\n value={step.description ?? ''}\n onChange={e => onChange({ description: e.target.value })}\n size=\"small\"\n multiline\n rows={2}\n fullWidth\n sx={{ mb: 1.5 }}\n />\n\n <Box\n ref={slotListRef}\n className={dropTargetStyles.dropTarget}\n data-drop-target={isSlotDropTarget}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n mb: 1,\n p: 0.5,\n borderRadius: 1,\n }}\n >\n {step.fields.length === 0 ? (\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{ p: 1 }}\n >\n Drag a field here, or bind one below.\n </Typography>\n ) : (\n step.fields.map((field, fieldIdx) => {\n const resolved = resolveSchemaPropertyAtPointer(\n jsonSchema,\n field.schemaPath,\n )\n return (\n <StepFieldRow\n key={field.schemaPath}\n sortableId={slotSortableId(field)}\n sortableIndex={fieldIdx}\n sortableGroup={slotGroupId(step)}\n field={field}\n resolvedProperty={resolved?.subSchema}\n context={resolved?.context ?? 'ALWAYS'}\n propertyKey={\n pointerToPropertyKey(field.schemaPath) ?? field.schemaPath\n }\n isFirst={fieldIdx === 0}\n isLast={fieldIdx === step.fields.length - 1}\n formTemplateId={formTemplateId}\n onChange={patch => handleFieldChange(fieldIdx, patch)}\n onMoveUp={() => handleFieldMove(fieldIdx, -1)}\n onMoveDown={() => handleFieldMove(fieldIdx, 1)}\n onRemove={() => handleFieldRemove(fieldIdx)}\n />\n )\n })\n )}\n </Box>\n\n <Stack spacing={1}>\n <TextField\n select\n size=\"small\"\n label={BIND_FIELD_LABEL}\n value=\"\"\n onChange={e => {\n if (e.target.value) onBindField(e.target.value)\n }}\n disabled={unboundProperties.length === 0}\n helperText={\n unboundProperties.length === 0\n ? 'All fields are bound to a step.'\n : 'Add a field from the library to this step.'\n }\n >\n {unboundProperties.length === 0 ? (\n <MenuItem value=\"\" disabled>\n All fields bound\n </MenuItem>\n ) : (\n unboundProperties.map(p => {\n const pointer = propertyKeyToPointer(p.propertyKey)\n return (\n <MenuItem key={p.propertyKey} value={p.propertyKey}>\n {p.subSchema.title\n ? `${p.subSchema.title} (${pointer})`\n : pointer}\n </MenuItem>\n )\n })\n )}\n </TextField>\n </Stack>\n </Box>\n </Collapse>\n </Paper>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StepCard.js","names":[],"sources":["../../../src/components/FormTemplateEditor/StepCard.tsx"],"sourcesContent":["import { useDroppable } from '@dnd-kit/react'\nimport { useSortable } from '@dnd-kit/react/sortable'\nimport {\n FormTemplateField,\n FormTemplateStep,\n} from '@sage-bionetworks/synapse-client'\nimport {\n Box,\n Collapse,\n IconButton,\n MenuItem,\n Paper,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport DownIcon from '@mui/icons-material/ArrowDownward'\nimport DeleteIcon from '@mui/icons-material/Delete'\nimport DragHandleIcon from '@mui/icons-material/DragIndicator'\nimport ExpandLessIcon from '@mui/icons-material/ExpandLess'\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\nimport UpIcon from '@mui/icons-material/ArrowUpward'\nimport { RJSFSchema } from '@rjsf/utils'\nimport pluralize from 'pluralize'\nimport { useState } from 'react'\nimport {\n pointerToPropertyKey,\n propertyKeyToPointer,\n ResolvedSchemaProperty,\n resolveSchemaPropertyAtPointer,\n} from '@/utils/jsonschema/submissionContext'\nimport dragHandleStyles from './dragHandle.module.scss'\nimport dropTargetStyles from './dropTarget.module.scss'\nimport { StepFieldRow } from './StepFieldRow'\nimport {\n FIELD_DRAG_TYPE,\n slotGroupId,\n SLOT_SORTABLE_TYPE,\n slotSortableId,\n stepSortableId,\n STEP_SORTABLE_GROUP,\n STEP_SORTABLE_TYPE,\n} from './sortableIds'\nimport { BIND_FIELD_LABEL, EditableFormTemplateStep, moveItem } from './utils'\n\n/**\n * The slot list must lose to the slot rows inside it so that dragging over a populated step\n * targets a row (which resolves to a precise insertion index) and only an empty or below-the-last-\n * row region falls through to the list itself.\n */\nconst SLOT_LIST_COLLISION_PRIORITY = 1\n\nexport type StepCardProps = {\n step: EditableFormTemplateStep\n stepIndex: number\n isFirst: boolean\n isLast: boolean\n /** Properties not yet bound to any step in the template. */\n unboundProperties: ResolvedSchemaProperty[]\n /** The full JSON Schema, used to resolve display labels for slot rows. */\n jsonSchema: RJSFSchema\n /** The FormTemplate's id, if it has been saved. Threaded down to file-field template uploads. */\n formTemplateId: string | undefined\n /** If true, render expanded by default (first step). */\n defaultExpanded: boolean\n onChange: (patch: Partial<FormTemplateStep>) => void\n onBindField: (propertyKey: string) => void\n onMoveUp: () => void\n onMoveDown: () => void\n onRemove: () => void\n}\n\nexport function StepCard({\n step,\n stepIndex,\n isFirst,\n isLast,\n unboundProperties,\n jsonSchema,\n formTemplateId,\n defaultExpanded,\n onChange,\n onBindField,\n onMoveUp,\n onMoveDown,\n onRemove,\n}: StepCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded)\n\n // Step is sortable within its group, and also accepts field drops to bind.\n const { ref, handleRef, isDragging, isDropTarget } = useSortable({\n id: stepSortableId(step),\n index: stepIndex,\n group: STEP_SORTABLE_GROUP,\n type: STEP_SORTABLE_TYPE,\n accept: [STEP_SORTABLE_TYPE, FIELD_DRAG_TYPE],\n })\n\n // The slot list is the drop target for slots dragged in from another step, which is the only\n // way to reach a step whose list is empty and therefore has no slot rows to target.\n const { ref: slotListRef, isDropTarget: isSlotDropTarget } = useDroppable({\n id: slotGroupId(step),\n accept: SLOT_SORTABLE_TYPE,\n collisionPriority: SLOT_LIST_COLLISION_PRIORITY,\n })\n\n const handleFieldChange = (\n fieldIdx: number,\n patch: Partial<FormTemplateField>,\n ) => {\n onChange({\n fields: step.fields.map((f, i) =>\n i === fieldIdx ? { ...f, ...patch } : f,\n ),\n })\n }\n\n const handleFieldMove = (fieldIdx: number, direction: -1 | 1) => {\n onChange({ fields: moveItem(step.fields, fieldIdx, direction) })\n }\n\n const handleFieldRemove = (fieldIdx: number) => {\n onChange({ fields: step.fields.filter((_, i) => i !== fieldIdx) })\n }\n\n const fieldCountLabel = pluralize('field', step.fields.length, true)\n\n return (\n <Paper\n ref={ref}\n variant=\"outlined\"\n className={`${dropTargetStyles.dropTarget} ${dragHandleStyles.dragSource}`}\n data-drop-target={isDropTarget}\n data-dragging={isDragging}\n sx={{ p: 1.5 }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Box\n ref={handleRef}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Drag to reorder step\"\n className={dragHandleStyles.dragHandle}\n sx={{ color: 'text.secondary' }}\n >\n <DragHandleIcon fontSize=\"small\" />\n </Box>\n <IconButton\n size=\"small\"\n onClick={() => setExpanded(prev => !prev)}\n aria-label={expanded ? 'Collapse step' : 'Expand step'}\n >\n {expanded ? (\n <ExpandLessIcon fontSize=\"small\" />\n ) : (\n <ExpandMoreIcon fontSize=\"small\" />\n )}\n </IconButton>\n <Box sx={{ flexGrow: 1, minWidth: 0 }}>\n <Typography variant=\"body2\" fontWeight={500} noWrap>\n Step {stepIndex + 1}: {step.title || '(untitled)'}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {fieldCountLabel}\n </Typography>\n </Box>\n <IconButton\n size=\"small\"\n disabled={isFirst}\n onClick={onMoveUp}\n aria-label=\"Move step up\"\n >\n <UpIcon fontSize=\"small\" />\n </IconButton>\n <IconButton\n size=\"small\"\n disabled={isLast}\n onClick={onMoveDown}\n aria-label=\"Move step down\"\n >\n <DownIcon fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onRemove} aria-label=\"Remove step\">\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n\n <Collapse in={expanded} unmountOnExit>\n <Box sx={{ pt: 1.5 }}>\n <TextField\n label=\"Title\"\n value={step.title}\n onChange={e => onChange({ title: e.target.value })}\n size=\"small\"\n fullWidth\n sx={{ mb: 1 }}\n />\n <TextField\n label=\"Description\"\n value={step.description ?? ''}\n onChange={e => onChange({ description: e.target.value })}\n size=\"small\"\n multiline\n rows={2}\n fullWidth\n sx={{ mb: 1.5 }}\n />\n\n <Box\n ref={slotListRef}\n className={dropTargetStyles.dropTarget}\n data-drop-target={isSlotDropTarget}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n mb: 1,\n p: 0.5,\n borderRadius: 1,\n }}\n >\n {step.fields.length === 0 ? (\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{ p: 1 }}\n >\n Drag a field here, or bind one below.\n </Typography>\n ) : (\n step.fields.map((field, fieldIdx) => {\n const resolved = resolveSchemaPropertyAtPointer(\n jsonSchema,\n field.schemaPath,\n )\n return (\n <StepFieldRow\n key={field.schemaPath}\n sortableId={slotSortableId(field)}\n sortableIndex={fieldIdx}\n sortableGroup={slotGroupId(step)}\n field={field}\n resolvedProperty={resolved?.subSchema}\n context={resolved?.context ?? 'ALWAYS'}\n propertyKey={\n pointerToPropertyKey(field.schemaPath) ?? field.schemaPath\n }\n isFirst={fieldIdx === 0}\n isLast={fieldIdx === step.fields.length - 1}\n formTemplateId={formTemplateId}\n onChange={patch => handleFieldChange(fieldIdx, patch)}\n onMoveUp={() => handleFieldMove(fieldIdx, -1)}\n onMoveDown={() => handleFieldMove(fieldIdx, 1)}\n onRemove={() => handleFieldRemove(fieldIdx)}\n />\n )\n })\n )}\n </Box>\n\n <Stack spacing={1}>\n <TextField\n select\n size=\"small\"\n label={BIND_FIELD_LABEL}\n value=\"\"\n onChange={e => {\n if (e.target.value) onBindField(e.target.value)\n }}\n disabled={unboundProperties.length === 0}\n helperText={\n unboundProperties.length === 0\n ? 'All fields are bound to a step.'\n : 'Add a field from the library to this step.'\n }\n >\n {unboundProperties.length === 0 ? (\n <MenuItem value=\"\" disabled>\n All fields bound\n </MenuItem>\n ) : (\n unboundProperties.map(p => {\n const pointer = propertyKeyToPointer(p.propertyKey)\n return (\n <MenuItem key={p.propertyKey} value={p.propertyKey}>\n {p.subSchema.title\n ? `${p.subSchema.title} (${pointer})`\n : pointer}\n </MenuItem>\n )\n })\n )}\n </TextField>\n </Stack>\n </Box>\n </Collapse>\n </Paper>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepFieldRow.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/StepFieldRow.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"StepFieldRow.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/StepFieldRow.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AAiBpE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EACL,qBAAqB,EAEtB,MAAM,sCAAsC,CAAA;AAM7C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAA;IAClB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAA;IACrB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,iBAAiB,CAAA;IACxB,qEAAqE;IACrE,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAA;IACxC;4DACwD;IACxD,OAAO,EAAE,qBAAqB,CAAA;IAC9B,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,6FAA6F;IAC7F,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;IACrD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,aAAa,EACb,aAAa,EACb,KAAK,EACL,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,OAAO,EACP,MAAM,EACN,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,EAAE,iBAAiB,2CA4HnB"}
|
|
@@ -6,7 +6,12 @@ import { TemplateFileHandleField as a } from "./TemplateFileHandleField.js";
|
|
|
6
6
|
import { useState as o } from "react";
|
|
7
7
|
import { Box as s, Checkbox as c, Collapse as l, FormControlLabel as u, IconButton as d, Paper as f, Stack as p, Typography as m } from "@mui/material";
|
|
8
8
|
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
9
|
-
import
|
|
9
|
+
import _ from "@mui/icons-material/ExpandLess";
|
|
10
|
+
import v from "@mui/icons-material/ExpandMore";
|
|
11
|
+
import y from "@mui/icons-material/ArrowDownward";
|
|
12
|
+
import b from "@mui/icons-material/ArrowUpward";
|
|
13
|
+
import x from "@mui/icons-material/Delete";
|
|
14
|
+
import S from "@mui/icons-material/DragIndicator";
|
|
10
15
|
import { useSortable as C } from "@dnd-kit/react/sortable";
|
|
11
16
|
//#region src/components/FormTemplateEditor/StepFieldRow.tsx
|
|
12
17
|
function w({ sortableId: w, sortableIndex: T, sortableGroup: E, field: D, resolvedProperty: O, context: k, propertyKey: A, isFirst: j, isLast: M, formTemplateId: N, onChange: P, onMoveUp: F, onMoveDown: I, onRemove: L }) {
|
|
@@ -45,13 +50,13 @@ function w({ sortableId: w, sortableIndex: T, sortableGroup: E, field: D, resolv
|
|
|
45
50
|
"aria-label": "Drag to reorder field",
|
|
46
51
|
className: r.dragHandle,
|
|
47
52
|
sx: { color: "text.secondary" },
|
|
48
|
-
children: /* @__PURE__ */ h(
|
|
53
|
+
children: /* @__PURE__ */ h(S, { fontSize: "small" })
|
|
49
54
|
}),
|
|
50
55
|
/* @__PURE__ */ h(d, {
|
|
51
56
|
size: "small",
|
|
52
57
|
onClick: () => z((e) => !e),
|
|
53
58
|
"aria-label": R ? "Collapse field" : "Expand field",
|
|
54
|
-
children: h(R ?
|
|
59
|
+
children: h(R ? _ : v, { fontSize: "small" })
|
|
55
60
|
}),
|
|
56
61
|
/* @__PURE__ */ g(s, {
|
|
57
62
|
sx: {
|
|
@@ -74,20 +79,20 @@ function w({ sortableId: w, sortableIndex: T, sortableGroup: E, field: D, resolv
|
|
|
74
79
|
disabled: j,
|
|
75
80
|
onClick: F,
|
|
76
81
|
"aria-label": "Move field up",
|
|
77
|
-
children: /* @__PURE__ */ h(
|
|
82
|
+
children: /* @__PURE__ */ h(b, { fontSize: "small" })
|
|
78
83
|
}),
|
|
79
84
|
/* @__PURE__ */ h(d, {
|
|
80
85
|
size: "small",
|
|
81
86
|
disabled: M,
|
|
82
87
|
onClick: I,
|
|
83
88
|
"aria-label": "Move field down",
|
|
84
|
-
children: /* @__PURE__ */ h(
|
|
89
|
+
children: /* @__PURE__ */ h(y, { fontSize: "small" })
|
|
85
90
|
}),
|
|
86
91
|
/* @__PURE__ */ h(d, {
|
|
87
92
|
size: "small",
|
|
88
93
|
onClick: L,
|
|
89
94
|
"aria-label": "Remove field from step",
|
|
90
|
-
children: /* @__PURE__ */ h(
|
|
95
|
+
children: /* @__PURE__ */ h(x, { fontSize: "small" })
|
|
91
96
|
})
|
|
92
97
|
]
|
|
93
98
|
}), /* @__PURE__ */ h(l, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepFieldRow.js","names":[],"sources":["../../../src/components/FormTemplateEditor/StepFieldRow.tsx"],"sourcesContent":["import { useSortable } from '@dnd-kit/react/sortable'\nimport { FormTemplateField } from '@sage-bionetworks/synapse-client'\nimport {\n Box,\n Checkbox,\n Collapse,\n FormControlLabel,\n IconButton,\n Paper,\n Stack,\n Typography,\n} from '@mui/material'\nimport
|
|
1
|
+
{"version":3,"file":"StepFieldRow.js","names":[],"sources":["../../../src/components/FormTemplateEditor/StepFieldRow.tsx"],"sourcesContent":["import { useSortable } from '@dnd-kit/react/sortable'\nimport { FormTemplateField } from '@sage-bionetworks/synapse-client'\nimport {\n Box,\n Checkbox,\n Collapse,\n FormControlLabel,\n IconButton,\n Paper,\n Stack,\n Typography,\n} from '@mui/material'\nimport DownIcon from '@mui/icons-material/ArrowDownward'\nimport DeleteIcon from '@mui/icons-material/Delete'\nimport DragHandleIcon from '@mui/icons-material/DragIndicator'\nimport ExpandLessIcon from '@mui/icons-material/ExpandLess'\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\nimport UpIcon from '@mui/icons-material/ArrowUpward'\nimport { RJSFSchema } from '@rjsf/utils'\nimport { useState } from 'react'\nimport {\n SchemaPropertyContext,\n submissionContextLabel,\n} from '@/utils/jsonschema/submissionContext'\nimport styles from './dragHandle.module.scss'\nimport { detectFieldType, fieldTypeLabel } from './schemaFieldUtils'\nimport { SLOT_SORTABLE_TYPE } from './sortableIds'\nimport { TemplateFileHandleField } from './TemplateFileHandleField'\n\nexport type StepFieldRowProps = {\n /** Sortable id assigned by parent: `slot:{stepIndex}:{fieldIndex}`. */\n sortableId: string\n /** Position within its step's fields array. */\n sortableIndex: number\n /** Sortable group; slots only reorder within the same step. */\n sortableGroup: string\n field: FormTemplateField\n /** The schema property this slot resolves to, if it still exists. */\n resolvedProperty: RJSFSchema | undefined\n /** Which submission context (per the schema's `x-synapse-submissionContext` convention)\n * gates this field, derived from `resolvedProperty`. */\n context: SchemaPropertyContext\n /** Underlying property key (the segment after `/` in `schemaPath`). */\n propertyKey: string\n isFirst: boolean\n isLast: boolean\n /** The FormTemplate's id, if it has been saved. Used to build the template file download. */\n formTemplateId: string | undefined\n onChange: (patch: Partial<FormTemplateField>) => void\n onMoveUp: () => void\n onMoveDown: () => void\n onRemove: () => void\n}\n\n/**\n * A slot row inside a step. Compact by default — shows the field's display\n * name. Expand to reveal slot-specific config: (for file fields) an\n * optional template file handle. Sortable within its parent step.\n */\nexport function StepFieldRow({\n sortableId,\n sortableIndex,\n sortableGroup,\n field,\n resolvedProperty,\n context,\n propertyKey,\n isFirst,\n isLast,\n formTemplateId,\n onChange,\n onMoveUp,\n onMoveDown,\n onRemove,\n}: StepFieldRowProps) {\n const [expanded, setExpanded] = useState(false)\n\n const { ref, handleRef, isDragging } = useSortable({\n id: sortableId,\n index: sortableIndex,\n group: sortableGroup,\n type: SLOT_SORTABLE_TYPE,\n accept: SLOT_SORTABLE_TYPE,\n })\n\n const type = resolvedProperty ? detectFieldType(resolvedProperty) : null\n const displayLabel = resolvedProperty?.title || propertyKey\n const isFileField = type === 'file'\n const isUnresolved = !resolvedProperty\n\n let caption = `Missing field: ${field.schemaPath}`\n if (!isUnresolved) {\n const captionParts = [fieldTypeLabel(type)]\n if (context !== 'ALWAYS') {\n captionParts.push(submissionContextLabel(context))\n }\n if (field.isPublic) {\n captionParts.push('Public')\n }\n caption = captionParts.join(' · ')\n }\n\n return (\n <Paper\n ref={ref}\n variant=\"outlined\"\n className={styles.dragSource}\n data-dragging={isDragging}\n sx={{\n p: 1,\n backgroundColor: 'action.hover',\n borderColor: isUnresolved ? 'error.main' : undefined,\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Box\n ref={handleRef}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Drag to reorder field\"\n className={styles.dragHandle}\n sx={{ color: 'text.secondary' }}\n >\n <DragHandleIcon fontSize=\"small\" />\n </Box>\n <IconButton\n size=\"small\"\n onClick={() => setExpanded(prev => !prev)}\n aria-label={expanded ? 'Collapse field' : 'Expand field'}\n >\n {expanded ? (\n <ExpandLessIcon fontSize=\"small\" />\n ) : (\n <ExpandMoreIcon fontSize=\"small\" />\n )}\n </IconButton>\n <Box sx={{ flexGrow: 1, minWidth: 0 }}>\n <Typography variant=\"body2\" noWrap title={displayLabel}>\n {displayLabel}\n </Typography>\n <Typography\n variant=\"caption\"\n color={isUnresolved ? 'error' : 'text.secondary'}\n >\n {caption}\n </Typography>\n </Box>\n <IconButton\n size=\"small\"\n disabled={isFirst}\n onClick={onMoveUp}\n aria-label=\"Move field up\"\n >\n <UpIcon fontSize=\"small\" />\n </IconButton>\n <IconButton\n size=\"small\"\n disabled={isLast}\n onClick={onMoveDown}\n aria-label=\"Move field down\"\n >\n <DownIcon fontSize=\"small\" />\n </IconButton>\n <IconButton\n size=\"small\"\n onClick={onRemove}\n aria-label=\"Remove field from step\"\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n\n <Collapse in={expanded} unmountOnExit>\n <Stack spacing={1} sx={{ pt: 1, pl: 4 }}>\n {isFileField && (\n <TemplateFileHandleField\n fileHandleId={field.templateFileHandleId}\n formTemplateId={formTemplateId}\n onChange={next => onChange({ templateFileHandleId: next })}\n />\n )}\n <FormControlLabel\n control={\n <Checkbox\n checked={field.isPublic ?? false}\n onChange={e => onChange({ isPublic: e.target.checked })}\n />\n }\n label=\"Publicly viewable after approval\"\n />\n <Typography variant=\"caption\" color=\"text.secondary\">\n Answers appear in this AR's public submission info once a submission\n is approved. Snapshotted at submit time.\n </Typography>\n </Stack>\n </Collapse>\n </Paper>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA2DA,SAAgB,EAAa,EAC3B,eACA,kBACA,kBACA,UACA,qBACA,YACA,gBACA,YACA,WACA,mBACA,aACA,aACA,eACA,eACoB;CACpB,IAAM,CAAC,GAAU,KAAe,EAAS,EAAK,GAExC,EAAE,QAAK,cAAW,kBAAe,EAAY;EACjD,IAAI;EACJ,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;CACV,CAAC,GAEK,IAAO,IAAmB,EAAgB,CAAgB,IAAI,MAC9D,IAAe,GAAkB,SAAS,GAC1C,IAAc,MAAS,QACvB,IAAe,CAAC,GAElB,IAAU,kBAAkB,EAAM;CACtC,IAAI,CAAC,GAAc;EACjB,IAAM,IAAe,CAAC,EAAe,CAAI,CAAC;EAO1C,AANI,MAAY,YACd,EAAa,KAAK,EAAuB,CAAO,CAAC,GAE/C,EAAM,YACR,EAAa,KAAK,QAAQ,GAE5B,IAAU,EAAa,KAAK,KAAK;CACnC;CAEA,OACE,kBAAC,GAAD;EACO;EACL,SAAQ;EACR,WAAW,EAAO;EAClB,iBAAe;EACf,IAAI;GACF,GAAG;GACH,iBAAiB;GACjB,aAAa,IAAe,eAAe,KAAA;EAC7C;YATF,CAWE,kBAAC,GAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,YAAY;IAAU,KAAK;GAAI;aAA3D;IACE,kBAAC,GAAD;KACE,KAAK;KACL,MAAK;KACL,UAAU;KACV,cAAW;KACX,WAAW,EAAO;KAClB,IAAI,EAAE,OAAO,iBAAiB;eAE9B,kBAAC,GAAD,EAAgB,UAAS,QAAS,CAAA;IAC/B,CAAA;IACL,kBAAC,GAAD;KACE,MAAK;KACL,eAAe,GAAY,MAAQ,CAAC,CAAI;KACxC,cAAY,IAAW,mBAAmB;eAGxC,EADD,IACE,IAEA,GAFD,EAAgB,UAAS,QAAS,CAEA;IAE1B,CAAA;IACZ,kBAAC,GAAD;KAAK,IAAI;MAAE,UAAU;MAAG,UAAU;KAAE;eAApC,CACE,kBAAC,GAAD;MAAY,SAAQ;MAAQ,QAAA;MAAO,OAAO;gBACvC;KACS,CAAA,GACZ,kBAAC,GAAD;MACE,SAAQ;MACR,OAAO,IAAe,UAAU;gBAE/B;KACS,CAAA,CACT;;IACL,kBAAC,GAAD;KACE,MAAK;KACL,UAAU;KACV,SAAS;KACT,cAAW;eAEX,kBAAC,GAAD,EAAQ,UAAS,QAAS,CAAA;IAChB,CAAA;IACZ,kBAAC,GAAD;KACE,MAAK;KACL,UAAU;KACV,SAAS;KACT,cAAW;eAEX,kBAAC,GAAD,EAAU,UAAS,QAAS,CAAA;IAClB,CAAA;IACZ,kBAAC,GAAD;KACE,MAAK;KACL,SAAS;KACT,cAAW;eAEX,kBAAC,GAAD,EAAY,UAAS,QAAS,CAAA;IACpB,CAAA;GACT;MAEL,kBAAC,GAAD;GAAU,IAAI;GAAU,eAAA;aACtB,kBAAC,GAAD;IAAO,SAAS;IAAG,IAAI;KAAE,IAAI;KAAG,IAAI;IAAE;cAAtC;KACG,KACC,kBAAC,GAAD;MACE,cAAc,EAAM;MACJ;MAChB,WAAU,MAAQ,EAAS,EAAE,sBAAsB,EAAK,CAAC;KAC1D,CAAA;KAEH,kBAAC,GAAD;MACE,SACE,kBAAC,GAAD;OACE,SAAS,EAAM,YAAY;OAC3B,WAAU,MAAK,EAAS,EAAE,UAAU,EAAE,OAAO,QAAQ,CAAC;MACvD,CAAA;MAEH,OAAM;KACP,CAAA;KACD,kBAAC,GAAD;MAAY,SAAQ;MAAU,OAAM;gBAAiB;KAGzC,CAAA;IACP;;EACC,CAAA,CACL;;AAEX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateFileHandleField.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/TemplateFileHandleField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TemplateFileHandleField.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/TemplateFileHandleField.tsx"],"names":[],"mappings":"AAsBA,MAAM,MAAM,4BAA4B,GAAG;IACzC,6DAA6D;IAC7D,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC;;;;OAIG;IACH,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;CACrD,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,cAAc,EACd,QAAQ,GACT,EAAE,4BAA4B,2CA+F9B"}
|
|
@@ -5,7 +5,8 @@ import { useMemo as r, useRef as i, useState as a } from "react";
|
|
|
5
5
|
import { Alert as o, Box as s, Button as c, IconButton as l, Stack as u, Typography as d } from "@mui/material";
|
|
6
6
|
import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
7
7
|
import { FileHandleAssociateType as h } from "@sage-bionetworks/synapse-types";
|
|
8
|
-
import
|
|
8
|
+
import g from "@mui/icons-material/Close";
|
|
9
|
+
import _ from "@mui/icons-material/UploadFile";
|
|
9
10
|
//#region src/components/FormTemplateEditor/TemplateFileHandleField.tsx
|
|
10
11
|
function v({ fileHandleId: v, formTemplateId: y, onChange: b }) {
|
|
11
12
|
let [x, S] = a(!1), [C, w] = a(null), T = i(null), E = r(() => v && y ? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateFileHandleField.js","names":[],"sources":["../../../src/components/FormTemplateEditor/TemplateFileHandleField.tsx"],"sourcesContent":["import { DialogBase } from '@/components/DialogBase'\nimport {\n BasicFileHandleUpload,\n FileUploadHandle,\n} from '@/components/file/upload/BasicFileHandleUpload'\nimport { FileHandleLink } from '@/components/widgets/FileHandleLink'\nimport
|
|
1
|
+
{"version":3,"file":"TemplateFileHandleField.js","names":[],"sources":["../../../src/components/FormTemplateEditor/TemplateFileHandleField.tsx"],"sourcesContent":["import { DialogBase } from '@/components/DialogBase'\nimport {\n BasicFileHandleUpload,\n FileUploadHandle,\n} from '@/components/file/upload/BasicFileHandleUpload'\nimport { FileHandleLink } from '@/components/widgets/FileHandleLink'\nimport RemoveIcon from '@mui/icons-material/Close'\nimport UploadIcon from '@mui/icons-material/UploadFile'\nimport {\n Alert,\n Box,\n Button,\n IconButton,\n Stack,\n Typography,\n} from '@mui/material'\nimport {\n FileHandleAssociateType,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\nimport { useMemo, useRef, useState } from 'react'\n\nexport type TemplateFileHandleFieldProps = {\n /** The slot's `templateFileHandleId`, if one is attached. */\n fileHandleId: string | undefined\n /**\n * The FormTemplate's id, used to build the download association. Undefined for a template\n * that has not been saved yet (a brand-new draft), in which case the file is downloaded\n * directly as a file handle the current user uploaded.\n */\n formTemplateId: string | undefined\n onChange: (fileHandleId: string | undefined) => void\n}\n\n/**\n * Upload/download control for a file field's optional template attachment\n * (`FormTemplateField.templateFileHandleId`) — e.g. a fillable document requesters must\n * download, complete, and re-upload to answer this slot. Uploads immediately via\n * `BasicFileHandleUpload` in a dialog; download reuses `FileHandleLink`.\n */\nexport function TemplateFileHandleField({\n fileHandleId,\n formTemplateId,\n onChange,\n}: TemplateFileHandleFieldProps) {\n const [dialogOpen, setDialogOpen] = useState(false)\n const [validationError, setValidationError] = useState<string | null>(null)\n const uploadRef = useRef<FileUploadHandle | null>(null)\n // FileHandleLink refetches whenever the association's identity changes.\n const fileHandleAssociation = useMemo<FileHandleAssociation | undefined>(\n () =>\n fileHandleId && formTemplateId\n ? {\n fileHandleId,\n // AccessRequirementAttachment is a stand-in: a FormTemplate is not an\n // AccessRequirement, so the server may not authorize this download.\n // Supported FormTemplate template-file downloads are tracked in PLFM-10013.\n associateObjectType:\n FileHandleAssociateType.AccessRequirementAttachment,\n associateObjectId: formTemplateId,\n }\n : undefined,\n [fileHandleId, formTemplateId],\n )\n\n return (\n <Box>\n <Typography variant=\"caption\" color=\"text.secondary\" component=\"div\">\n Template file\n </Typography>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n {fileHandleId ? (\n <>\n {/* A template that has not been saved yet can only reference a file handle that the current user uploaded, so it is downloaded directly. */}\n {fileHandleAssociation ? (\n <FileHandleLink\n fileHandleAssociation={fileHandleAssociation}\n showDownloadIcon\n />\n ) : (\n <FileHandleLink\n creatorFileHandleId={fileHandleId}\n showDownloadIcon\n />\n )}\n <IconButton\n size=\"small\"\n onClick={() => onChange(undefined)}\n aria-label=\"Remove template file\"\n >\n <RemoveIcon fontSize=\"small\" />\n </IconButton>\n </>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n None\n </Typography>\n )}\n <Button\n size=\"small\"\n startIcon={<UploadIcon fontSize=\"small\" />}\n onClick={() => setDialogOpen(true)}\n >\n {fileHandleId ? 'Replace' : 'Upload'}\n </Button>\n </Stack>\n\n <DialogBase\n open={dialogOpen}\n onCancel={() => setDialogOpen(false)}\n title=\"Upload template file\"\n maxWidth=\"sm\"\n content={\n <>\n <BasicFileHandleUpload\n ref={uploadRef}\n allowMultipleUpload={false}\n disableDragAndDrop={true}\n onValidationError={setValidationError}\n onFileUploadComplete={newFileHandleId => {\n onChange(newFileHandleId)\n setDialogOpen(false)\n }}\n />\n {validationError && (\n <Alert severity=\"error\" sx={{ mt: 2 }}>\n {validationError}\n </Alert>\n )}\n </>\n }\n actions={\n <Button variant=\"outlined\" onClick={() => setDialogOpen(false)}>\n Cancel\n </Button>\n }\n />\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;;AAwCA,SAAgB,EAAwB,EACtC,iBACA,mBACA,eAC+B;CAC/B,IAAM,CAAC,GAAY,KAAiB,EAAS,EAAK,GAC5C,CAAC,GAAiB,KAAsB,EAAwB,IAAI,GACpE,IAAY,EAAgC,IAAI,GAEhD,IAAwB,QAE1B,KAAgB,IACZ;EACE;EAIA,qBACE,EAAwB;EAC1B,mBAAmB;CACrB,IACA,KAAA,GACN,CAAC,GAAc,CAAc,CAC/B;CAEA,OACE,kBAAC,GAAD,EAAA,UAAA;EACE,kBAAC,GAAD;GAAY,SAAQ;GAAU,OAAM;GAAiB,WAAU;aAAM;EAEzD,CAAA;EACZ,kBAAC,GAAD;GAAO,WAAU;GAAM,SAAS;GAAG,YAAW;aAA9C,CACG,IACC,kBAAA,GAAA,EAAA,UAAA,CAEG,IACC,kBAAC,GAAD;IACyB;IACvB,kBAAA;GACD,CAAA,IAED,kBAAC,GAAD;IACE,qBAAqB;IACrB,kBAAA;GACD,CAAA,GAEH,kBAAC,GAAD;IACE,MAAK;IACL,eAAe,EAAS,KAAA,CAAS;IACjC,cAAW;cAEX,kBAAC,GAAD,EAAY,UAAS,QAAS,CAAA;GACpB,CAAA,CACZ,EAAA,CAAA,IAEF,kBAAC,GAAD;IAAY,SAAQ;IAAQ,OAAM;cAAiB;GAEvC,CAAA,GAEd,kBAAC,GAAD;IACE,MAAK;IACL,WAAW,kBAAC,GAAD,EAAY,UAAS,QAAS,CAAA;IACzC,eAAe,EAAc,EAAI;cAEhC,IAAe,YAAY;GACtB,CAAA,CACH;;EAEP,kBAAC,GAAD;GACE,MAAM;GACN,gBAAgB,EAAc,EAAK;GACnC,OAAM;GACN,UAAS;GACT,SACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;IACE,KAAK;IACL,qBAAqB;IACrB,oBAAoB;IACpB,mBAAmB;IACnB,uBAAsB,MAAmB;KAEvC,AADA,EAAS,CAAe,GACxB,EAAc,EAAK;IACrB;GACD,CAAA,GACA,KACC,kBAAC,GAAD;IAAO,UAAS;IAAQ,IAAI,EAAE,IAAI,EAAE;cACjC;GACI,CAAA,CAET,EAAA,CAAA;GAEJ,SACE,kBAAC,GAAD;IAAQ,SAAQ;IAAW,eAAe,EAAc,EAAK;cAAG;GAExD,CAAA;EAEX,CAAA;CACE,EAAA,CAAA;AAET"}
|
|
@@ -70,12 +70,12 @@ function i(e, t) {
|
|
|
70
70
|
return n;
|
|
71
71
|
}
|
|
72
72
|
function a(e, t) {
|
|
73
|
-
let n = e.toLowerCase().
|
|
73
|
+
let n = e.toLowerCase().replaceAll(/[^a-z0-9\s]/g, "").trim().split(/\s+/).filter(Boolean).map((e, t) => t === 0 ? e : e.charAt(0).toUpperCase() + e.slice(1)).join("") || "field", r = n, i = 1;
|
|
74
74
|
for (; t.has(r);) i += 1, r = `${n}${i}`;
|
|
75
75
|
return r;
|
|
76
76
|
}
|
|
77
77
|
function o(e) {
|
|
78
|
-
let t = e.
|
|
78
|
+
let t = e.replaceAll(/[^A-Za-z0-9_]/g, "");
|
|
79
79
|
return /^[0-9]/.test(t) ? `_${t}` : t;
|
|
80
80
|
}
|
|
81
81
|
//#endregion
|