Skip to content

Commit 6d49954

Browse files
committed
feat(frontend): home page import logo
Signed-off-by: Me0wo <152751263+Sn0wo2@users.noreply.github.com>
1 parent b1ba665 commit 6d49954

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed
Lines changed: 4 additions & 0 deletions
Loading

Frontend/src/router/Home.scss

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,31 @@ a {
129129
font-size: 1.6vmin;
130130
opacity: 0.7;
131131
}
132+
133+
.upload {
134+
position: fixed;
135+
top: 50%;
136+
left: 50%;
137+
transform: translateX(-50%);
138+
width: 15%;
139+
aspect-ratio: 1;
140+
cursor: pointer;
141+
transition: transform 0.2s ease;
142+
display: flex;
143+
align-items: center;
144+
justify-content: center;
145+
}
146+
147+
.upload:hover {
148+
transform: translate(-50%, -10%) scale(1.05);
149+
}
150+
151+
.upload img {
152+
max-width: 100%;
153+
max-height: 100%;
154+
object-fit: contain;
155+
pointer-events: none;
156+
}
132157
}
133158

134159
.input-container {

Frontend/src/router/Home.tsx

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import { useEffect, useState } from "react";
1+
import { type ChangeEvent, useEffect, useRef, useState } from "react";
2+
import { toast } from "react-hot-toast";
23
import { useNavigate } from "react-router-dom";
34
import { DarkModeToggle } from "../components/DarkModeToggle";
45
import "./Home.scss";
56
import { ImportNote } from "../components/ImportNote.tsx";
7+
import { importNote } from "../services/noteAPI.ts";
68

79
export function Home() {
810
const [visible, setVisible] = useState(false);
@@ -22,6 +24,8 @@ export function Home() {
2224
return () => clearTimeout(t);
2325
}, []);
2426

27+
const fileInputRef = useRef<HTMLInputElement | null>(null);
28+
2529
return (
2630
<>
2731
<DarkModeToggle />
@@ -49,6 +53,32 @@ export function Home() {
4953
<span className="warning">
5054
⚠️ Please don’t upload illegal or sensitive content.
5155
</span>
56+
<label className="upload">
57+
<input
58+
type="file"
59+
accept=".qnote"
60+
style={{ display: 'none' }}
61+
ref={fileInputRef}
62+
onChange={async (e: ChangeEvent<HTMLInputElement>) => {
63+
try {
64+
const file = e.target.files?.[0];
65+
if (!file) return;
66+
const success = await importNote(file);
67+
if (!success) {
68+
toast.error("Failed to import note");
69+
return;
70+
}
71+
72+
navigate(`/note/${file.name.replace(/\.qnote$/, "")}`);
73+
74+
} catch (error) {
75+
console.error(error);
76+
toast.error("Failed to import note");
77+
}
78+
}}
79+
/>
80+
<img src="/file-pencil-alt-svgrepo-com.svg" alt="upload icon" />
81+
</label>
5282
</p>
5383
<div className="input-container">
5484
<input

0 commit comments

Comments
 (0)