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 / useRegisterActivePage.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
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