diff --git a/src/components/media-controls/media-controls.tsx b/src/components/media-controls/media-controls.tsx index 60cf477..3f00891 100644 --- a/src/components/media-controls/media-controls.tsx +++ b/src/components/media-controls/media-controls.tsx @@ -1,9 +1,16 @@ -import { useMediaSessionStore } from '@/stores/media-session'; - import { MediaSessionTrack } from './media-session-track'; +import { useEffect, useState } from 'react'; +import { useSSR } from '@/hooks/use-ssr'; export function MediaControls() { - const mediaControlsEnabled = useMediaSessionStore(state => state.enabled); + const [mediaControlsEnabled, setMediaControlsEnabled] = useState(false); + const { isBrowser } = useSSR(); + + useEffect(() => { + if (!isBrowser) return; + + setMediaControlsEnabled('mediaSession' in navigator); + }, [isBrowser]); if (!mediaControlsEnabled) { return null; diff --git a/src/components/menu/items/media-controls.tsx b/src/components/menu/items/media-controls.tsx deleted file mode 100644 index 4496555..0000000 --- a/src/components/menu/items/media-controls.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { IoMdPlayCircle } from 'react-icons/io/index'; - -import { Item } from '../item'; - -export function MediaControls({ - active, - onClick, -}: { - active: boolean; - onClick: () => void; -}) { - return ( - } - label="Media Controls" - onClick={onClick} - /> - ); -} diff --git a/src/components/menu/menu.tsx b/src/components/menu/menu.tsx index df229ff..ff3eb12 100644 --- a/src/components/menu/menu.tsx +++ b/src/components/menu/menu.tsx @@ -29,17 +29,10 @@ import { useSoundStore } from '@/stores/sound'; import styles from './menu.module.css'; import { useCloseListener } from '@/hooks/use-close-listener'; import { closeModals } from '@/lib/modal'; -import { MediaControls } from './items/media-controls'; -import { useMediaSessionStore } from '@/stores/media-session'; export function Menu() { const [isOpen, setIsOpen] = useState(false); - const mediaControlsEnabled = useMediaSessionStore(state => state.enabled); - const toggleMediaControls = useMediaSessionStore(state => state.toggle); - const isMediaSessionSupported = useMediaSessionStore( - state => state.isSupported, - ); const noSelected = useSoundStore(state => state.noSelected()); const initial = useMemo( @@ -115,12 +108,6 @@ export function Menu() { > open('presets')} /> open('shareLink')} /> - {isMediaSessionSupported ? ( - - ) : null} open('sleepTimer')} /> diff --git a/src/components/store-consumer/store-consumer.tsx b/src/components/store-consumer/store-consumer.tsx index d1b3adb..101be03 100644 --- a/src/components/store-consumer/store-consumer.tsx +++ b/src/components/store-consumer/store-consumer.tsx @@ -3,7 +3,6 @@ import { useEffect } from 'react'; import { useSoundStore } from '@/stores/sound'; import { useNoteStore } from '@/stores/note'; import { usePresetStore } from '@/stores/preset'; -import { useMediaSessionStore } from '@/stores/media-session'; interface StoreConsumerProps { children: React.ReactNode; @@ -14,7 +13,6 @@ export function StoreConsumer({ children }: StoreConsumerProps) { useSoundStore.persist.rehydrate(); useNoteStore.persist.rehydrate(); usePresetStore.persist.rehydrate(); - useMediaSessionStore.persist.rehydrate(); }, []); return <>{children}; diff --git a/src/stores/media-session/index.ts b/src/stores/media-session/index.ts deleted file mode 100644 index bd25aef..0000000 --- a/src/stores/media-session/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { create } from 'zustand'; -import { createJSONStorage, persist } from 'zustand/middleware'; -import merge from 'deepmerge'; - -import { - createActions, - type MediaControlsActions, -} from './media-session.actions'; -import { createState, type MediaControlsState } from './media-session.state'; - -export const useMediaSessionStore = create< - MediaControlsState & MediaControlsActions ->()( - persist( - (...a) => ({ - ...createState(...a), - ...createActions(...a), - }), - { - merge: (persisted, current) => - merge( - current, - // @ts-ignore - persisted, - ), - name: 'moodist-media-session', - partialize: state => ({ enabled: state.enabled }), - skipHydration: true, - storage: createJSONStorage(() => localStorage), - version: 0, - }, - ), -); diff --git a/src/stores/media-session/media-session.actions.ts b/src/stores/media-session/media-session.actions.ts deleted file mode 100644 index 3083679..0000000 --- a/src/stores/media-session/media-session.actions.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { StateCreator } from 'zustand'; -import type { MediaControlsState } from './media-session.state'; - -export interface MediaControlsActions { - disable: () => void; - enable: () => void; - toggle: () => void; -} - -export const createActions: StateCreator< - MediaControlsActions & MediaControlsState, - [], - [], - MediaControlsActions -> = (set, get) => { - return { - disable() { - set({ enabled: false }); - }, - - enable() { - set({ enabled: true }); - }, - - toggle() { - set({ enabled: !get().enabled }); - }, - }; -}; diff --git a/src/stores/media-session/media-session.state.ts b/src/stores/media-session/media-session.state.ts deleted file mode 100644 index a776e13..0000000 --- a/src/stores/media-session/media-session.state.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { StateCreator } from 'zustand'; - -import type { MediaControlsActions } from './media-session.actions'; - -export interface MediaControlsState { - enabled: boolean; - isSupported: boolean; -} - -export const createState: StateCreator< - MediaControlsState & MediaControlsActions, - [], - [], - MediaControlsState -> = () => ({ - enabled: false, - isSupported: 'mediaSession' in navigator, -});