PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
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 / useSettingOption.js
presto-player / src / admin / dashboard / hooks Last commit date
test 1 week ago useCompleteOnboarding.js 1 week 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
useSettingOption.js
56 lines
1 import { useCallback, useMemo } from 'react';
2 import isEqual from 'lodash/isEqual';
3 import { useSettingsData } from '../pages/settings/shared/SettingsDataProvider';
4
5 const useSettingOption = ( optionKey, defaultValue ) => {
6 const {
7 settings,
8 lastSaved,
9 isLoading,
10 savingKeys,
11 updateLocal,
12 resetKey,
13 saveSlice,
14 } = useSettingsData();
15
16 // WP core's /wp/v2/settings returns `null` for any stored value that fails
17 // its registered schema (e.g. an empty string stored for a `boolean` option).
18 // Treat null the same as undefined so the UI falls back to the default and
19 // saves don't echo that null back — which WP rejects with
20 // `rest_invalid_stored_value`.
21 const rawData = settings?.[ optionKey ];
22 const data =
23 rawData === undefined || rawData === null ? defaultValue : rawData;
24
25 const savedValue = lastSaved?.[ optionKey ];
26 const effectiveSaved =
27 savedValue === undefined || savedValue === null
28 ? defaultValue
29 : savedValue;
30
31 const setData = useCallback(
32 ( next ) => updateLocal( optionKey, next ),
33 [ optionKey, updateLocal ]
34 );
35
36 const save = useCallback( () => saveSlice( [ optionKey ] ), [ saveSlice, optionKey ] );
37 const reset = useCallback( () => resetKey( optionKey ), [ resetKey, optionKey ] );
38
39 // Derived (not a flag): typing + reverting is cleanly not-dirty, and pasting
40 // identical content doesn't falsely mark the page dirty. Deep equality is
41 // required because most option values are objects (e.g. branding, bunny_stream).
42 const isDirty = useMemo(
43 () => ! isEqual( data, effectiveSaved ),
44 [ data, effectiveSaved ]
45 );
46
47 const isSaving = savingKeys.has( optionKey );
48
49 return useMemo(
50 () => ( { data, setData, save, reset, isDirty, isSaving, isLoading } ),
51 [ data, setData, save, reset, isDirty, isSaving, isLoading ]
52 );
53 };
54
55 export default useSettingOption;
56