Add CustomSelect component for enhanced selection functionality with option change handling
This commit is contained in:
parent
b288ce327f
commit
2eed3a518c
56
src/components/Dashboard/common/CustomSelect.jsx
Normal file
56
src/components/Dashboard/common/CustomSelect.jsx
Normal file
@ -0,0 +1,56 @@
|
||||
import { useEffect, useRef } from 'react'
|
||||
import { Select } from 'antd'
|
||||
import PropTypes from 'prop-types'
|
||||
|
||||
const CustomSelect = ({
|
||||
placeholder,
|
||||
disabled,
|
||||
options = [],
|
||||
value,
|
||||
onChange,
|
||||
...rest
|
||||
}) => {
|
||||
const prevOptionsRef = useRef(options)
|
||||
|
||||
useEffect(() => {
|
||||
// Check if options have changed
|
||||
const optionsChanged =
|
||||
JSON.stringify(prevOptionsRef.current) !== JSON.stringify(options)
|
||||
|
||||
if (optionsChanged && value !== undefined && value !== null) {
|
||||
// Check if current value exists in new options
|
||||
const valueExists =
|
||||
Array.isArray(options) &&
|
||||
options.some((option) => option.value === value)
|
||||
|
||||
// If value doesn't exist in new options, clear it
|
||||
if (!valueExists && onChange) {
|
||||
onChange(undefined)
|
||||
}
|
||||
}
|
||||
|
||||
// Update the ref with current options
|
||||
prevOptionsRef.current = options
|
||||
}, [options, value, onChange])
|
||||
|
||||
return (
|
||||
<Select
|
||||
placeholder={placeholder}
|
||||
disabled={disabled}
|
||||
options={Array.isArray(options) ? options : []}
|
||||
value={value}
|
||||
onChange={onChange}
|
||||
{...rest}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
CustomSelect.propTypes = {
|
||||
placeholder: PropTypes.string,
|
||||
disabled: PropTypes.bool,
|
||||
options: PropTypes.array,
|
||||
value: PropTypes.any,
|
||||
onChange: PropTypes.func
|
||||
}
|
||||
|
||||
export default CustomSelect
|
||||
Loading…
x
Reference in New Issue
Block a user