> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aftersell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Blok Rewards

> Blok Rewards w Aftersell Cart: progowa darmowa wysyłka, rabaty i darmowe prezenty, w tym różne progi według rynku, kraju lub waluty.

> Blok **Rewards** pokazuje pasek postępu w kierunku progów nagród (darmowa wysyłka, rabat na zamówienie lub darmowy prezent), które klienci odblokowują, dodając więcej do koszyka — motywuje do większych koszyków, pokazując klientom, jak blisko są następnej nagrody, i automatycznie przyznaje nagrody spełniające warunki. Progi mogą się różnić w zależności od rynku, kraju i waluty.

<Frame>
  <img src="https://mintcdn.com/aftersell/1Y3gBpUfxv16VGSW/images/aftersell/cart-rewards-block-progress-bar-toward-tiered.png?fit=max&auto=format&n=1Y3gBpUfxv16VGSW&q=85&s=14074a434c0024287bd1dd36051af69b" alt="Blok Rewards pokazujący pasek postępu w kierunku progowych nagród, takich jak darmowa wysyłka i darmowy prezent" width="1412" height="312" data-path="images/aftersell/cart-rewards-block-progress-bar-toward-tiered.png" />
</Frame>

<div id="tier-threshold-validation">
  ## Walidacja progów poziomów
</div>

Lista poziomów każdego warunku mieści do **4** poziomów — blok Rewards z kilkoma warunkami rynku, kraju lub waluty przechowuje do 4 na warunek, a ponieważ pokazywany jest pierwszy pasujący warunek, pojedynczy klient widzi maksymalnie 4. Próg każdego poziomu musi być ściśle większy niż poziomu powyżej — progi muszą rosnąć. Jeśli próg poziomu jest równy lub niższy od progu poprzedniego poziomu, przy polu progu tego poziomu pojawia się błąd, a przycisk **Save** jest zablokowany do czasu rozwiązania problemu. Dotknięty poziom automatycznie się rozwija, aby błąd był widoczny.

Na przykład, jeśli Poziom 1 jest ustawiony na \$100, Poziom 2 musi być ustawiony na \$101 lub więcej.

<div id="behavior">
  ## Działanie
</div>

* Postęp **wyklucza** z sumy pozycje prezentów z nagród, pozycje product add-on, pozycje ochrony przesyłki oraz karty podarunkowe, więc te produkty nie przybliżają sztucznie klienta do nagrody.
* Komunikat pokazuje pozostałą kwotę lub liczbę do następnego poziomu albo komunikat ukończenia, gdy wszystkie poziomy zostaną osiągnięte.
* **Darmowe prezenty są przyznawane automatycznie.** Gdy klient osiągnie poziom prezentu, prezent jest dodawany do koszyka; jeśli spadnie poniżej, prezent jest usuwany. Przy wyłączonym sumowaniu nagród przyznawany jest tylko prezent najwyższego osiągniętego poziomu.
* **Add back removed free gifts** kontroluje, co się dzieje, gdy klient ręcznie usunie automatycznie przyznany prezent. Gdy jest włączone (domyślnie), prezent jest automatycznie dodawany ponownie przy następnej aktualizacji koszyka. Gdy jest wyłączone, usunięcie jest respektowane i prezent pozostaje poza koszykiem do końca tej sesji, dzięki czemu klienci nie walczą z koszykiem, żeby odmówić prezentu.

<div id="settings">
  ## Ustawienia
</div>

