Extending result item component
Prerequisite
Create results widget
Setup for development with typescript
Steps to extend
- Create a components directory in the designated react folder.
- Create a React component file (e.g. CustomItem.tsx)
- Open the file to edit and import React and ResultItemProps
import React from 'react';
import { ResultItemProps } from 'react-hawksearch';
- Create the component function
function CustomItem({ item }: ResultItemProps) {
// Configuration goes here
}
- For the configuration, declare all the fields that are gone be used in this component
let title = item.getDocumentValue('title');
let content = item.getDocumentValue('content');
- The component function should return the structure
return (
<div>
<h3>{title}</h3>
<p>{content}</p>
</div>
)
- Export the component
export default CustomItem;
- Save the file.
- Open the results component file for editing.
- Import the newly created item component
import CustomItem from '../components/CustomItem';
- Locate the Results component initialization. It should be in the App structure.
function App() {
return (
...
<Results />
...
);
}
12, Set the ResultItem prop to point to the item component
function App() {
return (
...
<Results ResultItem={CustomItem} />
...
);
}
- Save and re-build the JS resources.
Example
Creating a custom item for dynamic layout based on content type (e.g. components/ContentTypeDynamicItem.tsx)
import React from 'react';
import { ResultItemProps } from 'react-hawksearch';
function ContentTypeDynamicItem({ item }: ResultItemProps) {
var contentType = item.getDocumentValue('contenttype');
var title = item.getDocumentValue('title');
var link = item.getDocumentValue('link');
var summary = item.getDocumentValue('summary');
var content = item.getDocumentValue('content');
var image = item.getDocumentValue('image');
var item;
switch (contentType) {
case "Telerik.Sitefinity.Events.Model.Event":
item =
<div>
<div><h3>{title}</h3></div>
<div><img src={image} /></div>
<div>{content}</div>
</div>
break;
case "Telerik.Sitefinity.News.Model.NewsItem":
item =
<div>
<div><h3>{title}</h3></div>
<div>{summary}</div>
<p><a href={link}>Read more</a></p>
</div>
break;
default:
item =
<div>
<div><h3>{title}</h3></div>
<div>{content}</div>
</div>
break;
}
return (
<div>
{item}
</div>
);
}
export default ContentTypeDynamicItem;
Updated almost 2 years ago