| | import React from 'react'; |
| | import { useControls } from 'leva'; |
| | import { useDebugUMAPStore } from '../store'; |
| | import { getConfig } from '../config/mapConfig.js'; |
| |
|
| | const getStore = () => useDebugUMAPStore.getState(); |
| |
|
| | |
| | |
| | |
| | |
| | export function useLeva({ onResetZoom }) { |
| | const configs = useDebugUMAPStore((state) => state.configs); |
| | const resetToDefaults = useDebugUMAPStore((state) => state.resetToDefaults); |
| |
|
| | const maxConfig = Math.max(0, configs.length - 1); |
| |
|
| | |
| | const [controls, setLeva] = useControls(() => ({ |
| | Configuration: { |
| | value: Math.min(getStore().currentConfigIndex, maxConfig), |
| | min: 0, |
| | max: maxConfig, |
| | step: 1, |
| | onChange: (v) => { |
| | const s = getStore(); |
| | const upperBound = s.configs.length - 1; |
| | const clamped = Math.max(0, Math.min(v, upperBound)); |
| | s.setCurrentConfigIndex(clamped); |
| | }, |
| | }, |
| | 'Category Colors': { |
| | value: getStore().useCategoryColors, |
| | onChange: (v) => { getStore().setUseCategoryColors(v); }, |
| | }, |
| | 'Glyph Size': { |
| | value: getStore().baseGlyphSize, |
| | min: getConfig('glyph.size.min', 0.05), |
| | max: getConfig('glyph.size.max', 1.0), |
| | step: getConfig('glyph.size.step', 0.05), |
| | onChange: (v) => { getStore().setBaseGlyphSize(v); }, |
| | }, |
| | 'Dark Mode': { |
| | value: getStore().darkMode, |
| | onChange: (v) => { getStore().setDarkMode(v); }, |
| | }, |
| | 'Show Centroids': { |
| | value: getStore().showCentroids, |
| | onChange: (v) => { getStore().setShowCentroids(v); }, |
| | }, |
| | 'Reset Zoom': { button: true }, |
| | 'Reset Defaults': { button: true }, |
| | }), [maxConfig]); |
| |
|
| | const resetZoomFlag = controls['Reset Zoom']; |
| | const resetDefaultsFlag = controls['Reset Defaults']; |
| |
|
| | React.useEffect(() => { |
| | if (resetZoomFlag) onResetZoom(); |
| | }, [resetZoomFlag, onResetZoom]); |
| |
|
| | React.useEffect(() => { |
| | if (resetDefaultsFlag) { |
| | resetToDefaults(); |
| | if (setLeva) { |
| | setLeva({ |
| | Configuration: 0, |
| | 'Category Colors': true, |
| | 'Glyph Size': 0.25, |
| | 'Dark Mode': false, |
| | 'Show Centroids': true, |
| | }); |
| | } |
| | } |
| | }, [resetDefaultsFlag, resetToDefaults, setLeva]); |
| |
|
| | return {}; |
| | } |
| |
|