ui: keep track of local timezone for each visit

This commit is contained in:
nick-delirium 2024-11-18 16:58:23 +01:00
parent a538546d62
commit 5b6a74f9a6
No known key found for this signature in database
GPG key ID: 93ABD695DF5FDBA0
3 changed files with 24 additions and 9 deletions

View file

@ -1,12 +1,11 @@
import { Radio } from 'antd';
import { toJS } from 'mobx';
import { useObserver } from 'mobx-react-lite';
import React, { useEffect } from 'react';
import { toast } from 'react-toastify';
import { useStore } from 'App/mstore';
import { Timezone } from 'App/mstore/types/sessionSettings';
import { Button } from 'UI';
import { Button, Icon } from 'UI';
import Select from 'Shared/Select';
@ -24,6 +23,7 @@ function DefaultTimezone() {
const [timezone, setTimezone] = React.useState(
settingsStore.sessionSettings.timezone
);
const [isLocal, setIsLocal] = React.useState(settingsStore.sessionSettings.usingLocal);
useEffect(() => {
if (!timezone) setTimezone({ label: 'Local Timezone', value: 'system' });
@ -48,7 +48,8 @@ function DefaultTimezone() {
const selectedTimezone = getCurrentTimezone();
if (selectedTimezone) {
setTimezone(selectedTimezone);
sessionSettings.updateTimezone(selectedTimezone);
setIsLocal(true);
sessionSettings.updateTimezone(selectedTimezone, true);
toast.success('Default timezone saved successfully');
}
};
@ -110,8 +111,13 @@ function DefaultTimezone() {
</Button>
</div>
</div>
<div onClick={setCurrentTimezone} className="mt-3 link">
Apply my current timezone
<div className={'mt-3 flex gap-1 items-center'}>
<div onClick={setCurrentTimezone} className={"link"}>
Apply my current timezone
</div>
{isLocal ? (
<Icon name={'check'} size={18} />
) : null}
</div>
</>
) : null}

View file

@ -1,5 +1,6 @@
export const SKIP_TO_ISSUE = "__$session-skipToIssue$__"
export const TIMEZONE = "__$session-timezone$__"
export const TIMEZONE_LOCAL = "__$session-timezone$_local__"
export const SHOWN_TIMEZONE = "__$session-shownTimezone$__"
export const DURATION_FILTER = "__$session-durationFilter$__"
export const SESSION_FILTER = "__$session-filter$__"

View file

@ -1,5 +1,5 @@
import { makeAutoObservable, runInAction } from 'mobx';
import { SKIP_TO_ISSUE, TIMEZONE, SHOWN_TIMEZONE, DURATION_FILTER, MOUSE_TRAIL } from 'App/constants/storageKeys';
import { SKIP_TO_ISSUE, TIMEZONE, TIMEZONE_LOCAL, SHOWN_TIMEZONE, DURATION_FILTER, MOUSE_TRAIL } from 'App/constants/storageKeys';
import { DateTime, Settings } from 'luxon'
export type Timezone = {
@ -74,6 +74,7 @@ export default class SessionSettings {
captureConditions: { name: string; captureRate: number; filters: any[] }[] = [];
mouseTrail: boolean = localStorage.getItem(MOUSE_TRAIL) !== 'false';
shownTimezone: 'user' | 'local';
usingLocal: boolean = false;
constructor() {
const userTimezoneOffset = DateTime.local().toFormat('ZZ')
@ -82,7 +83,13 @@ export default class SessionSettings {
) || { label: 'Local', value: `UTC${userTimezoneOffset}` };
const savedTz = localStorage.getItem(TIMEZONE)
this.timezone = savedTz ? JSON.parse(savedTz) : defaultTimezone;
const isLocal = localStorage.getItem(TIMEZONE_LOCAL) === 'true';
if (isLocal) {
this.timezone = defaultTimezone;
this.usingLocal = true;
} else {
this.timezone = savedTz ? JSON.parse(savedTz) : defaultTimezone;
}
Settings.defaultZone = this.timezone.value;
if (localStorage.getItem(MOUSE_TRAIL) === null) {
localStorage.setItem(MOUSE_TRAIL, 'true');
@ -110,10 +117,11 @@ export default class SessionSettings {
this.conditionalCapture = all;
};
updateTimezone = (value: Timezone) => {
updateTimezone = (value: Timezone, local?: boolean) => {
this.timezone = value;
Settings.defaultZone = value.value;
localStorage.setItem(`__$session-timezone$__`, JSON.stringify(value));
localStorage.setItem(TIMEZONE, JSON.stringify(value));
localStorage.setItem(TIMEZONE_LOCAL, local ? 'true' : 'false');
}
updateKey = (key: string, value: any) => {