PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.2
Presto Player v4.3.2
4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / dashboard / hooks / useDateRangePicker.js
presto-player / src / admin / dashboard / hooks Last commit date
test 1 month ago useCompleteOnboarding.js 1 month ago useDateRangePicker.js 2 months ago useEmail.ts 2 months ago useEngagementChartData.js 2 months ago useLicenseSettings.js 2 months ago useLink.js 2 months ago useMediaDetail.js 2 months ago useMediaLibrary.js 2 months ago useMediaList.ts 1 month ago usePerformanceSettings.js 2 months ago useRegisterActivePage.js 2 months ago useSettingOption.js 2 months ago useSimpleSettingsPage.js 2 months ago useTopPerforming.js 2 months ago useTopVideosPaginated.js 2 months ago useUpgradeCTA.js 2 months ago useUserDetail.js 2 months ago
useDateRangePicker.js
73 lines
1 import { useState, useEffect, useRef, useCallback } from "@wordpress/element";
2
3 /**
4 * Encapsulates date range picker state, handlers, and side-effects
5 * used by analytics detail pages.
6 *
7 * @param {Function} refetchFn - Called with (from, to) when dates change, or with no args on clear.
8 */
9 const useDateRangePicker = (refetchFn) => {
10 const [selectedDates, setSelectedDates] = useState({ from: null, to: null });
11 const [isDatePickerOpen, setIsDatePickerOpen] = useState(false);
12 const datePickerRef = useRef(null);
13
14 const handleDateApply = useCallback((dates) => {
15 const { from, to } = dates;
16 if (from && to) {
17 const fromDate = new Date(from);
18 const toDate = new Date(to);
19 setSelectedDates(fromDate > toDate ? { from: to, to: from } : dates);
20 } else if (from && !to) {
21 setSelectedDates({ from, to: from });
22 } else {
23 setSelectedDates({ from: null, to: null });
24 }
25 setIsDatePickerOpen(false);
26 }, []);
27
28 const handleDateCancel = useCallback(() => {
29 setIsDatePickerOpen(false);
30 }, []);
31
32 const handleClearFilters = useCallback(() => {
33 setSelectedDates({ from: null, to: null });
34 refetchFn();
35 }, [refetchFn]);
36
37 // Refetch when date range changes
38 useEffect(() => {
39 if (selectedDates.from && selectedDates.to) {
40 refetchFn(selectedDates.from, selectedDates.to);
41 }
42 }, [selectedDates.from, selectedDates.to, refetchFn]);
43
44 // Close on click outside
45 useEffect(() => {
46 if (!isDatePickerOpen) return;
47
48 function handleClickOutside(event) {
49 if (
50 datePickerRef.current &&
51 !datePickerRef.current.contains(event.target)
52 ) {
53 setIsDatePickerOpen(false);
54 }
55 }
56
57 document.addEventListener("mousedown", handleClickOutside);
58 return () => document.removeEventListener("mousedown", handleClickOutside);
59 }, [isDatePickerOpen]);
60
61 return {
62 selectedDates,
63 isDatePickerOpen,
64 setIsDatePickerOpen,
65 datePickerRef,
66 handleDateApply,
67 handleDateCancel,
68 handleClearFilters,
69 };
70 };
71
72 export default useDateRangePicker;
73