Skip to content

feat(gfi): migrate plugin#447

Open
oeninghe-dataport wants to merge 33 commits intonextfrom
vue3/migrate-plugin-gfi
Open

feat(gfi): migrate plugin#447
oeninghe-dataport wants to merge 33 commits intonextfrom
vue3/migrate-plugin-gfi

Conversation

@oeninghe-dataport
Copy link
Copy Markdown
Collaborator

Summary

Migrate the GFI plugin.

Instructions for local reproduction and review

  • Open snowbox.
  • Click on a marker.
  • See the result.

Additional hints

  • The utils requestGfi* were migrated as-is and do not need to be reviewed therefore.

Relevant tickets, issues, et cetera

Closes #368

@oeninghe-dataport oeninghe-dataport added this to the POLAR@3 milestone Jan 8, 2026
@oeninghe-dataport oeninghe-dataport self-assigned this Jan 8, 2026
@oeninghe-dataport oeninghe-dataport added the refactor Refactoring of previous code label Jan 8, 2026
@oeninghe-dataport oeninghe-dataport linked an issue Jan 12, 2026 that may be closed by this pull request
@oeninghe-dataport oeninghe-dataport force-pushed the vue3/migrate-plugin-gfi branch 3 times, most recently from 58e73f6 to f941649 Compare January 16, 2026 13:12
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jan 23, 2026

PR Preview Action v1.8.0

QR code for preview link

🚀 View preview at
https://Dataport.github.io/polar/pr-preview/pr-447/

Built to branch gh-pages at 2026-04-21 16:50 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

@oeninghe-dataport oeninghe-dataport marked this pull request as ready for review February 17, 2026 16:02
@dopenguin dopenguin removed the request for review from warm-coolguy February 19, 2026 09:46
# Conflicts:
#	examples/snowbox/services.js
Copy link
Copy Markdown
Member

@dopenguin dopenguin left a comment

Choose a reason for hiding this comment

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

  • Please add an example to iceberg; this maybe should include an example with a layer where the feature list is not being used
  • There should be no horizontal scrollbar if no features are available Image
  • Some things are missing / quite different with the featureList; some parts are connections with the markers feature. This includes:
    • When hovering an element in the feature list, the feature is highlighted in the map with the hover style
    • When hovering an element in the map, the feature is highlighted in the feature list (previously green); when hovering a clustered feature, all features that are part of the cluster are highlighted
    • If I select a feature in the map, it is selected in the feature list
    • If I select a feature in the feature list, the corresponding marker gets the selected style; currently, a yellow dot is being displayed
    • If I select a feature in the feature list, the map should be centered on that feature
    • If a feature is not selectable because of the configured isSelectable function, it is not being shown in the feature list

The list may not be complete, so please take a look at Meldemichel regarding the various things mentioned above.

I'll be taking a look at the components and stores once you've tackled these things.

🏓 @oeninghe-dataport

Comment thread src/plugins/gfi/utils/requestGfiWfs.ts Outdated
Comment thread src/plugins/gfi/utils/requestGfiWfs.ts
Comment thread src/plugins/gfi/utils/requestGfiWms.ts Outdated
const features: Feature[] = []
let feature: Feature | undefined

