|
1 | | -// File: app/page.tsx |
2 | 1 | "use client" |
3 | 2 |
|
4 | 3 | import React from "react" |
@@ -526,45 +525,55 @@ export default function Home() { |
526 | 525 |
|
527 | 526 | {/* Chat Input - Fixed at bottom */} |
528 | 527 | <div className="flex-shrink-0 border-t bg-background"> |
529 | | - <EnhancedChatInput |
530 | | - input={chatInput} |
531 | | - handleInputChange={handleSaveInputChange} |
532 | | - handleSubmit={handleSubmitAuth} |
533 | | - isLoading={isSubmitting} |
534 | | - isErrored={error !== undefined} |
535 | | - errorMessage={errorMessage} |
536 | | - isRateLimited={isRateLimited} |
537 | | - retry={retry} |
538 | | - stop={stop} |
539 | | - isMultiModal={currentModel?.multiModal || false} |
540 | | - files={files} |
541 | | - handleFileChange={handleFileChange} |
542 | | - > |
543 | | - <ChatPicker |
544 | | - templates={templates} |
545 | | - selectedTemplate={selectedTemplate} |
546 | | - onSelectedTemplateChange={(template) => { |
547 | | - if (template !== "auto") { |
548 | | - setSelectedTemplate(template) |
549 | | - } |
550 | | - }} |
551 | | - models={availableModels} |
552 | | - languageModel={languageModel} |
553 | | - onLanguageModelChange={handleLanguageModelChange} |
554 | | - hasMounted={hasMounted} |
555 | | - /> |
556 | | - <ChatSettings |
557 | | - apiKeyConfigurable={!process.env.NEXT_PUBLIC_NO_API_KEY_INPUT} |
558 | | - baseURLConfigurable={!process.env.NEXT_PUBLIC_NO_BASE_URL_INPUT} |
559 | | - languageModel={languageModel} |
560 | | - onLanguageModelChange={handleLanguageModelChange} |
561 | | - /> |
562 | | - </EnhancedChatInput> |
| 528 | + {hasMounted ? ( |
| 529 | + <EnhancedChatInput |
| 530 | + input={chatInput} |
| 531 | + handleInputChange={handleSaveInputChange} |
| 532 | + handleSubmit={handleSubmitAuth} |
| 533 | + isLoading={isSubmitting} |
| 534 | + isErrored={error !== undefined} |
| 535 | + errorMessage={errorMessage} |
| 536 | + isRateLimited={isRateLimited} |
| 537 | + retry={retry} |
| 538 | + stop={stop} |
| 539 | + isMultiModal={currentModel?.multiModal || false} |
| 540 | + files={files} |
| 541 | + handleFileChange={handleFileChange} |
| 542 | + > |
| 543 | + {/* ChatPicker is already using hasMounted internally or via its props */} |
| 544 | + <ChatPicker |
| 545 | + templates={templates} |
| 546 | + selectedTemplate={selectedTemplate} |
| 547 | + onSelectedTemplateChange={(template) => { |
| 548 | + if (template !== "auto") { |
| 549 | + setSelectedTemplate(template) |
| 550 | + } |
| 551 | + }} |
| 552 | + models={availableModels} |
| 553 | + languageModel={languageModel} |
| 554 | + onLanguageModelChange={handleLanguageModelChange} |
| 555 | + hasMounted={hasMounted} |
| 556 | + /> |
| 557 | + <ChatSettings |
| 558 | + apiKeyConfigurable={!process.env.NEXT_PUBLIC_NO_API_KEY_INPUT} |
| 559 | + baseURLConfigurable={!process.env.NEXT_PUBLIC_NO_BASE_URL_INPUT} |
| 560 | + languageModel={languageModel} |
| 561 | + onLanguageModelChange={handleLanguageModelChange} |
| 562 | + /> |
| 563 | + </EnhancedChatInput> |
| 564 | + ) : ( |
| 565 | + <div className="p-4 space-y-3"> |
| 566 | + <div className="h-10 bg-muted rounded-lg animate-pulse" /> |
| 567 | + <div className="h-20 bg-muted rounded-2xl animate-pulse" /> |
| 568 | + <div className="h-10 bg-muted rounded-lg animate-pulse" /> |
| 569 | + <div className="h-4 w-1/2 mx-auto bg-muted rounded animate-pulse mt-1" /> |
| 570 | + </div> |
| 571 | + )} |
563 | 572 | </div> |
564 | 573 | </div> |
565 | 574 |
|
566 | 575 | {/* Preview Panel */} |
567 | | - {fragment && ( |
| 576 | + {fragment && hasMounted && ( // Also ensure preview panel respects hasMounted if its content could cause issues |
568 | 577 | <div className="hidden md:flex md:flex-col border-l border-border"> |
569 | 578 | <Preview |
570 | 579 | teamID={userTeam?.id} |
|
0 commit comments