Compare commits

...

21 Commits

Author SHA1 Message Date
Claire Chabas 8994442c08 logging 2025-01-13 20:18:28 +01:00
Claire Chabas 6fcf25f030 clean 2025-01-13 19:54:50 +01:00
Claire Chabas d4257ba5f0 clean 2025-01-13 19:44:04 +01:00
Claire Chabas bc9a8146ac test reverting something 2025-01-13 18:43:12 +01:00
Claire Chabas dc42009a40 add logs 2025-01-13 18:25:24 +01:00
Claire Chabas 000ed7772a testing 2025-01-13 18:03:27 +01:00
Claire Chabas d2fa610799 testing 2025-01-13 17:19:30 +01:00
Claire Chabas 959f499b88 testing 2025-01-13 17:02:21 +01:00
Claire Chabas d25e5f7152 testing 2025-01-13 16:53:10 +01:00
Claire Chabas 2c22282481 testing fetching only site space results 2025-01-13 16:38:18 +01:00
Claire Chabas 2b93ea0f10 narrowing 2025-01-13 16:32:47 +01:00
Claire Chabas 9b31090a2a testing 2025-01-13 16:26:55 +01:00
Claire Chabas c6c3f00e5d testing 2025-01-13 16:16:36 +01:00
Claire Chabas f66b402222 add trackEvent to deps array 2025-01-13 16:04:12 +01:00
Claire Chabas ff27056b9b testing 2025-01-13 15:57:00 +01:00
Claire Chabas 324920cb26 adding logs 2025-01-13 15:43:03 +01:00
Claire Chabas 2f4b4e4628 adding logs 2025-01-13 15:42:14 +01:00
Claire Chabas aaf37599d9 checking csp nonce 2025-01-13 15:32:35 +01:00
Claire Chabas 5644e44e8d isolating fetching logic 2025-01-13 15:22:19 +01:00
Claire Chabas bb66784fc3 Merge branch 'main' into claire/fix-infinite-search-results-rerendering-in-va-sites
* main:
  Start using tint in more places: TOC and PageAside (#2733)
  Downgrade to Next.js v14 (#2732)
2025-01-13 15:04:51 +01:00
Claire Chabas 2b88f09917 test timemout as ref 2025-01-13 13:56:11 +01:00
2 changed files with 37 additions and 26 deletions
+1
View File
@@ -24,6 +24,7 @@ export interface PageIdParams {
*/
export async function fetchContentData() {
const content = await getSiteContentPointer();
console.log('fetchContentData', {content});
const [{ space, contentTarget, pages }, { customization, site, sections, spaces, scripts }] =
await Promise.all([
@@ -54,33 +54,37 @@ export const SearchResults = React.forwardRef(function SearchResults(
const language = useLanguage();
const trackEvent = useTrackEvent();
const [resultsState, setResultsState] = React.useState<{
results: ResultType[];
fetching: boolean;
}>({ results: [], fetching: true });
const debounceTimeout = React.useRef<Timer | null>(null);
const [results, setResults] = React.useState<ResultType[]>([]);
const [isLoading, setIsLoading] = React.useState(false);
const [cursor, setCursor] = React.useState<number | null>(null);
const refs = React.useRef<(null | HTMLAnchorElement)[]>([]);
const suggestedQuestionsRef = React.useRef<null | ResultType[]>(null);
React.useEffect(() => {
setIsLoading(true);
if (!query) {
if (!withAsk) {
setResultsState({ results: [], fetching: false });
setIsLoading(false);
return;
}
if (suggestedQuestionsRef.current) {
setResultsState({ results: suggestedQuestionsRef.current, fetching: false });
setResults(suggestedQuestionsRef.current);
setIsLoading(false);
return;
}
let cancelled = false;
setResultsState({ results: [], fetching: true });
getRecommendedQuestions(spaceId).then((questions) => {
if (!questions) {
if (!cancelled) {
setResultsState({ results: [], fetching: false });
setResults([]);
setIsLoading(false);
}
captureException(
new Error(`corrupt-cache: getRecommendedQuestions is ${questions}`),
@@ -97,20 +101,27 @@ export const SearchResults = React.forwardRef(function SearchResults(
suggestedQuestionsRef.current = results;
if (cancelled) {
setIsLoading(false);
return;
}
setResultsState({ results, fetching: false });
setResults(results);
setIsLoading(false);
});
return () => {
cancelled = true;
};
} else {
setResultsState((prev) => ({ results: prev.results, fetching: true }));
if (withAsk) {
setResults((prev) => withQuestionResult(prev, query));
setIsLoading(false);
}
let cancelled = false;
const timeout = setTimeout(async () => {
const results = await (global
debounceTimeout.current = setTimeout(async () => {
const fetchedResults = await (global
? searchAllSiteContent(query, pointer)
: searchSiteSpaceContent(query, pointer, revisionId));
@@ -118,18 +129,20 @@ export const SearchResults = React.forwardRef(function SearchResults(
return;
}
if (!results) {
if (!fetchedResults) {
captureException(
new Error(
`corrupt-cache: ${global ? 'searchAllSiteContent' : 'searchSiteSpaceContent'} is ${results}`,
`corrupt-cache: ${global ? 'searchAllSiteContent' : 'searchSiteSpaceContent'} is ${fetchedResults}`,
),
{ extra: { results } },
{ extra: { results: fetchedResults } },
);
setResultsState({ results: [], fetching: false });
setResults([]);
setIsLoading(false);
return;
}
setResultsState({ results, fetching: false });
setResults(withAsk ? withQuestionResult(fetchedResults, query) : fetchedResults);
setIsLoading(false);
trackEvent({
type: 'search_type_query',
@@ -139,18 +152,15 @@ export const SearchResults = React.forwardRef(function SearchResults(
return () => {
cancelled = true;
clearTimeout(timeout);
if (debounceTimeout.current) {
clearTimeout(debounceTimeout.current);
debounceTimeout.current = null;
}
};
}
}, [query, global, pointer, spaceId, revisionId, withAsk, trackEvent]);
const results: ResultType[] = React.useMemo(() => {
if (!withAsk) {
return resultsState.results;
}
return withQuestionResult(resultsState.results, query);
}, [resultsState.results, query, withAsk]);
React.useEffect(() => {
if (!query) {
// Reset the cursor when there's no query
@@ -208,7 +218,7 @@ export const SearchResults = React.forwardRef(function SearchResults(
[moveBy, select],
);
if (resultsState.fetching) {
if (isLoading) {
return (
<div className={tcls('flex', 'items-center', 'justify-center', 'py-8')}>
<Loading className={tcls('w-6', 'text-primary')} />