import { useMemo, useEffect } from 'react'; import { ShieldEllipsis } from 'lucide-react'; import { useForm, Controller } from 'react-hook-form'; import { Permissions, SystemRoles, roleDefaults, PermissionTypes } from 'librechat-data-provider'; import type { Control, UseFormSetValue, UseFormGetValues } from 'react-hook-form'; import { OGDialog, OGDialogTitle, OGDialogContent, OGDialogTrigger } from '~/components/ui'; import { useUpdatePromptPermissionsMutation } from '~/data-provider'; import { useLocalize, useAuthContext } from '~/hooks'; import { Button, Switch } from '~/components/ui'; import { useToastContext } from '~/Providers'; type FormValues = Record; type LabelControllerProps = { label: string; promptPerm: Permissions; control: Control; setValue: UseFormSetValue; getValues: UseFormGetValues; }; const defaultValues = roleDefaults[SystemRoles.USER]; const LabelController: React.FC = ({ control, promptPerm, label, getValues, setValue, }) => (
( )} />
); const AdminSettings = () => { const localize = useLocalize(); const { user, roles } = useAuthContext(); const { showToast } = useToastContext(); const { mutate, isLoading } = useUpdatePromptPermissionsMutation({ onSuccess: () => { showToast({ status: 'success', message: localize('com_endpoint_preset_saved') }); }, onError: () => { showToast({ status: 'error', message: localize('com_ui_error_save_admin_settings') }); }, }); const { reset, control, setValue, getValues, handleSubmit, formState: { isSubmitting }, } = useForm({ mode: 'onChange', defaultValues: useMemo(() => { if (roles?.[SystemRoles.USER]) { return roles[SystemRoles.USER][PermissionTypes.PROMPTS]; } return defaultValues[PermissionTypes.PROMPTS]; }, [roles]), }); useEffect(() => { if (roles?.[SystemRoles.USER]?.[PermissionTypes.PROMPTS]) { reset(roles[SystemRoles.USER][PermissionTypes.PROMPTS]); } }, [roles, reset]); if (user?.role !== SystemRoles.ADMIN) { return null; } const labelControllerData = [ { promptPerm: Permissions.SHARED_GLOBAL, label: localize('com_ui_prompts_allow_share_global'), }, { promptPerm: Permissions.USE, label: localize('com_ui_prompts_allow_use'), }, { promptPerm: Permissions.CREATE, label: localize('com_ui_prompts_allow_create'), }, ]; const onSubmit = (data: FormValues) => { mutate({ roleName: SystemRoles.USER, updates: data }); }; return ( {`${localize('com_ui_admin_settings')} - ${localize( 'com_ui_prompts', )}`}
{labelControllerData.map(({ promptPerm, label }) => ( ))}
); }; export default AdminSettings;