Step 3: Adding Search to Your Blog
This guide accompanies the video walk-through and will provide you with code snippets and commands used in the video.
In this video, Aaron adds search to his blog site by building a search experience in the Yext platform and using the search-ui-react
library.
git clone https://github.com/YextSolutions/pages-starter-react-blog
and check out the search branch with git checkout search
.
Walkthrough
0:30 Navigate to Search > Overview in your account. Click Create Search Experience and name the experience blog-search
.
0:44 Add blog
entities to the search experience.
0:55 Once the experience is created, navigate to the Verticals page.
1:35 Add Date Posted
as a searchable field and set Date Posted
as sortable on the Searchable Fields grid.
1:46 Add a Default Sort Order with Type: field
, Field: datePosted
, and Sorting Direction: Descending
. Then click Save.
2:07 Navigate to General Settings and copy the search API key.
2:17 Add the Search API Key to your .env
file in the Pages project:
YEXT_PUBLIC_SEARCH_API_KEY=<YOUR_EXPERIENCE_KEY>
You can learn more about environment variables here .
2:22 Add everything you need to add the search components to your project by running:
npm i @yext/search-ui-react
In tailwind.config.cjs
, comment in the following two lines:
const { ComponentsContentPath } = require("@yext/search-ui-react");
ComponentsContentPath,
2:40 Create a file search-experience.tsx
under src/components
(Aaron already has his file created) to enable search in your project. Add the below code.
SandboxEndpoints
. Aaron was using a production account and did not have these lines of code in the video. If you created a playground account for this, you are using a sandbox account.
// src/components/search-experience.tsx
import * as React from "react";
import {
provideHeadless,
SearchHeadlessProvider,
SandboxEndpoints // remove if using a production account
} from "@yext/search-headless-react";
const SEARCH_API_KEY = import.meta.env.YEXT_PUBLIC_SEARCH_API_KEY;
export const searchConfig = {
apiKey: SEARCH_API_KEY,
locale: "en",
endpoints: SandboxEndpoints // remove if using a production account
};
interface SearchExperienceProps {
experienceKey: string;
verticalKey?: string;
children?: React.ReactNode;
}
const SearchExperience = ({
experienceKey,
verticalKey,
children,
}: SearchExperienceProps) => {
const search = provideHeadless({
...searchConfig,
verticalKey,
experienceKey,
});
return (
<SearchHeadlessProvider searcher={search}>
{children}
</SearchHeadlessProvider>
);
};
export default SearchExperience;
4:18 Add a new file blog-results.tsx
to src/components
. Insert the following code to get a quick search results page up:
// src/components/blog-results.tsx
import {
SearchBar,
StandardCard,
VerticalResults,
} from "@yext/search-ui-react";
import { useSearchActions, useSearchState } from "@yext/search-headless-react";
import { ImSpinner3 } from "react-icons/im";
import * as React from "react";
const BlogResults = () => {
return (
<div className="centered-container pt-4">
<SearchBar />
<VerticalResults CardComponent={StandardCard} />
</div>
);
};
export default BlogResults;
5:00 In src/templates/home.tsx
wrap the return value from the default export in a search experience.
// src/templates/home.tsx
...
const Home: Template<TemplateRenderProps> = ({
document,
}: TemplateRenderProps) => {
const { _site } = document;
return (
<SearchExperience experienceKey="blog-search" verticalKey="blogs"> // New Content
<HomeLayout
GreetingContent={() => (
<Greeting name="Aaron" role="Developer Evangelist @ Yext" />
)}
sections={[
{
title: "Home",
Section: (
<PersonalInfo
twitter={_site.c_twitter}
github={_site.c_github}
devTo={_site.devTo}
introduction={_site.c_introduction}
home={_site.c_home}
skills={_site.c_skills}
interests={_site.c_interests}
/>
),
},
{
title: "Blogs",
Section: <BlogResults />, // Updated Content
},
]}
/>
</SearchExperience> // New Content
);
};
export default Home;
5:36 Make sure to update your imports to include BlogResults
and the SearchExperience
component.
5:40 Start dev server with npm run dev
. In the local dev environment, go to the Home page and switch to the Blogs tab, where you’ll see a search bar. Enter a search and you’ll see search results!