fix(note): address code review findings
- restoreVersion: ผ่าน validateAnnotationData ก่อน insert สาขา "ต้นทางถูกลบ" ให้สมมาตรกับสาขา update (invariant #8) - PDFViewer: track timer ล้าง exportError ใน ref — กัน export พัง สองรอบติดกันแล้ว timer รอบแรกเคลียร์ error รอบหลังก่อนเวลา - useHistory: เพิ่ม onError — undo/redo ล้มแสดง toast ผ่าน showActionError แทนหายเงียบ ๆ - DebugConsole: ไม่โหลด Eruda จาก CDN ใน production build (ระบบ intranet + token อยู่ใน origin เดียวกัน) - NoteHome: ตัด dead state session ที่ render ไม่ได้อ่าน - note-auth: export SSO_REQUIRED_BANNER ให้หน้า gate ใช้ตรง ๆ ถอด non-null assertion ใน AnnotateView + bookmarkDepthOf Verify: npx tsc --noEmit ผ่าน · vitest 317/317 ผ่าน Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
parent
d37bc2a3f0
commit
2d466efd4f
7 changed files with 50 additions and 17 deletions
|
|
@ -20,7 +20,7 @@ import {
|
|||
|
||||
import AppNav from "@/components/AppNav";
|
||||
import { parseSsoLinkParams, ssoBanner, type SsoBanner } from "@/lib/note-auth";
|
||||
import { readNoteSession, saveNoteSession, type NoteSession } from "@/lib/note-session";
|
||||
import { saveNoteSession } from "@/lib/note-session";
|
||||
import { withBasePath } from "@/utils/base-path";
|
||||
|
||||
type Phase = "boot" | "exchanging" | "ready";
|
||||
|
|
@ -41,7 +41,6 @@ export default function NoteHome() {
|
|||
const [phase, setPhase] = useState<Phase>("boot");
|
||||
const [banner, setBanner] = useState<SsoBanner | null>(null);
|
||||
const [fileError, setFileError] = useState<string | null>(null);
|
||||
const [session, setSession] = useState<NoteSession | null>(null);
|
||||
// StrictMode dev รัน effect สองครั้ง — bootstrap ต้องเกิดครั้งเดียวจริง ๆ
|
||||
const bootedRef = useRef(false);
|
||||
|
||||
|
|
@ -56,7 +55,6 @@ export default function NoteHome() {
|
|||
};
|
||||
const fail = (reason: "expired" | "invalid" | "error") => {
|
||||
setBanner(ssoBanner(reason));
|
||||
setSession(readNoteSession());
|
||||
setPhase("ready");
|
||||
};
|
||||
const parsed = parseSsoLinkParams(url);
|
||||
|
|
@ -120,7 +118,6 @@ export default function NoteHome() {
|
|||
router.replace(`/note/annotate/${fileId}`);
|
||||
return;
|
||||
}
|
||||
setSession(readNoteSession());
|
||||
setPhase("ready");
|
||||
} catch {
|
||||
stripParams();
|
||||
|
|
@ -145,7 +142,6 @@ export default function NoteHome() {
|
|||
setBanner(ssoBanner(url.searchParams.get("sso") ?? undefined));
|
||||
const openFileError = url.searchParams.get("fileError");
|
||||
if (openFileError !== null && openFileError !== "") setFileError(openFileError);
|
||||
setSession(readNoteSession());
|
||||
setPhase("ready");
|
||||
}, [router]);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue