Skip to content

Commit

Permalink
feat: 공통 header 기능 개발 및 layout 컴포넌트 리팩토링 (#54)
Browse files Browse the repository at this point in the history
* refactor(shared): useLayout hook 을 usePageType hook 으로 변경

* refactor(shared): layout 컴포넌트에서 appType 을 prop 으로 받도록 수정

* feat(shared): headerTitle 상수 추가

* refactor(shared): pageType 에서 headerType 제거

* refactor(shared): getHeaderType 및 getHeaderTitle 함수 로직 변경

* remove(shared): header 관련 Prop 제거

* refactor(shared): useBottomNavBar hook 리팩토링

* feat(shared): defaultHeader custom hook 개발

* feat(shared): detailHeader custom hook 개발

* feat(shared): searchHeader 개발

* fix(shared): useHeader hook 에서는 headerType 상태만 관리하도록 변경

* fix(shared): packages/shared import 경로 수정

* refactor(shelter): 보호소 앱 router 리팩토링

* refactor(volunteer): 봉사자 앱 router 리팩토링

* refactor(shared): shared layout 관련 로직에서 appType, pageType 상수를 적극적으로 사용하도록 수정

* fix(shared): 누락된 봉사자 앱 설정 페이지 추가

* chore(shared): shared 에 zustand 의존성 추가

* feat(shared): searchHeader store 기능 개발

* feat(shared): searchHeader 컴포넌트 onChange, onSubmit 이벤트와 search header store  연결

* fix(shared): bottomNavBar 함수이름 오타 수정

* fix(shelter): 보호동물 수정 페이지 id 오타 수정

* feat(shared): optionMenu 컴포넌트 개발

* feat(shared): detail header store 기능 추가

* refactor(shared): searchHeaderStore 이름 변경

* fix(shared): optionMenuProps 의 children 중복 definition 제거

* refactor(shared): searchHeader 의 handleChangeKeyword 함수 리팩토링

* refactor(shared): detailHeaderStore 에 DeleteFunction 타입 추가

* refactor(shared): searchHeaderStore 에 SearchFunction 타입 추가

* refactor(shelter): animalsSearchPage 디렉토리 이름 수정

* feat(shared): searchHeaderStore 와 SearchPage 연결

* feat(shared): detailHeaderStore 와 DetailPage 연결
  • Loading branch information
kutta97 authored Nov 8, 2023
1 parent 7c8f658 commit 6cc7128
Show file tree
Hide file tree
Showing 32 changed files with 721 additions and 377 deletions.
18 changes: 18 additions & 0 deletions apps/shelter/src/pages/animals/detail/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
import { useEffect } from 'react';
import useDetailHeaderStore from 'shared/store/detailHeaderStore';

const handleDeletePost = (postId: number) => {
// TODO: AnimalPost delete API 호출
console.log('[Delete Animal] postId:', postId);
};

export default function AnimalsDetailPage() {
const setOnDelete = useDetailHeaderStore((state) => state.setOnDelete);

useEffect(() => {
setOnDelete(handleDeletePost);

return () => {
setOnDelete(() => {});
};
}, [setOnDelete]);

return <h1>AnimalsDetailPage</h1>;
}
21 changes: 21 additions & 0 deletions apps/shelter/src/pages/animals/search/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { useEffect } from 'react';
import useSearchHeaderStore from 'shared/store/searchHeaderStore';

const handleSearchkeyword = (keyword: string) => {
// TODO: AnimalList 검색 API 호출
console.log('[Search Animal] - keyword:', keyword);
};

export default function AnimalsSearchPage() {
const setOnSearch = useSearchHeaderStore((state) => state.setOnSearch);

useEffect(() => {
setOnSearch(handleSearchkeyword);

return () => {
setOnSearch(() => {});
};
}, [setOnSearch]);

return <h1>AnimalsSearchPage</h1>;
}
3 changes: 0 additions & 3 deletions apps/shelter/src/pages/animals/searchPage/index.tsx

This file was deleted.

18 changes: 18 additions & 0 deletions apps/shelter/src/pages/volunteers/detail/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
import { useEffect } from 'react';
import useDetailHeaderStore from 'shared/store/detailHeaderStore';

const handleDeletePost = (postId: number) => {
// TODO: VolunteerPost delete API 호출
console.log('[Delete Volunteer] postId:', postId);
};

export default function VolunteersDetailPage() {
const setOnDelete = useDetailHeaderStore((state) => state.setOnDelete);

useEffect(() => {
setOnDelete(handleDeletePost);

return () => {
setOnDelete(() => {});
};
}, [setOnDelete]);

return <h1>VolunteersDetailPage</h1>;
}
18 changes: 18 additions & 0 deletions apps/shelter/src/pages/volunteers/search/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
import { useEffect } from 'react';
import useSearchHeaderStore from 'shared/store/searchHeaderStore';

const handleSearchkeyword = (keyword: string) => {
// TODO: VolunteerList 검색 API 호출
console.log('[Search Volunteer] keyword:', keyword);
};

export default function VolunteersSearchPage() {
const setOnSearch = useSearchHeaderStore((state) => state.setOnSearch);

useEffect(() => {
setOnSearch(handleSearchkeyword);

return () => {
setOnSearch(() => {});
};
}, [setOnSearch]);

return <h1>VolunteersSearchPage</h1>;
}
53 changes: 28 additions & 25 deletions apps/shelter/src/routes/index.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
import { createBrowserRouter, RouterProviderProps } from 'react-router-dom';
import APP_TYPE from 'shared/constants/appType';
import PAGE_TYPE from 'shared/constants/pageType';
import Layout from 'shared/layout';

import PATH from '@/constants/path';
import AnimalsPage from '@/pages/animals';
import AnimalsDetailPage from '@/pages/animals/detail';
import AnimalsSearchPage from '@/pages/animals/searchPage';
import AnimalsSearchPage from '@/pages/animals/search';
import AnimalsUpdatePage from '@/pages/animals/update';
import AnimalsWritePage from '@/pages/animals/write';
import ChattingsPage from '@/pages/chattings';
import ChattingsRoomPage from '@/pages/chattings/room';
import ManageApplyPage from '@/pages/manage/apply';
import ManageAttendancePage from '@/pages/manage/attendance';
import MyPage from '@/pages/my';
import MyReviewsPage from '@/pages/my/reviews';
Expand All @@ -28,39 +31,39 @@ import VolunteersWritePage from '@/pages/volunteers/write';
export const router: RouterProviderProps['router'] = createBrowserRouter([
{
path: '/',
element: <Layout />,
element: <Layout appType={APP_TYPE.SHELTER_APP} />,
errorElement: <NotFoundPage />,
children: [
{
path: PATH.VOLUNTEERS.INDEX,
children: [
{
id: `SHELTER_APP:VOLUNTEERS`,
id: PAGE_TYPE.VOLUNTEERS,
index: true,
element: <VolunteersPage />,
},
{
id: 'SHELTER_APP:VOLUNTEERS_DETAIL',
id: PAGE_TYPE.VOLUNTEERS_DETAIL,
path: PATH.VOLUNTEERS.DETAIL,
element: <VolunteersDetailPage />,
},
{
id: 'SHELTER_APP:VOLUNTEERS_PROFILE',
id: PAGE_TYPE.VOLUNTEERS_PROFILE,
path: PATH.VOLUNTEERS.PROFILE,
element: <VolunteersProfilePage />,
},
{
id: 'SHELTER_APP:VOLUNTEERS_SEARCH',
id: PAGE_TYPE.VOLUNTEERS_SEARCH,
path: PATH.VOLUNTEERS.SEARCH,
element: <VolunteersSearchPage />,
},
{
id: 'SHELTER_APP:VOLUNTEERS_WRITE',
id: PAGE_TYPE.VOLUNTEERS_WRITE,
path: PATH.VOLUNTEERS.WRITE,
element: <VolunteersWritePage />,
},
{
id: 'SHELTER_APP:VOLUNTEERS_UPDATE',
id: PAGE_TYPE.VOLUNTEERS_UPDATE,
path: PATH.VOLUNTEERS.UPDATE,
element: <VolunteersUpdatePage />,
},
Expand All @@ -70,27 +73,27 @@ export const router: RouterProviderProps['router'] = createBrowserRouter([
path: PATH.ANIMALS.INDEX,
children: [
{
id: 'SHELTER_APP:ANIMALS',
id: PAGE_TYPE.ANIMALS,
index: true,
element: <AnimalsPage />,
},
{
id: 'SHELTER_APP:ANIMALS_DETAIL',
id: PAGE_TYPE.ANIMALS_DETAIL,
path: PATH.ANIMALS.DETAIL,
element: <AnimalsDetailPage />,
},
{
id: 'SHELTER_APP:ANIMALS_SEARCH',
id: PAGE_TYPE.ANIMALS_SEARCH,
path: PATH.ANIMALS.SEARCH,
element: <AnimalsSearchPage />,
},
{
id: 'SHELTER_APP:ANIMALS_WRITE',
id: PAGE_TYPE.ANIMALS_WRITE,
path: PATH.ANIMALS.WRITE,
element: <AnimalsWritePage />,
},
{
id: 'SHELTER_APP:ANIMALS_UPDATE',
id: PAGE_TYPE.ANIMALS_UPDATE,
path: PATH.ANIMALS.UPDATE,
element: <AnimalsUpdatePage />,
},
Expand All @@ -100,12 +103,12 @@ export const router: RouterProviderProps['router'] = createBrowserRouter([
path: PATH.CHATTINGS.INDEX,
children: [
{
id: 'SHELTER_APP:CHATTINGS',
id: PAGE_TYPE.CHATTINGS,
index: true,
element: <ChattingsPage />,
},
{
id: 'SHELTER_APP:CHATTINGS_ROOM',
id: PAGE_TYPE.CHATTINGS_ROOM,
path: PATH.CHATTINGS.ROOM,
element: <ChattingsRoomPage />,
},
Expand All @@ -115,12 +118,12 @@ export const router: RouterProviderProps['router'] = createBrowserRouter([
path: PATH.MYPAGE.INDEX,
children: [
{
id: 'SHELTER_APP:MYPAGE',
id: PAGE_TYPE.MYPAGE,
index: true,
element: <MyPage />,
},
{
id: 'SHELTER_APP:MYPAGE_REVIEWS',
id: PAGE_TYPE.MYPAGE_REVIEWS,
path: PATH.MYPAGE.REVIEWS,
element: <MyReviewsPage />,
},
Expand All @@ -130,12 +133,12 @@ export const router: RouterProviderProps['router'] = createBrowserRouter([
path: PATH.SETTINGS.INDEX,
children: [
{
id: 'SHELTER_APP:SETTINGS_ACCOUNT',
id: PAGE_TYPE.SETTINGS_ACCOUNT,
path: PATH.SETTINGS.ACCOUNT,
element: <SettingsAccountPage />,
},
{
id: 'SHELTER_APP:SETTINGS_PASSWORD',
id: PAGE_TYPE.SETTINGS_PASSWORD,
path: PATH.SETTINGS.PASSWORD,
element: <SettingsPasswordPage />,
},
Expand All @@ -145,29 +148,29 @@ export const router: RouterProviderProps['router'] = createBrowserRouter([
path: PATH.MANAGE.INDEX,
children: [
{
id: 'SHELTER_APP:MANAGE.ATTENDANCE',
id: PAGE_TYPE.MANAGE_ATTENDANCE,
path: PATH.MANAGE.ATTENDANCE,
element: <ManageAttendancePage />,
},
{
id: 'SHELTER_APP:MANAGE.APPLY',
id: PAGE_TYPE.MANAGE_APPLY,
path: PATH.MANAGE.APPLY,
element: <ManageAttendancePage />,
element: <ManageApplyPage />,
},
],
},
{
id: 'SHELTER_APP:NOTIFICATIONS',
id: PAGE_TYPE.NOTIFICATIONS,
path: PATH.NOTIFICATIONS,
element: <NotificationsPage />,
},
{
id: 'SHELTER_APP:SIGNUP',
id: PAGE_TYPE.SIGNUP,
path: PATH.SIGNUP,
element: <SignupPage />,
},
{
id: 'SHELTER_APP:SIGNIN',
id: PAGE_TYPE.SIGNIN,
path: PATH.SIGNIN,
element: <SigninPage />,
},
Expand Down
18 changes: 18 additions & 0 deletions apps/volunteer/src/pages/volunteers/search/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
import { useEffect } from 'react';
import useSearchHeaderStore from 'shared/store/searchHeaderStore';

const handleSearchkeyword = (keyword: string) => {
// TODO: VolunteerList 검색 API 호출
console.log('[Search Volunteer] keyword:', keyword);
};

export default function VolunteersSearchPage() {
const setOnSearch = useSearchHeaderStore((state) => state.setOnSearch);

useEffect(() => {
setOnSearch(handleSearchkeyword);

return () => {
setOnSearch(() => {});
};
}, [setOnSearch]);

return <h1>VolunteersSearchPage</h1>;
}
Loading

0 comments on commit 6cc7128

Please sign in to comment.