| import { memo } from 'react'; | |
| import { InfoHoverCard, ESide } from '@librechat/client'; | |
| import { PermissionTypes, Permissions } from 'librechat-data-provider'; | |
| import { useLocalize, useHasAccess } from '~/hooks'; | |
| import ToggleSwitch from '../ToggleSwitch'; | |
| import store from '~/store'; | |
| const commandSwitchConfigs = [ | |
| { | |
| stateAtom: store.atCommand, | |
| localizationKey: 'com_nav_at_command_description' as const, | |
| switchId: 'atCommand', | |
| key: 'atCommand', | |
| permissionType: undefined, | |
| }, | |
| { | |
| stateAtom: store.plusCommand, | |
| localizationKey: 'com_nav_plus_command_description' as const, | |
| switchId: 'plusCommand', | |
| key: 'plusCommand', | |
| permissionType: PermissionTypes.MULTI_CONVO, | |
| }, | |
| { | |
| stateAtom: store.slashCommand, | |
| localizationKey: 'com_nav_slash_command_description' as const, | |
| switchId: 'slashCommand', | |
| key: 'slashCommand', | |
| permissionType: PermissionTypes.PROMPTS, | |
| }, | |
| ] as const; | |
| function Commands() { | |
| const localize = useLocalize(); | |
| const hasAccessToPrompts = useHasAccess({ | |
| permissionType: PermissionTypes.PROMPTS, | |
| permission: Permissions.USE, | |
| }); | |
| const hasAccessToMultiConvo = useHasAccess({ | |
| permissionType: PermissionTypes.MULTI_CONVO, | |
| permission: Permissions.USE, | |
| }); | |
| const getShowSwitch = (permissionType?: PermissionTypes) => { | |
| if (!permissionType) { | |
| return true; | |
| } | |
| if (permissionType === PermissionTypes.MULTI_CONVO) { | |
| return hasAccessToMultiConvo === true; | |
| } | |
| if (permissionType === PermissionTypes.PROMPTS) { | |
| return hasAccessToPrompts === true; | |
| } | |
| return true; | |
| }; | |
| return ( | |
| <div className="space-y-4 p-1"> | |
| <div className="flex items-center gap-2"> | |
| <h3 className="text-lg font-medium text-text-primary"> | |
| {localize('com_nav_chat_commands')} | |
| </h3> | |
| <InfoHoverCard side={ESide.Bottom} text={localize('com_nav_chat_commands_info')} /> | |
| </div> | |
| <div className="flex flex-col gap-3 text-sm text-text-primary"> | |
| {commandSwitchConfigs.map((config) => ( | |
| <div key={config.key} className="pb-3"> | |
| <ToggleSwitch | |
| stateAtom={config.stateAtom} | |
| localizationKey={config.localizationKey} | |
| switchId={config.switchId} | |
| showSwitch={getShowSwitch(config.permissionType)} | |
| /> | |
| </div> | |
| ))} | |
| </div> | |
| </div> | |
| ); | |
| } | |
| export default memo(Commands); | |