import Link from 'next/link' import { Gallery, Bullseye, EmptyState, EmptyStateIcon, Card, CardTitle, CardActions, DropdownItem, CardHeader, Dropdown, KebabToggle, CardBody, CardHeaderMain, TextVariants, Text, TextContent, Tooltip, Button, Label, } from '@patternfly/react-core' import { PlusIcon, FolderIcon, TrashIcon } from '@patternfly/react-icons' import PropTypes from 'prop-types' import React, { useReducer, useMemo } from 'react' import { Project, Status } from '../../shapes' import { parseAndFormatDateTime } from '../../util/date-time' import { AUTH_DESCRIPTION_MAP, AUTH_ICON_MAP, AUTH_NAME_MAP } from '../../util/authorizations' import TableEmptyState from '../util/TableEmptyState' function ProjectCard({ project, onDelete }) { const [isKebabOpen, toggleKebab] = useReducer((t) => !t, false) const { id, role, name, updatedAt } = project const Icon = AUTH_ICON_MAP[role] return ( } isOpen={isKebabOpen} dropdownItems={[ { onDelete() toggleKebab() }} position="right" icon={} > Delete , ]} /> {name} Last modified {parseAndFormatDateTime(updatedAt)} ) } function ProjectCollection({ status, projects, onDelete, onCreate, isFiltering }) { const sortedProjects = useMemo(() => { const res = [...projects] res.sort((a, b) => (new Date(a.updatedAt) < new Date(b.updatedAt) ? 1 : -1)) return res }, [projects]) if (sortedProjects.length === 0) { return ( } onClick={onCreate}> Create Project } /> ) } return ( {sortedProjects.map((project) => ( onDelete(project)} /> ))} ) } ProjectCollection.propTypes = { status: Status.isRequired, isFiltering: PropTypes.bool, projects: PropTypes.arrayOf(Project).isRequired, onDelete: PropTypes.func, onCreate: PropTypes.func, } export default ProjectCollection