giseldo/neodataset huggingface dataset:
FE: fix React 18 screenmanager issue Error: Cannot have two MultiBackends at the same time.

Move the screenmanagerprovider to App tsx. There can only be 1, so not one for with and one for without authentication.

To reproduce the issue:
- on react 18 branch
- use a config.json with `"GW_FEATURE_FORCE_AUTHENTICATION": false` (you can use the example config)
- go to homepage
- split the mapview
- login to gitlab
- when back on the homepage, split the mapview again
- logout
- when back on the homepage, split the mapview again
- do this a few times

at one of the split map views, the error will show `Error: Cannot have two MultiBackends at the same time.`

![image](/uploads/8f2e12e3019c60a3bc96ac480494c7f6/image.png)

Story points: 2.0
FE: fix Radar preset in preset storybook

The data layer in de Radar preset in the presets storybook no longer contains Radar data.
After running `nx storybook presets` one of two things can happen:
1. If you are not on VPN you will see "Data unavailable"
2. If you are on VPN, Harmonie (?) data will be shown

Suggestions to do:
1. Add a real radar preset
2. Create a preset (or keep the current one called Radar and rename it) where the layer has dimensions 
   - _(This layer was probably used in a MR to fix dimensions, it would be good to keep/add a preset to the demo that has layers with dimensions)_


It would be nice to keep the following things in mind while working on this ticket:
* Make the name of the preset reflect the data layer(s)
* Make sure that all data layers used in the presets demo are available externally (so not only accessible via VPN)


Replace `"service": "https://adaguc-server-geoweb.geoweb.knmi.cloud/adagucserver?dataset=HARM_N25",` with a public radar service in `libs/presets/src/lib/utils/fakeApi/viewpresets/Radar.json`

make sure this will work without any vpn connection

Story points: 1.0
BE: remove unused authorizer-lambda code from infrastructure

The code in https://gitlab.com/KNMI/geoweb/geoweb-serverless-backend/-/tree/master/infrastructure/authorizer-lambda is no longer used. To keep the repository clean, it should be removed. 

Verify that this can be done.

