refactor: userpreferences are now in the DB
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
'use client';
|
||||
|
||||
import { createContext, useContext, ReactNode, useState, useMemo, useEffect } from 'react';
|
||||
import { createContext, useContext, ReactNode, useMemo } from 'react';
|
||||
import { useTasks } from '@/hooks/useTasks';
|
||||
import { useTags } from '@/hooks/useTags';
|
||||
import { userPreferencesService } from '@/services/user-preferences';
|
||||
import { useUserPreferences } from './UserPreferencesContext';
|
||||
import { Task, Tag, TaskStats } from '@/lib/types';
|
||||
import { CreateTaskData, UpdateTaskData, TaskFilters } from '@/clients/tasks-client';
|
||||
import { KanbanFilters } from '@/components/kanban/KanbanFilters';
|
||||
@@ -49,48 +49,42 @@ export function TasksProvider({ children, initialTasks, initialStats, initialTag
|
||||
);
|
||||
|
||||
const { tags, loading: tagsLoading, error: tagsError } = useTags(initialTags);
|
||||
|
||||
// État des filtres Kanban avec persistance
|
||||
const [kanbanFilters, setKanbanFilters] = useState<KanbanFilters>({});
|
||||
const { preferences, updateKanbanFilters, updateViewPreferences } = useUserPreferences();
|
||||
|
||||
// Charger les préférences au montage
|
||||
useEffect(() => {
|
||||
const savedFilters = userPreferencesService.getKanbanFilters();
|
||||
const savedViewPrefs = userPreferencesService.getViewPreferences();
|
||||
|
||||
setKanbanFilters({
|
||||
search: savedFilters.search,
|
||||
tags: savedFilters.tags,
|
||||
priorities: savedFilters.priorities,
|
||||
showCompleted: savedFilters.showCompleted,
|
||||
sortBy: savedFilters.sortBy || createSortKey('priority', 'desc'), // Tri par défaut
|
||||
compactView: savedViewPrefs.compactView,
|
||||
swimlanesByTags: savedViewPrefs.swimlanesByTags,
|
||||
swimlanesMode: savedViewPrefs.swimlanesMode || 'tags'
|
||||
});
|
||||
}, []);
|
||||
// Construire l'objet KanbanFilters à partir des préférences
|
||||
const kanbanFilters: KanbanFilters = useMemo(() => ({
|
||||
search: preferences.kanbanFilters.search || '',
|
||||
tags: preferences.kanbanFilters.tags || [],
|
||||
priorities: preferences.kanbanFilters.priorities || [],
|
||||
showCompleted: preferences.kanbanFilters.showCompleted ?? true,
|
||||
sortBy: preferences.kanbanFilters.sortBy || createSortKey('priority', 'desc'),
|
||||
compactView: preferences.viewPreferences.compactView || false,
|
||||
swimlanesByTags: preferences.viewPreferences.swimlanesByTags || false,
|
||||
swimlanesMode: preferences.viewPreferences.swimlanesMode || 'tags'
|
||||
}), [preferences]);
|
||||
|
||||
// Fonction pour mettre à jour les filtres avec persistance
|
||||
const updateKanbanFilters = (newFilters: KanbanFilters) => {
|
||||
setKanbanFilters(newFilters);
|
||||
|
||||
// Sauvegarder les filtres
|
||||
userPreferencesService.saveKanbanFilters({
|
||||
const setKanbanFilters = async (newFilters: KanbanFilters) => {
|
||||
// Séparer les vrais filtres des préférences de vue
|
||||
const kanbanFilterUpdates = {
|
||||
search: newFilters.search,
|
||||
tags: newFilters.tags,
|
||||
priorities: newFilters.priorities,
|
||||
showCompleted: newFilters.showCompleted,
|
||||
sortBy: newFilters.sortBy
|
||||
});
|
||||
};
|
||||
|
||||
// Sauvegarder les préférences de vue
|
||||
userPreferencesService.saveViewPreferences({
|
||||
compactView: newFilters.compactView || false,
|
||||
swimlanesByTags: newFilters.swimlanesByTags || false,
|
||||
swimlanesMode: newFilters.swimlanesMode || 'tags',
|
||||
showObjectives: true, // Toujours visible pour l'instant
|
||||
showFilters: true // Toujours visible pour l'instant
|
||||
});
|
||||
const viewPreferenceUpdates = {
|
||||
compactView: newFilters.compactView,
|
||||
swimlanesByTags: newFilters.swimlanesByTags,
|
||||
swimlanesMode: newFilters.swimlanesMode
|
||||
};
|
||||
|
||||
// Mettre à jour via UserPreferencesContext
|
||||
await Promise.all([
|
||||
updateKanbanFilters(kanbanFilterUpdates),
|
||||
updateViewPreferences(viewPreferenceUpdates)
|
||||
]);
|
||||
};
|
||||
|
||||
// Séparer les tâches épinglées (objectifs) des autres et les trier
|
||||
@@ -176,7 +170,7 @@ export function TasksProvider({ children, initialTasks, initialStats, initialTag
|
||||
tagsLoading,
|
||||
tagsError,
|
||||
kanbanFilters,
|
||||
setKanbanFilters: updateKanbanFilters,
|
||||
setKanbanFilters,
|
||||
filteredTasks,
|
||||
pinnedTasks
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user