fix(fullscreen): respect Settings clock format on wall clock (#1025)

* fix(fullscreen): respect Settings clock format on wall clock

The fullscreen player corner clock always used the browser locale default
(12-hour). Route it through formatClockTime and authStore.clockFormat so
24-hour matches queue ETA and sleep-timer preview.

* docs(changelog): fullscreen clock format fix (PR #1025)
This commit is contained in:
cucadmuh
2026-06-08 01:02:29 +03:00
committed by GitHub
parent 30e9db1a2b
commit e527cfe67f
3 changed files with 53 additions and 7 deletions
@@ -0,0 +1,31 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { screen } from '@testing-library/react';
import { renderWithProviders } from '../../test/helpers/renderWithProviders';
import { resetAuthStore } from '../../test/helpers/storeReset';
import { useAuthStore } from '../../store/authStore';
import { FsClock } from './FsClock';
describe('FsClock', () => {
beforeEach(() => {
vi.useFakeTimers();
vi.setSystemTime(new Date(2026, 0, 1, 21, 59, 0));
resetAuthStore();
});
afterEach(() => {
vi.useRealTimers();
});
it('uses the 24-hour clock format from Settings → System', () => {
useAuthStore.setState({ clockFormat: '24h' });
renderWithProviders(<FsClock />);
expect(screen.getByText('21:59')).toBeInTheDocument();
expect(screen.queryByText(/AM|PM/i)).toBeNull();
});
it('uses the 12-hour clock format when selected', () => {
useAuthStore.setState({ clockFormat: '12h' });
renderWithProviders(<FsClock />);
expect(screen.getByText('09:59 PM')).toBeInTheDocument();
});
});
+14 -7
View File
@@ -1,8 +1,7 @@
import { memo, useEffect, useState } from 'react';
function formatClock(): string {
return new Date().toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' });
}
import { useTranslation } from 'react-i18next';
import { useAuthStore } from '../../store/authStore';
import { formatClockTime } from '../../utils/format/formatClockTime';
/**
* Standalone wall-clock for the fullscreen player. Owns its own state so the
@@ -10,11 +9,19 @@ function formatClock(): string {
* the minute rollover) and pauses while the window/tab is hidden.
*/
export const FsClock = memo(function FsClock() {
const [time, setTime] = useState(formatClock);
const clockFormat = useAuthStore(s => s.clockFormat);
const { i18n } = useTranslation();
const formatNow = () => formatClockTime(Date.now(), clockFormat, i18n.language);
const [time, setTime] = useState(formatNow);
useEffect(() => {
setTime(formatNow());
}, [clockFormat, i18n.language]);
useEffect(() => {
let id: number | undefined;
const tick = () => setTime(formatClock());
const tick = () => setTime(formatClockTime(Date.now(), clockFormat, i18n.language));
const sync = () => {
if (document.hidden) {
if (id !== undefined) { clearInterval(id); id = undefined; }
@@ -29,7 +36,7 @@ export const FsClock = memo(function FsClock() {
if (id !== undefined) clearInterval(id);
document.removeEventListener('visibilitychange', sync);
};
}, []);
}, [clockFormat, i18n.language]);
return <span className="fsp-clock">{time}</span>;
});