import React, { useEffect, useMemo } from 'react'; import { Share2Icon } from 'lucide-react'; import { useForm, Controller } from 'react-hook-form'; import { Permissions } from 'librechat-data-provider'; import { useGetStartupConfig } from 'librechat-data-provider/react-query'; import type { TPromptGroup, TStartupConfig, TUpdatePromptGroupPayload, } from 'librechat-data-provider'; import { OGDialog, OGDialogTitle, OGDialogContent, OGDialogTrigger, OGDialogClose, } from '~/components/ui'; import { useUpdatePromptGroup } from '~/data-provider'; import { Button, Switch } from '~/components/ui'; import { useToastContext } from '~/Providers'; import { useLocalize } from '~/hooks'; type FormValues = { [Permissions.SHARED_GLOBAL]: boolean; }; const SharePrompt = ({ group, disabled }: { group?: TPromptGroup; disabled: boolean }) => { const localize = useLocalize(); const { showToast } = useToastContext(); const updateGroup = useUpdatePromptGroup(); const { data: startupConfig = {} as TStartupConfig, isFetching } = useGetStartupConfig(); const { instanceProjectId } = startupConfig; const groupIsGlobal = useMemo( () => !!(group?.projectIds ?? []).includes(instanceProjectId), [group, instanceProjectId], ); const { control, setValue, getValues, handleSubmit, formState: { isSubmitting }, } = useForm({ mode: 'onChange', defaultValues: { [Permissions.SHARED_GLOBAL]: groupIsGlobal, }, }); useEffect(() => { setValue(Permissions.SHARED_GLOBAL, groupIsGlobal); }, [groupIsGlobal, setValue]); if (!group || !instanceProjectId) { return null; } const onSubmit = (data: FormValues) => { const groupId = group._id ?? ''; if (!groupId || !instanceProjectId) { return; } const payload = {} as TUpdatePromptGroupPayload; if (data[Permissions.SHARED_GLOBAL]) { payload.projectIds = [startupConfig.instanceProjectId]; } else { payload.removeProjectIds = [startupConfig.instanceProjectId]; } updateGroup.mutate({ id: groupId, payload, }); }; return ( {localize('com_ui_share_var', `"${group.name}"`)}
{ const isValid = !(value && groupIsGlobal); if (!isValid) { showToast({ message: localize('com_ui_prompt_already_shared_to_all'), status: 'warning', }); } return isValid; }, }} render={({ field }) => ( )} />
); }; export default SharePrompt;