67 lines
1.4 KiB
TypeScript
67 lines
1.4 KiB
TypeScript
export const useCookie = () => {
|
|
function getCookie(name: string): string | null {
|
|
const cookies = document.cookie ? document.cookie.split('; ') : []
|
|
|
|
for (const cookie of cookies) {
|
|
const [key, ...rest] = cookie.split('=')
|
|
if (key === name) {
|
|
return decodeURIComponent(rest.join('='))
|
|
}
|
|
}
|
|
|
|
return null
|
|
}
|
|
|
|
function setCookie(
|
|
name: string,
|
|
value: string,
|
|
options?: {
|
|
days?: number
|
|
path?: string
|
|
domain?: string
|
|
secure?: boolean
|
|
sameSite?: 'Lax' | 'Strict' | 'None'
|
|
},
|
|
) {
|
|
let cookie = `${name}=${encodeURIComponent(value)}`
|
|
|
|
if (options?.days) {
|
|
const date = new Date()
|
|
date.setTime(date.getTime() + options.days * 24 * 60 * 60 * 1000)
|
|
cookie += `; expires=${date.toUTCString()}`
|
|
}
|
|
|
|
cookie += `; path=${options?.path ?? '/'}`
|
|
|
|
if (options?.domain) {
|
|
cookie += `; domain=${options.domain}`
|
|
}
|
|
|
|
if (options?.secure) {
|
|
cookie += `; Secure`
|
|
}
|
|
|
|
if (options?.sameSite) {
|
|
cookie += `; SameSite=${options.sameSite}`
|
|
}
|
|
|
|
document.cookie = cookie
|
|
}
|
|
|
|
function deleteCookie(name: string, path: string = '/', domain?: string) {
|
|
let cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${path}`
|
|
|
|
if (domain) {
|
|
cookie += `; domain=${domain}`
|
|
}
|
|
|
|
document.cookie = cookie
|
|
}
|
|
|
|
return {
|
|
getCookie,
|
|
setCookie,
|
|
deleteCookie,
|
|
}
|
|
}
|