temp (?) fix build

revert this if needed
This commit is contained in:
Eric Lewis
2024-02-26 11:56:51 -05:00
parent 0dfecd024d
commit 042aff2f87
46 changed files with 459 additions and 181 deletions
@@ -126,7 +126,8 @@ const DatePicker = ({
crossOrigin={undefined} crossOrigin={undefined}
/> />
</PopoverHandler> </PopoverHandler>
<PopoverContent> {/* TODO: Figure out what placeholder is for */}
<PopoverContent placeholder={''}>
{mode === 'single' && ( {mode === 'single' && (
<DayPicker <DayPicker
mode="single" mode="single"
@@ -145,19 +146,23 @@ const DatePicker = ({
/> />
<HorizontalLine /> <HorizontalLine />
<div className="flex justify-end"> <div className="flex justify-end">
{/* TODO: Figure out what placeholder is for */}
<Button <Button
size="sm" size="sm"
className="rounded-full mr-2" className="rounded-full mr-2"
variant="outlined" variant="outlined"
onClick={() => setIsOpen(false)} onClick={() => setIsOpen(false)}
placeholder={''}
> >
Cancel Cancel
</Button> </Button>
{/* TODO: Figure out what placeholder is for */}
<Button <Button
size="sm" size="sm"
className="rounded-full" className="rounded-full"
color="gray" color="gray"
onClick={() => handleRangeSelect()} onClick={() => handleRangeSelect()}
placeholder={''}
> >
Select Select
</Button> </Button>
+3 -3
View File
@@ -52,7 +52,7 @@ const Sidebar = () => {
<div>^</div> <div>^</div>
<div> <div>
<span>{organizations[index!]?.name}</span> <span>{organizations[index!]?.name}</span>
<Typography>Organization</Typography> <Typography placeholder={''}>Organization</Typography>
</div> </div>
</div> </div>
)} )}
@@ -70,7 +70,7 @@ const Sidebar = () => {
to={`/${orgSlug}`} to={`/${orgSlug}`}
className={({ isActive }) => (isActive ? 'text-blue-500' : '')} className={({ isActive }) => (isActive ? 'text-blue-500' : '')}
> >
<Typography>Projects</Typography> <Typography placeholder={''}>Projects</Typography>
</NavLink> </NavLink>
</div> </div>
<div> <div>
@@ -78,7 +78,7 @@ const Sidebar = () => {
to={`/${orgSlug}/settings`} to={`/${orgSlug}/settings`}
className={({ isActive }) => (isActive ? 'text-blue-500' : '')} className={({ isActive }) => (isActive ? 'text-blue-500' : '')}
> >
<Typography>Settings</Typography> <Typography placeholder={''}>Settings</Typography>
</NavLink> </NavLink>
</div> </div>
</div> </div>
@@ -21,11 +21,15 @@ const ProjectCard: React.FC<ProjectCardProps> = ({ project }) => {
return ( return (
<div className="bg-white border border-gray-200 rounded-lg shadow"> <div className="bg-white border border-gray-200 rounded-lg shadow">
<div className="flex gap-2 p-2 items-center"> <div className="flex gap-2 p-2 items-center">
<Avatar variant="rounded" src={project.icon || '/gray.png'} /> <Avatar
variant="rounded"
src={project.icon || '/gray.png'}
placeholder={''}
/>
<div className="grow"> <div className="grow">
<Link to={`projects/${project.id}`}> <Link to={`projects/${project.id}`}>
<Typography>{project.name}</Typography> <Typography placeholder={''}>{project.name}</Typography>
<Typography color="gray" variant="small"> <Typography color="gray" variant="small" placeholder={''}>
{project.deployments[0]?.domain?.name ?? {project.deployments[0]?.domain?.name ??
'No Production Deployment'} 'No Production Deployment'}
</Typography> </Typography>
@@ -35,25 +39,27 @@ const ProjectCard: React.FC<ProjectCardProps> = ({ project }) => {
<MenuHandler> <MenuHandler>
<button>...</button> <button>...</button>
</MenuHandler> </MenuHandler>
<MenuList> <MenuList placeholder={''}>
<MenuItem>^ Project settings</MenuItem> <MenuItem placeholder={''}>^ Project settings</MenuItem>
<MenuItem className="text-red-500">^ Delete project</MenuItem> <MenuItem className="text-red-500" placeholder={''}>
^ Delete project
</MenuItem>
</MenuList> </MenuList>
</Menu> </Menu>
</div> </div>
<div className="border-t-2 border-solid p-4 bg-gray-50"> <div className="border-t-2 border-solid p-4 bg-gray-50">
{project.deployments.length > 0 ? ( {project.deployments.length > 0 ? (
<> <>
<Typography variant="small" color="gray"> <Typography variant="small" color="gray" placeholder={''}>
^ {project.deployments[0].commitMessage} ^ {project.deployments[0].commitMessage}
</Typography> </Typography>
<Typography variant="small" color="gray"> <Typography variant="small" color="gray" placeholder={''}>
{relativeTimeMs(project.deployments[0].createdAt)} on ^&nbsp; {relativeTimeMs(project.deployments[0].createdAt)} on ^&nbsp;
{project.deployments[0].branch} {project.deployments[0].branch}
</Typography> </Typography>
</> </>
) : ( ) : (
<Typography variant="small" color="gray"> <Typography variant="small" color="gray" placeholder={''}>
No Production deployment No Production deployment
</Typography> </Typography>
)} )}
@@ -71,12 +71,13 @@ const ProjectSearchBar = ({ onChange }: ProjectsSearchProps) => {
className={`absolute w-1/2 max-h-52 -mt-1 overflow-y-auto ${ className={`absolute w-1/2 max-h-52 -mt-1 overflow-y-auto ${
(!inputValue || !isOpen) && 'hidden' (!inputValue || !isOpen) && 'hidden'
}`} }`}
placeholder={''}
> >
<List {...getMenuProps()}> <List {...getMenuProps()}>
{items.length ? ( {items.length ? (
<> <>
<div className="p-3"> <div className="p-3">
<Typography variant="small" color="gray"> <Typography variant="small" color="gray" placeholder={''}>
Suggestions Suggestions
</Typography> </Typography>
</div> </div>
@@ -84,19 +85,25 @@ const ProjectSearchBar = ({ onChange }: ProjectsSearchProps) => {
<ListItem <ListItem
selected={highlightedIndex === index || selectedItem === item} selected={highlightedIndex === index || selectedItem === item}
key={item.id} key={item.id}
placeholder={''}
{...getItemProps({ item, index })} {...getItemProps({ item, index })}
> >
<ListItemPrefix> <ListItemPrefix placeholder={''}>
<Avatar src={item.icon || '/gray.png'} variant="rounded" /> <Avatar
src={item.icon || '/gray.png'}
variant="rounded"
placeholder={''}
/>
</ListItemPrefix> </ListItemPrefix>
<div> <div>
<Typography variant="h6" color="blue-gray"> <Typography variant="h6" color="blue-gray" placeholder={''}>
{item.name} {item.name}
</Typography> </Typography>
<Typography <Typography
variant="small" variant="small"
color="gray" color="gray"
className="font-normal" className="font-normal"
placeholder={''}
> >
{item.organization.name} {item.organization.name}
</Typography> </Typography>
@@ -106,7 +113,9 @@ const ProjectSearchBar = ({ onChange }: ProjectsSearchProps) => {
</> </>
) : ( ) : (
<div className="p-3"> <div className="p-3">
<Typography>^ No projects matching this name</Typography> <Typography placeholder={''}>
^ No projects matching this name
</Typography>
</div> </div>
)} )}
</List> </List>
@@ -46,9 +46,15 @@ const ConnectAccount = ({ onAuth: onToken }: ConnectAccountInterface) => {
width={1000} width={1000}
height={1000} height={1000}
> >
<Button className="rounded-full mx-2">Connect to Github</Button> {/* TODO: figure out what placeholder is for */}
<Button className="rounded-full mx-2" placeholder={''}>
Connect to Github
</Button>
</OauthPopup> </OauthPopup>
<Button className="rounded-full mx-2">Connect to Gitea</Button> {/* TODO: figure out what placeholder is for */}
<Button className="rounded-full mx-2" placeholder={''}>
Connect to Gitea
</Button>
</div> </div>
<ConnectAccountTabPanel /> <ConnectAccountTabPanel />
</div> </div>
@@ -5,11 +5,11 @@ import { Tabs, TabsHeader, Tab } from '@material-tailwind/react';
const ConnectAccountTabPanel = () => { const ConnectAccountTabPanel = () => {
return ( return (
<Tabs className="grid bg-white h-32 p-2 m-4 rounded-md" value="import"> <Tabs className="grid bg-white h-32 p-2 m-4 rounded-md" value="import">
<TabsHeader className="grid grid-cols-2"> <TabsHeader className="grid grid-cols-2" placeholder={''}>
<Tab className="row-span-1" value="import"> <Tab className="row-span-1" value="import" placeholder={''}>
Import a repository Import a repository
</Tab> </Tab>
<Tab className="row-span-2" value="template"> <Tab className="row-span-2" value="template" placeholder={''}>
Start with a template Start with a template
</Tab> </Tab>
</TabsHeader> </TabsHeader>
@@ -43,7 +43,12 @@ const Deploy = () => {
</div> </div>
</div> </div>
<div> <div>
<Button onClick={handleOpen} variant="outlined" size="sm"> <Button
onClick={handleOpen}
variant="outlined"
size="sm"
placeholder={''}
>
^ Cancel ^ Cancel
</Button> </Button>
</div> </div>
@@ -55,7 +60,7 @@ const Deploy = () => {
handleConfirm={handleCancel} handleConfirm={handleCancel}
color="red" color="red"
> >
<Typography variant="small"> <Typography variant="small" placeholder={''}>
This will halt the deployment and you will have to start the process This will halt the deployment and you will have to start the process
from scratch. from scratch.
</Typography> </Typography>
@@ -62,7 +62,12 @@ const DeployStep = ({
<div className="p-2 text-sm text-gray-500 h-36 overflow-y-scroll"> <div className="p-2 text-sm text-gray-500 h-36 overflow-y-scroll">
{processLogs.map((log, key) => { {processLogs.map((log, key) => {
return ( return (
<Typography variant="small" color="gray" key={key}> <Typography
variant="small"
color="gray"
key={key}
placeholder={''}
>
{log} {log}
</Typography> </Typography>
); );
@@ -75,6 +80,7 @@ const DeployStep = ({
toast.success('Logs copied'); toast.success('Logs copied');
}} }}
color="blue" color="blue"
placeholder={''}
> >
^ Copy log ^ Copy log
</Button> </Button>
@@ -66,7 +66,9 @@ const ProjectRepoCard: React.FC<ProjectRepoCardProps> = ({ repository }) => {
<Spinner className="h-4 w-4" /> <Spinner className="h-4 w-4" />
) : ( ) : (
<div className="hidden group-hover:block"> <div className="hidden group-hover:block">
<IconButton size="sm">{'>'}</IconButton> <IconButton size="sm" placeholder={''}>
{'>'}
</IconButton>
</div> </div>
)} )}
</div> </div>
@@ -136,11 +136,12 @@ const RepositoryList = ({ octokit }: RepositoryListProps) => {
) : ( ) : (
<div className="mt-4 p-6 flex items-center justify-center"> <div className="mt-4 p-6 flex items-center justify-center">
<div className="text-center"> <div className="text-center">
<Typography>No repository found</Typography> <Typography placeholder={''}>No repository found</Typography>
<Button <Button
className="rounded-full mt-5" className="rounded-full mt-5"
size="sm" size="sm"
onClick={handleResetFilters} onClick={handleResetFilters}
placeholder={''}
> >
^ Reset filters ^ Reset filters
</Button> </Button>
@@ -18,11 +18,15 @@ interface TemplateCardProps {
const CardDetails = ({ template }: { template: TemplateDetails }) => { const CardDetails = ({ template }: { template: TemplateDetails }) => {
return ( return (
<div className="h-14 group bg-gray-200 border-gray-200 rounded-lg shadow p-4 flex items-center justify-between"> <div className="h-14 group bg-gray-200 border-gray-200 rounded-lg shadow p-4 flex items-center justify-between">
<Typography className="grow"> <Typography className="grow" placeholder={''}>
{template.icon} {template.name} {template.icon} {template.name}
</Typography> </Typography>
<div> <div>
<IconButton size="sm" className="rounded-full hidden group-hover:block"> <IconButton
size="sm"
className="rounded-full hidden group-hover:block"
placeholder={''}
>
{'>'} {'>'}
</IconButton> </IconButton>
</div> </div>
@@ -13,20 +13,29 @@ const ActivityCard = ({ activity }: ActivityCardProps) => {
return ( return (
<div className="group flex gap-2 hover:bg-gray-200 rounded mt-1"> <div className="group flex gap-2 hover:bg-gray-200 rounded mt-1">
<div className="w-8"> <div className="w-8">
<Avatar src={activity.author?.avatar_url} variant="rounded" size="sm" /> <Avatar
src={activity.author?.avatar_url}
variant="rounded"
size="sm"
placeholder={''}
/>
</div> </div>
<div className="grow"> <div className="grow">
<Typography>{activity.commit.author?.name}</Typography> <Typography placeholder={''}>{activity.commit.author?.name}</Typography>
<Typography variant="small" color="gray"> <Typography variant="small" color="gray" placeholder={''}>
{relativeTimeISO(activity.commit.author!.date!)} ^{' '} {relativeTimeISO(activity.commit.author!.date!)} ^{' '}
{activity.branch.name} {activity.branch.name}
</Typography> </Typography>
<Typography variant="small" color="gray"> <Typography variant="small" color="gray" placeholder={''}>
{activity.commit.message} {activity.commit.message}
</Typography> </Typography>
</div> </div>
<div className="mr-2 self-center hidden group-hover:block"> <div className="mr-2 self-center hidden group-hover:block">
<IconButton size="sm" className="rounded-full bg-gray-600"> <IconButton
size="sm"
className="rounded-full bg-gray-600"
placeholder={''}
>
{'>'} {'>'}
</IconButton> </IconButton>
</div> </div>
@@ -17,9 +17,9 @@ interface AssignDomainProps {
const AssignDomainDialog = ({ open, handleOpen }: AssignDomainProps) => { const AssignDomainDialog = ({ open, handleOpen }: AssignDomainProps) => {
return ( return (
<Dialog open={open} handler={handleOpen}> <Dialog open={open} handler={handleOpen} placeholder={''}>
<DialogHeader>Assign Domain</DialogHeader> <DialogHeader placeholder={''}>Assign Domain</DialogHeader>
<DialogBody> <DialogBody placeholder={''}>
In order to assign a domain to your production deployments, configure it In order to assign a domain to your production deployments, configure it
in the{' '} in the{' '}
{/* TODO: Fix selection of project settings tab on navigation to domains */} {/* TODO: Fix selection of project settings tab on navigation to domains */}
@@ -36,12 +36,13 @@ const AssignDomainDialog = ({ open, handleOpen }: AssignDomainProps) => {
theme={atomOneLight} theme={atomOneLight}
/> />
</DialogBody> </DialogBody>
<DialogFooter className="flex justify-start"> <DialogFooter className="flex justify-start" placeholder={''}>
<Button <Button
className="rounded-3xl" className="rounded-3xl"
variant="gradient" variant="gradient"
color="blue" color="blue"
onClick={handleOpen} onClick={handleOpen}
placeholder={''}
> >
<span>Okay</span> <span>Okay</span>
</Button> </Button>
@@ -93,10 +93,12 @@ const DeploymentDetailsCard = ({
<div className="col-span-3"> <div className="col-span-3">
<div className="flex"> <div className="flex">
{deployment.url && ( {deployment.url && (
<Typography className=" basis-3/4">{deployment.url}</Typography> <Typography className="basis-3/4" placeholder={''}>
{deployment.url}
</Typography>
)} )}
</div> </div>
<Typography color="gray"> <Typography color="gray" placeholder={''}>
{deployment.environment === Environment.Production {deployment.environment === Environment.Production
? `Production ${deployment.isCurrent ? '(Current)' : ''}` ? `Production ${deployment.isCurrent ? '(Current)' : ''}`
: 'Preview'} : 'Preview'}
@@ -111,14 +113,16 @@ const DeploymentDetailsCard = ({
/> />
</div> </div>
<div className="col-span-2"> <div className="col-span-2">
<Typography color="gray">^ {deployment.branch}</Typography> <Typography color="gray" placeholder={''}>
<Typography color="gray"> ^ {deployment.branch}
</Typography>
<Typography color="gray" placeholder={''}>
^ {deployment.commitHash.substring(0, SHORT_COMMIT_HASH_LENGTH)}{' '} ^ {deployment.commitHash.substring(0, SHORT_COMMIT_HASH_LENGTH)}{' '}
{deployment.commitMessage} {deployment.commitMessage}
</Typography> </Typography>
</div> </div>
<div className="col-span-2 flex items-center"> <div className="col-span-2 flex items-center">
<Typography color="gray" className="grow"> <Typography color="gray" className="grow" placeholder={''}>
^ {relativeTimeMs(deployment.createdAt)} ^{' '} ^ {relativeTimeMs(deployment.createdAt)} ^{' '}
<Tooltip content={deployment.createdBy.name}> <Tooltip content={deployment.createdBy.name}>
{formatAddress(deployment.createdBy.name ?? '')} {formatAddress(deployment.createdBy.name ?? '')}
@@ -128,18 +132,22 @@ const DeploymentDetailsCard = ({
<MenuHandler> <MenuHandler>
<button className="self-start">...</button> <button className="self-start">...</button>
</MenuHandler> </MenuHandler>
<MenuList> <MenuList placeholder={''}>
<a href={deployment.url} target="_blank" rel="noreferrer"> <a href={deployment.url} target="_blank" rel="noreferrer">
<MenuItem disabled={!Boolean(deployment.url)}>^ Visit</MenuItem> <MenuItem disabled={!Boolean(deployment.url)} placeholder={''}>
^ Visit
</MenuItem>
</a> </a>
<MenuItem <MenuItem
onClick={() => setAssignDomainDialog(!assignDomainDialog)} onClick={() => setAssignDomainDialog(!assignDomainDialog)}
placeholder={''}
> >
^ Assign domain ^ Assign domain
</MenuItem> </MenuItem>
<MenuItem <MenuItem
onClick={() => setChangeToProduction(!changeToProduction)} onClick={() => setChangeToProduction(!changeToProduction)}
disabled={!(deployment.environment !== Environment.Production)} disabled={!(deployment.environment !== Environment.Production)}
placeholder={''}
> >
^ Change to production ^ Change to production
</MenuItem> </MenuItem>
@@ -152,6 +160,7 @@ const DeploymentDetailsCard = ({
deployment.isCurrent deployment.isCurrent
) )
} }
placeholder={''}
> >
^ Redeploy to production ^ Redeploy to production
</MenuItem> </MenuItem>
@@ -162,6 +171,7 @@ const DeploymentDetailsCard = ({
deployment.environment !== Environment.Production || deployment.environment !== Environment.Production ||
!Boolean(currentDeployment) !Boolean(currentDeployment)
} }
placeholder={''}
> >
^ Rollback to this version ^ Rollback to this version
</MenuItem> </MenuItem>
@@ -180,17 +190,22 @@ const DeploymentDetailsCard = ({
}} }}
> >
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Upon confirmation, this deployment will be changed to production. Upon confirmation, this deployment will be changed to production.
</Typography> </Typography>
<DeploymentDialogBodyCard deployment={deployment} /> <DeploymentDialogBodyCard deployment={deployment} />
<Typography variant="small"> <Typography variant="small" placeholder={''}>
The new deployment will be associated with these domains: The new deployment will be associated with these domains:
</Typography> </Typography>
{prodBranchDomains.length > 0 && {prodBranchDomains.length > 0 &&
prodBranchDomains.map((value) => { prodBranchDomains.map((value) => {
return ( return (
<Typography variant="small" color="blue" key={value.id}> <Typography
variant="small"
color="blue"
key={value.id}
placeholder={''}
>
^ {value.name} ^ {value.name}
</Typography> </Typography>
); );
@@ -209,16 +224,16 @@ const DeploymentDetailsCard = ({
}} }}
> >
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Upon confirmation, new deployment will be created with the same Upon confirmation, new deployment will be created with the same
source code as current deployment. source code as current deployment.
</Typography> </Typography>
<DeploymentDialogBodyCard deployment={deployment} /> <DeploymentDialogBodyCard deployment={deployment} />
<Typography variant="small"> <Typography variant="small" placeholder={''}>
These domains will point to your new deployment: These domains will point to your new deployment:
</Typography> </Typography>
{deployment.domain?.name && ( {deployment.domain?.name && (
<Typography variant="small" color="blue"> <Typography variant="small" color="blue" placeholder={''}>
{deployment.domain?.name} {deployment.domain?.name}
</Typography> </Typography>
)} )}
@@ -237,7 +252,7 @@ const DeploymentDetailsCard = ({
}} }}
> >
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Upon confirmation, this deployment will replace your current Upon confirmation, this deployment will replace your current
deployment deployment
</Typography> </Typography>
@@ -255,10 +270,10 @@ const DeploymentDetailsCard = ({
color: 'orange', color: 'orange',
}} }}
/> />
<Typography variant="small"> <Typography variant="small" placeholder={''}>
These domains will point to your new deployment: These domains will point to your new deployment:
</Typography> </Typography>
<Typography variant="small" color="blue"> <Typography variant="small" color="blue" placeholder={''}>
^ {currentDeployment.domain?.name} ^ {currentDeployment.domain?.name}
</Typography> </Typography>
</div> </div>
@@ -20,7 +20,7 @@ const DeploymentDialogBodyCard = ({
deployment, deployment,
}: DeploymentDialogBodyCardProps) => { }: DeploymentDialogBodyCardProps) => {
return ( return (
<Card className="p-2 shadow-none"> <Card className="p-2 shadow-none" placeholder={''}>
{chip && ( {chip && (
<Chip <Chip
className={`w-fit normal-case font-normal`} className={`w-fit normal-case font-normal`}
@@ -30,16 +30,16 @@ const DeploymentDialogBodyCard = ({
/> />
)} )}
{deployment.url && ( {deployment.url && (
<Typography variant="small" className="text-black"> <Typography variant="small" className="text-black" placeholder={''}>
{deployment.url} {deployment.url}
</Typography> </Typography>
)} )}
<Typography variant="small"> <Typography variant="small" placeholder={''}>
^ {deployment.branch} ^{' '} ^ {deployment.branch} ^{' '}
{deployment.commitHash.substring(0, SHORT_COMMIT_HASH_LENGTH)}{' '} {deployment.commitHash.substring(0, SHORT_COMMIT_HASH_LENGTH)}{' '}
{deployment.commitMessage} {deployment.commitMessage}
</Typography> </Typography>
<Typography variant="small"> <Typography variant="small" placeholder={''}>
^ {relativeTimeMs(deployment.createdAt)} ^{' '} ^ {relativeTimeMs(deployment.createdAt)} ^{' '}
{formatAddress(deployment.createdBy.name ?? '')} {formatAddress(deployment.createdBy.name ?? '')}
</Typography> </Typography>
@@ -77,6 +77,7 @@ const FilterForm = ({ value, onChange }: FilterFormProps) => {
onClick={() => setSelectedStatus(StatusOptions.ALL_STATUS)} onClick={() => setSelectedStatus(StatusOptions.ALL_STATUS)}
className="rounded-full" className="rounded-full"
size="sm" size="sm"
placeholder={''}
> >
X X
</IconButton> </IconButton>
@@ -21,7 +21,9 @@ const AddEnvironmentVariableRow = ({
return ( return (
<div className="flex gap-1 p-2"> <div className="flex gap-1 p-2">
<div> <div>
<Typography variant="small">Key</Typography> <Typography variant="small" placeholder={''}>
Key
</Typography>
<Input <Input
crossOrigin={undefined} crossOrigin={undefined}
{...register(`variables.${index}.key`, { {...register(`variables.${index}.key`, {
@@ -30,7 +32,9 @@ const AddEnvironmentVariableRow = ({
/> />
</div> </div>
<div> <div>
<Typography variant="small">Value</Typography> <Typography variant="small" placeholder={''}>
Value
</Typography>
<Input <Input
crossOrigin={undefined} crossOrigin={undefined}
{...register(`variables.${index}.value`, { {...register(`variables.${index}.value`, {
@@ -43,6 +47,7 @@ const AddEnvironmentVariableRow = ({
size="sm" size="sm"
onClick={() => onDelete()} onClick={() => onDelete()}
disabled={isDeleteDisabled} disabled={isDeleteDisabled}
placeholder={''}
> >
{'>'} {'>'}
</IconButton> </IconButton>
@@ -61,23 +61,26 @@ const AddMemberDialog = ({
}, []); }, []);
return ( return (
<Dialog open={open} handler={handleOpen}> <Dialog open={open} handler={handleOpen} placeholder={''}>
<DialogHeader className="flex justify-between"> <DialogHeader className="flex justify-between" placeholder={''}>
<div>Add member</div> <div>Add member</div>
<Button <Button
variant="outlined" variant="outlined"
onClick={handleOpen} onClick={handleOpen}
className="mr-1 rounded-3xl" className="mr-1 rounded-3xl"
placeholder={''}
> >
X X
</Button> </Button>
</DialogHeader> </DialogHeader>
<form onSubmit={handleSubmit(submitHandler)}> <form onSubmit={handleSubmit(submitHandler)}>
<DialogBody className="flex flex-col gap-2 p-4"> <DialogBody className="flex flex-col gap-2 p-4" placeholder={''}>
<Typography variant="small"> <Typography variant="small" placeholder={''}>
We will send an invitation link to this email address. We will send an invitation link to this email address.
</Typography> </Typography>
<Typography variant="small">Email address</Typography> <Typography variant="small" placeholder={''}>
Email address
</Typography>
<Input <Input
type="email" type="email"
crossOrigin={undefined} crossOrigin={undefined}
@@ -85,8 +88,10 @@ const AddMemberDialog = ({
required: 'email field cannot be empty', required: 'email field cannot be empty',
})} })}
/> />
<Typography variant="small">Permissions</Typography> <Typography variant="small" placeholder={''}>
<Typography variant="small"> Permissions
</Typography>
<Typography variant="small" placeholder={''}>
You can change this later if required. You can change this later if required.
</Typography> </Typography>
<Checkbox <Checkbox
@@ -102,8 +107,13 @@ const AddMemberDialog = ({
color="blue" color="blue"
/> />
</DialogBody> </DialogBody>
<DialogFooter className="flex justify-start"> <DialogFooter className="flex justify-start" placeholder={''}>
<Button variant="outlined" onClick={handleOpen} className="mr-1"> <Button
variant="outlined"
onClick={handleOpen}
className="mr-1"
placeholder={''}
>
Cancel Cancel
</Button> </Button>
<Button <Button
@@ -111,6 +121,7 @@ const AddMemberDialog = ({
color="blue" color="blue"
type="submit" type="submit"
disabled={!isValid} disabled={!isValid}
placeholder={''}
> >
Send invite Send invite
</Button> </Button>
@@ -53,20 +53,21 @@ const DeleteProjectDialog = ({
}, [client, project, handleOpen]); }, [client, project, handleOpen]);
return ( return (
<Dialog open={open} handler={handleOpen}> <Dialog open={open} handler={handleOpen} placeholder={''}>
<DialogHeader className="flex justify-between"> <DialogHeader className="flex justify-between" placeholder={''}>
<div>Delete project?</div> <div>Delete project?</div>
<Button <Button
variant="outlined" variant="outlined"
onClick={handleOpen} onClick={handleOpen}
className="mr-1 rounded-3xl" className="mr-1 rounded-3xl"
placeholder={''}
> >
X X
</Button> </Button>
</DialogHeader> </DialogHeader>
<form onSubmit={handleSubmit(deleteProjectHandler)}> <form onSubmit={handleSubmit(deleteProjectHandler)}>
<DialogBody className="flex flex-col gap-2"> <DialogBody className="flex flex-col gap-2" placeholder={''}>
<Typography variant="paragraph"> <Typography variant="paragraph" placeholder={''}>
Deleting your project is irreversible. Enter your projects Deleting your project is irreversible. Enter your projects
name&nbsp; name&nbsp;
<span className="bg-blue-100 text-blue-700">({project.name})</span> <span className="bg-blue-100 text-blue-700">({project.name})</span>
@@ -80,12 +81,17 @@ const DeleteProjectDialog = ({
validate: (value) => value === project.name, validate: (value) => value === project.name,
})} })}
/> />
<Typography variant="small" color="red"> <Typography variant="small" color="red" placeholder={''}>
^ Deleting your project is irreversible. ^ Deleting your project is irreversible.
</Typography> </Typography>
</DialogBody> </DialogBody>
<DialogFooter className="flex justify-start"> <DialogFooter className="flex justify-start" placeholder={''}>
<Button variant="outlined" onClick={handleOpen} className="mr-1"> <Button
variant="outlined"
onClick={handleOpen}
className="mr-1"
placeholder={''}
>
Cancel Cancel
</Button> </Button>
<Button <Button
@@ -93,6 +99,7 @@ const DeleteProjectDialog = ({
color="red" color="red"
type="submit" type="submit"
disabled={!isValid} disabled={!isValid}
placeholder={''}
> >
Yes, Delete project Yes, Delete project
</Button> </Button>
@@ -29,11 +29,11 @@ const DisplayEnvironmentVariables = ({
</div> </div>
<Collapse open={openCollapse}> <Collapse open={openCollapse}>
{variables.length === 0 ? ( {variables.length === 0 ? (
<Card className="bg-gray-300 flex items-center p-4"> <Card className="bg-gray-300 flex items-center p-4" placeholder={''}>
<Typography variant="small" className="text-black"> <Typography variant="small" className="text-black" placeholder={''}>
No environment variables added yet. No environment variables added yet.
</Typography> </Typography>
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Once you add them, theyll show up here. Once you add them, theyll show up here.
</Typography> </Typography>
</Card> </Card>
@@ -68,7 +68,7 @@ const DomainCard = ({
<> <>
<div className="flex justify-between py-3"> <div className="flex justify-between py-3">
<div className="flex justify-start gap-1"> <div className="flex justify-start gap-1">
<Typography variant="h6"> <Typography variant="h6" placeholder={''}>
<i>^</i> {domain.name} <i>^</i> {domain.name}
</Typography> </Typography>
<Chip <Chip
@@ -97,18 +97,20 @@ const DomainCard = ({
<MenuHandler> <MenuHandler>
<button className="border-2 rounded-full w-8 h-8">...</button> <button className="border-2 rounded-full w-8 h-8">...</button>
</MenuHandler> </MenuHandler>
<MenuList> <MenuList placeholder={''}>
<MenuItem <MenuItem
className="text-black" className="text-black"
onClick={() => { onClick={() => {
setEditDialogOpen((preVal) => !preVal); setEditDialogOpen((preVal) => !preVal);
}} }}
placeholder={''}
> >
^ Edit domain ^ Edit domain
</MenuItem> </MenuItem>
<MenuItem <MenuItem
className="text-red-500" className="text-red-500"
onClick={() => setDeleteDialogOpen((preVal) => !preVal)} onClick={() => setDeleteDialogOpen((preVal) => !preVal)}
placeholder={''}
> >
^ Delete domain ^ Delete domain
</MenuItem> </MenuItem>
@@ -127,7 +129,7 @@ const DomainCard = ({
}} }}
color="red" color="red"
> >
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Once deleted, the project{' '} Once deleted, the project{' '}
<span className="bg-blue-100 rounded-sm p-0.5 text-blue-700"> <span className="bg-blue-100 rounded-sm p-0.5 text-blue-700">
{project.name} {project.name}
@@ -140,15 +142,21 @@ const DomainCard = ({
</ConfirmDialog> </ConfirmDialog>
</div> </div>
<Typography variant="small">Production</Typography> <Typography variant="small" placeholder={''}>
Production
</Typography>
{domain.status === DomainStatus.Pending && ( {domain.status === DomainStatus.Pending && (
<Card className="bg-gray-200 p-4 text-sm"> <Card className="bg-gray-200 p-4 text-sm" placeholder={''}>
{refreshStatus === RefreshStatus.IDLE ? ( {refreshStatus === RefreshStatus.IDLE ? (
<Typography variant="small"> <Typography variant="small" placeholder={''}>
^ Add these records to your domain and refresh to check ^ Add these records to your domain and refresh to check
</Typography> </Typography>
) : refreshStatus === RefreshStatus.CHECKING ? ( ) : refreshStatus === RefreshStatus.CHECKING ? (
<Typography variant="small" className="text-blue-500"> <Typography
variant="small"
className="text-blue-500"
placeholder={''}
>
^ Checking records for {domain.name} ^ Checking records for {domain.name}
</Typography> </Typography>
) : ( ) : (
@@ -122,27 +122,32 @@ const EditDomainDialog = ({
}, [domain]); }, [domain]);
return ( return (
<Dialog open={open} handler={handleOpen}> <Dialog open={open} handler={handleOpen} placeholder={''}>
<DialogHeader className="flex justify-between"> <DialogHeader className="flex justify-between" placeholder={''}>
<div>Edit domain</div> <div>Edit domain</div>
<Button <Button
variant="outlined" variant="outlined"
onClick={handleOpen} onClick={handleOpen}
className="mr-1 rounded-3xl" className="mr-1 rounded-3xl"
placeholder={''}
> >
X X
</Button> </Button>
</DialogHeader> </DialogHeader>
<form onSubmit={handleSubmit(updateDomainHandler)}> <form onSubmit={handleSubmit(updateDomainHandler)}>
<DialogBody className="flex flex-col gap-2 p-4"> <DialogBody className="flex flex-col gap-2 p-4" placeholder={''}>
<Typography variant="small">Domain name</Typography> <Typography variant="small" placeholder={''}>
Domain name
</Typography>
<Input crossOrigin={undefined} {...register('name')} /> <Input crossOrigin={undefined} {...register('name')} />
<Typography variant="small">Redirect to</Typography> <Typography variant="small" placeholder={''}>
Redirect to
</Typography>
<Controller <Controller
name="redirectedTo" name="redirectedTo"
control={control} control={control}
render={({ field }) => ( render={({ field }) => (
<Select {...field} disabled={isDisableDropdown}> <Select {...field} disabled={isDisableDropdown} placeholder={''}>
{redirectOptions.map((option, key) => ( {redirectOptions.map((option, key) => (
<Option key={key} value={option}> <Option key={key} value={option}>
^ {option} ^ {option}
@@ -154,14 +159,16 @@ const EditDomainDialog = ({
{isDisableDropdown && ( {isDisableDropdown && (
<div className="flex p-2 gap-2 text-black bg-gray-300 rounded-lg"> <div className="flex p-2 gap-2 text-black bg-gray-300 rounded-lg">
<div>^</div> <div>^</div>
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Domain {domainRedirectedFrom ? domainRedirectedFrom.name : ''} Domain {domainRedirectedFrom ? domainRedirectedFrom.name : ''}
redirects to this domain so you can not redirect this doman redirects to this domain so you can not redirect this doman
further. further.
</Typography> </Typography>
</div> </div>
)} )}
<Typography variant="small">Git branch</Typography> <Typography variant="small" placeholder={''}>
Git branch
</Typography>
<Input <Input
crossOrigin={undefined} crossOrigin={undefined}
{...register('branch', { {...register('branch', {
@@ -174,13 +181,22 @@ const EditDomainDialog = ({
} }
/> />
{!isValid && ( {!isValid && (
<Typography variant="small" className="text-red-500"> <Typography
variant="small"
className="text-red-500"
placeholder={''}
>
We couldn&apos;t find this branch in the connected Git repository. We couldn&apos;t find this branch in the connected Git repository.
</Typography> </Typography>
)} )}
</DialogBody> </DialogBody>
<DialogFooter className="flex justify-start"> <DialogFooter className="flex justify-start" placeholder={''}>
<Button variant="outlined" onClick={handleOpen} className="mr-1"> <Button
variant="outlined"
onClick={handleOpen}
className="mr-1"
placeholder={''}
>
Cancel Cancel
</Button> </Button>
<Button <Button
@@ -188,6 +204,7 @@ const EditDomainDialog = ({
color="blue" color="blue"
type="submit" type="submit"
disabled={!isDirty} disabled={!isDirty}
placeholder={''}
> >
Save changes Save changes
</Button> </Button>
@@ -84,7 +84,9 @@ const EditEnvironmentVariableRow = ({
<> <>
<div className="flex gap-1 p-2"> <div className="flex gap-1 p-2">
<div> <div>
<Typography variant="small">Key</Typography> <Typography variant="small" placeholder={''}>
Key
</Typography>
<Input <Input
crossOrigin={undefined} crossOrigin={undefined}
disabled={!edit} disabled={!edit}
@@ -92,7 +94,9 @@ const EditEnvironmentVariableRow = ({
/> />
</div> </div>
<div> <div>
<Typography variant="small">Value</Typography> <Typography variant="small" placeholder={''}>
Value
</Typography>
<Input <Input
crossOrigin={undefined} crossOrigin={undefined}
disabled={!edit} disabled={!edit}
@@ -114,6 +118,7 @@ const EditEnvironmentVariableRow = ({
<IconButton <IconButton
onClick={handleSubmit(updateEnvironmentVariableHandler)} onClick={handleSubmit(updateEnvironmentVariableHandler)}
size="sm" size="sm"
placeholder={''}
> >
{'S'} {'S'}
</IconButton> </IconButton>
@@ -125,6 +130,7 @@ const EditEnvironmentVariableRow = ({
reset(); reset();
setEdit((preVal) => !preVal); setEdit((preVal) => !preVal);
}} }}
placeholder={''}
> >
{'C'} {'C'}
</IconButton> </IconButton>
@@ -138,6 +144,7 @@ const EditEnvironmentVariableRow = ({
onClick={() => { onClick={() => {
setEdit((preVal) => !preVal); setEdit((preVal) => !preVal);
}} }}
placeholder={''}
> >
{'E'} {'E'}
</IconButton> </IconButton>
@@ -146,6 +153,7 @@ const EditEnvironmentVariableRow = ({
<IconButton <IconButton
size="sm" size="sm"
onClick={() => setDeleteDialogOpen((preVal) => !preVal)} onClick={() => setDeleteDialogOpen((preVal) => !preVal)}
placeholder={''}
> >
{'D'} {'D'}
</IconButton> </IconButton>
@@ -162,7 +170,7 @@ const EditEnvironmentVariableRow = ({
handleConfirm={removeEnvironmentVariableHandler} handleConfirm={removeEnvironmentVariableHandler}
color="red" color="red"
> >
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Are you sure you want to delete the variable&nbsp; Are you sure you want to delete the variable&nbsp;
<span className="bg-blue-100">{variable.key}</span>? <span className="bg-blue-100">{variable.key}</span>?
</Typography> </Typography>
@@ -104,6 +104,7 @@ const MemberCard = ({
selected={(_, index) => ( selected={(_, index) => (
<span>{DROPDOWN_OPTIONS[index!]?.label}</span> <span>{DROPDOWN_OPTIONS[index!]?.label}</span>
)} )}
placeholder={''}
> >
{DROPDOWN_OPTIONS.map((permission, key) => ( {DROPDOWN_OPTIONS.map((permission, key) => (
<Option key={key} value={permission.value}> <Option key={key} value={permission.value}>
@@ -132,6 +133,7 @@ const MemberCard = ({
onClick={() => { onClick={() => {
setRemoveMemberDialogOpen((prevVal) => !prevVal); setRemoveMemberDialogOpen((prevVal) => !prevVal);
}} }}
placeholder={''}
> >
D D
</IconButton> </IconButton>
@@ -152,7 +154,7 @@ const MemberCard = ({
}} }}
color="red" color="red"
> >
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Once removed, {formatAddress(member.name ?? '')} ( Once removed, {formatAddress(member.name ?? '')} (
{formatAddress(ethAddress)}@{emailDomain}) will not be able to access {formatAddress(ethAddress)}@{emailDomain}) will not be able to access
this project. this project.
@@ -17,14 +17,19 @@ const RepoConnectedSection = ({
<div className="flex gap-4"> <div className="flex gap-4">
<div>^</div> <div>^</div>
<div className="grow"> <div className="grow">
<Typography variant="small">{linkedRepo.full_name}</Typography> <Typography variant="small" placeholder={''}>
<Typography variant="small">Connected just now</Typography> {linkedRepo.full_name}
</Typography>
<Typography variant="small" placeholder={''}>
Connected just now
</Typography>
</div> </div>
<div> <div>
<Button <Button
onClick={() => setDisconnectRepoDialogOpen(true)} onClick={() => setDisconnectRepoDialogOpen(true)}
variant="outlined" variant="outlined"
size="sm" size="sm"
placeholder={''}
> >
^ Disconnect ^ Disconnect
</Button> </Button>
@@ -39,7 +44,7 @@ const RepoConnectedSection = ({
}} }}
color="red" color="red"
> >
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Any data tied to your Git project may become misconfigured. Are you Any data tied to your Git project may become misconfigured. Are you
sure you want to continue? sure you want to continue?
</Typography> </Typography>
@@ -54,14 +54,18 @@ const SetupDomain = () => {
className="flex flex-col gap-6 w-full" className="flex flex-col gap-6 w-full"
> >
<div> <div>
<Typography variant="h5">Setup domain name</Typography> <Typography variant="h5" placeholder={''}>
<Typography variant="small"> Setup domain name
</Typography>
<Typography variant="small" placeholder={''}>
Add your domain and setup redirects Add your domain and setup redirects
</Typography> </Typography>
</div> </div>
<div className="w-auto"> <div className="w-auto">
<Typography variant="small">Domain name</Typography> <Typography variant="small" placeholder={''}>
Domain name
</Typography>
<Input <Input
type="text" type="text"
variant="outlined" variant="outlined"
@@ -76,7 +80,7 @@ const SetupDomain = () => {
{isValid && ( {isValid && (
<div> <div>
<Typography>Primary domain</Typography> <Typography placeholder={''}>Primary domain</Typography>
<div className="flex flex-col gap-3"> <div className="flex flex-col gap-3">
<Radio <Radio
label={domainStr} label={domainStr}
@@ -108,6 +112,7 @@ const SetupDomain = () => {
className="w-fit" className="w-fit"
color={isValid ? 'blue' : 'gray'} color={isValid ? 'blue' : 'gray'}
type="submit" type="submit"
placeholder={''}
> >
<i>^</i> Next <i>^</i> Next
</Button> </Button>
@@ -23,6 +23,7 @@ const WebhookCard = ({ webhookUrl, onDelete }: WebhookCardProps) => {
navigator.clipboard.writeText(webhookUrl); navigator.clipboard.writeText(webhookUrl);
toast.success('Copied to clipboard'); toast.success('Copied to clipboard');
}} }}
placeholder={''}
> >
C C
</Button> </Button>
@@ -32,6 +33,7 @@ const WebhookCard = ({ webhookUrl, onDelete }: WebhookCardProps) => {
onClick={() => { onClick={() => {
setDeleteDialogOpen(true); setDeleteDialogOpen(true);
}} }}
placeholder={''}
> >
X X
</Button> </Button>
@@ -48,7 +50,7 @@ const WebhookCard = ({ webhookUrl, onDelete }: WebhookCardProps) => {
}} }}
color="red" color="red"
> >
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Are you sure you want to delete the variable{' '} Are you sure you want to delete the variable{' '}
<span className="bg-blue-100 p-0.5 rounded-sm">{webhookUrl}</span>? <span className="bg-blue-100 p-0.5 rounded-sm">{webhookUrl}</span>?
</Typography> </Typography>
@@ -9,7 +9,7 @@ const AsyncSelect = React.forwardRef((props: SelectProps, ref: any) => {
useEffect(() => setKey((preVal) => preVal + 1), [props]); useEffect(() => setKey((preVal) => preVal + 1), [props]);
return <Select key={key} ref={ref} {...props} />; return <Select key={key} ref={ref} {...props} placeholder={''} />;
}); });
AsyncSelect.displayName = 'AsyncSelect'; AsyncSelect.displayName = 'AsyncSelect';
@@ -30,23 +30,31 @@ const ConfirmDialog = ({
color, color,
}: ConfirmDialogProp) => { }: ConfirmDialogProp) => {
return ( return (
<Dialog open={open} handler={handleOpen}> <Dialog open={open} handler={handleOpen} placeholder={''}>
<DialogHeader className="flex justify-between"> <DialogHeader className="flex justify-between" placeholder={''}>
<Typography variant="h6">{dialogTitle} </Typography> <Typography variant="h6" placeholder={''}>
{dialogTitle}{' '}
</Typography>
<Button <Button
variant="outlined" variant="outlined"
onClick={handleOpen} onClick={handleOpen}
className=" rounded-full" className=" rounded-full"
placeholder={''}
> >
X X
</Button> </Button>
</DialogHeader> </DialogHeader>
<DialogBody>{children}</DialogBody> <DialogBody placeholder={''}>{children}</DialogBody>
<DialogFooter className="flex justify-start gap-2"> <DialogFooter className="flex justify-start gap-2" placeholder={''}>
<Button variant="outlined" onClick={handleOpen}> <Button variant="outlined" onClick={handleOpen} placeholder={''}>
Cancel Cancel
</Button> </Button>
<Button variant="gradient" color={color} onClick={handleConfirm}> <Button
variant="gradient"
color={color}
onClick={handleConfirm}
placeholder={''}
>
{confirmButtonTitle} {confirmButtonTitle}
</Button> </Button>
</DialogFooter> </DialogFooter>
@@ -36,11 +36,17 @@ const ProjectSearch = () => {
}} }}
/> />
</div> </div>
<IconButton color="blue" className="rounded-full mr-2"> <IconButton
<Typography variant="h5">+</Typography> color="blue"
className="rounded-full mr-2"
placeholder={''}
>
<Typography variant="h5" placeholder={''}>
+
</Typography>
</IconButton> </IconButton>
<div className="mr-2 flex items-center"> <div className="mr-2 flex items-center">
<Typography>^</Typography> <Typography placeholder={''}>^</Typography>
</div> </div>
<div className="px-2 py-1 bg-blue-gray-50 rounded-lg flex items-center"> <div className="px-2 py-1 bg-blue-gray-50 rounded-lg flex items-center">
{user?.name && ( {user?.name && (
@@ -28,7 +28,9 @@ const Projects = () => {
<div className="flex p-5"> <div className="flex p-5">
<div className="grow"> <div className="grow">
<div className="flex gap-2 items-center"> <div className="flex gap-2 items-center">
<Typography variant="h4">Projects</Typography> <Typography variant="h4" placeholder={''}>
Projects
</Typography>
<Chip <Chip
className="bg-gray-300 rounded-full static" className="bg-gray-300 rounded-full static"
value={projects.length} value={projects.length}
@@ -38,7 +40,7 @@ const Projects = () => {
</div> </div>
<div> <div>
<Link to="projects/create"> <Link to="projects/create">
<Button className="rounded-full" color="blue"> <Button className="rounded-full" color="blue" placeholder={''}>
Create project Create project
</Button> </Button>
</Link> </Link>
@@ -15,7 +15,11 @@ const CreateProject = () => {
</div> </div>
<div> <div>
<Link to={`/${orgSlug}`}> <Link to={`/${orgSlug}`}>
<IconButton className="rounded-full" variant="outlined"> <IconButton
className="rounded-full"
variant="outlined"
placeholder={''}
>
X X
</IconButton> </IconButton>
</Link> </Link>
@@ -74,18 +74,23 @@ const Id = () => {
variant="outlined" variant="outlined"
className="rounded-full" className="rounded-full"
onClick={() => navigate(-1)} onClick={() => navigate(-1)}
placeholder={''}
> >
{'<'} {'<'}
</Button> </Button>
<Typography variant="h3" className="grow"> <Typography variant="h3" className="grow" placeholder={''}>
{project?.name} {project?.name}
</Typography> </Typography>
<Link to={repoUrl} target="_blank"> <Link to={repoUrl} target="_blank">
<Button className="rounded-full" variant="outlined"> <Button
className="rounded-full"
variant="outlined"
placeholder={''}
>
Open Repo Open Repo
</Button> </Button>
</Link> </Link>
<Button className="rounded-full" color="blue"> <Button className="rounded-full" color="blue" placeholder={''}>
Go to app Go to app
</Button> </Button>
</div> </div>
@@ -98,34 +103,55 @@ const Id = () => {
className: className:
'bg-transparent border-b-2 border-gray-900 shadow-none rounded-none', 'bg-transparent border-b-2 border-gray-900 shadow-none rounded-none',
}} }}
placeholder={''}
> >
<Link to=""> <Link to="">
<Tab value="" className={'p-2 cursor-pointer'}> <Tab
value=""
className={'p-2 cursor-pointer'}
placeholder={''}
>
Overview Overview
</Tab> </Tab>
</Link> </Link>
<Link to="deployments"> <Link to="deployments">
<Tab value="deployments" className={'p-2 cursor-pointer'}> <Tab
value="deployments"
className={'p-2 cursor-pointer'}
placeholder={''}
>
Deployments Deployments
</Tab> </Tab>
</Link> </Link>
<Link to="database"> <Link to="database">
<Tab value="database" className={'p-2 cursor-pointer'}> <Tab
value="database"
className={'p-2 cursor-pointer'}
placeholder={''}
>
Database Database
</Tab> </Tab>
</Link> </Link>
<Link to="integrations"> <Link to="integrations">
<Tab value="integrations" className={'p-2 cursor-pointer'}> <Tab
value="integrations"
className={'p-2 cursor-pointer'}
placeholder={''}
>
Integrations Integrations
</Tab> </Tab>
</Link> </Link>
<Link to="settings"> <Link to="settings">
<Tab value="settings" className={'p-2 cursor-pointer'}> <Tab
value="settings"
className={'p-2 cursor-pointer'}
placeholder={''}
>
Settings Settings
</Tab> </Tab>
</Link> </Link>
</TabsHeader> </TabsHeader>
<TabsBody> <TabsBody placeholder={''}>
<Outlet context={{ project, onUpdate }} /> <Outlet context={{ project, onUpdate }} />
</TabsBody> </TabsBody>
</Tabs> </Tabs>
@@ -46,7 +46,7 @@ const CreateWithTemplate = () => {
return ( return (
<div className="flex flex-col items-center"> <div className="flex flex-col items-center">
<div className="flex justify-between w-5/6 my-4 bg-gray-200 rounded-xl p-6 items-center"> <div className="flex justify-between w-5/6 my-4 bg-gray-200 rounded-xl p-6 items-center">
<Avatar variant="rounded" src="/gray.png" /> <Avatar variant="rounded" src="/gray.png" placeholder={''} />
<div className="grow px-2">{template?.name}</div> <div className="grow px-2">{template?.name}</div>
<div> <div>
<a href={GIT_TEMPLATE_LINK} target="_blank" rel="noreferrer"> <a href={GIT_TEMPLATE_LINK} target="_blank" rel="noreferrer">
@@ -39,7 +39,12 @@ const Id = () => {
custom domain. custom domain.
</p> </p>
<div className="my-2"> <div className="my-2">
<Button className="rounded-full" variant="outlined" size="sm"> <Button
className="rounded-full"
variant="outlined"
size="sm"
placeholder={''}
>
Setup domain Setup domain
</Button> </Button>
</div> </div>
@@ -51,14 +56,23 @@ const Id = () => {
<div className="flex justify-center p-4 gap-2 my-5"> <div className="flex justify-center p-4 gap-2 my-5">
<div> <div>
<Link to="/"> <Link to="/">
<Button className="rounded-full" variant="outlined"> <Button
className="rounded-full"
variant="outlined"
placeholder={''}
>
^Back to projects ^Back to projects
</Button> </Button>
</Link> </Link>
</div> </div>
<div> <div>
<Link to={`/${orgSlug}/projects/${id}`}> <Link to={`/${orgSlug}/projects/${id}`}>
<Button className="rounded-full" variant="gradient" color="blue"> <Button
className="rounded-full"
variant="gradient"
color="blue"
placeholder={''}
>
View project View project
</Button> </Button>
</Link> </Link>
@@ -114,8 +114,10 @@ const CreateRepo = () => {
return ( return (
<form onSubmit={handleSubmit(submitRepoHandler)}> <form onSubmit={handleSubmit(submitRepoHandler)}>
<div className="mb-2"> <div className="mb-2">
<Typography variant="h6">Create a repository</Typography> <Typography variant="h6" placeholder={''}>
<Typography color="gray"> Create a repository
</Typography>
<Typography color="gray" placeholder={''}>
The project will be cloned into this repository The project will be cloned into this repository
</Typography> </Typography>
</div> </div>
@@ -187,6 +189,7 @@ const CreateRepo = () => {
type="submit" type="submit"
disabled={isLoading} disabled={isLoading}
loading={isLoading} loading={isLoading}
placeholder={''}
> >
Deploy ^ Deploy ^
</Button> </Button>
@@ -115,14 +115,17 @@ const DeploymentsTabPanel = () => {
) : ( ) : (
<div className="h-[50vh] bg-gray-100 flex rounded items-center justify-center"> <div className="h-[50vh] bg-gray-100 flex rounded items-center justify-center">
<div className="text-center"> <div className="text-center">
<Typography variant="h5">No deployments found</Typography> <Typography variant="h5" placeholder={''}>
<Typography> No deployments found
</Typography>
<Typography placeholder={''}>
Please change your search query or filters Please change your search query or filters
</Typography> </Typography>
<Button <Button
className="rounded-full mt-5" className="rounded-full mt-5"
color="white" color="white"
onClick={handleResetFilters} onClick={handleResetFilters}
placeholder={''}
> >
^ Reset filters ^ Reset filters
</Button> </Button>
@@ -110,10 +110,14 @@ const OverviewTabPanel = () => {
<div className="grid grid-cols-5"> <div className="grid grid-cols-5">
<div className="col-span-3 p-2"> <div className="col-span-3 p-2">
<div className="flex items-center gap-2 p-2 "> <div className="flex items-center gap-2 p-2 ">
<Avatar src={project.icon || '/gray.png'} variant="rounded" /> <Avatar
src={project.icon || '/gray.png'}
variant="rounded"
placeholder={''}
/>
<div className="grow"> <div className="grow">
<Typography>{project.name}</Typography> <Typography placeholder={''}>{project.name}</Typography>
<Typography variant="small" color="gray"> <Typography variant="small" color="gray" placeholder={''}>
{project.subDomain} {project.subDomain}
</Typography> </Typography>
</div> </div>
@@ -144,6 +148,7 @@ const OverviewTabPanel = () => {
onClick={() => { onClick={() => {
navigate('settings/domains'); navigate('settings/domains');
}} }}
placeholder={''}
> >
Setup Setup
</Button> </Button>
@@ -176,7 +181,9 @@ const OverviewTabPanel = () => {
</div> </div>
<div className="col-span-2 p-2"> <div className="col-span-2 p-2">
<div className="flex justify-between"> <div className="flex justify-between">
<Typography variant="h6">Activity</Typography> <Typography variant="h6" placeholder={''}>
Activity
</Typography>
<button className="text-xs bg-gray-300 rounded-full p-2"> <button className="text-xs bg-gray-300 rounded-full p-2">
See all See all
</button> </button>
@@ -59,12 +59,14 @@ const SettingsTabPanel = () => {
indicatorProps={{ indicatorProps={{
className: 'bg-gray-900/10 shadow-none !text-gray-900', className: 'bg-gray-900/10 shadow-none !text-gray-900',
}} }}
placeholder={''}
> >
{tabsData.map(({ label, value, icon }) => ( {tabsData.map(({ label, value, icon }) => (
<Link key={value} to={value === 'general' ? '' : value}> <Link key={value} to={value === 'general' ? '' : value}>
<Tab <Tab
value={value === 'general' ? '' : `/${value}`} value={value === 'general' ? '' : `/${value}`}
className="flex justify-start" className="flex justify-start"
placeholder={''}
> >
<div className="flex gap-2"> <div className="flex gap-2">
<div>{icon}</div> <div>{icon}</div>
@@ -74,7 +76,7 @@ const SettingsTabPanel = () => {
</Link> </Link>
))} ))}
</TabsHeader> </TabsHeader>
<TabsBody className="col-span-2"> <TabsBody className="col-span-2" placeholder={''}>
<Outlet context={{ project, onUpdate }} /> <Outlet context={{ project, onUpdate }} />
</TabsBody> </TabsBody>
</Tabs> </Tabs>
@@ -59,9 +59,16 @@ const Domains = () => {
return ( return (
<> <>
<div className="flex justify-between p-2"> <div className="flex justify-between p-2">
<Typography variant="h3">Domain</Typography> <Typography variant="h3" placeholder={''}>
Domain
</Typography>
<Link to="add"> <Link to="add">
<Button color="blue" variant="outlined" className="rounded-full"> <Button
color="blue"
variant="outlined"
className="rounded-full"
placeholder={''}
>
<i>^</i> Add domain <i>^</i> Add domain
</Button> </Button>
</Link> </Link>
@@ -133,8 +133,14 @@ export const EnvironmentVariablesTabPanel = () => {
return ( return (
<> <>
<Typography variant="h6">Environment variables</Typography> <Typography variant="h6" placeholder={''}>
<Typography variant="small" className="font-medium text-gray-800"> Environment variables
</Typography>
<Typography
variant="small"
className="font-medium text-gray-800"
placeholder={''}
>
A new deployment is required for your changes to take effect. A new deployment is required for your changes to take effect.
</Typography> </Typography>
<div className="bg-gray-300 rounded-lg p-2"> <div className="bg-gray-300 rounded-lg p-2">
@@ -145,7 +151,7 @@ export const EnvironmentVariablesTabPanel = () => {
+ Create new variable + Create new variable
</div> </div>
<Collapse open={createNewVariable}> <Collapse open={createNewVariable}>
<Card className="bg-white p-2"> <Card className="bg-white p-2" placeholder={''}>
<form onSubmit={handleSubmit(createEnvironmentVariablesHandler)}> <form onSubmit={handleSubmit(createEnvironmentVariablesHandler)}>
{fields.map((field, index) => { {fields.map((field, index) => {
return ( return (
@@ -168,11 +174,12 @@ export const EnvironmentVariablesTabPanel = () => {
value: '', value: '',
}) })
} }
placeholder={''}
> >
+ Add variable + Add variable
</Button> </Button>
{/* TODO: Implement import environment varible functionality */} {/* TODO: Implement import environment varible functionality */}
<Button variant="outlined" size="sm" disabled> <Button variant="outlined" size="sm" disabled placeholder={''}>
^ Import .env ^ Import .env
</Button> </Button>
</div> </div>
@@ -205,7 +212,7 @@ export const EnvironmentVariablesTabPanel = () => {
/> />
</div> </div>
<div className="p-2"> <div className="p-2">
<Button size="lg" color="blue" type="submit"> <Button size="lg" color="blue" type="submit" placeholder={''}>
Save changes Save changes
</Button> </Button>
</div> </div>
@@ -121,8 +121,14 @@ const GeneralTabPanel = () => {
} }
})} })}
> >
<Typography variant="h6">Project info</Typography> <Typography variant="h6" placeholder={''}>
<Typography variant="small" className="font-medium text-gray-800"> Project info
</Typography>
<Typography
variant="small"
className="font-medium text-gray-800"
placeholder={''}
>
App name App name
</Typography> </Typography>
<Input <Input
@@ -132,7 +138,11 @@ const GeneralTabPanel = () => {
size="md" size="md"
{...register('appName')} {...register('appName')}
/> />
<Typography variant="small" className="font-medium text-gray-800"> <Typography
variant="small"
className="font-medium text-gray-800"
placeholder={''}
>
Description (Optional) Description (Optional)
</Typography> </Typography>
<Input <Input
@@ -141,7 +151,11 @@ const GeneralTabPanel = () => {
size="md" size="md"
{...register('description')} {...register('description')}
/> />
<Typography variant="small" className="font-medium text-gray-800"> <Typography
variant="small"
className="font-medium text-gray-800"
placeholder={''}
>
Project ID Project ID
</Typography> </Typography>
<Input <Input
@@ -158,13 +172,16 @@ const GeneralTabPanel = () => {
size="sm" size="sm"
className="mt-1" className="mt-1"
disabled={!updateProjectFormState.isDirty} disabled={!updateProjectFormState.isDirty}
placeholder={''}
> >
Save Save
</Button> </Button>
</form> </form>
<div className="mb-1"> <div className="mb-1">
<Typography variant="h6">Transfer project</Typography> <Typography variant="h6" placeholder={''}>
<Typography variant="small"> Transfer project
</Typography>
<Typography variant="small" placeholder={''}>
Transfer this app to your personal account or a team you are a member Transfer this app to your personal account or a team you are a member
of. of.
<Link to="" className="text-blue-500"> <Link to="" className="text-blue-500">
@@ -177,7 +194,11 @@ const GeneralTabPanel = () => {
setOpenTransferDialog(!openTransferDialog); setOpenTransferDialog(!openTransferDialog);
})} })}
> >
<Typography variant="small" className="font-medium text-gray-800"> <Typography
variant="small"
className="font-medium text-gray-800"
placeholder={''}
>
Choose team Choose team
</Typography> </Typography>
<Controller <Controller
@@ -204,6 +225,7 @@ const GeneralTabPanel = () => {
className="mt-1" className="mt-1"
disabled={!formState.isValid} disabled={!formState.isValid}
type="submit" type="submit"
placeholder={''}
> >
Transfer Transfer
</Button> </Button>
@@ -216,15 +238,17 @@ const GeneralTabPanel = () => {
handleConfirm={handleTransferProject} handleConfirm={handleTransferProject}
color="blue" color="blue"
> >
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Upon confirmation, your project {project.name} will be transferred Upon confirmation, your project {project.name} will be transferred
from {project.organization.name} to {selectedUserOrgName}. from {project.organization.name} to {selectedUserOrgName}.
</Typography> </Typography>
</ConfirmDialog> </ConfirmDialog>
</div> </div>
<div className="mb-1"> <div className="mb-1">
<Typography variant="h6">Delete project</Typography> <Typography variant="h6" placeholder={''}>
<Typography variant="small"> Delete project
</Typography>
<Typography variant="small" placeholder={''}>
The project will be permanently deleted, including its deployments and The project will be permanently deleted, including its deployments and
domains. This action is irreversible and can not be undone. domains. This action is irreversible and can not be undone.
</Typography> </Typography>
@@ -233,6 +257,7 @@ const GeneralTabPanel = () => {
size="sm" size="sm"
color="red" color="red"
onClick={handleDeleteProjectDialog} onClick={handleDeleteProjectDialog}
placeholder={''}
> >
^ Delete project ^ Delete project
</Button> </Button>
@@ -100,13 +100,15 @@ const GitTabPanel = () => {
return ( return (
<> <>
<div className="mb-2 p-2"> <div className="mb-2 p-2">
<Typography variant="h6" className="text-black"> <Typography variant="h6" className="text-black" placeholder={''}>
Git repository Git repository
</Typography> </Typography>
<div className="flex justify-between mt-4"> <div className="flex justify-between mt-4">
<div> <div>
<Typography variant="small">Pull request comments</Typography> <Typography variant="small" placeholder={''}>
Pull request comments
</Typography>
</div> </div>
<div> <div>
<Switch crossOrigin={undefined} defaultChecked /> <Switch crossOrigin={undefined} defaultChecked />
@@ -115,7 +117,9 @@ const GitTabPanel = () => {
<div className="flex justify-between"> <div className="flex justify-between">
<div> <div>
<Typography variant="small">Commit comments</Typography> <Typography variant="small" placeholder={''}>
Commit comments
</Typography>
</div> </div>
<div> <div>
<Switch crossOrigin={undefined} /> <Switch crossOrigin={undefined} />
@@ -125,21 +129,23 @@ const GitTabPanel = () => {
<form onSubmit={handleSubmitProdBranch(updateProdBranchHandler)}> <form onSubmit={handleSubmitProdBranch(updateProdBranchHandler)}>
<div className="mb-2 p-2"> <div className="mb-2 p-2">
<Typography variant="h6" className="text-black"> <Typography variant="h6" className="text-black" placeholder={''}>
Production branch Production branch
</Typography> </Typography>
<Typography variant="small"> <Typography variant="small" placeholder={''}>
By default, each commit pushed to the{' '} By default, each commit pushed to the{' '}
<span className="font-bold">{project.prodBranch}</span> branch <span className="font-bold">{project.prodBranch}</span> branch
initiates a production deployment. You can opt for a different initiates a production deployment. You can opt for a different
branch for deployment in the settings. branch for deployment in the settings.
</Typography> </Typography>
<Typography variant="small">Branch name</Typography> <Typography variant="small" placeholder={''}>
Branch name
</Typography>
<Input <Input
crossOrigin={undefined} crossOrigin={undefined}
{...registerProdBranch('prodBranch')} {...registerProdBranch('prodBranch')}
/> />
<Button size="sm" className="mt-1" type="submit"> <Button size="sm" className="mt-1" type="submit" placeholder={''}>
Save Save
</Button> </Button>
</div> </div>
@@ -147,23 +153,25 @@ const GitTabPanel = () => {
<form onSubmit={handleSubmitWebhooks(updateWebhooksHandler)}> <form onSubmit={handleSubmitWebhooks(updateWebhooksHandler)}>
<div className="mb-2 p-2"> <div className="mb-2 p-2">
<Typography variant="h6" className="text-black"> <Typography variant="h6" className="text-black" placeholder={''}>
Deploy webhooks Deploy webhooks
</Typography> </Typography>
<Typography variant="small"> <Typography variant="small" placeholder={''}>
Webhooks configured to trigger when there is a change in a Webhooks configured to trigger when there is a change in a
project&apos;s build or deployment status. project&apos;s build or deployment status.
</Typography> </Typography>
<div className="flex gap-1"> <div className="flex gap-1">
<div className="grow"> <div className="grow">
<Typography variant="small">Webhook URL</Typography> <Typography variant="small" placeholder={''}>
Webhook URL
</Typography>
<Input <Input
crossOrigin={undefined} crossOrigin={undefined}
{...registerWebhooks('webhookUrl')} {...registerWebhooks('webhookUrl')}
/> />
</div> </div>
<div className="self-end"> <div className="self-end">
<Button size="sm" type="submit"> <Button size="sm" type="submit" placeholder={''}>
Save Save
</Button> </Button>
</div> </div>
@@ -75,7 +75,9 @@ const MembersTabPanel = () => {
<div className="p-2 mb-20"> <div className="p-2 mb-20">
<div className="flex justify-between mb-2"> <div className="flex justify-between mb-2">
<div className="flex"> <div className="flex">
<Typography variant="h6">Members</Typography> <Typography variant="h6" placeholder={''}>
Members
</Typography>
<div> <div>
<Chip <Chip
className="normal-case ml-3 font-normal" className="normal-case ml-3 font-normal"
@@ -88,6 +90,7 @@ const MembersTabPanel = () => {
<Button <Button
size="sm" size="sm"
onClick={() => setAddMemberDialogOpen((preVal) => !preVal)} onClick={() => setAddMemberDialogOpen((preVal) => !preVal)}
placeholder={''}
> >
+ Add member + Add member
</Button> </Button>
@@ -39,8 +39,10 @@ const Config = () => {
return ( return (
<div className="flex flex-col gap-6 w-full"> <div className="flex flex-col gap-6 w-full">
<div> <div>
<Typography variant="h5">Configure DNS</Typography> <Typography variant="h5" placeholder={''}>
<Typography variant="small"> Configure DNS
</Typography>
<Typography variant="small" placeholder={''}>
Add the following records to your domain.&nbsp; Add the following records to your domain.&nbsp;
<a href="https://www.namecheap.com/" target="_blank" rel="noreferrer"> <a href="https://www.namecheap.com/" target="_blank" rel="noreferrer">
<span className="underline">Go to NameCheap</span> ^ <span className="underline">Go to NameCheap</span> ^
@@ -72,7 +74,12 @@ const Config = () => {
<i>^</i>It can take up to 48 hours for these updates to reflect <i>^</i>It can take up to 48 hours for these updates to reflect
globally. globally.
</Alert> </Alert>
<Button className="w-fit" color="blue" onClick={handleSubmitDomain}> <Button
className="w-fit"
color="blue"
onClick={handleSubmitDomain}
placeholder={''}
>
Finish <i>{'>'}</i> Finish <i>{'>'}</i>
</Button> </Button>
</div> </div>
@@ -30,9 +30,15 @@ const AddDomain = () => {
return ( return (
<div className="p-4"> <div className="p-4">
<div className="flex justify-between"> <div className="flex justify-between">
<Typography variant="h3">Add Domain</Typography> <Typography variant="h3" placeholder={''}>
Add Domain
</Typography>
<Link to={`/${orgSlug}/projects/${id}`}> <Link to={`/${orgSlug}/projects/${id}`}>
<IconButton className="rounded-full" variant="outlined"> <IconButton
className="rounded-full"
variant="outlined"
placeholder={''}
>
X X
</IconButton> </IconButton>
</Link> </Link>
@@ -42,7 +48,7 @@ const AddDomain = () => {
<div className="bg-blue-gray-50 rounded-lg mt-6 mb-10"> <div className="bg-blue-gray-50 rounded-lg mt-6 mb-10">
<div className="flex justify-start gap-3 p-5"> <div className="flex justify-start gap-3 p-5">
<i className="bg-gray-100 w-12 h-12 rounded-lg">^</i> <i className="bg-gray-100 w-12 h-12 rounded-lg">^</i>
<Typography className="my-auto w-1/3" variant="h5"> <Typography className="my-auto w-1/3" variant="h5" placeholder={''}>
Project Name Project Name
</Typography> </Typography>
</div> </div>