Skip to content

Commit ca23bed

Browse files
committed
📖 docs: (FE) - FeedbackItem컴포넌트 storybook 추가
1 parent d4015bf commit ca23bed

File tree

2 files changed

+48
-5
lines changed

2 files changed

+48
-5
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import React from 'react';
2+
import { Story } from '@storybook/react';
3+
import FeedbackItem, { Props } from './FeedbackItem';
4+
import FeedbackEditBtn from '@components/FeedbackEditBtns/FeedbackEditBtns';
5+
6+
export default {
7+
component: FeedbackItem,
8+
title: 'FeedbackItem',
9+
};
10+
11+
const Template: Story<Props> = (args: Props) => <FeedbackItem {...args} />;
12+
13+
const dummyFeedback = {
14+
id: 'id',
15+
startTime: 500,
16+
innerIndex: 4,
17+
content: `Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.`,
18+
readonly: true,
19+
isFirst: true,
20+
};
21+
const dummyFbItem = {
22+
feedback: dummyFeedback,
23+
feedbackRef: false,
24+
index: 3,
25+
editableBtns: <FeedbackEditBtn id="id" readOnly={true} />,
26+
};
27+
28+
export const Default = Template.bind({});
29+
Default.args = { ...dummyFbItem, editableBtns: false };
30+
31+
export const Editable = Template.bind({});
32+
Editable.args = dummyFbItem;

frontend/src/components/FeedbackItem/FeedbackItem.tsx

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,29 @@ import { currentVideoTimeState } from '@store/currentVideoTime.store';
88
import { feedbackBoxStyle, fbTextAreaStyle, fbStartTimeStyle } from './FeedbackItem.style';
99

1010
import { FeedbackItemType } from '@customType/feedback';
11+
import { mmssFormatter } from '@utils/common.util';
12+
import { ONE_SECOND } from '@constants/time.constant';
1113

12-
interface PropsType {
14+
export interface Props {
1315
feedback: FeedbackItemType;
1416
//TODO ref type any
1517
feedbackRef: React.MutableRefObject<any[]>;
1618
index: number;
1719
editableBtns: React.ReactNode;
1820
}
19-
const FeedbackItem = ({ feedback, feedbackRef, index, editableBtns }: PropsType) => {
21+
const FeedbackItem = ({ feedback, feedbackRef, index, editableBtns }: Props) => {
2022
const textareaRef = useRef<HTMLTextAreaElement>(null);
2123
const isFbSync = useRecoilValue(isFbSyncState);
2224
const setIsFbClicked = useSetRecoilState(isFbClickedState);
2325
const setCurrentVideoTime = useSetRecoilState(currentVideoTimeState);
2426
const { handleFbChange } = useCrudFeedback(feedback.id);
2527

2628
useEffect(() => {
27-
feedbackRef.current[index].style.height = textareaRef.current.scrollHeight + 'px';
29+
const effect = () => {
30+
if (!feedbackRef) return;
31+
feedbackRef.current[index].style.height = textareaRef.current.scrollHeight + 'px';
32+
};
33+
effect();
2834
});
2935

3036
const { startTime, isFirst, content, readOnly } = feedback;
@@ -35,10 +41,15 @@ const FeedbackItem = ({ feedback, feedbackRef, index, editableBtns }: PropsType)
3541
setCurrentVideoTime(startTime);
3642
};
3743

44+
const getFbRef = (el) => {
45+
if (!feedbackRef) return;
46+
return (feedbackRef.current[index] = el);
47+
};
48+
3849
return (
39-
<div ref={(el) => (feedbackRef.current[index] = el)} css={feedbackBoxStyle}>
50+
<div ref={getFbRef} css={feedbackBoxStyle}>
4051
<div css={fbStartTimeStyle} style={{ visibility: isFirst ? 'visible' : 'hidden' }}>
41-
{startTime}
52+
{mmssFormatter(startTime * ONE_SECOND)}
4253
</div>
4354
<textarea
4455
ref={textareaRef}

0 commit comments

Comments
 (0)