46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { useState } from "react";
|
|
import type { TimelineRange } from "@/lib/editor/session/sessionTypes";
|
|
|
|
type Options = {
|
|
currentYear: number;
|
|
fallbackTimelineRange: TimelineRange;
|
|
};
|
|
|
|
export function useTimelineState(options: Options) {
|
|
const [timelineYear, setTimelineYear] = useState<number>(() =>
|
|
clampYearValue(
|
|
options.currentYear,
|
|
options.fallbackTimelineRange.min,
|
|
options.fallbackTimelineRange.max
|
|
)
|
|
);
|
|
const [timelineDraftYear, setTimelineDraftYear] = useState<number>(() =>
|
|
clampYearValue(
|
|
options.currentYear,
|
|
options.fallbackTimelineRange.min,
|
|
options.fallbackTimelineRange.max
|
|
)
|
|
);
|
|
const [isTimelineLoading, setIsTimelineLoading] = useState(false);
|
|
const [timelineStatus, setTimelineStatus] = useState<string | null>(null);
|
|
|
|
return {
|
|
timelineYear,
|
|
setTimelineYear,
|
|
timelineDraftYear,
|
|
setTimelineDraftYear,
|
|
isTimelineLoading,
|
|
setIsTimelineLoading,
|
|
timelineStatus,
|
|
setTimelineStatus,
|
|
};
|
|
}
|
|
|
|
function clampYearValue(year: number, minYear: number, maxYear: number): number {
|
|
const lower = Math.min(minYear, maxYear);
|
|
const upper = Math.max(minYear, maxYear);
|
|
if (year < lower) return lower;
|
|
if (year > upper) return upper;
|
|
return year;
|
|
}
|