Extending result item component
Prerequisite
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 /> ... ); }
Set the ResultItem prop to point to the item component
function App() { return ( ... <Results ResultItem={CustomItem} /> ... ); }
Save and re-build the JS resources.
Examples
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;