Skip to content

Commit

Permalink
Merge branch 'master' into docs/fix-notifications-typo
Browse files Browse the repository at this point in the history
  • Loading branch information
hggutvik authored Oct 2, 2024
2 parents 8dc1b7f + a62014b commit fc7ceda
Show file tree
Hide file tree
Showing 27 changed files with 3,115 additions and 805 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Brukeren skal kunne velge mellom offentlig og privat sektor. Til det er det natu
1. Dra inn en komponent av typen "Radioknapper" øverst på den nye siden.
2. Under "Tekst" i egenskapene til komponenten du har lagt til, legg til ledeteksten "Sektor". Nå bør skjemabyggeren se slik ut:
!["Skjemabygger med sektor"](skjemabygger_med_sektor.png)
3. Nederst i tekstseksjonen kan man sette opp alternativer. Bryteren "Bruk kodeliste" er slått på som standard. Slå den av, så du kan legge til alternativene selv.
3. Nederst i tekstseksjonen kan man sette opp alternativer. Fanen "Velg kodeliste" er valgt som utgangspunkt. Velg fanen "Sett opp egne alternativer" for å legge til egne alternativer.
4. Velg "Legg til alternativ". Du vil se at det dukker opp et alternativ under overskriften "Radioknapp 1" med en generert verdi.
5. Klikk på "Radioknapp 1".
6. Bytt ut verdien med `offentlig`. Dette er verdien som vil bli sendt til systemet når brukeren besvarer skjemaet.
Expand Down Expand Up @@ -104,8 +104,8 @@ Slik bruker du en kodeliste til å lage en liste med avmerkingsbokser:
!["Hent endringer"-knapp](hent_endringer.png)
Klikk på knappen. Du vil få en bekreftelse på at du har fått siste versjon og prikken forsvinner.
2. Åpne siden der du la til "Bransje" og klikk på "Bransje".
3. Under "Tekst" i egenskapene for "Bransje", sjekk at valget "Bruk kodeliste" er slått på.
3. Velg "industri" fra nedtrekkslisten under.
3. Under "Tekst" i egenskapene for "Bransje", sjekk at fanen "Velg kodeliste" er valgt.
4. Velg "industri" fra nedtrekkslisten under.
!["Bruk kodeliste"-nedtrekssliste](bruk_kodeliste.png)

