X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhooks%2Fsnes.js;fp=resources%2Fjs%2Fhooks%2Fsnes.js;h=57bea3a333805a9530a5b367505cb1fdc1aa3268;hb=04af60ad0cd937639cf5e1a0a8d023d9c1eea152;hp=05e84b2e496d488452a6e53fcfbc32e553cae1f2;hpb=007c6b4b13a274c0396bbffcfa45fc3a15dfa6f7;p=alttp.git diff --git a/resources/js/hooks/snes.js b/resources/js/hooks/snes.js index 05e84b2..57bea3a 100644 --- a/resources/js/hooks/snes.js +++ b/resources/js/hooks/snes.js @@ -1,6 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; +import SettingsDialog from '../components/snes/SettingsDialog'; import SNESSocket from '../helpers/SNESSocket'; const context = React.createContext({}); @@ -9,6 +10,7 @@ export const useSNES = () => React.useContext(context); export const SNESProvider = ({ children }) => { const [enabled, setEnabled] = React.useState(false); + const [showSettingsDialog, setShowSettingsDialog] = React.useState(false); const sock = React.useRef(null); @@ -104,6 +106,23 @@ export const SNESProvider = ({ children }) => { }); }, []); + const openSettings = React.useCallback(() => { + setShowSettingsDialog(true); + }, []); + + const closeSettings = React.useCallback(() => { + setShowSettingsDialog(false); + }, []); + + const saveSettings = React.useCallback((values) => { + setSettings(s => { + const newSettings = { ...s, ...values }; + localStorage.setItem('snes.settings', JSON.stringify(newSettings)); + return newSettings; + }); + setShowSettingsDialog(false); + }, []); + React.useEffect(() => { const savedSettings = localStorage.getItem('snes.settings'); if (savedSettings) { @@ -112,11 +131,18 @@ export const SNESProvider = ({ children }) => { }, []); const value = React.useMemo(() => { - return { disable, enable, enabled, settings, sock, status }; - }, [disable, enable, enabled, settings, sock, status]); + return { disable, enable, enabled, openSettings, settings, sock, status }; + }, [disable, enable, enabled, openSettings, settings, sock, status]); return {children} + ; };