Integrate Algolia into the storefront sample app
This guide describes how to connect Algolia to a headless Salesforce B2C Commerce storefront with the storefront sample app.
Salesforce deprecated the sample app and recommends using the Progressive Web App (PWA) Kit.
To set up Algolia for your headless Salesforce B2C Commerce storefront, see Headless commerce.
Download and run the SFCC storefront sample app
- 
    
Clone the sample app GitHub repository:
Copy1
git clone --depth=1 https://github.com/SalesforceCommerceCloud/sfcc-sample-apps
 - 
    
Follow the setup instructions to create a frontend with the native search.
 
Download and compile Unified InstantSearch
- 
    
Clone the Unified InstantSearch GitHub repository into the
packages/directory. - 
    
Delete the
unified-instantsearch-ecommerce/.gitdirectory from theunified-instantsearch-ecommercedirectory.Copy1 2 3
cd sfcc-sample-apps/packages git clone --depth=1 https://github.com/algolia/unified-instantsearch-ecommerce rm -rf unified-instantsearch-ecommerce/.git
 - 
    
Install the dependencies and compile.
Copy1 2 3
cd sfcc-sample-apps/packages/unified-instantsearch-ecommerce npm install npm run export
 
This creates a new folder unified-instantsearch-ecommerce/export which contains the assets you need for a working search in the sample app.
Import Unified InstantSearch into the sample app
- 
    
Add the Unified UI assets to be copied into the
storefront-lwcpackage. Edit the filepackages/storefront-lwc/scripts/plugin-copy-assets.js:Copy1 2 3 4 5 6 7 8 9 10
/* inside packages/storefront-lwc/scripts/plugin-copy-assets.js */ const ASSETS = { 'src/assets/favicon.ico': 'favicon.ico', 'src/assets/manifest.json': 'manifest.json', 'src/assets/fonts/': 'fonts/', 'src/assets/images/': 'images/', 'src/assets/img/': 'img/', + '../unified-instantsearch-ecommerce/export/': 'algolia_unified_ui/', };Now, building
storefront-lwcautomatically imports Unified UI files. - 
    
Include the new files in the
index.htmlfile:Copy1 2 3 4 5 6 7 8
<!-- inside packages/storefront-lwc/src/index.html --> <link rel="manifest" href="/manifest.json" /> <link rel="shortcut icon" href="/favicon.ico" /> <link rel="stylesheet" href="/css/global.css" /> + <link rel="stylesheet" href="/algolia_unified_ui/search.css" /> + <script src="/algolia_unified_ui/search.js"></script> - 
    
Create a new Lightning Element that serves as a host for the Algolia Unified UI. In the directory
packages/storefront-lwc/src/modules/, create the following files:Copy1 2
mkdir -p packages/storefront-lwc/src/modules/algoliaUnifiedUi touch packages/storefront-lwc/src/modules/algoliaUnifiedUi/algoliaUnifiedUi.{html,js,scss}
 
Add the following code to the files algoliaUnifiedUi.html and algoliaUnifiedUi.js:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
export default class AlgoliaUnifiedUi extends LightningElement {
   renderedCallback() {
       const productsIndexName = 'zzaa_001_sandbox_us01_dx__RefArch__products__en_US'; // Check to ensure this matches your products index's name
       const currencyCode = 'EUR';
       window.UnifiedUI.start({
           inputContainer: this.template.querySelector('.site-search'),
           keyboardShortcuts: false,
           appId: '<Your Algolia application ID>',
           searchApiKey: '<Your Algolia Search-only API Key>',
           currencyCode,
           index: {
               indexName: productsIndexName,
               searchParameters: {
                   analytics: true,
                   clickAnalytics: true,
                   hitsPerPage: 18,
                   attributesToSnippet: ['short_description:25'],
               },
           },
           sorts: [
               {
                   label: 'Price ascending',
                   value: `${productsIndexName}__price_${currencyCode}_asc`,
               },
               {
                   label: 'Price descending',
                   value: `${productsIndexName}__price_${currencyCode}_desc`,
               },
           ]
       });
  }
}
      Click and conversion events
To complete your setup, send click and conversion events.