From: Stephen Smith Date: Tue, 2 Aug 2022 15:46:53 +0000 (-0400) Subject: Merge branch '19305-project-update-dialog-properties' into main. Closes #19305 X-Git-Tag: 2.5.0~43 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/9afa6683615d76c6783c81ca3ef224cfadb5a11e?hp=2157030354bef3870b2703804ec18aab48cce27d Merge branch '19305-project-update-dialog-properties' into main. Closes #19305 Arvados-DCO-1.1-Signed-off-by: Stephen Smith --- diff --git a/cypress/integration/project.spec.js b/cypress/integration/project.spec.js index c4983e3e..b2f6f33d 100644 --- a/cypress/integration/project.spec.js +++ b/cypress/integration/project.spec.js @@ -85,6 +85,39 @@ describe('Project tests', function() { // Pink is not in the test vocab {IDTAGCOLORS: ['IDVALCOLORS3', 'Pink', 'IDVALCOLORS1']}); }); + + // Open project edit via breadcrumbs + cy.get('[data-cy=breadcrumbs]').contains(projName).rightclick(); + cy.get('[data-cy=context-menu]').contains('Edit').click(); + cy.get('[data-cy=form-dialog]').within(() => { + cy.get('[data-cy=resource-properties-list]').within(() => { + cy.get('div[role=button]').contains('Color: Magenta'); + cy.get('div[role=button]').contains('Color: Pink'); + cy.get('div[role=button]').contains('Color: Yellow'); + }); + }); + // Add another property + cy.get('[data-cy=resource-properties-form]').within(() => { + cy.get('[data-cy=property-field-key]').within(() => { + cy.get('input').type('Animal'); + }); + cy.get('[data-cy=property-field-value]').within(() => { + cy.get('input').type('Dog'); + }); + cy.root().submit(); + }); + cy.get('[data-cy=form-submit-btn]').click(); + // Reopen edit via breadcrumbs and verify properties + cy.get('[data-cy=breadcrumbs]').contains(projName).rightclick(); + cy.get('[data-cy=context-menu]').contains('Edit').click(); + cy.get('[data-cy=form-dialog]').within(() => { + cy.get('[data-cy=resource-properties-list]').within(() => { + cy.get('div[role=button]').contains('Color: Magenta'); + cy.get('div[role=button]').contains('Color: Pink'); + cy.get('div[role=button]').contains('Color: Yellow'); + cy.get('div[role=button]').contains('Animal: Dog'); + }); + }); }); it('creates new project on home project and then a subproject inside it', function() { diff --git a/src/store/projects/project-update-actions.ts b/src/store/projects/project-update-actions.ts index 52abfd3f..a6e67485 100644 --- a/src/store/projects/project-update-actions.ts +++ b/src/store/projects/project-update-actions.ts @@ -22,6 +22,8 @@ import { projectPanelActions } from 'store/project-panel/project-panel-action'; import { GroupClass } from "models/group"; import { Participant } from "views-components/sharing-dialog/participant-select"; import { ProjectProperties } from "./project-create-actions"; +import { getResource } from "store/resources/resources"; +import { ProjectResource } from "models/project"; export interface ProjectUpdateFormDialogData { uuid: string; @@ -37,7 +39,9 @@ export const PROJECT_UPDATE_FORM_SELECTOR = formValueSelector(PROJECT_UPDATE_FOR export const openProjectUpdateDialog = (resource: ProjectUpdateFormDialogData) => (dispatch: Dispatch, getState: () => RootState) => { - dispatch(initialize(PROJECT_UPDATE_FORM_NAME, resource)); + // Get complete project resource from store to handle consumers passing in partial resources + const project = getResource(resource.uuid)(getState().resources); + dispatch(initialize(PROJECT_UPDATE_FORM_NAME, project)); dispatch(dialogActions.OPEN_DIALOG({ id: PROJECT_UPDATE_FORM_NAME, data: { diff --git a/src/views-components/resource-properties/resource-properties-list.tsx b/src/views-components/resource-properties/resource-properties-list.tsx index a7b58252..47d7729b 100644 --- a/src/views-components/resource-properties/resource-properties-list.tsx +++ b/src/views-components/resource-properties/resource-properties-list.tsx @@ -38,7 +38,7 @@ ResourcePropertiesListActionProps & WithStyles; const List = withStyles(styles)( ({ classes, handleDelete, properties }: ResourcePropertiesListProps) => -
+
{properties && Object.keys(properties).map(k => Array.isArray(properties[k]) @@ -63,4 +63,4 @@ export const resourcePropertiesList = (formName: string) => (dispatch: Dispatch): ResourcePropertiesListActionProps => ({ handleDelete: (key: string, value: string) => dispatch(removePropertyFromResourceForm(key, value, formName)) }) - )(List); \ No newline at end of file + )(List);