From: Michal Klobukowski Date: Mon, 26 Nov 2018 22:56:12 +0000 (+0100) Subject: Merge branch 'master' into 14258-collection-filtering X-Git-Tag: 1.3.0~12^2^2~1^2 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/f8d794c588b0a252bb8956efe2051697bff0d617?hp=74b0d4404556af0e325906280a4c733a8b0515c9 Merge branch 'master' into 14258-collection-filtering refs #14258 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- diff --git a/src/store/advanced-tab/advanced-tab.ts b/src/store/advanced-tab/advanced-tab.ts index 6ad8af22..c5f600d4 100644 --- a/src/store/advanced-tab/advanced-tab.ts +++ b/src/store/advanced-tab/advanced-tab.ts @@ -21,7 +21,7 @@ export const ADVANCED_TAB_DIALOG = 'advancedTabDialog'; export interface AdvancedTabDialogData { apiResponse: any; metadata: any; - uuid: string; + user: string; pythonHeader: string; pythonExample: string; cliGetHeader: string; @@ -60,12 +60,12 @@ export const openAdvancedTabDialog = (uuid: string, index?: number) => const repositoryData = getState().repositories.items[index!]; if (data || repositoryData) { if (data) { - const user = await services.userService.get(data.ownerUuid); const metadata = await services.linkService.list({ filters: new FilterBuilder() .addEqual('headUuid', uuid) .getFilters() }); + const user = metadata.itemsAvailable && await services.userService.get(metadata.items[0].tailUuid); if (kind === ResourceKind.COLLECTION) { const dataCollection: AdvancedTabDialogData = advancedTabData(uuid, metadata, user, collectionApiResponse, data, CollectionData.COLLECTION, GroupContentsResourcePrefix.COLLECTION, CollectionData.STORAGE_CLASSES_CONFIRMED, data.storageClassesConfirmed); dispatch(dialogActions.OPEN_DIALOG({ id: ADVANCED_TAB_DIALOG, data: dataCollection })); @@ -76,7 +76,6 @@ export const openAdvancedTabDialog = (uuid: string, index?: number) => const dataProject: AdvancedTabDialogData = advancedTabData(uuid, metadata, user, groupRequestApiResponse, data, ProjectData.GROUP, GroupContentsResourcePrefix.PROJECT, ProjectData.DELETE_AT, data.deleteAt); dispatch(dialogActions.OPEN_DIALOG({ id: ADVANCED_TAB_DIALOG, data: dataProject })); } - } else if (kind === ResourceKind.REPOSITORY) { const dataRepository: AdvancedTabDialogData = advancedTabData(uuid, '', '', repositoryApiResponse, repositoryData, RepositoryData.REPOSITORY, 'repositories', RepositoryData.CREATED_AT, repositoryData.createdAt); dispatch(dialogActions.OPEN_DIALOG({ id: ADVANCED_TAB_DIALOG, data: dataRepository })); diff --git a/src/store/context-menu/context-menu-actions.ts b/src/store/context-menu/context-menu-actions.ts index 0a6b5a82..5631a5e8 100644 --- a/src/store/context-menu/context-menu-actions.ts +++ b/src/store/context-menu/context-menu-actions.ts @@ -132,10 +132,10 @@ export const openProcessContextMenu = (event: React.MouseEvent, pro (dispatch: Dispatch, getState: () => RootState) => { const resource = { uuid: process.containerRequest.uuid, - ownerUuid: '', + ownerUuid: process.containerRequest.ownerUuid, kind: ResourceKind.PROCESS, - name: '', - description: '', + name: process.containerRequest.name, + description: process.containerRequest.description, menuKind: ContextMenuKind.PROCESS }; dispatch(openContextMenu(event, resource)); diff --git a/src/store/processes/process-copy-actions.ts b/src/store/processes/process-copy-actions.ts index cd3fe21c..01387852 100644 --- a/src/store/processes/process-copy-actions.ts +++ b/src/store/processes/process-copy-actions.ts @@ -9,7 +9,7 @@ import { resetPickerProjectTree } from '~/store/project-tree-picker/project-tree import { RootState } from '~/store/store'; import { ServiceRepository } from '~/services/services'; import { CopyFormDialogData } from '~/store/copy-dialog/copy-dialog'; -import { getProcess, ProcessStatus, getProcessStatus } from '~/store/processes/process'; +import { getProcess } from '~/store/processes/process'; import { snackbarActions } from '~/store/snackbar/snackbar-actions'; import { initProjectsTreePicker } from '~/store/tree-picker/tree-picker-actions'; @@ -19,16 +19,11 @@ export const openCopyProcessDialog = (resource: { name: string, uuid: string }) (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const process = getProcess(resource.uuid)(getState().resources); if (process) { - const processStatus = getProcessStatus(process); - if (processStatus === ProcessStatus.DRAFT) { - dispatch(resetPickerProjectTree()); - dispatch(initProjectsTreePicker(PROCESS_COPY_FORM_NAME)); - const initialData: CopyFormDialogData = { name: `Copy of: ${resource.name}`, uuid: resource.uuid, ownerUuid: '' }; - dispatch(initialize(PROCESS_COPY_FORM_NAME, initialData)); - dispatch(dialogActions.OPEN_DIALOG({ id: PROCESS_COPY_FORM_NAME, data: {} })); - } else { - dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'You can copy only draft processes.', hideDuration: 2000 })); - } + dispatch(resetPickerProjectTree()); + dispatch(initProjectsTreePicker(PROCESS_COPY_FORM_NAME)); + const initialData: CopyFormDialogData = { name: `Copy of: ${resource.name}`, uuid: resource.uuid, ownerUuid: '' }; + dispatch(initialize(PROCESS_COPY_FORM_NAME, initialData)); + dispatch(dialogActions.OPEN_DIALOG({ id: PROCESS_COPY_FORM_NAME, data: {} })); } else { dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Process not found', hideDuration: 2000 })); } @@ -39,9 +34,8 @@ export const copyProcess = (resource: CopyFormDialogData) => dispatch(startSubmit(PROCESS_COPY_FORM_NAME)); try { const process = await services.containerRequestService.get(resource.uuid); - const uuidKey = 'uuid'; - delete process[uuidKey]; - await services.containerRequestService.create({ ...process, ownerUuid: resource.ownerUuid, name: resource.name }); + const { kind, containerImage, outputPath, outputName, containerCountMax, command, properties, requestingContainerUuid, mounts, runtimeConstraints, schedulingParameters, environment, cwd, outputTtl, priority, expiresAt, useExisting, filters } = process; + await services.containerRequestService.create({ command, containerImage, outputPath, ownerUuid: resource.ownerUuid, name: resource.name, kind, outputName, containerCountMax, properties, requestingContainerUuid, mounts, runtimeConstraints, schedulingParameters, environment, cwd, outputTtl, priority, expiresAt, useExisting, filters }); dispatch(dialogActions.CLOSE_DIALOG({ id: PROCESS_COPY_FORM_NAME })); return process; } catch (e) { diff --git a/src/store/processes/process-move-actions.ts b/src/store/processes/process-move-actions.ts index edba5a85..7e65bcca 100644 --- a/src/store/processes/process-move-actions.ts +++ b/src/store/processes/process-move-actions.ts @@ -12,7 +12,7 @@ import { snackbarActions } from '~/store/snackbar/snackbar-actions'; import { MoveToFormDialogData } from '~/store/move-to-dialog/move-to-dialog'; import { resetPickerProjectTree } from '~/store/project-tree-picker/project-tree-picker-actions'; import { projectPanelActions } from '~/store/project-panel/project-panel-action'; -import { getProcess, getProcessStatus, ProcessStatus } from '~/store/processes/process'; +import { getProcess } from '~/store/processes/process'; import { initProjectsTreePicker } from '~/store/tree-picker/tree-picker-actions'; export const PROCESS_MOVE_FORM_NAME = 'processMoveFormName'; @@ -21,15 +21,10 @@ export const openMoveProcessDialog = (resource: { name: string, uuid: string }) (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const process = getProcess(resource.uuid)(getState().resources); if (process) { - const processStatus = getProcessStatus(process); - if (processStatus === ProcessStatus.DRAFT) { - dispatch(resetPickerProjectTree()); - dispatch(initProjectsTreePicker(PROCESS_MOVE_FORM_NAME)); - dispatch(initialize(PROCESS_MOVE_FORM_NAME, resource)); - dispatch(dialogActions.OPEN_DIALOG({ id: PROCESS_MOVE_FORM_NAME, data: {} })); - } else { - dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'You can move only draft processes.', hideDuration: 2000 })); - } + dispatch(resetPickerProjectTree()); + dispatch(initProjectsTreePicker(PROCESS_MOVE_FORM_NAME)); + dispatch(initialize(PROCESS_MOVE_FORM_NAME, resource)); + dispatch(dialogActions.OPEN_DIALOG({ id: PROCESS_MOVE_FORM_NAME, data: {} })); } else { dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Process not found', hideDuration: 2000 })); } @@ -40,7 +35,7 @@ export const moveProcess = (resource: MoveToFormDialogData) => dispatch(startSubmit(PROCESS_MOVE_FORM_NAME)); try { const process = await services.containerRequestService.get(resource.uuid); - await services.containerRequestService.update(resource.uuid, { ...process, ownerUuid: resource.ownerUuid }); + await services.containerRequestService.update(resource.uuid, { ownerUuid: resource.ownerUuid }); dispatch(projectPanelActions.REQUEST_ITEMS()); dispatch(dialogActions.CLOSE_DIALOG({ id: PROCESS_MOVE_FORM_NAME })); return process; @@ -48,8 +43,6 @@ export const moveProcess = (resource: MoveToFormDialogData) => const error = getCommonResourceServiceError(e); if (error === CommonResourceServiceError.UNIQUE_VIOLATION) { dispatch(stopSubmit(PROCESS_MOVE_FORM_NAME, { ownerUuid: 'A process with the same name already exists in the target project.' })); - } else if (error === CommonResourceServiceError.MODIFYING_CONTAINER_REQUEST_FINAL_STATE) { - dispatch(stopSubmit(PROCESS_MOVE_FORM_NAME, { ownerUuid: 'You can move only draft processes.' })); } else { dispatch(dialogActions.CLOSE_DIALOG({ id: PROCESS_MOVE_FORM_NAME })); dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Could not move the process.', hideDuration: 2000 })); diff --git a/src/store/processes/process-update-actions.ts b/src/store/processes/process-update-actions.ts index 92cf032f..2063f113 100644 --- a/src/store/processes/process-update-actions.ts +++ b/src/store/processes/process-update-actions.ts @@ -34,8 +34,7 @@ export const updateProcess = (resource: ProcessUpdateFormDialogData) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { dispatch(startSubmit(PROCESS_UPDATE_FORM_NAME)); try { - const process = await services.containerRequestService.get(resource.uuid); - const updatedProcess = await services.containerRequestService.update(resource.uuid, { ...process, name: resource.name }); + const updatedProcess = await services.containerRequestService.update(resource.uuid, { name: resource.name }); dispatch(projectPanelActions.REQUEST_ITEMS()); dispatch(dialogActions.CLOSE_DIALOG({ id: PROCESS_UPDATE_FORM_NAME })); return updatedProcess; @@ -43,8 +42,6 @@ export const updateProcess = (resource: ProcessUpdateFormDialogData) => const error = getCommonResourceServiceError(e); if (error === CommonResourceServiceError.UNIQUE_VIOLATION) { dispatch(stopSubmit(PROCESS_UPDATE_FORM_NAME, { name: 'Process with the same name already exists.' })); - } else if (error === CommonResourceServiceError.MODIFYING_CONTAINER_REQUEST_FINAL_STATE) { - dispatch(stopSubmit(PROCESS_UPDATE_FORM_NAME, { name: 'You cannot modified in "Final" state.' })); } else { dispatch(dialogActions.CLOSE_DIALOG({ id: PROCESS_UPDATE_FORM_NAME })); dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Could not update the process.', hideDuration: 2000 })); diff --git a/src/views-components/advanced-tab-dialog/metadataTab.tsx b/src/views-components/advanced-tab-dialog/metadataTab.tsx index 6250a7ad..bcf277c0 100644 --- a/src/views-components/advanced-tab-dialog/metadataTab.tsx +++ b/src/views-components/advanced-tab-dialog/metadataTab.tsx @@ -47,7 +47,7 @@ export const MetadataTab = withStyles(styles)((props: MetadataProps & WithStyles {it.uuid} {it.linkClass} {it.name} - {props.user ? `User: ${props.user.firstName} ${props.user.lastName}` : it.tailUuid} + {props.user && `User: ${props.user.firstName} ${props.user.lastName}`} {it.headUuid === props.uuid ? 'this' : it.headUuid} {JSON.stringify(it.properties)} diff --git a/src/views-components/context-menu/action-sets/project-action-set.ts b/src/views-components/context-menu/action-sets/project-action-set.ts index 9b8ced56..5e1182bb 100644 --- a/src/views-components/context-menu/action-sets/project-action-set.ts +++ b/src/views-components/context-menu/action-sets/project-action-set.ts @@ -12,7 +12,6 @@ import { openProjectCreateDialog } from '~/store/projects/project-create-actions import { openProjectUpdateDialog } from '~/store/projects/project-update-actions'; import { ToggleTrashAction } from "~/views-components/context-menu/actions/trash-action"; import { toggleProjectTrashed } from "~/store/trash/trash-actions"; -import { detailsPanelActions } from '~/store/details-panel/details-panel-action'; import { ShareIcon } from '~/components/icon/icon'; import { openSharingDialog } from "~/store/sharing-dialog/sharing-dialog-actions"; import { openAdvancedTabDialog } from "~/store/advanced-tab/advanced-tab"; diff --git a/src/views-components/context-menu/action-sets/repository-action-set.ts b/src/views-components/context-menu/action-sets/repository-action-set.ts index cf7fb883..22f6bee1 100644 --- a/src/views-components/context-menu/action-sets/repository-action-set.ts +++ b/src/views-components/context-menu/action-sets/repository-action-set.ts @@ -23,8 +23,8 @@ export const repositoryActionSet: ContextMenuActionSet = [[{ }, { name: "Advanced", icon: AdvancedIcon, - execute: (dispatch, { uuid, index }) => { - dispatch(openAdvancedTabDialog(uuid, index)); + execute: (dispatch, resource) => { + dispatch(openAdvancedTabDialog(resource.uuid, resource.index)); } }, { name: "Remove", diff --git a/src/views-components/context-menu/action-sets/trashed-collection-action-set.ts b/src/views-components/context-menu/action-sets/trashed-collection-action-set.ts index cefef345..ea0d1aaf 100644 --- a/src/views-components/context-menu/action-sets/trashed-collection-action-set.ts +++ b/src/views-components/context-menu/action-sets/trashed-collection-action-set.ts @@ -5,7 +5,6 @@ import { ContextMenuActionSet } from "../context-menu-action-set"; import { DetailsIcon, ProvenanceGraphIcon, AdvancedIcon, RestoreFromTrashIcon } from '~/components/icon/icon'; import { toggleCollectionTrashed } from "~/store/trash/trash-actions"; -import { detailsPanelActions } from "~/store/details-panel/details-panel-action"; import { openAdvancedTabDialog } from "~/store/advanced-tab/advanced-tab"; import { toggleDetailsPanel } from '~/store/details-panel/details-panel-action';