aboutsummaryrefslogtreecommitdiff
path: root/src/stores/aprilFools.ts
blob: d86829c18a49a89df35a980e9b02dc58025d95d3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { browser } from "$app/environment";
import { writable } from "svelte/store";

const storageKey = (date = new Date()) =>
	`aprilFoolsExecutiveMode:${date.getFullYear()}`;

export const isAprilFoolsDay = (date = new Date()) =>
	date.getMonth() === 3 && date.getDate() === 1;

let hydrated = !browser;

const store = writable(false);

export const hydrateAprilFools = () => {
	if (!browser || hydrated) return;

	const storedValue = localStorage.getItem(storageKey());

	store.set(storedValue === null ? isAprilFoolsDay() : storedValue === "true");
	hydrated = true;
};

store.subscribe((value) => {
	if (!browser || !hydrated) return;

	localStorage.setItem(storageKey(), String(value));
});

export const aprilFoolsVisible = () => isAprilFoolsDay();

const aprilFools = {
	subscribe: store.subscribe,
	set: store.set,
	toggle: () => store.update((value) => !value),
};

export default aprilFools;