/* TODO: Format supposedly looks like this – is this a standard or arbitrary?
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are we able to answer this? Seems like a good point to maybe get rid of this comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Reading the current WMS spec, I could not find this format. However, this format may be specified in another way; or may at least be default for some implementations.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Unfortunate! Please update the comment with your acquired knowledge.

Comment thread src/core/stores/main.ts
Comment on lines +83 to +86
function getLayer(layerId: string) {
return map.value.getAllLayers().find((layer) => layer.get('id') === layerId)
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

There are 4 instances where we currently use coreStore.map.getLayers().getArray().find(...) where this action could also be used.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Those 4 places are utils, and utils should not use stores (this would make unit tests harder, although we don't write them at the moment).

I also know that this rule is already violated in some utils, but I don't want to introduce more.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Then that rather sounds like this action should become a utility function so it can be used across the project.

Comment thread src/plugins/geoLocation/types.ts
Comment thread examples/snowbox/index.js Outdated
Comment thread src/locales.ts Outdated
Comment thread src/locales.ts Outdated
Comment thread src/locales.ts Outdated
dopenguin and others added 5 commits February 23, 2026 19:56
Co-authored-by: Pascal Röhling <73653210+dopenguin@users.noreply.github.com>
Co-authored-by: Pascal Röhling <73653210+dopenguin@users.noreply.github.com>
Co-authored-by: Pascal Röhling <73653210+dopenguin@users.noreply.github.com>
Co-authored-by: Pascal Röhling <73653210+dopenguin@users.noreply.github.com>
@dopenguin
Copy link
Copy Markdown
Member

@oeninghe-dataport pls @ me once you've tackled all the things!

@oeninghe-dataport
Copy link
Copy Markdown
Collaborator Author

oeninghe-dataport commented Apr 16, 2026

  • When hovering an element in the feature list, the feature is highlighted in the map with the hover style
  • When hovering an element in the map, the feature is highlighted in the feature list (previously green); when hovering a clustered feature, all features that are part of the cluster are highlighted

For the hovering problems, this should be fixed with 9f25413.
As your expected behaviour depends on bindWithCoreHoverSelect, I enabled this for the snowbox w/ 4dfe6af.

@oeninghe-dataport
Copy link
Copy Markdown
Collaborator Author

  • There should be no horizontal scrollbar if no features are available Image

875a35c

@oeninghe-dataport
Copy link
Copy Markdown
Collaborator Author

  • If I select a feature in the map, it is selected in the feature list
  • If I select a feature in the feature list, the corresponding marker gets the selected style; currently, a yellow dot is being displayed
  • If I select a feature in the feature list, the map should be centered on that feature

ec689f1, a6e5698

@oeninghe-dataport
Copy link
Copy Markdown
Collaborator Author

  • Please add an example to iceberg; this maybe should include an example with a layer where the feature list is not being used

3271a30

Feature list is not used, and you can choose between directSelect, directSelect + multiSelect, and coordinateSource from pins plugin.

@oeninghe-dataport
Copy link
Copy Markdown
Collaborator Author

I think I've addressed all the points now.

🏓 @dopenguin

Copy link
Copy Markdown
Member

@dopenguin dopenguin left a comment

Choose a reason for hiding this comment

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

  • The feature list keeps telling me that "There are no features in the current view." if I initially opened it, then activated the MML layer and then opened the feature list again. It also doesn't update if the layer is active and the features take a second to update. I need to pan the map or zoom to then have an update.
  • Only one feature is highlighted instead of all of the other features in a cluster. See the screenshot below how it is supposed to be implemented.
    Image
  • The features should also be highlighted if I navigate the feature list with a keyboard.
  • The horizontal scrollbar in iceberg seems like something that should not be there.
  • Like I mentioned in #447 (review), features that are not determined selectable should not be visible in the feature list
    Bildschirmfoto 2026-04-27 um 14 28 31
  • A lot of the old implementation has not been removed yet. What is the reason behind that?
  • An implementation like setupZoomListeners seems to be missing. IIRC this was needed so the correct features stay selected when zooming in and out, which is no longer the case as seen below.
    selection
  • Please add this plugin to src/client.ts

🏓 @oeninghe-dataport

Comment thread src/core/stores/index.ts
Comment on lines +38 to 41
* Read or modify center coordinate of the map.
*
* @alpha
* @readonly
*/
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I didn't find any instance where it is needed to update the center outside the core. Is this added in the anticipation of that change?

Comment thread src/core/types/plugin.ts
Comment on lines +53 to +57
/**
* Should the component be visible at all.
*
* @defaultValue `false`
*/
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This parameter is also only relevant for layout: 'nineRegions'.

However, this may become an issue when using GFI as that plugin may very well be hidden to only display the information in an embedding system.

Comment thread src/core/types/plugin.ts
*
* @defaultValue `'independent'`
*/
renderType?: 'independent' | 'iconMenu' | 'footer'
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
renderType?: 'independent' | 'iconMenu' | 'footer'
renderType?: 'independent' | 'iconMenu'

