# Edytor oświadczeń

Dla komponentów **Oświadczenia** oraz **Oświadczenia na warstwie** dostępny jest specjalizowany edytor. Umożliwia on definiowanie oświadczeń korzystając z formatu JSON.

## Lokalizacja edytora

Edytor oświadczeń dostępny jest w sekcji **Podstawowe właściwości** komponentów **Oświadczenia** oraz **Oświadczenia na warstwie**.

<div data-with-frame="true"><img src="https://content.gitbook.com/content/2CssJT0zIo4SJQLbSZ6l/blobs/csYCRrr14KxrfbFOmt5n/7s_files/image2020-6-9_10-43-46.png" alt=""></div>

<p align="center"><em><strong>Ilustracja 1.</strong> Miejsce osadzenia edytora oświadczeń</em></p>

Otwarcie edytora następuje po kliknięciu w **Dodaj oświadczenie**.

## Prezentacja edytora

Otwarcie edytora oświadczeń skutkuje wysunięciem szuflady prezentującej obszar do wpisywania tekstu w formacie JSON. Dla nowo utworzonego komponentu zawiera on jedynie nawiasy klamrowe bez zawartości. Po lewej stronie edytora widoczne są numery wierszy.

Edytor oświadczeń może być wyświetlony w trybie tylko do odczytu oraz w trybie do edycji. Tryb tylko do odczytu umożliwia jedynie podejrzenie zapisanych wartości.

<div data-with-frame="true"><img src="https://content.gitbook.com/content/2CssJT0zIo4SJQLbSZ6l/blobs/8EGwf4lk03qdwg2blDgZ/7s_files/image2020-6-9_10-54-51.png" alt="Ilustracja 2. Wygląd edytora oświadczeń dla nowo utworzonego komponentu"></div>

Edytor w czasie rzeczywistym podkreśla zarówno błędy semantyczne, jak i składniowe. Po najechaniu kursorem myszy na czerwone podkreślenie symbolizujące wystąpienie błędu, wyświetlony zostaje dymek ukazujący jego treść.

<div data-with-frame="true"><img src="https://content.gitbook.com/content/2CssJT0zIo4SJQLbSZ6l/blobs/fByJEMZxEU3zLD6JetT8/7s_files/image2020-6-9_11-3-2.png" alt="Ilustracja 3. Przykładowa informacja o wymagalności pól"></div>

## Działanie edytora

Edytor oświadczeń obsługuje funkcjonalność podpowiadania składni. Po wciśnięciu kombinacji klawiszy **Ctrl + Spacja** zostaje wyświetlona podpowiedź zawierająca możliwe do wpisania pola w zależności od aktualnej pozycji kursora w edytorze. Zaznaczenie którejś z nich i wciśnięcie klawisza **Enter** powoduje wprowadzenie danej podpowiedzi do edytora.

<div data-with-frame="true"><img src="https://content.gitbook.com/content/2CssJT0zIo4SJQLbSZ6l/blobs/m8NqoeCfjlMxyCn9MDq7/7s_files/image2020-6-9_11-21-14.png" alt="Ilustracja 4. Podpowiedzi wyświetlane po wciśnięciu kombinacji klawiszy Ctrl + Spacja"></div>

Edytor można zamknąć na dwa sposoby. Pierwszym z nich jest symbol **X** znajdujący się w prawym górnym rogu (widoczny na Ilustracji 2). Drugim sposobem jest kliknięcie poza obszarem edytora.

{% hint style="info" %}
Jeżeli przy zamykaniu edytora wpisane dane są poprawne semantycznie oraz składniowo — zostają one zapisane. Jeżeli zawierają jakikolwiek błąd — zmiany zostają porzucone. W obu przypadkach szuflada się zamyka.
{% endhint %}

## Dostępne pola

Edytor oświadczeń przyjmuje poniżej wymienione pola. Ich znaczenie zostanie wyjaśnione w następnym paragrafie. Pola wymagane zostały dodatkowo oznaczone:

{% code title="Przykładowa struktura JSON" expandable="true" %}

```json
{
  "items": [
    {
      "controls": [
        {
          "mid": "tekst",                 // wymagane
          "titleKey": "tekst",           // wymagane
          "type": "CHECKBOX|RADIO",      // możliwe wartości CHECKBOX lub RADIO, wymagane
          "visibleCondition": "tekst",
          "styleName": "tekst",
          "requiredCondition": "tekst",
          "notSelectedErrorTextKey": "tekst",
          "requiredNotAcceptedErrorTextKey": "tekst",
          "mastercheckbox": "tekst"
        }
        // ...
      ],
      "actionBindings": {
        "bindings": [
          {
            "event": "EDIT"             // możliwa wartość EDIT, wymagane
          }
          // ...
        ]
      },
      "mid": "tekst",                   // wymagane
      "textContent": "tekst",
      "textContentUnexpanded": "tekst",
      "visibleCondition": "tekst",
      "expandableCondition": "tekst",
      "expandedCondition": "tekst",
      "descriptionKey": "tekst",
      "nativePopupTitleKey": "tekst",
      "styleName": "tekst"
    }
    // ...
  ]
}
```

