feat(filters): enhance labels and members filter dropdowns
- Added useEffect to fetch labels when the component mounts or projectId changes in LabelsFilterDropdown. - Improved members filter logic to only sync board members when the board task assignees are empty. - Cleaned up redundant checks and optimized dependencies in the members filter dropdown.
This commit is contained in:
@@ -11,7 +11,7 @@ import List from 'antd/es/list';
|
||||
import Space from 'antd/es/space';
|
||||
import { useSearchParams } from 'react-router-dom';
|
||||
|
||||
import { useMemo, useRef, useState } from 'react';
|
||||
import { useMemo, useRef, useState, useEffect } from 'react';
|
||||
import { useAppSelector } from '@/hooks/useAppSelector';
|
||||
import { colors } from '@/styles/colors';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
@@ -36,6 +36,13 @@ const LabelsFilterDropdown = () => {
|
||||
const tab = searchParams.get('tab');
|
||||
const projectView = tab === 'tasks-list' ? 'list' : 'kanban';
|
||||
|
||||
// Fetch labels when component mounts or projectId changes
|
||||
useEffect(() => {
|
||||
if (projectId) {
|
||||
dispatch(fetchLabelsByProject(projectId));
|
||||
}
|
||||
}, [dispatch, projectId]);
|
||||
|
||||
const filteredLabelData = useMemo(() => {
|
||||
if (projectView === 'list') {
|
||||
return labels.filter(label => label.name?.toLowerCase().includes(searchQuery.toLowerCase()));
|
||||
@@ -81,9 +88,6 @@ const LabelsFilterDropdown = () => {
|
||||
setTimeout(() => {
|
||||
labelInputRef.current?.focus();
|
||||
}, 0);
|
||||
if (projectView === 'kanban') {
|
||||
dispatch(setBoardLabels(labels));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -76,7 +76,6 @@ const MembersFilterDropdown = () => {
|
||||
|
||||
const handleSelectedFiltersCount = useCallback(async (memberId: string | undefined, checked: boolean) => {
|
||||
if (!memberId || !projectId) return;
|
||||
if (!memberId || !projectId) return;
|
||||
|
||||
const updateMembers = async (members: Member[], setAction: any, fetchAction: any) => {
|
||||
const updatedMembers = members.map(member =>
|
||||
@@ -142,11 +141,12 @@ const MembersFilterDropdown = () => {
|
||||
const handleMembersDropdownOpen = useCallback((open: boolean) => {
|
||||
if (open) {
|
||||
setTimeout(() => membersInputRef.current?.focus(), 0);
|
||||
if (taskAssignees.length) {
|
||||
// Only sync the members if board members are empty
|
||||
if (projectView === 'kanban' && boardTaskAssignees.length === 0 && taskAssignees.length > 0) {
|
||||
dispatch(setBoardMembers(taskAssignees));
|
||||
}
|
||||
}
|
||||
}, [dispatch, taskAssignees]);
|
||||
}, [dispatch, taskAssignees, boardTaskAssignees, projectView]);
|
||||
|
||||
const buttonStyle = {
|
||||
backgroundColor: selectedCount > 0
|
||||
|
||||
Reference in New Issue
Block a user