diff --git a/src/context/SelectionContext.jsx b/src/context/SelectionContext.jsx index ce38ae9..44fa2f0 100644 --- a/src/context/SelectionContext.jsx +++ b/src/context/SelectionContext.jsx @@ -5,24 +5,27 @@ import { STORAGE_KEYS } from '../constants'; const SelectionContext = createContext(); -export const SelectionProvider = ({ children }) => { - // State - const [selectedSoftware, setSelectedSoftware] = useState([]); - const [selectedConfigs, setSelectedConfigs] = useState([]); - - // Load from localStorage on mount - useEffect(() => { - try { - const saved = localStorage.getItem(STORAGE_KEYS.selections); - if (saved) { - const data = JSON.parse(saved); - setSelectedSoftware(data.software || []); - setSelectedConfigs(data.configs || []); - } - } catch (error) { - console.error('Error loading selections from localStorage:', error); +// Load initial state from localStorage +const loadInitialSelections = () => { + try { + const saved = localStorage.getItem(STORAGE_KEYS.selections); + if (saved) { + const data = JSON.parse(saved); + return { + software: data.software || [], + configs: data.configs || [], + }; } - }, []); + } catch (error) { + console.error('Error loading selections from localStorage:', error); + } + return { software: [], configs: [] }; +}; + +export function SelectionProvider({ children }) { + // State with lazy initialization + const [selectedSoftware, setSelectedSoftware] = useState(() => loadInitialSelections().software); + const [selectedConfigs, setSelectedConfigs] = useState(() => loadInitialSelections().configs); // Save to localStorage on change useEffect(() => { @@ -118,13 +121,16 @@ export const SelectionProvider = ({ children }) => { {children} ); -}; +} + +SelectionProvider.displayName = 'SelectionProvider'; // Custom hook to use the selection context -export const useSelection = () => { +// eslint-disable-next-line react-refresh/only-export-components +export function useSelection() { const context = useContext(SelectionContext); if (!context) { throw new Error('useSelection must be used within SelectionProvider'); } return context; -}; +} diff --git a/src/context/ThemeContext.jsx b/src/context/ThemeContext.jsx index b4fdfee..39afdfd 100644 --- a/src/context/ThemeContext.jsx +++ b/src/context/ThemeContext.jsx @@ -1,8 +1,8 @@ import { createContext, useState, useEffect } from 'react'; -export const ThemeContext = createContext(); +const ThemeContext = createContext(); -export const ThemeProvider = ({ children }) => { +export function ThemeProvider({ children }) { const [isDark, setIsDark] = useState(() => { const saved = localStorage.getItem('theme'); return saved === 'dark'; @@ -27,4 +27,8 @@ export const ThemeProvider = ({ children }) => { {children} ); -}; +} + +ThemeProvider.displayName = 'ThemeProvider'; + +export { ThemeContext }; diff --git a/src/data/software-catalog.js b/src/data/software-catalog.js index e467bdf..006c06e 100644 --- a/src/data/software-catalog.js +++ b/src/data/software-catalog.js @@ -127,7 +127,7 @@ import vulkan from './software/runtimes/vulkan.js'; import onepassword from './software/security/1password.js'; import bitwarden from './software/security/bitwarden.js'; import keepassxc from './software/security/keepassxc.js'; -import lastpass from './software/security-privacy/lastpass.js'; +import lastpass from './software/security/lastpass.js'; import malwarebytes from './software/security/malwarebytes.js'; import nordvpn from './software/security/nordvpn.js'; import protonvpn from './software/security/protonvpn.js'; diff --git a/src/data/software/security-privacy/lastpass.js b/src/data/software/security/lastpass.js similarity index 87% rename from src/data/software/security-privacy/lastpass.js rename to src/data/software/security/lastpass.js index d56d3e7..4878460 100644 --- a/src/data/software/security-privacy/lastpass.js +++ b/src/data/software/security/lastpass.js @@ -2,7 +2,7 @@ export default { "id": "lastpass", "name": "LastPass", "description": "Password manager", - "category": "security-privacy", + "category": "security", "wingetId": "LastPass.LastPass", "icon": "SiLastpass", "iconColor": "#D32D27", diff --git a/src/generators/script-utils.js b/src/generators/script-utils.js index 4c6dd82..571a020 100644 --- a/src/generators/script-utils.js +++ b/src/generators/script-utils.js @@ -1,5 +1,5 @@ -import { softwareCatalog, getSoftwareById } from '../data/software-catalog'; -import { configurations, getConfigById } from '../data/configurations'; +import { getSoftwareById } from '../data/software-catalog'; +import { getConfigById } from '../data/configurations'; import { categories } from '../data/categories'; /**