@draftbit/core 55.0.1 → 55.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@draftbit/core",
3
- "version": "55.0.1",
3
+ "version": "55.0.3",
4
4
  "description": "Core (non-native) Components",
5
5
  "main": "./src/index.tsx",
6
6
  "react-native": "./src/index.tsx",
@@ -42,7 +42,7 @@
42
42
  "homepage": "https://github.com/draftbit/react-native-jigsaw#readme",
43
43
  "dependencies": {
44
44
  "@draftbit/react-theme-provider": "^2.1.1",
45
- "@draftbit/theme": "55.0.1",
45
+ "@draftbit/theme": "55.0.3",
46
46
  "@emotion/react": "^11.13.5",
47
47
  "@emotion/styled": "^11.13.5",
48
48
  "@expo/vector-icons": "^15.0.3",
@@ -123,5 +123,5 @@
123
123
  ],
124
124
  "testEnvironment": "node"
125
125
  },
126
- "gitHead": "f30a27c1411df6202dae750f7273d72c24efee47"
126
+ "gitHead": "21ab4a3b9536ef056dc753f93c27e76c7c334090"
127
127
  }
@@ -4,7 +4,6 @@ import { HeadlessAudioPlayerProps } from "./AudioPlayerCommon";
4
4
  import {
5
5
  normalizeBase64Source,
6
6
  useSourceDeepCompareMemoize,
7
- useSourceDeepCompareEffect,
8
7
  } from "../MediaPlayerCommon";
9
8
  import type { MediaPlayerRef, MediaPlayerStatus } from "../MediaPlayerCommon";
10
9
  import MediaPlaybackWrapper from "../MediaPlaybackWrapper";
@@ -60,6 +59,10 @@ const HeadlessAudioPlayer = React.forwardRef<
60
59
  }, []);
61
60
 
62
61
  React.useEffect(() => {
62
+ // 'useAudioPlayer' builds a new player whenever the source changes, so the
63
+ // mirrored playing state has to be resynced
64
+ setIsPlaying(player.playing);
65
+
63
66
  const subscription = player.addListener(
64
67
  "playbackStatusUpdate",
65
68
  (status) => {
@@ -75,17 +78,7 @@ const HeadlessAudioPlayer = React.forwardRef<
75
78
  }
76
79
  );
77
80
  return () => subscription.remove();
78
- }, []);
79
-
80
- // Replace source when it changes (deep comparison on URI to avoid unnecessary reloads)
81
- const isFirstSourceRender = React.useRef(true);
82
- useSourceDeepCompareEffect(() => {
83
- if (isFirstSourceRender.current) {
84
- isFirstSourceRender.current = false;
85
- return;
86
- }
87
- player.replace(normalizeBase64Source(source, "audio") as any);
88
- }, [source]);
81
+ }, [player]);
89
82
 
90
83
  const updateAudioMode = React.useCallback(async () => {
91
84
  try {
@@ -25,7 +25,7 @@ const MediaPlaybackWrapper = React.forwardRef<
25
25
  } else {
26
26
  player?.play();
27
27
  }
28
- }, [isPlaying, onTogglePlayback]);
28
+ }, [isPlaying, onTogglePlayback, player]);
29
29
 
30
30
  const pause = React.useCallback(() => {
31
31
  onTogglePlayback?.();
@@ -13,14 +13,12 @@ import {
13
13
  useVideoPlayer,
14
14
  TimeUpdateEventPayload,
15
15
  VideoPlayer as VideoPlayerType,
16
- VideoSource,
17
16
  } from "expo-video";
18
17
  import { setAudioModeAsync } from "expo-audio";
19
18
  import { extractSizeStyles } from "../../../utilities";
20
19
  import MediaPlaybackWrapper from "../MediaPlaybackWrapper";
21
20
  import {
22
21
  normalizeBase64Source,
23
- useSourceDeepCompareEffect,
24
22
  useSourceDeepCompareMemoize,
25
23
  } from "../MediaPlayerCommon";
26
24
  import type {
@@ -88,6 +86,7 @@ const VideoPlayer = React.forwardRef<VideoPlayerRef, VideoPlayerProps>(
88
86
  p.muted = isMuted;
89
87
  p.volume = volume;
90
88
  p.playbackRate = rate;
89
+ p.timeUpdateEventInterval = 0.5;
91
90
  });
92
91
 
93
92
  const videoPlayerRef = React.useRef<VideoPlayerComponent>(null);
@@ -126,6 +125,11 @@ const VideoPlayer = React.forwardRef<VideoPlayerRef, VideoPlayerProps>(
126
125
  const hasAppliedInitialState = React.useRef(false);
127
126
 
128
127
  React.useEffect(() => {
128
+ // 'useVideoPlayer' builds a new player whenever the source changes, so the
129
+ // initial state has to be applied again
130
+ hasAppliedInitialState.current = false;
131
+ setIsPlaying(player.playing);
132
+
129
133
  const timeUpdateSub = player.addListener("timeUpdate", (status) => {
130
134
  onPlaybackStatusUpdateProp?.(mapToMediaPlayerStatus(status, player));
131
135
  });
@@ -172,18 +176,7 @@ const VideoPlayer = React.forwardRef<VideoPlayerRef, VideoPlayerProps>(
172
176
  playToEndSub.remove();
173
177
  statusChangeSub.remove();
174
178
  };
175
- }, []);
176
-
177
- // Replace video source when it changes (deep comparison on URI to avoid unnecessary reloads)
178
- const isFirstSourceRender = React.useRef(true);
179
- useSourceDeepCompareEffect(() => {
180
- if (isFirstSourceRender.current) {
181
- isFirstSourceRender.current = false;
182
- return;
183
- }
184
- hasAppliedInitialState.current = false;
185
- player.replace(normalizeBase64Source(source, "video") as VideoSource);
186
- }, [source]);
179
+ }, [player]);
187
180
 
188
181
  let mappedVideoContentFit: VideoContentFit;
189
182
  switch (resizeMode) {
@@ -233,16 +226,13 @@ const VideoPlayer = React.forwardRef<VideoPlayerRef, VideoPlayerProps>(
233
226
  ref,
234
227
  () => ({
235
228
  toggleFullscreen,
236
- seekToPosition:
237
- mediaPlaybackWrapperRef.current?.seekToPosition || (() => {}),
238
- togglePlayback:
239
- mediaPlaybackWrapperRef.current?.togglePlayback || (() => {}),
240
- pause: mediaPlaybackWrapperRef.current?.pause || (() => {}),
241
- play: mediaPlaybackWrapperRef.current?.play || (() => {}),
229
+ seekToPosition: (positionMillis: number) =>
230
+ mediaPlaybackWrapperRef.current?.seekToPosition(positionMillis),
231
+ togglePlayback: () => mediaPlaybackWrapperRef.current?.togglePlayback(),
232
+ pause: () => mediaPlaybackWrapperRef.current?.pause(),
233
+ play: () => mediaPlaybackWrapperRef.current?.play(),
242
234
  }),
243
- // Include 'isPlaying' as dependency because 'togglePlayback' changes when it changes
244
- // eslint-disable-next-line react-hooks/exhaustive-deps
245
- [toggleFullscreen, isPlaying]
235
+ [toggleFullscreen]
246
236
  );
247
237
 
248
238
  return (