Initial commit
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
import is from '@sindresorhus/is'
|
||||
import { HttpResponse, http } from 'msw'
|
||||
import { db } from '@db/app-bar-search/db'
|
||||
|
||||
export const handlerAppBarSearch = [
|
||||
// Get Search Items
|
||||
http.get('/api/app-bar/search', ({ request }) => {
|
||||
const url = new URL(request.url)
|
||||
const q = url.searchParams.get('q') ?? ''
|
||||
const searchQuery = is.string(q) ? q : undefined
|
||||
const queryLowered = (searchQuery ?? '').toString().toLowerCase()
|
||||
const filteredSearchData = []
|
||||
|
||||
db.searchItems.forEach(item => {
|
||||
if (item.children) {
|
||||
const matchingChildren = item.children.filter(child => child.title.toLowerCase().includes(queryLowered))
|
||||
if (matchingChildren.length > 0) {
|
||||
const parentCopy = { ...item }
|
||||
if (matchingChildren.length > 5)
|
||||
parentCopy.children = matchingChildren.slice(0, 5)
|
||||
else
|
||||
parentCopy.children = matchingChildren
|
||||
filteredSearchData.push(parentCopy)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// ℹ️ Enable this comment if you want to limit length of search results.
|
||||
// if (filteredSearchData.length > 1) {
|
||||
// filteredSearchData.forEach((item, index) => {
|
||||
// if (item.children.length > 3)
|
||||
// filteredSearchData[index].children.splice(0, 3)
|
||||
// })
|
||||
// }
|
||||
return HttpResponse.json([...filteredSearchData], { status: 200 })
|
||||
}),
|
||||
]
|
||||
Reference in New Issue
Block a user