diff --git a/src/components/NumberInput/NumberInput.tsx b/src/components/NumberInput/NumberInput.tsx index 90cb565ac..9298cf8ea 100644 --- a/src/components/NumberInput/NumberInput.tsx +++ b/src/components/NumberInput/NumberInput.tsx @@ -12,20 +12,19 @@ type Props = InputHTMLAttributes & { className?: string; disabled?: boolean; showButtons?: boolean; + defaultValue?: number; label?: string; min?: number; max?: number; value?: number; - defaultValue?: number; onKeyDown?: (event: KeyboardEvent) => void; onSubmit?: (event: KeyboardEvent) => void; - onUpdate?: (value: number) => void; onChange?: (event: ChangeEvent) => void; }; -const NumberInput = forwardRef(({ defaultValue = 1, showButtons, onUpdate, onKeyDown, onSubmit, min, max, onChange, ...props }, ref) => { +const NumberInput = forwardRef(({ defaultValue = 0, showButtons, onKeyDown, onSubmit, min, max, onChange, ...props }, ref) => { const [value, setValue] = useState(defaultValue); - const displayValue = useMemo(() => props.value ?? value, [props.value, value]); + const displayValue = props.value ?? value; const handleKeyDown = useCallback((event: KeyboardEvent) => { onKeyDown && onKeyDown(event); @@ -35,12 +34,11 @@ const NumberInput = forwardRef(({ defaultValue = 1, sho } }, [onKeyDown, onSubmit]); - const handleValueChange = (value: number) => { + const handleValueChange = (newValue: number) => { if (props.value === undefined) { - setValue(value); + setValue(newValue); } - onUpdate?.(value); - onChange?.({ target: { value: value.toString() }} as ChangeEvent); + onChange?.({ target: { value: newValue.toString() }} as ChangeEvent); }; const handleIncrement = () => { diff --git a/src/routes/MetaDetails/StreamsList/EpisodePicker/EpisodePicker.tsx b/src/routes/MetaDetails/StreamsList/EpisodePicker/EpisodePicker.tsx index 4a82ec591..24d12229f 100644 --- a/src/routes/MetaDetails/StreamsList/EpisodePicker/EpisodePicker.tsx +++ b/src/routes/MetaDetails/StreamsList/EpisodePicker/EpisodePicker.tsx @@ -1,6 +1,6 @@ // Copyright (C) 2017-2025 Smart code 203358507 -import React, { useCallback, useMemo, useState } from 'react'; +import React, { useCallback, useMemo, useState, ChangeEvent } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, NumberInput } from 'stremio/components'; import styles from './EpisodePicker.less'; @@ -19,16 +19,21 @@ const EpisodePicker = ({ className, onSubmit }: Props) => { const videoId = decodeURIComponent(splitPath[splitPath.length - 1]); const [, pathSeason, pathEpisode] = videoId ? videoId.split(':') : []; return { - initialSeason: isNaN(parseInt(pathSeason)) ? 0 : parseInt(pathSeason), - initialEpisode: isNaN(parseInt(pathEpisode)) ? 1 : parseInt(pathEpisode) + initialSeason: parseInt(pathSeason) || 0, + initialEpisode: parseInt(pathEpisode) || 1 }; }, []); const [season, setSeason] = useState(initialSeason); const [episode, setEpisode] = useState(initialEpisode); - const handleSeasonChange = useCallback((value: number) => setSeason(!isNaN(value) ? value : 0), []); - const handleEpisodeChange = useCallback((value: number) => setEpisode(!isNaN(value) ? value : 1), []); + const handleSeasonChange = useCallback((event: ChangeEvent) => { + setSeason(parseInt(event.target.value)); + }, []); + + const handleEpisodeChange = useCallback((event: ChangeEvent) => { + setEpisode(parseInt(event.target.value)); + }, []); const handleSubmit = useCallback(() => { if (typeof onSubmit === 'function' && !isNaN(season) && !isNaN(episode)) { @@ -42,8 +47,8 @@ const EpisodePicker = ({ className, onSubmit }: Props) => { return (
- - + +