diff --git a/frontend/src/components/TaskFilterBar.tsx b/frontend/src/components/TaskFilterBar.tsx
index 7684be2..e02ab44 100644
--- a/frontend/src/components/TaskFilterBar.tsx
+++ b/frontend/src/components/TaskFilterBar.tsx
@@ -22,6 +22,7 @@ interface TaskFilterBarProps {
projects: Project[]
categories: Category[]
assignees: TaskAssignee[]
+ currentUserId?: number
isLoading?: boolean
onRefresh?: () => void
}
@@ -32,6 +33,7 @@ export function TaskFilterBar({
projects,
categories,
assignees,
+ currentUserId,
isLoading,
onRefresh,
}: TaskFilterBarProps) {
@@ -98,7 +100,22 @@ export function TaskFilterBar({
{assignees.length > 0 && (
-
+
+ {currentUserId !== undefined && (
+
+ )}
([])
const [assignees, setAssignees] = useState([])
const [filters, setFilters] = useState(DEFAULT_TASK_FILTERS)
+ const [currentUserAssigneeId, setCurrentUserAssigneeId] = useState(null)
const navigate = useNavigate()
const { activeOrg, user } = useAuth()
const debounceRef = useRef | null>(null)
@@ -95,12 +97,38 @@ export function TaskBoardPage() {
useEffect(() => {
if (!activeOrg) return
- setFilters(DEFAULT_TASK_FILTERS)
- setProjects([])
- setAssignees([])
- setCategories([])
- void loadTasks(DEFAULT_TASK_FILTERS)
- categoryService.listByOrganization(activeOrg.id).then(setCategories).catch(() => {})
+
+ const init = async () => {
+ setFilters(DEFAULT_TASK_FILTERS)
+ setProjects([])
+ setAssignees([])
+ setCategories([])
+
+ const [members] = await Promise.all([
+ organizationService.listMembers(activeOrg.id),
+ categoryService.listByOrganization(activeOrg.id).then(setCategories).catch(() => {}),
+ ])
+
+ const assigneesData = members.map((m) => ({
+ id: m.userId,
+ name: m.userName,
+ email: m.userEmail,
+ photo: m.userPhoto ?? null,
+ }))
+ setAssignees(assigneesData)
+
+ const currentMember = members.find((m) => m.userEmail === user?.email)
+ const userId = currentMember?.userId ?? null
+ setCurrentUserAssigneeId(userId)
+
+ const initialFilters = userId
+ ? { ...DEFAULT_TASK_FILTERS, userIds: [userId] }
+ : DEFAULT_TASK_FILTERS
+ setFilters(initialFilters)
+ void loadTasks(initialFilters)
+ }
+
+ void init()
}, [activeOrg])
const handleFiltersChange = (newFilters: TaskFilters) => {
@@ -182,6 +210,7 @@ export function TaskBoardPage() {
projects={projects}
categories={categories}
assignees={assignees}
+ currentUserId={currentUserAssigneeId ?? undefined}
isLoading={isLoading}
onRefresh={() => void loadTasks(filters)}
/>
diff --git a/frontend/src/pages/TaskListPage.tsx b/frontend/src/pages/TaskListPage.tsx
index c50c812..177b58d 100644
--- a/frontend/src/pages/TaskListPage.tsx
+++ b/frontend/src/pages/TaskListPage.tsx
@@ -94,6 +94,7 @@ export function TaskListPage() {
const [categories, setCategories] = useState([])
const [assignees, setAssignees] = useState([])
const [filters, setFilters] = useState(DEFAULT_TASK_FILTERS)
+ const [currentUserAssigneeId, setCurrentUserAssigneeId] = useState(null)
const navigate = useNavigate()
const { activeOrg, user } = useAuth()
const debounceRef = useRef | null>(null)
@@ -126,22 +127,37 @@ export function TaskListPage() {
useEffect(() => {
if (!activeOrg) return
- setFilters(DEFAULT_TASK_FILTERS)
- setCategories([])
- void loadTasks(DEFAULT_TASK_FILTERS)
- categoryService.listByOrganization(activeOrg.id).then(setCategories).catch(() => {})
+ const init = async () => {
+ setFilters(DEFAULT_TASK_FILTERS)
+ setCategories([])
- projectService.listByOrganization(activeOrg.id).then(setProjects).catch(() => {})
+ const [members] = await Promise.all([
+ organizationService.listMembers(activeOrg.id),
+ categoryService.listByOrganization(activeOrg.id).then(setCategories).catch(() => {}),
+ projectService.listByOrganization(activeOrg.id).then(setProjects).catch(() => {}),
+ ])
- organizationService.listMembers(activeOrg.id).then((members) => {
- setAssignees(members.map((m) => ({
+ const assigneesData = members.map((m) => ({
id: m.userId,
name: m.userName,
email: m.userEmail,
photo: m.userPhoto ?? null,
- })))
- }).catch(() => {})
+ }))
+ setAssignees(assigneesData)
+
+ const currentMember = members.find((m) => m.userEmail === user?.email)
+ const userId = currentMember?.userId ?? null
+ setCurrentUserAssigneeId(userId)
+
+ const initialFilters = userId
+ ? { ...DEFAULT_TASK_FILTERS, userIds: [userId] }
+ : DEFAULT_TASK_FILTERS
+ setFilters(initialFilters)
+ void loadTasks(initialFilters)
+ }
+
+ void init()
}, [activeOrg])
const handleFiltersChange = (newFilters: TaskFilters) => {
@@ -193,6 +209,7 @@ export function TaskListPage() {
projects={projects}
categories={categories}
assignees={assignees}
+ currentUserId={currentUserAssigneeId ?? undefined}
isLoading={isLoading}
onRefresh={() => void loadTasks(filters)}
/>