feat: dynamic project success page and update links (#220)

### TL;DR

Integrates project data fetching for dynamic subdomain display on the Project Deployment Success page and the OverviewTabPanel.

### What changed?

- Updated `Id.tsx` to fetch project data and dynamically display project's subdomain after deployment.
- Modified `Overview.tsx` to make project's subdomain a clickable link.

### How to test?

1. Deploy a new project and check the deployment success page for correct subdomain display.
2. Open a project's overview tab and click the subdomain link to ensure it navigates correctly.

### Why make this change?

Improves user experience by displaying the actual subdomain and making it clickable, ensuring users can conveniently verify their deployment and access project domain.

---
This commit is contained in:
Vivian Phung 2024-06-24 18:44:34 -04:00 committed by GitHub
parent 44015d5451
commit dee84f18cb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 115 additions and 82 deletions

View File

@ -11,14 +11,37 @@ import {
import { Heading } from 'components/shared/Heading'; import { Heading } from 'components/shared/Heading';
import logoAnimation from 'components/../../public/lottie/logo.json'; import logoAnimation from 'components/../../public/lottie/logo.json';
import { useGQLClient } from 'context/GQLClientContext';
import { Project } from 'gql-client';
import { useEffect, useState } from 'react';
const Id = () => { const Id = () => {
const { id, orgSlug } = useParams(); const { id, orgSlug } = useParams();
const client = useGQLClient();
const [project, setProject] = useState<Project | null>(null);
const handleSetupDomain = () => { const handleSetupDomain = async () => {
//TODO: Implement this if (id) {
// console.log('id', id);
// console.log('getting project for id', id);
const project = await client.getProject(id);
// console.log('project found:', project);
if (project && project.project) {
// console.log('project:', project.project);
setProject(project.project);
}
} else {
window.location.href = '/';
}
}; };
useEffect(() => {
handleSetupDomain();
});
return ( return (
<>
{project ? (
<div className="flex flex-col gap-8 lg:gap-11 max-w-[522px] mx-auto py-6 lg:py-12"> <div className="flex flex-col gap-8 lg:gap-11 max-w-[522px] mx-auto py-6 lg:py-12">
{/* Icon */} {/* Icon */}
<div className="flex justify-center"> <div className="flex justify-center">
@ -35,14 +58,13 @@ const Id = () => {
<Button <Button
className="no-underline text-elements-link" className="no-underline text-elements-link"
// TODO: use dynamic value // TODO: use dynamic value
href="https://www.iglootools.snowballtools.xyz" href={project ? `https://${project.subDomain}` : ''}
as="a" as="a"
variant="link-emphasized" variant="link-emphasized"
external external
leftIcon={<LinkChainIcon />} leftIcon={<LinkChainIcon />}
> >
{/* // TODO: use dynamic value */} {project.subDomain}
www.iglootools.snowballtools.xyz
</Button> </Button>
</p> </p>
</div> </div>
@ -73,7 +95,11 @@ const Id = () => {
custom domain. custom domain.
</p> </p>
</div> </div>
<Button onClick={handleSetupDomain} variant="tertiary" size="sm"> <Button
onClick={handleSetupDomain}
variant="tertiary"
size="sm"
>
Setup domain Setup domain
</Button> </Button>
</div> </div>
@ -103,6 +129,10 @@ const Id = () => {
</div> </div>
</div> </div>
</div> </div>
) : (
<></>
)}
</>
); );
}; };

View File

@ -131,9 +131,12 @@ const OverviewTabPanel = () => {
<Heading className="text-lg leading-6 font-medium truncate"> <Heading className="text-lg leading-6 font-medium truncate">
{project.name} {project.name}
</Heading> </Heading>
<p className="text-sm text-elements-low-em tracking-tight truncate"> <a
href={`https://${project.subDomain}`}
className="text-sm text-elements-low-em tracking-tight truncate"
>
{project.subDomain} {project.subDomain}
</p> </a>
</div> </div>
</div> </div>
<OverviewInfo label="Domain" icon={<GlobeIcon />}> <OverviewInfo label="Domain" icon={<GlobeIcon />}>