# Note di aggiornamento

<PageBadges />

Questa pagina elenca le modifiche di form0 che richiedono un tuo intervento. Se una versione non
compare qui, puoi installarla senza cambiare il codice. Per le nuove funzionalità e le correzioni,
consulta le note di rilascio di [form0-core](https://github.com/paqu-io/form0-core/releases),
[form0-react](https://github.com/paqu-io/form0-react/releases),
[form0-react-native](https://github.com/paqu-io/form0-react-native/releases) e
[form0-cli](https://github.com/paqu-io/form0-cli/releases).

Le modifiche sono elencate dalla più recente. Per aggiornare, controlla tutte le voci più recenti
delle versioni che usi oggi.

## Trova le modifiche che ti riguardano

Confronta le versioni che usi con ogni riga. Una riga ti riguarda se la tua versione è precedente a
quella indicata. La data è quella di pubblicazione del primo pacchetto con la modifica. Un pacchetto
non elencato non è interessato.

| Data         | Modifica                                                                                                                                                                    | Versioni                                                   |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| `2026-10-31` | [Le righe vuote salvate rimangono nel record](#le-righe-vuote-salvate-rimangono-nel-record)                                                                                 | core 0.11.0, react 0.10.0, react-native 0.11.0, cli 0.10.0 |
| `2026-10-30` | [I valori dei campi vengono controllati per tipo](#i-valori-dei-campi-vengono-controllati-per-tipo)                                                                         | core 0.10.0, react 0.9.0, react-native 0.10.0, cli 0.10.0  |
| `2026-10-30` | [Gli schemi che cancellano i valori nascosti richiedono tutti i pacchetti aggiornati](#gli-schemi-che-cancellano-i-valori-nascosti-richiedono-tutti-i-pacchetti-aggiornati) | core 0.10.0, react 0.9.0, react-native 0.10.0, cli 0.10.0  |
| `2026-10-29` | [I campi di scelta richiedono identificatori testuali in `SETVALUE()`](#i-campi-di-scelta-richiedono-identificatori-testuali-in-setvalue)                                   | core 0.9.0, react 0.6.0, react-native 0.7.0, cli 0.9.0     |
| `2026-10-28` | [`FormRenderer` richiede `recordKind`](#formrenderer-richiede-recordkind)                                                                                                   | react 0.5.0, react-native 0.6.0                            |
| `2026-10-27` | [I gestori non possono modificare un record in sola lettura](#i-gestori-non-possono-modificare-un-record-in-sola-lettura)                                                   | core 0.8.0, react 0.5.0, react-native 0.6.0, cli 0.8.0     |
| `2026-10-22` | [Le condizioni possono leggere solo il proprio record e i suoi genitori](#le-condizioni-possono-leggere-solo-il-proprio-record-e-i-suoi-genitori)                           | core 0.6.0                                                 |
| `2026-10-08` | [Gli editor di riga su mobile non eseguono più gli eventi del record](#gli-editor-di-riga-su-mobile-non-eseguono-più-gli-eventi-del-record)                                 | react-native 0.3.0                                         |

## Aggiorna i pacchetti insieme

Ogni binding dipende da una versione corrispondente di `form0-core`, quindi installali insieme:

- React: `npm install form0-react@latest form0-core@latest`
- React Native: `npm install form0-react-native@latest form0-core@latest`
- CLI: `npm install --global form0-cli@latest`

## Le righe vuote salvate rimangono nel record

**Pubblicato:** 2026-10-31

**Si applica da:** `form0-core` 0.11.0, `form0-react` 0.10.0, `form0-react-native` 0.11.0,
`form0-cli` 0.10.0

**Intervieni se** una sezione ripetibile ha solo campi facoltativi e il tuo server o il tuo database
si aspetta una risposta in ogni [riga](/it/core/fields/containers#repeatablesection). Un utente può
aggiungere una riga e salvarla senza scrivere nulla. Prima quella riga veniva tolta dal record
inviato. Ora rimane, con il suo identificatore, i suoi timestamp e risposte `null`.

**Cosa fare:** Contrassegna un campo della riga come `required`, così la riga non può essere salvata
vuota, oppure gestisci queste righe sul tuo server.
[Righe vuote salvate](/it/core/output-records#righe-vuote-salvate) mostra il risultato.

**Verifica:** Apri il modulo, aggiungi una riga e salvala senza scrivere nulla. Fai clic su
**Submit** e conferma che il tuo server accetta il record.

## I valori dei campi vengono controllati per tipo

**Pubblicato:** 2026-10-30

**Si applica da:** `form0-core` 0.10.0, `form0-react` 0.9.0, `form0-react-native` 0.10.0,
`form0-cli` 0.10.0

**Intervieni se** la tua applicazione o i tuoi record salvati contengono valori che non
corrispondono al tipo del campo. form0 non li converte, quindi un campo visibile con uno di questi
valori mostra un errore e blocca **Submit**:

| Campo          | Ora è un errore            | Usa invece                       |
| -------------- | -------------------------- | -------------------------------- |
| `NumericField` | `"12"`                     | `12`                             |
| `TextField`    | `42`                       | `"42"`                           |
| `DateField`    | `2026-02-30`, `not-a-date` | Una data reale come `YYYY-MM-DD` |
| `TimeField`    | `24:00`                    | `HH:MM` o `HH:MM:SS`             |

**Cosa fare:** Converti i valori prima di passarli a `initialValues`, `initialSnapshot`,
`overrideValues` o `SETVALUE()`, e correggi i record salvati che li contengono. Anche un server che
chiama `prepareSubmission()` rifiuta questi valori.

**Verifica:** Salva un campione dei tuoi valori come `values.json` ed esegui questo comando. Ogni
problema compare in `errors` nell'output:

```bash
form0 run path/to/schema.json --values values.json
```

## Gli schemi che cancellano i valori nascosti richiedono tutti i pacchetti aggiornati

**Pubblicato:** 2026-10-30

**Si applica da:** `form0-core` 0.10.0, `form0-react` 0.9.0, `form0-react-native` 0.10.0,
`form0-cli` 0.10.0

**Intervieni se** aggiungi `visible_preserve_value` a uno schema. I pacchetti precedenti rifiutano
l'attributo con questo errore:

```text
Field "email" (TextField) does not support visible_preserve_value attribute
```

**Cosa fare:** Aggiorna tutti i pacchetti che leggono lo schema prima di aggiungere l'attributo,
compresi `form0-core` sul tuo server e `form0-cli` sulla tua macchina.

**Verifica:** Esegui questo comando. Termina con stato `0`:

```bash
form0 validate path/to/schema.json
```

## I campi di scelta richiedono identificatori testuali in `SETVALUE()`

**Pubblicato:** 2026-10-29

**Si applica da:** `form0-core` 0.9.0, `form0-react` 0.6.0, `form0-react-native` 0.7.0, `form0-cli`
0.9.0

**Intervieni se** un gestore passa a `SETVALUE()` un valore di scelta come numero, come booleano o
con una forma errata.

**Cosa fare:** `SingleChoiceField` e `BooleanField` accettano un identificatore testuale.
`MultiChoiceField` accetta un array di identificatori testuali.

```js
// Before: these leave the field unchanged
SETVALUE("rating", 1)
SETVALUE("tags", "red")

// Now
SETVALUE("rating", "1")
SETVALUE("tags", ["red"])
```

Un gestore che scrive in un campo non raggiungibile, come un campo di una
[riga di sezione ripetibile](/it/core/fields/containers#repeatablesection) da un gestore del modulo
principale, ora perde tutte le sue chiamate a `SETVALUE()`, non solo quella.

**Verifica:** Cerca `SETVALUE(` nei tuoi schemi, attiva ogni gestore e verifica che il campo mostri
il valore. Versioni precedenti di `form0-react` possono lasciare il campo invariato senza messaggi
console in modalità gestita. I binding con `eventDiagnostics` segnalano questi errori per impostazione
predefinita; controlla anche il modulo.

## `FormRenderer` richiede `recordKind`

**Pubblicato:** 2026-10-28

**Si applica da:** `form0-react` 0.5.0, `form0-react-native` 0.6.0

**Intervieni se** usi `FormRenderer` di `form0-react` o `form0-react-native`. Senza `recordKind`,
genera questo errore:

```text
form0: events.recordKind must be "new" or "existing" when lifecycle is enabled.
```

**Cosa fare:** Imposta `recordKind` su `"new"` per un nuovo record, oppure su `"existing"` quando
apri un record salvato:

```jsx
<FormRenderer engineOptions={{ events: { recordKind: "new" } }} schema={schema} />
```

Gli eventi del ciclo di vita e gli eventi di focus e blur dei campi ora sono attivi per impostazione
predefinita, quindi i relativi gestori iniziano a essere eseguiti. I controlli integrati non
emettono `click` automaticamente. Per mantenere il comportamento precedente, disattiva questi
eventi:

```jsx
<FormRenderer
  engineOptions={{ events: { lifecycle: false, fieldInteractions: [] } }}
  schema={schema}
/>
```

**Verifica:** Apri il modulo e verifica che venga visualizzato senza l'errore. Se usi gestori del
ciclo di vita, verifica che ognuno venga eseguito una sola volta.

## I gestori non possono modificare un record in sola lettura

**Pubblicato:** 2026-10-27

**Si applica da:** `form0-core` 0.8.0, `form0-react` 0.5.0, `form0-react-native` 0.6.0, `form0-cli`
0.8.0

**Intervieni se** un gestore di `load-record` chiama `SETVALUE()` e il modulo può aprirsi in sola
lettura. `load-record` viene eseguito in entrambe le modalità.

**Cosa fare:** Sposta la scrittura in `new-record` o `edit-record`:

```js
// Before: rejected when the form opens read-only
ON("load-record", function () {
  SETVALUE("status_note", "Opened")
})

// Now: runs only when the user is editing
ON("edit-record", function () {
  SETVALUE("status_note", "Opened")
})
```

Puoi anche mantenere il gestore e controllare `event.mode`:

```js
ON("load-record", function (event) {
  if (event.mode === "edit") SETVALUE("status_note", "Opened")
})
```

**Verifica:** Apri il modulo con `mode="readonly"`. Se un gestore scrive ancora, la console mostra
questo messaggio e il modulo si apre senza le modifiche di quel gestore:
`View-mode handlers cannot change record data.`

## Le condizioni possono leggere solo il proprio record e i suoi genitori

**Pubblicato:** 2026-10-22

**Si applica da:** `form0-core` 0.6.0

**Intervieni se** il tuo schema ha sezioni ripetibili e una condizione legge un campo di riga
dall'esterno di quella riga. `form0-core` rifiuta lo schema con un errore come questo:

```text
Field "note" visible_conditions references "amount" outside its record scope (owner: main form; reference: payments)
```

**Cosa fare:** Fai puntare la condizione a un campo della stessa riga, di una riga genitore o del
modulo principale. [Ambiti padre e figlio](/it/core/engine/parent-child-scopes) contiene un esempio
completo.

**Verifica:** Esegui questo comando per ogni schema. Termina con stato `1` e mostra l'errore se una
condizione è fuori ambito:

```bash
form0 validate path/to/schema.json
```

## Gli editor di riga su mobile non eseguono più gli eventi del record

**Pubblicato:** 2026-10-08

**Si applica da:** `form0-react-native` 0.3.0

**Intervieni se** aggiorni da `form0-react-native` 0.2.x e un gestore si aspetta che `load-record`,
`edit-record` o `change` vengano eseguiti dentro una riga ripetibile.

**Cosa fare:** Sposta la logica di riga negli eventi ripetibili, usando il `data_name` della tua
sezione ripetibile:

```js
ON("load-repeatable", "rows", function () {
  // Runs when a row opens
})

ON("new-repeatable", "rows", function () {
  // Runs when a new row starts editing
})

ON("edit-repeatable", "rows", function () {
  // Runs when an existing row starts editing
})
```

**Verifica:** Apri una riga e verifica che il gestore venga eseguito. I gestori del modulo
principale non vengono più eseguiti quando si apre una riga.
