add: mark all notifications as read/unread

fix: anonymous avatar/username
This commit is contained in:
trisua 2025-05-22 22:54:06 -04:00
parent 37e68079d8
commit 3f6f1eda9f
7 changed files with 118 additions and 10 deletions

View file

@ -9,13 +9,43 @@
<span>{{ text "notifs:label.notifications" }}</span>
</span>
<button
onclick="trigger('me::clear_notifs')"
class="small red quaternary"
>
{{ icon "bomb" }}
<span>{{ text "notifs:action.clear" }}</span>
</button>
<div class="flex gap-2">
<button
onclick="trigger('me::clear_notifs')"
class="small red quaternary"
>
{{ icon "bomb" }}
<span>{{ text "notifs:action.clear" }}</span>
</button>
<div class="dropdown">
<button
class="small quaternary"
onclick="trigger('atto::hooks::dropdown', [event])"
exclude="dropdown"
>
{{ icon "ellipsis" }}
</button>
<div class="inner">
<button onclick="mark_all_as_read(true)">
{{ icon "bookmark-check" }}
<span
>{{ text "notifs:label.mark_all_as_read"
}}</span
>
</button>
<button onclick="mark_all_as_read(false)">
{{ icon "bookmark-x" }}
<span
>{{ text "notifs:label.mark_all_as_unread"
}}</span
>
</button>
</div>
</div>
</div>
</div>
<div class="card tertiary flex flex-col gap-4">
@ -24,4 +54,33 @@
</div>
</div>
</main>
<script>
async function mark_all_as_read(read) {
if (
!(await trigger("atto::confirm", [
"Are you sure you want to do this?",
]))
) {
return;
}
fetch("/api/v1/notifications/all/read_status", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
read,
}),
})
.then((res) => res.json())
.then((res) => {
trigger("atto::toast", [
res.ok ? "success" : "error",
res.message,
]);
});
}
</script>
{% endblock %}

View file

@ -89,7 +89,7 @@
{%- endif %} {% endfor %} {% for question in questions %}
<!-- prettier-ignore -->
<div class="card-nest">
{{ components::question(question=question[0], owner=question[1]) }}
{{ components::question(question=question[0], owner=question[1], profile=user) }}
<form
class="card flex flex-col gap-2"