UNPKG

@hmscore/react-native-hms-push

Version:
62 lines (50 loc) 1.66 kB
import React from 'react'; class LogManager extends React.Component { constructor(props) { super(props); this.logPanelReference = React.createRef(); } handleLogAddition = (newLog) => { try { if (!this.logPanelReference.current) return; let processedLog; const timestamp = new Date().toLocaleString(); if (typeof newLog === "object" && newLog !== null) { processedLog = JSON.stringify(this.deepClone(newLog), null, 2); } else if (Array.isArray(newLog)) { processedLog = newLog.map(item => this.safeFormat(item)).join("\n"); } else { processedLog = this.safeFormat(newLog); } this.logPanelReference.current.addLog(`[${timestamp}] ${processedLog}`); } catch (error) { console.error("Log handling error:", error); if (this.logPanelReference.current) { this.logPanelReference.current.addLog( `Error displaying log at ${new Date().toLocaleString()}: ${error.message}` ); } } }; safeFormat = (value) => { return typeof value === "string" ? value : String(value); }; deepClone = (item) => { if (item === null || typeof item !== "object") return item; if (Array.isArray(item)) { return item.map((element) => this.deepClone(element)); } const clonedItem = {}; Object.keys(item).forEach((key) => { const value = item[key]; clonedItem[key] = typeof value === "number" && !Number.isInteger(value) ? parseFloat(value.toFixed(6)) : this.deepClone(value); }); return clonedItem; }; render() { return null; } } export default LogManager;