Skip to content

Commit ac4cca0

Browse files
[4.x] QoL & Polish (#1145)
* wip * background consistency
1 parent 3b8f2f2 commit ac4cca0

32 files changed

Lines changed: 316 additions & 273 deletions

File tree

app/Actions/Server/GetServiceLogs.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ public function handle(Server $server): array
2424

2525
foreach ($services as $service) {
2626
$service->setRelation('server', $server);
27+
if (! $service->hasHandler()) {
28+
continue;
29+
}
2730
$handler = $service->handler();
2831
if (! $handler instanceof HasLogs) {
2932
continue;

app/Http/Controllers/ConsoleController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public function index(Server $server): Response
2626

2727
return Inertia::render('servers/console', [
2828
'server' => ServerResource::make($server),
29+
'ssh_users' => $server->sshLoginUsers(),
2930
]);
3031
}
3132

app/Http/Controllers/CronJobController.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ public function site(Server $server, Site $site): Response
118118
'cronjobs' => CronJobResource::collection(
119119
$site->cronJobs()->latest()->simplePaginate(config('web.pagination_size'))
120120
),
121-
'site' => $site,
122121
'sites' => $server->sites()->select('id', 'domain')->get(),
123122
'ssh_users' => $site->getSshUsers(),
124123
]);

app/Http/Resources/ServerResource.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public function toArray(Request $request): array
2222
'provider_id' => $this->provider_id,
2323
'name' => $this->name,
2424
'ssh_user' => $this->ssh_user,
25-
'ssh_users' => $this->sshLoginUsers(),
25+
'ssh_users' => $this->getSshUsers(),
2626
'ip' => $this->ip,
2727
'local_ip' => $this->local_ip,
2828
'port' => $this->port,

app/Models/Service.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ public function log(): BelongsTo
7575
return $this->belongsTo(ServerLog::class, 'log_id');
7676
}
7777

78+
public function hasHandler(): bool
79+
{
80+
return (bool) config("service.services.{$this->name}.handler");
81+
}
82+
7883
public function handler(): ServiceInterface|Webserver|PHP|Firewall|Database|ProcessManager
7984
{
8085
$name = $this->name;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { Button } from '@/components/ui/button';
2+
import { type BreadcrumbItem } from '@/types';
3+
import { cn } from '@/lib/utils';
4+
import { Link } from '@inertiajs/react';
5+
import { ArrowLeftIcon } from 'lucide-react';
6+
import { type PropsWithChildren } from 'react';
7+
8+
export function BreadcrumbHeader({ breadcrumbs, children, className }: PropsWithChildren<{ breadcrumbs: BreadcrumbItem[]; className?: string }>) {
9+
const parent = breadcrumbs.length > 1 ? breadcrumbs[breadcrumbs.length - 2] : undefined;
10+
11+
return (
12+
<div className={cn('flex flex-col items-start gap-4', className)}>
13+
{parent && (
14+
<Button variant="outline" size="sm" className="text-muted-foreground hover:text-foreground h-7 px-2.5" asChild>
15+
<Link href={parent.href}>
16+
<ArrowLeftIcon />
17+
{parent.title}
18+
</Link>
19+
</Button>
20+
)}
21+
{children}
22+
</div>
23+
);
24+
}

resources/js/components/breadcrumbs.tsx

Lines changed: 0 additions & 34 deletions
This file was deleted.

resources/js/layouts/admin/layout.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { type BreadcrumbItem, type NavItem } from '@/types';
1+
import { type NavItem } from '@/types';
22
import { GithubIcon, PlugIcon, UsersIcon } from 'lucide-react';
33
import { ReactNode } from 'react';
44
import Layout from '@/layouts/app/layout';
@@ -27,14 +27,14 @@ const sidebarNavItems: NavItem[] = [
2727
},
2828
];
2929

