Cookies
Finally a proper cookie management system. :cookie:
yarn add @kiwicom/cookies
API
The API handles:
- managing cookies
- managing local storage
- managing React context
- managing 3rd party scripts
- generating documentation
Cookies
import { Cookie, Settings, save, load, remove } from "@kiwicom/cookies";
Cookie
A TypeScript enum
that contains all cookie keys. Use it when manipulating cookies.
Settings
A TypeScript / Flow type
with the following keys:
analytics: boolean;
marketing: boolean;
save(key: Cookie, value: string, opts?: Options) => void
The Options
object is passed to js-cookie
and has these attributes:
domain: string
path: string
secure: boolean
Saves a cookie. Expiration is set automatically.
load(key: Cookie) => string | null
Loads a cookie.
remove(key: Cookie, opts?: Options) => void
The Options
object is passed to js-cookie
and has these attributes:
domain: string
path: string
secure: boolean
Removes a cookie.
Local storage
TODO
React context
import { Agreed, CookiesProvider, useCookies } from "@kiwicom/cookies";
Agreed
A TypeScript enum
with values TRUE
or FALSE
that signify if consent was agreed to.
CookiesProvider
A React context provider. Props:
agreedInitial?: Agreed | null
used for initial server-side rendering consistency
The context has the following attributes:
agreed: Agreed | null
settings: Settings
handleAgree(agreed: true | false) => void
handleChange(settings: Settings) => void
Call handleAgree
when the user consents / revokes consent. Does not change settings on agreeing,
so call in conjunction with handleChange
.
Call handleChange
when user changes his cookie preferences.
useCookies
A utility hook that retrieves the context value.
3rd party scripts
Make scripts loadable via HTTP requests, then create <script />
tags with attributes:
src
pointing to the script's URLtype
of "text/plain"
data-cookiescript
with value of "necessary" | "analytics" | "marketing"
The scripts will be loaded and executed on demand, based on the user's cookie settings.
Documentation
Load the @kiwicom/cookies/cookies.json
file for a list of objects with the following signature:
type Cookie = {
name: string;
category: string;
type: "cookie";
description: string;
};
License
MIT