diff --git a/apps/dokploy/components/dashboard/application/advanced/traefik/show-traefik-config.tsx b/apps/dokploy/components/dashboard/application/advanced/traefik/show-traefik-config.tsx index ae23f18668..3349cf418c 100644 --- a/apps/dokploy/components/dashboard/application/advanced/traefik/show-traefik-config.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/traefik/show-traefik-config.tsx @@ -1,4 +1,4 @@ -import { File, Loader2 } from "lucide-react"; +import { File } from "lucide-react"; import { CodeEditor } from "@/components/shared/code-editor"; import { Card, @@ -7,6 +7,14 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; +import { + Empty, + EmptyDescription, + EmptyHeader, + EmptyMedia, + EmptyTitle, +} from "@/components/ui/empty"; +import { Skeleton } from "@/components/ui/skeleton"; import { api } from "@/utils/api"; import { UpdateTraefikConfig } from "./update-traefik-config"; @@ -36,17 +44,22 @@ export const ShowTraefikConfig = ({ applicationId }: Props) => { {isLoading ? ( - - Loading... - - - ) : !data ? ( -
- - - No traefik config detected - +
+ +
+ ) : !data ? ( + + + + + + No Traefik config detected + + Add a configuration file to manage custom rules. + + + ) : (
diff --git a/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx b/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx index cfe747d27e..4c12de0544 100644 --- a/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx @@ -2,7 +2,6 @@ import { ChevronDown, ChevronUp, Clock, - Loader2, RefreshCcw, RocketIcon, Settings, @@ -22,6 +21,14 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; +import { + Empty, + EmptyDescription, + EmptyHeader, + EmptyMedia, + EmptyTitle, +} from "@/components/ui/empty"; +import { ListSkeleton } from "@/components/shared/list-skeleton"; import { api, type RouterOutputs } from "@/utils/api"; import { ShowRollbackSettings } from "../rollbacks/show-rollback-settings"; import { CancelQueues } from "./cancel-queues"; @@ -231,19 +238,23 @@ export const ShowDeployments = ({ )} {isLoadingDeployments ? ( -
- - - Loading deployments... - -
+ ) : deployments?.length === 0 ? ( -
- - - No deployments found - -
+ + + + + + No deployments yet + + Your deployment history will show up here once you deploy. + + + ) : (
{deployments?.map((deployment, index) => { diff --git a/apps/dokploy/components/dashboard/application/domains/show-domains.tsx b/apps/dokploy/components/dashboard/application/domains/show-domains.tsx index 1fd3d82e90..eb12e2af1d 100644 --- a/apps/dokploy/components/dashboard/application/domains/show-domains.tsx +++ b/apps/dokploy/components/dashboard/application/domains/show-domains.tsx @@ -14,6 +14,7 @@ import Link from "next/link"; import { useState } from "react"; import { toast } from "sonner"; import { DialogAction } from "@/components/shared/dialog-action"; +import { ListSkeleton } from "@/components/shared/list-skeleton"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { @@ -23,6 +24,14 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; +import { + Empty, + EmptyContent, + EmptyDescription, + EmptyHeader, + EmptyMedia, + EmptyTitle, +} from "@/components/ui/empty"; import { Tooltip, TooltipContent, @@ -160,27 +169,30 @@ export const ShowDomains = ({ id, type }: Props) => { {isLoadingDomains ? ( -
- - - Loading domains... - -
+ ) : data?.length === 0 ? ( -
- - - To access the application it is required to set at least 1 - domain - -
+ + + + + + No domains yet + + Add at least one domain to access your application. + + + -
-
+ + ) : (
{data?.map((item) => { 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 1f54ddd582..abddce1ec4 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 @@ -7,8 +7,10 @@ import { toast } from "sonner"; import { z } from "zod"; import { BitbucketIcon } from "@/components/icons/data-tools-icons"; import { AlertBlock } from "@/components/shared/alert-block"; +import { ListSkeleton } from "@/components/shared/list-skeleton"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; +import { Skeleton } from "@/components/ui/skeleton"; import { Command, CommandEmpty, @@ -237,13 +239,15 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( - (repo) => repo.name === field.value.repo, - )?.name - : "Select repository"} + {isLoadingRepositories ? ( + + ) : field.value.owner ? ( + repositories?.find( + (repo) => repo.name === field.value.repo, + )?.name + ) : ( + "Select repository" + )} @@ -256,9 +260,13 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { className="h-9" /> {isLoadingRepositories && ( - - Loading Repositories.... - +
+ +
)} No repositories found. @@ -320,13 +328,16 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {status === "loading" && fetchStatus === "fetching" - ? "Loading...." - : field.value - ? branches?.find( - (branch) => branch.name === field.value, - )?.name - : "Select branch"} + {status === "loading" && + fetchStatus === "fetching" ? ( + + ) : field.value ? ( + branches?.find( + (branch) => branch.name === field.value, + )?.name + ) : ( + "Select branch" + )} @@ -338,9 +349,13 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { className="h-9" /> {status === "loading" && fetchStatus === "fetching" && ( - - Loading Branches.... - +
+ +
)} {!repository?.owner && ( diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx index 2198f4a975..2a24616719 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx @@ -7,8 +7,10 @@ import { toast } from "sonner"; import { z } from "zod"; import { GiteaIcon } from "@/components/icons/data-tools-icons"; import { AlertBlock } from "@/components/shared/alert-block"; +import { ListSkeleton } from "@/components/shared/list-skeleton"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; +import { Skeleton } from "@/components/ui/skeleton"; import { Command, CommandEmpty, @@ -258,14 +260,16 @@ export const SaveGiteaProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( - (repo: GiteaRepository) => - repo.name === field.value.repo, - )?.name - : "Select repository"} + {isLoadingRepositories ? ( + + ) : field.value.owner ? ( + repositories?.find( + (repo: GiteaRepository) => + repo.name === field.value.repo, + )?.name + ) : ( + "Select repository" + )} @@ -278,9 +282,13 @@ export const SaveGiteaProvider = ({ applicationId }: Props) => { className="h-9" /> {isLoadingRepositories && ( - - Loading Repositories.... - +
+ +
)} No repositories found. @@ -349,14 +357,17 @@ export const SaveGiteaProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {status === "loading" && fetchStatus === "fetching" - ? "Loading...." - : field.value - ? branches?.find( - (branch: GiteaBranch) => - branch.name === field.value, - )?.name - : "Select branch"} + {status === "loading" && + fetchStatus === "fetching" ? ( + + ) : field.value ? ( + branches?.find( + (branch: GiteaBranch) => + branch.name === field.value, + )?.name + ) : ( + "Select branch" + )} @@ -368,9 +379,13 @@ export const SaveGiteaProvider = ({ applicationId }: Props) => { className="h-9" /> {status === "loading" && fetchStatus === "fetching" && ( - - Loading Branches.... - +
+ +
)} {!repository?.owner && ( 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 80d6850ca9..267bead744 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 @@ -6,8 +6,10 @@ import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; import { GithubIcon } from "@/components/icons/data-tools-icons"; +import { ListSkeleton } from "@/components/shared/list-skeleton"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; +import { Skeleton } from "@/components/ui/skeleton"; import { Command, CommandEmpty, @@ -233,13 +235,15 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( - (repo) => repo.name === field.value.repo, - )?.name - : "Select repository"} + {isLoadingRepositories ? ( + + ) : field.value.owner ? ( + repositories?.find( + (repo) => repo.name === field.value.repo, + )?.name + ) : ( + "Select repository" + )} @@ -252,9 +256,13 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { className="h-9" /> {isLoadingRepositories && ( - - Loading Repositories.... - +
+ +
)} No repositories found. @@ -316,13 +324,16 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {status === "loading" && fetchStatus === "fetching" - ? "Loading...." - : field.value - ? branches?.find( - (branch) => branch.name === field.value, - )?.name - : "Select branch"} + {status === "loading" && + fetchStatus === "fetching" ? ( + + ) : field.value ? ( + branches?.find( + (branch) => branch.name === field.value, + )?.name + ) : ( + "Select branch" + )} @@ -334,9 +345,13 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { className="h-9" /> {status === "loading" && fetchStatus === "fetching" && ( - - Loading Branches.... - +
+ +
)} {!repository?.owner && ( 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 6197fc49ff..ef1ceddde6 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 @@ -7,8 +7,10 @@ import { toast } from "sonner"; import { z } from "zod"; import { GitlabIcon } from "@/components/icons/data-tools-icons"; import { AlertBlock } from "@/components/shared/alert-block"; +import { ListSkeleton } from "@/components/shared/list-skeleton"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; +import { Skeleton } from "@/components/ui/skeleton"; import { Command, CommandEmpty, @@ -254,13 +256,15 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( - (repo) => repo.name === field.value.repo, - )?.name - : "Select repository"} + {isLoadingRepositories ? ( + + ) : field.value.owner ? ( + repositories?.find( + (repo) => repo.name === field.value.repo, + )?.name + ) : ( + "Select repository" + )} @@ -273,9 +277,13 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { className="h-9" /> {isLoadingRepositories && ( - - Loading Repositories.... - +
+ +
)} No repositories found. @@ -347,13 +355,16 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {status === "loading" && fetchStatus === "fetching" - ? "Loading...." - : field.value - ? branches?.find( - (branch) => branch.name === field.value, - )?.name - : "Select branch"} + {status === "loading" && + fetchStatus === "fetching" ? ( + + ) : field.value ? ( + branches?.find( + (branch) => branch.name === field.value, + )?.name + ) : ( + "Select branch" + )} @@ -365,9 +376,13 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { className="h-9" /> {status === "loading" && fetchStatus === "fetching" && ( - - Loading Branches.... - +
+ +
)} {!repository?.owner && ( diff --git a/apps/dokploy/components/dashboard/application/general/generic/show.tsx b/apps/dokploy/components/dashboard/application/general/generic/show.tsx index a60db800c9..1398936711 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/show.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/show.tsx @@ -1,4 +1,4 @@ -import { GitBranch, Loader2, UploadCloud } from "lucide-react"; +import { GitBranch, UploadCloud } from "lucide-react"; import Link from "next/link"; import { useState } from "react"; import { toast } from "sonner"; @@ -14,6 +14,7 @@ import { GitIcon, GitlabIcon, } from "@/components/icons/data-tools-icons"; +import { ListSkeleton } from "@/components/shared/list-skeleton"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { api } from "@/utils/api"; @@ -87,12 +88,11 @@ export const ShowProviderForm = ({ applicationId }: Props) => { -
-
- - Loading providers... -
-
+
); diff --git a/apps/dokploy/components/dashboard/application/logs/show.tsx b/apps/dokploy/components/dashboard/application/logs/show.tsx index e5dff075ee..9ac30fb24b 100644 --- a/apps/dokploy/components/dashboard/application/logs/show.tsx +++ b/apps/dokploy/components/dashboard/application/logs/show.tsx @@ -1,4 +1,4 @@ -import { Loader2 } from "lucide-react"; +import { Skeleton } from "@/components/ui/skeleton"; import dynamic from "next/dynamic"; import { useEffect, useState } from "react"; import { Badge } from "@/components/ui/badge"; @@ -121,9 +121,8 @@ export const ShowDockerLogs = ({ appName, serverId }: Props) => { {isLoading ? ( -
- Loading... - +
+
) : ( diff --git a/apps/dokploy/components/dashboard/compose/logs/show.tsx b/apps/dokploy/components/dashboard/compose/logs/show.tsx index a4551f4156..765c2ebd7a 100644 --- a/apps/dokploy/components/dashboard/compose/logs/show.tsx +++ b/apps/dokploy/components/dashboard/compose/logs/show.tsx @@ -1,4 +1,3 @@ -import { Loader2 } from "lucide-react"; import dynamic from "next/dynamic"; import { useEffect, useState } from "react"; import { badgeStateColor } from "@/components/dashboard/application/logs/show"; @@ -20,6 +19,7 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; +import { Skeleton } from "@/components/ui/skeleton"; import { api } from "@/utils/api"; export const DockerLogs = dynamic( () => @@ -74,9 +74,8 @@ export const ShowDockerLogsCompose = ({ {isLoading ? ( -
- Loading... - +
+
) : ( diff --git a/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx b/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx index 9aac258200..ca2763f968 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx @@ -1,4 +1,4 @@ -import { Loader2 } from "lucide-react"; +import { Skeleton } from "@/components/ui/skeleton"; import dynamic from "next/dynamic"; import type React from "react"; import { useEffect, useState } from "react"; @@ -77,9 +77,8 @@ export const ShowModalLogs = ({