Files
fotospiel-app/resources/js/guest/hooks/useHapticsPreference.ts
Codex Agent fa5a1fa367 Added a guest haptics preference and surfaced it in both the settings sheet and /settings, with safe device detection
and a reduced‑motion guard. Haptics now honor the toggle and still fall back gracefully on iOS (switch disabled when
  navigator.vibrate isn’t available).

  What changed

  - Haptics preference storage + gating: resources/js/guest/lib/haptics.ts
  - Preference hook: resources/js/guest/hooks/useHapticsPreference.ts
  - Settings UI toggle in sheet + page: resources/js/guest/components/settings-sheet.tsx, resources/js/guest/pages/
    SettingsPage.tsx
  - i18n labels: resources/js/guest/i18n/messages.ts
  - Tests: resources/js/guest/lib/__tests__/haptics.test.ts
2025-12-27 14:00:12 +01:00

20 lines
623 B
TypeScript

import React from 'react';
import { getHapticsPreference, setHapticsPreference, supportsHaptics } from '../lib/haptics';
export function useHapticsPreference() {
const [enabled, setEnabledState] = React.useState(() => getHapticsPreference());
const [supported, setSupported] = React.useState(() => supportsHaptics());
React.useEffect(() => {
setEnabledState(getHapticsPreference());
setSupported(supportsHaptics());
}, []);
const setEnabled = React.useCallback((value: boolean) => {
setHapticsPreference(value);
setEnabledState(value);
}, []);
return { enabled, setEnabled, supported };
}