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
text/typescript
// 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 };