This commit is contained in:
2026-03-02 23:29:22 +09:00
parent 1e54fb5be4
commit 55dcd4e1f3
5 changed files with 80 additions and 64 deletions
+26 -20
View File
@@ -61,7 +61,20 @@ const prefetchWikiPageShow: Prefetcher = async (qc, url) => {
if (version) if (version)
return 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 ({ await qc.prefetchQuery ({
queryKey: postsKeys.index (p), queryKey: postsKeys.index (p),
queryFn: () => fetchPosts (p) }) queryFn: () => fetchPosts (p) })
@@ -70,30 +83,23 @@ const prefetchWikiPageShow: Prefetcher = async (qc, url) => {
const prefetchPostsIndex: Prefetcher = async (qc, url) => { const prefetchPostsIndex: Prefetcher = async (qc, url) => {
const tags = url.searchParams.get ('tags') ?? '' const tags = url.searchParams.get ('tags') ?? ''
const qURL = url.searchParams.get ('url') const qURL = url.searchParams.get ('url') ?? ''
const title = url.searchParams.get ('title') const title = url.searchParams.get ('title') ?? ''
const originalCreatedFrom = url.searchParams.get ('original_created_from') const originalCreatedFrom = url.searchParams.get ('original_created_from') ?? ''
const originalCreatedTo = url.searchParams.get ('original_created_to') const originalCreatedTo = url.searchParams.get ('original_created_to') ?? ''
const createdFrom = url.searchParams.get ('created_from') const createdFrom = url.searchParams.get ('created_from') ?? ''
const createdTo = url.searchParams.get ('created_to') const createdTo = url.searchParams.get ('created_to') ?? ''
const updatedFrom = url.searchParams.get ('updated_from') const updatedFrom = url.searchParams.get ('updated_from') ?? ''
const updatedTo = url.searchParams.get ('updated_to') const updatedTo = url.searchParams.get ('updated_to') ?? ''
const m: 'all' | 'any' = url.searchParams.get ('match') === 'any' ? 'any' : 'all' const m: 'all' | 'any' = url.searchParams.get ('match') === 'any' ? 'any' : 'all'
const page = Number (url.searchParams.get ('page') || 1) const page = Number (url.searchParams.get ('page') || 1)
const limit = Number (url.searchParams.get ('limit') || 20) 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 = { const keys = {
tags, match: m, page, limit, tags, match: m, page, limit, url: qURL, title,
...(qURL && { url: qURL }), originalCreatedFrom, originalCreatedTo, createdFrom, createdTo,
...(title && { title }), updatedFrom, updatedTo, order }
...(originalCreatedFrom && { originalCreatedFrom }),
...(originalCreatedTo && { originalCreatedTo }),
...(createdFrom && { createdFrom }),
...(createdTo && { createdTo }),
...(updatedFrom && { updatedFrom }),
...(updatedTo && { updatedTo }),
...(order && { order }) }
await qc.prefetchQuery ({ await qc.prefetchQuery ({
queryKey: postsKeys.index (keys), queryKey: postsKeys.index (keys),
+7 -2
View File
@@ -35,9 +35,14 @@ export default (() => {
const page = Number (query.get ('page') ?? 1) const page = Number (query.get ('page') ?? 1)
const limit = Number (query.get ('limit') ?? 20) 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 ({ const { data, isLoading: loading } = useQuery ({
queryKey: postsKeys.index ({ tags: tagsKey, match, page, limit }), queryKey: postsKeys.index (keys),
queryFn: () => fetchPosts ({ tags: tagsKey, match, page, limit }) }) queryFn: () => fetchPosts (keys) })
const posts = data?.posts ?? [] const posts = data?.posts ?? []
const cursor = '' const cursor = ''
const totalPages = data ? Math.ceil (data.count / limit) : 0 const totalPages = data ? Math.ceil (data.count / limit) : 0
+27 -27
View File
@@ -44,43 +44,43 @@ export default (() => {
const page = Number (query.get ('page') ?? 1) const page = Number (query.get ('page') ?? 1)
const limit = Number (query.get ('limit') ?? 20) const limit = Number (query.get ('limit') ?? 20)
const qURL = query.get ('url') const qURL = query.get ('url') ?? ''
const qTitle = query.get ('title') const qTitle = query.get ('title') ?? ''
const qTags = query.get ('tags') ?? '' const qTags = query.get ('tags') ?? ''
const qMatch: 'all' | 'any' = query.get ('match') === 'any' ? 'any' : 'all' const qMatch: 'all' | 'any' = query.get ('match') === 'any' ? 'any' : 'all'
const qOriginalCreatedFrom = query.get ('original_created_from') const qOriginalCreatedFrom = query.get ('original_created_from') ?? ''
const qOriginalCreatedTo = query.get ('original_created_to') const qOriginalCreatedTo = query.get ('original_created_to') ?? ''
const qCreatedFrom = query.get ('created_from') const qCreatedFrom = query.get ('created_from') ?? ''
const qCreatedTo = query.get ('created_to') const qCreatedTo = query.get ('created_to') ?? ''
const qUpdatedFrom = query.get ('updated_from') const qUpdatedFrom = query.get ('updated_from') ?? ''
const qUpdatedTo = query.get ('updated_to') const qUpdatedTo = query.get ('updated_to') ?? ''
const order = (query.get ('order') || 'original_created_at:desc') as FetchPostsOrder const order = (query.get ('order') || 'original_created_at:desc') as FetchPostsOrder
const [activeIndex, setActiveIndex] = useState (-1) const [activeIndex, setActiveIndex] = useState (-1)
const [createdFrom, setCreatedFrom] = useState (qCreatedFrom) const [createdFrom, setCreatedFrom] = useState<string | null> (null)
const [createdTo, setCreatedTo] = useState (qCreatedTo) const [createdTo, setCreatedTo] = useState<string | null> (null)
const [matchType, setMatchType] = useState (qMatch ?? 'all') const [matchType, setMatchType] = useState<'all' | 'any'> ('all')
const [originalCreatedFrom, setOriginalCreatedFrom] = useState (qOriginalCreatedFrom) const [originalCreatedFrom, setOriginalCreatedFrom] = useState<string | null> (null)
const [originalCreatedTo, setOriginalCreatedTo] = useState (qOriginalCreatedTo) const [originalCreatedTo, setOriginalCreatedTo] = useState<string | null> (null)
const [suggestions, setSuggestions] = useState<Tag[]> ([]) const [suggestions, setSuggestions] = useState<Tag[]> ([])
const [suggestionsVsbl, setSuggestionsVsbl] = useState (false) const [suggestionsVsbl, setSuggestionsVsbl] = useState (false)
const [tagsStr, setTagsStr] = useState (qTags) const [tagsStr, setTagsStr] = useState ('')
const [title, setTitle] = useState (qTitle ?? '') const [title, setTitle] = useState ('')
const [updatedFrom, setUpdatedFrom] = useState (qUpdatedFrom) const [updatedFrom, setUpdatedFrom] = useState<string | null> (null)
const [updatedTo, setUpdatedTo] = useState (qUpdatedTo) const [updatedTo, setUpdatedTo] = useState<string | null> (null)
const [url, setURL] = useState (qURL ?? '') const [url, setURL] = useState ('')
const keys: FetchPostsParams = { const keys: FetchPostsParams = {
tags: qTags, match: qMatch, page, limit, tags: qTags, match: qMatch, page, limit,
...(qURL && { url: qURL }), url: qURL,
...(qTitle && { title: qTitle }), title: qTitle,
...(qOriginalCreatedFrom && { originalCreatedFrom: qOriginalCreatedFrom }), originalCreatedFrom: qOriginalCreatedFrom,
...(qOriginalCreatedTo && { originalCreatedTo: qOriginalCreatedTo }), originalCreatedTo: qOriginalCreatedTo,
...(qCreatedFrom && { createdFrom: qCreatedFrom }), createdFrom: qCreatedFrom,
...(qCreatedTo && { createdTo: qCreatedTo }), createdTo: qCreatedTo,
...(qUpdatedFrom && { updatedFrom: qUpdatedFrom }), updatedFrom: qUpdatedFrom,
...(qUpdatedTo && { updatedTo: qUpdatedTo }), updatedTo: qUpdatedTo,
...(order && { order }) } order }
const { data, isLoading: loading } = useQuery ({ const { data, isLoading: loading } = useQuery ({
queryKey: postsKeys.index (keys), queryKey: postsKeys.index (keys),
queryFn: () => fetchPosts (keys) }) queryFn: () => fetchPosts (keys) })
+7 -2
View File
@@ -44,10 +44,15 @@ export default () => {
queryKey: tagsKeys.show (effectiveTitle), queryKey: tagsKeys.show (effectiveTitle),
queryFn: () => fetchTagByName (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 ({ const { data } = useQuery ({
enabled: Boolean (effectiveTitle) && !(version), enabled: Boolean (effectiveTitle) && !(version),
queryKey: postsKeys.index ({ tags: effectiveTitle, match: 'all', page: 1, limit: 8 }), queryKey: postsKeys.index (keys),
queryFn: () => fetchPosts ({ tags: effectiveTitle, match: 'all', page: 1, limit: 8 }) }) queryFn: () => fetchPosts (keys) })
const posts = data?.posts || [] const posts = data?.posts || []
useEffect (() => { useEffect (() => {
+13 -13
View File
@@ -12,19 +12,19 @@ export type FetchPostsOrder = `${ FetchPostsOrderField }:${ 'asc' | 'desc' }`
export type FetchPostsOrderField = typeof FETCH_POSTS_ORDER_FIELDS[number] export type FetchPostsOrderField = typeof FETCH_POSTS_ORDER_FIELDS[number]
export type FetchPostsParams = { export type FetchPostsParams = {
url?: string url: string
title?: string title: string
tags?: string tags: string
match?: 'all' | 'any' match: 'all' | 'any'
createdFrom?: string originalCreatedFrom: string
createdTo?: string originalCreatedTo: string
updatedFrom?: string createdFrom: string
updatedTo?: string createdTo: string
originalCreatedFrom?: string updatedFrom: string
originalCreatedTo?: string updatedTo: string
page?: number page: number
limit?: number limit: number
order?: FetchPostsOrder } order: FetchPostsOrder }
export type Menu = MenuItem[] export type Menu = MenuItem[]