Skip to content

Commit 6491eb3

Browse files
authored
Merge pull request #121 from HyperloopUPV-H8/ethernet-view/logloader
[ethernet-view] LogLoader
2 parents 61f3985 + 6b083ba commit 6491eb3

14 files changed

Lines changed: 174 additions & 49 deletions

File tree

ethernet-view/package-lock.json

Lines changed: 25 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ethernet-view/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
"vite-plugin-svgr": "^2.4.0",
3333
"vite-tsconfig-paths": "^4.0.5",
3434
"zustand": "^4.4.6",
35-
"zustymiddleware": "^1.2.0"
35+
"zustymiddleware": "^1.2.0",
36+
"zustymiddlewarets": "^1.4.2"
3637
},
3738
"devDependencies": {
3839
"@testing-library/jest-dom": "^5.16.5",
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading

ethernet-view/src/pages/LoggerPage/LogsColumn/LogLoader/Dropzone/Dropzone.module.scss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
&Text {
1313
font-weight: styles.$normal-font-weight;
1414
font-size: styles.$normal-font-size;
15-
color: styles.$alternate-text-color
15+
color: styles.$alternate-text-color;
16+
font-family: styles.$code-font;
1617
}
1718

1819
&.Active {

ethernet-view/src/pages/LoggerPage/LogsColumn/LogLoader/Dropzone/Dropzone.tsx

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,39 @@
11
import { useState } from "react";
2-
import { LogSession, UploadInformation, UploadState } from "../LogLoader";
2+
import { UploadInformation, UploadState } from "../LogLoader";
33
import styles from "./Dropzone.module.scss"
44
import { extractLoggerSession } from "../LogsProcessor";
55
import { Controls } from "./Controls/Controls";
66
import { useDropzone } from "./useDropzone";
7+
import { LogSession, useLogStore } from "pages/LoggerPage/useLogStore";
78

8-
interface Props {
9-
uploadInformation: UploadInformation;
10-
setUploadInformation: (newUploadInformation: UploadInformation) => void;
11-
addLogSession: (logSession: LogSession) => void;
12-
}
13-
14-
export const Dropzone = ({uploadInformation, setUploadInformation, addLogSession}: Props) => {
9+
export const Dropzone = () => {
1510

11+
const [uploadInformation, setUploadInformation] = useState<UploadInformation>({state: UploadState.IDLE});
1612
const [isDraggingOver, setIsDraggingOver] = useState<boolean>(false);
1713
const {dropZoneText, draftSession, setDraftSession} = useDropzone({uploadInformation});
14+
const addLogSession = useLogStore(state => state.addLogSession);
1815

19-
const uploadSession = (directory: FileSystemDirectoryEntry) => {
16+
const uploadSession = async (directory: FileSystemDirectoryEntry) => {
2017
setUploadInformation({state: UploadState.UPLOADING});
21-
const loggerSession = extractLoggerSession(directory as FileSystemDirectoryEntry);
22-
loggerSession.then((session) => {
23-
console.log(session);
24-
setDraftSession({name: directory.name, measurementLogs: session} as LogSession);
18+
try {
19+
const loggerSession = await extractLoggerSession(directory as FileSystemDirectoryEntry);
20+
setDraftSession({name: directory.name, measurementLogs: loggerSession} as LogSession);
2521
setUploadInformation({state: UploadState.SUCCESS});
26-
}).catch((error) => {
27-
if(error instanceof Error) {
28-
setUploadInformation({state: UploadState.ERROR, errorMessage: error.message});
22+
} catch(err) {
23+
if(err instanceof Error) {
24+
setUploadInformation({state: UploadState.ERROR, errorMessage: err.message});
2925
} else {
3026
setUploadInformation({state: UploadState.ERROR, errorMessage: "An unexpected error occurred"});
3127
}
32-
});
28+
}
3329
};
3430

35-
const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {
31+
const handleDrop = async (e: React.DragEvent<HTMLDivElement>) => {
3632
e.preventDefault();
3733
try {
3834
validateEntry(e.dataTransfer.items);
3935
const directory = e.dataTransfer.items[0].webkitGetAsEntry();
40-
uploadSession(directory as FileSystemDirectoryEntry);
36+
await uploadSession(directory as FileSystemDirectoryEntry);
4137
} catch(err) {
4238
if (err instanceof Error){
4339
setUploadInformation({state: UploadState.ERROR, errorMessage: err.cause as string});

ethernet-view/src/pages/LoggerPage/LogsColumn/LogLoader/Dropzone/useDropzone.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useEffect, useState } from "react";
2-
import { LogSession, UploadInformation, UploadState } from "../LogLoader";
2+
import { UploadInformation, UploadState } from "../LogLoader";
3+
import { LogSession } from "pages/LoggerPage/useLogStore";
34

45
interface Props {
56
uploadInformation: UploadInformation;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
@use "src/styles/styles.scss";
2+
3+
.logItemWrapper {
4+
display: flex;
5+
align-items: center;
6+
gap: .8rem;
7+
width: fit-content;
8+
9+
&:hover {
10+
cursor: pointer;
11+
}
12+
}
13+
14+
.icon {
15+
width: 1.6rem;
16+
17+
img {
18+
width: 100%;
19+
}
20+
}
21+
22+
.title {
23+
color: styles.$title-color;
24+
font-size: 1.6rem;
25+
font-family: styles.$code-font;
26+
font-style: italic;
27+
}
28+
29+
.active {
30+
color: styles.$orange;
31+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { useLogStore } from "pages/LoggerPage/useLogStore";
2+
import styles from "./LogItem.module.scss"
3+
import folderClosed from "assets/svg/folder-closed.svg"
4+
import folderOpen from "assets/svg/folder-open.svg"
5+
6+
interface Props {
7+
logName: string;
8+
}
9+
10+
export const LogItem = ({logName}: Props) => {
11+
12+
const openLogSession = useLogStore(state => state.openLogSession);
13+
const setOpenLogSession = useLogStore(state => state.setOpenLogSession);
14+
const isOpen = openLogSession === logName;
15+
16+
return (
17+
<div className={styles.logItemWrapper} onClick={() => setOpenLogSession(logName)}>
18+
<div className={styles.icon}>
19+
<img src={`${isOpen ? folderOpen : folderClosed}`} alt="log-icon" />
20+
</div>
21+
<div className={`${styles.title} ${isOpen ? styles.active : ""}`}>
22+
<p>
23+
{logName}
24+
</p>
25+
</div>
26+
</div>
27+
)
28+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.logListWrapper {
2+
display: flex;
3+
flex-direction: column;
4+
align-items: center;
5+
}

0 commit comments

Comments
 (0)