- Removed the random color generation function from ProductionCapacity component. - Updated ThroughputSummary component to remove unused imports. - Simplified LogList component by removing unnecessary icons and integrating GetLogIcon for log types. - Enhanced LoggerContext to support a new "success" log type and optimized logger methods with useMemo. - Adjusted SimulationPlayer to conditionally render analysis components. - Deleted index.css and removed its import from index.tsx. - Cleaned up builder module by removing unused imports and optimizing state management. - Removed savedTheme from Ground component. - Changed log message from info to warning in Project component. - Updated log color variables in SCSS files for better visibility and consistency. - Added new log icons for success, error, info, and warning in LogIcons component. - Created GetLogIcon utility to streamline log icon rendering based on log type.
78 lines
2.1 KiB
TypeScript
78 lines
2.1 KiB
TypeScript
import React, { createContext, useContext, useState, useCallback, useMemo } from "react";
|
|
|
|
export type LogType = "log" | "info" | "warning" | "error" | "success";
|
|
|
|
export interface LogEntry {
|
|
id: string;
|
|
type: LogType;
|
|
message: string;
|
|
timestamp: Date;
|
|
}
|
|
|
|
interface LoggerContextValue {
|
|
logs: LogEntry[];
|
|
setLogs: React.Dispatch<React.SetStateAction<LogEntry[]>>;
|
|
isLogListVisible: boolean;
|
|
setIsLogListVisible: React.Dispatch<React.SetStateAction<boolean>>;
|
|
log: (message: string) => void;
|
|
info: (message: string) => void;
|
|
warn: (message: string) => void;
|
|
error: (message: string) => void;
|
|
success: (message: string) => void;
|
|
clear: () => void;
|
|
}
|
|
|
|
const LoggerContext = createContext<LoggerContextValue | undefined>(undefined);
|
|
|
|
export const LoggerProvider: React.FC<{ children: React.ReactNode }> = ({
|
|
children,
|
|
}) => {
|
|
const [logs, setLogs] = useState<LogEntry[]>([]);
|
|
const [isLogListVisible, setIsLogListVisible] = useState<boolean>(false);
|
|
|
|
const generateId = useCallback(
|
|
() => Math.random().toString(36).substring(2, 9),
|
|
[]
|
|
);
|
|
|
|
const addLog = useCallback(
|
|
(type: LogType, message: string) => {
|
|
const newLog: LogEntry = {
|
|
id: generateId(),
|
|
type,
|
|
message,
|
|
timestamp: new Date(),
|
|
};
|
|
setLogs((prevLogs) => [...prevLogs, newLog]);
|
|
},
|
|
[generateId]
|
|
);
|
|
|
|
const loggerMethods: LoggerContextValue = useMemo(() => ({
|
|
logs,
|
|
setLogs,
|
|
isLogListVisible,
|
|
setIsLogListVisible,
|
|
log: (message: string) => addLog("log", message),
|
|
info: (message: string) => addLog("info", message),
|
|
warn: (message: string) => addLog("warning", message),
|
|
error: (message: string) => addLog("error", message),
|
|
success: (message: string) => addLog("success", message),
|
|
clear: () => setLogs([]),
|
|
}), [logs, setLogs, isLogListVisible, setIsLogListVisible, addLog]);
|
|
|
|
return (
|
|
<LoggerContext.Provider value={loggerMethods}>
|
|
{children}
|
|
</LoggerContext.Provider>
|
|
);
|
|
};
|
|
|
|
export const useLogger = () => {
|
|
const context = useContext(LoggerContext);
|
|
if (!context) {
|
|
throw new Error("useLogger must be used within a LoggerProvider");
|
|
}
|
|
return context;
|
|
};
|