Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NDD-353] QuestionSelectionBox 문제 해결 (0.5h / 1h) #182

Merged
merged 11 commits into from
Dec 7, 2023
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ const AddWorkbookListModal = ({
);
};

const handleNavigate = () => {
closeModal();
navigate(PATH.MYPAGE, { state: { tabIndex: '1' } });
};

const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
if (selectedWorkbook.length === 0) {
Expand All @@ -59,8 +64,7 @@ const AddWorkbookListModal = ({

try {
void mutateAllQuestionCopy();
closeModal();
navigate(PATH.MYPAGE);
handleNavigate();
} catch (error) {
console.error('문제집 복사 중 오류 발생', error);

Expand Down Expand Up @@ -97,6 +101,7 @@ const AddWorkbookListModal = ({
<NewWorkbookListButton
selectedQuestionIds={selectedQuestionIds}
workbookData={workbookData}
onAddNewWorkbook={handleNavigate}
/>
</div>
</Modal.content>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,20 @@ import useWorkbookPostMutation from '@hooks/apis/mutations/useWorkbookPostMutati
const NewWorkbookListButton = ({
selectedQuestionIds,
workbookData,
onAddNewWorkbook,
}: {
selectedQuestionIds: number[];
workbookData: WorkbookEntity;
onAddNewWorkbook: () => void;
}) => {
const { mutateAsync: newWorkbookMutate } = useWorkbookPostMutation();
const { mutateAsync: newQuestionCopyMutate } = useQuestionCopyMutation();

const handleNewWorkbook = () => {
try {
void createNewWorkbook();
//TODO: 이 다음에는 어떻게 해줄까...?
onAddNewWorkbook();
//TODO: (해민)이 다음에는 어떻게 해줄까...? (수민)일단 마이페이지로 보낼게요
} catch (err) {
console.log(err);
throw err;
Expand All @@ -29,6 +32,7 @@ const NewWorkbookListButton = ({
title: `${workbookData.title} 복사본`,
content: workbookData.content,
categoryId: workbookData.categoryId,
isPublic: workbookData.isPublic,
});

await newQuestionCopyMutate({
Expand Down Expand Up @@ -58,7 +62,7 @@ const NewWorkbookListButton = ({
margin-left: 1rem;
`}
>
새로운 재생 목록 만들기
새로운 면접 세트 만들기
</Typography>
</button>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ const QuestionAccordionList: React.FC<QuestionAccordionListProps> = ({
return (
<>
<div
ref={listRef}
css={css`
display: flex;
flex-direction: column;
Expand All @@ -58,19 +59,19 @@ const QuestionAccordionList: React.FC<QuestionAccordionListProps> = ({
overflow-y: auto;
padding: 1rem;
height: 100%;
div:nth-last-of-type(2) {
margin-bottom: ${isEditMode ? '2.5rem' : '0'};
}
`}
>
{questionData.map((question) => (
{questionData.map((question, index) => (
<div
key={question.questionId}
onClick={() => handleQuestionChecked(question.questionId)}
css={css`
display: flex;
align-items: center;
column-gap: 0.5rem;
margin-bottom: ${index === questionData.length - 1
? '2.5rem'
: '0'};
`}
>
{isEditMode && (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import { theme } from '@styles/theme';
import { ExcludeArray } from '@/types/utils';
import { WorkbookTitleListResDto } from '@/types/workbook';
import { useState } from 'react';
import useWorkbookDeleteMutation from '@hooks/apis/mutations/useWorkbookDeleteMutation';
import useModal from '@hooks/useModal';
import { WorkbookGeneratorModal } from '@common/index';
import useWorkbookDelete from '@hooks/useWorkbookDelete';

type QuestionTabPanelHeaderProps = {
workbook: ExcludeArray<WorkbookTitleListResDto>;
Expand All @@ -21,7 +21,7 @@ const QuestionTabPanelHeader: React.FC<QuestionTabPanelHeaderProps> = ({
onEditButtonClick,
}) => {
const [isMenuOpen, setIsMenuOpen] = useState(false);
const { mutate: deleteWorkbook } = useWorkbookDeleteMutation();
const { deleteWorkbook } = useWorkbookDelete();
const { openModal, closeModal } = useModal(() => {
return (
<WorkbookGeneratorModal
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Button, Input, InputArea } from '@foundation/index';
import { css } from '@emotion/react';
import { FormEventHandler, useCallback, useState } from 'react';
import { FormEventHandler, useCallback, useEffect, useState } from 'react';
import LabelBox from '@common/QuestionSelectionBox/WorkbookGeneratorModal/LabelBox';
import WorkbookCategory from '@common/QuestionSelectionBox/WorkbookGeneratorModal/WorkbookCategory';
import useInput from '@hooks/useInput';
Expand All @@ -18,10 +18,11 @@ const WorkbookEditForm: React.FC<WorkbookEditFormProps> = ({
workbookId,
closeModal,
}) => {
const { data: workbookInfo } = useWorkbookQuery({
workbookId: workbookId,
enabled: workbookId > 0,
});
const { data: workbookInfo, isFetching: isWorkbookFetching } =
useWorkbookQuery({
workbookId: workbookId,
enabled: workbookId > 0,
});
const { data: categories } = useCategoryQuery();
const [activeValidationError, setActiveValidationError] = useState(false);
const [selectedCategoryIndex, setSelectedCategoryIndex] = useState(0);
Expand All @@ -34,6 +35,22 @@ const WorkbookEditForm: React.FC<WorkbookEditFormProps> = ({
const { value: workbookContent, onChange: handleWorkbookContentChange } =
useInput<HTMLTextAreaElement>(workbookInfo?.content ?? '');

const findCategoryIndex = useCallback(
(categoryId?: number) => {
return (
categories?.findIndex((category) => category.id === categoryId) ?? 0
);
},
[categories]
);

useEffect(() => {
if (!workbookInfo) return;

setSelectedCategoryIndex(findCategoryIndex(workbookInfo.categoryId));
setIsPublic(workbookInfo.isPublic);
}, [findCategoryIndex, isWorkbookFetching, workbookInfo]);

Comment on lines +47 to +53
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[p-5] TODO: useEffect 필요 없는 부분은 제거 시키기... 너무 햇갈려요 어떤건 props 어떤건 useEffect등등

const { editWorkbook } = useWorkbookEdit({
onSuccess: () => {
closeModal();
Expand Down Expand Up @@ -129,7 +146,7 @@ const WorkbookEditForm: React.FC<WorkbookEditFormProps> = ({
취소
</Button>
<Button variants="primary" type="submit">
만들기
수정하기
</Button>
</div>
</form>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,17 @@ const WorkbookGeneratorModal: React.FC<WorkbookGeneratorModalProps> = ({
css={css`
width: 30rem;
@media (max-width: ${theme.breakpoints.tablet}) {
width: 20rem;
width: 25rem;
}
@media (max-width: ${theme.breakpoints.mobileL}) {
width: 100%;
margin: 0 0.5rem;
}
`}
>
<ModalHeader closeModal={closeModal}>새 면접 세트</ModalHeader>
<ModalHeader closeModal={closeModal}>
{workbookId !== undefined ? '면접 세트 수정' : '새 면접 세트'}
</ModalHeader>
<div
css={css`
max-height: 80vh;
Expand Down
2 changes: 1 addition & 1 deletion FE/src/components/foundation/Modal/ModalLayout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ const ModalLayout: React.FC<ModalLayoutProps> = ({
onClick={() => {
closeModal();
}}
{...args}
>
<Box
css={css`
Expand All @@ -45,6 +44,7 @@ const ModalLayout: React.FC<ModalLayoutProps> = ({
width: auto;
`}
onClick={(e) => e.stopPropagation()}
{...args}
>
{children}
</Box>
Expand Down
4 changes: 2 additions & 2 deletions FE/src/components/foundation/Modal/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import ModalHeader from './ModalHeader';
import ModalLayout, { ModalLayoutProps } from './ModalLayout';
import enhanceChildElement from '@/utils/enhanceChildElement';

const Modal = ({ children, isOpen, closeModal }: ModalLayoutProps) => {
const Modal = ({ children, isOpen, closeModal, ...args }: ModalLayoutProps) => {
return (
<ModalLayout isOpen={isOpen} closeModal={closeModal}>
<ModalLayout isOpen={isOpen} closeModal={closeModal} {...args}>
{enhanceChildElement({
children: children,
component: ModalHeader,
Expand Down
4 changes: 2 additions & 2 deletions FE/src/components/foundation/Toggle/Toggle.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { HTMLElementTypes } from '@/types/utils';
import {
ToggleInputStyle,
ToggleLabelStyle,
} from '@foundation/Toggle/Toggle.styles';
import { useId } from 'react';
import { HTMLElementTypes } from '@/types/utils';

type ToggleProps = {
isToggled: boolean;
Expand All @@ -21,7 +21,7 @@ const Toggle: React.FC<ToggleProps> = ({ isToggled, onClick, ...args }) => {
css={ToggleInputStyle}
{...args}
/>
<label htmlFor="toggle" onClick={onClick} css={ToggleLabelStyle} />
<label htmlFor={toggleId} onClick={onClick} css={ToggleLabelStyle} />
</>
);
};
Expand Down
6 changes: 5 additions & 1 deletion FE/src/components/myPage/MyPageTabs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@ import { css } from '@emotion/react';
import { Box, SelectionBox, Tabs, Typography } from '@foundation/index';
import QuestionSelectTabPanel from './TabPanel/QuestionSelectTabPanel';
import VideoListTabPanel from './TabPanel/VideoListTabPanel';
import { useLocation } from 'react-router-dom';
import { Location } from '@remix-run/router';

const MyPageTabs: React.FC = () => {
const location = useLocation() as Location<{ tabIndex: string }>;

return (
<Tabs
initialValue={'2'}
initialValue={location?.state?.tabIndex ?? '2'}
css={css`
display: flex;
flex-direction: column;
Expand Down
1 change: 1 addition & 0 deletions FE/src/hooks/useWorkbookAdd.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ const useWorkbookAdd = ({ onSuccess }: useWorkbookAddProps) => {
copyCount: 0,
title: workbook.title,
content: workbook.content,
isPublic: workbook.isPublic,
};
};

Expand Down
33 changes: 33 additions & 0 deletions FE/src/hooks/useWorkbookDelete.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import useUserInfo from '@hooks/useUserInfo';
import { useQueryClient } from '@tanstack/react-query';
import useWorkbookDeleteMutation from '@hooks/apis/mutations/useWorkbookDeleteMutation';
import { WorkbookTitleListResDto } from '@/types/workbook';
import { QUERY_KEY } from '@constants/queryKey';

const useWorkbookDelete = () => {
const userInfo = useUserInfo();
const queryClient = useQueryClient();

const { mutate: deleteWorkbookSet } = useWorkbookDeleteMutation();

const deleteFromServer = (workbookId: number) => {
deleteWorkbookSet(Number(workbookId));
};

const deleteFromState = (workbookId: number) => {
queryClient.setQueryData<WorkbookTitleListResDto | []>(
QUERY_KEY.WORKBOOK_TITLE,
(prev) => prev?.filter((item) => item.workbookId !== Number(workbookId))
);
};

const deleteWorkbook = (workbookId: number) => {
userInfo ? deleteFromServer(workbookId) : deleteFromState(workbookId);
};

return {
deleteWorkbook,
};
};

export default useWorkbookDelete;
Loading