fix(frontend): resolve all eslint warnings and errors

- block-timeline: ref updates moved to useLayoutEffect
- channel-card, guide/page: Date.now() wrapped in useMemo + suppress purity rule
- auth-context: lazy localStorage init (removes setState-in-effect)
- use-channel-order: lazy localStorage init (removes setState-in-effect)
- use-idle: start timer on mount without calling resetIdle (removes setState-in-effect)
- use-subtitles, transcode-settings-dialog: inline eslint-disable on exact violating line
- providers: block-level eslint-disable for tokenRef closure in useState initializer
- edit-channel-sheet: remove unused minsToTime and BlockContent imports
- docs/page: escape unescaped quote and apostrophe entities
This commit is contained in:
2026-03-17 02:40:32 +01:00
parent 8ed8da2d90
commit c4d2e48f73
11 changed files with 50 additions and 32 deletions

View File

@@ -1,6 +1,6 @@
"use client";
import { useRef, useState, useEffect } from "react";
import { useRef, useState, useEffect, useLayoutEffect } from "react";
import type { ProgrammingBlock } from "@/lib/types";
const SNAP_MINS = 15;
@@ -63,12 +63,13 @@ export function BlockTimeline({
const containerRef = useRef<HTMLDivElement>(null);
const dragRef = useRef<DragState | null>(null);
const blocksRef = useRef(blocks);
blocksRef.current = blocks;
const onChangeRef = useRef(onChange);
onChangeRef.current = onChange;
const onCreateRef = useRef(onCreateBlock);
onCreateRef.current = onCreateBlock;
useLayoutEffect(() => {
blocksRef.current = blocks;
onChangeRef.current = onChange;
onCreateRef.current = onCreateBlock;
});
const [draft, setDraft] = useState<Draft | null>(null);