@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
70 lines (69 loc) • 1.72 kB
JavaScript
;
import { create } from 'zustand';
import { createJSONStorage, persist } from 'zustand/middleware';
import { MMKV } from 'react-native-mmkv';
export const adsStorage = new MMKV({
id: 'adsPlayerStorage',
encryptionKey: 'adsPlayerKey'
});
export const adsMmkvStorage = {
setItem: (key, value) => adsStorage.set(key, value),
getItem: key => adsStorage.getString(key) ?? null,
removeItem: key => adsStorage.delete(key)
};
const adsStoreDataDefaults = {
currentAd: null,
isAdPlaying: false,
isAdPaused: false,
isAdMuted: false,
isAdBuffering: false,
adCurrentTime: 0,
adDuration: 0,
pendingMidRollAds: [],
showSkipButton: false,
resumeTime: null
};
export const useAdsPlayerStore = create()(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)
}));
//# sourceMappingURL=adsPlayerStore.js.map