feat: add column visibility toggle to Kanban and Swimlanes boards
- Integrated `useColumnVisibility` hook for managing column visibility states. - Added `ColumnVisibilityToggle` component to both `KanbanBoard` and `SwimlanesBoard` for user control over visible columns. - Updated rendering logic to filter and display only visible columns, enhancing user experience and task organization.
This commit is contained in:
35
hooks/useColumnVisibility.ts
Normal file
35
hooks/useColumnVisibility.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { useState } from 'react';
|
||||
import { TaskStatus } from '@/lib/types';
|
||||
|
||||
export function useColumnVisibility(initialHidden: TaskStatus[] = []) {
|
||||
const [hiddenStatuses, setHiddenStatuses] = useState<Set<TaskStatus>>(
|
||||
new Set(initialHidden)
|
||||
);
|
||||
|
||||
const toggleStatusVisibility = (status: TaskStatus) => {
|
||||
setHiddenStatuses(prev => {
|
||||
const newSet = new Set(prev);
|
||||
if (newSet.has(status)) {
|
||||
newSet.delete(status);
|
||||
} else {
|
||||
newSet.add(status);
|
||||
}
|
||||
return newSet;
|
||||
});
|
||||
};
|
||||
|
||||
const getVisibleStatuses = <T extends { id: TaskStatus }>(statuses: T[]): T[] => {
|
||||
return statuses.filter(status => !hiddenStatuses.has(status.id));
|
||||
};
|
||||
|
||||
const isStatusVisible = (status: TaskStatus): boolean => {
|
||||
return !hiddenStatuses.has(status);
|
||||
};
|
||||
|
||||
return {
|
||||
hiddenStatuses,
|
||||
toggleStatusVisibility,
|
||||
getVisibleStatuses,
|
||||
isStatusVisible
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user