feat: update settings page and theme context for user preferences

- Replaced `SettingsPageClient` with `SettingsIndexPageClient` to fetch and display user preferences on the settings page.
- Integrated `userPreferencesService` to retrieve all preferences asynchronously, enhancing data handling.
- Refactored theme management in `ThemeContext` to use `updateViewPreferences` for saving theme changes, improving error handling and user feedback.
- Marked the task for creating dedicated config sub-pages as complete in TODO.md.
This commit is contained in:
Julien Froidefond
2025-09-18 13:50:49 +02:00
parent 93e72013f9
commit 8ce1eef6ae
10 changed files with 720 additions and 9 deletions

View File

@@ -0,0 +1,12 @@
import { userPreferencesService } from '@/services/user-preferences';
import { AdvancedSettingsPageClient } from '@/components/settings/AdvancedSettingsPageClient';
// Force dynamic rendering for real-time data
export const dynamic = 'force-dynamic';
export default async function AdvancedSettingsPage() {
// Fetch data server-side
const preferences = await userPreferencesService.getAllPreferences();
return <AdvancedSettingsPageClient initialPreferences={preferences} />;
}

View File

@@ -0,0 +1,12 @@
import { userPreferencesService } from '@/services/user-preferences';
import { GeneralSettingsPageClient } from '@/components/settings/GeneralSettingsPageClient';
// Force dynamic rendering for real-time data
export const dynamic = 'force-dynamic';
export default async function GeneralSettingsPage() {
// Fetch data server-side
const preferences = await userPreferencesService.getAllPreferences();
return <GeneralSettingsPageClient initialPreferences={preferences} />;
}

View File

@@ -0,0 +1,18 @@
import { userPreferencesService } from '@/services/user-preferences';
import { IntegrationsSettingsPageClient } from '@/components/settings/IntegrationsSettingsPageClient';
// Force dynamic rendering for real-time data
export const dynamic = 'force-dynamic';
export default async function IntegrationsSettingsPage() {
// Fetch data server-side
const preferences = await userPreferencesService.getAllPreferences();
const jiraConfig = await userPreferencesService.getJiraConfig();
return (
<IntegrationsSettingsPageClient
initialPreferences={preferences}
initialJiraConfig={jiraConfig}
/>
);
}

View File

@@ -1,8 +1,12 @@
import { SettingsPageClient } from '@/components/settings/SettingsPageClient';
import { userPreferencesService } from '@/services/user-preferences';
import { SettingsIndexPageClient } from '@/components/settings/SettingsIndexPageClient';
// Force dynamic rendering (no static generation)
export const dynamic = 'force-dynamic';
export default async function SettingsPage() {
return <SettingsPageClient />;
// Fetch basic data for the index page
const preferences = await userPreferencesService.getAllPreferences();
return <SettingsIndexPageClient initialPreferences={preferences} />;
}

View File

@@ -1,7 +1,7 @@
'use client';
import { createContext, useContext, useEffect, useState, ReactNode } from 'react';
import { userPreferencesClient } from '@/clients/user-preferences-client';
import { updateViewPreferences } from '@/actions/preferences';
type Theme = 'light' | 'dark';
@@ -38,11 +38,14 @@ export function ThemeProvider({ children, initialTheme = 'dark' }: ThemeProvider
const newTheme = theme === 'dark' ? 'light' : 'dark';
setThemeState(newTheme);
// Sauvegarder en base de façon asynchrone via le client
// Sauvegarder en base de façon asynchrone via server action
try {
await userPreferencesClient.updateViewPreferences({
const result = await updateViewPreferences({
theme: newTheme
});
if (!result.success) {
console.error('Erreur lors de la sauvegarde du thème:', result.error);
}
} catch (error) {
console.error('Erreur lors de la sauvegarde du thème:', error);
}
@@ -51,11 +54,14 @@ export function ThemeProvider({ children, initialTheme = 'dark' }: ThemeProvider
const setTheme = async (newTheme: Theme) => {
setThemeState(newTheme);
// Sauvegarder en base de façon asynchrone via le client
// Sauvegarder en base de façon asynchrone via server action
try {
await userPreferencesClient.updateViewPreferences({
const result = await updateViewPreferences({
theme: newTheme
});
if (!result.success) {
console.error('Erreur lors de la sauvegarde du thème:', result.error);
}
} catch (error) {
console.error('Erreur lors de la sauvegarde du thème:', error);
}