Skip to content

Robust handling of the legend/icon #63

@longshuicy

Description

@longshuicy

Cannot read properties of undefined (reading 'colormap')
TypeError: Cannot read properties of undefined (reading 'colormap')
at eval (webpack-internal:///./node_modules/@ncsa/geo-explorer/dist/explore/Sidebar/MapLayers/LegendIcon/RasterLegendIcon.js:22:307)
at updateMemo (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:16427:19)
at Object.useMemo (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:17067:16)
at useMemo (webpack-internal:///./node_modules/react/cjs/react.development.js:1651:21)
at RasterLegendIcon (webpack-internal:///./node_modules/@ncsa/geo-explorer/dist/explore/Sidebar/MapLayers/LegendIcon/RasterLegendIcon.js:20:68)
at renderWithHooks (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:15486:18)
at updateFunctionComponent (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:19612:20)
at beginWork (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:21635:16)
at HTMLUnknownElement.callCallback (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:4164:14)
at Object.invokeGuardedCallbackDev (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:4213:16)

In some cases, the legend rendered for a dataset does not match the actual layer type. This is likely due to issues on the GeoServer side. For example, the legend response may look like this, but this is a "raster layer" in fact

{
  "Legend": [{
    "layerName": "642c31bcf27db66801023a2f",
    "title": "642c31bcf27db66801023a2f",
    "rules": [{
      "name": "Grass",
      "abstract": "Grass style that uses a texture",
      "symbolizers": [{
        "Polygon": {
          "stroke": "#FF0000",
          "stroke-width": "1",
          "stroke-opacity": "1",
          "stroke-linecap": "butt",
          "stroke-linejoin": "miter",
          "graphic-fill": {
            "url": "https://dev.in-core.org/geoserver/styles/grass_fill.png",
            "opacity": "1.0",
            "rotation": "0.0",
            "graphics": [{
              "external-graphic-url": "https://dev.in-core.org/geoserver/styles/grass_fill.png",
              "external-graphic-type": "image/png"
            }]
          }
        }
      }]
    }]
  }]
}

This breaks the expected legend rendering, especially for raster layers where a colorMap is expected but not provided.
The legend rendering logic should be made more robust that can fall back to a default gray placeholder.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions