Skip to content

Commit d4015bf

Browse files
committed
🛠️ refactor: (FE) - FeedbackItem의 수정가능 여부를 고려한 리팩토링
1 parent 7db9ce9 commit d4015bf

File tree

5 files changed

+63
-5
lines changed

5 files changed

+63
-5
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { css } from '@emotion/react';
2+
3+
export const fbBtnContainer = css`
4+
position: absolute;
5+
right: 10px;
6+
height: 100%;
7+
padding: 5px 0px;
8+
display: flex;
9+
flex-direction: column;
10+
justify-content: space-between;
11+
`;
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import React from 'react';
2+
3+
import useCrudFeedback from '@hooks/useCrudFeedback';
4+
5+
import { ReactComponent as DeleteIcon } from '@assets/icon/delete.svg';
6+
import { ReactComponent as EditIcon } from '@assets/icon/edit.svg';
7+
import { ReactComponent as CheckIcon } from '@assets/icon/check.svg';
8+
import { iconSmStyle } from '@styles/commonStyle';
9+
import { fbBtnContainer } from './FeedbackEditBtns.style';
10+
11+
interface Props {
12+
id: string;
13+
readOnly: boolean;
14+
}
15+
16+
const FeedbackEditBtn = ({ id, readOnly }: Props) => {
17+
const { handleStartEditFeedback, handleEndEditFeedback, handleDeleteFeedback } =
18+
useCrudFeedback(id);
19+
20+
return (
21+
<div css={fbBtnContainer}>
22+
{readOnly ? (
23+
<button onClick={handleStartEditFeedback}>
24+
<EditIcon {...iconSmStyle} fill="black" />
25+
</button>
26+
) : (
27+
<button onClick={handleEndEditFeedback}>
28+
<CheckIcon {...iconSmStyle} fill="black" />
29+
</button>
30+
)}
31+
<button onClick={handleDeleteFeedback}>
32+
<DeleteIcon {...iconSmStyle} fill="black" />
33+
</button>
34+
</div>
35+
);
36+
};
37+
38+
export default FeedbackEditBtn;

frontend/src/components/FeedbackItem/FeedbackItem.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ interface PropsType {
1414
//TODO ref type any
1515
feedbackRef: React.MutableRefObject<any[]>;
1616
index: number;
17+
editableBtns: React.ReactNode;
1718
}
18-
const FeedbackItem = ({ feedback, feedbackRef, index }: PropsType) => {
19+
const FeedbackItem = ({ feedback, feedbackRef, index, editableBtns }: PropsType) => {
1920
const textareaRef = useRef<HTMLTextAreaElement>(null);
2021
const isFbSync = useRecoilValue(isFbSyncState);
2122
const setIsFbClicked = useSetRecoilState(isFbClickedState);
@@ -47,6 +48,7 @@ const FeedbackItem = ({ feedback, feedbackRef, index }: PropsType) => {
4748
onClick={handleClickFeedback}
4849
css={fbTextAreaStyle}
4950
/>
51+
{editableBtns}
5052
</div>
5153
);
5254
};

frontend/src/components/FeedbackList/FeedbackList.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import React, { useEffect, useRef } from 'react';
2-
import EditableFeedbackBox from '@components/FeedbackItem/FeedbackItem';
2+
import FeedbackItem from '@components/FeedbackItem/FeedbackItem';
33
import { useRecoilValue } from 'recoil';
44
import { feedbackListSelector, isFbSyncState } from '@store/feedback.store';
55
import { focusIndexSelector } from '@store/currentVideoTime.store';
66

77
import { feedbackListStyle } from './FeedbackList.style';
8+
import FeedbackEditBtn from '@components/FeedbackEditBtns/FeedbackEditBtns';
89

9-
const FeedbackList = () => {
10+
interface Props {
11+
editable: boolean;
12+
}
13+
const FeedbackList = ({ editable }: Props) => {
1014
const feedbackRef = useRef([]);
1115
const feedbackList = useRecoilValue(feedbackListSelector);
1216
const focusIndex = useRecoilValue(focusIndexSelector);
@@ -20,14 +24,17 @@ const FeedbackList = () => {
2024
});
2125
}, [focusIndex, isFbSync]);
2226

27+
const editableBtns = (props) => editable && <FeedbackEditBtn {...props} />;
28+
2329
return (
2430
<div css={feedbackListStyle}>
2531
{feedbackList.map((feedback, idx) => (
26-
<EditableFeedbackBox
32+
<FeedbackItem
2733
key={feedback.id}
2834
feedback={feedback}
2935
feedbackRef={feedbackRef}
3036
index={idx}
37+
editableBtns={editableBtns({ id: feedback.id, readOnly: feedback.readOnly })}
3138
/>
3239
))}
3340
</div>

frontend/src/pages/Interviewer/Interviewer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const Interviewer = () => {
5757
/>
5858
))}
5959

60-
<FeedbackList />
60+
<FeedbackList editable />
6161
<button onClick={hadleEndInterview}>면접 종료</button>
6262
</div>
6363
);

0 commit comments

Comments
 (0)