feat: Store view state in URL for shareable links

This commit is contained in:
2025-08-14 19:49:16 +00:00
parent 44dcc1b8ad
commit 81880a6a0a

View File

@@ -280,9 +280,26 @@ function Menu({duration, setDuration, end, setEnd, slider, setSlider}) {
} }
function App() { function App() {
const [duration, setDuration] = useState(durations[0]); const params = new URLSearchParams(window.location.search);
const [end, setEnd] = useState(moment()); const initialDurationId = params.get('duration');
const [slider, setSlider] = useState([0, duration.num]); const initialEndTimestamp = params.get('end');
const initialSliderValue = params.get('slider');
const initialDuration = (initialDurationId && durations[parseInt(initialDurationId, 10)]) ? durations[parseInt(initialDurationId, 10)] : durations[0];
const initialEnd = initialEndTimestamp ? moment.unix(initialEndTimestamp) : moment();
const initialSlider = initialSliderValue ? initialSliderValue.split(',').map(Number) : [0, initialDuration.num];
const [duration, setDuration] = useState(initialDuration);
const [end, setEnd] = useState(initialEnd);
const [slider, setSlider] = useState(initialSlider);
useEffect(() => {
const params = new URLSearchParams();
params.set('duration', duration.id);
params.set('end', end.unix());
params.set('slider', slider.join(','));
window.history.replaceState({}, '', `${window.location.pathname}?${params.toString()}`);
}, [duration, end, slider]);
return ( return (
<div> <div>