- Export
+ Export File
+
Prune
diff --git a/src/DatasetLoading.js b/src/DatasetLoading.js
index d882b48..7f8e3aa 100644
--- a/src/DatasetLoading.js
+++ b/src/DatasetLoading.js
@@ -5,12 +5,16 @@ import ExtraDataSource from "./ExtraDataSource";
import { log } from "./Utils";
import { toast } from "react-toastify";
import { isTokenValid, fetchLogsWithToken, useCloudLoggingLogin, buildQueryFilter } from "./CloudLogging";
-import { HAS_EXTRA_DATA_SOURCE } from "./constants";
+import { useSheetsLogin, isSheetsTokenValid, getSheetsToken, importFromGoogleSheet } from "./GoogleSheets";
+import { HAS_EXTRA_DATA_SOURCE, GOOGLE_CLIENT_ID } from "./constants";
const CloudLoggingFormComponent = ({ onLogsReceived, onFileUpload }) => {
const getStoredValue = (key, defaultValue = "") => localStorage.getItem(`datasetLoading_${key}`) || defaultValue;
const [fetching, setFetching] = useState(false);
+ const [sheetFormVisible, setSheetFormVisible] = useState(false);
+ const [sheetUrl, setSheetUrl] = useState(localStorage.getItem("datasetLoading_sheetUrl") || "");
+ const [sheetLoading, setSheetLoading] = useState(false);
const [queryParams, setQueryParams] = useState({
projectId: getStoredValue("projectId"),
vehicleId: getStoredValue("vehicleId"),
@@ -65,6 +69,52 @@ const CloudLoggingFormComponent = ({ onLogsReceived, onFileUpload }) => {
}
};
+ const handleSheetImport = (token) => {
+ setSheetLoading(true);
+ setLocalError(null);
+ localStorage.setItem("datasetLoading_sheetUrl", sheetUrl);
+
+ importFromGoogleSheet(sheetUrl, token)
+ .then((logs) => {
+ log(`Received ${logs.length} logs from Google Sheet`);
+ if (logs.length > 0) {
+ onLogsReceived(logs);
+ } else {
+ toast.warning("No logs found in the spreadsheet.");
+ }
+ })
+ .catch((err) => {
+ setLocalError(`Sheet import error: ${err.message}`);
+ toast.error(`Sheet import error: ${err.message}`);
+ })
+ .finally(() => setSheetLoading(false));
+ };
+
+ const sheetsLogin = useSheetsLogin(
+ (token) => {
+ log("Sheets login successful, importing...");
+ handleSheetImport(token);
+ },
+ (err) => {
+ log("Sheets login failed.", err);
+ setLocalError(`Auth Error: ${err.error || "Unknown"}`);
+ setSheetLoading(false);
+ }
+ );
+
+ const handleSheetLoadClick = () => {
+ if (!sheetUrl.trim()) {
+ setLocalError("Please enter a spreadsheet URL or ID.");
+ return;
+ }
+ setLocalError(null);
+ if (isSheetsTokenValid()) {
+ handleSheetImport(getSheetsToken());
+ } else {
+ sheetsLogin();
+ }
+ };
+
return (
Fleet Engine Logs Loading
@@ -162,14 +212,48 @@ const CloudLoggingFormComponent = ({ onLogsReceived, onFileUpload }) => {
)}
-
+ {sheetFormVisible && (
+
+
+
+
+
+ {sheetLoading ? "Loading..." : isSheetsTokenValid() ? "Load Sheet" : "Sign in and Load Sheet"}
+
+ {sheetLoading && (
+
+
Loading from Google Sheet...
+
+
+ )}
+
+ )}
);
};
@@ -210,7 +294,7 @@ export default function DatasetLoading(props) {
{isExtra ? (
ExtraFormComponent
) : (
-