diff --git a/src/widgets/quick-create/ui/QuickCreate.tsx b/src/widgets/quick-create/ui/QuickCreate.tsx index f1e3a4d..37f7da9 100644 --- a/src/widgets/quick-create/ui/QuickCreate.tsx +++ b/src/widgets/quick-create/ui/QuickCreate.tsx @@ -1,28 +1,63 @@ 'use client'; - +import { useState, type ComponentType } from 'react'; +import { FolderPlus, Plus, UsersRound, LayoutGrid } from 'lucide-react'; +import { useParams } from 'next/navigation'; import { useTeamStore } from 'entities/team'; import { CreateProjectDialog } from 'features/projects/create'; import { CreateTeamDialog } from 'features/teams/create'; -import { FolderPlus, Plus, UsersRound } from 'lucide-react'; -import { useState } from 'react'; -import { - Button, - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, - Item, - ItemContent, - ItemDescription, - ItemMedia, - ItemTitle, -} from 'shared/ui'; +import { CreateBoardDialog } from 'features/boards/create'; +import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from 'shared/ui'; +import { QuickCreateItem } from './QuickCreateItem'; + +interface MenuItemConfig { + title: string; + description: string; + icon: ComponentType<{ className?: string }>; + disabled?: boolean; + onOpenChange: () => void; +} export function QuickCreate() { const teamId = useTeamStore.use.teamId(); const [open, setOpen] = useState(false); const [createTeamOpen, setCreateTeamOpen] = useState(false); const [createProjectOpen, setCreateProjectOpen] = useState(false); + const [createBoardOpen, setCreateBoardOpen] = useState(false); + + const params = useParams<{ projectSlug: string }>(); + const projectSlug = params?.projectSlug; + + const menuItems: MenuItemConfig[] = [ + { + title: 'Команда', + description: 'Создать новую команду', + icon: UsersRound, + onOpenChange: () => { + setOpen(false); + setCreateTeamOpen(true); + }, + }, + { + title: 'Проект', + description: 'Создать новый проект', + icon: FolderPlus, + disabled: !teamId, + onOpenChange: () => { + setOpen(false); + setCreateProjectOpen(true); + }, + }, + { + title: 'Доска', + description: 'Создать новую доску в проекте', + icon: LayoutGrid, + disabled: !projectSlug, + onOpenChange: () => { + setOpen(false); + setCreateBoardOpen(true); + }, + }, + ]; return (
@@ -41,51 +76,17 @@ export function QuickCreate() { align="end" className="w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg" > - { - e.preventDefault(); - setOpen(false); - setCreateTeamOpen(true); - }} - > - - - - - - Команда - - Создать новую команду - - - - - { - e.preventDefault(); - setOpen(false); - setCreateProjectOpen(true); - }} - > - - - - - - Проект - - Создать новый проект - - - - + {menuItems.map((item) => ( + + ))} + +
); } diff --git a/src/widgets/quick-create/ui/QuickCreateItem.tsx b/src/widgets/quick-create/ui/QuickCreateItem.tsx new file mode 100644 index 0000000..ca72621 --- /dev/null +++ b/src/widgets/quick-create/ui/QuickCreateItem.tsx @@ -0,0 +1,45 @@ +import { ComponentType } from 'react'; +import { + DropdownMenuItem, + Item, + ItemContent, + ItemDescription, + ItemMedia, + ItemTitle, +} from 'shared/ui'; + +interface QuickCreateItemProps { + icon: ComponentType<{ className?: string }>; + title: string; + description: string; + disabled?: boolean; + onOpenChange: () => void; +} + +export function QuickCreateItem({ + icon: Icon, + title, + description, + disabled = false, + onOpenChange, +}: QuickCreateItemProps) { + return ( + { + e.preventDefault(); + onOpenChange(); + }} + > + + + + + + {title} + {description} + + + + ); +}