// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import React from 'react'; import { connect } from 'react-redux'; import { ProjectIcon, RenameIcon, FilterGroupIcon } from 'components/icon/icon'; import { ProjectResource } from 'models/project'; import { formatDate } from 'common/formatters'; import { ResourceKind } from 'models/resource'; import { resourceLabel } from 'common/labels'; import { DetailsData } from "./details-data"; import { DetailsAttribute } from "components/details-attribute/details-attribute"; import { RichTextEditorLink } from 'components/rich-text-editor-link/rich-text-editor-link'; import { withStyles, StyleRulesCallback, WithStyles, Button } from '@material-ui/core'; import { ArvadosTheme } from 'common/custom-theme'; import { Dispatch } from 'redux'; import { getPropertyChip } from '../resource-properties-form/property-chip'; import { ResourceOwnerWithName } from '../data-explorer/renderers'; import { GroupClass } from "models/group"; import { openProjectUpdateDialog, ProjectUpdateFormDialogData } from 'store/projects/project-update-actions'; export class ProjectDetails extends DetailsData { getIcon(className?: string) { if (this.item.groupClass === GroupClass.FILTER) { return ; } return ; } getDetails() { return ; } } type CssRules = 'tag' | 'editIcon' | 'editButton'; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ tag: { marginRight: theme.spacing.unit, marginBottom: theme.spacing.unit }, editIcon: { paddingRight: theme.spacing.unit/2, fontSize: '1.125rem', }, editButton: { boxShadow: 'none', padding: '2px 10px 2px 5px', fontSize: '0.75rem' }, }); interface ProjectDetailsComponentDataProps { project: ProjectResource; } interface ProjectDetailsComponentActionProps { onClick: (prj: ProjectUpdateFormDialogData) => () => void; } const mapDispatchToProps = (dispatch: Dispatch) => ({ onClick: (prj: ProjectUpdateFormDialogData) => () => dispatch(openProjectUpdateDialog(prj)), }); type ProjectDetailsComponentProps = ProjectDetailsComponentDataProps & ProjectDetailsComponentActionProps & WithStyles; const ProjectDetailsComponent = connect(null, mapDispatchToProps)( withStyles(styles)( ({ classes, project, onClick }: ProjectDetailsComponentProps) =>
{project.groupClass !== GroupClass.FILTER ? : '' } } /> {project.description ? : '---' } { Object.keys(project.properties).map(k => Array.isArray(project.properties[k]) ? project.properties[k].map((v: string) => getPropertyChip(k, v, undefined, classes.tag)) : getPropertyChip(k, project.properties[k], undefined, classes.tag) ) }
));