mobile switch

This commit is contained in:
Nicolas Mowen 2024-03-09 17:31:51 -07:00
parent 6a9a6626f4
commit f213e01de8
2 changed files with 44 additions and 10 deletions

View File

@ -4,6 +4,13 @@ import DynamicVideoPlayer, {
import EventReviewTimeline from "@/components/timeline/EventReviewTimeline"; import EventReviewTimeline from "@/components/timeline/EventReviewTimeline";
import MotionReviewTimeline from "@/components/timeline/MotionReviewTimeline"; import MotionReviewTimeline from "@/components/timeline/MotionReviewTimeline";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { Preview } from "@/types/preview"; import { Preview } from "@/types/preview";
import { MotionData, ReviewSegment, ReviewSeverity } from "@/types/review"; import { MotionData, ReviewSegment, ReviewSeverity } from "@/types/review";
import { getChunkedTimeDay } from "@/utils/timelineUtil"; import { getChunkedTimeDay } from "@/utils/timelineUtil";
@ -258,6 +265,7 @@ type MobileRecordingViewProps = {
severity: ReviewSeverity; severity: ReviewSeverity;
reviewItems: ReviewSegment[]; reviewItems: ReviewSegment[];
relevantPreviews?: Preview[]; relevantPreviews?: Preview[];
allCameras: string[];
}; };
export function MobileRecordingView({ export function MobileRecordingView({
startCamera, startCamera,
@ -265,6 +273,7 @@ export function MobileRecordingView({
severity, severity,
reviewItems, reviewItems,
relevantPreviews, relevantPreviews,
allCameras,
}: MobileRecordingViewProps) { }: MobileRecordingViewProps) {
const navigate = useNavigate(); const navigate = useNavigate();
const contentRef = useRef<HTMLDivElement | null>(null); const contentRef = useRef<HTMLDivElement | null>(null);
@ -273,6 +282,8 @@ export function MobileRecordingView({
const [playerReady, setPlayerReady] = useState(false); const [playerReady, setPlayerReady] = useState(false);
const controllerRef = useRef<DynamicVideoController | undefined>(undefined); const controllerRef = useRef<DynamicVideoController | undefined>(undefined);
const [playbackCamera, setPlaybackCamera] = useState(startCamera);
const [playbackStart, setPlaybackStart] = useState(startTime);
// timeline time // timeline time
@ -355,16 +366,39 @@ export function MobileRecordingView({
return ( return (
<div ref={contentRef} className="flex flex-col relative w-full h-full"> <div ref={contentRef} className="flex flex-col relative w-full h-full">
<div className="flex justify-evenly items-center">
<Button className="rounded-lg" onClick={() => navigate(-1)}> <Button className="rounded-lg" onClick={() => navigate(-1)}>
<IoMdArrowRoundBack className="size-5 mr-[10px]" /> <IoMdArrowRoundBack className="size-5 mr-[10px]" />
Back Back
</Button> </Button>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button>{playbackCamera}</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuRadioGroup
value={playbackCamera}
onValueChange={(cam) => {
setPlaybackStart(currentTime);
setPlaybackCamera(cam);
}}
>
{allCameras.map((cam) => (
<DropdownMenuRadioItem key={cam} value={cam}>
{cam.replaceAll("_", " ")}
</DropdownMenuRadioItem>
))}
</DropdownMenuRadioGroup>
</DropdownMenuContent>
</DropdownMenu>
</div>
<div> <div>
<DynamicVideoPlayer <DynamicVideoPlayer
camera={startCamera} camera={startCamera}
timeRange={currentTimeRange} timeRange={currentTimeRange}
cameraPreviews={relevantPreviews || []} cameraPreviews={relevantPreviews || []}
startTime={playbackStart}
onControllerReady={(controller) => { onControllerReady={(controller) => {
controllerRef.current = controller; controllerRef.current = controller;
setPlayerReady(true); setPlayerReady(true);

View File

@ -12,24 +12,24 @@ export default defineConfig({
server: { server: {
proxy: { proxy: {
"/api": { "/api": {
target: "http://localhost:5000", target: "http://192.168.50.106:5000",
ws: true, ws: true,
}, },
"/vod": { "/vod": {
target: "http://localhost:5000", target: "http://192.168.50.106:5000",
}, },
"/clips": { "/clips": {
target: "http://localhost:5000", target: "http://192.168.50.106:5000",
}, },
"/exports": { "/exports": {
target: "http://localhost:5000", target: "http://192.168.50.106:5000",
}, },
"/ws": { "/ws": {
target: "ws://localhost:5000", target: "ws://192.168.50.106:5000",
ws: true, ws: true,
}, },
"/live": { "/live": {
target: "ws://localhost:5000", target: "ws://192.168.50.106:5000",
changeOrigin: true, changeOrigin: true,
ws: true, ws: true,
}, },