<template>
<div class="flex-col text-base flex-1" ref="commentBoxRef">
<div class="mb-1 ml-0.5 flex items-center justify-between">
<div class="text-gray-600 flex items-center gap-2">
<Avatar
size="md"
:label="commenter"
:image="getUser(commentedBy).user_image"
/>
<p>
<span class="font-medium text-gray-800">{{ commenter }}</span>
<span> added a comment</span>
</p>
</div>
<div class="flex items-center gap-1">
<Tooltip :text="dateFormat(creation, dateTooltipFormat)">
<span class="pl-0.5 text-sm text-gray-600">
{{ timeAgo(creation) }}
</span>
</Tooltip>
</div>
</div>
<div class="rounded bg-gray-50 transition-colors px-4 py-3">
<TextEditor
ref="editorRef"
:editor-class="['prose-f shrink text-p-sm transition-all duration-300', getFontFamily(_content)]"
:content="_content"
:editable="editable"
@change="(event: string) => { _content = event }"
>
<template #bottom v-if="editable">
<div class="flex flex-row-reverse gap-2">
<Button label="Save" @click="handleSaveComment" variant="solid" />
<Button label="Discard" @click="handleDiscard" />
</div>
</template>
</TextEditor>
</div>
</div>
</template>
<script setup lang="ts">
import { Avatar, TextEditor, Tooltip, Button, createResource, toast } from "frappe-ui";
import { PropType, computed, ref } from "vue";
import { useUserStore } from "@/stores/user";
import { CommentActivity } from "@/types";
import { dateFormat, timeAgo, getFontFamily } from "@/utils";
const props = defineProps({
activity: {
type: Object as PropType<CommentActivity>,
required: true,
},
});
const { getUser } = useUserStore();
const { name, creation, content, commenter, commentedBy } = props.activity;
const emit = defineEmits(["update"]);
const editable = ref(false);
const _content = ref(content);
const commentBoxRef = ref(null);
const editorRef = ref(null);
function handleSaveComment() {
updateComment.submit(
{
doctype: "HD Ticket Comment",
name: name,
fieldname: "content",
value: _content.value,
},
{
onSuccess: () => {
editable.value = false;
emit("update");
toast.success("Comment updated");
},
}
);
}
const updateComment = createResource({
url: "frappe.client.set_value",
});
</script>