UNPKG

react-native-turbo-preferences

Version:

Modern TurboModule wrapper for iOS NSUserDefaults and Android SharedPreferences.

51 lines (49 loc) 1.58 kB
"use strict"; import { useState, useCallback } from 'react'; import TurboPreferences from "../NativeTurboPreferences.js"; /** * React hook for managing preference namespaces * * @returns [currentNamespace, setNamespace, resetToDefault] * * @example * ```tsx * function UserSwitcher() { * const [namespace, setNamespace, resetToDefault] = usePreferenceNamespace(); * const [username, setUsername] = usePreferenceString('username'); * * return ( * <View> * <Text>Context: {namespace || '(default)'}</Text> * <Text>Username: {username}</Text> * <Button title="User 123" onPress={() => setNamespace('user_123')} /> * <Button title="Default" onPress={resetToDefault} /> * </View> * ); * } * ``` */ export function usePreferenceNamespace() { const [currentNamespace, setCurrentNamespace] = useState(''); const setNamespace = useCallback(async namespace => { try { await TurboPreferences.setName(namespace); setCurrentNamespace(namespace); } catch (error) { console.warn('usePreferenceNamespace setNamespace error:', error); throw error; } }, []); const resetToDefault = useCallback(async () => { try { // Pass null to go back to default namespace await TurboPreferences.setName(null); setCurrentNamespace(''); } catch (error) { console.warn('usePreferenceNamespace resetToDefault error:', error); throw error; } }, []); return [currentNamespace, setNamespace, resetToDefault]; } //# sourceMappingURL=usePreferenceNamespace.js.map