react-native-turbo-preferences
Version:
Modern TurboModule wrapper for iOS NSUserDefaults and Android SharedPreferences.
51 lines (49 loc) • 1.58 kB
JavaScript
;
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