Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
@graphcommerce/algolia-search
Advanced tools
❗️❗️ NOT SUPPORTED: Does not work with productFiltersPro and does not work with ProductListLayout/\* components. No further development will be done. Please use [@graphcommerce/algolia-products](../algolia-products/README.md) ❗️❗️
❗️❗️ NOT SUPPORTED: Does not work with productFiltersPro and does not work with ProductListLayout/* components. No further development will be done. Please use @graphcommerce/algolia-products ❗️❗️
Implementation of Algolia Instant Search inside Graphcommerce. Add client or server side product, category and pages search to your project!
@graphcommerce/next-ui
in your package.json.yarn add @graphcommerce/algolia-search@1.2.3
(replace 1.2.3 with the
version of the step above)This plugin contains different app and storefront configuration values.
App configuration values:
Storefront configuration values:
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:
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.
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',
},
]
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
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.
react-instantsearch-hooks-server
package to your projectyarn add react-instantsearch-hooks-server
or
npm install react-instantsearch-hooks-server
SearchResultProps
typetype SearchResultProps = ProductListQuery &
ProductFiltersQuery &
CategorySearchQuery & { filterTypes: FilterTypes; params: ProductListParams, serverState?: unknown }
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'
...
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,
}
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}>
algoliasearch
package to your projectyarn add algoliasearch
@hygraph/utils
package to your projectyarn add @hygraph/utils
- 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.
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)
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)
You can follow these instructions to configure the webhooks in your HyGraph project.
FAQs
❗️❗️ NOT SUPPORTED: Does not work with productFiltersPro and does not work with ProductListLayout/\* components. No further development will be done. Please use [@graphcommerce/algolia-products](../algolia-products/README.md) ❗️❗️
The npm package @graphcommerce/algolia-search receives a total of 535 weekly downloads. As such, @graphcommerce/algolia-search popularity was classified as not popular.
We found that @graphcommerce/algolia-search demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.