mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-05 18:18:51 +01:00
feat: Enhance CategoryTabs and Marketplace components for better responsiveness and navigation feat: Refactor AgentCard and AgentGrid components for improved layout and accessibility feat: Implement animated category transitions in AgentMarketplace and update NewChat component layout feat: Refactor UI components for improved styling and accessibility in sharing dialogs refactor: remove GenericManagePermissionsDialog and GrantAccessDialog components - Deleted GenericManagePermissionsDialog and GrantAccessDialog components to streamline sharing functionality. - Updated ManagePermissionsDialog to utilize AccessRolesPicker directly. - Introduced UnifiedPeopleSearch for improved people selection experience. - Enhanced PublicSharingToggle with InfoHoverCard for better user guidance. - Adjusted AgentPanel to change error status to warning for duplicate agent versions. - Updated translations to include new keys for search and access management. feat: Add responsive design for SelectedPrincipalsList and improve layout in GenericGrantAccessDialog feat: Enhance styling in SelectedPrincipalsList and SearchPicker components for improved UI consistency feat: Improve PublicSharingToggle component with enhanced styling and accessibility features feat: Introduce InfoHoverCard component and refactor enums for better organization feat: Implement infinite scroll for agent grids and enhance performance - Added `useInfiniteScroll` hook to manage infinite scrolling behavior in agent grids. - Integrated infinite scroll functionality into `AgentGrid` and `VirtualizedAgentGrid` components. - Updated `AgentMarketplace` to pass the scroll container to the agent grid components. - Refactored loading indicators to show a spinner instead of a "Load More" button. - Created `VirtualizedAgentGrid` component for optimized rendering of agent cards using virtualization. - Added performance tests for `VirtualizedAgentGrid` to ensure efficient handling of large datasets. - Updated translations to include new messages for end-of-results scenarios. chore: Remove unused permission-related UI localization keys ci: Update Agent model tests to handle duplicate support_contact updates - Modified tests to ensure that updating an agent with the same support_contact does not create a new version and returns successfully. - Enhanced verification for partial changes in support_contact, confirming no new version is created when content remains the same. chore: Address ESLint, clean up unused imports and improve prop definitions in various components ci: fix tests ci: update tests chore: remove unused search localization keys
75 lines
2.2 KiB
TypeScript
75 lines
2.2 KiB
TypeScript
import { forwardRef } from 'react';
|
|
import { CheckIcon } from 'lucide-react';
|
|
import { Spinner, DialogButton, InfoHoverCard, ESide } from '@librechat/client';
|
|
import type { TDangerButtonProps } from '~/common';
|
|
import type { ForwardedRef } from 'react';
|
|
import { useLocalize } from '~/hooks';
|
|
import { cn } from '~/utils';
|
|
|
|
const DangerButton = (props: TDangerButtonProps, ref: ForwardedRef<HTMLButtonElement>) => {
|
|
const {
|
|
id,
|
|
onClick,
|
|
mutation,
|
|
disabled,
|
|
confirmClear,
|
|
infoTextCode,
|
|
actionTextCode,
|
|
className = '',
|
|
showText = true,
|
|
dataTestIdInitial,
|
|
dataTestIdConfirm,
|
|
infoDescriptionCode,
|
|
confirmActionTextCode = 'com_ui_confirm_action',
|
|
} = props;
|
|
const localize = useLocalize();
|
|
|
|
const renderMutation = (node: React.ReactNode | string) => {
|
|
if (mutation && mutation.isLoading) {
|
|
return <Spinner className="h-5 w-5" />;
|
|
}
|
|
return node;
|
|
};
|
|
|
|
return (
|
|
<div className="flex items-center justify-between">
|
|
{showText && (
|
|
<div className={`flex items-center ${infoDescriptionCode ? 'space-x-2' : ''}`}>
|
|
<div>{localize(infoTextCode)}</div>
|
|
{infoDescriptionCode && <InfoHoverCard side={ESide.Bottom} text={infoDescriptionCode} />}
|
|
</div>
|
|
)}
|
|
<DialogButton
|
|
id={id}
|
|
ref={ref}
|
|
disabled={disabled}
|
|
onClick={onClick}
|
|
className={cn(
|
|
'btn relative border-none bg-red-500 text-white hover:bg-red-700 dark:hover:bg-red-700',
|
|
className,
|
|
)}
|
|
>
|
|
{confirmClear ? (
|
|
<div
|
|
className="flex w-full items-center justify-center gap-2"
|
|
id={`${id}-text`}
|
|
data-testid={dataTestIdConfirm}
|
|
>
|
|
{renderMutation(<CheckIcon className="h-5 w-5" />)}
|
|
{mutation && mutation.isLoading ? null : localize(confirmActionTextCode)}
|
|
</div>
|
|
) : (
|
|
<div
|
|
className="flex w-full items-center justify-center gap-2"
|
|
id={`${id}-text`}
|
|
data-testid={dataTestIdInitial}
|
|
>
|
|
{renderMutation(localize(actionTextCode))}
|
|
</div>
|
|
)}
|
|
</DialogButton>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default forwardRef(DangerButton);
|