mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-12-29 00:06:19 +01:00
Simplify ws updating (#12390)
* Simplify ws updating * Simplify return values
This commit is contained in:
parent
fe4a737421
commit
e416e44998
@ -11,6 +11,7 @@ import {
|
|||||||
import { FrigateStats } from "@/types/stats";
|
import { FrigateStats } from "@/types/stats";
|
||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
import { createContainer } from "react-tracked";
|
import { createContainer } from "react-tracked";
|
||||||
|
import useDeepMemo from "@/hooks/use-deep-memo";
|
||||||
|
|
||||||
type Update = {
|
type Update = {
|
||||||
topic: string;
|
topic: string;
|
||||||
@ -206,18 +207,18 @@ export function useFrigateEvents(): { payload: FrigateEvent } {
|
|||||||
return { payload: JSON.parse(payload as string) };
|
return { payload: JSON.parse(payload as string) };
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useFrigateReviews(): { payload: FrigateReview } {
|
export function useFrigateReviews(): FrigateReview {
|
||||||
const {
|
const {
|
||||||
value: { payload },
|
value: { payload },
|
||||||
} = useWs("reviews", "");
|
} = useWs("reviews", "");
|
||||||
return { payload: JSON.parse(payload as string) };
|
return useDeepMemo(JSON.parse(payload as string));
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useFrigateStats(): { payload: FrigateStats } {
|
export function useFrigateStats(): FrigateStats {
|
||||||
const {
|
const {
|
||||||
value: { payload },
|
value: { payload },
|
||||||
} = useWs("stats", "");
|
} = useWs("stats", "");
|
||||||
return { payload: JSON.parse(payload as string) };
|
return useDeepMemo(JSON.parse(payload as string));
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useInitialCameraState(
|
export function useInitialCameraState(
|
||||||
@ -230,7 +231,8 @@ export function useInitialCameraState(
|
|||||||
value: { payload },
|
value: { payload },
|
||||||
send: sendCommand,
|
send: sendCommand,
|
||||||
} = useWs("camera_activity", "onConnect");
|
} = useWs("camera_activity", "onConnect");
|
||||||
const data = JSON.parse(payload as string);
|
|
||||||
|
const data = useDeepMemo(JSON.parse(payload as string));
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let listener = undefined;
|
let listener = undefined;
|
||||||
|
@ -48,7 +48,7 @@ function StatusAlertNav({ className }: StatusAlertNavProps) {
|
|||||||
const { data: initialStats } = useSWR<FrigateStats>("stats", {
|
const { data: initialStats } = useSWR<FrigateStats>("stats", {
|
||||||
revalidateOnFocus: false,
|
revalidateOnFocus: false,
|
||||||
});
|
});
|
||||||
const { payload: latestStats } = useFrigateStats();
|
const latestStats = useFrigateStats();
|
||||||
|
|
||||||
const { messages, addMessage, clearMessages } = useContext(
|
const { messages, addMessage, clearMessages } = useContext(
|
||||||
StatusBarMessagesContext,
|
StatusBarMessagesContext,
|
||||||
|
@ -27,13 +27,10 @@ export function useCameraActivity(
|
|||||||
|
|
||||||
// init camera activity
|
// init camera activity
|
||||||
|
|
||||||
const { payload: initialCameraState } = useInitialCameraState(
|
const { payload: updatedCameraState } = useInitialCameraState(
|
||||||
camera.name,
|
camera.name,
|
||||||
revalidateOnFocus,
|
revalidateOnFocus,
|
||||||
);
|
);
|
||||||
|
|
||||||
const updatedCameraState = useDeepMemo(initialCameraState);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (updatedCameraState) {
|
if (updatedCameraState) {
|
||||||
setObjects(updatedCameraState.objects);
|
setObjects(updatedCameraState.objects);
|
||||||
@ -140,7 +137,7 @@ export function useCameraActivity(
|
|||||||
activeTracking: hasActiveObjects,
|
activeTracking: hasActiveObjects,
|
||||||
activeMotion: detectingMotion
|
activeMotion: detectingMotion
|
||||||
? detectingMotion === "ON"
|
? detectingMotion === "ON"
|
||||||
: initialCameraState?.motion === true,
|
: updatedCameraState?.motion === true,
|
||||||
objects,
|
objects,
|
||||||
offline,
|
offline,
|
||||||
};
|
};
|
||||||
|
@ -97,7 +97,7 @@ export function useAutoFrigateStats() {
|
|||||||
const { data: initialStats } = useSWR<FrigateStats>("stats", {
|
const { data: initialStats } = useSWR<FrigateStats>("stats", {
|
||||||
revalidateOnFocus: false,
|
revalidateOnFocus: false,
|
||||||
});
|
});
|
||||||
const { payload: latestStats } = useFrigateStats();
|
const latestStats = useFrigateStats();
|
||||||
|
|
||||||
const stats = useMemo(() => {
|
const stats = useMemo(() => {
|
||||||
if (latestStats) {
|
if (latestStats) {
|
||||||
|
@ -31,7 +31,6 @@ import { cn } from "@/lib/utils";
|
|||||||
import { LivePlayerError, LivePlayerMode } from "@/types/live";
|
import { LivePlayerError, LivePlayerMode } from "@/types/live";
|
||||||
import { FaCompress, FaExpand } from "react-icons/fa";
|
import { FaCompress, FaExpand } from "react-icons/fa";
|
||||||
import { useResizeObserver } from "@/hooks/resize-observer";
|
import { useResizeObserver } from "@/hooks/resize-observer";
|
||||||
import useDeepMemo from "@/hooks/use-deep-memo";
|
|
||||||
|
|
||||||
type LiveDashboardViewProps = {
|
type LiveDashboardViewProps = {
|
||||||
cameras: CameraConfig[];
|
cameras: CameraConfig[];
|
||||||
@ -64,14 +63,12 @@ export default function LiveDashboardView({
|
|||||||
|
|
||||||
// recent events
|
// recent events
|
||||||
|
|
||||||
const { payload: reviewTopic } = useFrigateReviews();
|
const eventUpdate = useFrigateReviews();
|
||||||
const { data: allEvents, mutate: updateEvents } = useSWR<ReviewSegment[]>([
|
const { data: allEvents, mutate: updateEvents } = useSWR<ReviewSegment[]>([
|
||||||
"review",
|
"review",
|
||||||
{ limit: 10, severity: "alert" },
|
{ limit: 10, severity: "alert" },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const eventUpdate = useDeepMemo(reviewTopic);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!eventUpdate) {
|
if (!eventUpdate) {
|
||||||
return;
|
return;
|
||||||
|
@ -26,7 +26,7 @@ export default function CameraMetrics({
|
|||||||
);
|
);
|
||||||
|
|
||||||
const [statsHistory, setStatsHistory] = useState<FrigateStats[]>([]);
|
const [statsHistory, setStatsHistory] = useState<FrigateStats[]>([]);
|
||||||
const { payload: updatedStats } = useFrigateStats();
|
const updatedStats = useFrigateStats();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (initialStats == undefined || initialStats.length == 0) {
|
if (initialStats == undefined || initialStats.length == 0) {
|
||||||
|
@ -40,7 +40,7 @@ export default function GeneralMetrics({
|
|||||||
);
|
);
|
||||||
|
|
||||||
const [statsHistory, setStatsHistory] = useState<FrigateStats[]>([]);
|
const [statsHistory, setStatsHistory] = useState<FrigateStats[]>([]);
|
||||||
const { payload: updatedStats } = useFrigateStats();
|
const updatedStats = useFrigateStats();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (initialStats == undefined || initialStats.length == 0) {
|
if (initialStats == undefined || initialStats.length == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user