당신 근처 일자리를 당일에 구하는 사이트 '당일'
Friendly 12team 깃허브 조직
배포 링크
노션 링크
const [filterValues, setFilterValues] = useState<FilterValues>({
clickedAddress: '',
hashtag: [],
startDate: undefined,
money: undefined,
});
const handleClickFilter = (filterValues: FilterValues) => {
setFilterValues(filterValues);
};
const SORT_OPTIONS = [
{ value: 'time', label: '마감임박순' },
{ value: 'pay', label: '시급많은순' },
{ value: 'hour', label: '시간적은순' },
{ value: 'shop', label: '가나다순' },
];
const { data, loading, error, execute } = useFetch(() => {
return noticeAPI.getNoticeList({
offset: cardOffset,
limit: ITEM_PER_PAGE,
address: filterValues.clickedAddress,
keyword: keyword,
startsAtGte: filterValues.startDate?.toISOString(),
hourlyPayGte: filterValues.money,
sort: sortedData,
});
});
useEffect(() => {
execute();
}, [
currentPage,
sortedData,
filterValues.clickedAddress,
keyword,
filterValues.startDate,
filterValues.money,
]);
랜딩 페이지(NoticeList) user 주소 맞춤 공고
토큰에 있는 로그인 user의 주소와 공고 데이터의 주소를 비교해 일치하는 데이터만 렌더링되게 했다.
페이지네이션 / Pagination
페이지네이션 구현 포스팅
테이블 / Table
테이블 컴포넌트를 사용하는 페이지가 myProfileInfo, noticeInfo 2개였다. 그래서 재사용성을 고려하기 보다 두 페이지에 각각 맞는 데이터를 연결한 테이블 컴포넌트를 구현했다.
const handleNextClick = () => {
const newCurrentPage = Math.min(totalPage, currentPage + limit);
setCurrentPage(newCurrentPage);
setCurrentPageArray(sliceArrayByLimit(totalPage, limit, newCurrentPage));
};
-> 해결: 현재 페이지가 속한 페이지네이션 그룹 순서를 나타내는 pageGroup 변수를 만든다. 이 변수를 활용해 오른쪽 사이드 화살표를 누르면 바로 다음 페이지로 넘어가게 만든다.
const handleNextClick = () => {
const pageGroup = Math.ceil(currentPage / limit);
const newCurrentPage = limit * pageGroup + 1;
setCurrentPage(newCurrentPage);
setCurrentPageArray(sliceArrayByLimit(totalPage, limit, newCurrentPage));
};
테이블 컴포넌트의 각 행마다 있는 버튼들이 같은 상태를 공유한다.
-> 원인: Table 버튼 상태를 버튼 컴포넌트를 사용하는 TableBody 컴포넌트에서 관리하니 버튼의 상태를 각각 버튼이 아닌 통합적으로 관리했다.
-> 해결: 버튼 상태를 버튼 컴포넌트에서 관리해서 따로 이벤트를 적용할 수 있었다.
테이블 버튼 컴포넌트에 onClick으로 API에 put으로 status를 보내려는데 계속 400번대 에러가 발생했다.
-> 원인: API 명세에 나와있는 put 요청 형식을 제대로 지키지 않았다.
-> 해결: param으로 status: 객체가 아닌, string 형식 status를 넣으니 잘 작동했다.
NEXT.js의 페이지 라우터를 썼는데, id만 다르고 형식은 같은 공고 상세 페이지를 구현하는 데 어려움을 겪었다.
-> 원인: Link에 id 값을 2개 이상 넣어줘야 할 땐 공고 상세 페이지 폴더 안에 id.tsx를 만들고 거기에 공고 상세.tsx를 넣으면 페이지 라우터가 제대로 동작하지 않는다.
<Link href={`/noticeInfo?shopId=${item.item.shop.item.id}¬iceId=${item.item.id}`} >
-> 해결: 공고 상세 페이지에 하위 폴더를 두지 않고, pages에 공고 상세.tsx를 만들어 shopId, noticeId를 router.query로 받아 이슈를 해결했다.
const router = useRouter();
const { noticeId, shopId } = router.query;
나의 목표: 소외되는 사람없이 팀원들이 함께 성장한다. / 기능 분할 설계를 잘한다. / 프로젝트를 잘 마무리해서 회식하기
팀장은 여러 부분을 챙겨야 한다. 솔선수범해야하고, 부드럽게 얘기하면서도 바로 잡아야 할 부분은 명확하게 얘기해야한다. 팀원들의 상황과 진행상황 관리의 균형을 맞추는 것도 중요하다. 팀 내 문제를 빨리 파악하고 해결해야 작업을 효율적으로 진행할 수 있다.
이런 상황에서 내가 이번에 가장 중점을 둔 것은 프로젝트의 완성보단 작업 측면에서 소외되는 팀원없이 함께 성장하는 것이었다. 함께 성장하는 것에 중점을 두니 서로를 더 돕게 되고, 마무리도 잘 할 수 있었다.
이런 결과를 얻을 수 있었던 이유는 서로의 상황을 존중하고, 어려움을 공유하면 돕는 따뜻한 팀원들이 있었기 때문이다. 우리 팀원들 정말 고생많았다💗💗💗💗💗
고생많으셨습니다~ 멋지네요!