Skip to content

Commit

Permalink
feat(layer-selector): add optional opacity slider
Browse files Browse the repository at this point in the history
This is a request from WFRC (agrc/wfrc-rtp-projects#64).
  • Loading branch information
stdavis committed Aug 22, 2022
1 parent d19a316 commit b9ee8cf
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 9 deletions.
35 changes: 32 additions & 3 deletions packages/layer-selector/src/LayerSelector.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,16 @@ const LayerSelector = (props) => {
const [managedLayers, setManagedLayers] = useState({});
const selectorNode = useRef();

const [opacity, setOpacity] = useState(1);
useEffect(() => {
for (const layerId in managedLayers) {
const managedLayer = managedLayers[layerId];
if (managedLayer.layer) {
managedLayer.layer.opacity = opacity;
}
}
}, [managedLayers, opacity]);

useEffect(() => {
const managedLayersDraft = { ...managedLayers };
const layerItems = layers.baseLayers.concat(layers.overlays);
Expand All @@ -204,7 +214,7 @@ const LayerSelector = (props) => {
layerList = props.view.map.layers;
break;
default:
break;
throw new Error(`unknown layerType: ${layerItem.layerType}`);
}

if (layerItem.selected === false) {
Expand Down Expand Up @@ -374,7 +384,7 @@ const LayerSelector = (props) => {
) || [];

// set visibility of linked layers to match
if (defaultSelection.linked && defaultSelection.linked.length > 0) {
if (defaultSelection?.linked && defaultSelection.linked.length > 0) {
overlays.forEach((layer) => {
if (defaultSelection.linked.includes(layer.id)) {
layer.selected = true;
Expand Down Expand Up @@ -456,7 +466,9 @@ const LayerSelector = (props) => {
key={index}
/>
))}
<hr className="layer-selector-separator" />
{layers.overlays.length ? (
<hr className="layer-selector-separator" />
) : null}
{layers.overlays.map((item) => (
<LayerSelectorItem
id={item.name || item.id || 'unknown'}
Expand All @@ -466,6 +478,21 @@ const LayerSelector = (props) => {
key={item.id || item}
/>
))}
{props.showOpacitySlider ? (
<>
<hr className="layer-selector-separator" />
<input
type="range"
min="0"
max="100"
step="1"
value={opacity * 100}
onChange={(event) =>
setOpacity(parseFloat(event.target.value) / 100.0)
}
/>
</>
) : null}
</div>
</ConditionalWrapper>
</div>
Expand Down Expand Up @@ -538,11 +565,13 @@ LayerSelector.propTypes = {
makeExpandable: PropTypes.bool,
layerType: PropTypes.string,
id: PropTypes.string,
showOpacitySlider: PropTypes.bool,
};

LayerSelector.defaultProps = {
makeExpandable: true,
position: 'top-right',
showOpacitySlider: false,
};

LayerSelectorItem.propTypes = {
Expand Down
8 changes: 7 additions & 1 deletion packages/layer-selector/src/LayerSelector.stories.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ export default {
component: LayerSelector,
};
const mapViewMock = {
map: {},
map: {
layers: [],
basemap: {
layers: [],
},
},
when: () => {},
ui: {
add: () => {},
Expand All @@ -27,5 +32,6 @@ export const withoutExpandableContainer = () => (
view={mapViewMock}
quadWord="my-fake-quad-word"
makeExpandable={false}
overlays={['Address Points']}
></LayerSelector>
);
15 changes: 13 additions & 2 deletions packages/layer-selector/src/LayerSelectorWithMap.stories.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,14 @@ export default {
component: LayerSelector,
};

const WithMap = ({ center, zoom, scale, baseLayers, overlays }) => {
const WithMap = ({
center,
zoom,
scale,
baseLayers,
overlays,
showOpacitySlider,
}) => {
const mapDiv = useRef();
const [layerSelectorOptions, setLayerSelectorOptions] = useState();

Expand All @@ -39,11 +46,12 @@ const WithMap = ({ center, zoom, scale, baseLayers, overlays }) => {
: ['Hybrid', 'Lite', 'Terrain', 'Topo', 'Color IR'],
overlays: overlays ? overlays : ['Address Points'],
position: 'top-right',
showOpacitySlider,
});
};

initMap();
}, [zoom, center, scale, baseLayers, overlays]);
}, [zoom, center, scale, baseLayers, overlays, showOpacitySlider]);

return (
<div
Expand All @@ -62,6 +70,7 @@ WithMap.propTypes = {
scale: PropTypes.number,
baseLayers: PropTypes.array,
overlays: PropTypes.array,
showOpacitySlider: PropTypes.bool,
};

export const zoom = () => <WithMap zoom={6} />;
Expand Down Expand Up @@ -159,3 +168,5 @@ export const landOwnership = () => {

return <WithMap {...landOwnershipOptions} />;
};

export const opacitySlider = () => <WithMap showOpacitySlider zoom={6} />;
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,6 @@ exports[`LayerSelector tests > LayerSelector snapshot 1`] = `
Color IR
</label>
</div>
<hr
class="layer-selector-separator"
/>
</div>
</form>
</div>
Expand Down

0 comments on commit b9ee8cf

Please sign in to comment.