Skip to content

Commit 243ee68

Browse files
authored
fix: doc search (#576)
1 parent d9fa7ad commit 243ee68

File tree

2 files changed

+45
-25
lines changed

2 files changed

+45
-25
lines changed

src/components/Search/index.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,15 @@ export default function Search(props: {
4343
disableResponsive?: boolean;
4444
disableExternalSearch?: boolean;
4545
docInfo: { type: string; version: string };
46+
onSubmit?: (query: string) => void;
4647
}) {
47-
const { placeholder, disableResponsive, docInfo, disableExternalSearch } =
48-
props;
48+
const {
49+
placeholder,
50+
disableResponsive,
51+
docInfo,
52+
disableExternalSearch,
53+
onSubmit,
54+
} = props;
4955

5056
const anchorEl = React.useRef<HTMLDivElement>(null);
5157
const inputEl = React.useRef<HTMLInputElement>(null);
@@ -79,6 +85,7 @@ export default function Search(props: {
7985
},
8086
}
8187
);
88+
onSubmit?.(query);
8289
return;
8390
}
8491

src/templates/DocSearchTemplate.tsx

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,8 @@ export default function DocSearchTemplate({
129129
const [docQuery, setDocQuery] = React.useState("");
130130
const [isLoading, setIsLoading] = React.useState(false);
131131
const [results, setResults] = React.useState<any[]>([]);
132-
const [searched, setSearched] = React.useState(false);
133132

134-
const { language } = useI18next();
133+
const { language, navigate } = useI18next();
135134
const location = useLocation();
136135

137136
React.useEffect(() => {
@@ -142,50 +141,63 @@ export default function DocSearchTemplate({
142141
setDocType(type);
143142
setDocVersion(version);
144143
setDocQuery(query);
145-
}, [location.search]);
146144

147-
React.useEffect(() => {
148-
if (docType && docQuery) {
149-
execSearch();
150-
}
151-
}, [docType, docQuery, docVersion]);
145+
execSearch(query, type, version);
146+
}, []);
152147

153148
const realVersionMemo = React.useMemo(() => {
154149
return getSearchIndexVersion(docType, docVersion, language);
155150
}, [docType, docVersion]);
156-
const tidbSearchIndciesMemo = React.useMemo(() => {
157-
return fetchTidbSearchIndcies(language);
158-
}, []);
159151

160-
const execSearch = () => {
161-
// const realVersion = convertStableToRealVersion(docType, docVersion);
162-
// const realVersion = getSearchIndexVersion(docType, docVersion);
152+
const execSearch = (search: string, type: string, version: string) => {
153+
if (!search || !type) {
154+
return;
155+
}
156+
157+
const realVersion = getSearchIndexVersion(type, version, language);
163158
const index = algoliaClient.initIndex(
164-
`${language}-${docType}${realVersionMemo ? `-${realVersionMemo}` : ""}`
159+
`${language}-${type}${realVersion ? `-${realVersion}` : ""}`
165160
);
166161
setIsLoading(true);
167162

168163
index
169-
.search(docQuery, {
164+
.search(search, {
170165
hitsPerPage: 150,
171166
})
172167
.then(({ hits }) => {
173168
setResults(hits);
174-
setSearched(true);
175169
setIsLoading(false);
176170
})
177171
.catch((reason: any) => {
178172
console.error(reason);
179173
setResults([]);
180-
setSearched(true);
181174
setIsLoading(false);
182175
});
183176
};
184177

185-
const handleSelectDocType = (
186-
selected: typeof EN_DOC_TYPE_LIST[number]["match"]
187-
) => {
188-
setDocType(selected);
178+
const handleSelectDocType = (type: string) => {
179+
setDocType(type);
180+
setDocVersion("");
181+
navigate(`/search?type=${type}&q=${docQuery}`, {
182+
state: {
183+
type,
184+
version: "",
185+
query: docQuery,
186+
},
187+
});
188+
execSearch(docQuery, type, "");
189+
};
190+
191+
const handleSelectDocVersion = (version: string) => {
192+
setDocVersion(version);
193+
navigate(`/search?type=${docType}&version=${version}&q=${docQuery}`, {
194+
state: {
195+
type: docType,
196+
version,
197+
query: docQuery,
198+
},
199+
});
200+
execSearch(docQuery, docType, version);
189201
};
190202

191203
const bannerVisible = feature?.banner && language !== Locale.ja;
@@ -214,6 +226,7 @@ export default function DocSearchTemplate({
214226
type: docType,
215227
version: realVersionMemo || "stable",
216228
}}
229+
onSubmit={(query) => execSearch(query, docType, docVersion)}
217230
/>
218231
<Box
219232
sx={{
@@ -286,7 +299,7 @@ export default function DocSearchTemplate({
286299
size="small"
287300
variant="text"
288301
onClick={() => {
289-
setDocVersion(version);
302+
handleSelectDocVersion(version);
290303
}}
291304
sx={(theme) => ({
292305
backgroundColor:

0 commit comments

Comments
 (0)