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
76 lines
2.2 KiB
TypeScript
76 lines
2.2 KiB
TypeScript
import { useState } from 'react';
|
|
import { useRecoilValue } from 'recoil';
|
|
import { Settings } from 'lucide-react';
|
|
import { DropdownMenuRadioItem } from '~/components';
|
|
import { getIcon } from '~/components/Endpoints';
|
|
import { SetTokenDialog } from '../SetTokenDialog';
|
|
|
|
import store from '~/store';
|
|
import { cn, alternateName } from '~/utils';
|
|
|
|
export default function ModelItem({
|
|
endpoint,
|
|
value,
|
|
isSelected,
|
|
}: {
|
|
endpoint: string;
|
|
value: string;
|
|
isSelected: boolean;
|
|
}) {
|
|
const [setTokenDialogOpen, setSetTokenDialogOpen] = useState(false);
|
|
const endpointsConfig = useRecoilValue(store.endpointsConfig);
|
|
|
|
const icon = getIcon({
|
|
size: 20,
|
|
endpoint,
|
|
error: false,
|
|
className: 'mr-2',
|
|
message: false,
|
|
});
|
|
|
|
const isUserProvided = endpointsConfig?.[endpoint]?.userProvide;
|
|
|
|
// regular model
|
|
return (
|
|
<>
|
|
<DropdownMenuRadioItem
|
|
value={value}
|
|
className={cn(
|
|
'group dark:font-semibold dark:text-gray-100 dark:hover:bg-gray-800',
|
|
isSelected ? 'active bg-gray-50 dark:bg-gray-800' : '',
|
|
)}
|
|
id={endpoint}
|
|
data-testid={`endpoint-item-${endpoint}`}
|
|
>
|
|
{icon}
|
|
{alternateName[endpoint] || endpoint}
|
|
{endpoint === 'gptPlugins' && (
|
|
<span className="py-0.25 ml-1 rounded bg-blue-200 px-1 text-[10px] font-semibold text-[#4559A4]">
|
|
Beta
|
|
</span>
|
|
)}
|
|
<div className="flex w-4 flex-1" />
|
|
{isUserProvided ? (
|
|
<button
|
|
className={cn(
|
|
'invisible m-0 mr-1 flex-initial rounded-md p-0 text-xs font-medium text-gray-400 hover:text-gray-700 group-hover:visible dark:font-normal dark:text-gray-400 dark:hover:text-gray-200',
|
|
isSelected ? 'visible text-gray-700 dark:text-gray-200' : '',
|
|
)}
|
|
onClick={(e) => {
|
|
e.preventDefault();
|
|
setSetTokenDialogOpen(true);
|
|
}}
|
|
>
|
|
<Settings className="mr-1 inline-block w-[16px] items-center stroke-1" />
|
|
Config Token
|
|
</button>
|
|
) : null}
|
|
</DropdownMenuRadioItem>
|
|
<SetTokenDialog
|
|
open={setTokenDialogOpen}
|
|
onOpenChange={setSetTokenDialogOpen}
|
|
endpoint={endpoint}
|
|
/>
|
|
</>
|
|
);
|
|
}
|