8.0.5 • Published 4 days ago

@graphcommerce/algolia-search v8.0.5

Weekly downloads
-
License
-
Repository
github
Last release
4 days ago

Algolia Search

Implementation of Algolia Instant Search inside Graphcommerce. Add client or server side product, category and pages search to your project!

Installation

  1. Find current version of your @graphcommerce/next-ui in your package.json.
  2. yarn add @graphcommerce/algolia-search@1.2.3 (replace 1.2.3 with the version of the step above)

Add config values to Graphcommerce configuration

This plugin contains different app and storefront configuration values.

App configuration values:

  • algoliaApplicationId
  • algoliaSearchOnlyApiKey
  • algoliaSearchDebounceTime,

Storefront configuration values:

  • algoliaSearchIndexConfig (containing a list of the following values)
    • searchIndex
    • filterAttributes (containing a list of the following values)
      • aggregation
      • toAlgoliaAttribute
  • sortOptions
    • label
    • value

When to use filterAttributes?

The filterAttributes configuration is used to map the filter attributes from the Magento 2 API to Algolia API. This is needed because some of the attributes in Algolia don't match with the indexed attributes in Algolia. We currently support some default attributes that are Magento 2 native, which means you don't have to add them to the filterAttributes configuration. These attributes are:

  • price
  • category_uid

If you want to map other attributes, you can add them to the filterAttributes configuration. For example, if you want to map the color attribute, you can add the following configuration:

filterAttributes: [
  {
    aggregation: 'color',
    toAlgoliaAttribute: 'color',
  },
]

Filling in the aggregation (Magento 2) enables this plugin to read the aggregation properties, such as the label and the options. The toAlgoliaAttribute (Algolia) is the attribute that is used in the Algolia index and connects the correct values to the aggregation.

When to use sortOptions?

You can use the sortOptions to define new sorting options inside the Algolia plugin. The label is the name of the sorting option that is shown in the UI. The value is the value that is used to find the sort index in the Algolia API. For example, if you want to add a new sorting option called Newest, you can add the following configuration:

sortOptions: [
  {
    label: 'Newest',
    value: 'newest-product-index',
  },
]

What is the recommended algoliaSearchDebounceTime?

We've added a debounce time to the search feature to prevent it from being called too frequently. This means that the search function will wait for a specified amount of time before executing, which reduces the number of queries sent to the Algolia API and can reduce cost. The default debounce time is 0 milliseconds for optimal responsiveness, but you can adjust it by adding the algoliaSearchDebounceTime parameter to your Graphcommerce configuration as following:

algoliaSearchDebounceTime: 500

Add server side hydration to Algolia Search

NOTE: Server side hydration is currently not supported due to the current requirement of useRouter inside this plugin. We are working on a solution to this problem.

  1. Add react-instantsearch-hooks-server package to your project
yarn add react-instantsearch-hooks-server

or

npm install react-instantsearch-hooks-server
  1. Add the new serverState property to the SearchResultProps type
type SearchResultProps = DefaultPageQuery &
  ProductListQuery &
  ProductFiltersQuery &
  CategorySearchQuery & {
   filterTypes: FilterTypes
   params: ProductListParams
+   serverState?: unknown
   }
  1. Add the getServerState method from the react-instantsearch-hooks-server package and the renderToString method from the react-dom/server package to the imports of your search page.
...
import { getServerState } from 'react-instantsearch-hooks-server'
import {renderToString } from 'react-dom/server'
...
  1. Assign the result of the getServerState method to the serverState attribute inside of the return statement.
return {
    props: {
      ...(await page).data,
      ...(await products).data,
      ...(await filters).data,
      ...(await categories)?.data,
      ...(await layout)?.data,
      filterTypes: await filterTypes,
      params: productListParams,
      up: { href: '/', title: 'Home' },
      apolloState: await conf.then(() => client.cache.extract()),
+     serverState: await getServerState(<SearchContext rendersInsideNextjs={false} />, {
+      renderToString,
+     }),
    },
    revalidate: 60 * 20,
  }
  1. Add the serverState to the SearchContext component.
