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 7 months ago
