Task Group — Complete Guide
A TaskGroup shows users a set of tasks they need to complete. It consists of:
- TaskPanels — individual task cards with a status indicator, optional subtasks, and optional summary
- ActionPanels — optional action buttons co-located with their TaskPanel (modal triggers or links)
- TaskGroup — the outer wrapper that groups TaskPanels under a label
Directory Structure
Each TaskPanel lives in its own folder. If the panel has actions, the ActionPanel is co-located inside that folder.
{featurePath}/taskGroups/{taskGroupName}/
├── {Product}{Role}{TaskGroupName}TaskGroup.tsx
└── taskPanels/
├── {Product}{Role}{PanelName}TaskPanel/
│ ├── index.tsx ← the TaskPanel component
│ └── {Product}{Role}{PanelName}ActionPanel.tsx ← optional, only if panel has actions
└── {Product}{Role}{PanelName2}TaskPanel/
└── index.tsx
File Creation Order
- All TaskPanels (can be built independently of each other)
- ActionPanels for panels that need them
- TaskGroup (assembles everything)
Key Imports
// TaskPanel components
import {
TaskPanel,
TaskPanelHeader,
TaskPanelStatus,
TaskPanelTitle,
TaskPanelContent,
TaskPanelSummary,
} from "@finstreet/ui/components/patterns/TaskPanel";
// SubTask (for TaskPanelContent)
import { SubTask } from "@finstreet/ui/components/patterns/SubTask";
// ActionPanel components
import {
ActionPanel,
ActionPanelContent,
ActionPanelAction,
} from "@finstreet/ui/components/patterns/ActionPanel";
// Layout — used INSIDE each TaskPanel, not at TaskGroup level
import {
TasksAndActionsLayout,
TasksAndActionsLayoutArea as Area,
} from "@finstreet/ui/components/pageLayout/Layout/TasksAndActionsLayout";
// TaskGroup wrapper
import { TaskGroup } from "@finstreet/ui/components/patterns/TaskGroup";
// Common utilities
import { routes } from "@/routes";
import { useExtracted } from "next-intl";
import { VStack } from "@styled-system/jsx";
Step-by-Step Reference
- For TaskPanel patterns (shell, status, subtasks, summary), see task-panel.md
- For ActionPanel patterns (modal triggers, link actions), see action-panel.md
- For TaskGroup assembly, see task-group.md
Rules
- Build all TaskPanels before the TaskGroup
TasksAndActionsLayoutgoes INSIDE each TaskPanel, not around the TaskGroup- Each TaskPanel always wraps itself in
TasksAndActionsLayoutwithtasksandactionsareas — even if there are no actions (use<></>as empty placeholder) prefetch={true}andscroll={true}onTaskPanelandSubTaskunless told otherwise- Use
done/activestatus — only useinactiveorwarningif explicitly required - ActionPanels always use
variant="invisible" - ActionPanels are always
"use client"components - Use
useExtractedfromnext-intl(notuseTranslations) - Use arrow function exports:
export const MyComponent = ({}: Props) => {} - Props type is always named
Props