diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d1e542b..6fbfb7d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -39,6 +39,8 @@ jobs: - name: Install dependencies run: npm ci - name: Build + env: + VITE_API_URL: ${{ secrets.VITE_API_URL }} run: npm run build - name: Setup Pages uses: actions/configure-pages@v4 diff --git a/package-lock.json b/package-lock.json index a64ffbe..ec0dc22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,8 +18,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.27.0", - "recharts": "^2.12.7", - "uuid": "^11.0.1" + "recharts": "^2.12.7" }, "devDependencies": { "@chromatic-com/storybook": "^1.9.0", @@ -49,7 +48,7 @@ "storybook": "^8.3.4", "typescript": "^5.5.3", "typescript-eslint": "^8.0.1", - "vite": "^5.4.8" + "vite": "^5.4.10" } }, "node_modules/@adobe/css-tools": { @@ -8672,18 +8671,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.1.tgz", - "integrity": "sha512-wt9UB5EcLhnboy1UvA1mvGPXkIIrHSu+3FmUksARfdVw9tuPf3CH/CohxO0Su1ApoKAeT6BVzAJIvjTuQVSmuQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/esm/bin/uuid" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -8717,9 +8704,9 @@ } }, "node_modules/vite": { - "version": "5.4.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", - "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", + "version": "5.4.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", + "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", "dev": true, "dependencies": { "esbuild": "^0.21.3", diff --git a/package.json b/package.json index 8e4a694..2655353 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "storybook": "^8.3.4", "typescript": "^5.5.3", "typescript-eslint": "^8.0.1", - "vite": "^5.4.8" + "vite": "^5.4.10" }, "lint-staged": { "*.{ts,tsx,js,jsx}": [ diff --git a/src/components/DataTable.tsx b/src/components/DataTable.tsx index 133f598..5d4db35 100644 --- a/src/components/DataTable.tsx +++ b/src/components/DataTable.tsx @@ -17,7 +17,7 @@ export default function DataTable({ setSelectedData, }: DataTableProps) { const theme = useMantineTheme(); - + const setPreviewData = (file: MCAPFileInformation) => { if (selectedRow === file.id) { setSelectedRow(""); @@ -28,6 +28,12 @@ export default function DataTable({ } }; + // Take out when API server team implements filename id in their get route + const getFileNameWithoutExtension = (fileNameWithExtension: string) => { + const lastDotIndex = fileNameWithExtension.lastIndexOf('.'); + return lastDotIndex !== -1 ? fileNameWithExtension.slice(0, lastDotIndex) : fileNameWithExtension; + }; + const rows = !data ? ( @@ -45,17 +51,18 @@ export default function DataTable({ setPreviewData(file)} - /*fw={selectedRow === file.id ? "bold" : ""}*/ + bg={selectedRow === file.id ? theme.primaryColor : ""} > - {file.mcap_file_name} + {getFileNameWithoutExtension(file.mcap_files[0].file_name)} {file.date} {file.location} - {file.notes} + + {/* Change back to notes once notes field is implemented in the server */} + {file.car_model} )) ); - return ( { - const [month, day, year] = dateString.split("-"); - const date = new Date(`${year}-${month}-${day}`); + const date = new Date(dateString); return date.toLocaleDateString("en-US", { weekday: "short", year: "numeric", @@ -34,22 +33,29 @@ function PreviewCard({ selectedData }: PreviewCardProps) { }); }; + // Take out when API server team implements filename id in their get route + const getFileNameWithoutExtension = (fileNameWithExtension: string) => { + const lastDotIndex = fileNameWithExtension.lastIndexOf('.'); + return lastDotIndex !== -1 ? fileNameWithExtension.slice(0, lastDotIndex) : fileNameWithExtension; + }; + + const imageUrl = selectedData?.content_files?.vn_lat_lon_plot?.[0]?.signed_url ?? "https://camo.githubusercontent.com/25de56138803873d9ea83567c55b9a022ad86d0acb53bb7c733bb038583e2279/68747470733a2f2f6d69726f2e6d656469756d2e636f6d2f76322f726573697a653a6669743a3430302f312a7241676c6b664c4c316676384a6363697a4a33572d512e706e67"; // Fallback to a default image if none exists. + const formatTime = (dateString: string) => { - const [month, day, year] = dateString.split("-"); - const date = new Date(`${year}-${month}-${day}T00:00:00`); + const date = new Date(dateString); return date.toLocaleTimeString("en-US", { - hour: "2-digit", - minute: "2-digit", - second: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: true, }); }; - return (
Preview @@ -67,10 +73,10 @@ function PreviewCard({ selectedData }: PreviewCardProps) { {selectedData ? ( <> - +
@@ -175,6 +182,9 @@ export function DownloadButton({ { handleSearch(e.target.value); }} /> - + {" "} {/* Scrollable area with height limit */}
= ({ schemas, clear }) => { const [value, setValue] = useState(""); - //const [selectedSchema, setSelected] = useState([]); + const [selectedSchemas, setSelectedSchemas] = useState([]); const filteredSchemas = schemas.filter((schema) => schema.toLowerCase().includes(value.toLowerCase()), ); - { - /* - const addSchema = (newSchema: string) => { - if (!selectedSchema.includes(newSchema)) { - setSelected([...selectedSchema, newSchema]); - } else { - alert("Schema already selected!"); - } - }; - */ - } + const clearSchema = () => { - //setSelected([]); setValue(""); + setSelectedSchemas([]) }; const handleKeyDown = (event: React.KeyboardEvent) => { if (event.key === "Enter" && filteredSchemas.length > 0) { setValue(filteredSchemas[0]); - //addSchema(filteredSchemas[0]); + setValue("") } }; @@ -43,29 +33,17 @@ const SchemaSearch: React.FC = ({ schemas, clear }) => { }, [clear]); return ( -
+
-
- {/* - {selectedSchema.length > 0 && ( -
- -
    - {selectedSchema.map((str, index) => ( -
  • {str}
  • - ))} -
- -
- )} - */}
); }; diff --git a/src/components/SearchBar.tsx b/src/components/SearchBar.tsx index 98f646d..c3a753e 100644 --- a/src/components/SearchBar.tsx +++ b/src/components/SearchBar.tsx @@ -19,67 +19,9 @@ function SearchBarWithFilter({ const [beforeDate, setBeforeDate] = useState(""); const [afterDate, setAfterDate] = useState(""); const [clearSchemas, setClearSchemas] = useState(false); - // const [filters] = useState({ - // location: "", - // eventType: "", - // beforeDate: "", - // afterDate: "", - // }); - - // Check if a date is in the valid range - // const isDateInRange = ( - // dateStr: string, - // beforeDate: string, - // afterDate: string, - // ) => { - // const itemDate = new Date(dateStr); - // const before = beforeDate ? new Date(beforeDate) : null; - // const after = afterDate ? new Date(afterDate) : null; - - // if (before && itemDate > before) return false; - // if (after && itemDate < after) return false; - - // return true; - // }; const schemas = ["Schema1", "Schema2", "Schema3", "Schema4"]; - // Filter logic - // const handleSearch = () => { - // const filtered = data.filter((item) => { - // // Match search term in multiple fields - // const matchesSearch = - // item.mcap_file_name.toLowerCase().includes(searchTerm.toLowerCase()) || - // item.matlab_file_name - // .toLowerCase() - // .includes(searchTerm.toLowerCase()) || - // item.notes?.toLowerCase().includes(searchTerm.toLowerCase()); - - // // Match filters - // const matchesLocation = - // filters.location === "" || - // item.location.toLowerCase() === filters.location.toLowerCase(); - // const matchesEventType = - // filters.eventType.toLowerCase() === "" || - // item.event_type?.toLowerCase() === filters.eventType.toLowerCase(); - // const matchesDate = isDateInRange( - // item.date, - // filters.beforeDate, - // filters.afterDate, - // ); - - // return ( - // matchesSearch && matchesLocation && matchesEventType && matchesDate - // ); - // }); - // setFilteredData(filtered); - // }; - - // Trigger search on filter or search term change - // useEffect(() => { - // handleSearch(); - // }, [searchTerm, filters]); - // Handle filter changes function handleFilterChange( e: React.ChangeEvent, @@ -97,8 +39,6 @@ function SearchBarWithFilter({ filt.filename = value; } - // console.log("search", filt); - setSearchFilters((prevFilters) => ({ ...prevFilters, notes: filt.notes, @@ -231,6 +171,7 @@ function SearchBarWithFilter({ style={{ display: "flex", gap: "10px", + marginTop: "10px" }} > {/* Clear Button */} diff --git a/src/css/SchemaSearch.css b/src/css/SchemaSearch.css index b0ccd00..565f7d8 100644 --- a/src/css/SchemaSearch.css +++ b/src/css/SchemaSearch.css @@ -1,10 +1,4 @@ -.schema-autocomplete { - padding: 10px; - border-radius: 10px; - border: 1px solid #ddd; - background-color: #fff; - } -.cancel-button { - background-color: #978750; - +.schemasearchbutton { + display: "flex"; + } \ No newline at end of file diff --git a/src/data/sampledata.ts b/src/data/sampledata.ts index 07e1cc7..6d4646d 100644 --- a/src/data/sampledata.ts +++ b/src/data/sampledata.ts @@ -12,6 +12,22 @@ export const data: MCAPFileInformation[] = [ location: "MRDC", notes: "car ran!", event_type: "acceleration", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "0723984238489-21312-4e75e6f76", @@ -26,6 +42,22 @@ export const data: MCAPFileInformation[] = [ location: "rome", notes: "car performed nice", event_type: "autocross", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "091823792-2321312-a081", @@ -39,7 +71,23 @@ export const data: MCAPFileInformation[] = [ date: "08-29-2024", location: "MRDC", notes: "car did jk turn on", - }, + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, + }, { id: "07a0sdjwne-597f-4637-8b61-6134e75e6f76", mcap_file_name: "file2.3.mcap", @@ -53,6 +101,22 @@ export const data: MCAPFileInformation[] = [ location: "rome", notes: "car did not latch", event_type: "autocross", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "605deb4b-44a8-4801-9da6-a671c1d3eccd", @@ -67,6 +131,22 @@ export const data: MCAPFileInformation[] = [ location: "MRDC", notes: "car failed", event_type: "acceleration", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "fb48f265-a44a-4fd5-a873-26cd581950a0", @@ -81,6 +161,22 @@ export const data: MCAPFileInformation[] = [ location: "Michigan", notes: "car did not run", event_type: "endurance", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "ba1ae40d-d013-4fe4-ac80-8e129fbe97b9", @@ -95,6 +191,22 @@ export const data: MCAPFileInformation[] = [ location: "MRDC", notes: "car ran!", event_type: "acceleration", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "55c2ae28-294e-45fd-9afb-a19e7499a1c2", @@ -109,23 +221,25 @@ export const data: MCAPFileInformation[] = [ location: "SCC", notes: "brakes were not the best", event_type: "skidpad", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { - id: "25d4c874-6310-448b-9984-16fec5f1cb8c", - mcap_file_name: "file5.mcap", - matlab_file_name: "file5.mat", - aws_bucket: "bucket", - mcap_path: "/path/to/s3/object", - mat_path: "/path/to/s3/object", - vn_lat_lon_path: "/path/to/s3/object", - velocity_plot_path: "/path/to/s3/object", - date: "09-22-2024", - location: "MRDC", - notes: "drivebrain stopped recording mcaps", - event_type: "skidpad", - }, - { - id: "07a3c667-597f-4637-8b61-6134e75e6f76", + id: "3b1cd0af-64c7-4b63-8de9-86c1238451f1", mcap_file_name: "file6.mcap", matlab_file_name: "file6.mat", aws_bucket: "bucket", @@ -133,22 +247,25 @@ export const data: MCAPFileInformation[] = [ mat_path: "/path/to/s3/object", vn_lat_lon_path: "/path/to/s3/object", velocity_plot_path: "/path/to/s3/object", - date: "08-16-2024", - location: "rome", - notes: "car performed beautifully", - event_type: "autocross", - }, - { - id: "01c1e581-6cf9-42f4-a6d0-0c41442fa081", - mcap_file_name: "file7.mcap", - matlab_file_name: "file7.mat", - aws_bucket: "bucket", - mcap_path: "/path/to/s3/object", - mat_path: "/path/to/s3/object", - vn_lat_lon_path: "/path/to/s3/object", - velocity_plot_path: "/path/to/s3/object", - date: "08-29-2024", - location: "MRDC", - notes: "car did not turn on", + date: "08-21-2024", + location: "SCC", + notes: "brakes worked better", + event_type: "endurance", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, ]; diff --git a/src/routes/root.tsx b/src/routes/root.tsx index 468a797..325e02c 100644 --- a/src/routes/root.tsx +++ b/src/routes/root.tsx @@ -17,55 +17,28 @@ export default function Root() { }); const [search, setSearch] = useState(false); - // const fetchData = async (filters: SearchFilter) => { - // const { location, date, notes, eventType, filename } = filters; - // let { afterDate, beforeDate } = filters; - - // beforeDate = beforeDate - // ? `${beforeDate?.split("-")[1]}-${beforeDate?.split("-")[2]}-${beforeDate?.split("-")[0]}` - // : undefined; - // afterDate = afterDate - // ? `${afterDate?.split("-")[1]}-${afterDate?.split("-")[2]}-${afterDate?.split("-")[0]}` - // : undefined; - - // const params: Record = { - // ...(location ? { location } : {}), - // ...(eventType ? { eventType } : {}), - // ...(date ? { date } : {}), - // ...(notes ? { notes } : {}), - // ...(filename ? { filename } : {}), - // ...(afterDate ? { afterDate } : {}), - // ...(beforeDate ? { beforeDate } : {}), - // }; - - // const queryString = new URLSearchParams(params).toString(); - - // const res = await fetch( - // `${import.meta.env.VITE_API_URL}/api/v2/mcap/get?${queryString}`, - // ); - - // const data = await res.json(); - // return data.data; - // }; + const formatDate = (dateStr: string) => { + const [year, month, day] = dateStr.split("-"); + if (month.length !== 2 || day.length !== 2 || year.length !== 4) { + throw new Error(`Invalid date format: ${dateStr}`); + } + return new Date(`${year}-${month}-${day}T00:00:00.000Z`).toISOString(); + }; const fetchData = async (filters: SearchFilter) => { const { location, date, notes, eventType, filename } = filters; let { afterDate, beforeDate } = filters; - - beforeDate = beforeDate - ? `${beforeDate.split("-")[1]}-${beforeDate.split("-")[2]}-${beforeDate.split("-")[0]}` - : undefined; - afterDate = afterDate - ? `${afterDate.split("-")[1]}-${afterDate.split("-")[2]}-${afterDate.split("-")[0]}` - : undefined; + + beforeDate = beforeDate ? formatDate(beforeDate) : undefined; + afterDate = afterDate ? formatDate(afterDate) : undefined; const buildParams = (additionalParams: Record = {}) => { return { ...(location ? { location } : {}), ...(eventType ? { eventType } : {}), ...(date ? { date } : {}), - ...(afterDate ? { afterDate } : {}), - ...(beforeDate ? { beforeDate } : {}), + ...(afterDate ? { after_date: afterDate } : {}), + ...(beforeDate ? { before_date: beforeDate } : {}), ...additionalParams, }; }; @@ -75,7 +48,7 @@ export default function Root() { const queryString = new URLSearchParams(params).toString(); const res = await fetch( - `${import.meta.env.VITE_API_URL}/api/v2/mcap/get?${queryString}`, + `${import.meta.env.VITE_API_URL}/api/v2/mcaps?${queryString}`, ); const data = await res.json(); return data.data; @@ -88,7 +61,7 @@ export default function Root() { const queryStringNotes = new URLSearchParams(paramsNotes).toString(); promises.push( fetch( - `${import.meta.env.VITE_API_URL}/api/v2/mcap/get?${queryStringNotes}`, + `${import.meta.env.VITE_API_URL}/api/v2/mcaps?${queryStringNotes}`, ), ); } @@ -100,7 +73,7 @@ export default function Root() { ).toString(); promises.push( fetch( - `${import.meta.env.VITE_API_URL}/api/v2/mcap/get?${queryStringFilename}`, + `${import.meta.env.VITE_API_URL}/api/v2/mcaps?${queryStringFilename}`, ), ); } diff --git a/src/stories/DataTable.stories.tsx b/src/stories/DataTable.stories.tsx index 354d6da..bb167c6 100644 --- a/src/stories/DataTable.stories.tsx +++ b/src/stories/DataTable.stories.tsx @@ -24,6 +24,22 @@ const sampleData = [ location: "MRDC", notes: "car ran!", event_type: "acceleration", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "fb48f265-a44a-4fd5-a873-26cd581950a0", @@ -38,6 +54,22 @@ const sampleData = [ location: "Michigan", notes: "car did not run", event_type: "endurance", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "ba1ae40d-d013-4fe4-ac80-8e129fbe97b9", @@ -52,6 +84,22 @@ const sampleData = [ location: "MRDC", notes: "car ran!", event_type: "acceleration", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "55c2ae28-294e-45fd-9afb-a19e7499a1c2", @@ -66,6 +114,22 @@ const sampleData = [ location: "SCC", notes: "brakes were not the best", event_type: "skidpad", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "25d4c874-6310-448b-9984-16fec5f1cb8c", @@ -80,6 +144,22 @@ const sampleData = [ location: "MRDC", notes: "drivebrain stopped recording mcaps", event_type: "skidpad", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "07a3c667-597f-4637-8b61-6134e75e6f76", @@ -94,6 +174,22 @@ const sampleData = [ location: "rome", notes: "car performed beautifully", event_type: "autocross", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, { id: "01c1e581-6cf9-42f4-a6d0-0c41442fa081", @@ -107,6 +203,22 @@ const sampleData = [ date: "08-29-2024", location: "MRDC", notes: "car did not turn on", + car_model: "HT08", + schema_versions: null, + mcap_files: [{ + signed_url: "yar", + file_name: "yar", + }], + mat_files: [{ + signed_url: "har", + file_name: "har", + }], + content_files: { + vn_lat_lon_plot: [{ + signed_url: "bar", + file_name: "far", + }], + }, }, ]; diff --git a/src/types/index.d.ts b/src/types/index.d.ts index 2e71ea4..b7a251d 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -1,5 +1,21 @@ type MCAPFileInformation = { id: string; + car_model: string; + schema_versions?: null; + mcap_files: { + signed_url: string; + file_name: string; + }[]; + mat_files: { + signed_url: string; + file_name: string; + }[]; + content_files: { + vn_lat_lon_plot: { + signed_url: string; + file_name: string; + }[]; + }; mcap_file_name: string; matlab_file_name: string; aws_bucket: string;