'footer' can only be used by Attributions

*
* @param map - Map
* @param feature - Feature to select
* @param centerOnFeature - Should the map center on the feature?
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
* @param centerOnFeature - Should the map center on the feature?
* @param centerOnFeature - Whether the map should center on the feature

Comment thread src/lib/getRefStore.ts
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Might be interesting to rename this to "useRefStore" and move it to the composables


<style scoped>
#polar-card-gfi {
width: 12em;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does KERN have a usable variable? Other than that, rem is to be preferred over em.

Also, this seems redundant if the plugin is added by the iconMenu

id="polar-card-gfi"
:class="{
standard: coreStore.layout === 'standard',
'nine-regions': coreStore.layout === 'nineRegions',
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Class does not seem to be used.

Comment on lines +12 to +31
<button
v-if="gfiStore.featureIndex > 0"
class="kern-btn kern-btn--block kern-btn--secondary"
@click="gfiStore.featureIndex--"
>
<span class="kern-icon kern-icon--arrow-back" aria-hidden="true" />
<span class="kern-label">
{{ $t(($) => $.switch.previous, { ns: 'gfi' }) }}
</span>
</button>
<button
v-if="gfiStore.featureIndex + 1 < gfiStore.features.length"
class="kern-btn kern-btn--block kern-btn--primary"
@click="gfiStore.featureIndex++"
>
<span class="kern-label">
{{ $t(($) => $.switch.next, { ns: 'gfi' }) }}
</span>
<span class="kern-icon kern-icon--arrow-forward" aria-hidden="true" />
</button>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I strongly prefer the previous switch buttons that had both directions displayed and only used the icons.

<style scoped>
#polar-card-gfi {
width: 12em;
margin: var(--kern-metric-space-small);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This margin should not be added if the plugin is added by the iconMenu

Comment on lines +55 to +56
max-height: 80%;
overflow: auto;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

These do nothing if the plugin is added by the iconMenu

]
: coordinateOrExtent

// TODO: Layer list needs better typing
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Is this the same TODO as in lines 116 & 117?
I'd prefer having this as an issue in place of these TODOs

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I am not quite happy with this function. serialize is somewhat fitting, but I still am not able to directly identify what I receive without looking at the function or its TSDoc itself.

Also, isn't it clearer to just call new GeoJSON().writeFeatureObject(feature) in the two instances this util is used?

Comment thread src/plugins/gfi/types.ts
Comment on lines +132 to +144
export interface CustomHighlightStyle {
/**
* Object for defining the fill style.
* See [OpenLayers documentation](https://openlayers.org/en/latest/apidoc/module-ol_style_Fill-Fill.html) for full options.
*/
fill: Fill

/**
* Object for defining the stroke style.
* See [OpenLayers documentation](https://openlayers.org/en/latest/apidoc/module-ol_style_Stroke-Stroke.html) for full options.
*/
stroke: Stroke
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The previous type was wrong, both should be optional as seen in the README.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is missing the _isMultiSelect handling, which should be needed when using multiSelect in conjunction with directSelect. How come this is no longer needed with pins though?

Also, I am not able to properly create a selection diff with this new implementation.

Comment on lines +140 to +154
if (gfiMainStore.configuration.directSelect) {
async function onMapClick({ coordinate, originalEvent }: MapBrowserEvent) {
await getFeatureInfo(coordinate as [number, number], {
toggleSelection:
navigator.userAgent.indexOf('Mac') !== -1
? originalEvent.metaKey
: originalEvent.ctrlKey,
})
}

coreStore.map.on('click', onMapClick)
onScopeDispose(() => {
coreStore.map.un('click', onMapClick)
})
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Please add the previous isDrawing condition. Otherwise, one would send off a gfi request when any of those previous conditions are true.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

As this function heavily relies on ol functionality, I'd prefer it to reside in src/plugins/gfi/stores/list.ts

Comment on lines +209 to +213
const overlay = new Overlay({
positioning: 'bottom-center',
offset: [0, -5],
})
coreStore.map.addOverlay(overlay)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Always adding the overlay is redundant. Please adhere to the previous implementation

Comment thread src/locales.ts
previous: 'Vorherige Seite',
wrapper: 'Seitenauswahl',
},
} as const
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
} as const
export const resourcesEn = {
pagination: {
currentPage: 'Current page, page {{page}}',
page: 'Page {{page}}',
next: 'Next page',
previous: 'VPrevious page',
wrapper: 'Pagination',
},
} as const

