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:
12
src/app/settings/advanced/page.tsx
Normal file
12
src/app/settings/advanced/page.tsx
Normal 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} />;
|
||||
}
|
||||
12
src/app/settings/general/page.tsx
Normal file
12
src/app/settings/general/page.tsx
Normal 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} />;
|
||||
}
|
||||
18
src/app/settings/integrations/page.tsx
Normal file
18
src/app/settings/integrations/page.tsx
Normal 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}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -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} />;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user