giseldo/neodataset huggingface dataset:
FE: sigmet/airmet rounding Progress

To allow SIGMET/AIRMET to be used by the partners some validation needs to be made configurable.

* Validation for movement 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 fix draw issue after changing FIR and drawing

See:

![Screen_Recording_2023-03-07_at_13.29.58](/uploads/927a2f16b6189649b1e184d14927ffa0/Screen_Recording_2023-03-07_at_13.29.58.mov)

To reproduce:
- draw a shape
- select a different FIR location
- note that the shape disappears
- try to draw a shape, you can't. The map is moving instead
- if you press delete, and try again it's working again

Comments (https://gitlab.com/opengeoweb/opengeoweb/-/merge_requests/2292#note_1303894527): 
First thoughts, and a hint: The mouse is taken over by the drawing tool when the function adagucMouseMove in libs/core/src/lib/components/ReactMapView/AdagucMapDraw.tsx returns `true`. Otherwise the map will resume its normal mode.

See other comment below for other point mentioned by @maartenplieger for app

Story points: 2.0
FE: sigmet-airmet fir validation

Changing FIR should trigger some validations. See original comment https://gitlab.com/opengeoweb/opengeoweb/-/merge_requests/2292#note_1303690919  

There are several configurations that depend on the selected FIR for example:

* validation of valid from/to
* validation of cloud/level/movement/wind speed min max and rounding
* units displayed in the dropdowns
* surface wind + surface visibility min/max

When changing the selected FIR the untis are displayed correctly (they get added or removed accordingly) but the validation is not retriggered. So if you add a valid value for one FIR, then change the FIR (for which the value is invalid) there is no error showing. Not even when going in to the field and blurring. I'd say this is not MVP but probably something we should keep in mind.

Either use `setValue(name, value, {shouldValidate:true})` or `trigger`

Story points: 3.0
FE: sigmet/airmet rounding cloudlevels

To allow SIGMET/AIRMET to be used by the partners some validation needs to be made configurable.

* Validation for cloudlevels is hardcoded. Rounding to nearest ...m/..FL/..ft/ 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 windspeed configurable

To make SIGMET/AIRMET useable for our partners the following has to be made configurable via the sigmet/airmet config file:

* Min/max wind speed 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 make "selectionType": "fir" in geojson optional

Make `"selectionType": "fir"` optional, so configs work without passing that in. Make sure the FIR still works

Do we also want to allow other properties? As Ernst said:
> This is a bit too limiting. GeoJSONs are very often large datastructures, that are imported from a GIS data source. They can have any number of properties, depending on the source of the data. It can be very tedious if we are required to remove those properties from GeoJSONs when we add them to the code. I think this schema should not worry if there are extra fields here.

Story points: 2.0
FE: fix getLaterDate function for e2e to be able to handle running in the evening

If you would run the sigmet/airmet e2e tests in the evening, they might fail because the getLaterDate function would then make an invalid date.

Fix it so it works anytime.

![image](/uploads/038d60628021173b441ffef41a6d8ab5/image.png)

Story points: 2.0
FE: sigmet/airmet max cloudlevel configurable

To make SIGMET/AIRMET useable for our partners the following has to be made configurable via the sigmet/airmet config file:

- Min/max cloudlevels 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 max movement configurable

To make SIGMET/AIRMET useable for our partners the following has to be made configurable via the sigmet/airmet config file:

- Min/max movement 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 DEFAULT_VALID_TIME_SIGMET/AIRMET

Goal is to make SIGMET/AIRMET configurable:.

One of the things we need is:
* A default validity duration is used to prepopulate the validity end on opening of a new SIGMET/AIRMET. For KNMI this is set to 3 hours (SIGMET) and 1 hour (AIRMET). This needs to be made configurable via the config to ensure we can set different values per institute (DEFAULT_VALID_TIME_SIGMET/DEFAULT_VALID_TIME_AIRMET)

Make both settings configurable and add to the config file for KNMI so the current settings remain unchanged for us.

Story points: 3.0
FE: TAF issues pane cannot use full height

- use a big screen
- open taf module
- open a taf in edit mode and open the issues pane
- try to drag the issues pane below the last change group row

Actual: this is not possible, it's blocked

Expected: should be possible to drag it over the full height of the tafmodule view

![image](/uploads/461d2c3266b0702c2a16010d219eaa6c/image.png)

Story points: 1.0
Static background tiles: configure cloudfront, caching and enable http/2

The KNMI static background tiles are widely used by KNMI and partners for various projects. Currently these are served directly from a S3 bucket, as static website. It seems dat the expiration time is not set for this way of serving. Without expiration time, the tiles are fetched unnecessary often.

A benefit of adding an expiration time, is that the map view experience will probably be more smooth. By using tiles with an expiration time the map will display with less loading and flickering.

To enable expiration time, we need to serve the static tiles behind cloudfront. Serving via cloudfront is also considered best practice by AWS.

Goal of this ticket:

* Configure cloudfront in front of the S3 bucket
* Enable expiration time (Cache-Control)
* Enable http/2, this seems to be a more efficient protocol to obtain a large number of small files.

Story points: 3.0
FE: Add NOAA National Hurricane Center (NHC) data API to 'BES dashboard' preset

Adding all datalayers to all maps in the BES dashboard is not necessary; these are the selected ones:

* 2/5 day probability Outlook
* 2/5 day probability Outlook Area.
* 34kt probabilistic wind

These layers need to be added to the left map (showing windflags) and the right bottom view (satellite). All new layers can be added on top of existing map-preset in above order and need to be, by default, visible. No changes in existing leading layer.

Story points: 2.0
FE: SW: Properly register/unregister fields in the SW form

See both user stories, check if the populate button is not working because fields are not unregistered in the background.

If it is indeed related, we need to ensure that fields are properly registered/unregistered when fields are added/removed from the form.

Ensure to add tests to make sure that fields are unregistered properly when changing catergories/details so only relevant properties of the notification are registered in the form. 

If this doesn't solve the populate issue, create a further ticket to investigate (and discuss).

Story points: 3.0
FE: Increase speed of tests TAF

- AdvanceInTime?
- Split files as tests in one file can not be run in parallel
- Check merge request report for detailed info on what tests take most time

Before: local taf test run takes  73.061 s

Slowest testfiles:
```
 PASS   taf  libs/taf/src/lib/components/TafModule/TafModule.spec.tsx (43.541 s)
 PASS   taf  libs/taf/src/lib/components/TafForm/TafForm.statusChanges.spec.tsx (48.012 s)
 PASS   taf  libs/taf/src/lib/components/TafLayout/TafLayout.spec.tsx (66.42 s)
 PASS   taf  libs/taf/src/lib/components/TafForm/TafForm.spec.tsx (68.422 s)

Story points: 3.0
FE: Ensure rerenders of MetInfoWrapper doesn't cause any issues

Currently rerenders of the `MetInfoWrapper` cause issues in the SIGMET/AIRMET form (see https://gitlab.com/opengeoweb/opengeoweb/-/merge_requests/2194, form fields are cleared out on refresh of the token).

We need to ensure we test for this properly to ensure any future changes don't cause this as well as fix this issue.

Reproduce by adding defaultValues in the formwrapper as done in the above mentioned MR.

2 steps:
- Implement test which fails in branch of MR
- Fix so the test no longer fails in that MR and then port the fix and the test to a new branch

Story points: 3.0
FE: TAF AMD valid period of a BECMG group validation bug

### What is the current *bug* behavior?

1. Amend a **current** TAF
1. make a BECMG-changegroup that has a start-hour that is the same as the start-hour of the valid-period of the AMD-TAF (in the example this is 13). The end-hour of the valid-period of the BECMG is set to 1 hour later (in the example this 14)
1. there is an issue stating that the length of a BECMG group should be 1,2,3 or 4 hours. In the example the length is 1 hour so that should be correct.

### What is the expected *correct* behavior?

Amending a current TAF should show no errors when having a BECMG-group of length of 1 hour that has the same starthour as the one from the valid period of the TAF

(See the user story for a screenshot)

Story points: 2.0
FE: TAF after publish of draft amendment/correction wrong location is in focus

First recreate the issue in storybook. After that, fix it the issue. 
If the recreation takes more than 2 files, then the ticket should be split.

The problem:
The amended taf keeps the same uuid as the draft_amendment. The frontend tries to match the uuid of the previous taf to the previousId of the new taf. But in this case we need to match the uuid of the previous taf to the uuid of the new taf.

Story points: 3.0
FE: storyName inside story.parameters doesn't work

StoryName inside story.parameters doesn't work. 

See for example in `libs/shared/src/lib/components/Avatar/Avatar.stories.tsx`
The storyname in storybook should contain `(takeSnapshot)` but it doesn't. The snapshot did not get updated. 

Fix by removing storyName from .parameters and defining it separately

```
AvatarLight.storyName = 'Avatar Light (takeSnapshot)';
```

Instead of:
```
AvatarLight.parameters = {
  storyName: 'Avatar Light (takeSnapshot)',
  zeplinLink: [
    {
      name: 'Light theme',
      link: 'https://app.zeplin.io/project/5ecf84a3c6ae1047a368f393/screen/60ec68c87ed4860e1d14f5dd',
    },
  ],
};
```

TRY OUT:
Instead of using params, can we use story to have 1 object? (see https://storybook.js.org/addons/storybook-zeplin)
```
Default.story = {
    name: "Responsive Button",
    parameters: {
        zeplinLink: [
            {
                name: "Desktop",
                link: "zpl://components?pid=pid1&coid=coid1",
            },
            {
                name: "Tablet",
                link: "zpl://components?pid=pid1&coid=coid2",
            },
            {
                name: "Mobile",
                link: "zpl://components?pid=pid1&coid=coid3",
            },
        ],
    },
};
```





**Fix all stories that have a storyName inside the parameters and update the snapshots.**

Story points: 2.0
FE: taf update mobile design

Update TAF mobile design:
- update the mobile header space
- add link to Zeplin

https://app.zeplin.io/project/5ecf84a3c6ae1047a368f393/screen/61f2bfb7c86d02b398b51a68

![Screenshot_2022-09-14_at_09.38.28](/uploads/fd02069856e2928575faad58d09bd903/Screenshot_2022-09-14_at_09.38.28.png)

Story points: 2.0
FE: update readme with design link instructions

Update readme with:
- install instructions. Don't do it per lib, but create an env file and add your token there. This MR should also update the gitignore to not send the env to the repo https://gitlab.com/opengeoweb/opengeoweb/-/issues/2617 
- how to use it (use parameters on story, don't move storyName), link to correct version in Zeplin. If design changes update link
- mention how to use version web link inside Zeplin to link to correct version (the app url does not work if you want to click on the design in storybook to go to zeplin)
- tips (side panel, overlay feature, lock screen)
- put it in opengeoweb

Story points: 2.0
FE: update color for mouseover snackbar close button

- Mouseover for close button Snackbar (light the same as dark theme) #7BACFF opacity 0.2
- Elevation 12
 
see updated design https://app.zeplin.io/project/5ecf84a3c6ae1047a368f393/screen/5ecf926c9c931a2a11621c31

Story points: 2.0
FE: Support adverse weather encoded TAC in storybook

Create an example of what will be returned by the new endpoint.

It would be good to adhere to an existing format corresponding with the mimetype. 

For the endpoint, the current text/plain tac will stay the same, if "Accept" header is set to application/json and send with the request, the following will be returned:

1. Make a proper TAC with adverse weather format example
2. Add a storybook example displaying this new TAC format
3. Add snapshot.
 

Nested array, first array is for each line. Second array is for each TAC element.

```json
{
  "tac": [
    [
      {
        "text": "TAF"
      },
      {
        "text": "EHAM"
      },
      {
        "text": "1406/1512"
      },
      {
        "text": "08020KT",
        "type": "adverse"
      },
      {
        "text": "CAVOK"
      }
    ],
    [
      {
        "text": "PROB30"
      },
      {
        "text": "TEMPO"
      },
      {
        "text": "1505/1512"
      },
      {
        "text": "1000",
        "type": "adverse"
      },
      {
        "text": "+SHRA",
        "type": "adverse"
      },
      {
        "text": "BKN040",
        "type": "adverse"
      },
      {
        "text": "FEW050CB"
      }
    ],
    [
      {
        "text": "BECMG"
      },
      {
        "text": "1506/1509"
      },
      {
        "text": "32015G20KT",
        "type": "adverse"
      },
      {
        "text": "VV001=",
        "type": "adverse"
      }
    ]
  ]
}
```

Story points: 3.0
BE: 400 error returned when opening some notifications for spaceweather

### Summary

Sometimes when opening a spaceweather notification from the list you get a 400 error. The error returned from the BE (not shown in the dialog): `Error while retrieving event: event not found` and error logged: `Error in PRD grafana: 2022-09-08 10:06:16 Error while retrieving event from the events table: Event not found. Line 386`

### Steps to reproduce

Open several notifications in the list until you get a 400 error. It seems to happen quite frequently so no need to open a lot before it happens.

### Possible fixes

From Ernst:

> I did a quick scan of this problem: it probably is caused by the DynamoDB sometimes returning 0 items for a query, but also telling you to request more results because the query has not finished yet. This surfaces only now because the eventtable has grown above a certain size. We've had similar problems with other queries and fixed all queries, but apparently missed this one. It probably could happen with any type of notification.

Result: opening notifications in the FE should no longer lead to 400 errors - really hard to test in the dev branch as there is not a large database there. Test in dev branch it works as expected and verify once deployed to tst.

Story points: 3.0
BE: update SW notification lambda to read and use new notifcation

Update the SW notification lambda to read and use the new notification format as sent by MetOffice.

For this, use the serverless BE `master-sw` branch as a type of "master" branch and create MR to this branch.
`master-sw` listens to the SNS topic where the new service announces its notifications (also listens to the old service).

Ensure we can extract the same information we extract now from the new messages coming in.

Story points: 5.0
ADAGUC: GeoJSON format support (for seismic data)

ADAGUC should support the ingestion of GeoJSON in order to enable users to select and visualize interactive content on the map and for a better compatibility with USGS RS-feed

GeoJSON Summary Format to be used. (link: https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php)

Aspects to discuss/find out: all fields vs. selection, number of points (rough estimate 1000; the lower the magnitude the more events). Filtering will be on RDSA side.


Goal: ADAGUC server should be able to read GeoJSON data allowing you to click on a point to see the properties/get all metadata of the point using getFeatureInfo.

Story points: 3.0
Layer Select Bug: Editing user added service does not check whether name or url is already saved

Currently editing a user added service does not check whether name or url is already saved

![Screenshot_2022-09-09_at_11.21.00](/uploads/f252491eb3c20337061b5daf1637c15e/Screenshot_2022-09-09_at_11.21.00.png)

Note: Name and URL check from redux works when adding a new service, but not when editing an existing one

How to reproduce:

1. Open new Layer Manager and Layer Select
2. Add new service and save it
3. Open serviceOptionsDialog (three dots on right side of horizontal layer list)
4. Click pen icon to edit the service that was added
5. Try changing name to a service name that already exists --> this should give warning, and now doesn´t
6. Try changing name to a service url that already exists --> this should also give a warning, and now doesn´t. This currently only only works after a empty space is added after the whole url is typed

ToDo

- Make sure that before service can be saved, checking the name and url from redux works
- Fix tests to reflect fixes on code

Story points: 2.0
BE: Geoweb-Serverless: Configure new presets-be domains

Use the new domain names for the presets-backend in geoweb-serverless:

* **gwpresetsbe-dev.geoweb.dev.knmi.cloud** - Connected to https://geoweb-dev.auth.eu-west-1.amazoncognito.com/oauth2/userInfo, for development branches of geoweb-serverless-backend
* **gwpresetsbe-tst.geoweb.dev.knmi.cloud** - Connected to https://geoweb-tst.auth.eu-west-1.amazoncognito.com/oauth2/userInfo, for master deployment of geoweb-serverless-backend


This can be configured in 
- https://gitlab.com/KNMI/geoweb/geoweb-serverless-backend/-/blob/master/.gitlab-ci.yml#L2330 for dev
- https://gitlab.com/KNMI/geoweb/geoweb-serverless-backend/-/blob/master/.gitlab-ci.yml#L2382 for tst

Story points: 1.0
BE: PresetsBE: Correct domain name for tst and dev deployments

This ticket corrects the domain names for the presets backend deployment.

Previously the dev and tst deployments tried to use the same DNS record

**gwpresetsbe.geoweb.dev.knmi.cloud**


This ticket differentiates between:
- **gwpresetsbe-dev.geoweb.dev.knmi.cloud** - Connected to  https://geoweb-dev.auth.eu-west-1.amazoncognito.com/oauth2/userInfo, for development branches of geoweb-serverless-backend
- **gwpresetsbe-tst.geoweb.dev.knmi.cloud** - Connected to  https://geoweb-tst.auth.eu-west-1.amazoncognito.com/oauth2/userInfo, for master deployment of geoweb-serverless-backend

Story points: 1.0
Layer Select: Enable and save Abstract part 1

![Screenshot_2022-09-08_at_8.25.08](/uploads/9bc465afa5e86e487017cbcef3f8f4e2/Screenshot_2022-09-08_at_8.25.08.png)

Current situatuon:
- Currently when adding a new service, the Abstract field is disabled.
- Currently the data structures (Redux, localStorage) that are used in Layer Select do not support adding or editing the abstract


Notes from PO
- Abstract (and Service name) should come from getCapabilities and should be prefilled.
 

ToDo

- [x] validate service url
- [x] if url is valid, fetch the url to get the abstract and name
- [x] download could start onBlur
- [x] show loader while url is being downloaded
- [x] once data arrives, display the abstract and the name
- [x] abstract should not be saved yet only displayed

Story points: 3.0
FE: Spaceweather investigate response message

In Spaceweather we test the prop message from a response, that does not seem to be there in the type definition. Probably it's a mistake, but we should fix it correctly. 


Mentioned:
https://gitlab.com/opengeoweb/opengeoweb/-/merge_requests/1784#note_1091319071

Introduced:
https://gitlab.com/opengeoweb/opengeoweb/-/blob/6126aa447d765c2ead51164d659e188bb6d9d095/libs/spaceweather/src/lib/utils/api.ts#L52

Story points: 2.0
FE: Use fakeApi in mockApi TAF

Currently we have 3 places where we define the api:

* api
* fakeApi (for stories)
* mockApi (for tests, all api libs but presets)

It would be nice to:

* reusability. 3 api's is a bit too much, we could import the and spread prop the `fakeApi` in `mockApi`, and overrule the routes if needed.

Do this for remaining Taf lib. Starting this will cause some `dependency cycle` issues because of `MOCK_USERNAME`, so best to move this to some testUtils (maybe mockData/fakeTafList.ts?) first before starting on the real issue.

Story points: 2.0
FE: make config GW_INITIAL_PRESETS_FILENAME and GW_SCREEN_PRESETS_FILENAME optional

The typescript definition says these are still mandatory. But other env's don't pass these values so it should be optional. All presets should still work. 

Currently when not passing, it will catch the error and sets these values as default (see loadConfig). 

We have two levels of validations: `isValidConfig` and `isValidConfigWithAuthentication`. `isValidConfigWithAuthentication` can still have missing keys, for `isValidConfig` all keys should be optional.

Story points: 3.0
FE: snapshot tests that contain a draggable toolcontainer sometimes fail

see for example https://gitlab.com/opengeoweb/opengeoweb/-/jobs/2983627484

Snapshots with a toolcontainer sometimes have a different position. Toolcontainer needs to be wrapped in a div. Make sure that the toolcontainer never changes position during the tests.

snapshots with toolcontainer:

**core**
- layermanager
- layerselect
- dimensionselect
- multimapdimensionselect
- keywordfilterresults

**shared**
- Toolcontainer

**taf**
- issues pane

Story points: 3.0
FE: improve error message for config.json when using wrong keys

The message "the following keys are not present or don't have a value:" doesn't make sense when the keys are wrong. In this case the config.json contains `GW_AIRMET_TAC_URL` and others which should not exist. Also `GW_LAYER_SELECT` should be `GW_FEATURE_LAYER_SELECT`

![image](/uploads/22309a83a68d584511e3e36011a57347/image.png)

Story points: 2.0
FE: Use fakeApi in mockApi

Currently we have 3 places where we define the api:
- api
- fakeApi (for stories)
- mockApi (for tests, all api libs but presets)

It would be nice to:
- reusability. 3 api's is a bit too much, we could import the and spread prop the `fakeApi` in `mockApi`, and overrule the routes if needed.

Do this for all libs (spaceweather, taf, sigmet/airmet). Tests should not be affected

Story points: 3.0
FE: align error alertbanner

Make sure all icons are aligned with the text. Currently texts are a bit too high, and one is a bit too low:

![Screenshot_2022-09-05_at_09.27.26](/uploads/443e3d0c117c62a1b095ec24d6cff966/Screenshot_2022-09-05_at_09.27.26.png)

Check is with @didier.dezanet before creating MR. Design: https://app.zeplin.io/project/5ecf84a3c6ae1047a368f393/screen/6093e697eeeb043620e92089

Story points: 2.0