Merge pull request 'Input group component' (#57) from feature/Input-group into develop
Reviewed-on: http://85.143.176.51:3000/free-land/front-end/pulls/57
This commit is contained in:
commit
a6510e0e28
52
src/components/Inputgroup.tsx
Normal file
52
src/components/Inputgroup.tsx
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/**
|
||||||
|
* A container for components
|
||||||
|
* Any component can be a child for this container
|
||||||
|
*/
|
||||||
|
import React, { useEffect, useState, cloneElement } from "react";
|
||||||
|
import classNames from "classnames";
|
||||||
|
|
||||||
|
const focusable = ["input", "select", "textarea", "button"];
|
||||||
|
|
||||||
|
export type Props = {
|
||||||
|
/**
|
||||||
|
* Container's children
|
||||||
|
*/
|
||||||
|
children?: React.ReactNode | React.ReactNode[];
|
||||||
|
} & React.HTMLProps<HTMLDivElement>;
|
||||||
|
|
||||||
|
const Inputgroup = ({ children }: Props) => {
|
||||||
|
const [focused, setFocused] = useState(false);
|
||||||
|
useEffect(() => {}, [focused]);
|
||||||
|
const arrChildren = React.Children.toArray(children);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={classNames(
|
||||||
|
"border border-gray-200 rounded flex items-center p-1 m-4",
|
||||||
|
focused ? "border-gray-900" : "border-gray-300"
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{arrChildren.map((e) => {
|
||||||
|
if (
|
||||||
|
React.isValidElement(e) &&
|
||||||
|
typeof e.type === "string" &&
|
||||||
|
focusable.includes(e.type)
|
||||||
|
) {
|
||||||
|
return cloneElement(e as React.ReactComponentElement<"input">, {
|
||||||
|
onFocus: (event: any) => {
|
||||||
|
setFocused(true);
|
||||||
|
e.props.onFocus && e.props.onFocus(event);
|
||||||
|
},
|
||||||
|
onBlur: (event: any) => {
|
||||||
|
setFocused(false);
|
||||||
|
e.props.onBlur && e.props.onBlur(event);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return e;
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Inputgroup;
|
Loading…
x
Reference in New Issue
Block a user