+ const { products, categories, params, filters, filterTypes, serverState } = props
  const search = params.url.split('/')[1]
  const totalSearchResults = (categories?.items?.length ?? 0) + (products?.total_count ?? 0)
  const noSearchResults = search && (!products || (products.items && products?.items?.length <= 0))

  return (
    <>
      <PageMeta
        title={
          search
            ? i18n._(/* i18n */ 'Results for ‘{search}’', { search })
            : i18n._(/* i18n */ 'Search')
        }
        metaRobots={['noindex']}
        canonical='/search'
      />

+     <SearchContext serverProps={serverState}>

Add Algolia indexing to Magento 2

  1. Follow the algolia docs to enable the Algolia integration in Magento 2 here.

Add Algolia indexing to HyGraph

  1. Add the algoliasearch package to your project
yarn add algoliasearch
  1. Add the @hygraph/utils package to your project
yarn add @hygraph/utils
  1. Create two new api routes in your project, one for adding an entry and one for removing an entry from the Algolia index.
- pages
  - api
    - algolia
      - add.ts
      - remove.ts

NOTE: Both the add.ts and remove.ts files are implemented with signature verification. This is to prevent unwanted requests to your api routes. You can read more about signature verification for webhooks here.

  1. The following code is an example of how the add.ts file could look like. This file is responsible for adding an entry to the Algolia index.
import { addHygraphRecord } from '@graphcommerce/algolia-search'
import { NextApiRequest, NextApiResponse } from 'next'

export default (req: NextApiRequest, res: NextApiResponse) =>
  addHygraphRecord(req, res)
  1. The following code is an example of how the remove.ts file could look like. This file is responsible for removing an entry from the Algolia index.
import { removeHygraphRecord } from '@graphcommerce/algolia-search'
import { NextApiRequest, NextApiResponse } from 'next'

export default (req: NextApiRequest, res: NextApiResponse) =>
  await removeHygraphRecord(req, res)
  1. Follow the webhook setup guide to add the webhooks to your HyGraph project.

You can follow these instructions to configure the webhooks in your HyGraph project.

8.1.0-canary.12

4 days ago

8.1.0-canary.11

8 days ago

8.1.0-canary.9

10 days ago

8.1.0-canary.10

10 days ago

8.1.0-canary.8

11 days ago

8.1.0-canary.6

17 days ago

8.1.0-canary.7

17 days ago

8.0.5-canary.11

18 days ago

8.1.0-canary.5

18 days ago

8.0.6-canary.0

18 days ago

8.0.6-canary.2

18 days ago

8.0.6-canary.1

18 days ago

8.0.6-canary.4

18 days ago

8.0.6-canary.3

18 days ago

8.0.5-canary.10

21 days ago

8.0.5-canary.9

21 days ago

8.0.5

21 days ago

8.0.5-canary.8

23 days ago

8.0.5-canary.7

23 days ago

8.0.5-canary.6

23 days ago

8.0.5-canary.5

28 days ago

8.0.5-canary.4

1 month ago

8.0.5-canary.3

1 month ago

8.0.5-canary.2

1 month ago

8.0.5-canary.1

1 month ago

8.0.4-canary.1

1 month ago

8.0.5-canary.0

1 month ago

8.0.4

1 month ago

8.0.4-canary.0

2 months ago

8.0.3-canary.9

2 months ago

8.0.3-canary.8

2 months ago

8.0.3-canary.7

2 months ago

8.0.3

2 months ago

8.0.3-canary.6

3 months ago

8.0.3-canary.5

3 months ago

8.1.0-canary.2

3 months ago

8.1.0-canary.3

3 months ago

8.0.3-canary.4

3 months ago

8.0.3-canary.2

3 months ago

8.0.3-canary.3

3 months ago

8.0.3-canary.0

3 months ago

8.0.3-canary.1

3 months ago

8.0.2-canary.3

3 months ago

8.0.2-canary.2

3 months ago

8.0.2-canary.0

3 months ago

8.0.2

3 months ago

8.0.1-canary.4

3 months ago

8.0.1

3 months ago

8.0.1-canary.3

3 months ago

8.0.1-canary.2

3 months ago

8.0.1-canary.1

3 months ago

8.0.1-canary.0

3 months ago

8.0.0-canary.100

3 months ago

8.0.0-canary.98

3 months ago

8.0.0-canary.99

3 months ago

8.0.0-canary.97

3 months ago

8.0.0

3 months ago

8.0.0-canary.94

4 months ago

8.0.0-canary.95

4 months ago

8.0.0-canary.93

4 months ago

8.0.0-canary.92

4 months ago

8.0.0-canary.91

4 months ago

8.0.0-canary.89

4 months ago

8.0.0-canary.90

4 months ago

8.0.0-canary.78

4 months ago

8.0.0-canary.79

4 months ago

8.0.0-canary.80

4 months ago

8.0.0-canary.81

4 months ago

8.0.0-canary.82

4 months ago

8.0.0-canary.87

4 months ago

8.0.0-canary.88

4 months ago

8.0.0-canary.83

4 months ago

8.0.0-canary.84

4 months ago

8.0.0-canary.85

4 months ago

8.0.0-canary.86

4 months ago

8.0.0-canary.76

4 months ago

8.0.0-canary.77

4 months ago

8.0.0-canary.75

4 months ago

8.0.0-canary.73

4 months ago

8.0.0-canary.74

4 months ago

8.0.0-canary.72

4 months ago

8.0.0-canary.69

4 months ago

8.0.0-canary.70

4 months ago

8.0.0-canary.71

4 months ago

7.1.0-canary.68

4 months ago

7.1.0-canary.66

4 months ago

7.1.0-canary.67

4 months ago

7.1.0-canary.65

5 months ago

7.1.0-canary.64

5 months ago

7.1.0-canary.63

5 months ago

7.0.2-canary.7

7 months ago

7.0.2-canary.6

7 months ago

7.1.0-canary.36

6 months ago

7.1.0-canary.37

6 months ago

7.1.0-canary.38

6 months ago

7.1.0-canary.39

6 months ago

7.1.0-canary.32

6 months ago

7.0.2-canary.3

7 months ago

7.1.0-canary.33

6 months ago

7.0.2-canary.2

7 months ago

7.1.0-canary.34

6 months ago

7.0.2-canary.5

7 months ago

7.1.0-canary.35

6 months ago

7.0.2-canary.4

7 months ago

7.1.0-canary.30

6 months ago

7.0.2-canary.1

7 months ago

7.1.0-canary.31

6 months ago

7.0.2-canary.0

8 months ago

6.2.0-canary.60

10 months ago

7.1.0-canary.29

6 months ago

6.2.0-canary.57

10 months ago

7.1.0-canary.25

7 months ago

7.1.0-canary.26

7 months ago

7.1.0-canary.27

7 months ago

7.1.0-canary.28

7 months ago

7.1.0-canary.21

7 months ago

7.1.0-canary.22

7 months ago

7.1.0-canary.23

7 months ago

7.1.0-canary.24

7 months ago

6.2.0-canary.59

10 months ago

6.2.0-canary.58

10 months ago

7.1.0-canary.20

7 months ago

7.1.0-canary.18

7 months ago

7.1.0-canary.19

7 months ago

7.1.0-canary.14

7 months ago

7.1.0-canary.15

7 months ago

7.1.0-canary.16

7 months ago

7.1.0-canary.17

7 months ago

7.1.0-canary.10

7 months ago

7.0.0

8 months ago

7.1.0-canary.11

7 months ago

7.1.0-canary.12

7 months ago

7.1.0-canary.13

7 months ago

7.0.1

8 months ago

8.0.0-canary.40

6 months ago

7.0.1-canary.15

8 months ago

7.0.1-canary.14

8 months ago

7.0.1-canary.13

8 months ago

7.0.1-canary.12

8 months ago

7.0.1-canary.11

8 months ago

7.0.1-canary.10

8 months ago

6.2.0-canary.91

9 months ago

6.2.0-canary.90

9 months ago

6.2.0-canary.93

9 months ago

6.2.0-canary.92

9 months ago

6.2.0-canary.88

9 months ago

6.2.0-canary.87

9 months ago

6.2.0-canary.89

9 months ago

6.2.0-canary.84

9 months ago

6.2.0-canary.83

9 months ago

6.2.0-canary.86

9 months ago

6.2.0-canary.85

9 months ago

6.2.0-canary.98

8 months ago

6.2.0-canary.95

9 months ago

6.2.0-canary.94

9 months ago

6.2.0-canary.97

8 months ago

6.2.0-canary.96

8 months ago

7.1.0-canary.61

5 months ago

7.1.0-canary.62

5 months ago

7.1.0-canary.9

7 months ago

7.1.0-canary.60

5 months ago

7.1.0-canary.8

7 months ago

6.2.0-canary.71

9 months ago

6.2.0-canary.70

9 months ago

6.2.0-canary.66

10 months ago

6.2.0-canary.65

10 months ago

6.2.0-canary.68

9 months ago

6.2.0-canary.67

10 months ago

7.1.0-canary.58

6 months ago

6.2.0-canary.62

10 months ago

7.1.0-canary.59

6 months ago

6.2.0-canary.61

10 months ago

6.2.0-canary.64

10 months ago

6.2.0-canary.63

10 months ago

7.1.0-canary.54

6 months ago

7.1.0-canary.55

6 months ago

7.1.0-canary.56

6 months ago

7.1.0-canary.57

6 months ago

7.1.0-canary.50

6 months ago

7.1.0-canary.51

6 months ago

6.2.0-canary.69

9 months ago

7.1.0-canary.52

6 months ago

7.1.0-canary.53

6 months ago

6.2.0-canary.80

9 months ago

7.0.1-canary.9

8 months ago

6.2.0-canary.82

9 months ago

6.2.0-canary.81

9 months ago

7.0.1-canary.7

8 months ago

7.0.1-canary.8

8 months ago

7.0.1-canary.5

8 months ago

7.0.1-canary.6

8 months ago

7.0.1-canary.3

8 months ago

6.2.0-canary.77

9 months ago

7.0.1-canary.4

8 months ago

6.2.0-canary.76

9 months ago

7.0.1-canary.1

8 months ago

6.2.0-canary.79

9 months ago

7.0.1-canary.2

8 months ago

6.2.0-canary.78

9 months ago

7.1.0-canary.47

6 months ago

6.2.0-canary.73

9 months ago

7.1.0-canary.48

6 months ago

7.0.1-canary.0

8 months ago

6.2.0-canary.72

9 months ago

7.1.0-canary.49

6 months ago

6.2.0-canary.75

9 months ago

6.2.0-canary.74

9 months ago

7.1.0-canary.43

6 months ago

7.1.0-canary.44

6 months ago

7.1.0-canary.45

6 months ago

7.1.0-canary.46

6 months ago

7.1.0-canary.41

6 months ago

7.1.0-canary.42

6 months ago

6.2.0-canary.56

11 months ago

6.2.0-canary.44

11 months ago

6.2.0-canary.43

11 months ago

6.2.0-canary.46

11 months ago

6.2.0-canary.45

11 months ago

6.2.0-canary.40

11 months ago

6.2.0-canary.42

11 months ago

6.2.0-canary.41

11 months ago

6.2.0-canary.48

11 months ago

6.2.0-canary.47

11 months ago

6.2.0-canary.49

11 months ago

6.2.0-canary.55

11 months ago

6.2.0-canary.54

11 months ago

6.2.0-canary.51

11 months ago

6.2.0-canary.50

11 months ago

6.2.0-canary.53

11 months ago

6.2.0-canary.52

11 months ago

6.2.0-canary.35

11 months ago

6.2.0-canary.34

11 months ago

6.2.0-canary.37

11 months ago

6.2.0-canary.36

11 months ago

6.2.0-canary.39

11 months ago

6.2.0-canary.38

11 months ago

6.2.0-canary.33

12 months ago

6.2.0-canary.32

12 months ago

6.2.0-canary.31

12 months ago

6.2.0-canary.30

12 months ago

6.2.0-canary.29

12 months ago

6.2.0-canary.28

12 months ago

6.2.0-canary.27

12 months ago

6.2.0-canary.26

12 months ago

6.2.0-canary.25

12 months ago

6.2.0-canary.24

12 months ago

6.2.0-canary.23

12 months ago

6.2.0-canary.22

12 months ago

6.2.0-canary.21

12 months ago

7.0.0-canary.21

12 months ago

6.2.0-canary.20

12 months ago

6.2.0-canary.19

12 months ago

6.2.0-canary.18

12 months ago

6.2.0-canary.17

12 months ago

6.2.0-canary.16

1 year ago

6.2.0-canary.15

1 year ago

6.2.0-canary.14

1 year ago

6.2.0-canary.13

1 year ago

6.2.0-canary.12

1 year ago

7.0.0-canary.13

1 year ago

7.0.0-canary.12

1 year ago