2024-12-16 10:27:20 +04:30
|
|
|
import './TimezoneAdaptation.styles.scss';
|
|
|
|
|
|
|
|
|
|
import { Color } from '@signozhq/design-tokens';
|
|
|
|
|
import { Switch } from 'antd';
|
2024-12-20 11:38:36 +04:30
|
|
|
import logEvent from 'api/common/logEvent';
|
2024-12-16 10:27:20 +04:30
|
|
|
import { Delete } from 'lucide-react';
|
|
|
|
|
import { useTimezone } from 'providers/Timezone';
|
|
|
|
|
import { useMemo } from 'react';
|
|
|
|
|
|
|
|
|
|
function TimezoneAdaptation(): JSX.Element {
|
|
|
|
|
const {
|
|
|
|
|
timezone,
|
|
|
|
|
browserTimezone,
|
|
|
|
|
updateTimezone,
|
|
|
|
|
isAdaptationEnabled,
|
|
|
|
|
setIsAdaptationEnabled,
|
|
|
|
|
} = useTimezone();
|
|
|
|
|
|
|
|
|
|
const isTimezoneOverridden = useMemo(
|
|
|
|
|
() => timezone.offset !== browserTimezone.offset,
|
|
|
|
|
[timezone, browserTimezone],
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const getSwitchStyles = (): React.CSSProperties => ({
|
|
|
|
|
backgroundColor:
|
|
|
|
|
isAdaptationEnabled && isTimezoneOverridden ? Color.BG_AMBER_400 : undefined,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const handleOverrideClear = (): void => {
|
|
|
|
|
updateTimezone(browserTimezone);
|
2025-06-12 19:55:32 +05:30
|
|
|
logEvent('Account Settings: Timezone override cleared', {});
|
2024-12-20 11:38:36 +04:30
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const handleSwitchChange = (): void => {
|
|
|
|
|
setIsAdaptationEnabled((prev) => {
|
|
|
|
|
const isEnabled = !prev;
|
|
|
|
|
logEvent(
|
2025-06-12 19:55:32 +05:30
|
|
|
`Account Settings: Timezone adaptation ${
|
|
|
|
|
isEnabled ? 'enabled' : 'disabled'
|
|
|
|
|
}`,
|
2024-12-20 11:38:36 +04:30
|
|
|
{},
|
|
|
|
|
);
|
|
|
|
|
return isEnabled;
|
|
|
|
|
});
|
2024-12-16 10:27:20 +04:30
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className="timezone-adaption">
|
|
|
|
|
<div className="timezone-adaption__header">
|
|
|
|
|
<h2 className="timezone-adaption__title">Adapt to my timezone</h2>
|
|
|
|
|
<Switch
|
|
|
|
|
checked={isAdaptationEnabled}
|
2024-12-20 11:38:36 +04:30
|
|
|
onChange={handleSwitchChange}
|
2024-12-16 10:27:20 +04:30
|
|
|
style={getSwitchStyles()}
|
2025-07-26 16:08:47 +05:30
|
|
|
data-testid="timezone-adaptation-switch"
|
2024-12-16 10:27:20 +04:30
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<p className="timezone-adaption__description">
|
|
|
|
|
Adapt the timestamps shown in the SigNoz console to my active timezone.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<div className="timezone-adaption__note">
|
|
|
|
|
<div className="timezone-adaption__note-text-container">
|
|
|
|
|
<span className="timezone-adaption__bullet">•</span>
|
|
|
|
|
<span className="timezone-adaption__note-text">
|
|
|
|
|
{isTimezoneOverridden ? (
|
|
|
|
|
<>
|
|
|
|
|
Your current timezone is overridden to
|
|
|
|
|
<span className="timezone-adaption__note-text-overridden">
|
|
|
|
|
{timezone.offset}
|
|
|
|
|
</span>
|
|
|
|
|
</>
|
|
|
|
|
) : (
|
|
|
|
|
<>
|
|
|
|
|
You can override the timezone adaption for any view with the time
|
|
|
|
|
picker.
|
|
|
|
|
</>
|
|
|
|
|
)}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{!!isTimezoneOverridden && (
|
|
|
|
|
<button
|
|
|
|
|
type="button"
|
|
|
|
|
className="timezone-adaption__clear-override"
|
|
|
|
|
onClick={handleOverrideClear}
|
|
|
|
|
>
|
|
|
|
|
<Delete height={12} width={12} color={Color.BG_ROBIN_300} />
|
|
|
|
|
Clear override
|
|
|
|
|
</button>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default TimezoneAdaptation;
|