mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
57 lines
2.0 KiB
TypeScript
57 lines
2.0 KiB
TypeScript
import { useEffect } from 'react';
|
|
import { useLocation } from 'react-router-dom';
|
|
import {
|
|
getEffectiveTimeFilterName,
|
|
getEffectiveTimeFilterSeconds,
|
|
getStableLastVisitTimeFilterName,
|
|
getSelectedTimeFilterValue,
|
|
getTimeFilterOptionValues,
|
|
touchLastVisitTimestamp,
|
|
} from '../lib/utils/time-filter-utils';
|
|
|
|
declare global {
|
|
interface Window {
|
|
_5chanLastVisitTimestampIntervalId?: number;
|
|
_5chanLastVisitTimestampSubscribers?: number;
|
|
}
|
|
}
|
|
|
|
const ensureLastVisitTimestampTracking = (): (() => void) => {
|
|
if (typeof window === 'undefined') {
|
|
return () => {};
|
|
}
|
|
|
|
touchLastVisitTimestamp();
|
|
window._5chanLastVisitTimestampSubscribers = (window._5chanLastVisitTimestampSubscribers || 0) + 1;
|
|
|
|
if (!window._5chanLastVisitTimestampIntervalId) {
|
|
window._5chanLastVisitTimestampIntervalId = window.setInterval(() => {
|
|
touchLastVisitTimestamp();
|
|
}, 60 * 1000);
|
|
}
|
|
|
|
return () => {
|
|
window._5chanLastVisitTimestampSubscribers = Math.max((window._5chanLastVisitTimestampSubscribers || 1) - 1, 0);
|
|
if (window._5chanLastVisitTimestampSubscribers === 0 && window._5chanLastVisitTimestampIntervalId) {
|
|
window.clearInterval(window._5chanLastVisitTimestampIntervalId);
|
|
delete window._5chanLastVisitTimestampIntervalId;
|
|
}
|
|
};
|
|
};
|
|
|
|
const useTimeFilter = (timeFilterNameOverride?: string) => {
|
|
const location = useLocation();
|
|
|
|
useEffect(() => ensureLastVisitTimestampTracking(), []);
|
|
|
|
const lastVisitTimeFilterName = getStableLastVisitTimeFilterName();
|
|
const timeFilterValue = timeFilterNameOverride || getSelectedTimeFilterValue(location.search);
|
|
const timeFilterName = timeFilterNameOverride || getEffectiveTimeFilterName(location.search, lastVisitTimeFilterName);
|
|
const timeFilterSeconds = getEffectiveTimeFilterSeconds('', timeFilterName);
|
|
const timeFilterValues = getTimeFilterOptionValues(lastVisitTimeFilterName);
|
|
|
|
return { timeFilterSeconds, timeFilterName, timeFilterValue, timeFilterValues, lastVisitTimeFilterName };
|
|
};
|
|
|
|
export default useTimeFilter;
|