30-
export default function SettingsLayout({ children, breadcrumbs }: { children: ReactNode; breadcrumbs?: BreadcrumbItem[] }) {
30+
export default function SettingsLayout({ children }: { children: ReactNode }) {
3131
// When server-side rendering, we only render the layout on the client...
3232
if (typeof window === 'undefined') {
3333
return null;
3434
}
3535

3636
return (
37-
<Layout breadcrumbs={breadcrumbs} secondNavItems={sidebarNavItems} secondNavTitle="Admin">
37+
<Layout secondNavItems={sidebarNavItems} secondNavTitle="Admin">
3838
{children}
3939
</Layout>
4040
);

resources/js/layouts/app/layout.tsx

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import { AppSidebar } from '@/components/app-sidebar';
22
import { AppHeader } from '@/components/app-header';
3-
import { type BreadcrumbItem, NavItem, SharedData } from '@/types';
3+
import { NavItem, SharedData } from '@/types';
44
import { type PropsWithChildren, useCallback, useEffect, useState } from 'react';
55
import { SidebarInset, SidebarProvider } from '@/components/ui/sidebar';
66
import { usePage } from '@inertiajs/react';
77
import { Toaster } from '@/components/ui/sonner';
88
import { toast } from 'sonner';
99
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
1010
import { TooltipProvider } from '@/components/ui/tooltip';
11-
import { Breadcrumbs } from '@/components/breadcrumbs';
1211
import { type SocketEventData, useSocketEvents, useSocketListener } from '@/hooks/use-socket-events';
1312
import { useBootstrapStore } from '@/stores/bootstrap-store';
1413
import { Button } from '@/components/ui/button';
@@ -19,9 +18,7 @@ export default function Layout({
1918
children,
2019
secondNavItems,
2120
secondNavTitle,
22-
breadcrumbs,
2321
}: PropsWithChildren<{
24-
breadcrumbs?: BreadcrumbItem[];
2522
secondNavItems?: NavItem[];
2623
secondNavTitle?: string;
2724
}>) {
@@ -80,13 +77,6 @@ export default function Layout({
8077
<AppSidebar secondNavItems={secondNavItems} secondNavTitle={secondNavTitle} />
8178
<SidebarInset>
8279
<AppHeader socketStatus={socketStatus} socketReconnect={socketReconnect} />
83-
{breadcrumbs && breadcrumbs.length > 1 && (
84-
<div className="border-sidebar-border/70 flex w-full border-b">
85-
<div className="mx-auto flex h-12 w-full items-center justify-start px-4 text-neutral-500">
86-
<Breadcrumbs breadcrumbs={breadcrumbs} />
87-
</div>
88-
</div>
89-
)}
9080
<div className="flex flex-1 flex-col">
9181
{showBootstrapError ? (
9282
<div className="flex flex-1 items-center justify-center p-6">

resources/js/layouts/settings/layout.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { type BreadcrumbItem, type NavItem } from '@/types';
1+
import { type NavItem } from '@/types';
22
import { BellIcon, CloudIcon, CodeIcon, CommandIcon, DatabaseIcon, GlobeIcon, KeyIcon, ListIcon, UserIcon } from 'lucide-react';
33
import { ReactNode } from 'react';
44
import Layout from '@/layouts/app/layout';
@@ -51,14 +51,14 @@ const sidebarNavItems: NavItem[] = [
5151
},
5252
];
5353

54-
export default function SettingsLayout({ children, breadcrumbs }: { children: ReactNode; breadcrumbs?: BreadcrumbItem[] }) {
54+
export default function SettingsLayout({ children }: { children: ReactNode }) {
5555
// When server-side rendering, we only render the layout on the client...
5656
if (typeof window === 'undefined') {
5757
return null;
5858
}
5959

6060
return (
61-
<Layout breadcrumbs={breadcrumbs} secondNavItems={sidebarNavItems} secondNavTitle="Settings">
61+
<Layout secondNavItems={sidebarNavItems} secondNavTitle="Settings">
6262
{children}
6363
</Layout>
6464
);

0 commit comments

Comments
 (0)