Skip to content

Commit

Permalink
Adding section about expressions supported when fetching options from…
Browse files Browse the repository at this point in the history
… repeating structures
  • Loading branch information
Ole Martin Handeland committed Dec 19, 2024
1 parent a1156ae commit 2d3d90e
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,45 @@ with arguments to access other values in the option as well.
- `["value", "description"]` will return the [description of the current option](../texts), if set.
- `["value", "helpText"]` will return the [help text of the current option](../texts), if set.

### Used alongside options from the data model

When using `optionFilter` with options from the data model, the expression will be evaluated for each _row_ in the
repeating structure. This means that if you look up the data model (via the `dataModel` function) in the expression,
you will have access to data from the row that the option was fetched from.

If there is a `RepeatingGroup` component associated with this repeating structure, the `optionFilter` property can also
look up values from the `component` function to access data from components inside the repeating group. The return value
from this function will always be `null` if the row is hidden using
[dynamics in the `hiddenRow` property](../../../../../reference/ux/fields/grouping/repeating/dynamics),
even if a lookup with the `dataModel` function would return data from the hidden row.

An example using this combination:

```json {hl_lines=["10-15"]}
{
"id": "choose-pet",
"type": "Dropdown",
...
"source": {
"group": "MyPets",
"label": ["dataModel", "MyPets.Name"],
"value": "MyPets[{0}].Id"
},
"optionFilter": [
"and",
["notEquals", ["dataModel", "MyPets.Name"], null],
["notEquals", ["component", "pet-owned-by-someone-else"], true],
["notEquals", ["value"], "example-cat-id"]
]
}
```

In this example, the `optionFilter` property will filter out all pets that:
- Do not have a name (the path `MyPets.Name` is `null` or an empty string)
- Are owned by someone else (the value in the `pet-owned-by-someone-else` component is `true`). In this example, we assume
that this component is set up inside a `RepeatingGroup` component that is associated with the `MyPets` structure.
- Have the ID `example-cat-id`. Since the `value` field is fetched from the path `MyPets[{0}].Id`, the result will be
the same as if you wrote `["notEquals", ["dataModel", "MyPets.Id"], "example-cat-id"]`.

### Example: Filtering duplicate options in a repeating group

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,47 @@ Denne funksjonen kan brukes med argumenter for å få tilgang til andre verdier
- `["value", "description"]` vil returnere [beskrivelsen av det nåværende alternativet](../texts), hvis satt.
- `["value", "helpText"]` vil returnere [hjelpeteksten til det nåværende alternativet](../texts), hvis satt.

### Sammen med kodelister fra repeterende strukturer

Hvis du bruker [kodelister fra en repeterende struktur i datamodellen](../../sources/from-data-model), vil uttrykket
i `optionFilter`-egenskapen bli evaluert for hvert _rad_ i den repeterende strukturen. Det betyr at om du gjør oppslag
i datamodellen (via `dataModel`-funksjonen) i uttrykket, vil du få tilgang til data fra den nåværende raden som
kodeliste-elementet er hentet fra.

Dersom det finnes en `RepeatingGroup`-komponent knyttet til denne repeterende strukturen, vil `optionFilter`-egenskapen
også kunne slå opp verdier fra `component`-funksjonen for å få tilgang til data fra komponenter inne i den repeterende
gruppen. Returverdien fra denne funksjonen er alltid `null` om raden er skjult ved hjelp
av [dynamikk i `hiddenRow`-egenskapen](../../../../../reference/ux/fields/grouping/repeating/dynamics), selv om et
oppslag med `dataModel`-funksjonen ville returnert data fra den skjulte raden.

Et eksempel på denne kombinasjonen:

```json {hl_lines=["10-15"]}
{
"id": "choose-pet",
"type": "Dropdown",
...
"source": {
"group": "MyPets",
"label": ["dataModel", "MyPets.Name"],
"value": "MyPets[{0}].Id"
},
"optionFilter": [
"and",
["notEquals", ["dataModel", "MyPets.Name"], null],
["notEquals", ["component", "pet-owned-by-someone-else"], true],
["notEquals", ["value"], "example-cat-id"]
]
}
```

I dette eksempelet vil `optionFilter`-egenskapen filtrere ut alle kjæledyr som:
- Ikke har et navn (stien `MyPets.Name` er `null` eller en tom streng)
- Eies av noen andre (verdien i `pet-owned-by-someone-else`-komponenten er `true`). I dette eksempelet antar vi at
denne komponenten er satt opp inne i en `RepeatingGroup`-komponent som er knyttet til `MyPets`-strukturen.
- Har ID-en `example-cat-id`. Siden `value`-feltet hentes fra stien `MyPets[{0}].Id`, vil resultatet være det samme
som om man skrev `["notEquals", ["dataModel", "MyPets.Id"], "example-cat-id"]`.

### Eksempel: Filtrere duplikate alternativer i en repeterende gruppe

I animasjonen under er en `RepeatingGroup`-komponent satt opp med en `Dropdown`-komponent inni. Denne
Expand Down

0 comments on commit 2d3d90e

Please sign in to comment.