Files
kandev/apps/web/components/task/task-layout.tsx
T
2026-02-16 13:48:58 +00:00

86 lines
2.2 KiB
TypeScript

'use client';
import { memo } from 'react';
import dynamic from 'next/dynamic';
import { useResponsiveBreakpoint } from '@/hooks/use-responsive-breakpoint';
import { SessionMobileLayout, SessionTabletLayout } from './mobile';
import type { Repository, RepositoryScript } from '@/lib/types/http';
import type { Terminal } from '@/hooks/domains/session/use-terminals';
import type { Layout } from 'react-resizable-panels';
// Re-export for backwards compatibility
export type { SelectedDiff } from '@/hooks/use-session-layout-state';
// Dynamic import for dockview (no SSR)
const DockviewDesktopLayout = dynamic(
() => import('./dockview-desktop-layout').then((mod) => mod.DockviewDesktopLayout),
{ ssr: false }
);
type TaskLayoutProps = {
workspaceId: string | null;
workflowId: string | null;
sessionId?: string | null;
repository?: Repository | null;
initialScripts?: RepositoryScript[];
initialTerminals?: Terminal[];
defaultLayouts?: Record<string, Layout>;
taskTitle?: string;
baseBranch?: string;
worktreeBranch?: string | null;
};
export const TaskLayout = memo(function TaskLayout({
workspaceId,
workflowId,
sessionId = null,
repository = null,
initialScripts = [],
initialTerminals,
defaultLayouts = {},
taskTitle,
baseBranch,
worktreeBranch,
}: TaskLayoutProps) {
const { isMobile, isTablet } = useResponsiveBreakpoint();
// Mobile layout
if (isMobile) {
return (
<SessionMobileLayout
workspaceId={workspaceId}
workflowId={workflowId}
sessionId={sessionId}
baseBranch={baseBranch}
worktreeBranch={worktreeBranch}
taskTitle={taskTitle}
/>
);
}
// Tablet layout
if (isTablet) {
return (
<SessionTabletLayout
workspaceId={workspaceId}
workflowId={workflowId}
sessionId={sessionId}
repository={repository}
defaultLayouts={defaultLayouts}
/>
);
}
// Desktop layout - dockview
return (
<DockviewDesktopLayout
workspaceId={workspaceId}
workflowId={workflowId}
sessionId={sessionId}
repository={repository}
initialScripts={initialScripts}
initialTerminals={initialTerminals}
/>
);
});