import type { CreateCommentDto, CommentDto } from '~~/.api-client' import { useCommentStore } from '~~/stores/useCommentStore' import { useUserStore } from '~~/stores/useUserStore' import { useLogger } from '../useLogger' export function useCommentTextarea(applicationFormId: string) { const commentStore = useCommentStore() const { createComment, updateComment } = commentStore const userStore = useUserStore() const { user } = storeToRefs(userStore) const isEditingComment = ref(false) const currentEditedComment = ref(null) const commentTextAreaValue = ref('') const toast = useToast() const { t: $t } = useI18n() const logger = useLogger().withTag('commentTextarea') async function submitComment(formElementId: string) { const newCommentDto: CreateCommentDto = { message: commentTextAreaValue.value } try { await createComment(applicationFormId, formElementId, newCommentDto) commentTextAreaValue.value = '' toast.add({ title: $t('comments.created'), color: 'success' }) } catch (e) { toast.add({ title: $t('comments.createError'), color: 'error' }) logger.error('Error creating comment:', e) } } async function updateEditComment() { if (!currentEditedComment.value) return const updatedComment: CommentDto = { ...currentEditedComment.value, message: commentTextAreaValue.value } try { await updateComment(currentEditedComment.value.id, updatedComment) commentTextAreaValue.value = '' currentEditedComment.value = null isEditingComment.value = false toast.add({ title: $t('comments.updated'), color: 'success' }) } catch (e) { toast.add({ title: $t('comments.updateError'), color: 'error' }) logger.error('Error updating comment:', e) } } function editComment(comment: CommentDto) { isEditingComment.value = true currentEditedComment.value = comment commentTextAreaValue.value = comment.message || '' } function cancelEditComment() { isEditingComment.value = false currentEditedComment.value = null commentTextAreaValue.value = '' } function isCommentByUser(comment: CommentDto) { return comment.createdBy.keycloakId === user.value?.keycloakId } return { commentTextAreaValue, submitComment, updateEditComment, editComment, cancelEditComment, isEditingComment, isCommentByUser } }