Skip to content

Commit

Permalink
Merge pull request #136 from lunit-io/ds-82-textfield-ref
Browse files Browse the repository at this point in the history
[DS-82] TextField ref prop 사용 에러 이슈 해결
  • Loading branch information
LTakhyunKim authored Oct 31, 2023
2 parents dfda729 + 68b01ce commit dd80aec
Showing 1 changed file with 55 additions and 51 deletions.
106 changes: 55 additions & 51 deletions packages/design-system/src/components/TextField/TextField.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from "react";
import React, { forwardRef } from "react";

import TextFieldIcon from "./TextFieldIcon";
import { BaseTextField } from "./TextField.style";
Expand All @@ -9,57 +9,60 @@ import type {
SingleTextFieldProps,
} from "./TextField.types";

const SingleTextField = (props: SingleTextFieldProps) => {
const {
size = "small",
leftIcon,
rightIcon,
leftIconSx,
rightIconSx,
onLeftIconClick,
onRightIconClick,
InputProps,
...restProps
} = props;
const SingleTextField = forwardRef<HTMLDivElement, SingleTextFieldProps>(
(props, ref) => {
const {
size = "small",
leftIcon,
rightIcon,
leftIconSx,
rightIconSx,
onLeftIconClick,
onRightIconClick,
InputProps,
...restProps
} = props;

return (
<BaseTextField
{...restProps}
textFieldSize={size}
hasLeftIcon={Boolean(leftIcon)}
hasRightIcon={Boolean(rightIcon)}
InputProps={{
...{
startAdornment: leftIcon && (
<TextFieldIcon
sx={{ marginRight: "4px", ...leftIconSx }}
icon={leftIcon}
onIconClick={onLeftIconClick}
/>
),
endAdornment: rightIcon && (
<TextFieldIcon
sx={{ marginLeft: "4px", ...rightIconSx }}
icon={rightIcon}
onIconClick={onRightIconClick}
/>
),
},
...InputProps,
}}
/>
);
};
return (
<BaseTextField
{...restProps}
ref={ref}
textFieldSize={size}
hasLeftIcon={Boolean(leftIcon)}
hasRightIcon={Boolean(rightIcon)}
InputProps={{
...{
startAdornment: leftIcon && (
<TextFieldIcon
sx={{ marginRight: "4px", ...leftIconSx }}
icon={leftIcon}
onIconClick={onLeftIconClick}
/>
),
endAdornment: rightIcon && (
<TextFieldIcon
sx={{ marginLeft: "4px", ...rightIconSx }}
icon={rightIcon}
onIconClick={onRightIconClick}
/>
),
},
...InputProps,
}}
/>
);
}
);

const MultiTextField = ({
size = "small",
onChange,
...restProps
}: MultiTextFieldProps) => {
return <BaseTextField {...restProps} textFieldSize={size} multiline />;
};
const MultiTextField = forwardRef<HTMLDivElement, MultiTextFieldProps>(
({ size = "small", onChange, ...restProps }, ref) => {
return (
<BaseTextField {...restProps} ref={ref} textFieldSize={size} multiline />
);
}
);

const TextField = (props: TextFieldProps) => {
const TextField = forwardRef<HTMLDivElement, TextFieldProps>((props, ref) => {
const {
rows,
size,
Expand All @@ -71,14 +74,15 @@ const TextField = (props: TextFieldProps) => {
return multiline ? (
<MultiTextField
{...restProps}
ref={ref}
maxRows={Infinity}
size={size}
variant={variant}
rows={rows}
/>
) : (
<SingleTextField {...restProps} size={size} variant={variant} />
<SingleTextField {...restProps} ref={ref} size={size} variant={variant} />
);
};
});

export default TextField;

0 comments on commit dd80aec

Please sign in to comment.