@selfcommunity/react-core
Version:
React Core Components useful for integrating UI Community components (react-ui).
66 lines (65 loc) • 2.68 kB
JavaScript
import { useMemo } from 'react';
import { useSCPreferences } from '../components/provider/SCPreferencesProvider';
/**
* Custom hook to recover a given preference.
* @param preferenceKey - full preference key (e.g., 'section.name')
* @param defaultValue - default returned value
* @returns the preference value or undefined/defaultValue if doesn't exist
*
* Ex.
* const customValue = useSCPreference<string>(SCPreferences.CUSTOM_SETTING);
* const numericValue = useSCPreference<number>(SCPreferences.CUSTOM_SETTING, 0);
*/
function useSCPreference(preferenceKey, defaultValue) {
const { preferences } = useSCPreferences();
return useMemo(() => {
if (!preferences || !(preferenceKey in preferences)) {
return defaultValue;
}
const pref = preferences[preferenceKey];
return pref.value;
}, [preferences, preferenceKey, defaultValue]);
}
/**
* Custom hook to check if a given preference is present and has a value.
* @param preferenceKey - full preference key (e.g., 'section.name')
* @param defaultValue - default returned value (default=false)
* @returns boolean
*
* Ex.
* const isEnabled = useSCPreferenceEnabled(SCPreferences.CONFIGURATIONS_CONNECTION_ENABLED);
**/
function useSCPreferenceEnabled(preferenceKey, defaultValue = false) {
const value = useSCPreference(preferenceKey, defaultValue);
return value !== null && value !== void 0 ? value : defaultValue;
}
/**
* Custom hook to check if all specified preferences are enabled
* @param preferenceKeys - Array of preference keys to check
* @param defaultValue - Default value if a preference doesn't exist
* @returns boolean - true if all preferences are enabled
*
* Ex.
* const arePreferencesEnabled = useSCPreferencesEnabled([
* SCPreferences.CONFIGURATIONS_POST_USER_ADDRESSING_ENABLED,
* SCPreferences.CONFIGURATIONS_SCHEDULED_POSTS_ENABLED
* ]);
*/
function useSCPreferencesEnabled(preferenceKeys, defaultValue = false) {
const { preferences } = useSCPreferences();
return useMemo(() => {
// Se non ci sono preferences o non è stato passato nessun preferenceKey, ritorna il valore di default
if (!preferences || !preferenceKeys.length) {
return defaultValue;
}
// Verifica che tutte le preferenze siano presenti e abbiano value = true
return preferenceKeys.every((key) => {
if (!(key in preferences)) {
return defaultValue;
}
return preferences[key].value;
});
}, [preferences, preferenceKeys, defaultValue]);
}
export { useSCPreferenceEnabled, useSCPreferencesEnabled };
export default useSCPreference;