mirror of
https://github.com/zoriya/react-native-omni.git
synced 2026-08-16 02:44:51 +00:00
Add events handlers
This commit is contained in:
+23
-3
@@ -24,8 +24,28 @@ export const useEvent = <Event extends keyof OmniEvents>(
|
||||
export const usePlayerState = <Key extends keyof OmniPlayerState>(
|
||||
key: Key,
|
||||
): OmniPlayerState[Key] => {
|
||||
const player = usePlayer();
|
||||
const [ret, setState] = useState(player[key]);
|
||||
// TODO: find a way to listen to that.
|
||||
const player = usePlayer() as OmniPlayer;
|
||||
const [ret, setState] = useState<any>(player[key]);
|
||||
|
||||
useEffect(() => {
|
||||
const em = player.eventMap;
|
||||
switch (key) {
|
||||
case "currentTime":
|
||||
case "buffered":
|
||||
case "duration":
|
||||
case "playbackRate":
|
||||
case "volume":
|
||||
em.addStateListener(key, setState);
|
||||
return () => em.removeStateListener(key, setState);
|
||||
case "isPlaying":
|
||||
case "muted":
|
||||
em.addStateBoolListener(key, setState);
|
||||
return () => em.removeStateBoolListener(key, setState);
|
||||
case "status":
|
||||
em.addPlayerStatusListener(setState);
|
||||
return () => em.removePlayerStatusListener(setState);
|
||||
}
|
||||
}, [player, key]);
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
export { useEvent, usePlayerState } from "./events";
|
||||
export { OmniProvider, usePlayer } from "./provider";
|
||||
export { OmniView } from "./view";
|
||||
|
||||
@@ -1,17 +1,28 @@
|
||||
import type { HybridObject } from "react-native-nitro-modules";
|
||||
import type { OmniEvents } from "../types/events";
|
||||
import type {
|
||||
// OmniPlayerState,
|
||||
OmniPlayerState,
|
||||
OmniPlayer as OmniPlayerT,
|
||||
PlayerStatus,
|
||||
} from "../types/player";
|
||||
import type { Source } from "../types/source";
|
||||
|
||||
export type NumberProperty = Exclude<
|
||||
keyof OmniPlayerState,
|
||||
"status" | "isPlaying" | "muted"
|
||||
>;
|
||||
export type BoolProperty = "isPlaying" | "muted";
|
||||
|
||||
export interface OmniEventMap extends HybridObject<{ android: "kotlin" }> {
|
||||
// addStateListener(
|
||||
// key: keyof OmniPlayerState,
|
||||
// cb: (value: number) => void,
|
||||
// ): void;
|
||||
// removeStateListener(cb: OmniEvents["end"]): void;
|
||||
addStateListener(key: NumberProperty, cb: (value: number) => void): void;
|
||||
removeStateListener(key: NumberProperty, cb: (value: number) => void): void;
|
||||
addStateBoolListener(key: BoolProperty, cb: (value: boolean) => void): void;
|
||||
removeStateBoolListener(
|
||||
key: BoolProperty,
|
||||
cb: (value: boolean) => void,
|
||||
): void;
|
||||
addPlayerStatusListener(cb: (value: PlayerStatus) => void): void;
|
||||
removePlayerStatusListener(cb: (value: PlayerStatus) => void): void;
|
||||
|
||||
addOnEndListener(cb: OmniEvents["end"]): void;
|
||||
removeOnEndListener(cb: OmniEvents["end"]): void;
|
||||
|
||||
Reference in New Issue
Block a user