* Add `select-none` and `cursor-default` to root to prevent selection and hover on most items * Lint * refactor paths a bit * format --------- Co-authored-by: CJ Pais <cj@cjpais.com>
74 lines
2.1 KiB
TypeScript
74 lines
2.1 KiB
TypeScript
import React, { useEffect, useState } from "react";
|
|
import { useTranslation } from "react-i18next";
|
|
import { commands } from "@/bindings";
|
|
import { SettingContainer } from "../../ui/SettingContainer";
|
|
import { PathDisplay } from "../../ui/PathDisplay";
|
|
|
|
interface LogDirectoryProps {
|
|
descriptionMode?: "tooltip" | "inline";
|
|
grouped?: boolean;
|
|
}
|
|
|
|
export const LogDirectory: React.FC<LogDirectoryProps> = ({
|
|
descriptionMode = "tooltip",
|
|
grouped = false,
|
|
}) => {
|
|
const { t } = useTranslation();
|
|
const [logDir, setLogDir] = useState<string>("");
|
|
const [loading, setLoading] = useState(true);
|
|
const [error, setError] = useState<string | null>(null);
|
|
|
|
useEffect(() => {
|
|
const loadLogDirectory = async () => {
|
|
try {
|
|
const result = await commands.getLogDirPath();
|
|
if (result.status === "ok") {
|
|
setLogDir(result.data);
|
|
} else {
|
|
setError(result.error);
|
|
}
|
|
} catch (err) {
|
|
const errorMessage =
|
|
err && typeof err === "object" && "message" in err
|
|
? String(err.message)
|
|
: "Failed to load log directory";
|
|
setError(errorMessage);
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
loadLogDirectory();
|
|
}, []);
|
|
|
|
const handleOpen = async () => {
|
|
if (!logDir) return;
|
|
try {
|
|
await commands.openLogDir();
|
|
} catch (openError) {
|
|
console.error("Failed to open log directory:", openError);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<SettingContainer
|
|
title={t("settings.debug.logDirectory.title")}
|
|
description={t("settings.debug.logDirectory.description")}
|
|
descriptionMode={descriptionMode}
|
|
grouped={grouped}
|
|
layout="stacked"
|
|
>
|
|
{loading ? (
|
|
<div className="animate-pulse">
|
|
<div className="h-8 bg-gray-100 rounded" />
|
|
</div>
|
|
) : error ? (
|
|
<div className="p-3 bg-red-50 border border-red-200 rounded text-xs text-red-600">
|
|
{t("errors.loadDirectory", { error })}
|
|
</div>
|
|
) : (
|
|
<PathDisplay path={logDir} onOpen={handleOpen} disabled={!logDir} />
|
|
)}
|
|
</SettingContainer>
|
|
);
|
|
};
|