react-native-reanimated
Version:
More powerful alternative to Animated library for React Native.
39 lines (35 loc) • 1.56 kB
text/typescript
;
import { runOnUISync, scheduleOnRN } from 'react-native-worklets';
import type { LogData, LogFunction, LoggerConfig } from './common';
import { getLoggerConfig, updateLoggerConfig } from './common';
/**
* Updates Reanimated logger config with the user-provided configuration. Will
* affect Reanimated code executed after call to this function so it should be
* called before any Reanimated code is executed to take effect. Each call to
* this function will override the previous configuration (it's recommended to
* call it only once).
*
* @param config - The new logger configuration to apply.
* @param onLog - Optional callback invoked for every log, in addition to the
* default console output. Logs raised on the UI runtime are delivered
* asynchronously, on the React Native Runtime.
*/
export function configureReanimatedLogger(
config: LoggerConfig,
onLog?: LogFunction
) {
// Get the current config from the React runtime (to have a single source of truth)
const currentConfig = getLoggerConfig();
// Update the configuration object in the React runtime
updateLoggerConfig(currentConfig, config, onLog);
// The callback isn't a worklet, so the UI runtime can't call it directly.
// Wrap it in one that schedules it back on the React runtime.
const onLogOnUI = onLog
? (data: LogData) => {
'worklet';
scheduleOnRN(onLog, data);
}
: undefined;
// Register the updated configuration in the UI runtime
runOnUISync(updateLoggerConfig, currentConfig, config, onLogOnUI);
}