2024-02-21 18:58:41 +01:00
|
|
|
import { useCallback } from "react";
|
|
|
|
import { ReviewSegment } from "@/types/review";
|
2024-02-21 00:22:59 +01:00
|
|
|
|
2024-02-21 18:58:41 +01:00
|
|
|
export const useEventUtils = (
|
|
|
|
events: ReviewSegment[],
|
|
|
|
segmentDuration: number
|
|
|
|
) => {
|
|
|
|
const isStartOfEvent = useCallback(
|
|
|
|
(time: number): boolean => {
|
|
|
|
return events.some((event) => {
|
|
|
|
const segmentStart = getSegmentStart(event.start_time);
|
|
|
|
return time >= segmentStart && time < segmentStart + segmentDuration;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
[events, segmentDuration]
|
|
|
|
);
|
2024-02-21 00:22:59 +01:00
|
|
|
|
2024-02-21 18:58:41 +01:00
|
|
|
const isEndOfEvent = useCallback(
|
|
|
|
(time: number): boolean => {
|
|
|
|
return events.some((event) => {
|
|
|
|
if (typeof event.end_time === "number") {
|
|
|
|
const segmentEnd = getSegmentEnd(event.end_time);
|
|
|
|
return time >= segmentEnd - segmentDuration && time < segmentEnd;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
[events, segmentDuration]
|
|
|
|
);
|
2024-02-21 00:22:59 +01:00
|
|
|
|
2024-02-21 18:58:41 +01:00
|
|
|
const getSegmentStart = useCallback(
|
|
|
|
(time: number): number => {
|
|
|
|
return Math.floor(time / segmentDuration) * segmentDuration;
|
|
|
|
},
|
|
|
|
[segmentDuration]
|
|
|
|
);
|
2024-02-21 00:22:59 +01:00
|
|
|
|
2024-02-21 18:58:41 +01:00
|
|
|
const getSegmentEnd = useCallback(
|
|
|
|
(time: number): number => {
|
|
|
|
return Math.ceil(time / segmentDuration) * segmentDuration;
|
|
|
|
},
|
|
|
|
[segmentDuration]
|
|
|
|
);
|
2024-02-21 00:22:59 +01:00
|
|
|
|
2024-02-21 18:58:41 +01:00
|
|
|
const alignDateToTimeline = useCallback(
|
|
|
|
(time: number): number => {
|
|
|
|
const remainder = time % segmentDuration;
|
|
|
|
const adjustment = remainder !== 0 ? segmentDuration - remainder : 0;
|
|
|
|
return time + adjustment;
|
|
|
|
},
|
|
|
|
[segmentDuration]
|
|
|
|
);
|
2024-02-21 00:22:59 +01:00
|
|
|
|
2024-02-21 18:58:41 +01:00
|
|
|
return {
|
|
|
|
isStartOfEvent,
|
|
|
|
isEndOfEvent,
|
|
|
|
getSegmentStart,
|
|
|
|
getSegmentEnd,
|
|
|
|
alignDateToTimeline,
|
|
|
|
};
|
2024-02-21 00:22:59 +01:00
|
|
|
};
|