Comment thread src/plugins/gfi/index.ts
locales,
storeModule: useGfiStore as PolarPluginStore,
options,
icon: 'kern-icon--map-pin-heart',
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Not really sure if this should be added here by default.

Comment on lines +28 to +33
(async () => {
gfiStore.hoveredFeatures = {}
await nextTick()
gfiStore.selectedFeatures = { [layerId]: [feature] }
})()
"
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The previous implementation with setOlFeatureInformation should be preferred over this.

Comment on lines +2 to +4
<h2 class="kern-heading-medium">
{{ $t(($) => $.list.header, { ns: 'gfi' }) }}
</h2>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The information regarding the amount of features that are a) available on the current page and b) in general is missing

Image

Comment on lines +33 to +35
<template v-else-if="gfiStore.configuration.featureList">
<GfiFeatureList />
</template>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
<template v-else-if="gfiStore.configuration.featureList">
<GfiFeatureList />
</template>
<GfiFeatureList v-else-if="gfiStore.configuration.featureList" />

Comment on lines +5 to +10
<p
v-if="gfiStore.listFlatFeatures.length === 0"
class="kern-body kern-body--small polar-plugin-gfi-list-empty-view"
>
{{ $t(($) => $.list.emptyView, { ns: 'gfi' }) }}
</p>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Based on https://www.kern-ux.de/komponenten/card, this should be wrapped in a <section> with class="kern-card__body"

Comment on lines +2 to +4
<h2 class="kern-heading-medium">
{{ $t(($) => $.list.header, { ns: 'gfi' }) }}
</h2>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Based on https://www.kern-ux.de/komponenten/card, this should be wrapped in a <header> with class="kern-card__header"

Comment on lines +37 to +39
<h2 class="kern-title kern-title--small">
{{ gfiStore.listGetText(feature, 'title') }}
</h2>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
<h2 class="kern-title kern-title--small">
{{ gfiStore.listGetText(feature, 'title') }}
</h2>
<h3 class="kern-title kern-title--small">
{{ gfiStore.listGetText(feature, 'title') }}
</h3>

Comment on lines +40 to +41
{{ gfiStore.listGetText(feature, 'subtitle') }}
<br />
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
{{ gfiStore.listGetText(feature, 'subtitle') }}
<br />
<p class="kern-subline kern-subline--small">
{{ gfiStore.listGetText(feature, 'subtitle') }}
</p>

Also, the displayed information is a bit different.

Currently:
Image

Meldemichel:
Image

Comment on lines +27 to +35
@click="
(async () => {
gfiStore.hoveredFeatures = {}
await nextTick()
gfiStore.selectedFeatures = { [layerId]: [feature] }
})()
"
@mouseenter="gfiStore.hoveredFeatures = { [layerId]: [feature] }"
@mouseleave="gfiStore.hoveredFeatures = {}"
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This logic belongs to the store

text-wrap: wrap;
}

