@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
143 lines (142 loc) • 3.31 kB
JavaScript
;
import { create } from 'zustand';
import { createJSONStorage, persist } from 'zustand/middleware';
import { MMKV } from 'react-native-mmkv';
import { ResizeMode } from 'react-native-video';
export const storage = new MMKV({
id: 'videoPlayerStorage',
encryptionKey: 'videoPlayerKey'
});
export const mmkvStorage = {
setItem: (key, value) => storage.set(key, value),
getItem: key => storage.getString(key) ?? null,
removeItem: key => storage.delete(key)
};
const storeDataDefaults = {
currentTime: 0,
duration: 0,
isPaused: false,
isBuffering: false,
resizeMode: ResizeMode.CONTAIN,
controlsVisible: true,
controlsTimer: 6,
activeTrack: null,
playableDuration: 0,
settingsModal: {
isVisible: false,
action: 'none'
},
playBackRate: 1,
playBackRateLabel: null,
onLoad: null,
selectedAudioTrack: null,
selectedSubtitleTrack: null,
selectedVideoTrack: null,
activeSubtitle: null,
maxBitRate: null,
startWatchTime: null,
playList: [],
currentTrackIndex: 0,
contentSeasons: null,
activeSeason: null,
error: null,
isViewCounted: false,
isSkipIntroVisible: false,
isNextEpisodeVisible: false
};
export const useVideoPlayerStore = create()(persist(set => ({
...storeDataDefaults,
setCurrentTime: currentTime => set({
currentTime
}),
setDuration: duration => set({
duration
}),
setIsPaused: isPaused => set({
isPaused
}),
setIsBuffering: isBuffering => set({
isBuffering
}),
setResizeMode: resizeMode => set({
resizeMode
}),
setControlsVisible: controlsVisible => set({
controlsVisible
}),
setControlsTimer: controlsTimer => set({
controlsTimer
}),
setActiveTrack: activeTrack => set({
activeTrack
}),
setPlayableDuration: playableDuration => set({
playableDuration
}),
setSettingsModal: ({
isVisible,
action
}) => set({
settingsModal: {
isVisible,
action
}
}),
setPlayBackRate: (playBackRate, playBackRateLabel) => set({
playBackRate,
playBackRateLabel
}),
setOnLoad: onLoad => set({
onLoad
}),
setSelectedAudioTrack: selectedAudioTrack => set({
selectedAudioTrack
}),
setSelectedSubtitleTrack: selectedSubtitleTrack => set({
selectedSubtitleTrack
}),
setSelectedVideoTrack: selectedVideoTrack => set({
selectedVideoTrack
}),
setActiveSubtitle: activeSubtitle => set({
activeSubtitle
}),
setMaxBitRate: maxBitRate => set({
maxBitRate
}),
setStartWatchTime: startWatchTime => set({
startWatchTime
}),
setPlayList: playList => set({
playList
}),
setCurrentTrackIndex: currentTrackIndex => set({
currentTrackIndex
}),
setContentSeasons: contentSeasons => set({
contentSeasons
}),
setActiveSeason: activeSeason => set({
activeSeason
}),
setError: error => set({
error
}),
setIsViewCounted: isViewCounted => set({
isViewCounted
}),
setIsSkipIntroVisible: isSkipIntroVisible => set({
isSkipIntroVisible
}),
setIsNextEpisodeVisible: isNextEpisodeVisible => set({
isNextEpisodeVisible
}),
resetStore: () => {
set(storeDataDefaults);
storage.clearAll();
}
}), {
name: 'VideoPlayerStorage',
storage: createJSONStorage(() => mmkvStorage)
}));
//# sourceMappingURL=videoPlayerStore.js.map