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

Y_FE_Toy1_Team12 Wikipage TogetherS #11

Open
wants to merge 317 commits into
base: main
Choose a base branch
from
Open

Conversation

noSPkeepgoing
Copy link

@noSPkeepgoing noSPkeepgoing commented Sep 22, 2023

과제 내용

✅ 문서편집, revision 기능을 제공(CRUD 가능하게)하여 업무일지를 작성할 수 있는 직원들을 위한 위키사이트 구현(마크다운 형식)  
✅ firebase database (Firestore) 이용  
✅ 모달을 활용한 근무 시간을 표시하는 시계 및 타이머 창 구현  
✅ 캐러셀을 활용한 회사 공지 페이지  
✅ 갤러리 페이지 / 업무일지 페이지 등 메뉴를 필터링 또는 카테고리화 하는 선택바 구현  
✅ netlify 등을 이용한 정적 페이지 배포  
✅ TypeScript 사용 필수

배포

개발버전 : https://heartfelt-mandazi-9dce7c.netlify.app/
깃 레포지토리 : https://github.com/noSPkeepgoing/Wikipage-team12

팀원소개

고솔미 박은영 배경규 정지오 최선파
@SOL-MI @SKY-PEY @kyungkyuBae @jiohjung98 @noSPkeepgoing
스터디 페이지 갤러리 페이지 위키페이지 메인페이지, 헤더 로그인/회원가입페이지, 에러페이지

프로젝트 소개

  • “Together + Study”의 의미로 줄여서 “투게더스”라는 웹 서비스를 만들었습니다.
  • 공부를 위한 스터디 모집공간, 공부시간 공유 공간이 있습니다.
  • 공동체 활동을 위한 게시판과 갤러리 공간이 있습니다.

프로젝트 구성

  • 로그인 / 회원가입

    로그인 회원가입
    로그인 회원가입
  • 메인

    캐러셀 스터디 모집
    메인캐러셀 메인포스트모달
  • 갤러리

    네비바 이미지 업로드 상세정보모달
    갤러리 카테고리 갤러리 업로드 갤러리 댓글
  • 위키

    네비바 게시글 생성
    위키 네비바 위키 글작성
    게시글 수정 댓글 생성 및 수정
    위키 글수정 위키 댓글
  • 스터디

    랭킹 스터디 유저 정보 타이머
    스터디 랭킹 스터디 타이머 모달 스터디 타이머
  • 에러

    에러페이지
    에러페이지

기술 스택



프로젝트 문서

노션 : https://www.notion.so/7a5c2df8aaf7413982f8895d96d4db07

SKY-PEY and others added 30 commits September 16, 2023 20:49
헤더와 로그인 및 회원가입 페이지 연결
위키 게시글 댓글 기능 삭제 수정 구현 및 게시글 마크다운 형식 구현
jiohjung98 and others added 23 commits September 22, 2023 21:55
메인페이지 디자인 수정
스터디 모집 모달창 버튼 색상
게시글상세페이지 댓글 스타일링
갤러리 내비바 공통 스타일 적용
위키페이지 폰트 변경 및 스터디 페이지 css애니 추가
@noSPkeepgoing noSPkeepgoing changed the title Y_FE_Toy1_Team12 위키페이지 "투게더스" Y_FE_Toy1_Team12 Wikipage TogetherS Sep 22, 2023
Copy link

@JIYEONGYANGdev JIYEONGYANGdev left a comment

Choose a reason for hiding this comment

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

  • scss를 활용해본 경험이 분명 큰 도움이 될거에요. 다음에는 styled-component로 효율적인 코딩(한 파일 내에서의 일관성이 있어 깔끔하고 가독성이 좋고, 변수사용이 가능하고 등등)을 경험해도 좋을 것 같습니다.
  • 다양한 애니메이션을 활용해보신 것 같네요.
  • 헤더를 별도로 작업해서 그런지 몰라도 모바일반응형 구현이 조금 아쉽네요. 이 부분은 조금만 손보면 처리 가능할 것 같습니다.
  • 사소하지만 사용자경험면에서 팁인데요, 클릭 가능한 부분은 cursor: pointer 지정해주면 사용자가 클릭이 가능한 부분이라는 게 인지가 되어 좋을 것 같아요.
  • 요 스터디 목록 부분은 높이를 고정해주면 좋을 것 같아요. 2번째 페이지가 수가 적으니 넘겼을 때 갑자기 화면이 숭덩 잘리는 느낌이 있네요.