section {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Can kern-card__body handle a lot of this?

Comment thread src/plugins/gfi/types.ts
Comment on lines +16 to +17

export const gfiFailedSymbol = Symbol('POLAR gfi call failed')
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
export const gfiFailedSymbol = Symbol('POLAR gfi call failed')

Not used

Comment thread src/plugins/gfi/types.ts
Comment on lines +48 to +62
/**
* (WMS-only)
* Some WMS services may return features close to the clicked position.
* By setting the value `clickPosition`, only features that intersect the clicked position are shown to the user.
*
* @defaultValue Show all features
*/
filterBy?: 'clickPosition'

/**
* (WMS-only)
* If the `infoFormat` is not set to `'application/geojson'`´, this can be configured to be the known file format of the response.
* If not given, the format is parsed from the response data.
*/
format?: 'GML' | 'GML2' | 'GML3' | 'GML32' | 'text'
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

As there are only for WMS-layers, can we list them separately? Same would go for showTooltip for Vectorlayers.

Comment thread src/plugins/gfi/types.ts
Comment on lines +330 to +351
/** parameter specification for request method */
export interface RequestGfiParameters {
coordinateOrExtent: [number, number] | [number, number, number, number]
layer: BaseLayer
layerConfiguration: GfiLayerConfiguration

/** rawLayerList entry, see https://bitbucket.org/geowerkstatt-hamburg/masterportal/src/dev/doc/services.json.md */
layerSpecification: Record<string, unknown>

map: Map

/** defaults to bboxDot (get from minimal coordinate bbox) */
mode?: 'bboxDot' | 'intersects'
}

export interface RequestGfiWmsParameters {
coordinate: [number, number]
layer: TileLayer<TileWMS> | ImageLayer<ImageWMS>
layerConfiguration: RequestGfiParameters['layerConfiguration']
layerSpecification: RequestGfiParameters['layerSpecification']
map: RequestGfiParameters['map']
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm not sure whether these should be moved to a different file to not include them in the documentation. What's your take?

Comment thread src/plugins/gfi/types.ts
*/
export interface GfiLayerConfiguration {
/**
* Property of the features of a service having an url usable to trigger a download of features as a document.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
* Property of the features of a service having an url usable to trigger a download of features as a document.
* Property of the features of a service having a url usable to trigger a download of features as a document.

Comment thread src/plugins/gfi/types.ts

/**
* (WMS-only)
* If the `infoFormat` is not set to `'application/geojson'`´, this can be configured to be the known file format of the response.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It needs to be specified that the infoFormat is set on the layer in the service registry.

Comment thread src/plugins/gfi/types.ts
featureList?: FeatureList

/**
* Limits the viewable GFIs per layer by this number.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
* Limits the viewable GFIs per layer by this number.
* Limits the viewable results per layer by this number.

Comment thread src/plugins/gfi/types.ts
* Limits the viewable GFIs per layer by this number.
* The first n elements are chosen arbitrarily.
* Useful if you e.g. just want one result, or to limit an endless stream of returns to e.g. 10.
* Infinite by default.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@defaultValue Infinity should be preferred

Comment thread src/plugins/gfi/types.ts

/**
* Method of calculating which feature has been chosen by the user.
* `bboxDot` utilizes the `bbox`-url parameter using the clicked coordinate while `intersects` uses a `Filter` to calculate the intersected features.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
* `bboxDot` utilizes the `bbox`-url parameter using the clicked coordinate while `intersects` uses a `Filter` to calculate the intersected features.
* `bboxDot` utilizes the `bbox`-url parameter using the clicked coordinate
* while `intersects` uses a `Filter` to calculate the intersected features.

Comment thread src/plugins/gfi/types.ts
* Method of calculating which feature has been chosen by the user.
* `bboxDot` utilizes the `bbox`-url parameter using the clicked coordinate while `intersects` uses a `Filter` to calculate the intersected features.
* Layers can have their own `gfiMode` parameter which would override this global mode.
* To apply this, add the desired value to the parameter in the `mapConfiguration`.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
* To apply this, add the desired value to the parameter in the `mapConfiguration`.
* To apply this, add the desired value to the parameter in the {@link MapConfiguration | `mapConfiguration`}.

Comment thread src/plugins/gfi/types.ts
* If set to `'box'`, the selection will be done in a box.
* If set to `'circle'`, the selection will be done in a circle.
*
* Similar to `directSelect`, features can be added and removed by selection / unselecting them.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
* Similar to `directSelect`, features can be added and removed by selection / unselecting them.
* Similar to {@link GfiPluginOptions.directSelect | `directSelect`},
* features can be added and removed by selection / unselecting them.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactor Refactoring of previous code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migration of GFI plugin to POLAR@3

2 participants