'use client'; import { useEffect, useState } from 'react'; import ConfirmModal from './ConfirmModal'; import { ResetIcon, SettingsIcon } from './Icons'; export default function SettingsModal({ onClose, tempSeconds, setTempSeconds, saveSettings, exportLocalData, importFileRef, handleImportFileChange, importMsg, isMobile, containerWidth = 1200, setContainerWidth, onResetContainerWidth, }) { const [sliderDragging, setSliderDragging] = useState(false); const [resetWidthConfirmOpen, setResetWidthConfirmOpen] = useState(false); useEffect(() => { if (!sliderDragging) return; const onPointerUp = () => setSliderDragging(false); document.addEventListener('pointerup', onPointerUp); document.addEventListener('pointercancel', onPointerUp); return () => { document.removeEventListener('pointerup', onPointerUp); document.removeEventListener('pointercancel', onPointerUp); }; }, [sliderDragging]); return (
e.stopPropagation()}>
设置
刷新频率
{[30, 60, 120, 300].map((s) => ( ))}
setTempSeconds(Number(e.target.value))} placeholder="自定义秒数" /> {tempSeconds < 30 && (
最小 30 秒
)}
{!isMobile && setContainerWidth && (
页面宽度
{onResetContainerWidth && ( )}
setContainerWidth(Number(e.target.value))} onPointerDown={() => setSliderDragging(true)} className="page-width-slider" style={{ flex: 1, height: 6, accentColor: 'var(--primary)', }} /> {Math.min(2000, Math.max(600, Number(containerWidth) || 1200))}px
)}
数据导出
数据导入
{importMsg && (
{importMsg}
)}
{resetWidthConfirmOpen && onResetContainerWidth && ( { onResetContainerWidth(); setResetWidthConfirmOpen(false); }} onCancel={() => setResetWidthConfirmOpen(false)} confirmText="重置" /> )}
); }