|
|
import React from 'react'; |
|
|
import { useControls, useStoreContext } from 'leva'; |
|
|
import { useDebugUMAPStore } from '../store'; |
|
|
import { getConfig } from '../config/mapConfig.js'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function useLeva({ onResetZoom }) { |
|
|
const configs = useDebugUMAPStore((state) => state.configs); |
|
|
const currentConfigIndex = useDebugUMAPStore((state) => state.currentConfigIndex); |
|
|
const setCurrentConfigIndex = useDebugUMAPStore((state) => state.setCurrentConfigIndex); |
|
|
const useCategoryColors = useDebugUMAPStore((state) => state.useCategoryColors); |
|
|
const setUseCategoryColors = useDebugUMAPStore((state) => state.setUseCategoryColors); |
|
|
const baseGlyphSize = useDebugUMAPStore((state) => state.baseGlyphSize); |
|
|
const setBaseGlyphSize = useDebugUMAPStore((state) => state.setBaseGlyphSize); |
|
|
const darkMode = useDebugUMAPStore((state) => state.darkMode); |
|
|
const setDarkMode = useDebugUMAPStore((state) => state.setDarkMode); |
|
|
const showCentroids = useDebugUMAPStore((state) => state.showCentroids); |
|
|
const setShowCentroids = useDebugUMAPStore((state) => state.setShowCentroids); |
|
|
const resetToDefaults = useDebugUMAPStore((state) => state.resetToDefaults); |
|
|
const saveToLocalStorage = useDebugUMAPStore((state) => state.saveToLocalStorage); |
|
|
|
|
|
|
|
|
const store = useStoreContext(); |
|
|
|
|
|
|
|
|
const controls = useControls({ |
|
|
|
|
|
Configuration: { |
|
|
value: currentConfigIndex, |
|
|
min: 0, |
|
|
max: Math.max(8, configs.length - 1), |
|
|
step: 1 |
|
|
}, |
|
|
|
|
|
|
|
|
'Category Colors': useCategoryColors, |
|
|
|
|
|
|
|
|
'Glyph Size': { |
|
|
value: baseGlyphSize, |
|
|
min: getConfig('glyph.size.min', 0.05), |
|
|
max: getConfig('glyph.size.max', 1.0), |
|
|
step: getConfig('glyph.size.step', 0.05) |
|
|
}, |
|
|
|
|
|
|
|
|
'Dark Mode': darkMode, |
|
|
|
|
|
|
|
|
'Show Centroids': showCentroids, |
|
|
|
|
|
|
|
|
'Reset Zoom': { button: true }, |
|
|
|
|
|
|
|
|
'Reset Defaults': { button: true } |
|
|
}); |
|
|
|
|
|
|
|
|
React.useEffect(() => { |
|
|
if (controls.Configuration !== undefined) { |
|
|
console.log('useLeva: Configuration chang茅e vers', controls.Configuration); |
|
|
setCurrentConfigIndex(controls.Configuration); |
|
|
saveToLocalStorage(); |
|
|
} |
|
|
}, [controls.Configuration, setCurrentConfigIndex, saveToLocalStorage]); |
|
|
|
|
|
React.useEffect(() => { |
|
|
if (controls['Category Colors'] !== undefined) { |
|
|
setUseCategoryColors(controls['Category Colors']); |
|
|
saveToLocalStorage(); |
|
|
} |
|
|
}, [controls['Category Colors'], setUseCategoryColors, saveToLocalStorage]); |
|
|
|
|
|
React.useEffect(() => { |
|
|
if (controls['Glyph Size'] !== undefined) { |
|
|
setBaseGlyphSize(controls['Glyph Size']); |
|
|
saveToLocalStorage(); |
|
|
} |
|
|
}, [controls['Glyph Size'], setBaseGlyphSize, saveToLocalStorage]); |
|
|
|
|
|
React.useEffect(() => { |
|
|
if (controls['Dark Mode'] !== undefined) { |
|
|
setDarkMode(controls['Dark Mode']); |
|
|
saveToLocalStorage(); |
|
|
} |
|
|
}, [controls['Dark Mode'], setDarkMode, saveToLocalStorage]); |
|
|
|
|
|
React.useEffect(() => { |
|
|
if (controls['Show Centroids'] !== undefined) { |
|
|
setShowCentroids(controls['Show Centroids']); |
|
|
saveToLocalStorage(); |
|
|
} |
|
|
}, [controls['Show Centroids'], setShowCentroids, saveToLocalStorage]); |
|
|
|
|
|
React.useEffect(() => { |
|
|
if (controls['Reset Zoom']) { |
|
|
onResetZoom(); |
|
|
} |
|
|
}, [controls['Reset Zoom'], onResetZoom]); |
|
|
|
|
|
React.useEffect(() => { |
|
|
if (controls['Reset Defaults']) { |
|
|
resetToDefaults(); |
|
|
} |
|
|
}, [controls['Reset Defaults'], resetToDefaults]); |
|
|
|
|
|
|
|
|
|
|
|
return {}; |
|
|
} |
|
|
|