Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/constants/user/modalMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,5 @@ export const MODAL_MESSAGE = {
projectDetailFail: '해당 공고가 존재하지 않습니다.',
alreadyApply: '이미 참여한/지원하신 공고 입니다.',
noMemberToEvaluate: '평가 할 멤버가 없습니다.',
noTagsData: '대표 스킬/포지션을 입력 하셔야 사용할 수 있습니다.',
} as const;
120 changes: 67 additions & 53 deletions src/pages/user/projectDetail/ProjectDetail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ const ProjectDetail = () => {
const { projectId } = useParams();
const id = Number(projectId);
const navigate = useNavigate();
const { isOpen, message, handleModalClose, handleModalOpen } = useModal();
const { isOpen, message, handleModalClose, handleModalOpen, handleConfirm } =
useModal();
const { data, isLoading, isFetching } = useGetProjectData(id);
const { userData } = useAuthStore((state) => state);

Expand All @@ -41,7 +42,11 @@ const ProjectDetail = () => {
}

const handleApplyClick = () => {
navigate(`${ROUTES.apply}/${id}`);
if (userData?.hasRequiredTags) {
navigate(`${ROUTES.apply}/${id}`);
} else {
handleModalOpen(MODAL_MESSAGE.noTagsData, () => navigate(ROUTES.mypage));
}
};

const handleMovetoUserPage = () => {
Expand All @@ -50,57 +55,66 @@ const ProjectDetail = () => {
};

return (
<S.Container>
<S.Wrapper>
<ScrollRestoration />
<S.Header>
<S.Title>{data.title}</S.Title>
<S.ProfileContainer>
<S.ProfileImageContainer onClick={handleMovetoUserPage}>
<Avatar size='2.5rem' image={data.user.img} />
</S.ProfileImageContainer>
<S.UserInfo>
<S.UserName onClick={handleMovetoUserPage}>
{data.user.nickname}
</S.UserName>
<S.PostDate>{formatDate(data.recruitmentEndDate)}</S.PostDate>
<S.ViewCount>
<EyeIcon />
{data.views}
</S.ViewCount>
</S.UserInfo>
</S.ProfileContainer>
</S.Header>
<S.Content>
<ProjectInformation data={data} />
<br></br>
<S.ProjectDescription>
<MarkdownEditorView description={data.description} />
</S.ProjectDescription>
</S.Content>
<S.ApplyButtonContainer>
{userData &&
userData.id !== data.user.id &&
!data.acceptedIds.includes(userData.id) &&
!data.applicantIds.includes(userData.id) ? (
<Button
size='primary'
schema='primary'
radius='primary'
onClick={handleApplyClick}
>
프로젝트 함께하기
</Button>
) : null}
</S.ApplyButtonContainer>
<hr></hr>
<CommentLayout
projectId={data.id}
createrId={data.user.id}
loginUserId={userData?.id}
/>
</S.Wrapper>
</S.Container>
<>
<S.Container>
<S.Wrapper>
<ScrollRestoration />
<S.Header>
<S.Title>{data.title}</S.Title>
<S.ProfileContainer>
<S.ProfileImageContainer onClick={handleMovetoUserPage}>
<Avatar size='2.5rem' image={data.user.img} />
</S.ProfileImageContainer>
<S.UserInfo>
<S.UserName onClick={handleMovetoUserPage}>
{data.user.nickname}
</S.UserName>
<S.PostDate>{formatDate(data.recruitmentEndDate)}</S.PostDate>
<S.ViewCount>
<EyeIcon />
{data.views}
</S.ViewCount>
</S.UserInfo>
</S.ProfileContainer>
</S.Header>
<S.Content>
<ProjectInformation data={data} />
<br></br>
<S.ProjectDescription>
<MarkdownEditorView description={data.description} />
</S.ProjectDescription>
</S.Content>
<S.ApplyButtonContainer>
{userData &&
userData.id !== data.user.id &&
!data.acceptedIds.includes(userData.id) &&
!data.applicantIds.includes(userData.id) ? (
<Button
size='primary'
schema='primary'
radius='primary'
onClick={handleApplyClick}
>
프로젝트 함께하기
</Button>
) : null}
</S.ApplyButtonContainer>
<hr></hr>
<CommentLayout
projectId={data.id}
createrId={data.user.id}
loginUserId={userData?.id}
/>
</S.Wrapper>
</S.Container>
<Modal
isOpen={isOpen}
onClose={handleModalClose}
onConfirm={handleConfirm}
>
{message}
</Modal>
</>
);
};

Expand Down
2 changes: 2 additions & 0 deletions src/store/authStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export interface UserData {
id: number;
email: string;
nickname: string;
hasRequiredTags: boolean;
}

interface AuthState {
Expand All @@ -23,6 +24,7 @@ const initialUserData: UserData = {
id: 0,
email: '',
nickname: '',
hasRequiredTags: true,
};

export const getStoredUserData = () => {
Expand Down