mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-15 07:35:27 +03:00
export preview dialog when using timeline export
This commit is contained in:
parent
caa70b3e50
commit
3a9af74f54
@ -3,7 +3,7 @@ import { Drawer, DrawerContent, DrawerTrigger } from "../ui/drawer";
|
|||||||
import { Button } from "../ui/button";
|
import { Button } from "../ui/button";
|
||||||
import { FaArrowDown, FaCalendarAlt, FaCog, FaFilter } from "react-icons/fa";
|
import { FaArrowDown, FaCalendarAlt, FaCog, FaFilter } from "react-icons/fa";
|
||||||
import { TimeRange } from "@/types/timeline";
|
import { TimeRange } from "@/types/timeline";
|
||||||
import { ExportContent } from "./ExportDialog";
|
import { ExportContent, ExportPreviewDialog } from "./ExportDialog";
|
||||||
import { ExportMode } from "@/types/filter";
|
import { ExportMode } from "@/types/filter";
|
||||||
import ReviewActivityCalendar from "./ReviewActivityCalendar";
|
import ReviewActivityCalendar from "./ReviewActivityCalendar";
|
||||||
import { SelectSeparator } from "../ui/select";
|
import { SelectSeparator } from "../ui/select";
|
||||||
@ -34,12 +34,14 @@ type MobileReviewSettingsDrawerProps = {
|
|||||||
currentTime: number;
|
currentTime: number;
|
||||||
range?: TimeRange;
|
range?: TimeRange;
|
||||||
mode: ExportMode;
|
mode: ExportMode;
|
||||||
|
showExportPreview: boolean;
|
||||||
reviewSummary?: ReviewSummary;
|
reviewSummary?: ReviewSummary;
|
||||||
allLabels: string[];
|
allLabels: string[];
|
||||||
allZones: string[];
|
allZones: string[];
|
||||||
onUpdateFilter: (filter: ReviewFilter) => void;
|
onUpdateFilter: (filter: ReviewFilter) => void;
|
||||||
setRange: (range: TimeRange | undefined) => void;
|
setRange: (range: TimeRange | undefined) => void;
|
||||||
setMode: (mode: ExportMode) => void;
|
setMode: (mode: ExportMode) => void;
|
||||||
|
setShowExportPreview: (showPreview: boolean) => void;
|
||||||
};
|
};
|
||||||
export default function MobileReviewSettingsDrawer({
|
export default function MobileReviewSettingsDrawer({
|
||||||
features = DEFAULT_DRAWER_FEATURES,
|
features = DEFAULT_DRAWER_FEATURES,
|
||||||
@ -50,12 +52,14 @@ export default function MobileReviewSettingsDrawer({
|
|||||||
currentTime,
|
currentTime,
|
||||||
range,
|
range,
|
||||||
mode,
|
mode,
|
||||||
|
showExportPreview,
|
||||||
reviewSummary,
|
reviewSummary,
|
||||||
allLabels,
|
allLabels,
|
||||||
allZones,
|
allZones,
|
||||||
onUpdateFilter,
|
onUpdateFilter,
|
||||||
setRange,
|
setRange,
|
||||||
setMode,
|
setMode,
|
||||||
|
setShowExportPreview,
|
||||||
}: MobileReviewSettingsDrawerProps) {
|
}: MobileReviewSettingsDrawerProps) {
|
||||||
const [drawerMode, setDrawerMode] = useState<DrawerMode>("none");
|
const [drawerMode, setDrawerMode] = useState<DrawerMode>("none");
|
||||||
|
|
||||||
@ -282,6 +286,13 @@ export default function MobileReviewSettingsDrawer({
|
|||||||
show={mode == "timeline"}
|
show={mode == "timeline"}
|
||||||
onSave={() => onStartExport()}
|
onSave={() => onStartExport()}
|
||||||
onCancel={() => setMode("none")}
|
onCancel={() => setMode("none")}
|
||||||
|
onPreview={() => setShowExportPreview(true)}
|
||||||
|
/>
|
||||||
|
<ExportPreviewDialog
|
||||||
|
camera={camera}
|
||||||
|
range={range}
|
||||||
|
showPreview={showExportPreview}
|
||||||
|
setShowPreview={setShowExportPreview}
|
||||||
/>
|
/>
|
||||||
<Drawer
|
<Drawer
|
||||||
modal={!(isIOS && drawerMode == "export")}
|
modal={!(isIOS && drawerMode == "export")}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { LuX } from "react-icons/lu";
|
import { LuVideo, LuX } from "react-icons/lu";
|
||||||
import { Button } from "../ui/button";
|
import { Button } from "../ui/button";
|
||||||
import { FaCompactDisc } from "react-icons/fa";
|
import { FaCompactDisc } from "react-icons/fa";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
@ -6,12 +6,14 @@ import { cn } from "@/lib/utils";
|
|||||||
type SaveExportOverlayProps = {
|
type SaveExportOverlayProps = {
|
||||||
className: string;
|
className: string;
|
||||||
show: boolean;
|
show: boolean;
|
||||||
|
onPreview: () => void;
|
||||||
onSave: () => void;
|
onSave: () => void;
|
||||||
onCancel: () => void;
|
onCancel: () => void;
|
||||||
};
|
};
|
||||||
export default function SaveExportOverlay({
|
export default function SaveExportOverlay({
|
||||||
className,
|
className,
|
||||||
show,
|
show,
|
||||||
|
onPreview,
|
||||||
onSave,
|
onSave,
|
||||||
onCancel,
|
onCancel,
|
||||||
}: SaveExportOverlayProps) {
|
}: SaveExportOverlayProps) {
|
||||||
@ -24,6 +26,22 @@ export default function SaveExportOverlay({
|
|||||||
"mx-auto mt-5 text-center",
|
"mx-auto mt-5 text-center",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
<Button
|
||||||
|
className="flex items-center gap-1 text-primary"
|
||||||
|
size="sm"
|
||||||
|
onClick={onCancel}
|
||||||
|
>
|
||||||
|
<LuX />
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
className="flex items-center gap-1"
|
||||||
|
size="sm"
|
||||||
|
onClick={onPreview}
|
||||||
|
>
|
||||||
|
<LuVideo />
|
||||||
|
Preview Export
|
||||||
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
className="flex items-center gap-1"
|
className="flex items-center gap-1"
|
||||||
variant="select"
|
variant="select"
|
||||||
@ -33,14 +51,6 @@ export default function SaveExportOverlay({
|
|||||||
<FaCompactDisc />
|
<FaCompactDisc />
|
||||||
Save Export
|
Save Export
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
|
||||||
className="flex items-center gap-1 text-primary"
|
|
||||||
size="sm"
|
|
||||||
onClick={onCancel}
|
|
||||||
>
|
|
||||||
<LuX />
|
|
||||||
Cancel
|
|
||||||
</Button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -140,6 +140,7 @@ export function RecordingView({
|
|||||||
|
|
||||||
const [exportMode, setExportMode] = useState<ExportMode>("none");
|
const [exportMode, setExportMode] = useState<ExportMode>("none");
|
||||||
const [exportRange, setExportRange] = useState<TimeRange>();
|
const [exportRange, setExportRange] = useState<TimeRange>();
|
||||||
|
const [showExportPreview, setShowExportPreview] = useState(false);
|
||||||
|
|
||||||
// move to next clip
|
// move to next clip
|
||||||
|
|
||||||
@ -412,6 +413,7 @@ export function RecordingView({
|
|||||||
latestTime={timeRange.before}
|
latestTime={timeRange.before}
|
||||||
mode={exportMode}
|
mode={exportMode}
|
||||||
range={exportRange}
|
range={exportRange}
|
||||||
|
showPreview={showExportPreview}
|
||||||
setRange={(range) => {
|
setRange={(range) => {
|
||||||
setExportRange(range);
|
setExportRange(range);
|
||||||
|
|
||||||
@ -420,6 +422,7 @@ export function RecordingView({
|
|||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
setMode={setExportMode}
|
setMode={setExportMode}
|
||||||
|
setShowPreview={setShowExportPreview}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{isDesktop && (
|
{isDesktop && (
|
||||||
@ -473,11 +476,13 @@ export function RecordingView({
|
|||||||
latestTime={timeRange.before}
|
latestTime={timeRange.before}
|
||||||
mode={exportMode}
|
mode={exportMode}
|
||||||
range={exportRange}
|
range={exportRange}
|
||||||
|
showExportPreview={showExportPreview}
|
||||||
allLabels={reviewFilterList.labels}
|
allLabels={reviewFilterList.labels}
|
||||||
allZones={reviewFilterList.zones}
|
allZones={reviewFilterList.zones}
|
||||||
onUpdateFilter={updateFilter}
|
onUpdateFilter={updateFilter}
|
||||||
setRange={setExportRange}
|
setRange={setExportRange}
|
||||||
setMode={setExportMode}
|
setMode={setExportMode}
|
||||||
|
setShowExportPreview={setShowExportPreview}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user