Once this is removed, the section about this part of the repository can be removed from the infrastructure readme (https://gitlab.com/KNMI/geoweb/geoweb-serverless-backend/-/merge_requests/404#note_1217138637)

Story points: 2.0
BE: Fix XRAY_RADIO_BLACKOUT category detail issue

The category detail for xray_radio_blackout_alert is set wrong in the new version. For xray_radio_blackout_alert it should be "" and not XRAY_RADIO_BLACKOUT. This causes issues when posting one from the FE.

After this is fixed make sure to test if https://gitlab.com/opengeoweb/geoweb-assets/-/issues/2439 is also solved, as it might be related.

Story points: 2.0
FE: sigmet/airmet - import configuration from the BE in the app instead of sigmet module

The config for the sigmet/airmet is currently stored in the sigmet module. This will have to be moved so it can be imported from the app and retrieved from the BE like we do for the global config.

- Add a knmi.sigmetConfig and knmi.airmetConfig
- Add two keys in the global config to set the name of the sigmet/airmet config files similar as done for the presets
- Pass along the config to the sigmet/airmet modules via property
- Ensure the config can be used in the storybook
- Do a call to `/aviation/sigmet-config` and `/aviation/airmet-config` to retrieve the config

Story points: 3.0
FE: sigmet/airmet - hardcoded baselayers

The baselayers in SIGMET/AIRMET are currently hardcoded (for example the helicopter platforms or the airport locations).

*  Make the baselayers and overlayers configurable so the correct ones are shown when opening the SIGMET/AIRMET module.
* Use the mappreset definition in the configuration (with type over/base layer) on what you want to see and to load on opening the form
* call key: `mapPreset`
* Add the config outside of the FIRs on the same level as `location_indicator_mwo`
* Also ensure the bbox and srs are set in the preset


Ensure that the current set-up for KNMI remains unchanged

Story points: 3.0
FE: sigmet/airmet - Allow FIR selection via dropdown

The FIR used to sent to the BE and for intersections needs to be configurable

- Use this in the getFir function.
- This same getFir function needs to be used in SelectFir.tsx to ensure the correct coordinates of the FIR get sent to the BE and used in the creation of the intersection
- Move the amsterdam FIR from AMSTERDAM_FIR.json inside the `EHAA` prop in sigmetConfig and airmetConfig
- The `MapViewLayer` for the currently selected FIR should be highlighted by using a different color/thickness

Ensure the option for KNMI remains only the Amsterdam FIR as it is now.

Story points: 3.0
FE: sigmet/airmet configurable validation rounding Levels

To allow SIGMET/AIRMET to be used by the partners some validation needs to be made configurable.

- Validation for levels is hardcoded. Rounding to nearest ...m/..FL/..ft/...degrees needs to be configurable
- FIR setting and not globally per institute

Apply the current settings to the config for KNMI so the current behaviour doesn't change.

Story points: 3.0
FE: sigmet/airmet max levels configurable

To make SIGMET/AIRMET useable for our partners the following has to be made configurable via the sigmet/airmet config file:

- Min/max levels values are hardcoded
- FIR based setting

This will have to be adjusted in the validation. Ensure the current values are added to the KNMI config so the current behaviour doesn't change.

Story points: 3.0
FE: sigmet/airmet - configurable VALID_FROM_TIME_DELAY_IN_MINUTES

Goal is to make SIGMET/AIRMET configurable:.

One of the things we need is:

* To determine the prepopulated validity start time when the SIGMET/AIRMET is opened, a constant (VALID_FROM_TIME_DELAY_IN_MINUTES) has been defined (set to 30 mins for KNMI). This needs to be made configurable via the config so institutes can set their own delay time.

Make both settings configurable and add to the config file for KNMI so the current settings remain unchanged for us.

Story points: 2.0
FE: BUG: SIGMET/AIRMET changes in start geometry are not saved if it is the only change

The changes are saved successfully, but if you re-open the same sigmet before loading the list is completed, you will still see the old data. The user currently doesn't see that the list is being loaded.

Solution:
- show a loading bar (like taf) to indicate that new data is being fetched after saving

Story points: 2.0
FE: investigate form dirty after rhf7 for TAF

Using `formState.dirty` is returning true, while no changes have been made to the form. It's not a big of an issue since we can use `formState.dirtyFields` and check there the number of keys, but the error is telling us something is wrong.

Check if following helps:
- do all (hidden) values have an initial value set?
- do the `reset` have the correct params
- is `reset` the correct handle or should we use `setValue` to reset a form with dirty in mind?

This is happening in taf and sigmet/airmet, might be related. Timebox it, as we can continue otherwise

Story points: 3.0
BE: saving sigmet or airmet with empty start geometry should be allowed

- nx serve
- open sigmet
- click create a new sigmet 
- only choose a phenomenon
- click SAVE
- FE will send empty startgeometry, this should be allowed
``` startGeometry: "" startGeometryIntersect: ""```


currently: you will get an error `invalid request body`


expected: sigmet should be saved without problems


same issue for AIRMET

Story points: 3.0
FE: BUG featureInfoDialog does not display info when clicking on map after selecting a map preset

- nx serve with knmi config (or example config with gitlab login)
- log in
- you have an empty map now
- click the getFeatureInfo I icon, it will say 'No layers added to the map.'
- choose a mappreset in the layermanager
- now the getFeatureInfo dialog says 'Click on the map for info.'
- click on the map

Expected:
Mappin and layerinfo is displayed

Actual: 
nothing happens

If you first select a preset and then open the getFeatureInfo dialog it does work. Or if you first open the dialog and then manually add a layer (so not via the presets).

Maybe caused by https://gitlab.com/opengeoweb/opengeoweb/-/issues/3039 ?

Story points: 2.0
FE: fix for TAF valid change interfield validation

to reproduce issue:
- open empty taf
- in change group row: leave change field empty
- in change group row valid field, enter '091800' (or another six number value)
- tab or click next field

Expected:
- There should be no validation triggered

Current:
- error shows for valid field:  Changegroups 1: Invalid validity period, expected DDHH/DDHH for BECMG and TEMPO or DDHHmm for FM

Story points: 2.0
FE remove fetchPresets on mount and use initialiseApp action

~~Remove the fetchPresets on mount in presets, and use the `initialiseApp` action inside a mapPreset saga to fire the action to load the initial presets.~~

Initialise app does not work using inside the app, as the presets api is not ready then. Also not sure if this was the best solution; in future you don;t want to load presets if you're not on a map page. For now create a new fetchInitialPreset action, and only fire it once

Story points: 2.0
FE create app store with initialiseApp action

Some components do a fetch on mount. This is not a problem when there's no screenmanager, but with multiple screens come multiple fetches. This is a problem for presets, but might be for layermanager as well. See snackbar for example of mounting the storeprovider. 

- create a new (connected) app wrapper file in core which can render children
- create a app reducer with (for now) only 1 property: isInitialised. 
- on mount it will trigger `initialiseApp` action, and sets the `isInitialised` on true
- use this wrapper in geoweb

In next tickets, we can remove the onMount fetch call (for example for presets). Inside the preset saga we will catch the `initialiseApp` app action, and trigger the fetch from there.

Story points: 3.0
FE: presets fix storybook issue with animation preset

Check for a easy solution. If too big, discuss as this is a storybook only issue; and navigating between presets does work so there's a work around. Fix might be too impactfull for something small, but investigate. 

Fix issue with animation described in 
https://gitlab.com/opengeoweb/opengeoweb/-/merge_requests/2078#note_1198067809

Story points: 3.0
BE: Improve BE documentation where needed - main readme

Keep general stuff here, relocate specific module related information to the individual modules

- Linting & formatting
- General testing
- Deployment
- Routes
- Link to other readme's of the modules

* Some sections seem to be outdated or irrelevant at this point (for example, Testing sigmet backend lambda, taking into consideration we have a smoke test). Another outdated section is Testing TAC exporter lambda (there is no equivalent mention of IWXXM).
* It would be nice to have an overview of what modules are included in the BE (at the moment, Aviation and Spaceweather), and link to their individual README.md documents.

Story points: 3.0
BE: Improve BE documentation where needed - infrastructure

Same as in the case of the aviation module, it would be nice to have an overview of what we can find in this folder, and which API calls are implemented: 
* The OpenAPI spec points to the FE types file. The only official API documentation that we have now (and that would be visible to anyone using the repo) is the auto-generated Swagger page (https://gitlab.com/KNMI/geoweb/geoweb-serverless-backend/-/blob/master/aviation/aviation-openapi-spec.yml). Everything is typed and even the examples have the right structure. We only need to add more precise descriptions to the fields, as well as generic descriptions for the different API calls, so that someone could use the API effectively by just looking at the spec.
* There could be a README.md with a short overview of what each lambda does (we did something like that when we started working on Spaceweather, but sadly it's outdated). Also useful to point out if a lambda implements and API call, and which one.

Story points: 3.0
BE: Improve BE documentation where needed - aviation

* The OpenAPI spec points to the FE types file. The only official API documentation that we have now (and that would be visible to anyone using the repo) is the auto-generated Swagger page (https://gitlab.com/KNMI/geoweb/geoweb-serverless-backend/-/blob/master/aviation/aviation-openapi-spec.yml). Everything is typed and even the examples have the right structure. We only need to add more precise descriptions to the fields, as well as generic descriptions for the different API calls, so that someone could use the API effectively by just looking at the spec.
* There could be a README.md with a short overview of what each lambda does (we did something like that when we started working on Spaceweather, but sadly it's outdated). Also useful to point out if a lambda implements and API call, and which one.

Story points: 3.0
FE: Add MSG/GOES-East CPP satellite images to system WMS services

* add WMS to available WMS services in layer select in the existing `Satellite` WMS ; for now, final goal is to have `all` internal processed satellite images in one WMS).
* no system presets needed

* Change can only be checked after new release of ADAGUC!
* No need to change anything in the code, make sure WMS services can be found

Story points: 1.0
BE: Add MSG/GOES-East CPP satellite images to system WMS services

The processing of the data is done by RDSW; details on S3 buckets and SNS topics with Robert van Versendaal and/or Jan Fokke Meirink.

* layer(name)s:

1. cloud top height
1. cloud top temperature
1. precipitation rate
1. surface downwelling shortwave radiation
1. cloud condensed water path

* process the data in Adaguc (styling is available with RDSW)
* Use the groups for easy finding in FE. Groups & sub-groups: CPP > MSG & GOES

Info for finding data in AWS:
```
In widi-prd hebben we nu inderdaad de topics:
arn:aws:sns:eu-west-1:467137488806:msg-cpp-copy-msg-to-adaguc-prd
arn:aws:sns:eu-west-1:467137488806:msg-cpp-copy-goes16-to-adaguc-prd
voor bestanden die in
s3://knmi-msg-cpp-cache-prd-eu-west-1/nwc_saf_cpp/full/SEVIR_AODC/
s3://knmi-msg-cpp-cache-prd-eu-west-1/nwc_saf_cpp/full/ABI___EAST/
beschikbaar komen.
```

Story points: 3.0
BE: Reduce logging of scantask containers - investigate solution

- Fix in adaguc nested stack
- Try to use a json logging format
- Check that max logging size is not exceeded, otherwise log will be thrown away: logstash removes messages larger than 65536 (https://gitlab.com/KNMI/cloud-platform/monitoring/logstash-config/-/blob/master/pipelines/default_pipeline/1010-drop-large-messages.conf)
- If possible, reduce number of loglines
- Separate log channel for failures/errors, if succeeds: do not show logging

Story points: 3.0
BE/avi-message-converter: warnings for TAF TAC creation still some left

- Since the TAC is not made on each onblur, this issue might be resolved.
- Try to save a draft TAF with empty fields/lines or invalid cloud groups. 
- The TAC warning should be findable in Grafana, but should not be forwarded to the Slack channel and mail.
- When publishing TAF with a problematic TAC, the publishing should still fail.

Story points: 3.0
BE: schedule continuation meeting for deployment of microservices

Notes: https://docs.google.com/document/d/1DtNrS_eBU4-BIAV_YDobO2xNDOwT7vIzPYyv6u4VbK0/edit

Resulted in US: https://gitlab.com/opengeoweb/geoweb-assets/-/issues/2425

Story points: 3.0
FMI-aws-config: Clean-up GW_FEATURE_LAYER_SELECT

* https://gitlab.com/search?search=GW_FEATURE_LAYER_SELECT&nav_source=navbar&project_id=24089222&group_id=10103083&search_code=true&repository_ref=master
* If you open a merge request in geoweb international channel, also notify METNO about this change. Contact Björn, if he does not respond, try to contact someone else

Story points: 2.0
FE: BUG Changing cloudgroup works inconvenient

Related to our capitalization. If you type with shift key pressed, there seems to be no bug. Text should be displayed capitalized. This is default behavor, best way is to not do this, and do the transform to uppercase elsewhere https://github.com/react-hook-form/react-hook-form/discussions/7867#discussioncomment-2212314

We need to:
- remove the `toUpperCase()` in TafFormTextField
- add `textTransform: 'uppercase'` to the styling
- ~~- transform all values to uppercase on submit~~ probably can prevent this by doing this on blur
- transform all values to uppercase on blur
- let all validations handle lowercase 

To split this
- we use a lot of `trim` methods before we proceed validating. We can put this in a method that does this and do the uppercase transform. Create this method, and use this on a simple validation method so other tickets can proceed:
- test driven development, first pick a validation, and update all tests so it handles lowercase. After this fix the now failing validation methods
- after all validations are in, we can do the uppercase transforming as last and remove the uppercase in the textfield

Tip: 
- when developing remove the `toUpperCase()` in TafFormTextField, to see if the input now accepts lowercase. Later we use css to not show the lowercase

CheckList:
- [x] change
- [x] clouds
- [x] probability
- [x] validField
- [x] visibility
- [x] weather
- [x] wind

Story points: 3.0
FE: Add PASCAL data to system WMS services

Goal of this issue is to provide PASCAL postprocessing data. The processing of the data is done by EWC development team, see https://confluence.knmi.nl/x/VgkZBQ for more details.

* process the data in Adaguc (styling will be added by EWC team)(done)
* add WMS to available WMS services in layer select (proposed WMS-name: `PASCAL`)
* WMS url: https://adaguc-server-geoweb.geoweb.knmi.cloud/adaguc-server?DATASET=PASCAL&

Story points: 2.0
FE: Fix WMJSMAP React18Strictmode, part 1: No ref for zoombuttons

This MR is towards solving React18 StrictMode for WebMapJS. Callback functions from components will cause issues with React18. Therefore the onRegisterAdaguc callback should not be used.

MR: https://gitlab.com/opengeoweb/opengeoweb/-/merge_requests/2081

To test: Make sure nothing is broken.



This is part of https://gitlab.com/opengeoweb/opengeoweb/-/issues/2957

Story points: 2.0
FE: remove drawFunction from redux

* make a dictionary to register the drawFunctions with an id (example dictionary wmjsservicestore)
* when a feature gets selected, the feature gets a different drawFunction id in redux
* enable serializableCheck in `store.ts` (whole part `defaultMiddlewareOptions` can be removed now)
* there should be no console logs anymore when opening the Timeseries preset: `A non-serializable value was detected in the state` for `drawFunction`

Story points: 5.0
FE: make presets with the Waarschuwingssystematiek radar/polygonen

See the issue https://gitlab.com/opengeoweb/geoweb-assets/-/issues/1270

_Update from Loes:_

Layers have been added to adaguc. They can be found using the following WMS url: https://adaguc-server-geoweb.geoweb.knmi.cloud/adagucserver?dataset=cell-tracking

These are the available layer names: 
![image](/uploads/8cef284adca9d483e9d8e041a6aa829e/image.png)

You can test it out first by putting the above url in the WMS loader

**Note that the Warnings from KNMI (inner parts) has two styles available: grey and colored.**

Story points: 3.0
FE: Remove random element from wms requests for GetLegendGraphic

Both getMap and GetLegendGraphic have 0.504337860264962= type of parameter in url

This random elements should be removed from wms requests. They disable caching and causes unnecessary load for server.

To be considered, if there is badly behaving wms service, maybe this can be configurable per service.

_It seems there is a randomizer option for images, check if setting this to false by default will fix this. This would enable us to turn it on in certain cases?_

Story points: 2.0
FE: Add over-layers for North Sea Platforms and Airports

Layers to add for AIRMET and SIGMET:

* **Location of North Sea Platforms**
* **Locations of Airports EHAM/EHBK/EHLE/EHGG/EHRD**

Add them as overlayers and add them as a standard in the airmet/sigmet maps

Use the following service https://adaguc-server-geoweb.geoweb.knmi.cloud/adagucserver?dataset=OVL-sigmetairmet

Story points: 2.0
FE: Add FIR geometry to each Sigmet sent to BE

The BE needs to make an intersection of the geometry with the FIR itself too so we need to send over the used FIR to the BE when pasting a sigmet/airmet.

We need to add a field to the form in which we store the FIR coordinates used in the FE. This needs to be sent to the BE with each post we do.

_Discuss with BE people on name of field and where exactly to place it._

Story points: 2.0
BE: geoweb-message-converter: deriving TAC geometry from polygon input (FE)

Part of this:
- Use selectionType from startgeometry, use FIR type to endicate entire FIR
- Use FIR and intersection from FE to simplify region for TAC message. Re-use previous algorithms for simplification from SESAR.
- Use intersection poly instead of drawn poly from Frontend for IWXXM polygons

Story points: 8.0
BE:  Volcanic Ash parse and create TAC elements

Volcanic Ash SIGMET's should be parsed by the fmi-avi-messageconverter-tac library and stored in the fmi-avi-messageconverter SIGMET object.

The Reconstructor code for the Volcanic Ash elements shall be built to enable generating the TAC elements needed for describing VA SIGMET's from the fmi-avi-messageconverter SIGMET object

Story points: 3.0
BE: Parse Sigmet geometry with width along a line

In a SIGMET/AIRMET the geomery of a phenomenon can be described as an area with a width (in km or miles) along a line:
for example: **APRX 50KM WID LINE BTN N64 W017 – N60 W010 – N57 E010**

This type of geometry description should be parsed by the fmi-avi-messageconverter-tac library and converted into a polygon for inclusion in the GeoGeometry field of the fmi-avi-messageconverter SIGMET/AIRMET object (together with the original TAC clause in the TacGeometry field)

Story points: 3.0
BE: Parse Sigmet geometry relative to one or two lines

In a SIGMET/AIRMET the geometry of a phenomenon can be described as an area relative to one line or an area between two lines.

For example:

**N OF LINE S2520 W11510 – S2520 W12010**

**SW OF LINE N50 W005 – N60 W020**

**SW OF LINE N50 W020 – N45 E010 AND NE OF LINEN45 W020 – N40 E010**

This type of geometry description should be parsed by the fmi-avi-messageconverter-tac library and converted into a polygon for inclusion in the GeoGeometry field of the fmi-avi-messageconverter SIGMET/AIRMET object (together with the original TAC clause in the TacGeometry field).

Story points: 3.0
BE: Parse Sigmet geometry relative to two lat or lon

In a SIGMET/AIRMET the geometry of a phenomenon can be described as a sector or a quadrant: an area relative to a latitude and/or longitude.

For example:

**N OF N52** (North half of Dutch FIR)

**N OF 5230 AND E OF 00520** (North Eastern quadrant of the Dutch FIR)

This type of geometry description should be parsed by the fmi-avi-messageconverter-tac library and converted into a polygon for inclusion in the GeoGeometry field of the fmi-avi-messageconverter SIGMET/AIRMET object (together with the original TAC clause in the TacGeometry field).

This issue is for the quadrant situation, with a latitude/longitude combination

Story points: 3.0