diff --git a/packages/base/src/dialogs/symbology/components/color_ramp/CanvasSelectComponent.tsx b/packages/base/src/dialogs/symbology/components/color_ramp/CanvasSelectComponent.tsx index 062c21577..98dc01d57 100644 --- a/packages/base/src/dialogs/symbology/components/color_ramp/CanvasSelectComponent.tsx +++ b/packages/base/src/dialogs/symbology/components/color_ramp/CanvasSelectComponent.tsx @@ -1,7 +1,10 @@ import { Button } from '@jupyterlab/ui-components'; import React, { useEffect, useRef, useState } from 'react'; -import { useColorMapList } from '@/src/dialogs/symbology/colorRampUtils'; +import { + ColorRampName, + useColorMapList, +} from '@/src/dialogs/symbology/colorRampUtils'; import ColorRampEntry from './ColorRampEntry'; export interface IColorMap { @@ -10,7 +13,7 @@ export interface IColorMap { } interface ICanvasSelectComponentProps { - selectedRamp: string; + selectedRamp: ColorRampName; setSelected: (item: any) => void; } diff --git a/packages/base/src/dialogs/symbology/components/color_ramp/ColorRamp.tsx b/packages/base/src/dialogs/symbology/components/color_ramp/ColorRamp.tsx index 70af1d808..4f74a9a26 100644 --- a/packages/base/src/dialogs/symbology/components/color_ramp/ColorRamp.tsx +++ b/packages/base/src/dialogs/symbology/components/color_ramp/ColorRamp.tsx @@ -3,16 +3,18 @@ import { Button } from '@jupyterlab/ui-components'; import React, { useEffect, useState } from 'react'; import { LoadingIcon } from '@/src/shared/components/loading'; +import { ClassificationMode } from '@/src/types'; import CanvasSelectComponent from './CanvasSelectComponent'; import ModeSelectRow from './ModeSelectRow'; +import { ColorRampName } from '../../colorRampUtils'; interface IColorRampProps { - modeOptions: string[]; + modeOptions: ClassificationMode[]; layerParams: IDict; classifyFunc: ( - selectedMode: string, - numberOfShades: string, - selectedRamp: string, + selectedMode: ClassificationMode, + numberOfShades: number, + selectedRamp: ColorRampName, setIsLoading: (isLoading: boolean) => void, ) => void; showModeRow: boolean; @@ -20,11 +22,13 @@ interface IColorRampProps { } export type ColorRampOptions = { - selectedRamp: string; - numberOfShades: string; - selectedMode: string; + selectedRamp: ColorRampName; + numberOfShades: number; + selectedMode: ClassificationMode; }; +const isValidNumberOfShades = (value: number) => !isNaN(value) && value > 0; + const ColorRamp: React.FC = ({ layerParams, modeOptions, @@ -32,28 +36,27 @@ const ColorRamp: React.FC = ({ showModeRow, showRampSelector, }) => { - const [selectedRamp, setSelectedRamp] = useState(''); - const [selectedMode, setSelectedMode] = useState(''); - const [numberOfShades, setNumberOfShades] = useState(''); - const [isLoading, setIsLoading] = useState(false); + const [selectedRamp, setSelectedRamp] = useState('viridis'); + const [selectedMode, setSelectedMode] = + useState('equal interval'); + const [numberOfShades, setNumberOfShades] = useState(9); + const [isLoading, setIsLoading] = useState(false); useEffect(() => { - if (selectedRamp === '' && selectedMode === '' && numberOfShades === '') { + if (layerParams.symbologyState) { populateOptions(); } - }, [layerParams]); + }, [ + layerParams.symbologyState.nClasses, + layerParams.symbologyState.mode, + layerParams.symbologyState.colorRamp, + ]); const populateOptions = () => { - let nClasses, singleBandMode, colorRamp; - - if (layerParams.symbologyState) { - nClasses = layerParams.symbologyState.nClasses; - singleBandMode = layerParams.symbologyState.mode; - colorRamp = layerParams.symbologyState.colorRamp; - } - setNumberOfShades(nClasses ? nClasses : '9'); - setSelectedMode(singleBandMode ? singleBandMode : 'equal interval'); - setSelectedRamp(colorRamp ? colorRamp : 'viridis'); + const { nClasses, mode, colorRamp } = layerParams.symbologyState ?? {}; + setNumberOfShades(nClasses ?? 9); + setSelectedMode((mode as ClassificationMode) ?? 'equal interval'); + setSelectedRamp((colorRamp as ColorRampName) ?? 'viridis'); }; return ( @@ -81,6 +84,7 @@ const ColorRamp: React.FC = ({ ) : (