Browse Source

#206

feature/206
みてるぞ 3 days ago
parent
commit
55dcd4e1f3
5 changed files with 80 additions and 64 deletions
  1. +26
    -20
      frontend/src/lib/prefetchers.ts
  2. +7
    -2
      frontend/src/pages/posts/PostListPage.tsx
  3. +27
    -27
      frontend/src/pages/posts/PostSearchPage.tsx
  4. +7
    -2
      frontend/src/pages/wiki/WikiDetailPage.tsx
  5. +13
    -13
      frontend/src/types.ts

+ 26
- 20
frontend/src/lib/prefetchers.ts View File

@@ -61,7 +61,20 @@ const prefetchWikiPageShow: Prefetcher = async (qc, url) => {
if (version)
return

const p = { tags: effectiveTitle, match: 'all', page: 1, limit: 8 } as const
const p = {
tags: effectiveTitle,
match: 'all',
page: 1,
limit: 8,
url: '',
title: '',
originalCreatedFrom: '',
originalCreatedTo: '',
createdFrom: '',
createdTo: '',
updatedFrom: '',
updatedTo: '',
order: 'original_created_at:desc' } as const
await qc.prefetchQuery ({
queryKey: postsKeys.index (p),
queryFn: () => fetchPosts (p) })
@@ -70,30 +83,23 @@ const prefetchWikiPageShow: Prefetcher = async (qc, url) => {

const prefetchPostsIndex: Prefetcher = async (qc, url) => {
const tags = url.searchParams.get ('tags') ?? ''
const qURL = url.searchParams.get ('url')
const title = url.searchParams.get ('title')
const originalCreatedFrom = url.searchParams.get ('original_created_from')
const originalCreatedTo = url.searchParams.get ('original_created_to')
const createdFrom = url.searchParams.get ('created_from')
const createdTo = url.searchParams.get ('created_to')
const updatedFrom = url.searchParams.get ('updated_from')
const updatedTo = url.searchParams.get ('updated_to')
const qURL = url.searchParams.get ('url') ?? ''
const title = url.searchParams.get ('title') ?? ''
const originalCreatedFrom = url.searchParams.get ('original_created_from') ?? ''
const originalCreatedTo = url.searchParams.get ('original_created_to') ?? ''
const createdFrom = url.searchParams.get ('created_from') ?? ''
const createdTo = url.searchParams.get ('created_to') ?? ''
const updatedFrom = url.searchParams.get ('updated_from') ?? ''
const updatedTo = url.searchParams.get ('updated_to') ?? ''
const m: 'all' | 'any' = url.searchParams.get ('match') === 'any' ? 'any' : 'all'
const page = Number (url.searchParams.get ('page') || 1)
const limit = Number (url.searchParams.get ('limit') || 20)
const order = url.searchParams.get ('order') as FetchPostsOrder | null
const order = (url.searchParams.get ('order') ?? 'original_created_at:desc') as FetchPostsOrder

const keys = {
tags, match: m, page, limit,
...(qURL && { url: qURL }),
...(title && { title }),
...(originalCreatedFrom && { originalCreatedFrom }),
...(originalCreatedTo && { originalCreatedTo }),
...(createdFrom && { createdFrom }),
...(createdTo && { createdTo }),
...(updatedFrom && { updatedFrom }),
...(updatedTo && { updatedTo }),
...(order && { order }) }
tags, match: m, page, limit, url: qURL, title,
originalCreatedFrom, originalCreatedTo, createdFrom, createdTo,
updatedFrom, updatedTo, order }

await qc.prefetchQuery ({
queryKey: postsKeys.index (keys),


+ 7
- 2
frontend/src/pages/posts/PostListPage.tsx View File

@@ -35,9 +35,14 @@ export default (() => {
const page = Number (query.get ('page') ?? 1)
const limit = Number (query.get ('limit') ?? 20)

const keys = {
tags: tagsKey, match, page, limit,
url: '', title: '', originalCreatedFrom: '', originalCreatedTo: '',
createdFrom: '', createdTo: '', updatedFrom: '', updatedTo: '',
order: 'original_created_at:desc' } as const
const { data, isLoading: loading } = useQuery ({
queryKey: postsKeys.index ({ tags: tagsKey, match, page, limit }),
queryFn: () => fetchPosts ({ tags: tagsKey, match, page, limit }) })
queryKey: postsKeys.index (keys),
queryFn: () => fetchPosts (keys) })
const posts = data?.posts ?? []
const cursor = ''
const totalPages = data ? Math.ceil (data.count / limit) : 0


+ 27
- 27
frontend/src/pages/posts/PostSearchPage.tsx View File

@@ -44,43 +44,43 @@ export default (() => {
const page = Number (query.get ('page') ?? 1)
const limit = Number (query.get ('limit') ?? 20)

const qURL = query.get ('url')
const qTitle = query.get ('title')
const qURL = query.get ('url') ?? ''
const qTitle = query.get ('title') ?? ''
const qTags = query.get ('tags') ?? ''
const qMatch: 'all' | 'any' = query.get ('match') === 'any' ? 'any' : 'all'
const qOriginalCreatedFrom = query.get ('original_created_from')
const qOriginalCreatedTo = query.get ('original_created_to')
const qCreatedFrom = query.get ('created_from')
const qCreatedTo = query.get ('created_to')
const qUpdatedFrom = query.get ('updated_from')
const qUpdatedTo = query.get ('updated_to')
const qOriginalCreatedFrom = query.get ('original_created_from') ?? ''
const qOriginalCreatedTo = query.get ('original_created_to') ?? ''
const qCreatedFrom = query.get ('created_from') ?? ''
const qCreatedTo = query.get ('created_to') ?? ''
const qUpdatedFrom = query.get ('updated_from') ?? ''
const qUpdatedTo = query.get ('updated_to') ?? ''
const order = (query.get ('order') || 'original_created_at:desc') as FetchPostsOrder

const [activeIndex, setActiveIndex] = useState (-1)
const [createdFrom, setCreatedFrom] = useState (qCreatedFrom)
const [createdTo, setCreatedTo] = useState (qCreatedTo)
const [matchType, setMatchType] = useState (qMatch ?? 'all')
const [originalCreatedFrom, setOriginalCreatedFrom] = useState (qOriginalCreatedFrom)
const [originalCreatedTo, setOriginalCreatedTo] = useState (qOriginalCreatedTo)
const [createdFrom, setCreatedFrom] = useState<string | null> (null)
const [createdTo, setCreatedTo] = useState<string | null> (null)
const [matchType, setMatchType] = useState<'all' | 'any'> ('all')
const [originalCreatedFrom, setOriginalCreatedFrom] = useState<string | null> (null)
const [originalCreatedTo, setOriginalCreatedTo] = useState<string | null> (null)
const [suggestions, setSuggestions] = useState<Tag[]> ([])
const [suggestionsVsbl, setSuggestionsVsbl] = useState (false)
const [tagsStr, setTagsStr] = useState (qTags)
const [title, setTitle] = useState (qTitle ?? '')
const [updatedFrom, setUpdatedFrom] = useState (qUpdatedFrom)
const [updatedTo, setUpdatedTo] = useState (qUpdatedTo)
const [url, setURL] = useState (qURL ?? '')
const [tagsStr, setTagsStr] = useState ('')
const [title, setTitle] = useState ('')
const [updatedFrom, setUpdatedFrom] = useState<string | null> (null)
const [updatedTo, setUpdatedTo] = useState<string | null> (null)
const [url, setURL] = useState ('')

const keys: FetchPostsParams = {
tags: qTags, match: qMatch, page, limit,
...(qURL && { url: qURL }),
...(qTitle && { title: qTitle }),
...(qOriginalCreatedFrom && { originalCreatedFrom: qOriginalCreatedFrom }),
...(qOriginalCreatedTo && { originalCreatedTo: qOriginalCreatedTo }),
...(qCreatedFrom && { createdFrom: qCreatedFrom }),
...(qCreatedTo && { createdTo: qCreatedTo }),
...(qUpdatedFrom && { updatedFrom: qUpdatedFrom }),
...(qUpdatedTo && { updatedTo: qUpdatedTo }),
...(order && { order }) }
url: qURL,
title: qTitle,
originalCreatedFrom: qOriginalCreatedFrom,
originalCreatedTo: qOriginalCreatedTo,
createdFrom: qCreatedFrom,
createdTo: qCreatedTo,
updatedFrom: qUpdatedFrom,
updatedTo: qUpdatedTo,
order }
const { data, isLoading: loading } = useQuery ({
queryKey: postsKeys.index (keys),
queryFn: () => fetchPosts (keys) })


+ 7
- 2
frontend/src/pages/wiki/WikiDetailPage.tsx View File

@@ -44,10 +44,15 @@ export default () => {
queryKey: tagsKeys.show (effectiveTitle),
queryFn: () => fetchTagByName (effectiveTitle) })

const keys = {
tags: effectiveTitle, match: 'all', page: 1, limit: 8, url: '', title: '',
originalCreatedFrom: '', originalCreatedTo: '',
createdFrom: '', createdTo: '', updatedFrom: '', updatedTo: '',
order: 'original_created_at:desc' } as const
const { data } = useQuery ({
enabled: Boolean (effectiveTitle) && !(version),
queryKey: postsKeys.index ({ tags: effectiveTitle, match: 'all', page: 1, limit: 8 }),
queryFn: () => fetchPosts ({ tags: effectiveTitle, match: 'all', page: 1, limit: 8 }) })
queryKey: postsKeys.index (keys),
queryFn: () => fetchPosts (keys) })
const posts = data?.posts || []

useEffect (() => {


+ 13
- 13
frontend/src/types.ts View File

@@ -12,19 +12,19 @@ export type FetchPostsOrder = `${ FetchPostsOrderField }:${ 'asc' | 'desc' }`
export type FetchPostsOrderField = typeof FETCH_POSTS_ORDER_FIELDS[number]

export type FetchPostsParams = {
url?: string
title?: string
tags?: string
match?: 'all' | 'any'
createdFrom?: string
createdTo?: string
updatedFrom?: string
updatedTo?: string
originalCreatedFrom?: string
originalCreatedTo?: string
page?: number
limit?: number
order?: FetchPostsOrder }
url: string
title: string
tags: string
match: 'all' | 'any'
originalCreatedFrom: string
originalCreatedTo: string
createdFrom: string
createdTo: string
updatedFrom: string
updatedTo: string
page: number
limit: number
order: FetchPostsOrder }

export type Menu = MenuItem[]



Loading…
Cancel
Save