> ## 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.

# Cart-object

> De vorm van de Aftersell Cart SDK-winkelwagen en zijn regels: elk veld op de winkelwagen, winkelwagenregels, bundels en selling plans.

Eén objectvorm stroomt door de hele SDK. Het is wat [`getCart()`](/nl/aftersell/cart/sdk-actions#getcart) teruggeeft, wat [`cart_loaded` en `cart_updated`](/nl/aftersell/cart/sdk-events) aan je handler doorgeven, en wat een [Custom code-blok](/nl/aftersell/cart/custom-code-blocks) ontvangt.

<Note>
  **Alle geldbedragen zijn in de kleinste munteenheid van de valuta** (centen voor USD), nooit een geformatteerde string. `5779` is \$57,79. Gebruik [`formatMoney`](/nl/aftersell/cart/sdk-actions#formatmoneycents) om het weer te geven.
</Note>

<div id="the-cart">
  ## De winkelwagen
</div>

| Veld                   | Type                     | Beschrijving                                                                                                                                            |
| ---------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `token`                | `string`                 | Het Shopify-carttoken.                                                                                                                                  |
| `items`                | `AftersellCartLine[]`    | De regelitems. Zie [winkelwagenregels](#cart-lines).                                                                                                    |
| `itemCount`            | `number`                 | Totale artikelhoeveelheid, zoals de shopper het ziet.                                                                                                   |
| `hasSubscriptionItems` | `boolean`                | `true` wanneer minstens één regel in `items` een selling plan heeft, inclusief add-on-regels die `itemCount` weglaat. `false` bij een lege winkelwagen. |
| `totalPrice`           | `number`                 | Huidig totaal, in centen.                                                                                                                               |
| `originalTotalPrice`   | `number`                 | Totaal vóór kortingen, in centen.                                                                                                                       |
| `totalDiscount`        | `number`                 | Kortingstotaal, in centen.                                                                                                                              |
| `compareAtTotalPrice`  | `number \| null`         | Som van de compare-at-prijs (adviesprijs) van elke regel × aantal, in centen. `null` wanneer niet beschikbaar; val dan terug op `originalTotalPrice`.   |
| `currency`             | `string`                 | Valutacode.                                                                                                                                             |
| `discountCodes`        | `string[]`               | Kortingscodes die op de winkelwagen zijn geaccepteerd, gesorteerd. `[]` wanneer er geen zijn.                                                           |
| `attributes`           | `Record<string, string>` | Cart attributes. Alleen-lezen vanuit de SDK.                                                                                                            |

<Warning>
  **`itemCount` is niet altijd de som van `items`.** `items` spiegelt de echte Shopify-winkelwagen, inclusief add-on-regels die de drawer verbergt, zoals verzendbescherming. `itemCount` is het shopper-gerichte getal dat overeenkomt met de winkelwagenbadge. Voor "hoeveel dingen heeft de shopper gekozen" gebruik je `itemCount`; om te itereren over de regels die de winkelwagen rendert, gebruik je `items`.

  Twee dingen ontbreken volledig in `items`: regels verborgen met [`setHidden`](/nl/aftersell/cart/sdk-hooks#registerlinetransform), en [bundelkinderen](#bundles), die naar hun anker verhuizen. Beide tellen nog steeds mee in de winkelwagentotalen, die rechtstreeks van Shopify komen.
</Warning>

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.events.on('cart_updated', (state) => {
  console.log(state.itemCount, 'items');
  console.log('Total:', window.aftersell.cart.actions.formatMoney(state.totalPrice));
  console.log('Saved:', window.aftersell.cart.actions.formatMoney(state.totalDiscount));
  console.log('Codes:', state.discountCodes.join(', ') || 'none');
});
```

<div id="cart-lines">
  ## Winkelwagenregels
</div>

Elk item in `items`, en het `item` op [`item_added`](/nl/aftersell/cart/sdk-events#item_added) en [`item_removed`](/nl/aftersell/cart/sdk-events#item_removed):

| Veld                  | Type                             | Beschrijving                                                                                                                                                        |
| --------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `key`                 | `string`                         | De Shopify-key van de regel. Geef deze door aan de item-[actions](/nl/aftersell/cart/sdk-actions).                                                                  |
| `productId`           | `number`                         | Shopify-product-ID.                                                                                                                                                 |
| `variantId`           | `number`                         | Shopify-variant-ID.                                                                                                                                                 |
| `handle`              | `string`                         | Product-handle.                                                                                                                                                     |
| `title`               | `string`                         | Weergavetitel.                                                                                                                                                      |
| `productTitle`        | `string`                         | Producttitel zonder de variant.                                                                                                                                     |
| `variantTitle`        | `string \| null`                 | Variantlabel, of `null`.                                                                                                                                            |
| `variantOptions`      | `Array<{ name, value }>`         | Geselecteerde opties, bijv. `[{ name: 'Size', value: 'Medium' }]`. Shopify geeft `Title: Default Title` voor een product met één variant.                           |
| `quantity`            | `number`                         | Aantal van deze regel.                                                                                                                                              |
| `linePrice`           | `number`                         | Regelprijs, in centen.                                                                                                                                              |
| `finalLinePrice`      | `number`                         | Regelprijs na kortingen, in centen.                                                                                                                                 |
| `originalLinePrice`   | `number`                         | Regelprijs vóór kortingen, in centen.                                                                                                                               |
| `compareAtPrice`      | `number \| null`                 | Compare-at-prijs (adviesprijs) van de variant **per stuk**, in centen. `null` wanneer er geen is.                                                                   |
| `properties`          | `Record<string, string> \| null` | Line item properties.                                                                                                                                               |
| `internalProperties`  | `Record<string, string>`         | Alleen-render-overlay van [`registerLineTransform`](/nl/aftersell/cart/sdk-hooks#registerlinetransform). Wordt nooit bewaard in Shopify. `{}` wanneer er geen zijn. |
| `discountAllocations` | `Array<{ title, amount }>`       | Kortingen toegepast op deze regel. `amount` is in centen. `[]` wanneer er geen zijn.                                                                                |
| `isGiftCard`          | `boolean`                        | Of de regel een cadeaubon is.                                                                                                                                       |
| `sellingPlan`         | `{ id, name } \| null`           | Het actieve abonnementsplan, of `null` voor een eenmalige aankoop.                                                                                                  |
| `bundle`              | `AftersellCartBundle \| null`    | [Bundel](#bundles)-viewmodel op de ankerregel; `null` op niet-bundelregels en kinderen.                                                                             |
| `metadata`            | `Record<string, unknown>`        | [Enrichment](/nl/aftersell/cart/sdk-hooks#registercartenricher)-data gesleuteld op enricher-`id`. `{}` totdat een enricher het vult.                                |

<Warning>
  `properties` kan door de shopper aangeleverde invoer bevatten, zoals het aangepaste-tekstveld van een productformulier. Render het als tekst, nooit als rauwe HTML.
</Warning>

<div id="identifying-a-line">
  ### Een regel identificeren
</div>

Gebruik `key` voor alles wat op een regel inwerkt, en `variantId` of `productId` voor alles wat een *product* identificeert:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
// ✅ Acting on a line: use key.
window.aftersell.cart.actions.removeItem(line.key);

// ✅ Recognising a product: use variantId.
const hasGift = state.items.some((line) => line.variantId === GIFT_VARIANT_ID);
```

Dezelfde variant kan op meerdere regels voorkomen wanneer de properties verschillen. Twee gegraveerde mokken met verschillende graveertekst zijn twee regels die één `variantId` delen. Daarom nemen de actions een `key`.

<div id="prices-on-a-line">
  ### Prijzen op een regel
</div>

Drie prijzen die makkelijk door elkaar te halen zijn:

| Wil je                                   | Gebruik                       |
| ---------------------------------------- | ----------------------------- |
| Wat de shopper voor deze regel betaalt   | `finalLinePrice`              |
| Wat het kostte vóór winkelwagenkortingen | `originalLinePrice`           |
| De doorgestreepte adviesprijs, per stuk  | `compareAtPrice` × `quantity` |

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
// Is this line discounted?
const isDiscounted = line.finalLinePrice < line.originalLinePrice;

// Is it free? (A common way to detect a gift line.)
const isFree = line.finalLinePrice === 0;
```

<div id="bundles">
  ## Bundels
</div>

Wanneer regels in een bundel zijn gegroepeerd, draagt de **anker**-regel een `bundle`-object. De kinderen worden erin gevouwen en verschijnen niet meer zelfstandig in `items`. Zie [Bundelregels van een andere app groeperen](/nl/aftersell/cart/sdk-use-case-bundles) voor hoe groepering wordt opgezet.

| Veld           | Type                     | Beschrijving                                                     |
| -------------- | ------------------------ | ---------------------------------------------------------------- |
| `id`           | `string`                 | Bundel-identifier.                                               |
| `source`       | `'native' \| 'grouped'`  | Een Shopify native bundel, of regels gegroepeerd door Aftersell. |
| `memberKeys`   | `string[]`               | De `key` van elke regel in de bundel.                            |
| `children`     | `AftersellBundleChild[]` | De inhoud van de bundel.                                         |
| `displayPrice` | `number`                 | De prijs die voor de bundel wordt getoond, in centen.            |

Elk kind draagt `key` (`null` voor een native component), `title`, `variantTitle`, `quantity`, `perAnchorQty`, `imageUrl`, `finalLinePrice`, `originalLinePrice` en `compareAtPrice`.

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
// Skip bundle children when totalling your own line list.
const topLevel = state.items.filter((line) => !isBundleChild(line, state));
```

<div id="subscription-plans">
  ## Abonnementsplannen
</div>

Het actieve plan van een regel is `sellingPlan`, of `null` voor een eenmalige aankoop. Voor een antwoord op winkelwagenniveau lees je `hasSubscriptionItems` in plaats van zelf de regels te scannen, omdat het ook add-on-regels meetelt die `items` toont maar `itemCount` overslaat:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
if (state.hasSubscriptionItems) {
  // The cart contains at least one subscription line.
}

const subscriptions = state.items.filter((line) => line.sellingPlan);
console.log(subscriptions.length, 'subscription lines');
```

De *beschikbare* plannen op een regel, die in de kiezer, staan niet op het cart-object. Vorm die met [`registerSubscriptionOptionsTransform`](/nl/aftersell/cart/sdk-hooks#registersubscriptionoptionstransform) en [`registerDefaultSubscriptionOptionSelector`](/nl/aftersell/cart/sdk-hooks#registerdefaultsubscriptionoptionselector).

<div id="where-to-go-next">
  ## Waar nu naartoe
</div>

* **[Actions](/nl/aftersell/cart/sdk-actions)**: lees en wijzig de winkelwagen.
* **[Events](/nl/aftersell/cart/sdk-events)**: waar dit object vandaan komt.
* **[Hooks](/nl/aftersell/cart/sdk-hooks)**: voeg je eigen data toe aan een regel met een enricher.
* **[Use cases](/nl/aftersell/cart/sdk-use-cases)**: complete oplossingen die deze velden lezen.
