Skip to content

Docusaurus

Setup

Installation

TIP

If you were using @getcanary/docusaurus-theme-search-pagefind before, please remove it.

bash
npm install @getcanary/web

Ejecting

bash
# if you are using classic theme
npm run swizzle @docusaurus/theme-classic SearchBar -- --eject --javascript
js
export { default } from "@docusaurus/Noop";

Configuration

After ejecting, you can edit generated files in src/theme/SearchBar.

js
import React from "react";

export default function SearchBarWrapper(props) {
  const [loaded, setLoaded] = React.useState(false);

  React.useEffect(() => {
    Promise.all([
      import("@getcanary/web/components/canary-root"),
      import("@getcanary/web/components/canary-provider-cloud"),
      import("@getcanary/web/components/canary-modal"),
      import("@getcanary/web/components/canary-trigger-searchbar"),
      import("@getcanary/web/components/canary-input"),
      import("@getcanary/web/components/canary-content"),
      import("@getcanary/web/components/canary-search"),
      import("@getcanary/web/components/canary-search-results"),
      // If you want to give us a shout-out, please add this.
      import("@getcanary/web/components/canary-footer.js"),
      // Needed if you have GitHub source.
      import("@getcanary/web/components/canary-search-match-github-issue"),
      import("@getcanary/web/components/canary-search-match-github-discussion"),
    ])
      .then(() => setLoaded(true))
      .catch(console.error);
  }, []);

  if (!loaded) {
    return null;
  }

  return (
    <canary-root framework="docusaurus">
      <canary-provider-cloud project-key="YOUR_KEY">
        <canary-modal transition>
          <canary-trigger-searchbar slot="trigger"></canary-trigger-searchbar>
          <canary-content slot="content">
            <canary-input slot="input" autofocus></canary-input>
            <canary-search slot="mode">
              <canary-search-results slot="body"></canary-search-results>
            </canary-search>
            <canary-footer slot="footer"></canary-footer>
          </canary-content>
        </canary-modal>
      </canary-provider-cloud>
    </canary-root>
  );
}