@hmscore/react-native-hms-push
Version:
React Native HMS Push Kit
62 lines (50 loc) • 1.66 kB
JavaScript
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;