-
Notifications
You must be signed in to change notification settings - Fork 589
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Release/v1.0.1 #4914
Release/v1.0.1 #4914
Changes from 16 commits
f08b8cc
221d807
cc430f4
b375477
2496795
2580fb5
b481bf3
17e8e53
ac6f451
35c13f7
a2d26f0
46c1929
cd62462
cad8d42
37634ad
233689b
2adc94e
b48fbce
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,80 @@ | ||||||||||||||||||||||||||||
import { useTheme } from "@fiftyone/components"; | ||||||||||||||||||||||||||||
import type { VideoLooker } from "@fiftyone/looker"; | ||||||||||||||||||||||||||||
import { getFrameNumber } from "@fiftyone/looker"; | ||||||||||||||||||||||||||||
import { | ||||||||||||||||||||||||||||
useCreateTimeline, | ||||||||||||||||||||||||||||
useDefaultTimelineNameImperative, | ||||||||||||||||||||||||||||
useTimeline, | ||||||||||||||||||||||||||||
} from "@fiftyone/playback"; | ||||||||||||||||||||||||||||
import * as fos from "@fiftyone/state"; | ||||||||||||||||||||||||||||
import React, { useEffect, useMemo, useState } from "react"; | ||||||||||||||||||||||||||||
import useLooker from "./use-looker"; | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
interface VideoLookerReactProps { | ||||||||||||||||||||||||||||
sample: fos.ModalSample; | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
export const VideoLookerReact = (props: VideoLookerReactProps) => { | ||||||||||||||||||||||||||||
const theme = useTheme(); | ||||||||||||||||||||||||||||
const { id, looker, sample } = useLooker<VideoLooker>(props); | ||||||||||||||||||||||||||||
const [totalFrames, setTotalFrames] = useState<number>(); | ||||||||||||||||||||||||||||
const frameRate = useMemo(() => { | ||||||||||||||||||||||||||||
return sample.frameRate; | ||||||||||||||||||||||||||||
}, [sample]); | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
useEffect(() => { | ||||||||||||||||||||||||||||
const load = () => { | ||||||||||||||||||||||||||||
const duration = looker.getVideo().duration; | ||||||||||||||||||||||||||||
setTotalFrames(getFrameNumber(duration, duration, frameRate)); | ||||||||||||||||||||||||||||
looker.removeEventListener("load", load); | ||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||
looker.addEventListener("load", load); | ||||||||||||||||||||||||||||
}, [frameRate, looker]); | ||||||||||||||||||||||||||||
Comment on lines
+25
to
+32
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider using In the Apply this diff to refactor the event handling: -useEffect(() => {
- const load = () => {
- const duration = looker.getVideo().duration;
- setTotalFrames(getFrameNumber(duration, duration, frameRate));
- looker.removeEventListener("load", load);
- };
- looker.addEventListener("load", load);
-}, [frameRate, looker]);
+fos.useEventHandler(looker, "load", () => {
+ const duration = looker.getVideo().duration;
+ setTotalFrames(getFrameNumber(duration, duration, frameRate));
+}); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
return ( | ||||||||||||||||||||||||||||
<> | ||||||||||||||||||||||||||||
<div | ||||||||||||||||||||||||||||
id={id} | ||||||||||||||||||||||||||||
data-cy="modal-looker-container" | ||||||||||||||||||||||||||||
style={{ | ||||||||||||||||||||||||||||
width: "100%", | ||||||||||||||||||||||||||||
height: "100%", | ||||||||||||||||||||||||||||
background: theme.background.level2, | ||||||||||||||||||||||||||||
position: "relative", | ||||||||||||||||||||||||||||
}} | ||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||
{totalFrames !== undefined && ( | ||||||||||||||||||||||||||||
<TimelineController looker={looker} totalFrames={totalFrames} /> | ||||||||||||||||||||||||||||
)} | ||||||||||||||||||||||||||||
</> | ||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
const TimelineController = ({ | ||||||||||||||||||||||||||||
looker, | ||||||||||||||||||||||||||||
totalFrames, | ||||||||||||||||||||||||||||
}: { | ||||||||||||||||||||||||||||
looker: VideoLooker; | ||||||||||||||||||||||||||||
totalFrames: number; | ||||||||||||||||||||||||||||
}) => { | ||||||||||||||||||||||||||||
Comment on lines
+53
to
+59
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Define a separate interface for Currently, the props for Apply this diff to define a +interface TimelineControllerProps {
+ looker: VideoLooker;
+ totalFrames: number;
+}
+
-const TimelineController = ({
- looker,
- totalFrames,
-}: {
- looker: VideoLooker;
- totalFrames: number;
-}) => {
+const TimelineController = ({ looker, totalFrames }: TimelineControllerProps) => { 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||
const { getName } = useDefaultTimelineNameImperative(); | ||||||||||||||||||||||||||||
const timelineName = React.useMemo(() => getName(), [getName]); | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
useCreateTimeline({ | ||||||||||||||||||||||||||||
name: timelineName, | ||||||||||||||||||||||||||||
config: totalFrames | ||||||||||||||||||||||||||||
? { | ||||||||||||||||||||||||||||
totalFrames, | ||||||||||||||||||||||||||||
loop: true, | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
: undefined, | ||||||||||||||||||||||||||||
optOutOfAnimation: true, | ||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
const { pause, play } = useTimeline(timelineName); | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
fos.useEventHandler(looker, "pause", pause); | ||||||||||||||||||||||||||||
fos.useEventHandler(looker, "play", play); | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
return null; | ||||||||||||||||||||||||||||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Missing
sample
Property in Multiple Components UsingLookerProps
Several components utilizing
LookerProps
do not provide the requiredsample
property, which may lead to potential runtime errors. Please ensure that all relevant components are updated to include thesample
property.Affected Files Include:
app/packages/core/src/components/Modal/ModalNavigation.tsx
app/packages/core/src/components/Modal/Renderer.tsx
app/packages/core/src/components/Sync.tsx
app/packages/core/src/components/Analytics.tsx
app/packages/core/src/components/Button/Button.tsx
🔗 Analysis chain
Ensure all components using
LookerProps
provide the requiredsample
propertyThe
sample
property inLookerProps
has been changed from optional to required. Please verify that all components usingLookerProps
have been updated to include thesample
property to prevent potential runtime errors.Run the following script to find all usages of
LookerProps
and check if they provide thesample
property:🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 76
Script:
Length of output: 176635