@draftbit/core 54.1.1-ab9b11.2 → 54.1.1

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": "54.1.1-ab9b11.2+ab9b111",
3
+ "version": "54.1.1",
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": "^54.1.1-ab9b11.2+ab9b111",
45
+ "@draftbit/theme": "54.1.1",
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": "ab9b11171f08824a491b297918698e62688f4c06"
126
+ "gitHead": "fe188e680d1ee69cad8de616ee9e889e4b7efc15"
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 {
@@ -125,6 +123,11 @@ const VideoPlayer = React.forwardRef<VideoPlayerRef, VideoPlayerProps>(
125
123
  const hasAppliedInitialState = React.useRef(false);
126
124
 
127
125
  React.useEffect(() => {
126
+ // 'useVideoPlayer' builds a new player whenever the source changes, so the
127
+ // initial state has to be applied again
128
+ hasAppliedInitialState.current = false;
129
+ setIsPlaying(player.playing);
130
+
128
131
  const timeUpdateSub = player.addListener("timeUpdate", (status) => {
129
132
  onPlaybackStatusUpdateProp?.(mapToMediaPlayerStatus(status, player));
130
133
  });
@@ -171,18 +174,7 @@ const VideoPlayer = React.forwardRef<VideoPlayerRef, VideoPlayerProps>(
171
174
  playToEndSub.remove();
172
175
  statusChangeSub.remove();
173
176
  };
174
- }, []);
175
-
176
- // Replace video source when it changes (deep comparison on URI to avoid unnecessary reloads)
177
- const isFirstSourceRender = React.useRef(true);
178
- useSourceDeepCompareEffect(() => {
179
- if (isFirstSourceRender.current) {
180
- isFirstSourceRender.current = false;
181
- return;
182
- }
183
- hasAppliedInitialState.current = false;
184
- player.replace(normalizeBase64Source(source, "video") as VideoSource);
185
- }, [source]);
177
+ }, [player]);
186
178
 
187
179
  let mappedVideoContentFit: VideoContentFit;
188
180
  switch (resizeMode) {
@@ -232,16 +224,13 @@ const VideoPlayer = React.forwardRef<VideoPlayerRef, VideoPlayerProps>(
232
224
  ref,
233
225
  () => ({
234
226
  toggleFullscreen,
235
- seekToPosition:
236
- mediaPlaybackWrapperRef.current?.seekToPosition || (() => {}),
237
- togglePlayback:
238
- mediaPlaybackWrapperRef.current?.togglePlayback || (() => {}),
239
- pause: mediaPlaybackWrapperRef.current?.pause || (() => {}),
240
- play: mediaPlaybackWrapperRef.current?.play || (() => {}),
227
+ seekToPosition: (positionMillis: number) =>
228
+ mediaPlaybackWrapperRef.current?.seekToPosition(positionMillis),
229
+ togglePlayback: () => mediaPlaybackWrapperRef.current?.togglePlayback(),
230
+ pause: () => mediaPlaybackWrapperRef.current?.pause(),
231
+ play: () => mediaPlaybackWrapperRef.current?.play(),
241
232
  }),
242
- // Include 'isPlaying' as dependency because 'togglePlayback' changes when it changes
243
- // eslint-disable-next-line react-hooks/exhaustive-deps
244
- [toggleFullscreen, isPlaying]
233
+ [toggleFullscreen]
245
234
  );
246
235
 
247
236
  return (