import React, { FC, Fragment, useCallback } from 'react'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import useSWR from 'swr'; import { Button } from '@gitroom/react/form/button'; import clsx from 'clsx'; import { useModals } from '@gitroom/frontend/components/layout/new-modal'; import { TopTitle } from '@gitroom/frontend/components/launches/helpers/top.title.component'; import { array, boolean, object, string } from 'yup'; import { FormProvider, useForm } from 'react-hook-form'; import { yupResolver } from '@hookform/resolvers/yup'; import { CopilotTextarea } from '@copilotkit/react-textarea'; import { Select } from '@gitroom/react/form/select'; import { useToaster } from '@gitroom/react/toaster/toaster'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; import { deleteDialog } from '@gitroom/react/helpers/delete.dialog'; export const SignaturesComponent: FC<{ appendSignature?: (value: string) => void; }> = (props) => { const { appendSignature } = props; const fetch = useFetch(); const modal = useModals(); const toaster = useToaster(); const load = useCallback(async () => { return (await fetch('/signatures')).json(); }, []); const { data, mutate } = useSWR('signatures', load); const addSignature = useCallback( (data?: any) => () => { modal.openModal({ title: data ? 'Edit Signature' : 'Add Signature', withCloseButton: true, children: , }); }, [mutate] ); const deleteSignature = useCallback( (data: any) => async () => { if ( await deleteDialog( t( 'are_you_sure_you_want_to_delete', `Are you sure you want to delete?`, { name: data.content.slice(0, 15) + '...' } ) ) ) { await fetch(`/signatures/${data.id}`, { method: 'DELETE', }); mutate(); toaster.show('Signature deleted successfully', 'success'); } }, [] ); const t = useT(); return (

{t('signatures', 'Signatures')}

{t( 'you_can_add_signatures_to_your_account_to_be_used_in_your_posts', 'You can add signatures to your account to be used in your posts.' )}
{!!data?.length && (
{t('content', 'Content')}
{t('auto_add', 'Auto Add?')}
{!!appendSignature && (
{t('actions', 'Actions')}
)}
{t('edit', 'Edit')}
{t('delete', 'Delete')}
{data?.map((p: any) => (
{p.content.slice(0, 15) + '...'}
{p.autoAdd ? 'Yes' : 'No'}
{!!appendSignature && (
)}
))}
)}
); }; const details = object().shape({ content: string().required(), autoAdd: boolean().required(), }); const AddOrRemoveSignature: FC<{ data?: any; reload: () => void; }> = (props) => { const { data, reload } = props; const toast = useToaster(); const fetch = useFetch(); const form = useForm({ resolver: yupResolver(details), values: { content: data?.content || '', autoAdd: data?.autoAdd || false, }, }); const text = form.watch('content'); const autoAdd = form.watch('autoAdd'); const modal = useModals(); const callBack = useCallback( async (values: any) => { await fetch(data?.id ? `/signatures/${data.id}` : '/signatures', { method: data?.id ? 'PUT' : 'POST', body: JSON.stringify(values), }); toast.show( data?.id ? 'Signature updated successfully' : 'Signature added successfully', 'success' ); modal.closeCurrent(); reload(); }, [data, modal] ); const t = useT(); return (
{ form.setValue('content', e.target.value); }} placeholder="Write your signature..." autosuggestionsConfig={{ textareaPurpose: `Assist me in writing social media signature`, chatApiConfigs: {}, }} />
); };