Files
digifi-www/src/components/shared/InputCompOne.tsx
T
2024-03-18 11:01:05 +01:00

94 lines
2.2 KiB
TypeScript

import React from "react";
interface InputCompOneProps {
label: string;
labelClass: string;
placeholder?: string;
value: string;
onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
onInput?: (e: React.FormEvent<HTMLInputElement>) => void;
name: string;
tabIndex?: number;
ref?: React.RefObject<HTMLInputElement>;
selectValue?: string;
labelSpan?: string;
labelSpanClass?: string;
parentInputClass?: string;
inputClass?: string;
parentSelectClass?: string;
selectClass?: string;
input?: boolean;
select?: boolean;
inputType?: string;
selectOptions?: { value: string; label: string }[];
icon?: string | React.ReactNode; // Type for the icon
}
const InputCompOne: React.FC<InputCompOneProps> = ({
label,
labelClass,
labelSpan,
labelSpanClass,
placeholder = "Placeholder",
value,
onChange,
onInput,
name,
tabIndex,
ref,
selectValue,
input,
select,
inputType = "text",
selectOptions,
icon,
selectClass,
inputClass,
parentInputClass,
parentSelectClass,
}) => {
return (
<div className={parentInputClass}>
{label && (
<label htmlFor={name} className={`flex items-center ${labelClass}`}>
{label}
{labelSpan && <span className={labelSpanClass}>{labelSpan}</span>}
</label>
)}
{input && (
<div className="flex items-center">
<input
type={inputType}
placeholder={placeholder}
value={value}
onChange={onChange}
onInput={onInput}
name={name}
tabIndex={tabIndex}
ref={ref}
className={inputClass}
/>
{icon && (
<div className="">
{typeof icon === "string" ? <img src={icon} alt="icon" /> : icon}
</div>
)}
</div>
)}
{select && (
<div className={parentSelectClass}>
<select name={name} id="" value={selectValue} className={selectClass}>
{selectOptions?.map((option) => (
<option key={option.value} value={option.value}>
{option.label}
</option>
))}
</select>
</div>
)}
</div>
);
};
export default InputCompOne;