Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ interface IColorRampControlsProps {
selectedMode: ClassificationMode,
numberOfShades: number,
selectedRamp: ColorRampName,
reverseRamp: boolean,
setIsLoading: (isLoading: boolean) => void,
) => void;
showModeRow: boolean;
Expand All @@ -44,6 +45,7 @@ export type ColorRampControlsOptions = {
selectedRamp: ColorRampName;
numberOfShades: number;
selectedMode: ClassificationMode;
reverseRamp: boolean;
};

const isValidNumberOfShades = (value: number) => !isNaN(value) && value > 0;
Expand All @@ -60,6 +62,7 @@ const ColorRampControls: React.FC<IColorRampControlsProps> = ({
useState<ClassificationMode>('equal interval');
const [numberOfShades, setNumberOfShades] = useState<number>(9);
const [isLoading, setIsLoading] = useState<boolean>(false);
const [reverseRamp, setReverseRamp] = useState<boolean>(false);
const [warning, setWarning] = useState<string | null>(null);

useEffect(() => {
Expand Down Expand Up @@ -104,10 +107,12 @@ const ColorRampControls: React.FC<IColorRampControlsProps> = ({
}
}, [selectedRamp, numberOfShades]);
const populateOptions = () => {
const { nClasses, mode, colorRamp } = layerParams.symbologyState ?? {};
const { nClasses, mode, colorRamp, reverseRamp } =
layerParams.symbologyState ?? {};
setNumberOfShades(Number(nClasses ?? 9));
setSelectedMode((mode as ClassificationMode) ?? 'equal interval');
setSelectedRamp((colorRamp as ColorRampName) ?? 'viridis');
setReverseRamp(Boolean(reverseRamp ?? false));
};

return (
Expand All @@ -118,6 +123,8 @@ const ColorRampControls: React.FC<IColorRampControlsProps> = ({
<ColorRampSelector
selectedRamp={selectedRamp}
setSelected={setSelectedRamp}
reverse={reverseRamp}
setReverse={setReverseRamp}
/>
</div>
)}
Expand Down Expand Up @@ -151,6 +158,7 @@ const ColorRampControls: React.FC<IColorRampControlsProps> = ({
selectedMode,
numberOfShades,
selectedRamp,
reverseRamp,
setIsLoading,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,16 @@ import ColorRampSelectorEntry from './ColorRampSelectorEntry';

interface IColorRampSelectorProps {
selectedRamp: ColorRampName;
setSelected: (item: any) => void;
setSelected: React.Dispatch<React.SetStateAction<ColorRampName>>;
reverse: boolean;
setReverse: React.Dispatch<React.SetStateAction<boolean>>;
}

const ColorRampSelector: React.FC<IColorRampSelectorProps> = ({
selectedRamp,
setSelected,
reverse,
setReverse,
}) => {
const containerRef = useRef<HTMLDivElement>(null);
const [isOpen, setIsOpen] = useState(false);
Expand All @@ -42,7 +46,7 @@ const ColorRampSelector: React.FC<IColorRampSelectorProps> = ({
if (colorMaps.length > 0) {
updateCanvas(selectedRamp);
}
}, [selectedRamp, colorMaps]);
}, [selectedRamp, colorMaps, reverse]);

const toggleDropdown = () => {
setIsOpen(!isOpen);
Expand Down Expand Up @@ -84,7 +88,7 @@ const ColorRampSelector: React.FC<IColorRampSelectorProps> = ({
for (let i = 0; i <= 255; i++) {
ctx.beginPath();

const color = ramp[0].colors[i];
const color = reverse ? ramp[0].colors[255 - i] : ramp[0].colors[i];
ctx.fillStyle = color;

ctx.fillRect(i * 2, 0, 2, canvasHeight);
Expand Down Expand Up @@ -127,6 +131,16 @@ const ColorRampSelector: React.FC<IColorRampSelectorProps> = ({
/>
))}
</div>
<div className="jp-gis-symbology-row">
<label className="jp-gis-inline-label">
<input
type="checkbox"
checked={reverse}
onChange={e => setReverse(e.target.checked)}
/>
Reverse Color Ramp
</label>
</div>
</div>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ const SingleBandPseudoColor: React.FC<ISymbologyDialogProps> = ({
? String(colorRampOptionsRef.current.numberOfShades)
: undefined,
mode: colorRampOptionsRef.current?.selectedMode,
reverse: colorRampOptionsRef.current?.reverseRamp,
} as IWebGlLayer['symbologyState'];

if (!isStorySegmentOverride) {
Expand Down Expand Up @@ -301,13 +302,15 @@ const SingleBandPseudoColor: React.FC<ISymbologyDialogProps> = ({
selectedMode: ClassificationMode,
numberOfShades: number,
selectedRamp: ColorRampName,
reverseRamp: boolean,
setIsLoading: (isLoading: boolean) => void,
) => {
// Update layer state with selected options
setColorRampOptions({
selectedRamp,
numberOfShades,
selectedMode,
reverseRamp,
});

let stops: number[] = [];
Expand Down Expand Up @@ -353,6 +356,7 @@ const SingleBandPseudoColor: React.FC<ISymbologyDialogProps> = ({
stops,
selectedRamp,
nClasses,
reverseRamp,
);

setStopRows(valueColorPairs);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ const Categorized: React.FC<ISymbologyTabbedDialogWithAttributesProps> = ({
radius: 5,
});
const manualStyleRef = useLatest(manualStyle);
const [reverseRamp, setReverseRamp] = useState(false);
const selectedAttributeRef = useLatest(selectedAttribute);
const stopRowsRef = useLatest(stopRows);
const colorRampOptionsRef = useLatest(colorRampOptions);
Expand Down Expand Up @@ -116,13 +115,15 @@ const Categorized: React.FC<ISymbologyTabbedDialogWithAttributesProps> = ({
selectedMode: ClassificationMode,
numberOfShades: number,
selectedRamp: ColorRampName,
reverseRamp: boolean,
setIsLoading: (isLoading: boolean) => void,
) => {
setColorRampOptions({
selectedFunction: '',
selectedRamp,
numberOfShades,
selectedMode,
reverseRamp,
});

const stops = Array.from(
Expand Down Expand Up @@ -174,7 +175,7 @@ const Categorized: React.FC<ISymbologyTabbedDialogWithAttributesProps> = ({
value: selectedAttributeRef.current,
colorRamp: colorRampOptionsRef.current?.selectedRamp,
method: symbologyTab,
reverse: reverseRamp,
reverse: colorRampOptionsRef.current?.reverseRamp,
} as IVectorLayer['symbologyState'];

saveSymbology({
Expand Down Expand Up @@ -310,19 +311,6 @@ const Categorized: React.FC<ISymbologyTabbedDialogWithAttributesProps> = ({
)}
</div>

{symbologyTab === 'color' && (
<div className="jp-gis-symbology-row">
<label>
<input
type="checkbox"
checked={reverseRamp}
onChange={e => setReverseRamp(e.target.checked)}
/>
Reverse Color Ramp
</label>
</div>
)}

<div className="jp-gis-layer-symbology-container">
//! only needs symbology state
<ColorRampControls
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ const Graduated: React.FC<ISymbologyTabbedDialogWithAttributesProps> = ({
const [radiusManualStyle, setRadiusManualStyle] = useState({
radius: 5,
});
const [reverseRamp, setReverseRamp] = useState(false);

const selectableAttributeRef = useLatest(selectedAttribute);
const symbologyTabRef = useLatest(symbologyTab);
Expand Down Expand Up @@ -176,7 +175,7 @@ const Graduated: React.FC<ISymbologyTabbedDialogWithAttributesProps> = ({
colorRamp: colorRampOptionsRef.current?.selectedRamp,
nClasses: colorRampOptionsRef.current?.numberOfShades,
mode: colorRampOptionsRef.current?.selectedMode,
reverse: reverseRamp,
reverse: colorRampOptionsRef.current?.reverseRamp,
} as IVectorLayer['symbologyState'];

saveSymbology({
Expand All @@ -202,11 +201,13 @@ const Graduated: React.FC<ISymbologyTabbedDialogWithAttributesProps> = ({
selectedMode: ClassificationMode,
numberOfShades: number,
selectedRamp: ColorRampName,
reverseRamp: boolean,
) => {
setColorRampOptions({
selectedRamp,
numberOfShades,
selectedMode,
reverseRamp,
});

let stops: number[];
Expand Down Expand Up @@ -362,19 +363,6 @@ const Graduated: React.FC<ISymbologyTabbedDialogWithAttributesProps> = ({
)}
</div>

{symbologyTab === 'color' && (
<div className="jp-gis-symbology-row">
<label>
<input
type="checkbox"
checked={reverseRamp}
onChange={e => setReverseRamp(e.target.checked)}
/>
Reverse Color Ramp
</label>
</div>
)}

<ColorRampControls
layerParams={params}
modeOptions={modeOptions}
Expand Down
12 changes: 2 additions & 10 deletions packages/base/src/dialogs/symbology/vector_layer/types/Heatmap.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,18 +105,10 @@ const Heatmap: React.FC<ISymbologyDialogProps> = ({
<ColorRampSelector
selectedRamp={selectedRamp}
setSelected={setSelectedRamp}
reverse={reverseRamp}
setReverse={setReverseRamp}
/>
</div>
<div className="jp-gis-symbology-row">
<label>
<input
type="checkbox"
checked={reverseRamp}
onChange={e => setReverseRamp(e.target.checked)}
/>
Reverse Color Ramp
</label>
</div>
<div className="jp-gis-symbology-row">
<label htmlFor={'vector-value-select'}>Radius:</label>
<input
Expand Down
7 changes: 6 additions & 1 deletion packages/base/style/symbologyDialog.css
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ select option {

.jp-gis-symbology-row label {
font-size: var(--jp-ui-font-size2);
flex: 0 1 20%;
flex: 0 1 auto;
display: inline-flex;
align-items: center;
gap: 0.4rem;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm curious why we need a CSS change for this refactor? I have to jump to a meeting really soon so I didn't have time to check out what this CSS change does :)

}

.jp-gis-symbology-row > .jp-select-wrapper,
Expand Down Expand Up @@ -74,6 +77,8 @@ select option {
display: flex;
flex-direction: column;
gap: 13px;
border-top: 1px solid var(--jp-border-color2);
padding-top: 8px;
}

.jp-gis-stop-container {
Expand Down
Loading