'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="重置"
/>
)}
);
}