payload-plugin-algolia
TypeScript icon, indicating that this package has built-in type declarations

0.1.0 • Public • Published

payload-plugin-algolia

PayloadCMS plugin that syncs collections with Algolia search

ci status

Installation

npm i payload-plugin-algolia

Usage

At a minimum, the plugin requires Algolia credentials and a list of enabled collections.

// payload.config.ts

import { buildConfig } from 'payload/config'
import { AlgoliaSearchPlugin } from 'payload-plugin-algolia'
import Pages from './collections/Pages'
import Posts from './collections/Posts'

export default buildConfig({
  collections: [Pages, Posts],
  plugins: [
    AlgoliaSearchPlugin({
      algolia: {
        appId: process.env.ALGOLIA_APP_ID,
        apiKey: process.env.ALGOLIA_ADMIN_API_KEY,
        index: process.env.ALGOLIA_INDEX
      },
      collections: ['pages', 'posts']
    })
  ]
  // ...more config
})

Options

generateSearchAttributes

By default, the plugin will pass the entire document through to Algolia, with two appended keys:

  • objectID: format ${collection}:${id} eg pages:1
  • collection: the collection slug

You can modify search attributes by providing a custom generateSearchAttributes function:

import { type GenerateSearchAttributes } from 'plugin-payload-algolia'

interface PageRecord {
  title: string
  text: string
}

interface PostRecord extends PageRecord {
  image: string
}

const generateSearchAttributes: GenerateSearchAtributes<
  PageRecord | PostRecord
> = async ({ doc, collection, req: { payload } }) => {
  switch (collection.slug) {
    case 'posts': {
      if (doc.featured_image) {
        const { url } = await payload.findById({
          collection: 'media',
          id: doc.featured_image as number
        })

        return {
          ...doc,
          image: url,
        }
      }

      return doc
    }
    default:
      return doc
  }
} 

waitForHook

Boolean, default = false

Set to true to wait for algolia set / delete operations during the collection hooks.

Notes

The current scope of the plugin is quite limited. PRs welcome!

Drafts

Drafts are not indexed. If a document is unpublished, it gets removed from search results. Otherwise, draft updates to a published document have no effect.

Globals

Globals are not supported for indexing.

Algolia search config

The internal Algolia client accepts all options. Beyond that, the rest of the setup for a typical Algolia configuration is outside the scope of the plugin (setting search attributes and facets, etc).

Package Sidebar

Install

npm i payload-plugin-algolia

Weekly Downloads

100

Version

0.1.0

License

MIT

Unpacked Size

77 kB

Total Files

58

Last publish

Collaborators

  • wkentdag