UNPKG

@zezosoft/zezo-ott-react-native-video-player

Version:

Production-ready React Native OTT video player library for Android & iOS. Features: playlists, seasons, auto-next playback, subtitles (SRT/VTT), custom theming, analytics tracking, fullscreen mode, gesture controls, ads player (pre-roll/mid-roll/post-roll

60 lines (54 loc) 1.88 kB
import { create } from 'zustand'; import { createJSONStorage, persist } from 'zustand/middleware'; import { MMKV } from 'react-native-mmkv'; import type { AdsPlayerStore, AdState } from './adsPlayer.type'; export const adsStorage = new MMKV({ id: 'adsPlayerStorage', encryptionKey: 'adsPlayerKey', }); export const adsMmkvStorage = { setItem: (key: string, value: string) => adsStorage.set(key, value), getItem: (key: string) => adsStorage.getString(key) ?? null, removeItem: (key: string) => adsStorage.delete(key), }; const adsStoreDataDefaults: AdState = { currentAd: null, isAdPlaying: false, isAdPaused: false, isAdMuted: false, isAdBuffering: false, adCurrentTime: 0, adDuration: 0, pendingMidRollAds: [], showSkipButton: false, resumeTime: null, }; export const useAdsPlayerStore = create<AdsPlayerStore>()( persist( (set) => ({ ...adsStoreDataDefaults, setCurrentAd: (currentAd) => set({ currentAd }), setIsAdPlaying: (isAdPlaying) => set({ isAdPlaying }), setIsAdPaused: (isAdPaused) => set({ isAdPaused }), setIsAdMuted: (isAdMuted) => set({ isAdMuted }), setIsAdBuffering: (isAdBuffering) => set({ isAdBuffering }), setAdCurrentTime: (adCurrentTime) => set({ adCurrentTime }), setAdDuration: (adDuration) => set({ adDuration }), setShowSkipButton: (showSkipButton) => set({ showSkipButton }), setResumeTime: (resumeTime) => set({ resumeTime }), addPendingMidRollAd: (ad) => set((state) => ({ pendingMidRollAds: [...state.pendingMidRollAds, ad], })), clearPendingMidRollAds: () => set({ pendingMidRollAds: [] }), resetAdsStore: () => { set(adsStoreDataDefaults); adsStorage.clearAll(); }, }), { name: 'AdsPlayerStorage', storage: createJSONStorage(() => adsMmkvStorage), } ) );