11import { useEffect , useState } from 'react' ;
2- import { clearCookies , getCookies , removeCookie , setCookie } from '../useCookie/helpers' ;
3- import { COOKIE_EVENT , dispatchCookieEvent } from '../useCookie/useCookie' ;
2+ import { COOKIE_EVENT , dispatchCookieEvent , removeCookie , setCookie } from '../useCookie/useCookie' ;
3+ export const getParsedCookies = ( ) => Object . fromEntries ( document . cookie . split ( '; ' ) . map ( ( cookie ) => {
4+ const [ key , ...value ] = cookie . split ( '=' ) ;
5+ const decodedValue = decodeURIComponent ( value . join ( '=' ) ) ;
6+ try {
7+ return [ key , JSON . parse ( decodedValue ) ] ;
8+ }
9+ catch {
10+ return [ key , decodedValue ] ;
11+ }
12+ } ) ) ;
13+ export const clearCookies = ( ) => {
14+ document . cookie . split ( '; ' ) . forEach ( ( cookie ) => {
15+ const [ name ] = cookie . split ( '=' ) ;
16+ removeCookie ( name ) ;
17+ } ) ;
18+ } ;
419const setCookieItem = ( key , value , options ) => {
5- setCookie ( key , value , options ) ;
6- dispatchCookieEvent ( ) ;
20+ setCookie ( key , value , options ) ;
21+ dispatchCookieEvent ( ) ;
722} ;
823const removeCookieItem = ( key , options ) => {
9- removeCookie ( key , options ) ;
10- dispatchCookieEvent ( ) ;
24+ removeCookie ( key , options ) ;
25+ dispatchCookieEvent ( ) ;
1126} ;
1227const clearCookieItems = ( ) => {
13- clearCookies ( ) ;
14- dispatchCookieEvent ( ) ;
28+ clearCookies ( ) ;
29+ dispatchCookieEvent ( ) ;
1530} ;
1631/**
1732 * @name useCookies
@@ -27,20 +42,21 @@ const clearCookieItems = () => {
2742 * const { value, set, remove, getAll, clear } = useCookies();
2843 */
2944export const useCookies = ( ) => {
30- const [ value , setValue ] = useState ( typeof window !== 'undefined' ? getCookies ( true ) : { } ) ;
31- useEffect ( ( ) => {
32- const onChange = ( ) => setValue ( getCookies ( true ) ) ;
33- window . addEventListener ( COOKIE_EVENT , onChange ) ;
34- return ( ) => {
35- window . removeEventListener ( COOKIE_EVENT , onChange ) ;
45+ const [ value , setValue ] = useState ( typeof window !== 'undefined' ? getParsedCookies ( ) : { } ) ;
46+ useEffect ( ( ) => {
47+ const onChange = ( ) => setValue ( getParsedCookies ( ) ) ;
48+ window . addEventListener ( COOKIE_EVENT , onChange ) ;
49+ return ( ) => {
50+ window . removeEventListener ( COOKIE_EVENT , onChange ) ;
51+ } ;
52+ } , [ ] ) ;
53+ const set = ( key , value , options ) => {
54+ if ( value === null )
55+ return removeCookieItem ( key ) ;
56+ setCookieItem ( key , value , options ) ;
3657 } ;
37- } , [ ] ) ;
38- const set = ( key , value , options ) => {
39- if ( value === null ) return removeCookieItem ( key ) ;
40- setCookieItem ( key , value , options ) ;
41- } ;
42- const remove = ( key , options ) => removeCookieItem ( key , options ) ;
43- const getAll = ( ) => getCookies ( true ) ;
44- const clear = ( ) => clearCookieItems ( ) ;
45- return { value, set, remove, getAll, clear } ;
58+ const remove = ( key , options ) => removeCookieItem ( key , options ) ;
59+ const getAll = ( ) => getParsedCookies ( ) ;
60+ const clear = ( ) => clearCookieItems ( ) ;
61+ return { value, set, remove, getAll, clear } ;
4662} ;
0 commit comments