UNPKG

@eslam-elmeniawy/react-native-common-components

Version:

Common `ReactNative` components packed in library for usage in projects.

190 lines (148 loc) 5.01 kB
// Types imports. import type { ReactotronReactNative } from 'reactotron-react-native'; import type { LogLevel, Options } from './LogConfig.types'; let reactotron: ReactotronReactNative | undefined | null; let firebaseLogLevels: LogLevel[] = []; let isLocalLogEnable: boolean = false; let originalInfo: | ((message?: any, ...optionalParams: any[]) => void) | undefined | null; let originalLog: | ((message?: any, ...optionalParams: any[]) => void) | undefined | null; let originalWarn: | ((message?: any, ...optionalParams: any[]) => void) | undefined | null; let originalError: | ((message?: any, ...optionalParams: any[]) => void) | undefined | null; const configureReactotron = (options?: Options): void => { const { appName, clientOptions, pluginCreators } = options ?? {}; const { name, ...restClientOptions } = clientOptions ?? {}; reactotron?.configure({ name: name ?? appName, ...restClientOptions }); pluginCreators?.forEach((pluginCreator) => reactotron?.use(pluginCreator)); reactotron?.useReactNative().connect(); // Clear log on start. reactotron?.clear?.(); }; const info = (message?: any, ...optionalParams: any[]): void => { const tag = 'INFO'; if (firebaseLogLevels.includes(tag)) { try { require('@react-native-firebase/app'); const getCrashlytics = require('@react-native-firebase/crashlytics').getCrashlytics; const crashlyticsLog = require('@react-native-firebase/crashlytics').log; crashlyticsLog( getCrashlytics(), `## ${tag} ## Message: ${message} ## Data: ${JSON.stringify(optionalParams)}` ); } catch (_e) {} } if (isLocalLogEnable) { originalInfo?.(message, ...optionalParams); reactotron?.display({ name: tag, preview: typeof message === 'string' ? message : JSON.stringify(message), value: { message, optionalParams }, }); } }; const log = (message?: any, ...optionalParams: any[]): void => { const tag = 'LOG'; if (firebaseLogLevels.includes(tag)) { try { require('@react-native-firebase/app'); const getCrashlytics = require('@react-native-firebase/crashlytics').getCrashlytics; const crashlyticsLog = require('@react-native-firebase/crashlytics').log; crashlyticsLog( getCrashlytics(), `## ${tag} ## Message: ${message} ## Data: ${JSON.stringify(optionalParams)}` ); } catch (_e) {} } if (isLocalLogEnable) { originalLog?.(message, ...optionalParams); reactotron?.display({ name: tag, preview: typeof message === 'string' ? message : JSON.stringify(message), value: { message, optionalParams }, }); } }; const warn = (message?: any, ...optionalParams: any[]): void => { const tag = 'WARN'; if (firebaseLogLevels.includes(tag)) { try { require('@react-native-firebase/app'); const getCrashlytics = require('@react-native-firebase/crashlytics').getCrashlytics; const crashlyticsLog = require('@react-native-firebase/crashlytics').log; crashlyticsLog( getCrashlytics(), `## ${tag} ## Message: ${message} ## Data: ${JSON.stringify(optionalParams)}` ); } catch (_e) {} } if (isLocalLogEnable) { originalWarn?.(message, ...optionalParams); reactotron?.display({ name: tag, preview: typeof message === 'string' ? message : JSON.stringify(message), value: { message, optionalParams }, important: true, }); } }; const error = (message?: any, ...optionalParams: any[]): void => { const tag = 'ERROR'; if (firebaseLogLevels.includes(tag)) { try { require('@react-native-firebase/app'); const getCrashlytics = require('@react-native-firebase/crashlytics').getCrashlytics; const crashlyticsRecordError = require('@react-native-firebase/crashlytics').recordError; crashlyticsRecordError( getCrashlytics(), new Error( `## ${tag} ## Message: ${message} ## Data: ${JSON.stringify(optionalParams)}` ) ); } catch (_e) {} } if (isLocalLogEnable) { originalError?.(message, ...optionalParams); reactotron?.display({ name: tag, preview: typeof message === 'string' ? message : JSON.stringify(message), value: { message, optionalParams }, important: true, }); } }; const connectConsoleToReactotron = (): void => { originalInfo = console.info; originalLog = console.log; originalWarn = console.warn; originalError = console.error; console.info = info; console.log = log; console.warn = warn; console.error = error; }; export const configureLog = (options?: Options) => { try { reactotron = require('reactotron-react-native').default; } catch (_e) {} firebaseLogLevels = options?.firebaseLogLevels ?? []; isLocalLogEnable = options?.isLocalLogEnable ?? false; configureReactotron(options); connectConsoleToReactotron(); return reactotron; };