Merge branch 'notifications'

This commit is contained in:
isUnknown 2024-12-19 11:12:11 +01:00
commit caf6f721fb
34 changed files with 671 additions and 417 deletions

View file

@ -117,7 +117,7 @@ const { page } = storeToRefs(usePageStore());
const unreadNotificationsCount = computed(() => {
if (!user.value) return undefined;
const count = user.value.notifications.filter(
(notification) => notification.isRead
(notification) => notification.isread != "true"
).length;
if (count === 0) return undefined;
return count;
@ -164,7 +164,7 @@ function hasUnreadNotification(project) {
if (!user.value) return false;
return user.value.notifications.some((notification) => {
return (
notification.isRead != true &&
notification.isread != "true" &&
project.uri.includes(notification.location.project.uri)
);
});

View file

@ -2,7 +2,7 @@
<article
:id="`comment-${comment.id}`"
class="comment | flow"
:data-status="status"
:data-status="getStatus"
@click="read()"
>
<header>
@ -16,7 +16,7 @@
<time
class="comment__date"
:datetime="dayjs(comment.date).format('YYYY-MM-DD')"
>{{ formatDate() }}</time
>{{ formatDate(comment.date) }}</time
>
</p>
</header>
@ -70,11 +70,11 @@ const api = useApiStore();
const dialog = useDialogStore();
// Functions
const status = computed(() => {
const getStatus = computed(() => {
const correspondingNotification = userStore.notifications.find(
(notification) => notification.id === comment.id
);
if (correspondingNotification && !correspondingNotification.isRead) {
if (correspondingNotification && correspondingNotification.isread != "true") {
return "unread";
}
return undefined;
@ -101,9 +101,10 @@ function closeAddField() {
}
async function read() {
if (status.value !== "unread") return;
if (getStatus.value !== "unread") return;
try {
const newNotification = await api.readNotification(comment.id);
console.log(newNotification);
userStore.readNotification(comment.id);
} catch (error) {
console.log("Erreur lors de la lecture de la notification : ", error);
@ -112,9 +113,10 @@ async function read() {
async function deleteComment(event) {
event.stopPropagation();
console.log(comment);
const newFile = await api.deleteComment(comment);
dialog.updateFile(newFile);
if (comment.parentId) {
if (comment.type === "comment-reply") {
emits("close:comment");
}
}

View file

@ -178,7 +178,7 @@ function handleSubmit(event = null) {
}
const date = dayjs().format();
const newComment = {
path: route.fullPath,
dialogUri: route.fullPath,
fileName: openedFile ? openedFile.value.name : false,
userUuid: user.uuid,
text: draftComment.value.text,

View file

@ -0,0 +1,46 @@
<template>
<article
class="notification | bg-white rounded-lg | p-16 | flow"
:data-status="notification.isread == 'true' ? 'read' : 'unread'"
data-type="comment"
@click="router.push(notification.location.dialoguri + '&comments=true')"
>
<header>
<p class="flex">
<strong
class="notification__type | font-medium text-primary"
data-icon="comment"
>Commentaire</strong
>
<span class="notification__client | text-grey-700">{{
notification.location.project.title
}}</span>
<time
datetime=""
class="notification__date | text-grey-700 | ml-auto"
>{{ formatDate(notification) }}</time
>
</p>
</header>
<p
v-if="notification.type"
class="notification__body | text-md font-medium | line-clamp"
>
{{
notification.author.name
? notification.author.name
: notification.author.email
}}
: {{ notification.text }}
</p>
</article>
</template>
<script setup>
import { useRouter } from "vue-router";
import { useNotificationsStore } from "../../stores/notifications";
const router = useRouter();
const { notification } = defineProps({ notification: Object });
const { formatDate } = useNotificationsStore();
</script>

View file

@ -0,0 +1,45 @@
<template>
<article
class="notification | bg-white rounded-lg | p-16 | flow"
:data-status="notification.isread == 'true' ? 'read' : 'unread'"
data-type="content"
@click="
read(notification);
router.push(notification.location.page.uri);
"
title="Aller au contenu"
>
<header>
<p class="flex">
<strong
class="notification__type | font-medium text-primary"
data-icon="content"
>Contenu</strong
>
<span class="notification__client | text-grey-700">{{
notification.location.project.title
}}</span>
<time
datetime=""
class="notification__date | text-grey-700 | ml-auto"
>{{ formatDate(notification) }}</time
>
</p>
</header>
<p
v-if="notification.type"
class="notification__body | text-md font-medium | line-clamp"
>
{{ notification.text }}
</p>
</article>
</template>
<script setup>
import { useRouter } from "vue-router";
import { useNotificationsStore } from "../../stores/notifications";
const router = useRouter();
const { notification } = defineProps({ notification: Object });
const { formatDate, read } = useNotificationsStore();
</script>

View file

@ -0,0 +1,51 @@
<template>
<article
class="notification | bg-white rounded-lg | p-16 | flow"
:data-status="notification.isread == 'true' ? 'read' : 'unread'"
data-type="comment"
@click="router.push(notification.location.dialoguri + '&comments=true')"
>
<header>
<p class="flex">
<strong
class="notification__type | font-medium text-primary"
data-icon="comment"
>Réponse à
{{
notification.location.parent.author.name
? notification.location.parent.author.name
: notification.location.parent.author.email
}}</strong
>
<span class="notification__client | text-grey-700">{{
notification.location.project.title
}}</span>
<time
datetime=""
class="notification__date | text-grey-700 | ml-auto"
>{{ formatDate(notification) }}</time
>
</p>
</header>
<p
v-if="notification.type"
class="notification__body | text-md font-medium | line-clamp"
>
{{
notification.author.name
? notification.author.name
: notification.author.email
}}
: {{ notification.text }}
</p>
</article>
</template>
<script setup>
import { useRouter } from "vue-router";
import { useNotificationsStore } from "../../stores/notifications";
const router = useRouter();
const { notification } = defineProps({ notification: Object });
const { formatDate } = useNotificationsStore();
</script>

View file

@ -36,6 +36,11 @@ const draftComment = ref(null);
const isViewerDisabled = ref(false);
watch(openedFile, () => {
removeCommentMarkers();
setCommentMarkers();
});
watch(isCommentsOpen, (newVal) => {
if (newVal) {
setCommentMarkers();
@ -45,6 +50,8 @@ watch(isCommentsOpen, (newVal) => {
});
watch(openedFile, (newVal) => {
if (!location.href.includes("virtual-sample")) return;
isViewerDisabled.value = true;
setTimeout(() => {

View file

@ -223,7 +223,6 @@ function getFrontView(track) {
const extension = track.files[0].name.split(".")[1];
const frontViewName = "0_" + xFrontView + "." + extension;
const frontView = track.files.find((file) => file.name === frontViewName);
console.log(frontView);
return frontView;
}
</script>