스크린샷 2023-09-29 오후 3 06 04

  • 전에 멘토링 시간 때 React.FC 타입에 대해 물어보셨었는데, 그게 이제 이해가 되네요. 저는 React.FC 를 사용하지 않는다고 했는데, 어떤식으로 컴포넌트(인자) 타입을 지정해주는지 중간에 코멘트 달아놓았으니 참고해주세요!

다들 정말 열심히하셨네요. 수고하셨습니다~ 👏👏

Comment on lines +3 to +5
import './_modal.scss';
import './ModalAddImage.scss';
import '../../styles/_common.scss';

Choose a reason for hiding this comment

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

typescript config 설정으로 절대경로를 활용하는 방법에 대해 알아보세요!

const modalRef = useRef<HTMLDialogElement | null>(null);
return (
<div>
<button // 이미지 추가하는 버튼 (Modal open)

Choose a reason for hiding this comment

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

실제 상용화된 서비스라면 주석은 예외적인 상황외에는 없애는 게 좋습니다!

Comment on lines +29 to +32
onClick={async () => {
await modalRef.current?.close();
location.reload();
}}

Choose a reason for hiding this comment

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

요 핸들러를 함수로 정의해서 넘겨줘도 좋을 것 같아요.
그리고 async-await 를 꼭 사용해야했던 이유가 있을까요? 모달을 닫고, 새로고침을 하고 싶었던 걸까요?
굳이 그렇다면, setTimeout으로 걸어도 될 것 같고,
사실은 새로고침말고 해당 부분만 새롭게 불러올 수 있도록 설계되어야할 것 같아요. 그게 SPA 구조에 맞는 거니까요.

const [like, setLike] = useState<number>(0);
const [comment, setComment] = useState<string>('');
const [commentList, setCommentList] = useState<IComment[]>([]);
const [isChange, setChange] = useState<boolean>(true);

Choose a reason for hiding this comment

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

setIsChange 가 네이밍이 더 정확할 것 같네요.

Comment on lines +16 to +25
interface IModalComment {
image: string;
imgId: string;
categoryId: string;
commentsListData: any;
writerId: string;
writerName: string;
likeData?: number;
writerImage: any;
}

Choose a reason for hiding this comment

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

타입 이름 규칙도 정확하고 좋네요. 반드시 interface -> I.. type -> T.. 로 네이밍해야하는 건 아니에요.

저는 Props만 붙여서 활용하기도 합니다. (ex) CommentModalProps

Comment on lines +52 to +55
<Link
to="/"
className={`page ${location.pathname === '/' ? 'active' : ''}`}
>

Choose a reason for hiding this comment

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

Route가 아니라 Link 를 활용하셨네요.

Link 컴포넌트의 특징을 알고있는 것도 좋을 것 같아요!

link: string | null; // 링크 타입을 string 또는 null로 지정
}

const Slide: React.FC<ISlideProps> = ({ backgroundColor, text, imageSrc, link }) => {

Choose a reason for hiding this comment

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

React.FC 에 대해 질문해주셨던 게 기억나네요.

저는 요렇게 많이 합니다~

const Slide = ({ backgroundColor, text, imageSrc, link }: ISlideProps) => {

..

<div className="slide-content" onClick={handleSlideContentClick}>
<div className="slide-left">
{text.map((textItem, index) => (
<div key={index} style={{ display: 'block' }}>

Choose a reason for hiding this comment

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

key는 index만으로 사용하기보다
프로젝트 전체에서 고유할 수 있도록

<div key={`slide-content-text-${index}`} ..

이런식으로 지어주는 게 좋습니다.

// error 핸들링
const handleError = (error: any) => {
switch (error.code) {
case 'auth/email-already-in-use':

Choose a reason for hiding this comment

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

에러 핸들링을 신경쓰신 점이 보이네요. 👍

보통 이런 에러코드는 ERR_AUTH_EMAIL_ALREADY_IN_USE 이런 식으로 대문자 + _ 조합으로 만들어서 (백에서 프론트로) 내려주는 편입니다.

Comment on lines +101 to +120
<li className="page-item">
<a className="page-link" href="#">
1
</a>
</li>
<li className="page-item">
<a className="page-link disabled" href="#">
2
</a>
</li>
<li className="page-item">
<a className="page-link disabled" href="#">
3
</a>
</li>
<li className="page-item">
<a className="page-link disabled" href="#">
4
</a>
</li>

Choose a reason for hiding this comment

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

여기는 map을 돌리면 좋겠네요?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants