synapse-react-client 4.0.28 → 4.0.29
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/components/DataGrid/SynapseGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.js +102 -94
- package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
- package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.d.ts +4 -1
- package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.d.ts.map +1 -1
- package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.js +1 -0
- package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.js.map +1 -1
- package/dist/features/curator/dashboard/components/CurationTaskCard.css +1 -1
- package/dist/features/curator/dashboard/components/CurationTaskCard.module.js +13 -10
- package/dist/features/curator/dashboard/components/CurationTaskCard.module.js.map +1 -1
- package/dist/features/curator/dashboard/components/CurationTaskCard.module.scss +20 -0
- package/dist/features/curator/dashboard/components/CurationTaskCardLayout.d.ts.map +1 -1
- package/dist/features/curator/dashboard/components/CurationTaskCardLayout.js +62 -49
- package/dist/features/curator/dashboard/components/CurationTaskCardLayout.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.js +16 -20
- package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.d.ts +1 -1
- package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.js +89 -122
- package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.d.ts +1 -1
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js +77 -102
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/FileBasedFields.d.ts +6 -1
- package/dist/features/entity/metadata-task/create-task/FileBasedFields.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/FileBasedFields.js +9 -2
- package/dist/features/entity/metadata-task/create-task/FileBasedFields.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/RecordBasedFields.d.ts +5 -1
- package/dist/features/entity/metadata-task/create-task/RecordBasedFields.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/RecordBasedFields.js +6 -2
- package/dist/features/entity/metadata-task/create-task/RecordBasedFields.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/RecordSetFields.d.ts +7 -1
- package/dist/features/entity/metadata-task/create-task/RecordSetFields.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/RecordSetFields.js +10 -2
- package/dist/features/entity/metadata-task/create-task/RecordSetFields.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/SampleSheetFields.d.ts +6 -1
- package/dist/features/entity/metadata-task/create-task/SampleSheetFields.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/SampleSheetFields.js +9 -2
- package/dist/features/entity/metadata-task/create-task/SampleSheetFields.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskStatusField.d.ts +19 -0
- package/dist/features/entity/metadata-task/create-task/TaskStatusField.d.ts.map +1 -0
- package/dist/features/entity/metadata-task/create-task/TaskStatusField.js +32 -0
- package/dist/features/entity/metadata-task/create-task/TaskStatusField.js.map +1 -0
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.d.ts +21 -0
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.d.ts.map +1 -0
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js +100 -0
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js.map +1 -0
- package/dist/features/entity/metadata-task/create-task/useComputeTypeFields.d.ts +24 -0
- package/dist/features/entity/metadata-task/create-task/useComputeTypeFields.d.ts.map +1 -0
- package/dist/features/entity/metadata-task/create-task/useComputeTypeFields.js +56 -0
- package/dist/features/entity/metadata-task/create-task/useComputeTypeFields.js.map +1 -0
- package/dist/features/entity/metadata-task/create-task/useCurateTypeFields.d.ts +26 -0
- package/dist/features/entity/metadata-task/create-task/useCurateTypeFields.d.ts.map +1 -0
- package/dist/features/entity/metadata-task/create-task/useCurateTypeFields.js +57 -0
- package/dist/features/entity/metadata-task/create-task/useCurateTypeFields.js.map +1 -0
- package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.d.ts +4 -2
- package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.js +12 -11
- package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.d.ts +9 -14
- package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.js +11 -7
- package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.d.ts +11 -12
- package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.js +17 -12
- package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.js.map +1 -1
- package/dist/features/entity/metadata-task/utils/constants.d.ts +14 -1
- package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/utils/constants.js +23 -20
- package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.d.ts +0 -18
- package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.d.ts.map +0 -1
- package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.js +0 -78
- package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurateTaskForm.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/CurateTaskForm.tsx"],"sourcesContent":["import FieldDescription from '@/components/FieldDescription'\nimport { StyledFormControl } from '@/components/styled'\nimport { HelpTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n Box,\n InputLabel,\n MenuItem,\n Select,\n Stack,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport {\n CurationTask,\n FileBasedMetadataTaskPropertiesConcreteTypeEnum,\n TaskStatusStateEnum,\n} from '@sage-bionetworks/synapse-client'\nimport noop from 'lodash-es/noop'\nimport { useState } from 'react'\nimport {\n AUTH_MODE_CHANGED_WARNING,\n AUTH_MODE_CONFIG,\n AUTH_MODE_INPUT_DESCRIPTION,\n AUTH_MODE_INPUT_LABEL,\n AUTH_MODE_OPTIONS,\n CURATE_TASK_TYPE_CONFIG,\n CURATE_TASK_TYPE_INPUT_LABEL,\n CURATE_TASK_TYPE_OPTIONS,\n DEFAULT_CURATE_TASK_TYPE,\n GENERIC_SAVE_ERROR_MESSAGE,\n TASK_STATUS_CONFIG,\n TASK_STATUS_INPUT_LABEL,\n} from '../utils/constants'\nimport {\n CurateTaskConcreteType,\n getCurateTaskConcreteType,\n instanceOfGridSupportedTaskProperties,\n} from '../utils/types'\nimport CommonTaskFields from './CommonTaskFields'\nimport FileBasedFields from './FileBasedFields'\nimport ProjectSelectorField from './ProjectSelectorField'\nimport RecordBasedFields from './RecordBasedFields'\nimport TaskFormActions from './TaskFormActions'\nimport TaskFormHeader from './TaskFormHeader'\nimport { useCurationTaskFormState } from './useCurationTaskFormState'\nimport {\n AuthorizationModeOption,\n buildCurateTaskPayload,\n FileBasedFieldsValue,\n RecordBasedFieldsValue,\n} from './utils/buildCurateTaskPayload'\n\nconst EMPTY_FILE_BASED_VALUE: FileBasedFieldsValue = {\n uploadFolderId: '',\n fileViewId: '',\n}\nconst EMPTY_RECORD_BASED_VALUE: RecordBasedFieldsValue = {\n recordSetId: '',\n}\n\nfunction toAuthorizationModeOption(\n value: string | undefined,\n): AuthorizationModeOption {\n if (value === 'SESSION_OWNER' || value === 'SOURCE_BENEFACTOR') return value\n return 'NONE'\n}\n\nexport type CurateTaskFormProps = {\n /**\n * Present when the host page already has a project context (e.g. a project's Metadata Tasks page).\n * Absent when creating from a context without one (e.g. the Curator Dashboard), in which case the user\n * is prompted to choose a project. Ignored in edit mode -- the project is always derived from `task`.\n */\n projectId?: string\n /** The task being edited. Undefined when creating a new task. */\n task?: CurationTask\n /** Called after a new task is successfully created. */\n onCreated?: (task: CurationTask) => void\n /** Called after an existing task is successfully saved. */\n onSaved?: (task: CurationTask) => void\n /** Called after the task is successfully deleted (edit mode only). */\n onDeleted?: () => void\n /** Shows a \"Back\" button (create mode) that returns to the category picker. */\n onBack?: () => void\n /** Shows a \"Cancel\" button (edit mode) that exits the page without saving. */\n onCancel?: () => void\n /**\n * Shows a \"Back to All Tasks\" button in the top-left of the page, which exits the entire\n * create/edit flow back to the task list (as opposed to `onBack`/`onCancel`, which only move\n * between steps within the flow).\n */\n onExit?: () => void\n /**\n * When present, rendered as a centered page title above the form (e.g. \"Create New Curate Task\" or\n * \"Edit Task\"). The host page is responsible for supplying this rather than rendering its own\n * heading, so the title and the single-column form below it share one centered layout.\n */\n pageTitle?: string\n /** When present, rendered as a centered subtitle below `pageTitle`. */\n pageDescription?: string\n}\n\n/**\n * The create/edit form for a Curate Data curation task (File-Based / Records-Based). Used as the\n * `curate` step of the create wizard (`CreateCurationTaskFlow`) and directly by `EditCurationTaskPage`.\n */\nexport default function CurateTaskForm(props: CurateTaskFormProps) {\n const {\n projectId,\n task,\n onCreated,\n onSaved,\n onDeleted,\n onBack,\n onCancel,\n onExit,\n pageTitle,\n pageDescription,\n } = props\n\n const form = useCurationTaskFormState({ projectId, task, onDeleted })\n const { isEditMode } = form\n\n const existingCurateConcreteType = getCurateTaskConcreteType(\n task?.taskProperties,\n )\n\n const [selectedConcreteType, setSelectedConcreteType] =\n useState<CurateTaskConcreteType>(\n () => existingCurateConcreteType ?? DEFAULT_CURATE_TASK_TYPE,\n )\n\n const [fileBasedValue, setFileBasedValue] = useState<FileBasedFieldsValue>(\n () => {\n const tp = task?.taskProperties\n if (tp?.concreteType === CURATE_TASK_TYPE_OPTIONS[0]) {\n return {\n uploadFolderId: tp.uploadFolderId ?? '',\n fileViewId: tp.fileViewId ?? '',\n }\n }\n return EMPTY_FILE_BASED_VALUE\n },\n )\n const [recordBasedValue, setRecordBasedValue] =\n useState<RecordBasedFieldsValue>(() => {\n const tp = task?.taskProperties\n if (tp?.concreteType === CURATE_TASK_TYPE_OPTIONS[1]) {\n return { recordSetId: tp.recordSetId ?? '' }\n }\n return EMPTY_RECORD_BASED_VALUE\n })\n\n const initialAuthorizationMode = toAuthorizationModeOption(\n instanceOfGridSupportedTaskProperties(task?.taskProperties)\n ? task.taskProperties.suggestedAuthorizationMode\n : undefined,\n )\n const [authorizationMode, setAuthorizationMode] = useState(\n initialAuthorizationMode,\n )\n\n const isTypeSpecificValid =\n selectedConcreteType === CURATE_TASK_TYPE_OPTIONS[0]\n ? !!fileBasedValue.uploadFolderId.trim() &&\n !!fileBasedValue.fileViewId.trim()\n : !!recordBasedValue.recordSetId.trim()\n const isValid =\n form.isCommonFieldsValid && form.isProjectValid && isTypeSpecificValid\n\n const authModeChanged =\n isEditMode && authorizationMode !== initialAuthorizationMode\n\n async function handleSubmit() {\n const payload = buildCurateTaskPayload({\n existingTask: isEditMode ? task : undefined,\n projectId: form.effectiveProjectId,\n dataType: form.dataType,\n instructions: form.instructions,\n assigneePrincipalId: form.assigneePrincipalId,\n curateTypeFields: {\n concreteType: selectedConcreteType,\n authorizationMode,\n fileBased: fileBasedValue,\n recordBased: recordBasedValue,\n },\n })\n\n const result = await form.submitTaskAndStatus(payload)\n if (isEditMode) {\n onSaved?.(result)\n } else {\n onCreated?.(result)\n }\n }\n\n return (\n <Stack gap={3}>\n <TaskFormHeader\n onExit={onExit}\n pageTitle={pageTitle}\n pageDescription={pageDescription}\n />\n\n <Stack gap={3} sx={{ width: '100%', maxWidth: 700, mx: 'auto' }}>\n <StyledFormControl fullWidth>\n <InputLabel id=\"curate-task-type-label\">\n {CURATE_TASK_TYPE_INPUT_LABEL}\n </InputLabel>\n <Select\n labelId=\"curate-task-type-label\"\n label={CURATE_TASK_TYPE_INPUT_LABEL}\n value={selectedConcreteType}\n disabled={isEditMode}\n onChange={e => setSelectedConcreteType(e.target.value)}\n >\n {CURATE_TASK_TYPE_OPTIONS.map(concreteType => (\n <MenuItem key={concreteType} value={concreteType}>\n {CURATE_TASK_TYPE_CONFIG[concreteType].label}\n </MenuItem>\n ))}\n </Select>\n </StyledFormControl>\n\n {form.showProjectSelector && (\n <ProjectSelectorField\n value={form.selectedProjectId}\n onChange={form.setSelectedProjectId}\n />\n )}\n\n <CommonTaskFields\n dataType={form.dataType}\n onDataTypeChange={form.setDataType}\n dueDate={form.displayedDueDate}\n onDueDateChange={form.setPendingDueDate}\n instructions={form.instructions}\n onInstructionsChange={form.setInstructions}\n assigneePrincipalId={form.assigneePrincipalId}\n onAssigneePrincipalIdChange={form.setAssigneePrincipalId}\n />\n\n {isEditMode && (\n <StyledFormControl fullWidth>\n <InputLabel id=\"curate-task-status-label\">\n {TASK_STATUS_INPUT_LABEL}\n </InputLabel>\n <Select\n labelId=\"curate-task-status-label\"\n value={form.displayedStatusState ?? ''}\n label={TASK_STATUS_INPUT_LABEL}\n disabled={form.isStatusFetching || form.currentTaskStatus == null}\n onChange={e =>\n form.setPendingStatusState(\n e.target.value as TaskStatusStateEnum,\n )\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\n {selectedConcreteType ===\n FileBasedMetadataTaskPropertiesConcreteTypeEnum.org_sagebionetworks_repo_model_curation_metadata_FileBasedMetadataTaskProperties ? (\n <FileBasedFields\n value={fileBasedValue}\n onChange={setFileBasedValue}\n disabled={isEditMode}\n />\n ) : (\n <RecordBasedFields\n value={recordBasedValue}\n onChange={setRecordBasedValue}\n disabled={isEditMode}\n />\n )}\n\n <StyledFormControl fullWidth>\n <InputLabel id=\"curate-task-auth-mode-label\">\n {AUTH_MODE_INPUT_LABEL}\n </InputLabel>\n <FieldDescription>{AUTH_MODE_INPUT_DESCRIPTION}</FieldDescription>\n <Select\n labelId=\"curate-task-auth-mode-label\"\n label={AUTH_MODE_INPUT_LABEL}\n value={authorizationMode}\n onChange={e =>\n setAuthorizationMode(e.target.value as AuthorizationModeOption)\n }\n >\n {AUTH_MODE_OPTIONS.map(mode => (\n <MenuItem key={mode} value={mode}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">\n {AUTH_MODE_CONFIG[mode].label}\n </Typography>\n <Tooltip title={AUTH_MODE_CONFIG[mode].tooltip}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n </MenuItem>\n ))}\n </Select>\n </StyledFormControl>\n\n {authModeChanged && (\n <Alert severity=\"warning\">{AUTH_MODE_CHANGED_WARNING}</Alert>\n )}\n {form.error && (\n <Alert severity=\"error\">\n {form.error.reason ?? GENERIC_SAVE_ERROR_MESSAGE}\n </Alert>\n )}\n </Stack>\n\n <TaskFormActions\n isEditMode={isEditMode}\n isPending={form.isPending}\n isValid={isValid}\n onSubmit={() => void handleSubmit().catch(noop)}\n onBack={onBack}\n onCancel={onCancel}\n canDelete={form.canDelete}\n showDeleteConfirmation={form.showDeleteConfirmation}\n onRequestDelete={() => form.setShowDeleteConfirmation(true)}\n onConfirmDelete={() => {\n if (task?.taskId != null) form.deleteTask(task.taskId)\n }}\n onCancelDelete={() => form.setShowDeleteConfirmation(false)}\n isDeletePending={form.isDeletePending}\n />\n </Stack>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CurateTaskForm.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/CurateTaskForm.tsx"],"sourcesContent":["import FieldDescription from '@/components/FieldDescription'\nimport { StyledFormControl } from '@/components/styled'\nimport { HelpTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n Box,\n InputLabel,\n MenuItem,\n Select,\n Stack,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport {\n CurationTask,\n FileBasedMetadataTaskPropertiesConcreteTypeEnum,\n} from '@sage-bionetworks/synapse-client'\nimport noop from 'lodash-es/noop'\nimport {\n AUTH_MODE_CHANGED_WARNING,\n AUTH_MODE_CONFIG,\n AUTH_MODE_INPUT_DESCRIPTION,\n AUTH_MODE_INPUT_LABEL,\n AUTH_MODE_OPTIONS,\n CURATE_TASK_DISABLED_STATUS_STATES,\n CURATE_TASK_TYPE_CONFIG,\n CURATE_TASK_TYPE_INPUT_LABEL,\n CURATE_TASK_TYPE_OPTIONS,\n GENERIC_SAVE_ERROR_MESSAGE,\n} from '../utils/constants'\nimport CommonTaskFields from './CommonTaskFields'\nimport FileBasedFields from './FileBasedFields'\nimport ProjectSelectorField from './ProjectSelectorField'\nimport RecordBasedFields from './RecordBasedFields'\nimport TaskFormActions from './TaskFormActions'\nimport TaskFormHeader from './TaskFormHeader'\nimport TaskStatusField from './TaskStatusField'\nimport { useCurateTypeFields } from './useCurateTypeFields'\nimport { useCurationTaskFormState } from './useCurationTaskFormState'\nimport {\n AuthorizationModeOption,\n buildCurateTaskPayload,\n} from './utils/buildCurateTaskPayload'\n\nexport type CurateTaskFormProps = {\n /**\n * Present when the host page already has a project context (e.g. a project's Metadata Tasks page).\n * Absent when creating from a context without one (e.g. the Curator Dashboard), in which case the user\n * is prompted to choose a project. Ignored in edit mode -- the project is always derived from `task`.\n */\n projectId?: string\n /** The task being edited. Undefined when creating a new task. */\n task?: CurationTask\n /** Called after a new task is successfully created. */\n onCreated?: (task: CurationTask) => void\n /** Called after an existing task is successfully saved. */\n onSaved?: (task: CurationTask) => void\n /** Called after the task is successfully deleted (edit mode only). */\n onDeleted?: () => void\n /** Shows a \"Back\" button (create mode) that returns to the category picker. */\n onBack?: () => void\n /** Shows a \"Cancel\" button (edit mode) that exits the page without saving. */\n onCancel?: () => void\n /**\n * Shows a \"Back to All Tasks\" button in the top-left of the page, which exits the entire\n * create/edit flow back to the task list (as opposed to `onBack`/`onCancel`, which only move\n * between steps within the flow).\n */\n onExit?: () => void\n /**\n * When present, rendered as a centered page title above the form (e.g. \"Create New Curate Task\" or\n * \"Edit Task\"). The host page is responsible for supplying this rather than rendering its own\n * heading, so the title and the single-column form below it share one centered layout.\n */\n pageTitle?: string\n /** When present, rendered as a centered subtitle below `pageTitle`. */\n pageDescription?: string\n}\n\n/**\n * The create/edit form for a Curate Data curation task (File-Based / Records-Based). Used as the\n * `curate` step of the create wizard (`getCurationTaskFlowRoutes`) and directly by `EditCurationTaskPage`.\n */\nexport default function CurateTaskForm(props: CurateTaskFormProps) {\n const {\n projectId,\n task,\n onCreated,\n onSaved,\n onDeleted,\n onBack,\n onCancel,\n onExit,\n pageTitle,\n pageDescription,\n } = props\n\n const form = useCurationTaskFormState({ projectId, task, onDeleted })\n const { isEditMode } = form\n\n const typeFields = useCurateTypeFields({\n taskProperties: task?.taskProperties,\n isEditMode,\n })\n\n const isValid =\n form.isCommonFieldsValid && form.isProjectValid && typeFields.isValid\n\n async function handleSubmit() {\n const payload = buildCurateTaskPayload({\n existingTask: isEditMode ? task : undefined,\n projectId: form.effectiveProjectId,\n dataType: form.dataType,\n instructions: form.instructions,\n assigneePrincipalId: form.assigneePrincipalId,\n curateTypeFields: {\n ...typeFields.state,\n authorizationMode: typeFields.authorizationMode,\n },\n })\n\n const result = await form.submitTaskAndStatus(payload)\n if (isEditMode) {\n onSaved?.(result)\n } else {\n onCreated?.(result)\n }\n }\n\n return (\n <Stack gap={3}>\n <TaskFormHeader\n onExit={onExit}\n pageTitle={pageTitle}\n pageDescription={pageDescription}\n />\n\n <Stack gap={3} sx={{ width: '100%', maxWidth: 700, mx: 'auto' }}>\n <StyledFormControl fullWidth>\n <InputLabel id=\"curate-task-type-label\">\n {CURATE_TASK_TYPE_INPUT_LABEL}\n </InputLabel>\n <Select\n labelId=\"curate-task-type-label\"\n label={CURATE_TASK_TYPE_INPUT_LABEL}\n value={typeFields.state.concreteType}\n disabled={isEditMode}\n onChange={e => typeFields.setConcreteType(e.target.value)}\n >\n {CURATE_TASK_TYPE_OPTIONS.map(concreteType => (\n <MenuItem key={concreteType} value={concreteType}>\n {CURATE_TASK_TYPE_CONFIG[concreteType].label}\n </MenuItem>\n ))}\n </Select>\n </StyledFormControl>\n\n {form.showProjectSelector && (\n <ProjectSelectorField\n value={form.selectedProjectId}\n onChange={form.setSelectedProjectId}\n />\n )}\n\n <CommonTaskFields\n dataType={form.dataType}\n onDataTypeChange={form.setDataType}\n dueDate={form.displayedDueDate}\n onDueDateChange={form.setPendingDueDate}\n instructions={form.instructions}\n onInstructionsChange={form.setInstructions}\n assigneePrincipalId={form.assigneePrincipalId}\n onAssigneePrincipalIdChange={form.setAssigneePrincipalId}\n />\n\n {isEditMode && (\n <TaskStatusField\n labelId=\"curate-task-status-label\"\n value={form.displayedStatusState}\n onChange={form.setPendingStatusState}\n disabled={form.isStatusFetching || form.currentTaskStatus == null}\n disabledStates={CURATE_TASK_DISABLED_STATUS_STATES}\n />\n )}\n\n {typeFields.state.concreteType ===\n FileBasedMetadataTaskPropertiesConcreteTypeEnum.org_sagebionetworks_repo_model_curation_metadata_FileBasedMetadataTaskProperties ? (\n <FileBasedFields\n value={typeFields.state.value}\n onChange={typeFields.setValue}\n disabled={isEditMode}\n />\n ) : (\n <RecordBasedFields\n value={typeFields.state.value}\n onChange={typeFields.setValue}\n disabled={isEditMode}\n />\n )}\n\n <StyledFormControl fullWidth>\n <InputLabel id=\"curate-task-auth-mode-label\">\n {AUTH_MODE_INPUT_LABEL}\n </InputLabel>\n <FieldDescription>{AUTH_MODE_INPUT_DESCRIPTION}</FieldDescription>\n <Select\n labelId=\"curate-task-auth-mode-label\"\n label={AUTH_MODE_INPUT_LABEL}\n value={typeFields.authorizationMode}\n onChange={e =>\n typeFields.setAuthorizationMode(\n e.target.value as AuthorizationModeOption,\n )\n }\n >\n {AUTH_MODE_OPTIONS.map(mode => (\n <MenuItem key={mode} value={mode}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">\n {AUTH_MODE_CONFIG[mode].label}\n </Typography>\n <Tooltip title={AUTH_MODE_CONFIG[mode].tooltip}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n </MenuItem>\n ))}\n </Select>\n </StyledFormControl>\n\n {typeFields.authModeChanged && (\n <Alert severity=\"warning\">{AUTH_MODE_CHANGED_WARNING}</Alert>\n )}\n {form.error && (\n <Alert severity=\"error\">\n {form.error.reason ?? GENERIC_SAVE_ERROR_MESSAGE}\n </Alert>\n )}\n </Stack>\n\n <TaskFormActions\n isEditMode={isEditMode}\n isPending={form.isPending}\n isValid={isValid}\n onSubmit={() => void handleSubmit().catch(noop)}\n onBack={onBack}\n onCancel={onCancel}\n canDelete={form.canDelete}\n showDeleteConfirmation={form.showDeleteConfirmation}\n onRequestDelete={() => form.setShowDeleteConfirmation(true)}\n onConfirmDelete={() => {\n if (task?.taskId != null) form.deleteTask(task.taskId)\n }}\n onCancelDelete={() => form.setShowDeleteConfirmation(false)}\n isDeletePending={form.isDeletePending}\n />\n </Stack>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
export type FileBasedFieldsValue = {
|
|
2
|
+
uploadFolderId: string;
|
|
3
|
+
fileViewId: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const EMPTY_FILE_BASED_VALUE: FileBasedFieldsValue;
|
|
6
|
+
export declare function isFileBasedFieldsValueValid(value: FileBasedFieldsValue): boolean;
|
|
2
7
|
export type FileBasedFieldsProps = {
|
|
3
8
|
value: FileBasedFieldsValue;
|
|
4
9
|
onChange: (value: FileBasedFieldsValue) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileBasedFields.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/FileBasedFields.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileBasedFields.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/FileBasedFields.tsx"],"names":[],"mappings":"AAcA,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,oBAGpC,CAAA;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAET;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAA;IAC/C,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAiDlE"}
|
|
@@ -6,7 +6,14 @@ import { Stack as l } from "@mui/material";
|
|
|
6
6
|
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
7
7
|
import { EntityType as f } from "@sage-bionetworks/synapse-client";
|
|
8
8
|
//#region src/features/entity/metadata-task/create-task/FileBasedFields.tsx
|
|
9
|
-
|
|
9
|
+
var p = {
|
|
10
|
+
uploadFolderId: "",
|
|
11
|
+
fileViewId: ""
|
|
12
|
+
};
|
|
13
|
+
function m(e) {
|
|
14
|
+
return !!e.uploadFolderId.trim() && !!e.fileViewId.trim();
|
|
15
|
+
}
|
|
16
|
+
function h(p) {
|
|
10
17
|
let { value: m, onChange: h, disabled: g = !1 } = p;
|
|
11
18
|
return /* @__PURE__ */ d(l, {
|
|
12
19
|
gap: 2,
|
|
@@ -60,6 +67,6 @@ function p(p) {
|
|
|
60
67
|
});
|
|
61
68
|
}
|
|
62
69
|
//#endregion
|
|
63
|
-
export { p as default };
|
|
70
|
+
export { p as EMPTY_FILE_BASED_VALUE, h as default, m as isFileBasedFieldsValueValid };
|
|
64
71
|
|
|
65
72
|
//# sourceMappingURL=FileBasedFields.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileBasedFields.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/FileBasedFields.tsx"],"sourcesContent":["import EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { Stack } from '@mui/material'\nimport {\n FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION,\n FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION,\n FILE_VIEW_FINDER_PROMPT,\n FILE_VIEW_FINDER_TITLE,\n UPLOAD_FOLDER_FINDER_PROMPT,\n UPLOAD_FOLDER_FINDER_TITLE,\n} from '../utils/constants'\
|
|
1
|
+
{"version":3,"file":"FileBasedFields.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/FileBasedFields.tsx"],"sourcesContent":["import EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { Stack } from '@mui/material'\nimport {\n FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION,\n FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION,\n FILE_VIEW_FINDER_PROMPT,\n FILE_VIEW_FINDER_TITLE,\n UPLOAD_FOLDER_FINDER_PROMPT,\n UPLOAD_FOLDER_FINDER_TITLE,\n} from '../utils/constants'\n\nexport type FileBasedFieldsValue = {\n uploadFolderId: string\n fileViewId: string\n}\n\nexport const EMPTY_FILE_BASED_VALUE: FileBasedFieldsValue = {\n uploadFolderId: '',\n fileViewId: '',\n}\n\nexport function isFileBasedFieldsValueValid(\n value: FileBasedFieldsValue,\n): boolean {\n return !!value.uploadFolderId.trim() && !!value.fileViewId.trim()\n}\n\nexport type FileBasedFieldsProps = {\n value: FileBasedFieldsValue\n onChange: (value: FileBasedFieldsValue) => void\n /** True in edit mode, since these identity fields are immutable once the task is created. */\n disabled?: boolean\n}\n\n/**\n * Fields specific to a File-Based Curate Data task (`FileBasedMetadataTaskProperties`): the folder\n * files are uploaded to, and the FileView used to start grid sessions.\n */\nexport default function FileBasedFields(props: FileBasedFieldsProps) {\n const { value, onChange, disabled = false } = props\n\n return (\n <Stack gap={2}>\n <EntityIdTextField\n label=\"Upload Folder ID\"\n value={value.uploadFolderId}\n description={FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION}\n onChange={uploadFolderId => onChange({ ...value, uploadFolderId })}\n disabled={disabled}\n required\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: [EntityType.folder],\n },\n }}\n />\n <EntityIdTextField\n label=\"File View ID\"\n value={value.fileViewId}\n description={FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION}\n onChange={fileViewId => onChange({ ...value, fileViewId })}\n disabled={disabled}\n required\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"],"mappings":";;;;;;;;AAmBA,IAAa,IAA+C;CAC1D,gBAAgB;CAChB,YAAY;AACd;AAEA,SAAgB,EACd,GACS;CACT,OAAO,CAAC,CAAC,EAAM,eAAe,KAAK,KAAK,CAAC,CAAC,EAAM,WAAW,KAAK;AAClE;AAaA,SAAwB,EAAgB,GAA6B;CACnE,IAAM,EAAE,UAAO,aAAU,cAAW,OAAU;CAE9C,OACE,kBAAC,GAAD;EAAO,KAAK;YAAZ,CACE,kBAAC,GAAD;GACE,OAAM;GACN,OAAO,EAAM;GACb,aAAa;GACb,WAAU,MAAkB,EAAS;IAAE,GAAG;IAAO;GAAe,CAAC;GACvD;GACV,UAAA;GACA,wBAAwB;IACtB,OAAO;IACP,YAAY;IACZ,mBAAmB;IACnB,eAAe;KACb,cAAc,EAAY;KAC1B,kBAAkB;KAClB,gBAAgB;KAChB,UAAU;KACV,kBAAkB,EAAqB;KACvC,iBAAiB,CAAC,EAAW,MAAM;IACrC;GACF;EACD,CAAA,GACD,kBAAC,GAAD;GACE,OAAM;GACN,OAAO,EAAM;GACb,aAAa;GACb,WAAU,MAAc,EAAS;IAAE,GAAG;IAAO;GAAW,CAAC;GAC/C;GACV,UAAA;GACA,wBAAwB;IACtB,OAAO;IACP,YAAY;IACZ,mBAAmB;IACnB,eAAe;KACb,cAAc,EAAY;KAC1B,kBAAkB;KAClB,gBAAgB;KAChB,UAAU;KACV,kBAAkB,EAAqB;KACvC,iBAAiB,CAAC,EAAW,UAAU;IACzC;GACF;EACD,CAAA,CACI;;AAEX"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
export type RecordBasedFieldsValue = {
|
|
2
|
+
recordSetId: string;
|
|
3
|
+
};
|
|
4
|
+
export declare const EMPTY_RECORD_BASED_VALUE: RecordBasedFieldsValue;
|
|
5
|
+
export declare function isRecordBasedFieldsValueValid(value: RecordBasedFieldsValue): boolean;
|
|
2
6
|
export type RecordBasedFieldsProps = {
|
|
3
7
|
value: RecordBasedFieldsValue;
|
|
4
8
|
onChange: (value: RecordBasedFieldsValue) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordBasedFields.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/RecordBasedFields.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RecordBasedFields.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/RecordBasedFields.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,sBAEtC,CAAA;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAET;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,sBAAsB,CAAA;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAA;IACjD,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CA0BtE"}
|
|
@@ -5,7 +5,11 @@ import a from "../../../../components/EntityFinder/EntityIdTextField.js";
|
|
|
5
5
|
import { jsx as o } from "react/jsx-runtime";
|
|
6
6
|
import { EntityType as s } from "@sage-bionetworks/synapse-client";
|
|
7
7
|
//#region src/features/entity/metadata-task/create-task/RecordBasedFields.tsx
|
|
8
|
-
|
|
8
|
+
var c = { recordSetId: "" };
|
|
9
|
+
function l(e) {
|
|
10
|
+
return !!e.recordSetId.trim();
|
|
11
|
+
}
|
|
12
|
+
function u(c) {
|
|
9
13
|
let { value: l, onChange: u, disabled: d = !1 } = c;
|
|
10
14
|
return /* @__PURE__ */ o(a, {
|
|
11
15
|
label: "Record Set ID",
|
|
@@ -33,6 +37,6 @@ function c(c) {
|
|
|
33
37
|
});
|
|
34
38
|
}
|
|
35
39
|
//#endregion
|
|
36
|
-
export { c as default };
|
|
40
|
+
export { c as EMPTY_RECORD_BASED_VALUE, u as default, l as isRecordBasedFieldsValueValid };
|
|
37
41
|
|
|
38
42
|
//# sourceMappingURL=RecordBasedFields.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordBasedFields.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/RecordBasedFields.tsx"],"sourcesContent":["import EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION,\n RECORD_SET_FINDER_PROMPT,\n RECORD_SET_FINDER_TITLE,\n} from '../utils/constants'\
|
|
1
|
+
{"version":3,"file":"RecordBasedFields.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/RecordBasedFields.tsx"],"sourcesContent":["import EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION,\n RECORD_SET_FINDER_PROMPT,\n RECORD_SET_FINDER_TITLE,\n} from '../utils/constants'\n\nexport type RecordBasedFieldsValue = {\n recordSetId: string\n}\n\nexport const EMPTY_RECORD_BASED_VALUE: RecordBasedFieldsValue = {\n recordSetId: '',\n}\n\nexport function isRecordBasedFieldsValueValid(\n value: RecordBasedFieldsValue,\n): boolean {\n return !!value.recordSetId.trim()\n}\n\nexport type RecordBasedFieldsProps = {\n value: RecordBasedFieldsValue\n onChange: (value: RecordBasedFieldsValue) => void\n /** True in edit mode, since this identity field is immutable once the task is created. */\n disabled?: boolean\n}\n\n/**\n * Fields specific to a Records-Based Curate Data task (`RecordBasedMetadataTaskProperties`): the\n * RecordSet used to start grid sessions.\n */\nexport default function RecordBasedFields(props: RecordBasedFieldsProps) {\n const { value, onChange, disabled = false } = props\n\n return (\n <EntityIdTextField\n label=\"Record Set ID\"\n value={value.recordSetId}\n description={RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION}\n onChange={recordSetId => onChange({ ...value, recordSetId })}\n disabled={disabled}\n required\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"],"mappings":";;;;;;;AAcA,IAAa,IAAmD,EAC9D,aAAa,GACf;AAEA,SAAgB,EACd,GACS;CACT,OAAO,CAAC,CAAC,EAAM,YAAY,KAAK;AAClC;AAaA,SAAwB,EAAkB,GAA+B;CACvE,IAAM,EAAE,UAAO,aAAU,cAAW,OAAU;CAE9C,OACE,kBAAC,GAAD;EACE,OAAM;EACN,OAAO,EAAM;EACb,aAAa;EACb,WAAU,MAAe,EAAS;GAAE,GAAG;GAAO;EAAY,CAAC;EACjD;EACV,UAAA;EACA,wBAAwB;GACtB,OAAO;GACP,YAAY;GACZ,mBAAmB;GACnB,eAAe;IACb,cAAc,EAAY;IAC1B,kBAAkB;IAClB,gBAAgB;IAChB,UAAU;IACV,kBAAkB,EAAqB;IACvC,iBAAiB,CAAC,EAAW,SAAS;GACxC;EACF;CACD,CAAA;AAEL"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
export type RecordSetFieldsValue = {
|
|
2
|
+
folderId: string;
|
|
3
|
+
instructions: string;
|
|
4
|
+
destinationTaskId: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const EMPTY_RECORD_SET_VALUE: RecordSetFieldsValue;
|
|
7
|
+
export declare function isRecordSetFieldsValueValid(value: RecordSetFieldsValue): boolean;
|
|
2
8
|
export type RecordSetFieldsProps = {
|
|
3
9
|
value: RecordSetFieldsValue;
|
|
4
10
|
onChange: (value: RecordSetFieldsValue) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordSetFields.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/RecordSetFields.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RecordSetFields.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/RecordSetFields.tsx"],"names":[],"mappings":"AAmBA,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,oBAIpC,CAAA;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAMT;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAA;CAChD,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAyDlE"}
|
|
@@ -9,7 +9,15 @@ import { Stack as m } from "@mui/material";
|
|
|
9
9
|
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
10
10
|
import { EntityType as _ } from "@sage-bionetworks/synapse-client";
|
|
11
11
|
//#region src/features/entity/metadata-task/create-task/RecordSetFields.tsx
|
|
12
|
-
|
|
12
|
+
var v = {
|
|
13
|
+
folderId: "",
|
|
14
|
+
instructions: "",
|
|
15
|
+
destinationTaskId: ""
|
|
16
|
+
};
|
|
17
|
+
function y(e) {
|
|
18
|
+
return !!e.folderId.trim() && !!e.instructions.trim() && p(e.destinationTaskId);
|
|
19
|
+
}
|
|
20
|
+
function b(v) {
|
|
13
21
|
let { value: y, onChange: b } = v, x = p(y.destinationTaskId, { allowEmpty: !0 });
|
|
14
22
|
return /* @__PURE__ */ g(m, {
|
|
15
23
|
gap: 2,
|
|
@@ -67,6 +75,6 @@ function v(v) {
|
|
|
67
75
|
});
|
|
68
76
|
}
|
|
69
77
|
//#endregion
|
|
70
|
-
export { v as default };
|
|
78
|
+
export { v as EMPTY_RECORD_SET_VALUE, b as default, y as isRecordSetFieldsValueValid };
|
|
71
79
|
|
|
72
80
|
//# sourceMappingURL=RecordSetFields.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordSetFields.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/RecordSetFields.tsx"],"sourcesContent":["import EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { TextField } from '@/components/TextField'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { Stack } from '@mui/material'\nimport {\n RECORD_SET_DESTINATION_TASK_ID_DESCRIPTION,\n RECORD_SET_DESTINATION_TASK_ID_LABEL,\n RECORD_SET_FOLDER_FINDER_PROMPT,\n RECORD_SET_FOLDER_FINDER_TITLE,\n RECORD_SET_FOLDER_ID_DESCRIPTION,\n RECORD_SET_FOLDER_ID_LABEL,\n RECORD_SET_INSTRUCTIONS_DESCRIPTION,\n RECORD_SET_INSTRUCTIONS_LABEL,\n TASK_ID_FIELD_INVALID_ERROR_MESSAGE,\n} from '../utils/constants'\nimport {
|
|
1
|
+
{"version":3,"file":"RecordSetFields.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/RecordSetFields.tsx"],"sourcesContent":["import EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { TextField } from '@/components/TextField'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { Stack } from '@mui/material'\nimport {\n RECORD_SET_DESTINATION_TASK_ID_DESCRIPTION,\n RECORD_SET_DESTINATION_TASK_ID_LABEL,\n RECORD_SET_FOLDER_FINDER_PROMPT,\n RECORD_SET_FOLDER_FINDER_TITLE,\n RECORD_SET_FOLDER_ID_DESCRIPTION,\n RECORD_SET_FOLDER_ID_LABEL,\n RECORD_SET_INSTRUCTIONS_DESCRIPTION,\n RECORD_SET_INSTRUCTIONS_LABEL,\n TASK_ID_FIELD_INVALID_ERROR_MESSAGE,\n} from '../utils/constants'\nimport { isValidTaskIdInput } from './utils/taskIdValidation'\n\nexport type RecordSetFieldsValue = {\n folderId: string\n instructions: string\n destinationTaskId: string\n}\n\nexport const EMPTY_RECORD_SET_VALUE: RecordSetFieldsValue = {\n folderId: '',\n instructions: '',\n destinationTaskId: '',\n}\n\nexport function isRecordSetFieldsValueValid(\n value: RecordSetFieldsValue,\n): boolean {\n return (\n !!value.folderId.trim() &&\n !!value.instructions.trim() &&\n isValidTaskIdInput(value.destinationTaskId)\n )\n}\n\nexport type RecordSetFieldsProps = {\n value: RecordSetFieldsValue\n onChange: (value: RecordSetFieldsValue) => void\n}\n\n/**\n * Fields specific to a Record Set Generation compute task\n * (`RecordSetGenerationExecutionProperties`). Note that `instructions` here is the free-text prompt sent\n * to the transformation agent, distinct from the task-level `CommonTaskFields` instructions shown to the\n * human assignee.\n */\nexport default function RecordSetFields(props: RecordSetFieldsProps) {\n const { value, onChange } = props\n\n const destinationTaskIdIsValid = isValidTaskIdInput(value.destinationTaskId, {\n allowEmpty: true,\n })\n\n return (\n <Stack gap={2}>\n <EntityIdTextField\n label={RECORD_SET_FOLDER_ID_LABEL}\n value={value.folderId}\n onChange={folderId => onChange({ ...value, folderId })}\n description={RECORD_SET_FOLDER_ID_DESCRIPTION}\n required\n entityFinderModalProps={{\n title: RECORD_SET_FOLDER_FINDER_TITLE,\n promptCopy: RECORD_SET_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: [EntityType.folder],\n },\n }}\n />\n <TextField\n label={RECORD_SET_INSTRUCTIONS_LABEL}\n fullWidth\n required\n multiline\n minRows={3}\n value={value.instructions}\n onChange={e => onChange({ ...value, instructions: e.target.value })}\n description={RECORD_SET_INSTRUCTIONS_DESCRIPTION}\n />\n <TextField\n label={RECORD_SET_DESTINATION_TASK_ID_LABEL}\n fullWidth\n required\n value={value.destinationTaskId}\n onChange={e =>\n onChange({ ...value, destinationTaskId: e.target.value })\n }\n description={RECORD_SET_DESTINATION_TASK_ID_DESCRIPTION}\n error={!destinationTaskIdIsValid}\n helperText={\n destinationTaskIdIsValid\n ? undefined\n : TASK_ID_FIELD_INVALID_ERROR_MESSAGE\n }\n />\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;;;;AAyBA,IAAa,IAA+C;CAC1D,UAAU;CACV,cAAc;CACd,mBAAmB;AACrB;AAEA,SAAgB,EACd,GACS;CACT,OACE,CAAC,CAAC,EAAM,SAAS,KAAK,KACtB,CAAC,CAAC,EAAM,aAAa,KAAK,KAC1B,EAAmB,EAAM,iBAAiB;AAE9C;AAaA,SAAwB,EAAgB,GAA6B;CACnE,IAAM,EAAE,UAAO,gBAAa,GAEtB,IAA2B,EAAmB,EAAM,mBAAmB,EAC3E,YAAY,GACd,CAAC;CAED,OACE,kBAAC,GAAD;EAAO,KAAK;YAAZ;GACE,kBAAC,GAAD;IACE,OAAO;IACP,OAAO,EAAM;IACb,WAAU,MAAY,EAAS;KAAE,GAAG;KAAO;IAAS,CAAC;IACrD,aAAa;IACb,UAAA;IACA,wBAAwB;KACtB,OAAO;KACP,YAAY;KACZ,mBAAmB;KACnB,eAAe;MACb,cAAc,EAAY;MAC1B,kBAAkB;MAClB,gBAAgB;MAChB,UAAU;MACV,kBAAkB,EAAqB;MACvC,iBAAiB,CAAC,EAAW,MAAM;KACrC;IACF;GACD,CAAA;GACD,kBAAC,GAAD;IACE,OAAO;IACP,WAAA;IACA,UAAA;IACA,WAAA;IACA,SAAS;IACT,OAAO,EAAM;IACb,WAAU,MAAK,EAAS;KAAE,GAAG;KAAO,cAAc,EAAE,OAAO;IAAM,CAAC;IAClE,aAAa;GACd,CAAA;GACD,kBAAC,GAAD;IACE,OAAO;IACP,WAAA;IACA,UAAA;IACA,OAAO,EAAM;IACb,WAAU,MACR,EAAS;KAAE,GAAG;KAAO,mBAAmB,EAAE,OAAO;IAAM,CAAC;IAE1D,aAAa;IACb,OAAO,CAAC;IACR,YACE,IACI,KAAA,IACA;GAEP,CAAA;EACI;;AAEX"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
export type SampleSheetFieldsValue = {
|
|
2
|
+
inputTaskId: string;
|
|
3
|
+
destinationTaskId: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const EMPTY_SAMPLE_SHEET_VALUE: SampleSheetFieldsValue;
|
|
6
|
+
export declare function isSampleSheetFieldsValueValid(value: SampleSheetFieldsValue): boolean;
|
|
2
7
|
export type SampleSheetFieldsProps = {
|
|
3
8
|
value: SampleSheetFieldsValue;
|
|
4
9
|
onChange: (value: SampleSheetFieldsValue) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SampleSheetFields.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/SampleSheetFields.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SampleSheetFields.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/SampleSheetFields.tsx"],"names":[],"mappings":"AAWA,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,sBAGtC,CAAA;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAKT;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,sBAAsB,CAAA;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAA;CAClD,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CA0CtE"}
|
|
@@ -5,7 +5,14 @@ import { isValidTaskIdInput as o } from "./utils/taskIdValidation.js";
|
|
|
5
5
|
import { Stack as s } from "@mui/material";
|
|
6
6
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
7
7
|
//#region src/features/entity/metadata-task/create-task/SampleSheetFields.tsx
|
|
8
|
-
|
|
8
|
+
var u = {
|
|
9
|
+
inputTaskId: "",
|
|
10
|
+
destinationTaskId: ""
|
|
11
|
+
};
|
|
12
|
+
function d(e) {
|
|
13
|
+
return o(e.inputTaskId) && o(e.destinationTaskId);
|
|
14
|
+
}
|
|
15
|
+
function f(u) {
|
|
9
16
|
let { value: d, onChange: f } = u, p = o(d.inputTaskId, { allowEmpty: !0 }), m = o(d.destinationTaskId, { allowEmpty: !0 });
|
|
10
17
|
return /* @__PURE__ */ l(s, {
|
|
11
18
|
gap: 2,
|
|
@@ -37,6 +44,6 @@ function u(u) {
|
|
|
37
44
|
});
|
|
38
45
|
}
|
|
39
46
|
//#endregion
|
|
40
|
-
export { u as default };
|
|
47
|
+
export { u as EMPTY_SAMPLE_SHEET_VALUE, f as default, d as isSampleSheetFieldsValueValid };
|
|
41
48
|
|
|
42
49
|
//# sourceMappingURL=SampleSheetFields.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SampleSheetFields.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/SampleSheetFields.tsx"],"sourcesContent":["import { TextField } from '@/components/TextField'\nimport { Stack } from '@mui/material'\nimport {\n SAMPLE_SHEET_DESTINATION_TASK_ID_DESCRIPTION,\n SAMPLE_SHEET_DESTINATION_TASK_ID_LABEL,\n SAMPLE_SHEET_INPUT_TASK_ID_DESCRIPTION,\n SAMPLE_SHEET_INPUT_TASK_ID_LABEL,\n TASK_ID_FIELD_INVALID_ERROR_MESSAGE,\n} from '../utils/constants'\nimport {
|
|
1
|
+
{"version":3,"file":"SampleSheetFields.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/SampleSheetFields.tsx"],"sourcesContent":["import { TextField } from '@/components/TextField'\nimport { Stack } from '@mui/material'\nimport {\n SAMPLE_SHEET_DESTINATION_TASK_ID_DESCRIPTION,\n SAMPLE_SHEET_DESTINATION_TASK_ID_LABEL,\n SAMPLE_SHEET_INPUT_TASK_ID_DESCRIPTION,\n SAMPLE_SHEET_INPUT_TASK_ID_LABEL,\n TASK_ID_FIELD_INVALID_ERROR_MESSAGE,\n} from '../utils/constants'\nimport { isValidTaskIdInput } from './utils/taskIdValidation'\n\nexport type SampleSheetFieldsValue = {\n inputTaskId: string\n destinationTaskId: string\n}\n\nexport const EMPTY_SAMPLE_SHEET_VALUE: SampleSheetFieldsValue = {\n inputTaskId: '',\n destinationTaskId: '',\n}\n\nexport function isSampleSheetFieldsValueValid(\n value: SampleSheetFieldsValue,\n): boolean {\n return (\n isValidTaskIdInput(value.inputTaskId) &&\n isValidTaskIdInput(value.destinationTaskId)\n )\n}\n\nexport type SampleSheetFieldsProps = {\n value: SampleSheetFieldsValue\n onChange: (value: SampleSheetFieldsValue) => void\n}\n\n/**\n * Fields specific to a Sample Sheet Generation compute task\n * (`SampleSheetGenerationExecutionProperties`).\n */\nexport default function SampleSheetFields(props: SampleSheetFieldsProps) {\n const { value, onChange } = props\n\n const inputTaskIdIsValid = isValidTaskIdInput(value.inputTaskId, {\n allowEmpty: true,\n })\n const destinationTaskIdIsValid = isValidTaskIdInput(value.destinationTaskId, {\n allowEmpty: true,\n })\n\n return (\n <Stack gap={2}>\n <TextField\n label={SAMPLE_SHEET_INPUT_TASK_ID_LABEL}\n fullWidth\n required\n value={value.inputTaskId}\n onChange={e => onChange({ ...value, inputTaskId: e.target.value })}\n description={SAMPLE_SHEET_INPUT_TASK_ID_DESCRIPTION}\n error={!inputTaskIdIsValid}\n helperText={\n inputTaskIdIsValid ? undefined : TASK_ID_FIELD_INVALID_ERROR_MESSAGE\n }\n />\n <TextField\n label={SAMPLE_SHEET_DESTINATION_TASK_ID_LABEL}\n fullWidth\n required\n value={value.destinationTaskId}\n onChange={e =>\n onChange({ ...value, destinationTaskId: e.target.value })\n }\n description={SAMPLE_SHEET_DESTINATION_TASK_ID_DESCRIPTION}\n error={!destinationTaskIdIsValid}\n helperText={\n destinationTaskIdIsValid\n ? undefined\n : TASK_ID_FIELD_INVALID_ERROR_MESSAGE\n }\n />\n </Stack>\n )\n}\n"],"mappings":";;;;;;;AAgBA,IAAa,IAAmD;CAC9D,aAAa;CACb,mBAAmB;AACrB;AAEA,SAAgB,EACd,GACS;CACT,OACE,EAAmB,EAAM,WAAW,KACpC,EAAmB,EAAM,iBAAiB;AAE9C;AAWA,SAAwB,EAAkB,GAA+B;CACvE,IAAM,EAAE,UAAO,gBAAa,GAEtB,IAAqB,EAAmB,EAAM,aAAa,EAC/D,YAAY,GACd,CAAC,GACK,IAA2B,EAAmB,EAAM,mBAAmB,EAC3E,YAAY,GACd,CAAC;CAED,OACE,kBAAC,GAAD;EAAO,KAAK;YAAZ,CACE,kBAAC,GAAD;GACE,OAAO;GACP,WAAA;GACA,UAAA;GACA,OAAO,EAAM;GACb,WAAU,MAAK,EAAS;IAAE,GAAG;IAAO,aAAa,EAAE,OAAO;GAAM,CAAC;GACjE,aAAa;GACb,OAAO,CAAC;GACR,YACE,IAAqB,KAAA,IAAY;EAEpC,CAAA,GACD,kBAAC,GAAD;GACE,OAAO;GACP,WAAA;GACA,UAAA;GACA,OAAO,EAAM;GACb,WAAU,MACR,EAAS;IAAE,GAAG;IAAO,mBAAmB,EAAE,OAAO;GAAM,CAAC;GAE1D,aAAa;GACb,OAAO,CAAC;GACR,YACE,IACI,KAAA,IACA;EAEP,CAAA,CACI;;AAEX"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { TaskStatusStateEnum } from '@sage-bionetworks/synapse-client';
|
|
2
|
+
export type TaskStatusFieldProps = {
|
|
3
|
+
value: TaskStatusStateEnum | undefined;
|
|
4
|
+
onChange: (state: TaskStatusStateEnum) => void;
|
|
5
|
+
disabled: boolean;
|
|
6
|
+
/**
|
|
7
|
+
* States the user must not be able to manually select into (e.g. EXECUTING, which a compute task
|
|
8
|
+
* enters automatically). These still render as `MenuItem`s -- so a task already in one of these
|
|
9
|
+
* states continues to display it correctly -- but are disabled.
|
|
10
|
+
*/
|
|
11
|
+
disabledStates: TaskStatusStateEnum[];
|
|
12
|
+
/** Must be unique per rendered instance; passed through to both the `InputLabel` and the `Select`. */
|
|
13
|
+
labelId: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The task status `<Select>` shown in edit mode by both `ComputeTaskForm` and `CurateTaskForm`.
|
|
17
|
+
*/
|
|
18
|
+
export default function TaskStatusField(props: TaskStatusFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=TaskStatusField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskStatusField.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/TaskStatusField.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAGtE,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,mBAAmB,GAAG,SAAS,CAAA;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAC9C,QAAQ,EAAE,OAAO,CAAA;IACjB;;;;OAIG;IACH,cAAc,EAAE,mBAAmB,EAAE,CAAA;IACrC,sGAAsG;IACtG,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAyBlE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { StyledFormControl as e } from "../../../../components/styled/StyledFormControl.js";
|
|
2
|
+
import "../../../../components/styled/index.js";
|
|
3
|
+
import { TASK_STATUS_CONFIG as t, TASK_STATUS_INPUT_LABEL as n } from "../utils/constants.js";
|
|
4
|
+
import { InputLabel as r, MenuItem as i, Select as a } from "@mui/material";
|
|
5
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
6
|
+
import { TaskStatusStateEnum as c } from "@sage-bionetworks/synapse-client";
|
|
7
|
+
//#region src/features/entity/metadata-task/create-task/TaskStatusField.tsx
|
|
8
|
+
function l(l) {
|
|
9
|
+
let { value: u, onChange: d, disabled: f, disabledStates: p, labelId: m } = l;
|
|
10
|
+
return /* @__PURE__ */ s(e, {
|
|
11
|
+
fullWidth: !0,
|
|
12
|
+
children: [/* @__PURE__ */ o(r, {
|
|
13
|
+
id: m,
|
|
14
|
+
children: n
|
|
15
|
+
}), /* @__PURE__ */ o(a, {
|
|
16
|
+
labelId: m,
|
|
17
|
+
value: u ?? "",
|
|
18
|
+
label: n,
|
|
19
|
+
disabled: f,
|
|
20
|
+
onChange: (e) => d(e.target.value),
|
|
21
|
+
children: Object.values(c).map((e) => /* @__PURE__ */ o(i, {
|
|
22
|
+
value: e,
|
|
23
|
+
disabled: p.includes(e),
|
|
24
|
+
children: t[e].label
|
|
25
|
+
}, e))
|
|
26
|
+
})]
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { l as default };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=TaskStatusField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskStatusField.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/TaskStatusField.tsx"],"sourcesContent":["import { StyledFormControl } from '@/components/styled'\nimport { InputLabel, MenuItem, Select } from '@mui/material'\nimport { TaskStatusStateEnum } from '@sage-bionetworks/synapse-client'\nimport { TASK_STATUS_CONFIG, TASK_STATUS_INPUT_LABEL } from '../utils/constants'\n\nexport type TaskStatusFieldProps = {\n value: TaskStatusStateEnum | undefined\n onChange: (state: TaskStatusStateEnum) => void\n disabled: boolean\n /**\n * States the user must not be able to manually select into (e.g. EXECUTING, which a compute task\n * enters automatically). These still render as `MenuItem`s -- so a task already in one of these\n * states continues to display it correctly -- but are disabled.\n */\n disabledStates: TaskStatusStateEnum[]\n /** Must be unique per rendered instance; passed through to both the `InputLabel` and the `Select`. */\n labelId: string\n}\n\n/**\n * The task status `<Select>` shown in edit mode by both `ComputeTaskForm` and `CurateTaskForm`.\n */\nexport default function TaskStatusField(props: TaskStatusFieldProps) {\n const { value, onChange, disabled, disabledStates, labelId } = props\n\n return (\n <StyledFormControl fullWidth>\n <InputLabel id={labelId}>{TASK_STATUS_INPUT_LABEL}</InputLabel>\n <Select\n labelId={labelId}\n value={value ?? ''}\n label={TASK_STATUS_INPUT_LABEL}\n disabled={disabled}\n onChange={e => onChange(e.target.value as TaskStatusStateEnum)}\n >\n {Object.values(TaskStatusStateEnum).map(state => (\n <MenuItem\n key={state}\n value={state}\n disabled={disabledStates.includes(state)}\n >\n {TASK_STATUS_CONFIG[state].label}\n </MenuItem>\n ))}\n </Select>\n </StyledFormControl>\n )\n}\n"],"mappings":";;;;;;;AAsBA,SAAwB,EAAgB,GAA6B;CACnE,IAAM,EAAE,UAAO,aAAU,aAAU,mBAAgB,eAAY;CAE/D,OACE,kBAAC,GAAD;EAAmB,WAAA;YAAnB,CACE,kBAAC,GAAD;GAAY,IAAI;aAAU;EAAoC,CAAA,GAC9D,kBAAC,GAAD;GACW;GACT,OAAO,KAAS;GAChB,OAAO;GACG;GACV,WAAU,MAAK,EAAS,EAAE,OAAO,KAA4B;aAE5D,OAAO,OAAO,CAAmB,EAAE,KAAI,MACtC,kBAAC,GAAD;IAEE,OAAO;IACP,UAAU,EAAe,SAAS,CAAK;cAEtC,EAAmB,GAAO;GACnB,GALH,CAKG,CACX;EACK,CAAA,CACS;;AAEvB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { RouteObject } from 'react-router';
|
|
2
|
+
export type GetCurationTaskFlowRoutesOptions = {
|
|
3
|
+
/**
|
|
4
|
+
* Present when the host page already has a project context (e.g. a project's Metadata Tasks page).
|
|
5
|
+
* Absent when creating from a context without one (e.g. the Curator Dashboard).
|
|
6
|
+
*/
|
|
7
|
+
projectId?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Path (relative to the host router) to navigate to when the user exits the flow -- via "Back to
|
|
10
|
+
* All Tasks" on the category picker/compute/curate forms, or "Back to All Tasks" on the
|
|
11
|
+
* confirmation screen. Typically the host's own index route (`'/'`).
|
|
12
|
+
*/
|
|
13
|
+
exitPath: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Builds the route objects for the 3-step "Create New Task" wizard: category picker -> compute/curate
|
|
17
|
+
* form -> confirmation. The task itself is created on the step-2-to-step-3 transition (see
|
|
18
|
+
* `ComputeTaskForm`/`CurateTaskForm`'s `onCreated`).
|
|
19
|
+
*/
|
|
20
|
+
export declare function getCurationTaskFlowRoutes(options: GetCurationTaskFlowRoutesOptions): RouteObject[];
|
|
21
|
+
//# sourceMappingURL=curationTaskFlowRoutes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curationTaskFlowRoutes.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/curationTaskFlowRoutes.tsx"],"names":[],"mappings":"AASA,OAAO,EAGL,WAAW,EAGZ,MAAM,cAAc,CAAA;AAMrB,MAAM,MAAM,gCAAgC,GAAG;IAC7C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAwFD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gCAAgC,GACxC,WAAW,EAAE,CAyBf"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { CREATE_COMPUTE_TASK_PAGE_TITLE as e, CREATE_CURATE_TASK_PAGE_TITLE as t, FILL_IN_COMPUTE_TASK_DETAILS_DESCRIPTION as n, FILL_IN_CURATE_TASK_DETAILS_DESCRIPTION as r } from "../utils/constants.js";
|
|
2
|
+
import i from "./ComputeTaskForm.js";
|
|
3
|
+
import a from "./CreateTaskCategoryPicker.js";
|
|
4
|
+
import o from "./CreateTaskConfirmation.js";
|
|
5
|
+
import s from "./CurateTaskForm.js";
|
|
6
|
+
import { Button as c } from "@mui/material";
|
|
7
|
+
import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
8
|
+
import { ArrowBack as f } from "@mui/icons-material";
|
|
9
|
+
import { Navigate as p, Outlet as m, useNavigate as h, useParams as g } from "react-router";
|
|
10
|
+
//#region src/features/entity/metadata-task/create-task/curationTaskFlowRoutes.tsx
|
|
11
|
+
function _(e) {
|
|
12
|
+
let { onExit: t } = e;
|
|
13
|
+
return /* @__PURE__ */ d(l, { children: [t && /* @__PURE__ */ u(c, {
|
|
14
|
+
variant: "text",
|
|
15
|
+
startIcon: /* @__PURE__ */ u(f, {}),
|
|
16
|
+
onClick: t,
|
|
17
|
+
sx: { alignSelf: "flex-start" },
|
|
18
|
+
children: "Back to All Tasks"
|
|
19
|
+
}), /* @__PURE__ */ u(m, {})] });
|
|
20
|
+
}
|
|
21
|
+
function v(e) {
|
|
22
|
+
let t = h();
|
|
23
|
+
return /* @__PURE__ */ u(_, { onExit: () => void t(e.exitPath) });
|
|
24
|
+
}
|
|
25
|
+
function y() {
|
|
26
|
+
let e = h();
|
|
27
|
+
return /* @__PURE__ */ u(a, {
|
|
28
|
+
onSelectCompute: () => void e("compute"),
|
|
29
|
+
onSelectCurate: () => void e("curate")
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function b(t) {
|
|
33
|
+
let r = h();
|
|
34
|
+
return /* @__PURE__ */ u(i, {
|
|
35
|
+
projectId: t.projectId,
|
|
36
|
+
pageTitle: e,
|
|
37
|
+
pageDescription: n,
|
|
38
|
+
onBack: () => void r(-1),
|
|
39
|
+
onExit: () => void r(t.exitPath),
|
|
40
|
+
onCreated: (e) => void r(`../confirmation/${e.taskId}`)
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function x(e) {
|
|
44
|
+
let n = h();
|
|
45
|
+
return /* @__PURE__ */ u(s, {
|
|
46
|
+
projectId: e.projectId,
|
|
47
|
+
pageTitle: t,
|
|
48
|
+
pageDescription: r,
|
|
49
|
+
onBack: () => void n(-1),
|
|
50
|
+
onExit: () => void n(e.exitPath),
|
|
51
|
+
onCreated: (e) => void n(`../confirmation/${e.taskId}`)
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function S(e) {
|
|
55
|
+
let { taskId: t } = g(), n = h(), r = t ? Number(t) : void 0;
|
|
56
|
+
return r ? /* @__PURE__ */ u(o, {
|
|
57
|
+
taskId: r,
|
|
58
|
+
onDone: () => void n(e.exitPath)
|
|
59
|
+
}) : /* @__PURE__ */ u(p, {
|
|
60
|
+
to: "..",
|
|
61
|
+
replace: !0
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function C(e) {
|
|
65
|
+
let { projectId: t, exitPath: n } = e;
|
|
66
|
+
return [
|
|
67
|
+
{
|
|
68
|
+
element: /* @__PURE__ */ u(v, { exitPath: n }),
|
|
69
|
+
children: [{
|
|
70
|
+
index: !0,
|
|
71
|
+
element: /* @__PURE__ */ u(y, {})
|
|
72
|
+
}]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
element: /* @__PURE__ */ u(_, {}),
|
|
76
|
+
children: [{
|
|
77
|
+
path: "confirmation/:taskId",
|
|
78
|
+
element: /* @__PURE__ */ u(S, { exitPath: n })
|
|
79
|
+
}]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
path: "compute",
|
|
83
|
+
element: /* @__PURE__ */ u(b, {
|
|
84
|
+
projectId: t,
|
|
85
|
+
exitPath: n
|
|
86
|
+
})
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
path: "curate",
|
|
90
|
+
element: /* @__PURE__ */ u(x, {
|
|
91
|
+
projectId: t,
|
|
92
|
+
exitPath: n
|
|
93
|
+
})
|
|
94
|
+
}
|
|
95
|
+
];
|
|
96
|
+
}
|
|
97
|
+
//#endregion
|
|
98
|
+
export { C as getCurationTaskFlowRoutes };
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=curationTaskFlowRoutes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curationTaskFlowRoutes.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/curationTaskFlowRoutes.tsx"],"sourcesContent":["import {\n CREATE_COMPUTE_TASK_PAGE_TITLE,\n CREATE_CURATE_TASK_PAGE_TITLE,\n FILL_IN_COMPUTE_TASK_DETAILS_DESCRIPTION,\n FILL_IN_CURATE_TASK_DETAILS_DESCRIPTION,\n BACK_TO_ALL_TASKS_LABEL,\n} from '../utils/constants'\nimport { ArrowBack } from '@mui/icons-material'\nimport { Button } from '@mui/material'\nimport {\n Navigate,\n Outlet,\n RouteObject,\n useNavigate,\n useParams,\n} from 'react-router'\nimport ComputeTaskForm from './ComputeTaskForm'\nimport CreateTaskCategoryPicker from './CreateTaskCategoryPicker'\nimport CreateTaskConfirmation from './CreateTaskConfirmation'\nimport CurateTaskForm from './CurateTaskForm'\n\nexport type GetCurationTaskFlowRoutesOptions = {\n /**\n * Present when the host page already has a project context (e.g. a project's Metadata Tasks page).\n * Absent when creating from a context without one (e.g. the Curator Dashboard).\n */\n projectId?: string\n /**\n * Path (relative to the host router) to navigate to when the user exits the flow -- via \"Back to\n * All Tasks\" on the category picker/compute/curate forms, or \"Back to All Tasks\" on the\n * confirmation screen. Typically the host's own index route (`'/'`).\n */\n exitPath: string\n}\n\n/**\n * Layout for the steps that share the generic \"Create New Task\" header (the category picker and the\n * confirmation screen). The compute/curate form steps render their own more specific centered\n * title/subtitle instead (via their `pageTitle`/`pageDescription` props below), so they aren't nested\n * under this layout.\n *\n * When `onExit` is provided, a top-left \"Back to All Tasks\" button is shown above the title, matching\n * the one on the form steps.\n */\nfunction CreateTaskLayout(props: { onExit?: () => void }) {\n const { onExit } = props\n return (\n <>\n {onExit && (\n <Button\n variant=\"text\"\n startIcon={<ArrowBack />}\n onClick={onExit}\n sx={{ alignSelf: 'flex-start' }}\n >\n {BACK_TO_ALL_TASKS_LABEL}\n </Button>\n )}\n <Outlet />\n </>\n )\n}\n\nfunction CategoryPickerLayoutRoute(props: { exitPath: string }) {\n const navigate = useNavigate()\n return <CreateTaskLayout onExit={() => void navigate(props.exitPath)} />\n}\n\nfunction CategoryPickerRoute() {\n const navigate = useNavigate()\n return (\n <CreateTaskCategoryPicker\n onSelectCompute={() => void navigate('compute')}\n onSelectCurate={() => void navigate('curate')}\n />\n )\n}\n\nfunction ComputeFormRoute(props: { projectId?: string; exitPath: string }) {\n const navigate = useNavigate()\n return (\n <ComputeTaskForm\n projectId={props.projectId}\n pageTitle={CREATE_COMPUTE_TASK_PAGE_TITLE}\n pageDescription={FILL_IN_COMPUTE_TASK_DETAILS_DESCRIPTION}\n onBack={() => void navigate(-1)}\n onExit={() => void navigate(props.exitPath)}\n onCreated={task => void navigate(`../confirmation/${task.taskId}`)}\n />\n )\n}\n\nfunction CurateFormRoute(props: { projectId?: string; exitPath: string }) {\n const navigate = useNavigate()\n return (\n <CurateTaskForm\n projectId={props.projectId}\n pageTitle={CREATE_CURATE_TASK_PAGE_TITLE}\n pageDescription={FILL_IN_CURATE_TASK_DETAILS_DESCRIPTION}\n onBack={() => void navigate(-1)}\n onExit={() => void navigate(props.exitPath)}\n onCreated={task => void navigate(`../confirmation/${task.taskId}`)}\n />\n )\n}\n\nfunction ConfirmationRoute(props: { exitPath: string }) {\n const { taskId } = useParams<{ taskId: string }>()\n const navigate = useNavigate()\n const parsedTaskId = taskId ? Number(taskId) : undefined\n if (!parsedTaskId) {\n return <Navigate to=\"..\" replace />\n }\n return (\n <CreateTaskConfirmation\n taskId={parsedTaskId}\n onDone={() => void navigate(props.exitPath)}\n />\n )\n}\n\n/**\n * Builds the route objects for the 3-step \"Create New Task\" wizard: category picker -> compute/curate\n * form -> confirmation. The task itself is created on the step-2-to-step-3 transition (see\n * `ComputeTaskForm`/`CurateTaskForm`'s `onCreated`).\n */\nexport function getCurationTaskFlowRoutes(\n options: GetCurationTaskFlowRoutesOptions,\n): RouteObject[] {\n const { projectId, exitPath } = options\n return [\n {\n element: <CategoryPickerLayoutRoute exitPath={exitPath} />,\n children: [{ index: true, element: <CategoryPickerRoute /> }],\n },\n {\n element: <CreateTaskLayout />,\n children: [\n {\n path: 'confirmation/:taskId',\n element: <ConfirmationRoute exitPath={exitPath} />,\n },\n ],\n },\n {\n path: 'compute',\n element: <ComputeFormRoute projectId={projectId} exitPath={exitPath} />,\n },\n {\n path: 'curate',\n element: <CurateFormRoute projectId={projectId} exitPath={exitPath} />,\n },\n ]\n}\n"],"mappings":";;;;;;;;;;AA4CA,SAAS,EAAiB,GAAgC;CACxD,IAAM,EAAE,cAAW;CACnB,OACE,kBAAA,GAAA,EAAA,UAAA,CACG,KACC,kBAAC,GAAD;EACE,SAAQ;EACR,WAAW,kBAAC,GAAD,CAAY,CAAA;EACvB,SAAS;EACT,IAAI,EAAE,WAAW,aAAa;;CAGxB,CAAA,GAEV,kBAAC,GAAD,CAAS,CAAA,CACT,EAAA,CAAA;AAEN;AAEA,SAAS,EAA0B,GAA6B;CAC9D,IAAM,IAAW,EAAY;CAC7B,OAAO,kBAAC,GAAD,EAAkB,cAAc,KAAK,EAAS,EAAM,QAAQ,EAAI,CAAA;AACzE;AAEA,SAAS,IAAsB;CAC7B,IAAM,IAAW,EAAY;CAC7B,OACE,kBAAC,GAAD;EACE,uBAAuB,KAAK,EAAS,SAAS;EAC9C,sBAAsB,KAAK,EAAS,QAAQ;CAC7C,CAAA;AAEL;AAEA,SAAS,EAAiB,GAAiD;CACzE,IAAM,IAAW,EAAY;CAC7B,OACE,kBAAC,GAAD;EACE,WAAW,EAAM;EACjB,WAAW;EACX,iBAAiB;EACjB,cAAc,KAAK,EAAS,EAAE;EAC9B,cAAc,KAAK,EAAS,EAAM,QAAQ;EAC1C,YAAW,MAAQ,KAAK,EAAS,mBAAmB,EAAK,QAAQ;CAClE,CAAA;AAEL;AAEA,SAAS,EAAgB,GAAiD;CACxE,IAAM,IAAW,EAAY;CAC7B,OACE,kBAAC,GAAD;EACE,WAAW,EAAM;EACjB,WAAW;EACX,iBAAiB;EACjB,cAAc,KAAK,EAAS,EAAE;EAC9B,cAAc,KAAK,EAAS,EAAM,QAAQ;EAC1C,YAAW,MAAQ,KAAK,EAAS,mBAAmB,EAAK,QAAQ;CAClE,CAAA;AAEL;AAEA,SAAS,EAAkB,GAA6B;CACtD,IAAM,EAAE,cAAW,EAA8B,GAC3C,IAAW,EAAY,GACvB,IAAe,IAAS,OAAO,CAAM,IAAI,KAAA;CAI/C,OAHK,IAIH,kBAAC,GAAD;EACE,QAAQ;EACR,cAAc,KAAK,EAAS,EAAM,QAAQ;CAC3C,CAAA,IANM,kBAAC,GAAD;EAAU,IAAG;EAAK,SAAA;CAAS,CAAA;AAQtC;AAOA,SAAgB,EACd,GACe;CACf,IAAM,EAAE,cAAW,gBAAa;CAChC,OAAO;EACL;GACE,SAAS,kBAAC,GAAD,EAAqC,YAAW,CAAA;GACzD,UAAU,CAAC;IAAE,OAAO;IAAM,SAAS,kBAAC,GAAD,CAAsB,CAAA;GAAE,CAAC;EAC9D;EACA;GACE,SAAS,kBAAC,GAAD,CAAmB,CAAA;GAC5B,UAAU,CACR;IACE,MAAM;IACN,SAAS,kBAAC,GAAD,EAA6B,YAAW,CAAA;GACnD,CACF;EACF;EACA;GACE,MAAM;GACN,SAAS,kBAAC,GAAD;IAA6B;IAAqB;GAAW,CAAA;EACxE;EACA;GACE,MAAM;GACN,SAAS,kBAAC,GAAD;IAA4B;IAAqB;GAAW,CAAA;EACvE;CACF;AACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CurationTaskProperties } from '@sage-bionetworks/synapse-client';
|
|
2
|
+
import { ComputeTaskConcreteType } from '../utils/types';
|
|
3
|
+
import { RecordSetFieldsValue } from './RecordSetFields';
|
|
4
|
+
import { SampleSheetFieldsValue } from './SampleSheetFields';
|
|
5
|
+
import { ComputeTypeFields } from './utils/buildComputeTaskPayload';
|
|
6
|
+
export type UseComputeTypeFieldsArgs = {
|
|
7
|
+
/** The existing task's `taskProperties`, for edit-mode initialization. Undefined when creating. */
|
|
8
|
+
taskProperties: CurationTaskProperties | undefined;
|
|
9
|
+
isEditMode: boolean;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Owns the single active Compute Data type-specific value (`ComputeTypeFields`) for `ComputeTaskForm`:
|
|
13
|
+
* which concrete type is selected, its field values, and whether that value is currently valid.
|
|
14
|
+
* Switching the concrete type resets the value to that type's empty default.
|
|
15
|
+
*/
|
|
16
|
+
export declare function useComputeTypeFields(args: UseComputeTypeFieldsArgs): {
|
|
17
|
+
state: ComputeTypeFields;
|
|
18
|
+
setConcreteType: (concreteType: ComputeTaskConcreteType) => void;
|
|
19
|
+
setValue: (value: SampleSheetFieldsValue | RecordSetFieldsValue) => void;
|
|
20
|
+
isValid: boolean;
|
|
21
|
+
showTypeSection: boolean;
|
|
22
|
+
showUnrecognizedTypeWarning: boolean;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=useComputeTypeFields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useComputeTypeFields.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/useComputeTypeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAGvB,MAAM,kCAAkC,CAAA;AAGzC,OAAO,EACL,uBAAuB,EAGxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAGL,oBAAoB,EACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAGL,sBAAsB,EACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AA6CnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,mGAAmG;IACnG,cAAc,EAAE,sBAAsB,GAAG,SAAS,CAAA;IAClD,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB;;oCAiB1B,uBAAuB;sBAIrC,sBAAsB,GAAG,oBAAoB;;;;EAmBvE"}
|