@draftbit/core 55.0.1 → 55.0.2

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.2",
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.2",
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": "57548c2177e815694b1335507a3327b42071739b"
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 {
@@ -126,6 +124,11 @@ const VideoPlayer = React.forwardRef<VideoPlayerRef, VideoPlayerProps>(
126
124
  const hasAppliedInitialState = React.useRef(false);
127
125
 
128
126
  React.useEffect(() => {
127
+ // 'useVideoPlayer' builds a new player whenever the source changes, so the
128
+ // initial state has to be applied again
129
+ hasAppliedInitialState.current = false;
130
+ setIsPlaying(player.playing);
131
+
129
132
  const timeUpdateSub = player.addListener("timeUpdate", (status) => {
130
133
  onPlaybackStatusUpdateProp?.(mapToMediaPlayerStatus(status, player));
131
134
  });
@@ -172,18 +175,7 @@ const VideoPlayer = React.forwardRef<VideoPlayerRef, VideoPlayerProps>(
172
175
  playToEndSub.remove();
173
176
  statusChangeSub.remove();
174
177
  };
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]);
178
+ }, [player]);
187
179
 
188
180
  let mappedVideoContentFit: VideoContentFit;
189
181
  switch (resizeMode) {
@@ -233,16 +225,13 @@ const VideoPlayer = React.forwardRef<VideoPlayerRef, VideoPlayerProps>(
233
225
  ref,
234
226
  () => ({
235
227
  toggleFullscreen,
236
- seekToPosition:
237
- mediaPlaybackWrapperRef.current?.seekToPosition || (() => {}),
238
- togglePlayback:
239
- mediaPlaybackWrapperRef.current?.togglePlayback || (() => {}),
240
- pause: mediaPlaybackWrapperRef.current?.pause || (() => {}),
241
- play: mediaPlaybackWrapperRef.current?.play || (() => {}),
228
+ seekToPosition: (positionMillis: number) =>
229
+ mediaPlaybackWrapperRef.current?.seekToPosition(positionMillis),
230
+ togglePlayback: () => mediaPlaybackWrapperRef.current?.togglePlayback(),
231
+ pause: () => mediaPlaybackWrapperRef.current?.pause(),
232
+ play: () => mediaPlaybackWrapperRef.current?.play(),
242
233
  }),
243
- // Include 'isPlaying' as dependency because 'togglePlayback' changes when it changes
244
- // eslint-disable-next-line react-hooks/exhaustive-deps
245
- [toggleFullscreen, isPlaying]
234
+ [toggleFullscreen]
246
235
  );
247
236
 
248
237
  return (