UNPKG

tfwm-travel-updates-widget

Version:

A shareable travel updates (disruptions) widget which is shown on the TfWM homepage

49 lines (40 loc) 1.7 kB
// Types import { DisruptionFavs, Favs } from './types'; const getDisruptionCookieData = (): DisruptionFavs | undefined => { const cookies = document.cookie; const favouritesCookieName = 'disruptionsApp'; const hasDisruptionsCookie = cookies.indexOf(favouritesCookieName) > -1; if (!hasDisruptionsCookie) return undefined; const cookieSplit = cookies.split('; ').find(row => row.startsWith(`${favouritesCookieName}=`)); if (cookieSplit === undefined) return undefined; const cookieData = cookieSplit.split('=')[1]; return JSON.parse(cookieData); }; const getFavouritesFromCookies = (): Favs => { const cookieData = getDisruptionCookieData(); if (cookieData === undefined) return {}; const { favs } = cookieData; if (!favs) return {}; return favs; }; const hasAnyFavourites = (): boolean => { const modesWithFavourites = Object.values(getFavouritesFromCookies()).reduce( (accumulator, favouritesArray) => { let hasFavourites = false; if (favouritesArray.length) hasFavourites = true; return hasFavourites ? accumulator + 1 : accumulator; }, 0 ); return modesWithFavourites > 0; }; const setCookie = (cname: string, cvalue: string, exdays: number): void => { const env = process.env.NODE_ENV || 'developement'; const cookieDomain = 'tfwm.org.uk'; const d = new Date(); d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000); const expires = `expires=${d.toUTCString()}`; const domain = env === 'development' ? 'domain=localhost' : `domain=.${cookieDomain}`; document.cookie = `${cname}=${cvalue};${expires};${domain};path=/`; }; export { getDisruptionCookieData, getFavouritesFromCookies, hasAnyFavourites, setCookie };