// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import React from "react"; import { Dispatch } from "redux"; import { connect } from "react-redux"; import { RootState } from 'store/store'; import { withDialog, WithDialogProps } from "store/dialog/with-dialog"; import { RESOURCE_PROPERTIES_DIALOG_NAME } from 'store/details-panel/details-panel-action'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, withStyles, StyleRulesCallback, WithStyles } from '@material-ui/core'; import { ArvadosTheme } from 'common/custom-theme'; import { ResourcePropertiesDialogForm } from 'views-components/resource-properties-dialog/resource-properties-dialog-form'; import { getResource } from 'store/resources/resources'; import { getPropertyChip } from "../resource-properties-form/property-chip"; import { deleteResourceProperty } from "store/resources/resources-actions"; import { ResourceWithProperties } from "models/resource"; type CssRules = 'tag'; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ tag: { marginRight: theme.spacing.unit, marginBottom: theme.spacing.unit } }); interface ResourcePropertiesDialogDataProps { resource: ResourceWithProperties; } interface ResourcePropertiesDialogActionProps { handleDelete: (uuid: string, key: string, value: string) => void; } const mapStateToProps = ({ detailsPanel, resources, properties }: RootState): ResourcePropertiesDialogDataProps => ({ resource: getResource(detailsPanel.resourceUuid)(resources) as ResourceWithProperties, }); const mapDispatchToProps = (dispatch: Dispatch): ResourcePropertiesDialogActionProps => ({ handleDelete: (uuid: string, key: string, value: string) => () => dispatch(deleteResourceProperty(uuid, key, value)), }); type ResourcePropertiesDialogProps = ResourcePropertiesDialogDataProps & ResourcePropertiesDialogActionProps & WithDialogProps<{}> & WithStyles; export const ResourcePropertiesDialog = connect(mapStateToProps, mapDispatchToProps)( withStyles(styles)( withDialog(RESOURCE_PROPERTIES_DIALOG_NAME)( ({ classes, open, closeDialog, handleDelete, resource }: ResourcePropertiesDialogProps) =>
Edit properties {resource && resource.properties && Object.keys(resource.properties).map(k => Array.isArray(resource.properties[k]) ? resource.properties[k].map((v: string) => getPropertyChip( k, v, handleDelete(resource.uuid, k, v), classes.tag)) : getPropertyChip( k, resource.properties[k], handleDelete(resource.uuid, k, resource.properties[k]), classes.tag) ) }
) ));