-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #47 from dnd-side-project/seo
doc: SEO 검색 최적화 작업
- Loading branch information
Showing
8 changed files
with
141 additions
and
78 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
'use client'; | ||
|
||
import { useRouter, useSearchParams } from 'next/navigation'; | ||
import { useCallback } from 'react'; | ||
|
||
import EmptyCase from './components/EmptyCase'; | ||
import FilterSheet from './components/FilterSheet'; | ||
import FilterTab from './components/FilterTab'; | ||
import PhotoList from './components/PhotoList'; | ||
import { usePoseFeedQuery } from '@/apis'; | ||
import { Spacing } from '@/components/Spacing'; | ||
import { URL } from '@/constants/url'; | ||
import useDidMount from '@/hooks/useDidMount'; | ||
import useFilterState from '@/hooks/useFilterState'; | ||
import useIntersect from '@/hooks/useObserver'; | ||
|
||
export default function FeedSection() { | ||
const params = useSearchParams(); | ||
const router = useRouter(); | ||
|
||
const { filterState, updateFilterState } = useFilterState(); | ||
const { data, fetchNextPage, hasNextPage, isLoading } = usePoseFeedQuery(filterState); | ||
|
||
useDidMount(() => { | ||
if (!params.get('filter')) return; | ||
updateFilterState({ | ||
tags: new Array(params.get('filter') || ''), | ||
frameCount: 0, | ||
peopleCount: 0, | ||
}); | ||
router.replace('/feed'); | ||
}); | ||
|
||
const onIntersect = useCallback(async () => { | ||
if (hasNextPage && !isLoading) { | ||
await fetchNextPage(); | ||
} | ||
}, [fetchNextPage, hasNextPage, isLoading]); | ||
|
||
const target = useIntersect(onIntersect); | ||
|
||
return ( | ||
<> | ||
<FilterTab /> | ||
<Spacing size={40} /> | ||
<div className="h-fit overflow-y-scroll"> | ||
{data?.pages[0].recommendation ? ( | ||
<> | ||
<EmptyCase | ||
title={'신비한 포즈를 찾으시는군요!'} | ||
text={'찾고 싶은 포즈를 저희에게 알려주세요.'} | ||
button={'문의사항 남기기'} | ||
path={URL.inquiry} | ||
/> | ||
<h4 className="mb-16">이런 포즈는 어때요?</h4> | ||
<div className="columns-2 py-16"> | ||
{data?.pages.map((page) => ( | ||
<PhotoList | ||
key={page.recommendedContents.number} | ||
data={page.recommendedContents.content} | ||
/> | ||
))} | ||
</div> | ||
</> | ||
) : ( | ||
<div className="columns-2 py-16"> | ||
{data?.pages.map((page) => ( | ||
<PhotoList key={page.filteredContents.number} data={page.filteredContents.content} /> | ||
))} | ||
</div> | ||
)} | ||
<div ref={target} className="h-1" /> | ||
</div> | ||
<FilterSheet /> | ||
</> | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,77 +1,10 @@ | ||
'use client'; | ||
import { Metadata } from 'next'; | ||
import FeedSection from './FeedSection'; | ||
|
||
import { useRouter, useSearchParams } from 'next/navigation'; | ||
import { useCallback } from 'react'; | ||
|
||
import EmptyCase from './components/EmptyCase'; | ||
import FilterSheet from './components/FilterSheet'; | ||
import FilterTab from './components/FilterTab'; | ||
import PhotoList from './components/PhotoList'; | ||
import { usePoseFeedQuery } from '@/apis'; | ||
import { Spacing } from '@/components/Spacing'; | ||
import { URL } from '@/constants/url'; | ||
import useDidMount from '@/hooks/useDidMount'; | ||
import useFilterState from '@/hooks/useFilterState'; | ||
import useIntersect from '@/hooks/useObserver'; | ||
export const metadata: Metadata = { | ||
title: '포즈피드', | ||
}; | ||
|
||
export default function Feed() { | ||
const params = useSearchParams(); | ||
const router = useRouter(); | ||
|
||
const { filterState, updateFilterState } = useFilterState(); | ||
const { data, fetchNextPage, hasNextPage, isLoading } = usePoseFeedQuery(filterState); | ||
|
||
useDidMount(() => { | ||
if (!params.get('filter')) return; | ||
updateFilterState({ | ||
tags: new Array(params.get('filter') || ''), | ||
frameCount: 0, | ||
peopleCount: 0, | ||
}); | ||
router.replace('/feed'); | ||
}); | ||
|
||
const onIntersect = useCallback(async () => { | ||
if (hasNextPage && !isLoading) { | ||
await fetchNextPage(); | ||
} | ||
}, [fetchNextPage, hasNextPage, isLoading]); | ||
|
||
const target = useIntersect(onIntersect); | ||
|
||
return ( | ||
<> | ||
<FilterTab /> | ||
<Spacing size={40} /> | ||
<div className="h-fit overflow-y-scroll"> | ||
{data?.pages[0].recommendation ? ( | ||
<> | ||
<EmptyCase | ||
title={'신비한 포즈를 찾으시는군요!'} | ||
text={'찾고 싶은 포즈를 저희에게 알려주세요.'} | ||
button={'문의사항 남기기'} | ||
path={URL.inquiry} | ||
/> | ||
<h4 className="mb-16">이런 포즈는 어때요?</h4> | ||
<div className="columns-2 py-16"> | ||
{data?.pages.map((page) => ( | ||
<PhotoList | ||
key={page.recommendedContents.number} | ||
data={page.recommendedContents.content} | ||
/> | ||
))} | ||
</div> | ||
</> | ||
) : ( | ||
<div className="columns-2 py-16"> | ||
{data?.pages.map((page) => ( | ||
<PhotoList key={page.filteredContents.number} data={page.filteredContents.content} /> | ||
))} | ||
</div> | ||
)} | ||
<div ref={target} className="h-1" /> | ||
</div> | ||
<FilterSheet /> | ||
</> | ||
); | ||
return <FeedSection />; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
User-Agent: * | ||
Allow: / | ||
|
||
Sitemap: https://www.posepicker.site/sitemap.xml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> | ||
<url> | ||
<loc>https://www.posepicker.site/pick</loc> | ||
<lastmod>2023-09-08T15:55:51+00:00</lastmod> | ||
<priority>1.00</priority> | ||
</url> | ||
<url> | ||
<loc>https://www.posepicker.site/menu</loc> | ||
<lastmod>2023-09-08T15:55:51+00:00</lastmod> | ||
<priority>0.80</priority> | ||
</url> | ||
<url> | ||
<loc>https://www.posepicker.site/talk</loc> | ||
<lastmod>2023-09-08T15:55:51+00:00</lastmod> | ||
<priority>0.80</priority> | ||
</url> | ||
<url> | ||
<loc>https://www.posepicker.site/feed</loc> | ||
<lastmod>2023-09-08T15:55:51+00:00</lastmod> | ||
<priority>0.80</priority> | ||
</url> | ||
<url> | ||
<loc>https://www.posepicker.site/bookmark</loc> | ||
<lastmod>2023-09-08T15:55:51+00:00</lastmod> | ||
<priority>0.80</priority> | ||
</url> | ||
<url> | ||
<loc>https://www.posepicker.site/detail/undefined</loc> | ||
<lastmod>2023-09-08T15:55:51+00:00</lastmod> | ||
<priority>0.64</priority> | ||
</url> | ||
</urlset> |