{% endcode %}

### Znaczenie pól

| Właściwość                | Opis                                                                                                                                                                                                                                                                                                                                             |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **items**                 | Lista zdefiniowanych oświadczeń do wyświetlenia.                                                                                                                                                                                                                                                                                                 |
| **textContent**           | Artefakt z treścią oświadczenia wyświetlaną poniżej tytułu podanego w **titleKey**. Jeśli artefakt zostanie wskazany, a nie zostanie podany klucz **titleKey** i zdefiniowana kontrolka w **controls**, to treść textContentu nie będzie zawierała kontrolki.                                                                                    |
| **textContentUnexpanded** | Artefakt z treścią oświadczenia wyświetlaną przy zwiniętym oświadczeniu.                                                                                                                                                                                                                                                                         |
| **mid**                   | Biznesowy identyfikator danego oświadczenia.                                                                                                                                                                                                                                                                                                     |
| **visibleCondition**      | Warunki, przy jakich dane oświadczenie ma być wyświetlone. Jeżeli warunek jest pusty lub nieprawidłowy, zostanie wyewoluowana wartość "true".                                                                                                                                                                                                    |
| **styleName**             | Nazwa stylu.                                                                                                                                                                                                                                                                                                                                     |
| **expandableCondition**   | Warunek, dla którego przy tytule oświadczenia ma się wyświetlić tekst do zwijania/rozwijania treści oświadczenia. Jeżeli warunek jest pusty lub nieprawidłowy, zostanie wyewoluowana wartość "false". Uwaga: jeśli **titleKey** jest niezdefiniowany, tekst nie pojawi się.                                                                      |
| **expandedCondition**     | Jeśli **expandableCondition** jest ustawiony na "true", właściwość **expandedCondition** decyduje o tym, czy i kiedy treść oświadczenia ma być domyślnie rozwinięta. Jeżeli warunek jest pusty lub nieprawidłowy, zostanie wyewoluowana wartość "true" (treść rozwinięta).                                                                       |
| **titleKey**              | Klucz tytułu pojedynczego oświadczenia definiowanego w zakładce **Tłumaczenia**. W kluczach rozwiązują się zmienne.                                                                                                                                                                                                                              |
| **nativePopupTitleKey**   | Klucz tytułu natywnego popupu, który się wyświetli przy kliknięciu w "Więcej" → ten tekst można nadpisać przez i18n.statements.item.native.more w zakładce **Tłumaczenia**. Popup wyświetla się tylko w aplikacji natywnej. W przypadku braku zdefiniowania **nativePopupTitleKey** jako tytuł zostanie wyświetlona wartość klucza **titleKey**. |
| **event**                 | Zdarzenie, które należy dodać, jeżeli została zdefiniowana akcja na wniosku powiązana z danym itemem oświadczenia.                                                                                                                                                                                                                               |
| **controls**              | Lista zdefiniowanych kontrolek danego oświadczenia. Wyjaśnienie pól obiektu **controls** znajduje się poniżej.                                                                                                                                                                                                                                   |

### **Definiowanie listy kontrolek (controls)**

| Właściwość                          | Opis                                                                                                                                       |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| **mid**                             | Biznesowy identyfikator kontrolki (pole wymagane).                                                                                         |
| **titleKey**                        | Klucz tytułu wyświetlanego przy/nad kontrolką.                                                                                             |
| **visibleCondition**                | Warunki, przy jakich dana kontrolka ma być wyświetlona. Jeżeli warunek jest pusty lub nieprawidłowy, zostanie wyewoluowana wartość "true". |
| **requiredCondition**               | Warunek, dla którego kontrolka ma być wymagalna. Jeżeli warunek jest pusty lub nieprawidłowy, zostanie wyewoluowana wartość "true".        |
| **type**                            | Typ kontrolki: **RADIO** - oświadczenie z dwoma radio TAK/NIE (inne typy jak CHECKBOX też mogą występować zgodnie z definicją JSON).       |
| **notSelectedErrorTextKey**         | Klucz tłumaczenia nadpisującego tekst "Nie dokonałeś wyboru".                                                                              |
| **requiredNotAcceptedErrorTextKey** | Klucz tłumaczenia nadpisującego tekst "Zgoda na wybrane oświadczenie jest wymagana".                                                       |
| **styleName**                       | Nazwa stylu.                                                                                                                               |
| **mastercheckbox**                  | Id master checkboxa.                                                                                                                       |
