PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
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 / useRegisterActivePage.js
presto-player / src / admin / dashboard / hooks Last commit date
test 3 weeks ago useCompleteOnboarding.js 3 weeks ago useDateRangePicker.js 1 month ago useEmail.ts 1 month ago useEngagementChartData.js 1 month ago useLicenseSettings.js 1 month ago useLink.js 1 month ago useMediaDetail.js 1 month ago useMediaLibrary.js 1 month ago useMediaList.ts 1 month ago usePerformanceSettings.js 1 month ago useRegisterActivePage.js 1 month ago useSettingOption.js 1 month ago useSimpleSettingsPage.js 1 month ago useTopPerforming.js 1 month ago useTopVideosPaginated.js 1 month ago useUpgradeCTA.js 1 month ago useUserDetail.js 1 month ago
useRegisterActivePage.js
40 lines
1 import { useEffect, useRef } from 'react';
2
3 // Hands the active page's "is-dirty / how-to-save / how-to-discard" contract up
4 // to Settings.js's navigation guard (see pages/Settings.js).
5 //
6 // Why a ref + getter instead of re-registering on every value change:
7 // - Navigation handlers in Settings.js only need to read isDirty/save/discard
8 // at *click time* (sidebar click, tab click, back button) — not on every
9 // keystroke. Reading from a ref keeps the sidebar from re-rendering while
10 // the user types.
11 // - We wrap save/discard as arrow functions that dispatch to latestRef so the
12 // parent always invokes the *current* closure. If we registered the raw
13 // closures, Settings.js would capture whichever render's save() ran first
14 // and call it with stale `data` on next click.
15 // - The `get isDirty()` accessor means the parent reads a live value without
16 // us re-registering — critical because re-registering would retrigger the
17 // effect cleanup and briefly null out the handlers.
18 const useRegisterActivePage = (
19 registerActivePage,
20 { isDirty, save, discard }
21 ) => {
22 const latestRef = useRef( { isDirty, save, discard } );
23 latestRef.current = { isDirty, save, discard };
24
25 useEffect( () => {
26 registerActivePage?.( {
27 get isDirty() {
28 return latestRef.current.isDirty;
29 },
30 save: () => latestRef.current.save?.(),
31 discard: () => latestRef.current.discard?.(),
32 } );
33 // On page unmount, clear the registration so Settings.js doesn't try
34 // to invoke stale handlers belonging to a page that no longer exists.
35 return () => registerActivePage?.( null );
36 }, [ registerActivePage ] );
37 };
38
39 export default useRegisterActivePage;
40