synapse-react-client 4.0.22 → 4.0.23

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.
Files changed (99) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/assets/icons/GeneticsIcon.d.ts +3 -0
  3. package/dist/assets/icons/GeneticsIcon.d.ts.map +1 -0
  4. package/dist/assets/icons/GeneticsIcon.js +14 -0
  5. package/dist/assets/icons/GeneticsIcon.js.map +1 -0
  6. package/dist/components/EntityCitation/EntityCitation.d.ts.map +1 -1
  7. package/dist/components/EntityCitation/EntityCitation.js +23 -8
  8. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  9. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.d.ts +18 -0
  10. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.d.ts.map +1 -0
  11. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +112 -0
  12. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js.map +1 -0
  13. package/dist/components/GenericCard/DuoTermTags/duoTerms.d.ts +31 -0
  14. package/dist/components/GenericCard/DuoTermTags/duoTerms.d.ts.map +1 -0
  15. package/dist/components/GenericCard/DuoTermTags/duoTerms.js +198 -0
  16. package/dist/components/GenericCard/DuoTermTags/duoTerms.js.map +1 -0
  17. package/dist/components/GenericCard/SynapseCardLabel.d.ts.map +1 -1
  18. package/dist/components/GenericCard/SynapseCardLabel.js +4 -8
  19. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  20. package/dist/components/GenericCard/TableRowGenericCard.d.ts +6 -0
  21. package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
  22. package/dist/components/GenericCard/TableRowGenericCard.js +168 -153
  23. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  24. package/dist/components/IconSvg/IconSvg.d.ts +1 -1
  25. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  26. package/dist/components/IconSvg/IconSvg.js +19 -18
  27. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  28. package/dist/components/QueryVisualizationWrapper/QueryVisualizationContext.d.ts +21 -0
  29. package/dist/components/QueryVisualizationWrapper/QueryVisualizationContext.d.ts.map +1 -1
  30. package/dist/components/QueryVisualizationWrapper/QueryVisualizationContext.js.map +1 -1
  31. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.d.ts +10 -0
  32. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.d.ts.map +1 -1
  33. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +65 -59
  34. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  35. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +1 -1
  36. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  37. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +2 -0
  38. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  39. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +33 -6
  40. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  41. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +93 -55
  42. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  43. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.d.ts +3 -0
  44. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.d.ts.map +1 -1
  45. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js +39 -37
  46. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js.map +1 -1
  47. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.d.ts +3 -1
  48. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.d.ts.map +1 -1
  49. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js +4 -0
  50. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js.map +1 -1
  51. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts +5 -2
  52. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
  53. package/dist/components/entity/page/action_menu/EntityActionMenu.js +68 -51
  54. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  55. package/dist/components/index.d.ts +1 -0
  56. package/dist/components/index.d.ts.map +1 -1
  57. package/dist/components/menu/ComplexMenu.d.ts +8 -1
  58. package/dist/components/menu/ComplexMenu.d.ts.map +1 -1
  59. package/dist/components/menu/ComplexMenu.js +50 -20
  60. package/dist/components/menu/ComplexMenu.js.map +1 -1
  61. package/dist/components/widgets/facet-nav/FacetValueChip.d.ts +25 -0
  62. package/dist/components/widgets/facet-nav/FacetValueChip.d.ts.map +1 -0
  63. package/dist/components/widgets/facet-nav/FacetValueChip.js +40 -0
  64. package/dist/components/widgets/facet-nav/FacetValueChip.js.map +1 -0
  65. package/dist/components/widgets/facet-nav/SelectionCriteriaPill.d.ts +10 -5
  66. package/dist/components/widgets/facet-nav/SelectionCriteriaPill.d.ts.map +1 -1
  67. package/dist/components/widgets/facet-nav/SelectionCriteriaPill.js +10 -17
  68. package/dist/components/widgets/facet-nav/SelectionCriteriaPill.js.map +1 -1
  69. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.d.ts.map +1 -1
  70. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js +11 -10
  71. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
  72. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
  73. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +70 -54
  74. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  75. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts +2 -1
  76. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts.map +1 -1
  77. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js +17 -1
  78. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
  79. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts +2 -0
  80. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts.map +1 -1
  81. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js +7 -7
  82. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
  83. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts.map +1 -1
  84. package/dist/features/curator/dashboard/components/CurationTaskCard.js +99 -45
  85. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -1
  86. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
  87. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +174 -149
  88. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  89. package/dist/features/entity/metadata-task/utils/constants.d.ts +6 -0
  90. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
  91. package/dist/features/entity/metadata-task/utils/constants.js +19 -2
  92. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
  93. package/dist/style/components/_total-query-results.scss +10 -34
  94. package/dist/style/main.css +1 -1
  95. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  96. package/dist/synapse-queries/curation/task/useCurationTask.js +1 -1
  97. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  98. package/dist/tsconfig.build.tsbuildinfo +1 -1
  99. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"CreateOrUpdateCurationTaskDialog.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.tsx"],"sourcesContent":["import { ConfirmationDialog } from '@/components/ConfirmationDialog'\nimport { DialogBase } from '@/components/DialogBase'\nimport EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { TextField } from '@/components/TextField'\nimport { displayToast } from '@/components/ToastMessage'\nimport UserOrTeamBadge from '@/components/UserOrTeamBadge/UserOrTeamBadge'\nimport UserSearchBox from '@/components/UserSearchBox/UserSearchBox'\nimport WizardChoiceButton from '@/components/WizardChoiceButton/WizardChoiceButton'\nimport WizardChoiceButtonGroup from '@/components/WizardChoiceButton/WizardChoiceButtonGroup'\nimport {\n useCreateCurationTask,\n useDeleteCurationTask,\n useUpdateCurationTask,\n} from '@/synapse-queries/curation/task/useCurationTask'\nimport { EntityTypeGroup } from '@/utils/functions/EntityTypeUtils'\nimport { HelpTwoTone } from '@mui/icons-material'\nimport Close from '@mui/icons-material/Close'\nimport {\n Alert,\n Box,\n Button,\n FormControl,\n FormControlLabel,\n FormLabel,\n Grid,\n IconButton,\n InputLabel,\n Radio,\n RadioGroup,\n Stack,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport {\n CurationTask,\n CurationTaskProperties,\n EntityType,\n FileBasedMetadataTaskPropertiesConcreteTypeEnum,\n RecordBasedMetadataTaskPropertiesConcreteTypeEnum,\n} from '@sage-bionetworks/synapse-client'\nimport { TYPE_FILTER } from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport {\n ASSIGNEE_TOOLTIP,\n AUTH_MODE_CHANGED_WARNING,\n AUTH_MODE_NONE_TITLE,\n AUTH_MODE_NONE_TOOLTIP,\n AUTH_MODE_SESSION_OWNER_TITLE,\n AUTH_MODE_SESSION_OWNER_TOOLTIP,\n AUTH_MODE_SOURCE_BENEFACTOR_TITLE,\n AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP,\n COLLABORATORS_TOOLTIP,\n CREATE_CURATION_TASK_DIALOG_TITLE,\n DELETE_CURATION_TASK_CONFIRMATION_PROMPT,\n DELETE_CURATION_TASK_DIALOG_TITLE,\n DELETE_CURATION_TASK_ERROR_TOAST_PREFIX,\n DELETE_CURATION_TASK_GRID_SESSION_WARNING,\n DELETE_CURATION_TASK_SUCCESS_TOAST,\n EDIT_CURATION_TASK_DIALOG_TITLE,\n FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION,\n FILE_BASED_TASK_DESCRIPTION,\n FILE_BASED_TASK_TITLE,\n FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION,\n FILE_VIEW_FINDER_PROMPT,\n FILE_VIEW_FINDER_TITLE,\n GENERIC_SAVE_ERROR_MESSAGE,\n RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION,\n RECORD_BASED_TASK_DESCRIPTION,\n RECORD_BASED_TASK_TITLE,\n RECORD_SET_FINDER_PROMPT,\n RECORD_SET_FINDER_TITLE,\n SELECT_TASK_TYPE_DESCRIPTION,\n TASK_INSTRUCTIONS_INPUT_DESCRIPTION,\n TASK_NAME_INPUT_DESCRIPTION,\n UNRECOGNIZED_TASK_TYPE_ERROR,\n UPLOAD_FOLDER_FINDER_PROMPT,\n UPLOAD_FOLDER_FINDER_TITLE,\n} from '../utils/constants'\nimport noop from 'lodash-es/noop'\nimport { useGetEntityPermissions } from '@/synapse-queries/entity/useEntity'\n\nexport type CreateOrUpdateCurationTaskDialogProps = {\n open: boolean\n onCancel: () => void\n onSuccess: (task: CurationTask) => void\n /**\n * Called after the task has been deleted from the dialog (edit mode only).\n * Parent is responsible for closing the dialog and any related cleanup.\n */\n onDeleteSuccess?: () => void\n projectId: string\n task?: CurationTask\n}\n\nconst FILE_BASED_CONCRETE_TYPE =\n FileBasedMetadataTaskPropertiesConcreteTypeEnum.org_sagebionetworks_repo_model_curation_metadata_FileBasedMetadataTaskProperties\nconst RECORD_BASED_CONCRETE_TYPE =\n RecordBasedMetadataTaskPropertiesConcreteTypeEnum.org_sagebionetworks_repo_model_curation_metadata_RecordBasedMetadataTaskProperties\n\n/** Null represents the \"Legacy\" / unset option for suggestedAuthorizationMode */\ntype AuthorizationModeOption = 'SESSION_OWNER' | 'SOURCE_BENEFACTOR' | 'NONE'\n\nfunction toAuthorizationModeOption(\n value: string | undefined,\n): AuthorizationModeOption {\n if (value === 'SESSION_OWNER' || value === 'SOURCE_BENEFACTOR') return value\n return 'NONE'\n}\n\ntype CreateOrUpdateCurationTaskDialogStep =\n | 'SELECT_TYPE'\n | 'TYPE_SPECIFIC_FIELDS'\n | 'COMMON_MUTABLE_FIELDS'\n\n/**\n * Dialog component that guides a user through creating a new CurationTask or editing an existing one.\n */\nexport default function CreateOrUpdateCurationTaskDialog(\n props: CreateOrUpdateCurationTaskDialogProps,\n) {\n const {\n open,\n onCancel,\n onSuccess,\n onDeleteSuccess = noop,\n projectId,\n task,\n } = props\n const isEditMode = task !== undefined\n const { data: permissions } = useGetEntityPermissions(projectId)\n const canDelete =\n permissions?.canDelete &&\n isEditMode &&\n task?.taskId != null &&\n props.onDeleteSuccess != null\n\n const [showDeleteConfirmation, setShowDeleteConfirmation] = useState(false)\n\n // In create mode: track which step we're on (1 = type selection, 2 = type-specific fields, 3 = common mutable fields)\n const [step, setStep] = useState<CreateOrUpdateCurationTaskDialogStep>(() =>\n task ? 'COMMON_MUTABLE_FIELDS' : 'SELECT_TYPE',\n )\n\n // Derive initial concrete type from the existing task (null in create mode\n // until the user picks a type in step 1)\n const [selectedConcreteType, setSelectedConcreteType] = useState<\n CurationTaskProperties['concreteType'] | null\n >(() => {\n const ct = task?.taskProperties?.concreteType\n if (ct === FILE_BASED_CONCRETE_TYPE || ct === RECORD_BASED_CONCRETE_TYPE)\n return ct\n return null\n })\n\n // Common task fields — lazily initialized from the existing task\n const [dataType, setDataType] = useState(() => task?.dataType ?? '')\n const [instructions, setInstructions] = useState(\n () => task?.instructions ?? '',\n )\n const [assigneePrincipalId, setAssigneePrincipalId] = useState<\n string | undefined\n >(() => task?.assigneePrincipalId)\n\n const initialAuthMode = toAuthorizationModeOption(\n task?.taskProperties?.suggestedAuthorizationMode,\n )\n const [authorizationMode, setAuthorizationMode] =\n useState<AuthorizationModeOption>(initialAuthMode)\n // Track the original value to detect unsaved changes\n const [originalAuthorizationMode] =\n useState<AuthorizationModeOption>(initialAuthMode)\n\n // FileBasedMetadataTaskProperties fields\n const [uploadFolderId, setUploadFolderId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === FILE_BASED_CONCRETE_TYPE\n ? (tp.uploadFolderId ?? '')\n : ''\n })\n const [fileViewId, setFileViewId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === FILE_BASED_CONCRETE_TYPE\n ? (tp.fileViewId ?? '')\n : ''\n })\n\n // RecordBasedMetadataTaskProperties fields\n const [recordSetId, setRecordSetId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === RECORD_BASED_CONCRETE_TYPE\n ? (tp.recordSetId ?? '')\n : ''\n })\n\n // Shared taskProperties fields\n const [collaboratorPrincipalIds, setCollaboratorPrincipalIds] = useState<\n string[]\n >(() => {\n const ids = task?.taskProperties?.collaboratorPrincipalIds\n return ids ?? []\n })\n const [pendingCollaboratorId, setPendingCollaboratorId] = useState<\n string | null\n >(null)\n\n const {\n mutate: createTask,\n isPending: isCreatePending,\n error: createError,\n } = useCreateCurationTask({\n onSuccess: created => {\n onSuccess(created)\n },\n })\n\n const {\n mutate: updateTask,\n isPending: isUpdatePending,\n error: updateError,\n } = useUpdateCurationTask({\n onSuccess: updated => {\n onSuccess(updated)\n },\n })\n\n const { mutate: deleteTask, isPending: isDeletePending } =\n useDeleteCurationTask({\n onSuccess: () => {\n displayToast(DELETE_CURATION_TASK_SUCCESS_TOAST, 'success')\n setShowDeleteConfirmation(false)\n onDeleteSuccess()\n },\n onError: err => {\n displayToast(\n DELETE_CURATION_TASK_ERROR_TOAST_PREFIX + err.message,\n 'danger',\n )\n },\n })\n\n const isPending = isCreatePending || isUpdatePending || isDeletePending\n const error = createError ?? updateError\n\n const isTaskPropertiesValid =\n (selectedConcreteType === FILE_BASED_CONCRETE_TYPE &&\n uploadFolderId &&\n fileViewId) ||\n (selectedConcreteType === RECORD_BASED_CONCRETE_TYPE && recordSetId)\n\n function buildTaskPayload(): CurationTask {\n const suggestedAuthorizationMode =\n authorizationMode === 'NONE' ? undefined : authorizationMode\n\n const concreteType = selectedConcreteType!\n let taskProperties: CurationTask['taskProperties']\n const collaborators =\n collaboratorPrincipalIds.length > 0 ? collaboratorPrincipalIds : undefined\n\n if (concreteType === FILE_BASED_CONCRETE_TYPE) {\n taskProperties = {\n concreteType: FILE_BASED_CONCRETE_TYPE,\n uploadFolderId: uploadFolderId || undefined,\n fileViewId: fileViewId || undefined,\n suggestedAuthorizationMode,\n collaboratorPrincipalIds: collaborators,\n }\n } else {\n taskProperties = {\n concreteType: RECORD_BASED_CONCRETE_TYPE,\n recordSetId: recordSetId || undefined,\n suggestedAuthorizationMode,\n collaboratorPrincipalIds: collaborators,\n }\n }\n\n return {\n // Spread the existing task to carry over server-managed fields (taskId, etc.)\n ...(isEditMode ? task : {}),\n projectId,\n dataType: dataType || undefined,\n instructions: instructions || undefined,\n assigneePrincipalId: assigneePrincipalId || undefined,\n taskProperties,\n }\n }\n\n function handleSave() {\n const payload = buildTaskPayload()\n if (isEditMode) {\n updateTask(payload)\n } else {\n createTask(payload)\n }\n }\n\n const authModeChanged =\n isEditMode && authorizationMode !== originalAuthorizationMode\n\n // ── Authorization Mode radio group (shared between columns) ────────────\n const authModeField = (\n <FormControl>\n <FormLabel>Authorization Mode</FormLabel>\n <RadioGroup\n value={authorizationMode}\n onChange={(_e, v) => setAuthorizationMode(v as AuthorizationModeOption)}\n >\n <FormControlLabel\n value=\"NONE\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">{AUTH_MODE_NONE_TITLE}</Typography>\n <Tooltip title={AUTH_MODE_NONE_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n <FormControlLabel\n value=\"SESSION_OWNER\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">\n {AUTH_MODE_SESSION_OWNER_TITLE}\n </Typography>\n <Tooltip title={AUTH_MODE_SESSION_OWNER_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n <FormControlLabel\n value=\"SOURCE_BENEFACTOR\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">\n {AUTH_MODE_SOURCE_BENEFACTOR_TITLE}\n </Typography>\n <Tooltip title={AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n </RadioGroup>\n </FormControl>\n )\n\n const assigneeField = (\n <Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <InputLabel htmlFor=\"dlg-set-task-assignee\">Assignee</InputLabel>\n <Tooltip title={ASSIGNEE_TOOLTIP}>\n <div>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </div>\n </Tooltip>\n </Box>\n <UserSearchBox\n inputId=\"dlg-set-task-assignee\"\n key={open.toString()}\n defaultValue={assigneePrincipalId}\n onChange={id => setAssigneePrincipalId(id ?? undefined)}\n typeFilter={TYPE_FILTER.ALL}\n />\n </Box>\n )\n\n // ── Form fields (used in both step 3 create and edit mode) ──────────────\n const commonFields = (\n <Stack gap={2}>\n <TextField\n label=\"Task Name\"\n fullWidth\n value={dataType}\n onChange={e => setDataType(e.target.value)}\n required\n description={TASK_NAME_INPUT_DESCRIPTION}\n />\n <TextField\n label=\"Instructions\"\n fullWidth\n multiline\n minRows={3}\n value={instructions}\n onChange={e => setInstructions(e.target.value)}\n description={TASK_INSTRUCTIONS_INPUT_DESCRIPTION}\n />\n {/* TODO: Display the below 'collaborators' once multiple owners are supported */}\n <Box display=\"none\">\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <InputLabel>Collaborators</InputLabel>\n <Tooltip title={COLLABORATORS_TOOLTIP}>\n <div>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </div>\n </Tooltip>\n </Box>\n <Stack gap={1}>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Box flex={1}>\n <UserSearchBox\n value={pendingCollaboratorId}\n onChange={id => setPendingCollaboratorId(id)}\n typeFilter={TYPE_FILTER.ALL}\n placeholder=\"Search for a user or team\"\n />\n </Box>\n <Button\n variant=\"outlined\"\n onClick={() => {\n if (\n pendingCollaboratorId &&\n !collaboratorPrincipalIds.includes(pendingCollaboratorId)\n ) {\n setCollaboratorPrincipalIds(prev => [\n ...prev,\n pendingCollaboratorId,\n ])\n }\n setPendingCollaboratorId(null)\n }}\n disabled={!pendingCollaboratorId}\n >\n Add\n </Button>\n </Stack>\n {collaboratorPrincipalIds.map(id => (\n <Stack\n key={id}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <UserOrTeamBadge principalId={id} />\n <IconButton\n size=\"small\"\n onClick={() =>\n setCollaboratorPrincipalIds(prev =>\n prev.filter(x => x !== id),\n )\n }\n >\n <Close fontSize=\"small\" />\n </IconButton>\n </Stack>\n ))}\n </Stack>\n </Box>\n </Stack>\n )\n\n // ── TaskProperties fields ────────────────────────────────────────────────\n const fileBasedFields = (\n <Stack gap={2}>\n <EntityIdTextField\n label=\"Upload Folder ID\"\n value={uploadFolderId}\n description={FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION}\n onChange={setUploadFolderId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: UPLOAD_FOLDER_FINDER_TITLE,\n promptCopy: UPLOAD_FOLDER_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: EntityTypeGroup.CONTAINER,\n },\n }}\n />\n <EntityIdTextField\n label=\"File View ID\"\n value={fileViewId}\n description={FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION}\n onChange={setFileViewId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: FILE_VIEW_FINDER_TITLE,\n promptCopy: FILE_VIEW_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: [EntityType.entityview],\n },\n }}\n />\n </Stack>\n )\n\n const recordBasedFields = (\n <EntityIdTextField\n label=\"Record Set ID\"\n value={recordSetId}\n description={RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION}\n onChange={setRecordSetId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: RECORD_SET_FINDER_TITLE,\n promptCopy: RECORD_SET_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: [EntityType.recordset],\n },\n }}\n />\n )\n\n // ── Step 1: Type selection ───────────────────────────────────────────────\n const step1Content = (\n <Stack gap={2}>\n <Typography variant=\"body1\">{SELECT_TASK_TYPE_DESCRIPTION}</Typography>\n <WizardChoiceButtonGroup>\n <WizardChoiceButton\n title={FILE_BASED_TASK_TITLE}\n description={FILE_BASED_TASK_DESCRIPTION}\n onClick={() => {\n setSelectedConcreteType(FILE_BASED_CONCRETE_TYPE)\n setStep('TYPE_SPECIFIC_FIELDS')\n }}\n />\n <WizardChoiceButton\n title={RECORD_BASED_TASK_TITLE}\n description={RECORD_BASED_TASK_DESCRIPTION}\n onClick={() => {\n setSelectedConcreteType(RECORD_BASED_CONCRETE_TYPE)\n setStep('TYPE_SPECIFIC_FIELDS')\n }}\n />\n </WizardChoiceButtonGroup>\n </Stack>\n )\n\n // ── Step 2: Type-specific fields ───────────────────────────────────────────────\n const step2Content = (\n <Stack gap={2}>\n {selectedConcreteType === FILE_BASED_CONCRETE_TYPE && fileBasedFields}\n {selectedConcreteType === RECORD_BASED_CONCRETE_TYPE && recordBasedFields}\n </Stack>\n )\n\n // ── Step 3 / edit form content ───────────────────────────────────────────\n const step3Content = (\n <Stack gap={3}>\n <Grid container spacing={3} alignItems=\"flex-start\">\n <Grid size={{ xs: 12, sm: 6 }}>\n <Stack gap={2}>{commonFields}</Stack>\n </Grid>\n <Grid size={{ xs: 12, sm: 6 }}>\n <Stack gap={3}>\n {assigneeField}\n {authModeField}\n </Stack>\n </Grid>\n </Grid>\n\n {isEditMode && selectedConcreteType === null && (\n <Alert severity=\"error\">{UNRECOGNIZED_TASK_TYPE_ERROR}</Alert>\n )}\n {authModeChanged && (\n <Alert severity=\"warning\">{AUTH_MODE_CHANGED_WARNING}</Alert>\n )}\n {error && (\n <Alert severity=\"error\">\n {error.reason ?? GENERIC_SAVE_ERROR_MESSAGE}\n </Alert>\n )}\n </Stack>\n )\n\n const title = isEditMode\n ? EDIT_CURATION_TASK_DIALOG_TITLE\n : CREATE_CURATION_TASK_DIALOG_TITLE\n\n let dialogContent = null\n switch (step) {\n case 'SELECT_TYPE':\n dialogContent = step1Content\n break\n case 'TYPE_SPECIFIC_FIELDS':\n dialogContent = step2Content\n break\n case 'COMMON_MUTABLE_FIELDS':\n dialogContent = step3Content\n break\n }\n\n let dialogActions = null\n switch (step) {\n case 'SELECT_TYPE':\n dialogActions = null\n break\n case 'TYPE_SPECIFIC_FIELDS': {\n dialogActions = (\n <>\n <Button\n variant=\"outlined\"\n onClick={() => setStep('SELECT_TYPE')}\n disabled={isPending}\n >\n Back\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => setStep('COMMON_MUTABLE_FIELDS')}\n disabled={isPending || !isTaskPropertiesValid}\n >\n Next\n </Button>\n </>\n )\n break\n }\n case 'COMMON_MUTABLE_FIELDS': {\n dialogActions = (\n <>\n {!isEditMode && (\n <Button\n variant=\"outlined\"\n onClick={() => setStep('TYPE_SPECIFIC_FIELDS')}\n disabled={isPending}\n >\n Back\n </Button>\n )}\n <Button\n variant=\"contained\"\n onClick={handleSave}\n disabled={isPending || selectedConcreteType === null}\n >\n Save\n </Button>\n </>\n )\n break\n }\n }\n\n return (\n <>\n <DialogBase\n open={open}\n title={title}\n maxWidth=\"md\"\n fullWidth\n onCancel={onCancel}\n content={dialogContent}\n actions={\n <Stack\n direction=\"row\"\n gap={1}\n justifyContent=\"space-between\"\n alignItems=\"center\"\n width=\"100%\"\n >\n <Box>\n {canDelete && (\n <Button\n variant=\"outlined\"\n color=\"error\"\n onClick={() => setShowDeleteConfirmation(true)}\n disabled={isPending}\n >\n Delete\n </Button>\n )}\n </Box>\n <Stack direction=\"row\" gap={1}>\n {dialogActions}\n </Stack>\n </Stack>\n }\n />\n <ConfirmationDialog\n title={DELETE_CURATION_TASK_DIALOG_TITLE}\n open={showDeleteConfirmation}\n content={\n <Stack gap={2}>\n <Typography variant=\"body1\">\n {DELETE_CURATION_TASK_CONFIRMATION_PROMPT}\n </Typography>\n <Alert severity=\"warning\">\n {DELETE_CURATION_TASK_GRID_SESSION_WARNING}\n </Alert>\n </Stack>\n }\n confirmButtonProps={{\n children: 'Delete',\n color: 'error',\n loading: isDeletePending,\n }}\n onConfirm={() => {\n if (task?.taskId != null) deleteTask(task.taskId)\n }}\n onCancel={() => setShowDeleteConfirmation(false)}\n />\n </>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CreateOrUpdateCurationTaskDialog.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.tsx"],"sourcesContent":["import { ConfirmationDialog } from '@/components/ConfirmationDialog'\nimport { DialogBase } from '@/components/DialogBase'\nimport EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { TextField } from '@/components/TextField'\nimport { displayToast } from '@/components/ToastMessage'\nimport UserOrTeamBadge from '@/components/UserOrTeamBadge/UserOrTeamBadge'\nimport UserSearchBox from '@/components/UserSearchBox/UserSearchBox'\nimport WizardChoiceButton from '@/components/WizardChoiceButton/WizardChoiceButton'\nimport WizardChoiceButtonGroup from '@/components/WizardChoiceButton/WizardChoiceButtonGroup'\nimport {\n useCreateCurationTask,\n useDeleteCurationTask,\n useGetCurationTaskStatus,\n useUpdateCurationTask,\n useUpdateCurationTaskStatus,\n} from '@/synapse-queries/curation/task/useCurationTask'\nimport { EntityTypeGroup } from '@/utils/functions/EntityTypeUtils'\nimport { HelpTwoTone } from '@mui/icons-material'\nimport Close from '@mui/icons-material/Close'\nimport {\n Alert,\n Box,\n Button,\n FormControl,\n FormControlLabel,\n FormLabel,\n Grid,\n IconButton,\n InputLabel,\n MenuItem,\n Radio,\n RadioGroup,\n Select,\n Stack,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport {\n CurationTask,\n CurationTaskProperties,\n EntityType,\n FileBasedMetadataTaskPropertiesConcreteTypeEnum,\n RecordBasedMetadataTaskPropertiesConcreteTypeEnum,\n TaskStatusStateEnum,\n} from '@sage-bionetworks/synapse-client'\nimport { TYPE_FILTER } from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport {\n ASSIGNEE_TOOLTIP,\n AUTH_MODE_CHANGED_WARNING,\n AUTH_MODE_NONE_TITLE,\n AUTH_MODE_NONE_TOOLTIP,\n AUTH_MODE_SESSION_OWNER_TITLE,\n AUTH_MODE_SESSION_OWNER_TOOLTIP,\n AUTH_MODE_SOURCE_BENEFACTOR_TITLE,\n AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP,\n COLLABORATORS_TOOLTIP,\n CREATE_CURATION_TASK_DIALOG_TITLE,\n TASK_STATUS_CONFIG,\n TASK_STATUS_INPUT_LABEL,\n DELETE_CURATION_TASK_CONFIRMATION_PROMPT,\n DELETE_CURATION_TASK_DIALOG_TITLE,\n DELETE_CURATION_TASK_ERROR_TOAST_PREFIX,\n DELETE_CURATION_TASK_GRID_SESSION_WARNING,\n DELETE_CURATION_TASK_SUCCESS_TOAST,\n EDIT_CURATION_TASK_DIALOG_TITLE,\n FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION,\n FILE_BASED_TASK_DESCRIPTION,\n FILE_BASED_TASK_TITLE,\n FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION,\n FILE_VIEW_FINDER_PROMPT,\n FILE_VIEW_FINDER_TITLE,\n GENERIC_SAVE_ERROR_MESSAGE,\n RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION,\n RECORD_BASED_TASK_DESCRIPTION,\n RECORD_BASED_TASK_TITLE,\n RECORD_SET_FINDER_PROMPT,\n RECORD_SET_FINDER_TITLE,\n SELECT_TASK_TYPE_DESCRIPTION,\n TASK_INSTRUCTIONS_INPUT_DESCRIPTION,\n TASK_NAME_INPUT_DESCRIPTION,\n UNRECOGNIZED_TASK_TYPE_ERROR,\n UPLOAD_FOLDER_FINDER_PROMPT,\n UPLOAD_FOLDER_FINDER_TITLE,\n} from '../utils/constants'\nimport noop from 'lodash-es/noop'\nimport { useGetEntityPermissions } from '@/synapse-queries/entity/useEntity'\nimport { StyledFormControl } from '@/components/styled'\n\nexport type CreateOrUpdateCurationTaskDialogProps = {\n open: boolean\n onCancel: () => void\n onSuccess: (task: CurationTask) => void\n /**\n * Called after the task has been deleted from the dialog (edit mode only).\n * Parent is responsible for closing the dialog and any related cleanup.\n */\n onDeleteSuccess?: () => void\n projectId: string\n task?: CurationTask\n}\n\nconst FILE_BASED_CONCRETE_TYPE =\n FileBasedMetadataTaskPropertiesConcreteTypeEnum.org_sagebionetworks_repo_model_curation_metadata_FileBasedMetadataTaskProperties\nconst RECORD_BASED_CONCRETE_TYPE =\n RecordBasedMetadataTaskPropertiesConcreteTypeEnum.org_sagebionetworks_repo_model_curation_metadata_RecordBasedMetadataTaskProperties\n\n/** Null represents the \"Legacy\" / unset option for suggestedAuthorizationMode */\ntype AuthorizationModeOption = 'SESSION_OWNER' | 'SOURCE_BENEFACTOR' | 'NONE'\n\nfunction toAuthorizationModeOption(\n value: string | undefined,\n): AuthorizationModeOption {\n if (value === 'SESSION_OWNER' || value === 'SOURCE_BENEFACTOR') return value\n return 'NONE'\n}\n\ntype CreateOrUpdateCurationTaskDialogStep =\n | 'SELECT_TYPE'\n | 'TYPE_SPECIFIC_FIELDS'\n | 'COMMON_MUTABLE_FIELDS'\n\n/**\n * Dialog component that guides a user through creating a new CurationTask or editing an existing one.\n */\nexport default function CreateOrUpdateCurationTaskDialog(\n props: CreateOrUpdateCurationTaskDialogProps,\n) {\n const {\n open,\n onCancel,\n onSuccess,\n onDeleteSuccess = noop,\n projectId,\n task,\n } = props\n const isEditMode = task !== undefined\n const { data: permissions } = useGetEntityPermissions(projectId)\n const canDelete =\n permissions?.canDelete &&\n isEditMode &&\n task?.taskId != null &&\n props.onDeleteSuccess != null\n\n const [showDeleteConfirmation, setShowDeleteConfirmation] = useState(false)\n\n // In create mode: track which step we're on (1 = type selection, 2 = type-specific fields, 3 = common mutable fields)\n const [step, setStep] = useState<CreateOrUpdateCurationTaskDialogStep>(() =>\n task ? 'COMMON_MUTABLE_FIELDS' : 'SELECT_TYPE',\n )\n\n // Derive initial concrete type from the existing task (null in create mode\n // until the user picks a type in step 1)\n const [selectedConcreteType, setSelectedConcreteType] = useState<\n CurationTaskProperties['concreteType'] | null\n >(() => {\n const ct = task?.taskProperties?.concreteType\n if (ct === FILE_BASED_CONCRETE_TYPE || ct === RECORD_BASED_CONCRETE_TYPE)\n return ct\n return null\n })\n\n // Common task fields — lazily initialized from the existing task\n const [dataType, setDataType] = useState(() => task?.dataType ?? '')\n const [instructions, setInstructions] = useState(\n () => task?.instructions ?? '',\n )\n const [assigneePrincipalId, setAssigneePrincipalId] = useState<\n string | undefined\n >(() => task?.assigneePrincipalId)\n\n const initialAuthMode = toAuthorizationModeOption(\n task?.taskProperties?.suggestedAuthorizationMode,\n )\n const [authorizationMode, setAuthorizationMode] =\n useState<AuthorizationModeOption>(initialAuthMode)\n // Track the original value to detect unsaved changes\n const [originalAuthorizationMode] =\n useState<AuthorizationModeOption>(initialAuthMode)\n\n // FileBasedMetadataTaskProperties fields\n const [uploadFolderId, setUploadFolderId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === FILE_BASED_CONCRETE_TYPE\n ? (tp.uploadFolderId ?? '')\n : ''\n })\n const [fileViewId, setFileViewId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === FILE_BASED_CONCRETE_TYPE\n ? (tp.fileViewId ?? '')\n : ''\n })\n\n // RecordBasedMetadataTaskProperties fields\n const [recordSetId, setRecordSetId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === RECORD_BASED_CONCRETE_TYPE\n ? (tp.recordSetId ?? '')\n : ''\n })\n\n // Shared taskProperties fields\n const [collaboratorPrincipalIds, setCollaboratorPrincipalIds] = useState<\n string[]\n >(() => {\n const ids = task?.taskProperties?.collaboratorPrincipalIds\n return ids ?? []\n })\n const [pendingCollaboratorId, setPendingCollaboratorId] = useState<\n string | null\n >(null)\n\n // Task status (edit mode only)\n const { data: currentTaskStatus, isFetching: isStatusFetching } =\n useGetCurationTaskStatus(task?.taskId ?? 0, {\n enabled: isEditMode && task?.taskId != null,\n })\n // undefined = user hasn't changed the status yet\n const [pendingStatusState, setPendingStatusState] = useState<\n TaskStatusStateEnum | undefined\n >(undefined)\n const displayedStatusState = pendingStatusState ?? currentTaskStatus?.state\n\n const {\n mutateAsync: createTask,\n isPending: isCreatePending,\n error: createError,\n } = useCreateCurationTask()\n\n const {\n mutateAsync: updateTask,\n isPending: isUpdatePending,\n error: updateError,\n } = useUpdateCurationTask()\n\n const {\n mutateAsync: updateTaskStatus,\n isPending: isStatusUpdatePending,\n error: statusUpdateError,\n } = useUpdateCurationTaskStatus()\n\n const { mutate: deleteTask, isPending: isDeletePending } =\n useDeleteCurationTask({\n onSuccess: () => {\n displayToast(DELETE_CURATION_TASK_SUCCESS_TOAST, 'success')\n setShowDeleteConfirmation(false)\n onDeleteSuccess()\n },\n onError: err => {\n displayToast(\n DELETE_CURATION_TASK_ERROR_TOAST_PREFIX + err.message,\n 'danger',\n )\n },\n })\n\n const isPending =\n isCreatePending ||\n isUpdatePending ||\n isDeletePending ||\n isStatusUpdatePending\n const error = createError ?? updateError ?? statusUpdateError\n\n const isTaskPropertiesValid =\n (selectedConcreteType === FILE_BASED_CONCRETE_TYPE &&\n uploadFolderId &&\n fileViewId) ||\n (selectedConcreteType === RECORD_BASED_CONCRETE_TYPE && recordSetId)\n\n function buildTaskPayload(): CurationTask {\n const suggestedAuthorizationMode =\n authorizationMode === 'NONE' ? undefined : authorizationMode\n\n const concreteType = selectedConcreteType!\n let taskProperties: CurationTask['taskProperties']\n const collaborators =\n collaboratorPrincipalIds.length > 0 ? collaboratorPrincipalIds : undefined\n\n if (concreteType === FILE_BASED_CONCRETE_TYPE) {\n taskProperties = {\n concreteType: FILE_BASED_CONCRETE_TYPE,\n uploadFolderId: uploadFolderId || undefined,\n fileViewId: fileViewId || undefined,\n suggestedAuthorizationMode,\n collaboratorPrincipalIds: collaborators,\n }\n } else {\n taskProperties = {\n concreteType: RECORD_BASED_CONCRETE_TYPE,\n recordSetId: recordSetId || undefined,\n suggestedAuthorizationMode,\n collaboratorPrincipalIds: collaborators,\n }\n }\n\n return {\n // Spread the existing task to carry over server-managed fields (taskId, etc.)\n ...(isEditMode ? task : {}),\n projectId,\n dataType: dataType || undefined,\n instructions: instructions || undefined,\n assigneePrincipalId: assigneePrincipalId || undefined,\n taskProperties,\n }\n }\n\n async function handleSave() {\n const payload = buildTaskPayload()\n if (isEditMode) {\n const latestTask = await updateTask(payload)\n\n if (\n pendingStatusState !== undefined &&\n pendingStatusState !== currentTaskStatus?.state &&\n currentTaskStatus != null\n ) {\n await updateTaskStatus({\n ...currentTaskStatus,\n state: pendingStatusState,\n etag: latestTask.etag,\n })\n }\n\n onSuccess(latestTask)\n } else {\n const created = await createTask(payload)\n onSuccess(created)\n }\n }\n\n const authModeChanged =\n isEditMode && authorizationMode !== originalAuthorizationMode\n\n // ── Authorization Mode radio group (shared between columns) ────────────\n const authModeField = (\n <FormControl>\n <FormLabel>Authorization Mode</FormLabel>\n <RadioGroup\n value={authorizationMode}\n onChange={(_e, v) => setAuthorizationMode(v as AuthorizationModeOption)}\n >\n <FormControlLabel\n value=\"NONE\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">{AUTH_MODE_NONE_TITLE}</Typography>\n <Tooltip title={AUTH_MODE_NONE_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n <FormControlLabel\n value=\"SESSION_OWNER\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">\n {AUTH_MODE_SESSION_OWNER_TITLE}\n </Typography>\n <Tooltip title={AUTH_MODE_SESSION_OWNER_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n <FormControlLabel\n value=\"SOURCE_BENEFACTOR\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">\n {AUTH_MODE_SOURCE_BENEFACTOR_TITLE}\n </Typography>\n <Tooltip title={AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n </RadioGroup>\n </FormControl>\n )\n\n const assigneeField = (\n <Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <InputLabel htmlFor=\"dlg-set-task-assignee\">Assignee</InputLabel>\n <Tooltip title={ASSIGNEE_TOOLTIP}>\n <div>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </div>\n </Tooltip>\n </Box>\n <UserSearchBox\n inputId=\"dlg-set-task-assignee\"\n key={open.toString()}\n defaultValue={assigneePrincipalId}\n onChange={id => setAssigneePrincipalId(id ?? undefined)}\n typeFilter={TYPE_FILTER.ALL}\n />\n </Box>\n )\n\n // ── Form fields (used in both step 3 create and edit mode) ──────────────\n const commonFields = (\n <Stack gap={2}>\n <TextField\n label=\"Task Name\"\n fullWidth\n value={dataType}\n onChange={e => setDataType(e.target.value)}\n required\n description={TASK_NAME_INPUT_DESCRIPTION}\n />\n <TextField\n label=\"Instructions\"\n fullWidth\n multiline\n minRows={3}\n value={instructions}\n onChange={e => setInstructions(e.target.value)}\n description={TASK_INSTRUCTIONS_INPUT_DESCRIPTION}\n />\n {/* TODO: Display the below 'collaborators' once multiple owners are supported */}\n <Box display=\"none\">\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <InputLabel>Collaborators</InputLabel>\n <Tooltip title={COLLABORATORS_TOOLTIP}>\n <div>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </div>\n </Tooltip>\n </Box>\n <Stack gap={1}>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Box flex={1}>\n <UserSearchBox\n value={pendingCollaboratorId}\n onChange={id => setPendingCollaboratorId(id)}\n typeFilter={TYPE_FILTER.ALL}\n placeholder=\"Search for a user or team\"\n />\n </Box>\n <Button\n variant=\"outlined\"\n onClick={() => {\n if (\n pendingCollaboratorId &&\n !collaboratorPrincipalIds.includes(pendingCollaboratorId)\n ) {\n setCollaboratorPrincipalIds(prev => [\n ...prev,\n pendingCollaboratorId,\n ])\n }\n setPendingCollaboratorId(null)\n }}\n disabled={!pendingCollaboratorId}\n >\n Add\n </Button>\n </Stack>\n {collaboratorPrincipalIds.map(id => (\n <Stack\n key={id}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <UserOrTeamBadge principalId={id} />\n <IconButton\n size=\"small\"\n onClick={() =>\n setCollaboratorPrincipalIds(prev =>\n prev.filter(x => x !== id),\n )\n }\n >\n <Close fontSize=\"small\" />\n </IconButton>\n </Stack>\n ))}\n </Stack>\n </Box>\n </Stack>\n )\n\n // ── TaskProperties fields ────────────────────────────────────────────────\n const fileBasedFields = (\n <Stack gap={2}>\n <EntityIdTextField\n label=\"Upload Folder ID\"\n value={uploadFolderId}\n description={FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION}\n onChange={setUploadFolderId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: UPLOAD_FOLDER_FINDER_TITLE,\n promptCopy: UPLOAD_FOLDER_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: EntityTypeGroup.CONTAINER,\n },\n }}\n />\n <EntityIdTextField\n label=\"File View ID\"\n value={fileViewId}\n description={FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION}\n onChange={setFileViewId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: FILE_VIEW_FINDER_TITLE,\n promptCopy: FILE_VIEW_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: [EntityType.entityview],\n },\n }}\n />\n </Stack>\n )\n\n const recordBasedFields = (\n <EntityIdTextField\n label=\"Record Set ID\"\n value={recordSetId}\n description={RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION}\n onChange={setRecordSetId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: RECORD_SET_FINDER_TITLE,\n promptCopy: RECORD_SET_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: [EntityType.recordset],\n },\n }}\n />\n )\n\n // ── Step 1: Type selection ───────────────────────────────────────────────\n const step1Content = (\n <Stack gap={2}>\n <Typography variant=\"body1\">{SELECT_TASK_TYPE_DESCRIPTION}</Typography>\n <WizardChoiceButtonGroup>\n <WizardChoiceButton\n title={FILE_BASED_TASK_TITLE}\n description={FILE_BASED_TASK_DESCRIPTION}\n onClick={() => {\n setSelectedConcreteType(FILE_BASED_CONCRETE_TYPE)\n setStep('TYPE_SPECIFIC_FIELDS')\n }}\n />\n <WizardChoiceButton\n title={RECORD_BASED_TASK_TITLE}\n description={RECORD_BASED_TASK_DESCRIPTION}\n onClick={() => {\n setSelectedConcreteType(RECORD_BASED_CONCRETE_TYPE)\n setStep('TYPE_SPECIFIC_FIELDS')\n }}\n />\n </WizardChoiceButtonGroup>\n </Stack>\n )\n\n // ── Step 2: Type-specific fields ───────────────────────────────────────────────\n const step2Content = (\n <Stack gap={2}>\n {selectedConcreteType === FILE_BASED_CONCRETE_TYPE && fileBasedFields}\n {selectedConcreteType === RECORD_BASED_CONCRETE_TYPE && recordBasedFields}\n </Stack>\n )\n\n // ── Step 3 / edit form content ───────────────────────────────────────────\n const step3Content = (\n <Stack gap={3}>\n <Grid container spacing={3} alignItems=\"flex-start\">\n <Grid size={{ xs: 12, sm: 6 }}>\n <Stack gap={2}>{commonFields}</Stack>\n </Grid>\n <Grid size={{ xs: 12, sm: 6 }}>\n <Stack gap={3}>\n {isEditMode && (\n <StyledFormControl fullWidth>\n <InputLabel id=\"dlg-task-status-label\">\n {TASK_STATUS_INPUT_LABEL}\n </InputLabel>\n <Select\n labelId=\"dlg-task-status-label\"\n value={displayedStatusState ?? ''}\n label={TASK_STATUS_INPUT_LABEL}\n disabled={isStatusFetching || currentTaskStatus == null}\n onChange={e =>\n setPendingStatusState(e.target.value as TaskStatusStateEnum)\n }\n >\n {Object.values(TaskStatusStateEnum).map(state => (\n <MenuItem key={state} value={state}>\n {TASK_STATUS_CONFIG[state].label}\n </MenuItem>\n ))}\n </Select>\n </StyledFormControl>\n )}\n {assigneeField}\n {authModeField}\n </Stack>\n </Grid>\n </Grid>\n\n {isEditMode && selectedConcreteType === null && (\n <Alert severity=\"error\">{UNRECOGNIZED_TASK_TYPE_ERROR}</Alert>\n )}\n {authModeChanged && (\n <Alert severity=\"warning\">{AUTH_MODE_CHANGED_WARNING}</Alert>\n )}\n {error && (\n <Alert severity=\"error\">\n {error.reason ?? GENERIC_SAVE_ERROR_MESSAGE}\n </Alert>\n )}\n </Stack>\n )\n\n const title = isEditMode\n ? EDIT_CURATION_TASK_DIALOG_TITLE\n : CREATE_CURATION_TASK_DIALOG_TITLE\n\n let dialogContent = null\n switch (step) {\n case 'SELECT_TYPE':\n dialogContent = step1Content\n break\n case 'TYPE_SPECIFIC_FIELDS':\n dialogContent = step2Content\n break\n case 'COMMON_MUTABLE_FIELDS':\n dialogContent = step3Content\n break\n }\n\n let dialogActions = null\n switch (step) {\n case 'SELECT_TYPE':\n dialogActions = null\n break\n case 'TYPE_SPECIFIC_FIELDS': {\n dialogActions = (\n <>\n <Button\n variant=\"outlined\"\n onClick={() => setStep('SELECT_TYPE')}\n disabled={isPending}\n >\n Back\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => setStep('COMMON_MUTABLE_FIELDS')}\n disabled={isPending || !isTaskPropertiesValid}\n >\n Next\n </Button>\n </>\n )\n break\n }\n case 'COMMON_MUTABLE_FIELDS': {\n dialogActions = (\n <>\n {!isEditMode && (\n <Button\n variant=\"outlined\"\n onClick={() => setStep('TYPE_SPECIFIC_FIELDS')}\n disabled={isPending}\n >\n Back\n </Button>\n )}\n <Button\n variant=\"contained\"\n // errors surfaced via react-query error state\n onClick={() => void handleSave().catch(noop)}\n disabled={isPending || selectedConcreteType === null}\n >\n Save\n </Button>\n </>\n )\n break\n }\n }\n\n return (\n <>\n <DialogBase\n open={open}\n title={title}\n maxWidth=\"md\"\n fullWidth\n onCancel={onCancel}\n content={dialogContent}\n actions={\n <Stack\n direction=\"row\"\n gap={1}\n justifyContent=\"space-between\"\n alignItems=\"center\"\n width=\"100%\"\n >\n <Box>\n {canDelete && (\n <Button\n variant=\"outlined\"\n color=\"error\"\n onClick={() => setShowDeleteConfirmation(true)}\n disabled={isPending}\n >\n Delete\n </Button>\n )}\n </Box>\n <Stack direction=\"row\" gap={1}>\n {dialogActions}\n </Stack>\n </Stack>\n }\n />\n <ConfirmationDialog\n title={DELETE_CURATION_TASK_DIALOG_TITLE}\n open={showDeleteConfirmation}\n content={\n <Stack gap={2}>\n <Typography variant=\"body1\">\n {DELETE_CURATION_TASK_CONFIRMATION_PROMPT}\n </Typography>\n <Alert severity=\"warning\">\n {DELETE_CURATION_TASK_GRID_SESSION_WARNING}\n </Alert>\n </Stack>\n }\n confirmButtonProps={{\n children: 'Delete',\n color: 'error',\n loading: isDeletePending,\n }}\n onConfirm={() => {\n if (task?.taskId != null) deleteTask(task.taskId)\n }}\n onCancel={() => setShowDeleteConfirmation(false)}\n />\n </>\n )\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { TaskStatusStateEnum } from '@sage-bionetworks/synapse-client';
1
2
  export declare const OPEN_CURATOR_ERROR_TITLE = "An error occurred while trying to open Curator";
2
3
  export declare const OPEN_CURATOR_UNAUTHORIZED_ERROR_MESSAGE = "You don't have permission to view the existing Curator session for this task. It was likely created by another data contributor. A data manager should create a new task and assign it to you or your team.";
3
4
  export declare const OPEN_CURATOR_TOOLTIP_TITLE = "Open Curator to edit metadata";
@@ -26,6 +27,11 @@ export declare const COLLABORATORS_TOOLTIP = "Collaborators can contribute to th
26
27
  export declare const UNRECOGNIZED_TASK_TYPE_ERROR = "This task has an unrecognized task type and cannot be edited here.";
27
28
  export declare const AUTH_MODE_CHANGED_WARNING = "Changing the Authorization Mode will clear the active session ID on this task. Any in-progress grid session linked to this task will no longer be associated with it.";
28
29
  export declare const GENERIC_SAVE_ERROR_MESSAGE = "An error occurred. Please try again.";
30
+ export declare const TASK_STATUS_INPUT_LABEL = "Status";
31
+ export declare const TASK_STATUS_CONFIG: Record<TaskStatusStateEnum, {
32
+ label: string;
33
+ backgroundColor: string;
34
+ }>;
29
35
  export declare const DELETE_CURATION_TASK_DIALOG_TITLE = "Delete Task";
30
36
  export declare const DELETE_CURATION_TASK_CONFIRMATION_PROMPT = "Are you sure you want to delete this task? This action cannot be undone.";
31
37
  export declare const DELETE_CURATION_TASK_GRID_SESSION_WARNING = "Any grid sessions associated with this task will also be deleted.";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,mDACa,CAAA;AAClD,eAAO,MAAM,uCAAuC,gNAC2J,CAAA;AAE/M,eAAO,MAAM,0BAA0B,kCAAkC,CAAA;AACzE,eAAO,MAAM,kDAAkD,wDACR,CAAA;AACvD,eAAO,MAAM,6CAA6C,kIACuE,CAAA;AAIjI,eAAO,MAAM,iCAAiC,yBAAyB,CAAA;AACvE,eAAO,MAAM,+BAA+B,uBAAuB,CAAA;AAEnE,eAAO,MAAM,4BAA4B,8GACoE,CAAA;AAE7G,eAAO,MAAM,qBAAqB,oBAAoB,CAAA;AACtD,eAAO,MAAM,2BAA2B,2NACkL,CAAA;AAE1N,eAAO,MAAM,0CAA0C,0EACkB,CAAA;AACzE,eAAO,MAAM,sCAAsC,qLACiI,CAAA;AAEpL,eAAO,MAAM,uBAAuB,uBAAuB,CAAA;AAC3D,eAAO,MAAM,6BAA6B,mIACwF,CAAA;AAElI,eAAO,MAAM,yCAAyC,qEACc,CAAA;AAEpE,eAAO,MAAM,oBAAoB,uBAAuB,CAAA;AACxD,eAAO,MAAM,sBAAsB,uNAC8K,CAAA;AAEjN,eAAO,MAAM,6BAA6B,8BAA8B,CAAA;AACxE,eAAO,MAAM,+BAA+B,mLACiI,CAAA;AAE7K,eAAO,MAAM,iCAAiC,2BAA2B,CAAA;AACzE,eAAO,MAAM,mCAAmC,mKAC6G,CAAA;AAE7J,eAAO,MAAM,2BAA2B,oFAC2C,CAAA;AACnF,eAAO,MAAM,mCAAmC,iEACgB,CAAA;AAEhE,eAAO,MAAM,gBAAgB,oOACsM,CAAA;AACnO,eAAO,MAAM,qBAAqB,oLAC+I,CAAA;AAEjL,eAAO,MAAM,4BAA4B,uEAC6B,CAAA;AACtE,eAAO,MAAM,yBAAyB,0KACmI,CAAA;AACzK,eAAO,MAAM,0BAA0B,yCAAyC,CAAA;AAEhF,eAAO,MAAM,iCAAiC,gBAAgB,CAAA;AAC9D,eAAO,MAAM,wCAAwC,6EACuB,CAAA;AAC5E,eAAO,MAAM,yCAAyC,sEACe,CAAA;AACrE,eAAO,MAAM,kCAAkC,8BAA8B,CAAA;AAC7E,eAAO,MAAM,uCAAuC,0BAA0B,CAAA;AAE9E,eAAO,MAAM,0BAA0B,yBAAyB,CAAA;AAChE,eAAO,MAAM,2BAA2B,yDACgB,CAAA;AAExD,eAAO,MAAM,sBAAsB,qBAAqB,CAAA;AACxD,eAAO,MAAM,uBAAuB,oEAC+B,CAAA;AAEnE,eAAO,MAAM,uBAAuB,sBAAsB,CAAA;AAC1D,eAAO,MAAM,wBAAwB,oEAC8B,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAEtE,eAAO,MAAM,wBAAwB,mDACa,CAAA;AAClD,eAAO,MAAM,uCAAuC,gNAC2J,CAAA;AAE/M,eAAO,MAAM,0BAA0B,kCAAkC,CAAA;AACzE,eAAO,MAAM,kDAAkD,wDACR,CAAA;AACvD,eAAO,MAAM,6CAA6C,kIACuE,CAAA;AAIjI,eAAO,MAAM,iCAAiC,yBAAyB,CAAA;AACvE,eAAO,MAAM,+BAA+B,uBAAuB,CAAA;AAEnE,eAAO,MAAM,4BAA4B,8GACoE,CAAA;AAE7G,eAAO,MAAM,qBAAqB,oBAAoB,CAAA;AACtD,eAAO,MAAM,2BAA2B,2NACkL,CAAA;AAE1N,eAAO,MAAM,0CAA0C,0EACkB,CAAA;AACzE,eAAO,MAAM,sCAAsC,qLACiI,CAAA;AAEpL,eAAO,MAAM,uBAAuB,uBAAuB,CAAA;AAC3D,eAAO,MAAM,6BAA6B,mIACwF,CAAA;AAElI,eAAO,MAAM,yCAAyC,qEACc,CAAA;AAEpE,eAAO,MAAM,oBAAoB,uBAAuB,CAAA;AACxD,eAAO,MAAM,sBAAsB,uNAC8K,CAAA;AAEjN,eAAO,MAAM,6BAA6B,8BAA8B,CAAA;AACxE,eAAO,MAAM,+BAA+B,mLACiI,CAAA;AAE7K,eAAO,MAAM,iCAAiC,2BAA2B,CAAA;AACzE,eAAO,MAAM,mCAAmC,mKAC6G,CAAA;AAE7J,eAAO,MAAM,2BAA2B,oFAC2C,CAAA;AACnF,eAAO,MAAM,mCAAmC,iEACgB,CAAA;AAEhE,eAAO,MAAM,gBAAgB,oOACsM,CAAA;AACnO,eAAO,MAAM,qBAAqB,oLAC+I,CAAA;AAEjL,eAAO,MAAM,4BAA4B,uEAC6B,CAAA;AACtE,eAAO,MAAM,yBAAyB,0KACmI,CAAA;AACzK,eAAO,MAAM,0BAA0B,yCAAyC,CAAA;AAEhF,eAAO,MAAM,uBAAuB,WAAW,CAAA;AAE/C,eAAO,MAAM,kBAAkB,EAAE,MAAM,CACrC,mBAAmB,EACnB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAM3C,CAAA;AAED,eAAO,MAAM,iCAAiC,gBAAgB,CAAA;AAC9D,eAAO,MAAM,wCAAwC,6EACuB,CAAA;AAC5E,eAAO,MAAM,yCAAyC,sEACe,CAAA;AACrE,eAAO,MAAM,kCAAkC,8BAA8B,CAAA;AAC7E,eAAO,MAAM,uCAAuC,0BAA0B,CAAA;AAE9E,eAAO,MAAM,0BAA0B,yBAAyB,CAAA;AAChE,eAAO,MAAM,2BAA2B,yDACgB,CAAA;AAExD,eAAO,MAAM,sBAAsB,qBAAqB,CAAA;AACxD,eAAO,MAAM,uBAAuB,oEAC+B,CAAA;AAEnE,eAAO,MAAM,uBAAuB,sBAAsB,CAAA;AAC1D,eAAO,MAAM,wBAAwB,oEAC8B,CAAA"}
@@ -1,6 +1,23 @@
1
1
  //#region src/features/entity/metadata-task/utils/constants.ts
2
- var e = "An error occurred while trying to open Curator", t = "You don't have permission to view the existing Curator session for this task. It was likely created by another data contributor. A data manager should create a new task and assign it to you or your team.", n = "Open Curator to edit metadata", r = "You do not have permission to view the Working Copy", i = "Failed to link Grid session to Curation Task. The task was updated since it was last retrieved. Please refresh and try again.", a = "Create Curation Task", o = "Edit Curation Task", s = "Choose the type of data this curation task will manage. This cannot be changed after the task is created.", c = "File-Based Data", l = "Data consists of files uploaded to Synapse.\nRequirements: A schema for this data type exists in the system, the files have been uploaded to a Synapse folder, and a FileView has been created containing these files.", u = "Select the Synapse folder where files will be uploaded for this task.", d = "Select the Synapse file view that includes all files that should have curated metadata. If this task is used in Curator, this file view will determine which files are included.", f = "Records-Based Data", p = "Data consists of a CSV containing records as individual rows.\nRequirements: A schema for this data type exists in the system.", m = "Select the Synapse record set that should be used for this task.", h = "Work independently", g = "This is the legacy behavior. Each contributor works on their own view of the data, based on what they personally have permission to edit. Without coordination, users may overwrite each other’s annotations.", _ = "Share with assignees only", v = "The assigned user or team works together in one shared grid session. Only those assignees can join, and they’ll only see rows that every assignee has permission to edit.", y = "Share with all editors", b = "Contributors work together in one shared grid session. Anyone who has edit access to the task’s data can join and edit the rows available in the session.", x = "Specify the task name so that contributors know which task they should work on.", S = "(Optional) Provide instructions on how to complete the task.", C = "The user or team assigned to this task. If using 'Session Owner' authorization mode, the assignee is the default owner of the grid session. For team assignees in 'Session Owner' mode, any team member can access the session.", w = "Collaborators can contribute to the grid session alongside the assignee. For \"Session Owner\" authorization mode, collaborators are added as additional owners of the session.", T = "This task has an unrecognized task type and cannot be edited here.", E = "Changing the Authorization Mode will clear the active session ID on this task. Any in-progress grid session linked to this task will no longer be associated with it.", D = "An error occurred. Please try again.", O = "Delete Task", k = "Are you sure you want to delete this task? This action cannot be undone.", A = "Any grid sessions associated with this task will also be deleted.", j = "Task deleted successfully", M = "Error deleting task: ", N = "Select Upload Folder", P = "Select the folder where data files will be uploaded.", F = "Select File View", I = "Select the FileView used to create grid sessions for this task.", L = "Select Record Set", R = "Select the RecordSet used to start grid sessions for this task.";
2
+ var e = "An error occurred while trying to open Curator", t = "You don't have permission to view the existing Curator session for this task. It was likely created by another data contributor. A data manager should create a new task and assign it to you or your team.", n = "Open Curator to edit metadata", r = "You do not have permission to view the Working Copy", i = "Failed to link Grid session to Curation Task. The task was updated since it was last retrieved. Please refresh and try again.", a = "Create Curation Task", o = "Edit Curation Task", s = "Choose the type of data this curation task will manage. This cannot be changed after the task is created.", c = "File-Based Data", l = "Data consists of files uploaded to Synapse.\nRequirements: A schema for this data type exists in the system, the files have been uploaded to a Synapse folder, and a FileView has been created containing these files.", u = "Select the Synapse folder where files will be uploaded for this task.", d = "Select the Synapse file view that includes all files that should have curated metadata. If this task is used in Curator, this file view will determine which files are included.", f = "Records-Based Data", p = "Data consists of a CSV containing records as individual rows.\nRequirements: A schema for this data type exists in the system.", m = "Select the Synapse record set that should be used for this task.", h = "Work independently", g = "This is the legacy behavior. Each contributor works on their own view of the data, based on what they personally have permission to edit. Without coordination, users may overwrite each other’s annotations.", _ = "Share with assignees only", v = "The assigned user or team works together in one shared grid session. Only those assignees can join, and they’ll only see rows that every assignee has permission to edit.", y = "Share with all editors", b = "Contributors work together in one shared grid session. Anyone who has edit access to the task’s data can join and edit the rows available in the session.", x = "Specify the task name so that contributors know which task they should work on.", S = "(Optional) Provide instructions on how to complete the task.", C = "The user or team assigned to this task. If using 'Session Owner' authorization mode, the assignee is the default owner of the grid session. For team assignees in 'Session Owner' mode, any team member can access the session.", w = "Collaborators can contribute to the grid session alongside the assignee. For \"Session Owner\" authorization mode, collaborators are added as additional owners of the session.", T = "This task has an unrecognized task type and cannot be edited here.", E = "Changing the Authorization Mode will clear the active session ID on this task. Any in-progress grid session linked to this task will no longer be associated with it.", D = "An error occurred. Please try again.", O = "Status", k = {
3
+ NOT_STARTED: {
4
+ label: "Not Started",
5
+ backgroundColor: "#EAECEE"
6
+ },
7
+ IN_PROGRESS: {
8
+ label: "In Progress",
9
+ backgroundColor: "#FFF3CD"
10
+ },
11
+ COMPLETED: {
12
+ label: "Completed",
13
+ backgroundColor: "#C8E6C9"
14
+ },
15
+ CANCELED: {
16
+ label: "Canceled",
17
+ backgroundColor: "#FFCCBC"
18
+ }
19
+ }, A = "Delete Task", j = "Are you sure you want to delete this task? This action cannot be undone.", M = "Any grid sessions associated with this task will also be deleted.", N = "Task deleted successfully", P = "Error deleting task: ", F = "Select Upload Folder", I = "Select the folder where data files will be uploaded.", L = "Select File View", R = "Select the FileView used to create grid sessions for this task.", z = "Select Record Set", B = "Select the RecordSet used to start grid sessions for this task.";
3
20
  //#endregion
4
- export { C as ASSIGNEE_TOOLTIP, E as AUTH_MODE_CHANGED_WARNING, h as AUTH_MODE_NONE_TITLE, g as AUTH_MODE_NONE_TOOLTIP, _ as AUTH_MODE_SESSION_OWNER_TITLE, v as AUTH_MODE_SESSION_OWNER_TOOLTIP, y as AUTH_MODE_SOURCE_BENEFACTOR_TITLE, b as AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP, w as COLLABORATORS_TOOLTIP, a as CREATE_CURATION_TASK_DIALOG_TITLE, k as DELETE_CURATION_TASK_CONFIRMATION_PROMPT, O as DELETE_CURATION_TASK_DIALOG_TITLE, M as DELETE_CURATION_TASK_ERROR_TOAST_PREFIX, A as DELETE_CURATION_TASK_GRID_SESSION_WARNING, j as DELETE_CURATION_TASK_SUCCESS_TOAST, o as EDIT_CURATION_TASK_DIALOG_TITLE, d as FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION, l as FILE_BASED_TASK_DESCRIPTION, c as FILE_BASED_TASK_TITLE, u as FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION, I as FILE_VIEW_FINDER_PROMPT, F as FILE_VIEW_FINDER_TITLE, D as GENERIC_SAVE_ERROR_MESSAGE, e as OPEN_CURATOR_ERROR_TITLE, i as OPEN_CURATOR_LINK_TASK_CONFLICT_ERROR_MESSAGE, r as OPEN_CURATOR_NO_PERMISSION_ON_SOURCE_ERROR_MESSAGE, n as OPEN_CURATOR_TOOLTIP_TITLE, t as OPEN_CURATOR_UNAUTHORIZED_ERROR_MESSAGE, m as RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION, p as RECORD_BASED_TASK_DESCRIPTION, f as RECORD_BASED_TASK_TITLE, R as RECORD_SET_FINDER_PROMPT, L as RECORD_SET_FINDER_TITLE, s as SELECT_TASK_TYPE_DESCRIPTION, S as TASK_INSTRUCTIONS_INPUT_DESCRIPTION, x as TASK_NAME_INPUT_DESCRIPTION, T as UNRECOGNIZED_TASK_TYPE_ERROR, P as UPLOAD_FOLDER_FINDER_PROMPT, N as UPLOAD_FOLDER_FINDER_TITLE };
21
+ export { C as ASSIGNEE_TOOLTIP, E as AUTH_MODE_CHANGED_WARNING, h as AUTH_MODE_NONE_TITLE, g as AUTH_MODE_NONE_TOOLTIP, _ as AUTH_MODE_SESSION_OWNER_TITLE, v as AUTH_MODE_SESSION_OWNER_TOOLTIP, y as AUTH_MODE_SOURCE_BENEFACTOR_TITLE, b as AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP, w as COLLABORATORS_TOOLTIP, a as CREATE_CURATION_TASK_DIALOG_TITLE, j as DELETE_CURATION_TASK_CONFIRMATION_PROMPT, A as DELETE_CURATION_TASK_DIALOG_TITLE, P as DELETE_CURATION_TASK_ERROR_TOAST_PREFIX, M as DELETE_CURATION_TASK_GRID_SESSION_WARNING, N as DELETE_CURATION_TASK_SUCCESS_TOAST, o as EDIT_CURATION_TASK_DIALOG_TITLE, d as FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION, l as FILE_BASED_TASK_DESCRIPTION, c as FILE_BASED_TASK_TITLE, u as FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION, R as FILE_VIEW_FINDER_PROMPT, L as FILE_VIEW_FINDER_TITLE, D as GENERIC_SAVE_ERROR_MESSAGE, e as OPEN_CURATOR_ERROR_TITLE, i as OPEN_CURATOR_LINK_TASK_CONFLICT_ERROR_MESSAGE, r as OPEN_CURATOR_NO_PERMISSION_ON_SOURCE_ERROR_MESSAGE, n as OPEN_CURATOR_TOOLTIP_TITLE, t as OPEN_CURATOR_UNAUTHORIZED_ERROR_MESSAGE, m as RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION, p as RECORD_BASED_TASK_DESCRIPTION, f as RECORD_BASED_TASK_TITLE, B as RECORD_SET_FINDER_PROMPT, z as RECORD_SET_FINDER_TITLE, s as SELECT_TASK_TYPE_DESCRIPTION, S as TASK_INSTRUCTIONS_INPUT_DESCRIPTION, x as TASK_NAME_INPUT_DESCRIPTION, k as TASK_STATUS_CONFIG, O as TASK_STATUS_INPUT_LABEL, T as UNRECOGNIZED_TASK_TYPE_ERROR, I as UPLOAD_FOLDER_FINDER_PROMPT, F as UPLOAD_FOLDER_FINDER_TITLE };
5
22
 
6
23
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/utils/constants.ts"],"sourcesContent":["export const OPEN_CURATOR_ERROR_TITLE =\n 'An error occurred while trying to open Curator'\nexport const OPEN_CURATOR_UNAUTHORIZED_ERROR_MESSAGE =\n \"You don't have permission to view the existing Curator session for this task. It was likely created by another data contributor. A data manager should create a new task and assign it to you or your team.\"\n\nexport const OPEN_CURATOR_TOOLTIP_TITLE = 'Open Curator to edit metadata'\nexport const OPEN_CURATOR_NO_PERMISSION_ON_SOURCE_ERROR_MESSAGE =\n 'You do not have permission to view the Working Copy'\nexport const OPEN_CURATOR_LINK_TASK_CONFLICT_ERROR_MESSAGE =\n 'Failed to link Grid session to Curation Task. The task was updated since it was last retrieved. Please refresh and try again.'\n\n// CreateOrUpdateCurationTaskDialog\n\nexport const CREATE_CURATION_TASK_DIALOG_TITLE = 'Create Curation Task'\nexport const EDIT_CURATION_TASK_DIALOG_TITLE = 'Edit Curation Task'\n\nexport const SELECT_TASK_TYPE_DESCRIPTION =\n 'Choose the type of data this curation task will manage. This cannot be changed after the task is created.'\n\nexport const FILE_BASED_TASK_TITLE = 'File-Based Data'\nexport const FILE_BASED_TASK_DESCRIPTION =\n 'Data consists of files uploaded to Synapse.\\nRequirements: A schema for this data type exists in the system, the files have been uploaded to a Synapse folder, and a FileView has been created containing these files.'\n\nexport const FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION =\n 'Select the Synapse folder where files will be uploaded for this task.'\nexport const FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION =\n 'Select the Synapse file view that includes all files that should have curated metadata. If this task is used in Curator, this file view will determine which files are included.'\n\nexport const RECORD_BASED_TASK_TITLE = 'Records-Based Data'\nexport const RECORD_BASED_TASK_DESCRIPTION =\n 'Data consists of a CSV containing records as individual rows.\\nRequirements: A schema for this data type exists in the system.'\n\nexport const RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION =\n 'Select the Synapse record set that should be used for this task.'\n\nexport const AUTH_MODE_NONE_TITLE = 'Work independently'\nexport const AUTH_MODE_NONE_TOOLTIP =\n 'This is the legacy behavior. Each contributor works on their own view of the data, based on what they personally have permission to edit. Without coordination, users may overwrite each other’s annotations.'\n\nexport const AUTH_MODE_SESSION_OWNER_TITLE = 'Share with assignees only'\nexport const AUTH_MODE_SESSION_OWNER_TOOLTIP =\n 'The assigned user or team works together in one shared grid session. Only those assignees can join, and they’ll only see rows that every assignee has permission to edit.'\n\nexport const AUTH_MODE_SOURCE_BENEFACTOR_TITLE = 'Share with all editors'\nexport const AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP =\n 'Contributors work together in one shared grid session. Anyone who has edit access to the task’s data can join and edit the rows available in the session.'\n\nexport const TASK_NAME_INPUT_DESCRIPTION =\n 'Specify the task name so that contributors know which task they should work on.'\nexport const TASK_INSTRUCTIONS_INPUT_DESCRIPTION =\n '(Optional) Provide instructions on how to complete the task.'\n\nexport const ASSIGNEE_TOOLTIP =\n \"The user or team assigned to this task. If using 'Session Owner' authorization mode, the assignee is the default owner of the grid session. For team assignees in 'Session Owner' mode, any team member can access the session.\"\nexport const COLLABORATORS_TOOLTIP =\n 'Collaborators can contribute to the grid session alongside the assignee. For \"Session Owner\" authorization mode, collaborators are added as additional owners of the session.'\n\nexport const UNRECOGNIZED_TASK_TYPE_ERROR =\n 'This task has an unrecognized task type and cannot be edited here.'\nexport const AUTH_MODE_CHANGED_WARNING =\n 'Changing the Authorization Mode will clear the active session ID on this task. Any in-progress grid session linked to this task will no longer be associated with it.'\nexport const GENERIC_SAVE_ERROR_MESSAGE = 'An error occurred. Please try again.'\n\nexport const DELETE_CURATION_TASK_DIALOG_TITLE = 'Delete Task'\nexport const DELETE_CURATION_TASK_CONFIRMATION_PROMPT =\n 'Are you sure you want to delete this task? This action cannot be undone.'\nexport const DELETE_CURATION_TASK_GRID_SESSION_WARNING =\n 'Any grid sessions associated with this task will also be deleted.'\nexport const DELETE_CURATION_TASK_SUCCESS_TOAST = 'Task deleted successfully'\nexport const DELETE_CURATION_TASK_ERROR_TOAST_PREFIX = 'Error deleting task: '\n\nexport const UPLOAD_FOLDER_FINDER_TITLE = 'Select Upload Folder'\nexport const UPLOAD_FOLDER_FINDER_PROMPT =\n 'Select the folder where data files will be uploaded.'\n\nexport const FILE_VIEW_FINDER_TITLE = 'Select File View'\nexport const FILE_VIEW_FINDER_PROMPT =\n 'Select the FileView used to create grid sessions for this task.'\n\nexport const RECORD_SET_FINDER_TITLE = 'Select Record Set'\nexport const RECORD_SET_FINDER_PROMPT =\n 'Select the RecordSet used to start grid sessions for this task.'\n"],"mappings":";AAAA,IAAa,IACX,kDACW,IACX,+MAEW,IAA6B,iCAC7B,IACX,uDACW,IACX,iIAIW,IAAoC,wBACpC,IAAkC,sBAElC,IACX,6GAEW,IAAwB,mBACxB,IACX,0NAEW,IACX,yEACW,IACX,oLAEW,IAA0B,sBAC1B,IACX,kIAEW,IACX,oEAEW,IAAuB,sBACvB,IACX,iNAEW,IAAgC,6BAChC,IACX,6KAEW,IAAoC,0BACpC,IACX,6JAEW,IACX,mFACW,IACX,gEAEW,IACX,mOACW,IACX,mLAEW,IACX,sEACW,IACX,yKACW,IAA6B,wCAE7B,IAAoC,eACpC,IACX,4EACW,IACX,qEACW,IAAqC,6BACrC,IAA0C,yBAE1C,IAA6B,wBAC7B,IACX,wDAEW,IAAyB,oBACzB,IACX,mEAEW,IAA0B,qBAC1B,IACX"}
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/utils/constants.ts"],"sourcesContent":["import { TaskStatusStateEnum } from '@sage-bionetworks/synapse-client'\n\nexport const OPEN_CURATOR_ERROR_TITLE =\n 'An error occurred while trying to open Curator'\nexport const OPEN_CURATOR_UNAUTHORIZED_ERROR_MESSAGE =\n \"You don't have permission to view the existing Curator session for this task. It was likely created by another data contributor. A data manager should create a new task and assign it to you or your team.\"\n\nexport const OPEN_CURATOR_TOOLTIP_TITLE = 'Open Curator to edit metadata'\nexport const OPEN_CURATOR_NO_PERMISSION_ON_SOURCE_ERROR_MESSAGE =\n 'You do not have permission to view the Working Copy'\nexport const OPEN_CURATOR_LINK_TASK_CONFLICT_ERROR_MESSAGE =\n 'Failed to link Grid session to Curation Task. The task was updated since it was last retrieved. Please refresh and try again.'\n\n// CreateOrUpdateCurationTaskDialog\n\nexport const CREATE_CURATION_TASK_DIALOG_TITLE = 'Create Curation Task'\nexport const EDIT_CURATION_TASK_DIALOG_TITLE = 'Edit Curation Task'\n\nexport const SELECT_TASK_TYPE_DESCRIPTION =\n 'Choose the type of data this curation task will manage. This cannot be changed after the task is created.'\n\nexport const FILE_BASED_TASK_TITLE = 'File-Based Data'\nexport const FILE_BASED_TASK_DESCRIPTION =\n 'Data consists of files uploaded to Synapse.\\nRequirements: A schema for this data type exists in the system, the files have been uploaded to a Synapse folder, and a FileView has been created containing these files.'\n\nexport const FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION =\n 'Select the Synapse folder where files will be uploaded for this task.'\nexport const FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION =\n 'Select the Synapse file view that includes all files that should have curated metadata. If this task is used in Curator, this file view will determine which files are included.'\n\nexport const RECORD_BASED_TASK_TITLE = 'Records-Based Data'\nexport const RECORD_BASED_TASK_DESCRIPTION =\n 'Data consists of a CSV containing records as individual rows.\\nRequirements: A schema for this data type exists in the system.'\n\nexport const RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION =\n 'Select the Synapse record set that should be used for this task.'\n\nexport const AUTH_MODE_NONE_TITLE = 'Work independently'\nexport const AUTH_MODE_NONE_TOOLTIP =\n 'This is the legacy behavior. Each contributor works on their own view of the data, based on what they personally have permission to edit. Without coordination, users may overwrite each other’s annotations.'\n\nexport const AUTH_MODE_SESSION_OWNER_TITLE = 'Share with assignees only'\nexport const AUTH_MODE_SESSION_OWNER_TOOLTIP =\n 'The assigned user or team works together in one shared grid session. Only those assignees can join, and they’ll only see rows that every assignee has permission to edit.'\n\nexport const AUTH_MODE_SOURCE_BENEFACTOR_TITLE = 'Share with all editors'\nexport const AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP =\n 'Contributors work together in one shared grid session. Anyone who has edit access to the task’s data can join and edit the rows available in the session.'\n\nexport const TASK_NAME_INPUT_DESCRIPTION =\n 'Specify the task name so that contributors know which task they should work on.'\nexport const TASK_INSTRUCTIONS_INPUT_DESCRIPTION =\n '(Optional) Provide instructions on how to complete the task.'\n\nexport const ASSIGNEE_TOOLTIP =\n \"The user or team assigned to this task. If using 'Session Owner' authorization mode, the assignee is the default owner of the grid session. For team assignees in 'Session Owner' mode, any team member can access the session.\"\nexport const COLLABORATORS_TOOLTIP =\n 'Collaborators can contribute to the grid session alongside the assignee. For \"Session Owner\" authorization mode, collaborators are added as additional owners of the session.'\n\nexport const UNRECOGNIZED_TASK_TYPE_ERROR =\n 'This task has an unrecognized task type and cannot be edited here.'\nexport const AUTH_MODE_CHANGED_WARNING =\n 'Changing the Authorization Mode will clear the active session ID on this task. Any in-progress grid session linked to this task will no longer be associated with it.'\nexport const GENERIC_SAVE_ERROR_MESSAGE = 'An error occurred. Please try again.'\n\nexport const TASK_STATUS_INPUT_LABEL = 'Status'\n\nexport const TASK_STATUS_CONFIG: Record<\n TaskStatusStateEnum,\n { label: string; backgroundColor: string }\n> = {\n NOT_STARTED: { label: 'Not Started', backgroundColor: '#EAECEE' },\n IN_PROGRESS: { label: 'In Progress', backgroundColor: '#FFF3CD' },\n COMPLETED: { label: 'Completed', backgroundColor: '#C8E6C9' },\n CANCELED: { label: 'Canceled', backgroundColor: '#FFCCBC' },\n}\n\nexport const DELETE_CURATION_TASK_DIALOG_TITLE = 'Delete Task'\nexport const DELETE_CURATION_TASK_CONFIRMATION_PROMPT =\n 'Are you sure you want to delete this task? This action cannot be undone.'\nexport const DELETE_CURATION_TASK_GRID_SESSION_WARNING =\n 'Any grid sessions associated with this task will also be deleted.'\nexport const DELETE_CURATION_TASK_SUCCESS_TOAST = 'Task deleted successfully'\nexport const DELETE_CURATION_TASK_ERROR_TOAST_PREFIX = 'Error deleting task: '\n\nexport const UPLOAD_FOLDER_FINDER_TITLE = 'Select Upload Folder'\nexport const UPLOAD_FOLDER_FINDER_PROMPT =\n 'Select the folder where data files will be uploaded.'\n\nexport const FILE_VIEW_FINDER_TITLE = 'Select File View'\nexport const FILE_VIEW_FINDER_PROMPT =\n 'Select the FileView used to create grid sessions for this task.'\n\nexport const RECORD_SET_FINDER_TITLE = 'Select Record Set'\nexport const RECORD_SET_FINDER_PROMPT =\n 'Select the RecordSet used to start grid sessions for this task.'\n"],"mappings":";AAEA,IAAa,IACX,kDACW,IACX,+MAEW,IAA6B,iCAC7B,IACX,uDACW,IACX,iIAIW,IAAoC,wBACpC,IAAkC,sBAElC,IACX,6GAEW,IAAwB,mBACxB,IACX,0NAEW,IACX,yEACW,IACX,oLAEW,IAA0B,sBAC1B,IACX,kIAEW,IACX,oEAEW,IAAuB,sBACvB,IACX,iNAEW,IAAgC,6BAChC,IACX,6KAEW,IAAoC,0BACpC,IACX,6JAEW,IACX,mFACW,IACX,gEAEW,IACX,mOACW,IACX,mLAEW,IACX,sEACW,IACX,yKACW,IAA6B,wCAE7B,IAA0B,UAE1B,IAGT;CACF,aAAa;EAAE,OAAO;EAAe,iBAAiB;CAAU;CAChE,aAAa;EAAE,OAAO;EAAe,iBAAiB;CAAU;CAChE,WAAW;EAAE,OAAO;EAAa,iBAAiB;CAAU;CAC5D,UAAU;EAAE,OAAO;EAAY,iBAAiB;CAAU;AAC5D,GAEa,IAAoC,eACpC,IACX,4EACW,IACX,qEACW,IAAqC,6BACrC,IAA0C,yBAE1C,IAA6B,wBAC7B,IACX,wDAEW,IAAyB,oBACzB,IACX,mEAEW,IAA0B,qBAC1B,IACX"}
@@ -24,40 +24,16 @@
24
24
  }
25
25
  }
26
26
 
27
+ // Each active-filter pill is an MUI Chip (or, for custom values like DUO, a chip
28
+ // supplied by the renderer). The chips carry their own shape, size, color, and
29
+ // delete icon; this rule only provides spacing between them as they wrap.
27
30
  .SelectionCriteriaPill {
28
- padding-left: 10px;
29
- display: inline-flex;
30
- justify-content: center;
31
- border-radius: 20px;
32
- line-height: 100%;
33
- cursor: default;
34
- background-color: var(--synapse-secondary-action-color-alpha-10);
35
- color: var(--synapse-text-color-dark);
36
- font-weight: normal;
37
- margin: 5px;
38
- margin-left: 0;
39
- &:hover {
40
- background-color: var(--synapse-secondary-action-color-alpha-20);
41
- }
42
- &:hover &__btnRemove {
43
- background-color: var(--synapse-secondary-action-color-alpha-50);
44
- }
45
- span {
46
- margin: auto;
47
- }
48
-
49
- &--locked {
50
- padding: 5px 10px 5px 10px;
51
- }
31
+ margin: 0 5px 5px 0;
32
+ }
52
33
 
53
- &__btnRemove {
54
- color: var(--synapse-gray-900);
55
- border-radius: 100%;
56
- padding: 3px;
57
- margin-left: 1px;
58
- cursor: pointer;
59
- svg {
60
- font-size: 1.25rem;
61
- }
62
- }
34
+ // A custom rendered value (e.g. a DUO chip) is wrapped in an inline-flex span so
35
+ // it aligns with the neighboring chips.
36
+ .SelectionCriteriaPill--custom {
37
+ display: inline-flex;
38
+ align-items: center;
63
39
  }