mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-02 22:46:16 +00:00
#591 - sites
This commit is contained in:
@ -103,7 +103,7 @@ export function AppSidebar() {
|
||||
},
|
||||
{
|
||||
title: 'Application',
|
||||
href: route('sites.show', { server: page.props.server?.id || 0, site: page.props.site?.id || 0 }),
|
||||
href: route('application', { server: page.props.server?.id || 0, site: page.props.site?.id || 0 }),
|
||||
icon: RocketIcon,
|
||||
},
|
||||
]
|
||||
|
@ -129,7 +129,7 @@ export function AppSidebar({ secondNavItems, secondNavTitle }: { secondNavItems?
|
||||
<Collapsible key={`${item.title}-${item.href}`} defaultOpen={isActive} className="group/collapsible">
|
||||
<SidebarMenuItem>
|
||||
<CollapsibleTrigger asChild>
|
||||
<SidebarMenuButton disabled={item.isDisabled || false}>
|
||||
<SidebarMenuButton disabled={item.isDisabled || false} hidden={item.hidden}>
|
||||
{item.icon && <item.icon />}
|
||||
<span>{item.title}</span>
|
||||
<ChevronRightIcon className="ml-auto transition-transform group-data-[state=open]/collapsible:rotate-90" />
|
||||
@ -162,7 +162,7 @@ export function AppSidebar({ secondNavItems, secondNavTitle }: { secondNavItems?
|
||||
}
|
||||
|
||||
return (
|
||||
<SidebarMenuItem key={`${item.title}-${item.href}`}>
|
||||
<SidebarMenuItem key={`${item.title}-${item.href}`} hidden={item.hidden}>
|
||||
<SidebarMenuButton onClick={() => router.visit(item.href)} isActive={isActive} disabled={item.isDisabled || false}>
|
||||
{item.icon && <item.icon />}
|
||||
<span>{item.title}</span>
|
||||
|
@ -17,7 +17,7 @@ export default function CopyableBadge({ text }: { text: string }) {
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<div className="inline-flex cursor-pointer justify-start space-x-2 truncate" onClick={copyToClipboard}>
|
||||
<Badge variant={copySuccess ? 'success' : 'outline'} className="block max-w-[150px] overflow-ellipsis">
|
||||
<Badge variant={copySuccess ? 'success' : 'outline'} className="block max-w-[200px] overflow-ellipsis">
|
||||
{text}
|
||||
</Badge>
|
||||
</div>
|
||||
|
@ -15,15 +15,26 @@ import { Avatar, AvatarFallback } from '@/components/ui/avatar';
|
||||
import { type Site } from '@/types/site';
|
||||
import type { SharedData } from '@/types';
|
||||
import CreateSite from '@/pages/sites/components/create-site';
|
||||
import siteHelper from '@/lib/site-helper';
|
||||
|
||||
export function SiteSwitch() {
|
||||
const page = usePage<SharedData>();
|
||||
const [selectedSite, setSelectedSite] = useState(page.props.site || null);
|
||||
const storedSite = siteHelper.getStoredSite();
|
||||
const [selectedSite, setSelectedSite] = useState(page.props.site || storedSite || null);
|
||||
const initials = useInitials();
|
||||
const form = useForm();
|
||||
|
||||
if (storedSite && page.props.site && storedSite.id !== page.props.site.id) {
|
||||
siteHelper.storeSite(page.props.site);
|
||||
}
|
||||
|
||||
if (storedSite && page.props.serverSites && !page.props.serverSites.find((site) => site.id === storedSite.id)) {
|
||||
siteHelper.storeSite();
|
||||
}
|
||||
|
||||
const handleSiteChange = (site: Site) => {
|
||||
setSelectedSite(site);
|
||||
siteHelper.storeSite(site);
|
||||
form.post(route('sites.switch', { server: site.server_id, site: site.id }));
|
||||
};
|
||||
|
||||
|
@ -43,7 +43,7 @@ export default function DynamicField({ value, onChange, config, error }: Dynamic
|
||||
<Label htmlFor={config.name} className="capitalize">
|
||||
{label}
|
||||
</Label>
|
||||
<Select value={value as string} onValueChange={onChange}>
|
||||
<Select defaultValue={value as string} onValueChange={onChange}>
|
||||
<SelectTrigger id={config.name}>
|
||||
<SelectValue placeholder={config.placeholder || `Select ${label}`} />
|
||||
</SelectTrigger>
|
||||
@ -74,7 +74,14 @@ export default function DynamicField({ value, onChange, config, error }: Dynamic
|
||||
<Label htmlFor={config.name} className="capitalize">
|
||||
{label}
|
||||
</Label>
|
||||
<Input type="text" name={config.name} id={config.name} value={(value as string) || ''} onChange={(e) => onChange(e.target.value)} {...props} />
|
||||
<Input
|
||||
type="text"
|
||||
name={config.name}
|
||||
id={config.name}
|
||||
defaultValue={(value as string) || ''}
|
||||
onChange={(e) => onChange(e.target.value)}
|
||||
{...props}
|
||||
/>
|
||||
{config.description && <p className="text-muted-foreground text-xs">{config.description}</p>}
|
||||
<InputError message={error} />
|
||||
</FormField>
|
||||
|
Reference in New Issue
Block a user