mirror of
https://github.com/andwati/dokploy.git
synced 2026-11-12 15:05:19 +00:00
feat(search-command): enhance service extraction and project navigation
- Introduced a new function `extractAllServicesFromProject` to aggregate services from all environments within a project, including environment details. - Updated the project selection logic to navigate to the production environment of a project. - Modified the display of services to include the environment name alongside the service name in the search results.
This commit is contained in:
@@ -3,6 +3,10 @@
|
|||||||
import { BookIcon, CircuitBoard, GlobeIcon } from "lucide-react";
|
import { BookIcon, CircuitBoard, GlobeIcon } from "lucide-react";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
import {
|
||||||
|
extractServices,
|
||||||
|
type Services,
|
||||||
|
} from "@/components/dashboard/settings/users/add-permissions";
|
||||||
import {
|
import {
|
||||||
MariadbIcon,
|
MariadbIcon,
|
||||||
MongodbIcon,
|
MongodbIcon,
|
||||||
@@ -20,13 +24,34 @@ import {
|
|||||||
CommandSeparator,
|
CommandSeparator,
|
||||||
} from "@/components/ui/command";
|
} from "@/components/ui/command";
|
||||||
import { authClient } from "@/lib/auth-client";
|
import { authClient } from "@/lib/auth-client";
|
||||||
// import {
|
|
||||||
// extractServices,
|
|
||||||
// type Services,
|
|
||||||
// } from "@/pages/dashboard/project/[projectId]";
|
|
||||||
import { api } from "@/utils/api";
|
import { api } from "@/utils/api";
|
||||||
import { StatusTooltip } from "../shared/status-tooltip";
|
import { StatusTooltip } from "../shared/status-tooltip";
|
||||||
|
|
||||||
|
// Extended Services type to include environmentId and environmentName for search navigation
|
||||||
|
type SearchServices = Services & {
|
||||||
|
environmentId: string;
|
||||||
|
environmentName: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const extractAllServicesFromProject = (project: any): SearchServices[] => {
|
||||||
|
const allServices: SearchServices[] = [];
|
||||||
|
|
||||||
|
// Iterate through all environments in the project
|
||||||
|
project.environments?.forEach((environment: any) => {
|
||||||
|
const environmentServices = extractServices(environment);
|
||||||
|
const servicesWithEnvironmentId: SearchServices[] = environmentServices.map(
|
||||||
|
(service) => ({
|
||||||
|
...service,
|
||||||
|
environmentId: environment.environmentId,
|
||||||
|
environmentName: environment.name,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
allServices.push(...servicesWithEnvironmentId);
|
||||||
|
});
|
||||||
|
|
||||||
|
return allServices;
|
||||||
|
};
|
||||||
|
|
||||||
export const SearchCommand = () => {
|
export const SearchCommand = () => {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const [open, setOpen] = React.useState(false);
|
const [open, setOpen] = React.useState(false);
|
||||||
@@ -51,7 +76,7 @@ export const SearchCommand = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{/* <CommandDialog open={open} onOpenChange={setOpen}>
|
<CommandDialog open={open} onOpenChange={setOpen}>
|
||||||
<CommandInput
|
<CommandInput
|
||||||
placeholder={"Search projects or settings"}
|
placeholder={"Search projects or settings"}
|
||||||
value={search}
|
value={search}
|
||||||
@@ -63,25 +88,37 @@ export const SearchCommand = () => {
|
|||||||
</CommandEmpty>
|
</CommandEmpty>
|
||||||
<CommandGroup heading={"Projects"}>
|
<CommandGroup heading={"Projects"}>
|
||||||
<CommandList>
|
<CommandList>
|
||||||
{data?.map((project) => (
|
{data?.map((project) => {
|
||||||
<CommandItem
|
console.log("project", project);
|
||||||
key={project.projectId}
|
const productionEnvironment = project.environments.find(
|
||||||
onSelect={() => {
|
(environment) => environment.name === "production",
|
||||||
router.push(`/dashboard/project/${project.projectId}`);
|
);
|
||||||
setOpen(false);
|
|
||||||
}}
|
if (!productionEnvironment) return null;
|
||||||
>
|
|
||||||
<BookIcon className="size-4 text-muted-foreground mr-2" />
|
return (
|
||||||
{project.name}
|
<CommandItem
|
||||||
</CommandItem>
|
key={project.projectId}
|
||||||
))}
|
onSelect={() => {
|
||||||
|
router.push(
|
||||||
|
`/dashboard/project/${project.projectId}/environment/${productionEnvironment!.environmentId}`,
|
||||||
|
);
|
||||||
|
setOpen(false);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<BookIcon className="size-4 text-muted-foreground mr-2" />
|
||||||
|
{project.name} / {productionEnvironment!.name}
|
||||||
|
</CommandItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
</CommandList>
|
</CommandList>
|
||||||
</CommandGroup>
|
</CommandGroup>
|
||||||
<CommandSeparator />
|
<CommandSeparator />
|
||||||
<CommandGroup heading={"Services"}>
|
<CommandGroup heading={"Services"}>
|
||||||
<CommandList>
|
<CommandList>
|
||||||
{data?.map((project) => {
|
{data?.map((project) => {
|
||||||
const applications: Services[] = extractServices(project);
|
const applications: SearchServices[] =
|
||||||
|
extractAllServicesFromProject(project);
|
||||||
return applications.map((application) => (
|
return applications.map((application) => (
|
||||||
<CommandItem
|
<CommandItem
|
||||||
key={application.id}
|
key={application.id}
|
||||||
@@ -114,7 +151,8 @@ export const SearchCommand = () => {
|
|||||||
<CircuitBoard className="h-6 w-6 mr-2" />
|
<CircuitBoard className="h-6 w-6 mr-2" />
|
||||||
)}
|
)}
|
||||||
<span className="flex-grow">
|
<span className="flex-grow">
|
||||||
{project.name} / {application.name}{" "}
|
{project.name} / {application.environmentName} /{" "}
|
||||||
|
{application.name}{" "}
|
||||||
<div style={{ display: "none" }}>{application.id}</div>
|
<div style={{ display: "none" }}>{application.id}</div>
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
@@ -181,7 +219,7 @@ export const SearchCommand = () => {
|
|||||||
</CommandItem>
|
</CommandItem>
|
||||||
</CommandGroup>
|
</CommandGroup>
|
||||||
</CommandList>
|
</CommandList>
|
||||||
</CommandDialog> */}
|
</CommandDialog>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user