mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-27 21:58:51 +01:00
* refactor(e2e): fix tests with latest changes, convert to TS, use test Ids * chore(EndpointMenu.jsx): add data-testid attribute to new-conversation-menu button * refactor(EndpointItem): add data-testid attr., convert to TS * refactor(e2e): remove unnecessary awaits and convert to TS * chore(playwright.config.local.ts): add absolute path to server index.js file chore(playwright.config.local.ts): add dotenv configuration chore(playwright.config.local.ts): change webServer command to use absolute path chore(playwright.config.local.ts): add NODE_ENV and process.env to webServer env chore(playwright.config.local.ts): remove unused import chore(login.spec.js): delete login.spec.js file * chore(.gitignore): add 'my.secrets' to the list of ignored files fix(Registration.tsx): add 'data-testid' attribute to the error message div fix(Registration.spec.tsx): comment out test case that calls 'registerUser.mutate' * chore(ConvoIcon.tsx): add data-testid attribute to svg element chore(messages.spec.ts): refactor conversation navigation logic * chore(playwright.config.ts): add support for absolute path to server index.js file feat(playwright.config.ts): add support for dotenv configuration feat(playwright.config.ts): set NODE_ENV to 'production' in webServer environment variables * chore(workflows): comment out push event and specify paths for pull_request event in backend-review.yml chore(workflows): comment out push event and specify paths for pull_request event in frontend-review.yml * chore(install.js): add check to skip install script in CI environment * chore: complete playwright workflow * chore(Landing.tsx): add data-testid attribute to landing title element chore(authenticate.ts): update selector to wait for landing title element by test id instead of text content * chore(playwright.yml): add step to upload screenshot artifact on failure fix(authenticate.ts): capture screenshot before waiting for landing title and increase timeout due to GH Actions load time * chore(playwright.yml): rename artifact name from 'screenshot' to 'login-screenshot' feat(LoginForm.tsx): add data-testid attribute to login button fix(authenticate.ts): change screenshot name to 'login-screenshot.png' and conditionally take screenshot only in CI environment * chore(playwright.yml): add CI environment variable and set it to true * chore(playwright.yml): update Playwright installation command chore(playwright.config.ts): update storageState path to use process.cwd() * fix(playwright.yml): update node version to 18 in setup-node action fix(playwright.yml): update actions/cache to v3 in Cache Node.js modules step fix(playwright.yml): update actions/cache to v3 in Cache Playwright installations step fix(authenticate.ts): change login button click to press 'Enter' on password input * chore(playwright.yml): update E2E_USER_EMAIL and E2E_USER_PASSWORD values for testing purposes chore(authenticate.ts): add console.dir to log user object for debugging * chore(playwright.yml): add step to upload storageState artifact The storageState artifact is now uploaded as part of the workflow. This artifact contains the state of the storage used during the end-to-end tests. It will be retained for 2 days. * chore(playwright.yml): comment out upload screenshot step chore(playwright.config.ts): change NODE_ENV to development chore(authenticate.ts): comment out screenshot related code * chore(playwright.config.ts): add SESSION_EXPIRY environment variable with value 86400000 * chore(playwright.yml): update environment variables in Playwright workflow fix(General.tsx): add data-testid attributes to clear conversations buttons test(messages.spec.ts): add setup and teardown steps for clearing conversations before and after tests * fix(messages.spec.ts): fix clearing conversations before and after message tests feat(messages.spec.ts): add beforeEach and afterEach hooks to create and close new page for each test * chore: remove storageStage upload artifact
116 lines
5.2 KiB
TypeScript
116 lines
5.2 KiB
TypeScript
import React from 'react';
|
|
import { useRecoilValue, useSetRecoilState } from 'recoil';
|
|
import useDocumentTitle from '~/hooks/useDocumentTitle';
|
|
import SunIcon from '../svg/SunIcon';
|
|
import LightningIcon from '../svg/LightningIcon';
|
|
import CautionIcon from '../svg/CautionIcon';
|
|
import store from '~/store';
|
|
import { localize } from '~/localization/Translation';
|
|
import { useGetStartupConfig } from 'librechat-data-provider';
|
|
|
|
export default function Landing() {
|
|
const { data: config } = useGetStartupConfig();
|
|
const setText = useSetRecoilState(store.text);
|
|
const conversation = useRecoilValue(store.conversation);
|
|
const lang = useRecoilValue(store.lang);
|
|
// @ts-ignore TODO: Fix anti-pattern - requires refactoring conversation store
|
|
const { title = localize(lang, 'com_ui_new_chat') } = conversation || {};
|
|
|
|
useDocumentTitle(title);
|
|
|
|
const clickHandler = (e: React.MouseEvent<HTMLButtonElement>) => {
|
|
e.preventDefault();
|
|
const { innerText } = e.target as HTMLButtonElement;
|
|
const quote = innerText.split('"')[1].trim();
|
|
setText(quote);
|
|
};
|
|
|
|
return (
|
|
<div className="flex h-full flex-col items-center overflow-y-auto pt-0 text-sm dark:bg-gray-800">
|
|
<div className="w-full px-6 text-gray-800 dark:text-gray-100 md:flex md:max-w-2xl md:flex-col lg:max-w-3xl">
|
|
<h1
|
|
id="landing-title"
|
|
data-testid="landing-title"
|
|
className="mb-10 ml-auto mr-auto mt-6 flex items-center justify-center gap-2 text-center text-4xl font-semibold sm:mb-16 md:mt-[10vh]"
|
|
>
|
|
{config?.appTitle || 'LibreChat'}
|
|
</h1>
|
|
<div className="items-start gap-3.5 text-center md:flex">
|
|
<div className="mb-8 flex flex-1 flex-col gap-3.5 md:mb-auto">
|
|
<h2 className="m-auto flex items-center gap-3 text-lg font-normal md:flex-col md:gap-2">
|
|
<SunIcon />
|
|
{localize(lang, 'com_ui_examples')}
|
|
</h2>
|
|
<ul className="m-auto flex w-full flex-col gap-3.5 sm:max-w-md">
|
|
<button
|
|
onClick={clickHandler}
|
|
className="w-full rounded-md bg-gray-50 p-3 hover:bg-gray-200 dark:bg-white/5 dark:hover:bg-gray-900"
|
|
>
|
|
"{localize(lang, 'com_ui_example_quantum_computing')}" →
|
|
</button>
|
|
<button
|
|
onClick={clickHandler}
|
|
className="w-full rounded-md bg-gray-50 p-3 hover:bg-gray-200 dark:bg-white/5 dark:hover:bg-gray-900"
|
|
>
|
|
"{localize(lang, 'com_ui_example_10_year_old_b_day')}" →
|
|
</button>
|
|
<button
|
|
onClick={clickHandler}
|
|
className="w-full rounded-md bg-gray-50 p-3 hover:bg-gray-200 dark:bg-white/5 dark:hover:bg-gray-900"
|
|
>
|
|
"{localize(lang, 'com_ui_example_http_in_js')}" →
|
|
</button>
|
|
</ul>
|
|
</div>
|
|
<div className="mb-8 flex flex-1 flex-col gap-3.5 md:mb-auto">
|
|
<h2 className="m-auto flex items-center gap-3 text-lg font-normal md:flex-col md:gap-2">
|
|
<LightningIcon />
|
|
{localize(lang, 'com_ui_capabilities')}
|
|
</h2>
|
|
<ul className="m-auto flex w-full flex-col gap-3.5 sm:max-w-md">
|
|
<li className="w-full rounded-md bg-gray-50 p-3 dark:bg-white/5">
|
|
{localize(lang, 'com_ui_capability_remember')}
|
|
</li>
|
|
<li className="w-full rounded-md bg-gray-50 p-3 dark:bg-white/5">
|
|
{localize(lang, 'com_ui_capability_correction')}
|
|
</li>
|
|
<li className="w-full rounded-md bg-gray-50 p-3 dark:bg-white/5">
|
|
{localize(lang, 'com_ui_capability_decline_requests')}
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div className="mb-8 flex flex-1 flex-col gap-3.5 md:mb-auto">
|
|
<h2 className="m-auto flex items-center gap-3 text-lg font-normal md:flex-col md:gap-2">
|
|
<CautionIcon />
|
|
{localize(lang, 'com_ui_limitations')}
|
|
</h2>
|
|
<ul className="m-auto flex w-full flex-col gap-3.5 sm:max-w-md">
|
|
<li className="w-full rounded-md bg-gray-50 p-3 dark:bg-white/5">
|
|
{localize(lang, 'com_ui_limitation_incorrect_info')}
|
|
</li>
|
|
<li className="w-full rounded-md bg-gray-50 p-3 dark:bg-white/5">
|
|
{localize(lang, 'com_ui_limitation_harmful_biased')}
|
|
</li>
|
|
<li className="w-full rounded-md bg-gray-50 p-3 dark:bg-white/5">
|
|
{localize(lang, 'com_ui_limitation_limited_2021')}
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
{/* {!showingTemplates && (
|
|
<div className="mt-8 mb-4 flex flex-col items-center gap-3.5 md:mt-16">
|
|
<button
|
|
onClick={showTemplates}
|
|
className="btn btn-neutral justify-center gap-2 border-0 md:border"
|
|
>
|
|
<ChatIcon />
|
|
Show Prompt Templates
|
|
</button>
|
|
</div>
|
|
)}
|
|
{!!showingTemplates && <Templates showTemplates={showTemplates}/>} */}
|
|
{/* <div className="group h-32 w-full flex-shrink-0 dark:border-gray-900/50 dark:bg-gray-800 md:h-48" /> */}
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|