diff --git a/app/components/header/DeployChat/components/DeployChatModal.tsx b/app/components/header/DeployChat/components/DeployChatModal.tsx index 05571a57..269f9e4e 100644 --- a/app/components/header/DeployChat/components/DeployChatModal.tsx +++ b/app/components/header/DeployChat/components/DeployChatModal.tsx @@ -19,26 +19,38 @@ const DeployChatModal = ({ error, handleDeploy, }: DeployChatModalProps) => { + const handleOverlayClick = (e: React.MouseEvent) => { + if (e.target === e.currentTarget) { + setIsModalOpen(false); + } + }; + return ( <> {isModalOpen && ( -
-
+
+
e.stopPropagation()}> {status === DeployStatus.Succeeded ? ( <> -
Deployment Succeeded
+

+ Deployment Succeeded! 🎉 +

-
+

+ Your application has been successfully deployed. You can now access it at the URL below. +

+
- @@ -47,205 +59,324 @@ const DeployChatModal = ({ ) : ( <> -

Deploy

-
Deploy this chat's app to production.
+

+ Deploy Your Application +

+
+

Deploy your chat application to production using Netlify and Supabase.

+

This process will:

+
    +
  • Create a new Netlify site or update an existing one
  • +
  • Set up your database with Supabase
  • +
  • Configure all necessary environment variables
  • +
  • Deploy your application with production settings
  • +
+
+ +
+

Before you begin:

+

+ You'll need accounts with both Netlify and Supabase to deploy your application. If you haven't already, please sign up using the links below: +

+ +
{deploySettings?.siteURL && ( -
- Existing site: + )} -
- - { - const netlify = { - authToken: e.target.value, - siteId: deploySettings?.netlify?.siteId || '', - createInfo: deploySettings?.netlify?.createInfo || undefined, - }; - setDeploySettings({ - ...deploySettings, - netlify, - }); - }} - /> - - { - const netlify = { - authToken: deploySettings?.netlify?.authToken || '', - siteId: e.target.value, - createInfo: deploySettings?.netlify?.createInfo || undefined, - }; - setDeploySettings({ - ...deploySettings, - netlify, - }); - }} - /> - - { - const createInfo = { - accountSlug: e.target.value, - siteName: deploySettings?.netlify?.createInfo?.siteName || '', - }; - const netlify = { - authToken: deploySettings?.netlify?.authToken || '', - siteId: deploySettings?.netlify?.siteId || '', - createInfo, - }; - setDeploySettings({ - ...deploySettings, - netlify, - }); - }} - /> - - { - const createInfo = { - accountSlug: deploySettings?.netlify?.createInfo?.accountSlug || '', - siteName: e.target.value, - }; - const netlify = { - authToken: deploySettings?.netlify?.authToken || '', - siteId: deploySettings?.netlify?.siteId || '', - createInfo, - }; - setDeploySettings({ - ...deploySettings, - netlify, - }); - }} - /> - - { - const supabase = { - databaseURL: e.target.value, - anonKey: deploySettings?.supabase?.anonKey || '', - serviceRoleKey: deploySettings?.supabase?.serviceRoleKey || '', - postgresURL: deploySettings?.supabase?.postgresURL || '', - }; - setDeploySettings({ - ...deploySettings, - supabase, - }); - }} - /> - - { - const supabase = { - databaseURL: deploySettings?.supabase?.databaseURL || '', - anonKey: e.target.value, - serviceRoleKey: deploySettings?.supabase?.serviceRoleKey || '', - postgresURL: deploySettings?.supabase?.postgresURL || '', - }; - setDeploySettings({ - ...deploySettings, - supabase, - }); - }} - /> - - { - const supabase = { - databaseURL: deploySettings?.supabase?.databaseURL || '', - anonKey: deploySettings?.supabase?.anonKey || '', - serviceRoleKey: e.target.value, - postgresURL: deploySettings?.supabase?.postgresURL || '', - }; - setDeploySettings({ - ...deploySettings, - supabase, - }); - }} - /> - - { - const supabase = { - databaseURL: deploySettings?.supabase?.databaseURL || '', - anonKey: deploySettings?.supabase?.anonKey || '', - serviceRoleKey: deploySettings?.supabase?.serviceRoleKey || '', - postgresURL: e.target.value, - }; - setDeploySettings({ - ...deploySettings, - supabase, - }); - }} - /> -
- -
- {status === DeployStatus.Started && ( -
- +
+
+ +
+

+ Your authentication token from Netlify account settings. Used to authorize deployments. +

- )} + { + const netlify = { + authToken: e.target.value, + siteId: deploySettings?.netlify?.siteId || '', + createInfo: deploySettings?.netlify?.createInfo || undefined, + }; + setDeploySettings({ + ...deploySettings, + netlify, + }); + }} + /> +
- {status === DeployStatus.NotStarted && ( - - )} - +
+ +
+

