Compare commits

...

3 Commits

Author SHA1 Message Date
Memory
25b20250a1
fix: freeze log display when auto-scroll is disabled 2026-03-01 23:37:02 +08:00
Memory
31bec33064
fix: auto-refresh relative time on profiles page 2026-03-01 22:50:47 +08:00
agoudbg
9bbb495dae
fix: badge not clickable 2026-03-01 21:53:08 +08:00
3 changed files with 19 additions and 2 deletions

View File

@ -479,7 +479,7 @@ const Connections: React.FC = () => {
</span> </span>
</div> </div>
<Badge <Badge
className="mt-2" className="app-nodrag pointer-events-none mt-2"
color="primary" color="primary"
variant="flat" variant="flat"
showOutline={false} showOutline={false}

View File

@ -46,6 +46,8 @@ const Logs: React.FC = () => {
const [trace, setTrace] = useState(true) const [trace, setTrace] = useState(true)
const virtuosoRef = useRef<VirtuosoHandle>(null) const virtuosoRef = useRef<VirtuosoHandle>(null)
const traceRef = useRef(trace)
const filteredLogs = useMemo(() => { const filteredLogs = useMemo(() => {
if (filter === '') return logs if (filter === '') return logs
return logs.filter((log) => { return logs.filter((log) => {
@ -57,6 +59,13 @@ const Logs: React.FC = () => {
localStorage.setItem(LOGS_FILTER_KEY, filter) localStorage.setItem(LOGS_FILTER_KEY, filter)
}, [filter]) }, [filter])
useEffect(() => {
traceRef.current = trace
if (trace) {
setLogs([...cachedLogs.log])
}
}, [trace])
useEffect(() => { useEffect(() => {
if (!trace) return if (!trace) return
virtuosoRef.current?.scrollToIndex({ virtuosoRef.current?.scrollToIndex({
@ -70,7 +79,9 @@ const Logs: React.FC = () => {
useEffect(() => { useEffect(() => {
const old = cachedLogs.trigger const old = cachedLogs.trigger
cachedLogs.trigger = (a): void => { cachedLogs.trigger = (a): void => {
setLogs([...a]) if (traceRef.current) {
setLogs([...a])
}
} }
return (): void => { return (): void => {
cachedLogs.trigger = old cachedLogs.trigger = old

View File

@ -59,6 +59,7 @@ const Profiles: React.FC = () => {
const [updating, setUpdating] = useState(false) const [updating, setUpdating] = useState(false)
const [fileOver, setFileOver] = useState(false) const [fileOver, setFileOver] = useState(false)
const [url, setUrl] = useState('') const [url, setUrl] = useState('')
const [, setNow] = useState(new Date())
const isUrlEmpty = url.trim() === '' const isUrlEmpty = url.trim() === ''
const sensors = useSensors(useSensor(PointerSensor)) const sensors = useSensors(useSensor(PointerSensor))
const { data: subs = [], mutate: mutateSubs } = useSWR( const { data: subs = [], mutate: mutateSubs } = useSWR(
@ -218,6 +219,11 @@ const Profiles: React.FC = () => {
} }
}, []) }, [])
useEffect(() => {
const timer = setInterval(() => setNow(new Date()), 30000)
return () => clearInterval(timer)
}, [])
useEffect(() => { useEffect(() => {
setSortedItems(items) setSortedItems(items)
}, [items]) }, [items])