From 467bca3efb2495e9bd85373d39e104302f9800d7 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sat, 8 Mar 2025 23:45:21 -0600 Subject: [PATCH] feat(ui): add repository link buttons for git providers - Implement "View Repository" links for GitHub, GitLab, Bitbucket, and Git providers - Add repository icons and direct links to source repositories - Support links for both application and compose service git provider forms - Enhance user experience with quick access to repository pages --- .../generic/save-bitbucket-provider.tsx | 17 ++++++++++++++- .../general/generic/save-git-provider.tsx | 21 +++++++++++++++---- .../general/generic/save-github-provider.tsx | 16 +++++++++++++- .../general/generic/save-gitlab-provider.tsx | 17 ++++++++++++++- .../save-bitbucket-provider-compose.tsx | 17 ++++++++++++++- .../generic/save-git-provider-compose.tsx | 21 +++++++++++++++---- .../generic/save-github-provider-compose.tsx | 17 ++++++++++++++- .../generic/save-gitlab-provider-compose.tsx | 17 ++++++++++++++- 8 files changed, 129 insertions(+), 14 deletions(-) diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx index 35aba58a..ca1bf823 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx @@ -44,6 +44,8 @@ import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; import { Badge } from "@/components/ui/badge"; +import { BitbucketIcon } from "@/components/icons/data-tools-icons"; +import Link from "next/link"; const BitbucketProviderSchema = z.object({ buildPath: z.string().min(1, "Path is required").default("/"), @@ -206,7 +208,20 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { name="repository" render={({ field }) => ( - Repository +
+ Repository + {field.value.owner && field.value.repo && ( + + + View Repository + + )} +
diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx index e25f93a6..3d6f6a38 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx @@ -27,12 +27,14 @@ import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; import { KeyRoundIcon, LockIcon, X } from "lucide-react"; import { useRouter } from "next/router"; +import Link from "next/link"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; import { Badge } from "@/components/ui/badge"; +import { GitIcon } from "@/components/icons/data-tools-icons"; const GitProviderSchema = z.object({ buildPath: z.string().min(1, "Path is required").default("/"), @@ -113,11 +115,22 @@ export const SaveGitProvider = ({ applicationId }: Props) => { name="repositoryURL" render={({ field }) => ( - - Repository URL - +
+ Repository URL + {field.value?.startsWith("https://") && ( + + + View Repository + + )} +
- +
diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx index d8b6922e..257e48ea 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx @@ -44,6 +44,7 @@ import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; import Link from "next/link"; +import { GithubIcon } from "@/components/icons/data-tools-icons"; const GithubProviderSchema = z.object({ buildPath: z.string().min(1, "Path is required").default("/"), @@ -198,7 +199,20 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { name="repository" render={({ field }) => ( - Repository +
+ Repository + {field.value.owner && field.value.repo && ( + + + View Repository + + )} +
diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx index 2073f1a6..c0c90a01 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx @@ -44,6 +44,8 @@ import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; +import Link from "next/link"; +import { GitlabIcon } from "@/components/icons/data-tools-icons"; const GitlabProviderSchema = z.object({ buildPath: z.string().min(1, "Path is required").default("/"), @@ -213,7 +215,20 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { name="repository" render={({ field }) => ( - Repository +
+ Repository + {field.value.owner && field.value.repo && ( + + + View Repository + + )} +
diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx index 079eeb1b..6dc99b26 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx @@ -44,6 +44,8 @@ import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; import { Badge } from "@/components/ui/badge"; +import { BitbucketIcon } from "@/components/icons/data-tools-icons"; +import Link from "next/link"; const BitbucketProviderSchema = z.object({ composePath: z.string().min(1), @@ -208,7 +210,20 @@ export const SaveBitbucketProviderCompose = ({ composeId }: Props) => { name="repository" render={({ field }) => ( - Repository +
+ Repository + {field.value.owner && field.value.repo && ( + + + View Repository + + )} +
diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-git-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-git-provider-compose.tsx index d8b9f703..ebe99892 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-git-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-git-provider-compose.tsx @@ -32,6 +32,8 @@ import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; +import { GitIcon } from "@/components/icons/data-tools-icons"; +import Link from "next/link"; const GitProviderSchema = z.object({ composePath: z.string().min(1), @@ -113,11 +115,22 @@ export const SaveGitProviderCompose = ({ composeId }: Props) => { name="repositoryURL" render={({ field }) => ( - - Repository URL - +
+ Repository URL + {field.value?.startsWith("https://") && ( + + + View Repository + + )} +
- +
diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx index 6328386a..b58347dc 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx @@ -43,6 +43,8 @@ import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; +import { GithubIcon } from "@/components/icons/data-tools-icons"; +import Link from "next/link"; const GithubProviderSchema = z.object({ composePath: z.string().min(1), @@ -199,7 +201,20 @@ export const SaveGithubProviderCompose = ({ composeId }: Props) => { name="repository" render={({ field }) => ( - Repository +
+ Repository + {field.value.owner && field.value.repo && ( + + + View Repository + + )} +
diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx index ff967f81..693fea71 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx @@ -44,6 +44,8 @@ import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; import { Badge } from "@/components/ui/badge"; +import { GitlabIcon } from "@/components/icons/data-tools-icons"; +import Link from "next/link"; const GitlabProviderSchema = z.object({ composePath: z.string().min(1), @@ -215,7 +217,20 @@ export const SaveGitlabProviderCompose = ({ composeId }: Props) => { name="repository" render={({ field }) => ( - Repository +
+ Repository + {field.value.owner && field.value.repo && ( + + + View Repository + + )} +