search.ts•3.31 kB
const DOC_SITE_SEARCH_URL =
'https://docportal.shengwang.cn/api/open-api/muti-search'
const PAYLOAD = {
types: ['docs', 'api_docs', 'faq'],
q: '',
page: 1,
hitsPerPage: 5,
filter: [
[
'product = rtc',
'product = rtm2',
'product = fusion-cdn',
'product = rtsa',
'product = flexible-classroom',
'product = iot-apaas',
'product = recording',
'product = rtc-server-sdk',
'product = media-push',
'product = media-pull',
'product = whiteboard',
'product = analytics',
'product = status-page',
'product = conversion-ppt',
'product = console',
'product = cloud-recording',
'product = meeting',
'product = cloud-transcoder',
'product = marketplace',
'product = sdk-extension',
'product = chatroom',
'product = showroom',
'product = one-to-one-live',
'product = game-voice',
'product = convoai',
'product = smart-doorbell',
'product = smart-watch',
'product = online-ktv',
'product = smart-camera',
'product = teleoperation',
'product = toybox',
'product = art-class',
'product = online-music-class',
'product = one-to-one-classroom',
'product = small-classroom',
'product = breakout-classroom',
'product = digital-learning',
'product = danmaku',
],
[
'platform = general',
'platform = android',
'platform = ios',
'platform = macos',
'platform = javascript',
'platform = windows',
'platform = harmonyos',
'platform = csharp',
'platform = cpp',
'platform = c',
'platform = java',
'platform = react',
'platform = device-c',
'platform = electron',
'platform = unity',
'platform = flutter',
'platform = rn',
'platform = unreal-cpp',
'platform = unreal-blueprint',
'platform = mini-program',
'platform = iot',
'platform = restful',
],
],
sort: ['productSeq:asc', 'platformSeq:asc', 'typeSeq:asc'],
}
const parseMultiSearchResponse = (result: any) => {
const results = []
// docs
const defalutDocs = result?.docs?.hits || []
const defaultDocsHits = defalutDocs.map((item: any) => {
return {
text: item.text,
category: 'default',
uri: `docs://${'default/' + item.path}`,
}
})
results.push(...defaultDocsHits)
// api_docs
const apiDocs = result?.api_docs?.hits || []
const apiDocsHits = apiDocs.map((item: any) => {
return {
text: item.desc,
category: 'api-reference',
uri: `docs://${'api-reference/' + item.path}`,
}
})
results.push(...apiDocsHits)
// faq
const faqs = result?.faq?.hits || []
const faqHits = faqs.map((item: any) => {
return {
text: item.text,
category: 'faq',
uri: `docs://${'faq/' + item.path}`,
}
})
results.push(...faqHits)
return results
}
export const postMultiSearch = async (query: string) => {
const payload = { ...PAYLOAD, q: query }
const response = await fetch(DOC_SITE_SEARCH_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
})
const data = await response.json()
return parseMultiSearchResponse(data)
}