Code Monkey home page Code Monkey logo

Comments (3)

vonkoff avatar vonkoff commented on May 27, 2024

Ah ok. I removed the usual healthcheck and made it a simple "OK". Anyhow could have done that and kept the app up. It is the main route that doesn't work. Will report back with what I can find the issue being.

from epic-stack.

vonkoff avatar vonkoff commented on May 27, 2024

Okay now I know where the issue is. Using Algolia and trying to implement this ->

Part of component.

type MainLoaderData = {
  serverState?: InstantSearchServerState;
  serverUrl?: string;
}

 export const loader: LoaderFunction = async ({
 	request,
 }: {
 	request: Request
 }) => {
 	const serverUrl = request.url

 	const serverState = await getServerState(<Search serverUrl={serverUrl} />, {
 		renderToString,
 	})

 	if (serverState === null) throw new Error('Server Data did not load in')

 	const data: MainLoaderData = {
 		serverUrl,
 		serverState,
 	}

 	return json(data)
}

export default function Index() {
	const { serverState, serverUrl } = useLoaderData<MainLoaderData>()

	return (
		<>
            <Search serverState={serverState} serverUrl={serverUrl} />;

I'm not gonna past the rest of my actual other file because it is a lot, but I'll paste below the example from the link above:

import { renderToString } from 'react-dom/server';
import algoliasearch from 'algoliasearch/lite';
import type { InstantSearchServerState } from 'react-instantsearch';
import {
  InstantSearch,
  InstantSearchSSRProvider,
  getServerState,
} from 'react-instantsearch';
import { history } from 'instantsearch.js/cjs/lib/routers/index.js';

import { json } from '@remix-run/node';
import { useLoaderData } from '@remix-run/react';
import type { LoaderFunction } from '@remix-run/node';

const searchClient = algoliasearch('YourApplicationID', 'YourSearchOnlyAPIKey');

export const loader: LoaderFunction = async ({ request }) => {
  const serverUrl = request.url;
  const serverState = await getServerState(
    <Search serverUrl={serverUrl} />,
    { renderToString }
  );

  return json({
    serverState,
    serverUrl,
  });
};

type SearchProps = {
  serverState?: InstantSearchServerState;
  serverUrl?: string;
};

function Search({ serverState, serverUrl }: SearchProps) {
  return (
    <InstantSearchSSRProvider {...serverState}>
      <InstantSearch
        searchClient={searchClient}
        indexName="YourIndexName"
        routing={{
          router: history({
            getLocation() {
              if (typeof window === 'undefined') {
                return new URL(serverUrl!) as unknown as Location;
              }

              return window.location;
            },
          }),
        }}
      >
        {/* Widgets */}
      </InstantSearch>
    </InstantSearchSSRProvider>
  );
}

export default function HomePage() {
  const { serverState, serverUrl } = useLoaderData() as SearchProps;

  return <Search serverState={serverState} serverUrl={serverUrl} />;
}

I wonder if the issue is because import { history } from 'instantsearch.js/cjs/lib/routers/index.js'; is what is in the example and I am trying to use import { history } from 'instantsearch.js/es/lib/routers/index.js';. I am not positive. I'll try to keep this up and put in answer if I am to find it for someone later.

But for now, just taking off the SSR stuff will get this to work

from epic-stack.

kentcdodds avatar kentcdodds commented on May 27, 2024

Yeah, I don't think algolia is capable of rendering on the server at all. You may need to do all algolia stuff in a *.client.tsx file and use ClientOnly from remix-utils to only include algolia in the client build.

from epic-stack.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.