- Implemented ExtractionsPage component for managing audio extractions. - Added ExtractionsService for handling extraction API calls. - Created Playlist component for displaying audio tracks. - Introduced ScrollArea component for better UI scrolling experience. - Developed FilesService for file download and thumbnail management. - Added PlayerService for controlling audio playback and state. - Updated API services index to include new services.
64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
import { SidebarProvider, SidebarInset, SidebarTrigger } from '@/components/ui/sidebar'
|
|
import { AppSidebar } from './AppSidebar'
|
|
import { Separator } from '@/components/ui/separator'
|
|
import {
|
|
Breadcrumb,
|
|
BreadcrumbItem,
|
|
BreadcrumbLink,
|
|
BreadcrumbList,
|
|
BreadcrumbPage,
|
|
BreadcrumbSeparator,
|
|
} from '@/components/ui/breadcrumb'
|
|
import { Player } from './player/Player'
|
|
|
|
interface AppLayoutProps {
|
|
children: React.ReactNode
|
|
breadcrumb?: {
|
|
items: Array<{
|
|
label: string
|
|
href?: string
|
|
}>
|
|
}
|
|
}
|
|
|
|
export function AppLayout({ children, breadcrumb }: AppLayoutProps) {
|
|
return (
|
|
<SidebarProvider>
|
|
<AppSidebar />
|
|
<SidebarInset>
|
|
<header className="flex h-16 shrink-0 items-center gap-2">
|
|
<div className="flex items-center gap-2 px-4">
|
|
<SidebarTrigger className="-ml-1" />
|
|
<Separator orientation="vertical" className="mr-2 h-4" />
|
|
{breadcrumb && (
|
|
<Breadcrumb>
|
|
<BreadcrumbList>
|
|
{breadcrumb.items.map((item, index) => (
|
|
<div key={item.label} className="flex items-center gap-2">
|
|
<BreadcrumbItem>
|
|
{item.href && index < breadcrumb.items.length - 1 ? (
|
|
<BreadcrumbLink href={item.href}>
|
|
{item.label}
|
|
</BreadcrumbLink>
|
|
) : (
|
|
<BreadcrumbPage>{item.label}</BreadcrumbPage>
|
|
)}
|
|
</BreadcrumbItem>
|
|
{index < breadcrumb.items.length - 1 && (
|
|
<BreadcrumbSeparator />
|
|
)}
|
|
</div>
|
|
))}
|
|
</BreadcrumbList>
|
|
</Breadcrumb>
|
|
)}
|
|
</div>
|
|
</header>
|
|
<div className="flex flex-1 flex-col gap-4 p-4 pt-0">
|
|
{children}
|
|
</div>
|
|
</SidebarInset>
|
|
<Player />
|
|
</SidebarProvider>
|
|
)
|
|
} |