Skip to content

Commit 8d7a306

Browse files
anikachurilovantarocco
authored andcommitted
search results: render Mathjax in the results list and grid
* closes CERNDocumentServer/cds-rdm#198
1 parent c133ebb commit 8d7a306

6 files changed

Lines changed: 55 additions & 10 deletions

File tree

docs/docs/components/results_grid.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ title: ResultsGrid
2121

2222
An optional string to define a specific overridable id.
2323

24+
* **onResultsRendered** `func` *optional*
25+
26+
An optional function to define set of actions to be performed after the component is rendered. For example: render MathJax to display mathematical equations.
27+
2428
## Usage when overriding
2529

2630
```jsx

docs/docs/components/results_list.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ title: ResultsList
1717

1818
An optional string to define a specific overridable id.
1919

20+
* **onResultsRendered** `func` *optional*
21+
22+
An optional function to define set of actions to be performed after the component is rendered. For example: render MathJax to display mathematical equations.
23+
2024
## Usage when overriding
2125

2226
```jsx

docs/docs/components/results_multi_layout.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ By default it renders results as a list.
2020

2121
An optional string to define a specific overridable id.
2222

23+
* **onResultsRendered** `func` *optional*
24+
25+
An optional function to define set of actions to be performed after the component is rendered. For example: render MathJax to display mathematical equations.
26+
2327
## Usage when overriding
2428

2529
```jsx

src/lib/components/ResultsGrid/ResultsGrid.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,26 @@
77
*/
88

99
import PropTypes from "prop-types";
10-
import React, { useContext } from "react";
10+
import React, { useContext, useEffect } from "react";
1111
import Overridable from "react-overridable";
1212
import { Card, Image } from "semantic-ui-react";
1313
import { AppContext } from "../ReactSearchKit";
1414
import { ShouldRender } from "../ShouldRender";
1515

16-
function ResultsGrid({ loading, totalResults, results, resultsPerRow, overridableId }) {
16+
function ResultsGrid({ loading, totalResults, results, resultsPerRow, overridableId, onResultsRendered }) {
17+
18+
useEffect(() => {
19+
if (onResultsRendered) {
20+
onResultsRendered();
21+
}
22+
23+
return () => {
24+
if (onResultsRendered) {
25+
onResultsRendered = null;
26+
}
27+
};
28+
}, [onResultsRendered]);
29+
1730
return (
1831
<ShouldRender condition={!loading && totalResults > 0}>
1932
<Element
@@ -28,6 +41,7 @@ function ResultsGrid({ loading, totalResults, results, resultsPerRow, overridabl
2841
ResultsGrid.propTypes = {
2942
resultsPerRow: PropTypes.number,
3043
overridableId: PropTypes.string,
44+
onResultsRendered: PropTypes.func,
3145
/* REDUX */
3246
loading: PropTypes.bool.isRequired,
3347
totalResults: PropTypes.number.isRequired,
@@ -37,6 +51,7 @@ ResultsGrid.propTypes = {
3751
ResultsGrid.defaultProps = {
3852
resultsPerRow: 3,
3953
overridableId: "",
54+
onResultsRendered: () => {},
4055
};
4156

4257
const GridItem = ({ result, overridableId }) => {

src/lib/components/ResultsList/ResultsList.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,25 @@
77
*/
88

99
import PropTypes from "prop-types";
10-
import React, { useContext } from "react";
10+
import React, { useContext, useEffect } from "react";
1111
import Overridable from "react-overridable";
1212
import { Item } from "semantic-ui-react";
1313
import { AppContext } from "../ReactSearchKit";
1414
import { ShouldRender } from "../ShouldRender";
1515

16-
function ResultsList({ loading, totalResults, results, overridableId }) {
16+
function ResultsList({ loading, totalResults, results, overridableId, onResultsRendered }) {
17+
useEffect(() => {
18+
if (onResultsRendered) {
19+
onResultsRendered();
20+
}
21+
22+
return () => {
23+
if (onResultsRendered) {
24+
onResultsRendered = null;
25+
}
26+
};
27+
}, [onResultsRendered]);
28+
1729
return (
1830
<ShouldRender condition={!loading && totalResults > 0}>
1931
<Element results={results} overridableId={overridableId} />
@@ -23,6 +35,7 @@ function ResultsList({ loading, totalResults, results, overridableId }) {
2335

2436
ResultsList.propTypes = {
2537
overridableId: PropTypes.string,
38+
onResultsRendered: PropTypes.func,
2639
/* REDUX */
2740
loading: PropTypes.bool.isRequired,
2841
totalResults: PropTypes.number.isRequired,
@@ -31,6 +44,7 @@ ResultsList.propTypes = {
3144

3245
ResultsList.defaultProps = {
3346
overridableId: "",
47+
onResultsRendered: () => {},
3448
};
3549

3650
const ListItem = ({ result, overridableId }) => {

src/lib/components/ResultsMultiLayout/ResultsMultiLayout.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,18 @@ import { ResultsGrid } from "../ResultsGrid";
1414
import { ResultsList } from "../ResultsList";
1515
import { ShouldRender } from "../ShouldRender";
1616

17-
function ResultsMultiLayout({ loading, totalResults, currentLayout, overridableId }) {
17+
function ResultsMultiLayout({ loading, totalResults, currentLayout, overridableId, onResultsRendered }) {
1818
return (
1919
<ShouldRender condition={currentLayout != null && !loading && totalResults > 0}>
20-
<Element layout={currentLayout} overridableId={overridableId} />
20+
<Element layout={currentLayout} overridableId={overridableId} onResultsRendered={onResultsRendered} />
2121
</ShouldRender>
2222
);
2323
}
2424

2525
ResultsMultiLayout.propTypes = {
2626
currentLayout: PropTypes.string,
2727
overridableId: PropTypes.string,
28+
onResultsRendered: PropTypes.func,
2829
/* REDUX */
2930
loading: PropTypes.bool.isRequired,
3031
totalResults: PropTypes.number.isRequired,
@@ -33,20 +34,21 @@ ResultsMultiLayout.propTypes = {
3334
ResultsMultiLayout.defaultProps = {
3435
currentLayout: null,
3536
overridableId: "",
37+
onResultsRendered: () => {},
3638
};
3739

38-
const Element = ({ layout, overridableId }) => {
40+
const Element = ({ layout, overridableId, onResultsRendered }) => {
3941
const { buildUID } = useContext(AppContext);
40-
4142
return (
4243
<Overridable
4344
id={buildUID("ResultsMultiLayout.element", overridableId)}
4445
layout={layout}
46+
onResultsRendered={onResultsRendered}
4547
>
4648
{layout === "list" ? (
47-
<ResultsList overridableId={overridableId} />
49+
<ResultsList overridableId={overridableId} onResultsRendered={onResultsRendered}/>
4850
) : (
49-
<ResultsGrid overridableId={overridableId} />
51+
<ResultsGrid overridableId={overridableId} onResultsRendered={onResultsRendered}/>
5052
)}
5153
</Overridable>
5254
);
@@ -55,11 +57,13 @@ const Element = ({ layout, overridableId }) => {
5557
Element.propTypes = {
5658
layout: PropTypes.string,
5759
overridableId: PropTypes.string,
60+
onResultsRendered: PropTypes.func,
5861
};
5962

6063
Element.defaultProps = {
6164
layout: "",
6265
overridableId: "",
66+
onResultsRendered: () => {},
6367
};
6468

6569
export default Overridable.component("ResultsMultiLayout", ResultsMultiLayout);

0 commit comments

Comments
 (0)