feat: correctly show whether a project has been deployed
This commit is contained in:
@ -9,7 +9,7 @@ import {
|
||||
import { useTerminal } from "@/context/TerminalContext"
|
||||
import { Sandbox, User } from "@/lib/types"
|
||||
import { Globe } from "lucide-react"
|
||||
import { useState } from "react"
|
||||
import { useEffect, useState } from "react"
|
||||
|
||||
export default function DeployButtonModal({
|
||||
userData,
|
||||
@ -18,8 +18,19 @@ export default function DeployButtonModal({
|
||||
userData: User
|
||||
data: Sandbox
|
||||
}) {
|
||||
const { deploy } = useTerminal()
|
||||
const { deploy, getAppExists } = useTerminal()
|
||||
const [isDeploying, setIsDeploying] = useState(false)
|
||||
const [isDeployed, setIsDeployed] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
const checkDeployment = async () => {
|
||||
if (getAppExists) {
|
||||
const exists = await getAppExists(data.id)
|
||||
setIsDeployed(exists)
|
||||
}
|
||||
}
|
||||
checkDeployment()
|
||||
}, [data.id, getAppExists])
|
||||
|
||||
const handleDeploy = () => {
|
||||
if (isDeploying) {
|
||||
@ -30,6 +41,7 @@ export default function DeployButtonModal({
|
||||
setIsDeploying(true)
|
||||
deploy(() => {
|
||||
setIsDeploying(false)
|
||||
setIsDeployed(true)
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -52,8 +64,9 @@ export default function DeployButtonModal({
|
||||
<DeploymentOption
|
||||
icon={<Globe className="text-gray-500 w-5 h-5" />}
|
||||
domain={`${data.id}.gitwit.app`}
|
||||
timestamp="Deployed 1h ago"
|
||||
timestamp="Deployed 1m ago"
|
||||
user={userData.name}
|
||||
isDeployed={isDeployed}
|
||||
/>
|
||||
</div>
|
||||
<Button
|
||||
@ -61,7 +74,7 @@ export default function DeployButtonModal({
|
||||
className="mt-4 w-full bg-[#0a0a0a] text-white hover:bg-[#262626]"
|
||||
onClick={handleDeploy}
|
||||
>
|
||||
{isDeploying ? "Deploying..." : "Update"}
|
||||
{isDeploying ? "Deploying..." : isDeployed ? "Update" : "Deploy"}
|
||||
</Button>
|
||||
</PopoverContent>
|
||||
</Popover>
|
||||
@ -74,27 +87,33 @@ function DeploymentOption({
|
||||
domain,
|
||||
timestamp,
|
||||
user,
|
||||
isDeployed,
|
||||
}: {
|
||||
icon: React.ReactNode
|
||||
domain: string
|
||||
timestamp: string
|
||||
user: string
|
||||
isDeployed: boolean
|
||||
}) {
|
||||
return (
|
||||
<div className="flex flex-col gap-2 w-full text-left p-2 rounded-md border border-gray-700 bg-gray-900">
|
||||
<div className="flex items-start gap-2 relative">
|
||||
<div className="flex-shrink-0">{icon}</div>
|
||||
<a
|
||||
href={`https://${domain}`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="font-semibold text-gray-300 hover:underline"
|
||||
>
|
||||
{domain}
|
||||
</a>
|
||||
{isDeployed ? (
|
||||
<a
|
||||
href={`https://${domain}`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="font-semibold text-gray-300 hover:underline"
|
||||
>
|
||||
{domain}
|
||||
</a>
|
||||
) : (
|
||||
<span className="font-semibold text-gray-300">{domain}</span>
|
||||
)}
|
||||
</div>
|
||||
<p className="text-sm text-gray-400 mt-0 ml-7">
|
||||
{timestamp} • {user}
|
||||
{isDeployed ? `${timestamp} • ${user}` : "Never deployed"}
|
||||
</p>
|
||||
</div>
|
||||
)
|
||||
|
Reference in New Issue
Block a user