+ The ID of your existing Netlify site if you want to update an existing deployment. +

+
+ { + const netlify = { + authToken: deploySettings?.netlify?.authToken || '', + siteId: e.target.value, + createInfo: deploySettings?.netlify?.createInfo || undefined, + }; + setDeploySettings({ + ...deploySettings, + netlify, + }); + }} + /> +
+ +
+ +
+

+ Your Netlify account name, required when creating a new site. +

+
+ { + const createInfo = { + accountSlug: e.target.value, + siteName: deploySettings?.netlify?.createInfo?.siteName || '', + }; + const netlify = { + authToken: deploySettings?.netlify?.authToken || '', + siteId: deploySettings?.netlify?.siteId || '', + createInfo, + }; + setDeploySettings({ + ...deploySettings, + netlify, + }); + }} + /> +
+ +
+ +
+

+ The desired name for your new Netlify site. Will be part of your site's URL. +

+
+ { + const createInfo = { + accountSlug: deploySettings?.netlify?.createInfo?.accountSlug || '', + siteName: e.target.value, + }; + const netlify = { + authToken: deploySettings?.netlify?.authToken || '', + siteId: deploySettings?.netlify?.siteId || '', + createInfo, + }; + setDeploySettings({ + ...deploySettings, + netlify, + }); + }} + /> +
+ +
+ +
+

+ The URL of your Supabase project, used to connect to your database. +

+
+ { + const supabase = { + databaseURL: e.target.value, + anonKey: deploySettings?.supabase?.anonKey || '', + serviceRoleKey: deploySettings?.supabase?.serviceRoleKey || '', + postgresURL: deploySettings?.supabase?.postgresURL || '', + }; + setDeploySettings({ + ...deploySettings, + supabase, + }); + }} + /> +
+ +
+ +
+

+ Public API key for client-side database access with restricted permissions. +

+
+ { + const supabase = { + databaseURL: deploySettings?.supabase?.databaseURL || '', + anonKey: e.target.value, + serviceRoleKey: deploySettings?.supabase?.serviceRoleKey || '', + postgresURL: deploySettings?.supabase?.postgresURL || '', + }; + setDeploySettings({ + ...deploySettings, + supabase, + }); + }} + /> +
+ +
+ +
+

+ Admin API key for server-side operations with full database access. +

+
+ { + const supabase = { + databaseURL: deploySettings?.supabase?.databaseURL || '', + anonKey: deploySettings?.supabase?.anonKey || '', + serviceRoleKey: e.target.value, + postgresURL: deploySettings?.supabase?.postgresURL || '', + }; + setDeploySettings({ + ...deploySettings, + supabase, + }); + }} + /> +
+ +
+ +
+

+ Direct connection URL to your Postgres database for advanced operations. +

+
+ { + const supabase = { + databaseURL: deploySettings?.supabase?.databaseURL || '', + anonKey: deploySettings?.supabase?.anonKey || '', + serviceRoleKey: deploySettings?.supabase?.serviceRoleKey || '', + postgresURL: e.target.value, + }; + setDeploySettings({ + ...deploySettings, + supabase, + }); + }} + /> +
- {error &&
{error}
} +
+ {status === DeployStatus.Started ? ( +
+ + Deploying your application... +
+ ) : ( + <> + + + + )} +
+ + {error && ( +
+

Deployment Error

+

{error}

+
+ )} )}