From 502ac388afaee62fcbfedc785062b925ff90b427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20FAMIBELLE-PRONZOLA?= Date: Wed, 23 Jul 2025 18:50:07 +0400 Subject: [PATCH] feat: ajoute composant VersionSearch --- components/versions/version-search.js | 76 +++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 components/versions/version-search.js diff --git a/components/versions/version-search.js b/components/versions/version-search.js new file mode 100644 index 0000000..2af1224 --- /dev/null +++ b/components/versions/version-search.js @@ -0,0 +1,76 @@ +import {useState} from 'react' +import PropTypes from 'prop-types' +import Box from '@mui/material/Box' +import TextField from '@mui/material/TextField' +import InputAdornment from '@mui/material/InputAdornment' +import IconButton from '@mui/material/IconButton' +import SearchIcon from '@mui/icons-material/Search' +import ClearIcon from '@mui/icons-material/Clear' +import {useDebouncedCallback} from 'use-debounce' + +export default function VersionSearch({onSearchChange, placeholder = 'Rechercher dans les versions...'}) { + const [searchValue, setSearchValue] = useState('') + + // Debounce search to avoid too many filter updates + const debouncedSearch = useDebouncedCallback(value => { + onSearchChange(value.trim()) + }, 300) + + const handleSearchChange = event => { + const {value} = event.target + setSearchValue(value) + debouncedSearch(value) + } + + const handleClearSearch = () => { + setSearchValue('') + onSearchChange('') + } + + return ( + + + + + ), + endAdornment: searchValue && ( + + + + + + ) + }} + sx={{ + '& .MuiOutlinedInput-root': { + backgroundColor: 'background.paper', + '&:hover': { + backgroundColor: 'action.hover' + }, + '&.Mui-focused': { + backgroundColor: 'background.paper' + } + } + }} + onChange={handleSearchChange} + /> + + ) +} + +VersionSearch.propTypes = { + onSearchChange: PropTypes.func.isRequired, + placeholder: PropTypes.string +}