c15t
Version:
Headless JavaScript consent management platform for cookie banners, privacy preferences, consent storage, and script gating.
115 lines (80 loc) • 3.7 kB
Markdown
---
title: Setting Consent
description: Save, stage, and reset consent preferences using the store API.
group: frameworks
---
## `saveConsents(type)`
Batch-save consent preferences. This is the primary way users grant or deny consent.
```ts
const state = consentStore.getState();
// Accept all categories
await state.saveConsents('all');
// Accept only necessary (reject everything else)
await state.saveConsents('necessary');
// Save the currently staged selections (from setSelectedConsent)
await state.saveConsents('custom');
```
|Type|Behavior|
|--|--|
|`'all'`|Sets all configured categories (those in `consentCategories`) to `true` and saves|
|`'necessary'`|Sets only `necessary` to `true`, all others to `false`, and saves|
|`'custom'`|Saves the current `selectedConsents` as the final `consents`|
After saving, the store syncs with the backend (in c15t or custom mode), stores the consent in a cookie, always triggers `onConsentSet`, and triggers `onConsentChanged` only if the saved preferences actually changed.
## `setConsent(name, value)`
Set a single category and immediately save. This is a shortcut for setting one category without staging.
```ts
const state = consentStore.getState();
// Grant measurement consent (saves immediately)
state.setConsent('measurement', true);
// Revoke marketing consent (saves immediately)
state.setConsent('marketing', false);
```
`setConsent()` uses the same save pipeline as `saveConsents()`, so the same callback rules apply.
## `setSelectedConsent(name, value)`
Stage a consent toggle without saving. This is useful for building a preference dialog where the user can toggle multiple categories before confirming.
```ts
const state = consentStore.getState();
// User toggles in the dialog (not yet saved)
state.setSelectedConsent('measurement', true);
state.setSelectedConsent('marketing', false);
// Read the staged state
console.log(consentStore.getState().selectedConsents);
// { necessary: true, measurement: true, marketing: false }
// User clicks "Save" — persist the staged selections
await consentStore.getState().saveConsents('custom');
```
The `selectedConsents` state lets you render toggle states in a preference dialog without modifying the actual consent until the user confirms.
## `resetConsents()`
Reset all consent preferences to their defaults. This clears stored consent and returns the user to an unconsented state.
```ts
const state = consentStore.getState();
state.resetConsents();
// To show the banner again after resetting, call setActiveUI manually
consentStore.getState().setActiveUI('banner', { force: true });
```
`resetConsents()` clears stored consent, but it does not emit `onConsentChanged`.
## Full Preference Dialog Flow
Here's a typical flow for a preference dialog:
```ts
import { getOrCreateConsentRuntime } from 'c15t';
const { consentStore } = getOrCreateConsentRuntime({
mode: 'hosted',
backendURL: 'https://your-instance.c15t.dev',
consentCategories: ['necessary', 'measurement', 'marketing'],
});
// 1. User opens the preference dialog
consentStore.getState().setActiveUI('dialog');
// 2. Render toggles from displayed consents
const displayed = consentStore.getState().getDisplayedConsents();
displayed.forEach((type) => {
const isSelected = consentStore.getState().selectedConsents[type.name];
console.log(`${type.name}: ${isSelected}`);
});
// 3. User toggles categories
consentStore.getState().setSelectedConsent('measurement', true);
consentStore.getState().setSelectedConsent('marketing', false);
// 4. User clicks "Save"
await consentStore.getState().saveConsents('custom');
// 5. Close the dialog
consentStore.getState().setActiveUI('none');
```