Nå skal avmerkingsboksene være klare.
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ hidden: true
1. [Get your secret key from Nets.](https://developer.nexigroup.com/nexi-checkout/en-EU/docs/access-your-integration-keys/). Make sure you use the test key during development.
2. Make your app ready for use of Azure Key Vault as a config provider, if this has not been done before. See [relevant documentation](/altinn-studio/reference/configuration/secrets/).
3. Add your secret key to Key Vault, with the variable name `NetsPaymentSettings--SecretApiKey`. This way it will override `SecretApiKey` in `appsettings.json`.
4. Add `NetsPaymentSettings` to your `appsettings.json`. Remember to set the correct `baseUrl` in production. The field `MerchantHandlesConsumerData` is optional, and controls whether you are going to supply details about the payer, or if that should be filled out in the Nets Easy payment page.
4. Add `NetsPaymentSettings` to your `appsettings.json`.

```json
{
"NetsPaymentSettings": {
Expand All @@ -16,10 +17,17 @@ hidden: true
"TermsUrl": "https://www.yourwebsite.com/terms",
"ShowOrderSummary": true,
"ShowMerchantName": true,
"MerchantHandlesConsumerData": true
"MerchantHandlesConsumerData": true,
"PaymentMethodsConfiguration": [
{ "Name": "Visa", "Enabled": true },
{ "Name": "MasterCard", "Enabled": true }
]
}
}
```
- Remember to set the correct `baseUrl` in production using `appsettings.Production.json`. The example above contains the test api URL.
- The field `MerchantHandlesConsumerData` is optional, and controls whether you are going to supply details about the payer, or if that should be filled out in the Nets Easy payment page.
- PaymentMethodsConfiguration works just like explained in the Nets documentation [here](https://developer.nexigroup.com/nexi-checkout/en-EU/api/payment-v1/#v1-payments-post-body-paymentmethodsconfiguration-name).
5. Local mocking of `SecretApiKey` can be done with the use of [user secrets](https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-8.0&tabs=windows).
```
dotnet user-secrets init
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ hidden: true
1. [Hent din hemmelige nøkkel fra Nets.](https://developer.nexigroup.com/nexi-checkout/en-EU/docs/access-your-integration-keys/). Pass på at du bruker testnøkkelen under utvikling.
2. Gjør appen din klar for bruk av Azure Key Vault som konfigurasjonkilde, om dette ikke allerede er gjort tidligere. Se [relevant dokumentasjon](/nb/altinn-studio/reference/configuration/secrets/).
3. Legg til din hemmelige nøkkel i Key Vault, med variabelnavnet `NetsPaymentSettings--SecretApiKey`. På denne måten vil den overstyre `SecretApiKey` i `appsettings.json`.
4. Legg til `NetsPaymentSettings` i din `appsettings.json`. Husk å sette riktig `baseUrl` i `appsettings.Production.json`. Feltet `MerchantHandlesConsumerData` er frivillig, og styrer hvorvidt du skal sende med detaljer om betaler, eller om det skal fylles ut i Nets Easy sin betalingsside.
4. Legg til `NetsPaymentSettings` i din `appsettings.json`.
```json
{
"NetsPaymentSettings":
Expand All @@ -17,10 +17,17 @@ hidden: true
"TermsUrl": "https://www.yourwebsite.com/terms",
"ShowOrderSummary": true,
"ShowMerchantName": true,
"MerchantHandlesConsumerData": true
"MerchantHandlesConsumerData": true,
"PaymentMethodsConfiguration": [
{ "Name": "Visa", "Enabled": true },
{ "Name": "MasterCard", "Enabled": true }
]
}
}
```
- Husk å sette riktig `baseUrl` i `appsettings.Production.json`. Eksempelet ovenfor inneholder URL til test API-et.
- Feltet `MerchantHandlesConsumerData` er frivillig, og styrer hvorvidt du skal sende med detaljer om betaler, eller om det skal fylles ut i Nets Easy sin betalingsside.
- PaymentMethodsConfiguration fungerer likt som beskrevet i Nets sin dokumentasjon [her](https://developer.nexigroup.com/nexi-checkout/en-EU/api/payment-v1/#v1-payments-post-body-paymentmethodsconfiguration-name).
5. Lokal mocking av `SecretApiKey` kan gjøres ved hjelp av [user secrets](https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-8.0&tabs=windows).
```
dotnet user-secrets init
Expand Down
111 changes: 66 additions & 45 deletions content/altinn-studio/reference/subform/_index.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,55 +18,76 @@ Subforms are contained in a subform table. Let us go through configuring a subfo
5. In the subform folder, add a `Settings.json` file and a folder called **layouts**.
6. You can add page layouts to the layouts folder as you would for the main form.
{{< notice warning >}}
Subforms do not support attachments, and nesting subforms is not allowed.
Subforms do not support attachments, and nesting subforms is not allowed (subform in subform).
{{< /notice >}}
7. The **Settings.json** file for the sub form is [configured as normal](../../../app/development/ux/pages/#settings).
8. Add a layout set to `layout-sets.json` with the data type of the data model from step 1. The **type** is **subform**. Choose your subform folder name as the id.
7. The button which closes the subform must be a [CustomButton](../../reference/ux/components/custombutton) with a `closeSubform` action. Optionally you can also trigger validation before exiting.
```json
{
"id": "subform-exitbutton",
"type": "CustomButton",
"textResourceBindings": {
"title": "The button title" // Defaults to `general.done` if omitted
},
"actions": [
{
"type": "ClientAction",
"id": "closeSubform",
// Validation is optional
"validation": {
"page": "all",
"show": ["All"]
}
}
]
}
```
8. The **Settings.json** file for the sub form is [configured as normal](../../../app/development/ux/pages/#settings).
9. Add a layout set to `layout-sets.json` with the data type of the data model from step 1. The **type** is **subform**. Choose your subform folder name as the id.
```json
{
"id": "subform-layout-folder-name",
"dataType": "your-subform-dataType",
"type": "subform"
}
```
10. Navigate to the layout for the page in the main form in which you want to add the sub form table.
11. Add `Subform` with the [configuration you want](../../reference/subform/config-options/). Example:
```json
{
"id": "subform-test",
"type": "Subform",
"textResourceBindings": {
"title": "subform-test.title",
"addButton": "subform-test.add"
},
"layoutSet": "subform-layout-folder-name",
"showAddButton": true,
"showDeleteButton": true,
"tableColumns": [
{
"id": "desired-subform-name",
"dataType": "your-subform-dataType",
"type": "subform"
"headerContent": "subform-test.name-header",
"cellContent": {
"query": "Name"
}
},
```
9. Navigate to the layout for the page in the main form in which you want to add the sub form table.
10. Add `Subform` with the [configuration you want](../../reference/subform/config-options/). Example:
```
{
"id": "subform-mopeder",
"type": "Subform",
"textResourceBindings": {
"title": "subform-moped.title",
"addButton": "subform-moped.add"
},
"layoutSet": "moped-subform",
"showAddButton": true,
"showDeleteButton": true,
"tableColumns": [
{
"headerContent": "subform-moped.regno",
"cellContent": {
"query": "RegNo"
}
},
{
"headerContent": "subform-moped.merke",
"cellContent": {
"query": "Merke"
}
},
{
"headerContent": "Ekstra info",
"cellContent": {
"query": "EkstraInfoData",
"default": "moped-extrainfo.value.default"
}
}
]
"headerContent": "subform-test.age-header",
"cellContent": {
"query": "Age"
}
},
{
"headerContent": "subform-test.extrainfo-header",
"cellContent": {
"query": "ExtraInfo",
"default": "subform-test.extrainfo.default"
}
}
]
}
```
{{< panel info >}}
Subforms can have their own summary page and be a part of the main forms summary.
To add a subform into the main forms summary, use the subform id from the main forms layout, and the type "component".
{{< /panel >}}
{{<children />}}

{{< panel info >}}
Subforms can have their own summary page and be a part of the main forms summary.
To add a subform into the main forms summary, use the subform id from the main forms layout, and the type "component".
{{< /panel >}}
89 changes: 55 additions & 34 deletions content/altinn-studio/reference/subform/_index.nb.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,49 +21,70 @@ Underskjemaer tilhører en underskjematabell. La oss gå gjennom opprettelse av
Underskjema støtter ikke vedlegg, og nøsting av underskjema er ikke tillatt (underskjema i underskjema).
{{< /notice >}}
7. **Settings.json** filen for underskjema [konfigureres som normalt](../../../app/development/ux/pages/#innstillinger).
8. Legg til et layout set i `layout-sets.json` med datatypen til datamodellen fra steg 1. Sett **type** til **subform**. Bruk navnet på underskjemamappen som id.
8. Knappen som brukes for å lukke underskjema må være en [CustomButton](../../reference/ux/components/custombutton) med `closeSubform` action. Det er valgfritt å validere underskjema før det lukkes.
```json
{
"id": "subform-exitbutton",
"type": "CustomButton",
"textResourceBindings": {
"title": "The button title" // Blir `general.done` om utelatt
},
"actions": [
{
"type": "ClientAction",
"id": "closeSubform",
// Validering er valgfritt
"validation": {
"page": "all",
"show": ["All"]
}
}
]
}
```
9. Legg til et layout set i `layout-sets.json` med datatypen til datamodellen fra steg 1. Sett **type** til **subform**. Bruk navnet på underskjemamappen som id.
```json
{
"id": "underskjema-mappe-navn",
"dataType": "underskjema-datatype",
"type": "subform"
},
```
9. Naviger til layout for siden i hovedskjemaet der du ønsker å legge inn underskjematabellen.
10. Legg til `Subform` med [ønsket konfigurasjon](../../reference/subform/config-options/). Eksempel:
```
10. Naviger til layout for siden i hovedskjemaet der du ønsker å legge inn underskjematabellen.
11. Legg til `Subform` med [ønsket konfigurasjon](../../reference/subform/config-options/). Eksempel:
```json
{
"id": "subform-test",
"type": "Subform",
"textResourceBindings": {
"title": "subform-test.title",
"addButton": "subform-test.add"
},
"layoutSet": "subform-layout-folder-name",
"showAddButton": true,
"showDeleteButton": true,
"tableColumns": [
{
"headerContent": "subform-test.name-header",
"cellContent": {
"query": "Name"
}
},
{
"id": "subform-mopeder",
"type": "Subform",
"textResourceBindings": {
"title": "subform-moped.title",
"addButton": "subform-moped.add"
},
"layoutSet": "moped-subform",
"showAddButton": true,
"showDeleteButton": true,
"tableColumns": [
{
"headerContent": "subform-moped.regno",
"cellContent": {
"query": "RegNo"
}
},
{
"headerContent": "subform-moped.merke",
"cellContent": {
"query": "Merke"
}
},
{
"headerContent": "Ekstra info",
"cellContent": {
"query": "EkstraInfoData",
"default": "moped-extrainfo.value.default"
}
}
]
"headerContent": "subform-test.age-header",
"cellContent": {
"query": "Age"
}
},
{
"headerContent": "subform-test.extrainfo-header",
"cellContent": {
"query": "ExtraInfo",
"default": "subform-test.extrainfo.default"
}
}
]
}
```
{{< panel info >}}
Underskjema kan ha sin egen oppsummeringsside og være en del av hovedskjema sin oppsummering.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,54 @@ weight: 120
{{% notice warning %}}
This documentation is a work in progess. Subforms are currently in preview-release.
{{% /notice %}}

## Parameters

| Parameter | Type | Required | Description |
| --------------------------------------------------------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| id | string | Yes | Unique ID, same as ID on other components. Must be unique in the layout file, and should be unique across pages. |
| type | string | Yes | Must be 'Subform' |
| layoutSet | string | Yes | The layout set to load for this subform, must be unique IDs within layout-sets.json. |
| [tableColumns](#tablecolumns) | array | Yes | Array of objects containing column definitions for the subform table. Each entry provides a header, cell query and cell default value. |
| showAddButton | bool | No | Allow users to add subforms. Defaults to true. |
| showDeleteButton | bool | No | Allow users to delete subforms. Defaults to true. |
| [textResourceBindings](#textresourcebindings) | object | No | Object describing text resource bindings for the subform component. |

## textResourceBindings

The following keys in the `textResourceBindings` object are available for customization:

- `title` - The title of the subform component.
- `description` - The description text shown underneath the title.
- `addButton` - The text for the add-button.

## tableColumns

The `tableColumns` entry contains a list of objects that define the columns of the subform table.

Each entry must contain a `headerContent` and `cellContent` definition. `cellContent` is in turn also an object,
which must include a `query` parameter alongside an optional `default` parameter.

{{< notice info >}}
The *query* value is a lookup path for the subform's data model.

Eg. `propertyName` or `propertyName.nestedProperty`
{{< /notice >}}

```json
"tableColumns": [
{
"headerContent": "Name",
"cellContent": {
"query": "name"
}
},
{
"headerContent": "Age",
"cellContent": {
"query": "age",
"default": "[Unknown age]"
}
},
]
```
Loading

0 comments on commit fc7ceda

Please sign in to comment.