Skip to content

Добавить действие Создать доску в виджет quick-create #83

Description

@kapitulin24

Контекст

В шапке приложения (SidebarLayout) есть виджет быстрого создания — кнопка «+» с выпадающим меню. Сейчас в нём два пункта: Команда и Проект (см. src/widgets/quick-create/ui/QuickCreate.tsx).

Функционал создания доски уже реализован отдельно:

  • features/boards/createCreateBoardDialog, CreateBoardForm, useCreateBoardForm, useCreateBoard
  • На странице проекта (ProjectBoards.tsx) диалог уже используется через кнопку «Создать доску»

Нужно добавить третий пункт в QuickCreate, чтобы пользователь мог создать доску из шапки, не возвращаясь на страницу проекта.

Важно: доска всегда принадлежит проекту. API: POST /projects/{projectSlug}/area. Форма берёт projectSlug из URL через useParams() в useCreateBoardForm.ts — это работает только на маршруте /team/projects/[slug].


Технические требования

  • Локация логики: src/widgets/quick-create/ui/QuickCreate.tsx (основные изменения), при необходимости — src/features/boards/create/ui/CreateBoardDialog.tsx
  • Инструменты: React, shadcn/ui (DropdownMenu, Dialog), lucide-react, существующий feature features/boards/create, useParams из next/navigation
  • Логика работы:
    1. Открыть QuickCreate.tsx и изучить, как сделаны пункты «Команда» и «Проект» — новый пункт делается по тому же шаблону
    2. Добавить useState для createBoardOpen и импорт CreateBoardDialog из features/boards/create
    3. Получить projectSlug из useParams<{ slug: string }>() — тот же способ, что в useCreateBoardForm.ts
    4. Добавить DropdownMenuItem «Доска» с иконкой (например, LayoutGrid или Kanban из lucide-react), описанием «Создать новую доску в проекте»
    5. Пункт disabled, если !projectSlug — аналогично тому, как «Проект» disabled при !teamId
    6. По клику: закрыть dropdown (setOpen(false)), открыть CreateBoardDialog через controlled props: dialog={{ open: createBoardOpen, onOpenChange: setCreateBoardOpen }}
    7. Доработка диалога (если нужно): CreateProjectDialog рендерит DialogTrigger только при наличии children. В CreateBoardDialog триггер рендерится всегда — при использовании из QuickCreate без children это сломает UI. Приведи CreateBoardDialog к тому же паттерну, что CreateProjectDialog.tsx
    8. Новую логику создания доски не писать — переиспользовать готовый CreateBoardDialog + CreateBoardForm

Цель и критерии приемки (Definition of Done)

  • База: в QuickCreate.tsx добавлены импорт CreateBoardDialog, state createBoardOpen, получение projectSlug через useParams
  • Функционал: в dropdown есть пункт «Доска»; на странице проекта (/team/projects/[slug]) клик открывает диалог «Новая доска»; после успешного создания доска появляется в списке досок проекта (инвалидация уже в useCreateBoard.ts)
  • Disabled-состояние: вне страницы проекта (нет slug в URL) пункт «Доска» неактивен — как «Проект» без выбранной команды
  • Интеграция: CreateBoardDialog корректно работает в controlled-режиме без DialogTrigger; визуальный стиль пункта меню совпадает с «Команда» / «Проект» (Item, ItemMedia, ItemTitle, ItemDescription)

Важные указания

  • Производительность: дополнительных запросов не нужно — форма отправляет один POST, кеш досок обновляется через invalidateQueries в useCreateBoard
  • Ошибки: валидация и отображение ошибок уже в useCreateBoardForm через setFormErrors — дублировать не нужно
  • Безопасность: отдельной авторизации на фронте не требуется — API защищён на бэкенде; достаточно не давать открыть диалог без projectSlug
  • Не делать в рамках задачи: выбор проекта из списка в диалоге, создание колонок, рефакторинг useCreateBoardForm — это отдельные задачи
  • Как проверить: выбрать команду → открыть проект → нажать «+» в шапке → «Доска» → ввести название → «Создать доску» → доска появилась в табах проекта

Metadata

Metadata

Assignees

Labels

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions