48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
// handles logic related to user clock display using 24h display / timeZone options.
|
|
import dayjs, {Dayjs} from 'dayjs';
|
|
import utc from 'dayjs/plugin/utc';
|
|
import timezone from 'dayjs/plugin/timezone';
|
|
|
|
dayjs.extend(utc)
|
|
dayjs.extend(timezone)
|
|
|
|
interface TimeOptions { is24hClock: boolean, inviteeTimeZone: string };
|
|
|
|
const timeOptions: TimeOptions = {
|
|
is24hClock: false,
|
|
inviteeTimeZone: '',
|
|
}
|
|
|
|
const isInitialized: boolean = false;
|
|
|
|
const initClock = () => {
|
|
if (typeof localStorage === "undefined" || isInitialized) {
|
|
return;
|
|
}
|
|
timeOptions.is24hClock = localStorage.getItem('timeOption.is24hClock') === "true";
|
|
timeOptions.inviteeTimeZone = localStorage.getItem('timeOption.preferredTimeZone') || dayjs.tz.guess();
|
|
}
|
|
|
|
const is24h = (is24hClock?: boolean) => {
|
|
initClock();
|
|
if(typeof is24hClock !== "undefined") set24hClock(is24hClock);
|
|
return timeOptions.is24hClock;
|
|
}
|
|
|
|
const set24hClock = (is24hClock: boolean) => {
|
|
localStorage.setItem('timeOption.is24hClock', is24hClock.toString());
|
|
timeOptions.is24hClock = is24hClock;
|
|
}
|
|
|
|
function setTimeZone(selectedTimeZone: string) {
|
|
localStorage.setItem('timeOption.preferredTimeZone', selectedTimeZone);
|
|
timeOptions.inviteeTimeZone = selectedTimeZone;
|
|
}
|
|
|
|
const timeZone = (selectedTimeZone?: string) => {
|
|
initClock();
|
|
if (selectedTimeZone) setTimeZone(selectedTimeZone)
|
|
return timeOptions.inviteeTimeZone;
|
|
}
|
|
|
|
export {is24h, timeZone}; |