2025-03-25 12:04:20 +00:00
|
|
|
import React, { useState } from "react";
|
|
|
|
import RenameInput from "./RenameInput";
|
|
|
|
|
|
|
|
type InputWithDropDownProps = {
|
|
|
|
label: string;
|
|
|
|
value: string;
|
2025-04-15 08:45:39 +00:00
|
|
|
min?: number;
|
|
|
|
step?: number;
|
2025-03-27 06:54:15 +00:00
|
|
|
defaultValue?: string;
|
2025-03-25 12:04:20 +00:00
|
|
|
options?: string[]; // Array of dropdown options
|
|
|
|
activeOption?: string; // The currently active dropdown option
|
|
|
|
onClick?: () => void;
|
|
|
|
onChange: (newValue: string) => void;
|
|
|
|
editableLabel?: boolean;
|
2025-03-26 13:03:51 +00:00
|
|
|
placeholder?: string; // New placeholder prop
|
2025-03-25 12:04:20 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const InputWithDropDown: React.FC<InputWithDropDownProps> = ({
|
|
|
|
label,
|
|
|
|
value,
|
2025-03-27 06:54:15 +00:00
|
|
|
min,
|
2025-04-15 08:45:39 +00:00
|
|
|
step,
|
2025-03-27 06:54:15 +00:00
|
|
|
defaultValue,
|
2025-03-25 12:04:20 +00:00
|
|
|
options,
|
|
|
|
activeOption,
|
|
|
|
onClick,
|
|
|
|
onChange,
|
|
|
|
editableLabel = false,
|
2025-03-26 13:03:51 +00:00
|
|
|
placeholder = "Inherit", // Default empty placeholder
|
2025-03-25 12:04:20 +00:00
|
|
|
}) => {
|
|
|
|
const separatedWords = label
|
|
|
|
.split(/(?=[A-Z])/)
|
|
|
|
.map((word) => word.trim())
|
|
|
|
.toString();
|
|
|
|
|
|
|
|
const [openDropdown, setOpenDropdown] = useState(false);
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div className="value-field-container">
|
|
|
|
{editableLabel ? (
|
|
|
|
<RenameInput value={label} />
|
|
|
|
) : (
|
|
|
|
<label htmlFor={separatedWords} className="label">
|
|
|
|
{label}
|
|
|
|
</label>
|
|
|
|
)}
|
|
|
|
<div className="input default" id={separatedWords}>
|
|
|
|
<input
|
2025-03-27 06:54:15 +00:00
|
|
|
min={min}
|
2025-04-15 08:45:39 +00:00
|
|
|
step={step}
|
2025-03-26 13:03:51 +00:00
|
|
|
type="number"
|
2025-03-27 06:54:15 +00:00
|
|
|
defaultValue={value}
|
2025-03-25 12:04:20 +00:00
|
|
|
onChange={(e) => {
|
|
|
|
onChange(e.target.value);
|
|
|
|
}}
|
2025-03-26 13:03:51 +00:00
|
|
|
placeholder={placeholder} // Added placeholder prop
|
2025-03-25 12:04:20 +00:00
|
|
|
/>
|
|
|
|
|
|
|
|
{activeOption && (
|
|
|
|
<div
|
|
|
|
className="dropdown"
|
|
|
|
onClick={() => {
|
|
|
|
setOpenDropdown(true);
|
|
|
|
}}
|
|
|
|
>
|
|
|
|
<div className="active-option">{activeOption}</div>
|
|
|
|
{options && openDropdown && (
|
|
|
|
<div className="dropdown-options-list">
|
|
|
|
{options.map((option, index) => (
|
|
|
|
<div
|
|
|
|
key={index}
|
|
|
|
className={"dropdown-option"}
|
|
|
|
onClick={onClick}
|
|
|
|
>
|
|
|
|
{option}
|
|
|
|
</div>
|
|
|
|
))}
|
|
|
|
</div>
|
|
|
|
)}
|
|
|
|
</div>
|
|
|
|
)}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
2025-03-26 13:03:51 +00:00
|
|
|
export default InputWithDropDown;
|