|
@@ -3,7 +3,9 @@ import React, {
|
|
|
ForwardRefRenderFunction, useCallback, useImperativeHandle, useRef,
|
|
ForwardRefRenderFunction, useCallback, useImperativeHandle, useRef,
|
|
|
} from 'react';
|
|
} from 'react';
|
|
|
import { ISelectable, ISelectableAll } from '~/client/interfaces/selectable-all';
|
|
import { ISelectable, ISelectableAll } from '~/client/interfaces/selectable-all';
|
|
|
-import { IPageWithMeta, isIPageInfoForListing } from '~/interfaces/page';
|
|
|
|
|
|
|
+import {
|
|
|
|
|
+ IPageInfoForListing, IPageWithMeta, isIPageInfoForListing,
|
|
|
|
|
+} from '~/interfaces/page';
|
|
|
import { IPageSearchMeta } from '~/interfaces/search';
|
|
import { IPageSearchMeta } from '~/interfaces/search';
|
|
|
import { useIsGuestUser } from '~/stores/context';
|
|
import { useIsGuestUser } from '~/stores/context';
|
|
|
import { useSWRxPageInfoForList } from '~/stores/page';
|
|
import { useSWRxPageInfoForList } from '~/stores/page';
|
|
@@ -30,8 +32,8 @@ const SearchResultListSubstance: ForwardRefRenderFunction<ISelectableAll, Props>
|
|
|
} = props;
|
|
} = props;
|
|
|
|
|
|
|
|
const pageIdsWithNoSnippet = pages
|
|
const pageIdsWithNoSnippet = pages
|
|
|
- .filter(page => (page.pageMeta?.elasticSearchResult?.snippet.length ?? 0) === 0)
|
|
|
|
|
- .map(page => page.pageData._id);
|
|
|
|
|
|
|
+ .filter(page => (page.meta?.elasticSearchResult?.snippet.length ?? 0) === 0)
|
|
|
|
|
+ .map(page => page.data._id);
|
|
|
|
|
|
|
|
const { data: isGuestUser } = useIsGuestUser();
|
|
const { data: isGuestUser } = useIsGuestUser();
|
|
|
const { data: idToPageInfo } = useSWRxPageInfoForList(pageIdsWithNoSnippet, true);
|
|
const { data: idToPageInfo } = useSWRxPageInfoForList(pageIdsWithNoSnippet, true);
|
|
@@ -60,16 +62,16 @@ const SearchResultListSubstance: ForwardRefRenderFunction<ISelectableAll, Props>
|
|
|
|
|
|
|
|
const clickItemHandler = useCallback((pageId: string) => {
|
|
const clickItemHandler = useCallback((pageId: string) => {
|
|
|
if (onPageSelected != null) {
|
|
if (onPageSelected != null) {
|
|
|
- const selectedPage = pages.find(page => page.pageData._id === pageId);
|
|
|
|
|
|
|
+ const selectedPage = pages.find(page => page.data._id === pageId);
|
|
|
onPageSelected(selectedPage);
|
|
onPageSelected(selectedPage);
|
|
|
}
|
|
}
|
|
|
}, [onPageSelected, pages]);
|
|
}, [onPageSelected, pages]);
|
|
|
|
|
|
|
|
- let injectedPage;
|
|
|
|
|
|
|
+ let injectedPages: (IPageWithMeta<IPageSearchMeta> | IPageWithMeta<IPageInfoForListing & IPageSearchMeta>)[] | undefined;
|
|
|
// inject data to list
|
|
// inject data to list
|
|
|
if (idToPageInfo != null) {
|
|
if (idToPageInfo != null) {
|
|
|
- injectedPage = pages.map((page) => {
|
|
|
|
|
- const pageInfo = idToPageInfo[page.pageData._id];
|
|
|
|
|
|
|
+ injectedPages = pages.map((page) => {
|
|
|
|
|
+ const pageInfo = idToPageInfo[page.data._id];
|
|
|
|
|
|
|
|
if (!isIPageInfoForListing(pageInfo)) {
|
|
if (!isIPageInfoForListing(pageInfo)) {
|
|
|
// return as is
|
|
// return as is
|
|
@@ -77,26 +79,26 @@ const SearchResultListSubstance: ForwardRefRenderFunction<ISelectableAll, Props>
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
- pageData: page.pageData,
|
|
|
|
|
- pageMeta: {
|
|
|
|
|
- ...page.pageMeta,
|
|
|
|
|
- revisionShortBody: pageInfo.revisionShortBody,
|
|
|
|
|
|
|
+ data: page.data,
|
|
|
|
|
+ meta: {
|
|
|
|
|
+ ...page.meta,
|
|
|
|
|
+ ...pageInfo,
|
|
|
},
|
|
},
|
|
|
- };
|
|
|
|
|
|
|
+ } as IPageWithMeta<IPageInfoForListing & IPageSearchMeta>;
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
return (
|
|
|
<ul data-testid="search-result-list" className="page-list-ul list-group list-group-flush">
|
|
<ul data-testid="search-result-list" className="page-list-ul list-group list-group-flush">
|
|
|
- { (injectedPage ?? pages).map((page, i) => {
|
|
|
|
|
|
|
+ { (injectedPages ?? pages).map((page, i) => {
|
|
|
return (
|
|
return (
|
|
|
<PageListItemL
|
|
<PageListItemL
|
|
|
- key={page.pageData._id}
|
|
|
|
|
|
|
+ key={page.data._id}
|
|
|
// eslint-disable-next-line no-return-assign
|
|
// eslint-disable-next-line no-return-assign
|
|
|
ref={c => itemsRef.current[i] = c}
|
|
ref={c => itemsRef.current[i] = c}
|
|
|
page={page}
|
|
page={page}
|
|
|
isEnableActions={!isGuestUser}
|
|
isEnableActions={!isGuestUser}
|
|
|
- isSelected={page.pageData._id === selectedPageId}
|
|
|
|
|
|
|
+ isSelected={page.data._id === selectedPageId}
|
|
|
forceHideMenuItems={forceHideMenuItems}
|
|
forceHideMenuItems={forceHideMenuItems}
|
|
|
onClickItem={clickItemHandler}
|
|
onClickItem={clickItemHandler}
|
|
|
onCheckboxChanged={props.onCheckboxChanged}
|
|
onCheckboxChanged={props.onCheckboxChanged}
|