| Ustawienie                                 | Co kontroluje                                                                                                                                                             | Domyślnie               |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| **Rewards calculation**                    | Czy postęp jest mierzony według **Cart total (\$)** czy **Cart quantity (#)**.                                                                                            | Cart total (\$)         |
| **Stack rewards across tiers**             | Włączone: stosuje każdą nagrodę odblokowaną przez kupującego, aż do najwyższego osiągniętego poziomu. Wyłączone: stosuje tylko nagrodę najwyższego odblokowanego poziomu. | Włączone                |
| **Add back removed free gifts**            | Ponownie dodaje zdobyty darmowy prezent po tym, jak kupujący go usunie.                                                                                                   | Włączone                |
| **Show tier icons**                        | Czy ikony poziomów pojawiają się na pasku.                                                                                                                                | Włączone                |
| **Show tier labels**                       | Czy tekst etykiety pojawia się przy każdym znaczniku poziomu na pasku.                                                                                                    | Wyłączone               |
| **Text after completing full rewards bar** | Tekst sformatowany pokazywany po osiągnięciu wszystkich poziomów.                                                                                                         | `All rewards unlocked!` |
| **Tiers**                                  | Poziomy nagród (poniżej). Do **4** na warunek; panel pokazuje licznik `n/4` i wyłącza **Add tier** po osiągnięciu limitu.                                                 | Brak                    |

Każdy **poziom** rozwija się do:

| Ustawienie poziomu                         | Co kontroluje                                                                                                                                             | Domyślnie                                    |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| **Reward type**                            | **Free shipping**, **Order discount** lub **Free gift**. Zmiana resetuje tytuł i etykietę paska postępu tego poziomu do domyślnego brzmienia nowego typu. | Free shipping                                |
| **Threshold (\$)** / **Threshold (items)** | Suma koszyka lub liczba produktów odblokowująca poziom. Etykieta podąża za **Rewards calculation**. Minimum `1`.                                          | `50`                                         |
| **Discount value type**                    | Tylko rabaty na zamówienie: **Percentage (%)** lub **Fixed amount (\$)**.                                                                                 | Percentage (%)                               |
| **Percentage off** / **Amount off**        | Tylko rabaty na zamówienie: wysokość rabatu. Procenty są ograniczone do 100.                                                                              | `10`                                         |
| **Title before achieving tier**            | Sformatowany komunikat pokazywany, gdy klientowi wciąż brakuje do poziomu. Obsługuje token `{{amount}}`.                                                  | `You're {{amount}} away from free shipping!` |
| **Progress bar label**                     | Etykieta pokazywana na znaczniku poziomu.                                                                                                                 | `Free shipping`                              |
| **Gift products**                          | Tylko darmowe prezenty: przyznawane produkty/warianty, do **3** na poziom.                                                                                | Brak                                         |

<div id="placement-and-limits">
  ## Umiejscowienie i limity
</div>

* **Region:** dowolny (góra, korpus lub dół).
* **Maksymalnie:** 1 na stan koszyka — wypełniony koszyk i pusty koszyk mają każdy swój własny.
* **Stan:** zarówno wypełniony, jak i pusty koszyk.
* Nie jest dodawany domyślnie. Nie jest zablokowany, więc możesz go usunąć lub ukryć.

<div id="per-market-rewards">
  ## Nagrody per rynek
</div>

Rewards to blok, który obecnie ma pełny interfejs **Conditions**: zdefiniuj wiele zestawów poziomów, każdy targetujący **rynek Shopify**, **kraj klienta** lub **walutę klienta** (**In** lub **Not in**). Klientowi pokazywany jest pierwszy pasujący warunek. Jeśli żaden nie pasuje, blok niczego dla niego nie renderuje.

Każdy warunek to karta w panelu ustawień (**When** + warunek). Poniżej sekcja **Display** zawiera poziomy dla tego warunku. Trzymaj szczegółowe reguły powyżej ogólnego warunku **All buyers**. Kolejność to priorytet, a nie kombinacja wszystkich dopasowań.

Nie możesz usunąć ostatniego warunku (zawsze wymagany jest co najmniej jeden). Podgląd w edytorze nie ocenia rzeczywistego kupującego; wybierz warunek w panelu, aby podejrzeć ten wariant.

O tym, jak warunki mają się do przełącznika z ikoną oka i innych bloków, przeczytasz w [Pokazywanie lub ukrywanie według rynku, kraju lub waluty](/pl/aftersell/cart/blocks-overview#show-or-hide-by-market-country-or-currency).

<div id="custom-template">
  ## Szablon niestandardowy
</div>

Obsługuje [szablon niestandardowy](/pl/aftersell/cart/custom-templates) z zakładki Code, który zastępuje wbudowany kod tego bloku Twoim JSX. Oto propsy, które otrzymuje.

| Prop                 | Typ           | Do czego służy                                                                                                                     |
| -------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `milestones`         | `Milestone[]` | Poziomy nagród, w kolejności. Zobacz poniżej.                                                                                      |
| `rewardsMessageHtml` | `string`      | Komunikat postępu lub ukończenia jako oczyszczony HTML.                                                                            |
| `showIcons`          | `boolean`     | Czy sprzedawca włączył ikony poziomów.                                                                                             |
| `showTierLabels`     | `boolean`     | Czy sprzedawca włączył etykiety poziomów na pasku.                                                                                 |
| `isLoading`          | `boolean`     | Tutaj zawsze `false`: blok renderuje wbudowany szkielet podczas ładowania i wywołuje Twój szablon dopiero, gdy koszyk jest gotowy. |

Każdy `Milestone`:

| Pole              | Typ                    | Do czego służy                                                                                                                 |
| ----------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `id`              | `string`               | Stabilny klucz poziomu. Użyj go jako swojego `key` w React.                                                                    |
| `label`           | `string`               | Etykieta poziomu, jako zwykły tekst.                                                                                           |
| `icon`            | `ReactElement \| null` | Wstępnie wyrenderowany element ikony. `null`, gdy poziom go nie ma. Renderuj go bezpośrednio: `{m.icon}`.                      |
| `isCompleted`     | `boolean`              | Czy koszyk osiągnął ten poziom.                                                                                                |
| `positionPercent` | `number`               | Jak bardzo wypełniony jest **własny segment tego poziomu** na pasku, od `0` do `100` — a nie pozycja na jednym wspólnym pasku. |

```jsx theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
function Rewards(props) {
  return (
    <div>
      <div dangerouslySetInnerHTML={{ __html: props.rewardsMessageHtml }} />

      {props.milestones.map((milestone) => (
        // Each tier gets its own track; positionPercent (0-100) fills that track.
        <div key={milestone.id}>
          <div style={{ background: '#E9E9E9', height: 5 }}>
            <div style={{ width: `${milestone.positionPercent}%`, background: '#000', height: 5 }} />
          </div>
          {props.showIcons && milestone.icon ? milestone.icon : null}
          {props.showTierLabels && milestone.label !== '' ? milestone.label : null}
        </div>
      ))}
    </div>
  );
}
```

`m.icon` to **wstępnie wyrenderowany element**, a nie URL czy nazwa ikony, więc renderuj go bezpośrednio, zamiast próbować budować z niego element obrazu.

<Note>
  `milestones` nigdy nie jest puste wewnątrz szablonu niestandardowego. Gdy nie ma poziomów do pokazania, blok niczego nie renderuje, a Twój szablon w ogóle nie jest wywoływany, więc nie potrzebujesz gałęzi dla stanu pustego.
</Note>

<div id="design">
  ## Wygląd
</div>

Stylizuj ten blok za pomocą jego sekcji **Design** w panelu ustawień. Są to nadpisania na poziomie bloku, które nakładają się na Twój globalny design i wracają do niego, gdy pole jest puste.

<div id="text">
  ### Text
</div>

Sekcja **Text** w Design pozwala kontrolować typografię elementów tekstowych nagród. Użyj selektora **Text element**, aby przełączać się między nimi.

**Message** — komunikat postępu lub ukończenia. Obsługuje także niestandardową rodzinę czcionek. Pogrubienie i kolor tekstu ustawia się w edytorze Rich Text powyżej (w zakładce Settings), a nie tutaj.

| Ustawienie         | Co kontroluje                | Domyślnie           |
| ------------------ | ---------------------------- | ------------------- |
| **Font**           | Rodzina czcionek komunikatu. | Dziedziczy z motywu |
| **Size**           | Rozmiar czcionki.            | `14px`              |
| **Line height**    | Mnożnik wysokości linii.     | `1.43`              |
| **Letter spacing** | Odstępy między znakami.      | Normal              |

**Tier label** — etykieta pokazywana na każdym znaczniku poziomu. Dostępna tylko wtedy, gdy włączone jest **Show tier labels**.

| Ustawienie         | Co kontroluje                                                 | Domyślnie                  |
| ------------------ | ------------------------------------------------------------- | -------------------------- |
| **Text color**     | Kolor etykiety poziomu.                                       | Kolor tekstu drugorzędnego |
| **Size**           | Rozmiar czcionki.                                             | `13px`                     |
| **Weight**         | Grubość czcionki — Light, Regular, Medium, Semibold lub Bold. | Regular (400)              |
| **Line height**    | Mnożnik wysokości linii.                                      | `1.2`                      |
| **Letter spacing** | Odstępy między znakami.                                       | Normal                     |

<Tip>
  Kliknięcie elementu tekstowego bezpośrednio w podglądzie koszyka podświetla go i automatycznie otwiera jego kontrolki w panelu.
</Tip>

Czym są ustawienia wyglądu? Dowiedz się więcej tutaj: [Ustawienia wyglądu](/pl/aftersell/cart/design-settings).
