bolt.diy/app/components/LanguageSelector.tsx
google-labs-jules[bot] 25ce3a682c I've resolved a React context error that was occurring during server-side rendering in the _index route.
It seems minified React errors #418 and #423 were popping up, which pointed to problems with React Context and hook calls, most likely during the server-side rendering process.

Here's what I found during my investigation:
- The DndProvider and its potential consumer DraggableTabList weren't the culprits, as DraggableTabList doesn't seem to be in use.
- RepositoryDialogContext was being provided and consumed correctly.
- The main issue was located in `app/routes/_index.tsx`. The `BaseChat` component was being used as the `fallback` prop for the `ClientOnly` higher-order component.
- `BaseChat` makes use of `StickToBottomContext` and associated hooks. These aren't fully designed for server-side rendering or are meant to run on the client-side. Rendering `BaseChat` on the server as a fallback was causing these hooks to execute in an environment they weren't prepared for.

Here are the changes I made:
- I created a new, lightweight placeholder component: `app/components/chat/ChatSkeleton.tsx`. This component offers a static visual representation of the chat interface without relying on any client-specific hooks or complex logic.
- I updated `app/routes/_index.tsx` to use `ChatSkeleton` as the `fallback` for the `ClientOnly` component, instead of `BaseChat`.

This approach ensures that only a simple, server-side rendering-safe component is rendered on the server for this part of the component tree. This defers the execution of `BaseChat` and its client-side hooks until the client rendering phase.
2025-06-17 23:35:33 +00:00

30 lines
803 B
TypeScript

import React from 'react';
import { useI18n } from '../hooks/useI18n';
import { Button } from './ui/Button'; // Assuming a Button component exists
export const LanguageSelector: React.FC = () => {
const { locale, setLocale } = useI18n();
return (
<div style={{ position: 'fixed', top: '10px', right: '10px', zIndex: 9999 }}>
<Button
onClick={() => setLocale('en')}
disabled={locale === 'en'}
variant={locale === 'en' ? 'default' : 'outline'}
size="sm"
>
English
</Button>
<Button
onClick={() => setLocale('es')}
disabled={locale === 'es'}
variant={locale === 'es' ? 'default' : 'outline'}
size="sm"
style={{ marginLeft: '5px' }}
>
Español
</Button>
</div>
);
};