Memoize Settings

This commit is contained in:
2024-10-07 19:23:15 +02:00
parent 9bad569ca3
commit af3b8ab3de
3 changed files with 31 additions and 27 deletions

View File

@@ -44,8 +44,6 @@ const ContentView = ({
); );
} }
console.log('ContentView content', content);
return activeTab === 'source' ? ( return activeTab === 'source' ? (
<Editor <Editor
content={content} content={content}

View File

@@ -1,33 +1,27 @@
import React from 'react'; import React, { useMemo } from 'react';
import { Tree } from '@geist-ui/core'; import { Tree } from '@geist-ui/core';
import { File, Folder, Image } from '@geist-ui/icons'; import { File, Folder, Image } from '@geist-ui/icons';
import { isImageFile } from '../utils/fileHelpers'; import { isImageFile } from '../utils/fileHelpers';
const FileTree = ({ files, selectedFile, handleFileSelect }) => { const FileTree = ({ files, handleFileSelect }) => {
if (files.length === 0) { if (files.length === 0) {
return <div>No files to display</div>; return <div>No files to display</div>;
} }
const renderLabel = (node) => { const renderIcon = useMemo(
const path = node.extra; () =>
return ( ({ type, name }) => {
<span style={{ color: path === selectedFile ? '#0070f3' : 'inherit' }}>
{node.name}
</span>
);
};
const renderIcon = ({ type, name }) => {
if (type === 'directory') return <Folder />; if (type === 'directory') return <Folder />;
return isImageFile(name) ? <Image /> : <File />; return isImageFile(name) ? <Image /> : <File />;
}; },
[]
);
return ( return (
<Tree <Tree
value={files} value={files}
onClick={(filePath) => handleFileSelect(filePath)} onClick={(filePath) => handleFileSelect(filePath)}
renderIcon={renderIcon} renderIcon={renderIcon}
renderLabel={renderLabel}
/> />
); );
}; };

View File

@@ -1,12 +1,16 @@
import React, { createContext, useState, useContext, useEffect } from 'react'; import React, {
createContext,
useState,
useContext,
useEffect,
useMemo,
} from 'react';
import { fetchUserSettings, saveUserSettings } from '../services/api'; import { fetchUserSettings, saveUserSettings } from '../services/api';
import { DEFAULT_SETTINGS } from '../utils/constants'; import { DEFAULT_SETTINGS } from '../utils/constants';
const SettingsContext = createContext(); const SettingsContext = createContext();
export const useSettings = () => { export const useSettings = () => useContext(SettingsContext);
return useContext(SettingsContext);
};
export const SettingsProvider = ({ children }) => { export const SettingsProvider = ({ children }) => {
const [settings, setSettings] = useState(DEFAULT_SETTINGS); const [settings, setSettings] = useState(DEFAULT_SETTINGS);
@@ -15,7 +19,7 @@ export const SettingsProvider = ({ children }) => {
useEffect(() => { useEffect(() => {
const loadSettings = async () => { const loadSettings = async () => {
try { try {
const userSettings = await fetchUserSettings(1); // Assuming user ID 1 for now const userSettings = await fetchUserSettings(1);
setSettings(userSettings.settings); setSettings(userSettings.settings);
} catch (error) { } catch (error) {
console.error('Failed to load user settings:', error); console.error('Failed to load user settings:', error);
@@ -30,7 +34,7 @@ export const SettingsProvider = ({ children }) => {
const updateSettings = async (newSettings) => { const updateSettings = async (newSettings) => {
try { try {
await saveUserSettings({ await saveUserSettings({
userId: 1, // Assuming user ID 1 for now userId: 1,
settings: newSettings, settings: newSettings,
}); });
setSettings(newSettings); setSettings(newSettings);
@@ -47,10 +51,18 @@ export const SettingsProvider = ({ children }) => {
})); }));
}; };
const contextValue = useMemo(
() => ({
settings,
updateSettings,
updateTheme,
loading,
}),
[settings, loading]
);
return ( return (
<SettingsContext.Provider <SettingsContext.Provider value={contextValue}>
value={{ settings, updateSettings, updateTheme, loading }}
>
{children} {children}
</SettingsContext.Provider> </SettingsContext.Provider>
); );