laconic-deploy/packages/frontend/src/components/projects/project/deployments/DeploymentDetailsCard.tsx
Nabarun Gogoi 0a1a53e0bc
Add chips to display different kinds of information (#20)
* Add chip for showing deployment status

* Add chip to display projects count

* Display label if project search is not matching

* Add chip to display domain is not connected

* Fix text size in chips for deployment domain

* Add chip to display if repository is private

---------

Co-authored-by: neeraj <neeraj.rtly@gmail.com>
2023-12-21 16:42:06 +05:30

88 lines
2.3 KiB
TypeScript

import React from 'react';
import {
Menu,
MenuHandler,
MenuList,
MenuItem,
Typography,
Chip,
ChipProps,
} from '@material-tailwind/react';
import { relativeTime } from '../../../../utils/time';
export enum Status {
BUILDING = 'Building',
READY = 'Ready',
ERROR = 'Error',
}
export interface DeploymentDetails {
title: string;
status: Status;
environment: string;
branch: string;
commit: {
hash: string;
message: string;
};
author: string;
updatedAt: string;
}
interface DeployDetailsCardProps {
deployment: DeploymentDetails;
}
const STATUS_COLORS: { [key in Status]: ChipProps['color'] } = {
[Status.BUILDING]: 'blue',
[Status.READY]: 'green',
[Status.ERROR]: 'red',
};
const DeployDetailsCard = ({ deployment }: DeployDetailsCardProps) => {
return (
<div className="grid grid-cols-4 gap-2 border-b border-gray-300 p-3 my-2">
<div className="col-span-2">
<div className="flex">
<Typography className=" basis-3/4">{deployment.title}</Typography>
<Chip
value={deployment.status}
color={STATUS_COLORS[deployment.status] ?? 'gray'}
variant="ghost"
icon={<i>^</i>}
/>
</div>
<Typography color="gray">{deployment.environment}</Typography>
</div>
<div className="col-span-1">
<Typography color="gray">^ {deployment.branch}</Typography>
<Typography color="gray">
^ {deployment.commit.hash} {deployment.commit.message}
</Typography>
</div>
<div className="col-span-1 flex items-center">
<Typography color="gray" className="grow">
{relativeTime(deployment.updatedAt)} ^ {deployment.author}
</Typography>
<Menu placement="bottom-start">
<MenuHandler>
<button className="self-start">...</button>
</MenuHandler>
<MenuList>
<MenuItem>^ Visit</MenuItem>
<MenuItem>^ Assign domain</MenuItem>
<MenuItem>^ Change to production</MenuItem>
<hr className="my-3" />
<MenuItem>^ Redeploy</MenuItem>
<MenuItem>^ Rollback to this version</MenuItem>
</MenuList>
</Menu>
</div>
</div>
);
};
export default DeployDetailsCard;