-
Notifications
You must be signed in to change notification settings - Fork 113
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Co-authored-by: Benjamin Canac <[email protected]>
- Loading branch information
1 parent
eee30ce
commit 550db84
Showing
9 changed files
with
748 additions
and
200 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
<script setup lang="ts"> | ||
import { format } from 'date-fns' | ||
import type { Mail } from '~/types' | ||
defineProps<{ | ||
mail: Mail | ||
}>() | ||
const emits = defineEmits(['close']) | ||
const dropdownItems = [[{ | ||
label: 'Mark as unread', | ||
icon: 'i-lucide-check-circle' | ||
}, { | ||
label: 'Mark as important', | ||
icon: 'i-lucide-triangle-alert' | ||
}], [{ | ||
label: 'Star thread', | ||
icon: 'i-lucide-star' | ||
}, { | ||
label: 'Mute thread', | ||
icon: 'i-lucide-circle-pause' | ||
}]] | ||
const toast = useToast() | ||
const reply = ref('') | ||
const loading = ref(false) | ||
function onSubmit() { | ||
loading.value = true | ||
setTimeout(() => { | ||
reply.value = '' | ||
toast.add({ | ||
title: 'Email sent', | ||
description: 'Your email has been sent successfully', | ||
icon: 'i-lucide-check-circle', | ||
color: 'success' | ||
}) | ||
loading.value = false | ||
}, 1000) | ||
} | ||
</script> | ||
|
||
<template> | ||
<UDashboardPanel id="inbox-2"> | ||
<UDashboardNavbar :title="mail.subject" :toggle="false"> | ||
<template #leading> | ||
<UButton | ||
icon="i-lucide-x" | ||
color="neutral" | ||
variant="ghost" | ||
class="-ms-1.5" | ||
@click="emits('close')" | ||
/> | ||
</template> | ||
|
||
<template #right> | ||
<UTooltip text="Archive"> | ||
<UButton | ||
icon="i-lucide-inbox" | ||
color="neutral" | ||
variant="ghost" | ||
/> | ||
</UTooltip> | ||
|
||
<UTooltip text="Reply"> | ||
<UButton icon="i-lucide-reply" color="neutral" variant="ghost" /> | ||
</UTooltip> | ||
|
||
<UDropdownMenu :items="dropdownItems"> | ||
<UButton | ||
icon="i-lucide-ellipsis-vertical" | ||
color="neutral" | ||
variant="ghost" | ||
/> | ||
</UDropdownMenu> | ||
</template> | ||
</UDashboardNavbar> | ||
|
||
<div class="flex flex-col sm:flex-row justify-between gap-1 p-4 sm:px-6 border-b border-(--ui-border)"> | ||
<div class="flex items-start gap-4 sm:my-1.5"> | ||
<UAvatar | ||
v-bind="mail.from.avatar" | ||
:alt="mail.from.name" | ||
size="3xl" | ||
/> | ||
|
||
<div class="min-w-0"> | ||
<p class="font-semibold text-(--ui-text-highlighted)"> | ||
{{ mail.from.name }} | ||
</p> | ||
<p class="text-(--ui-text-muted)"> | ||
{{ mail.from.email }} | ||
</p> | ||
</div> | ||
</div> | ||
|
||
<p class="max-sm:pl-16 text-(--ui-text-muted) text-sm sm:mt-2"> | ||
{{ format(new Date(mail.date), 'dd MMM HH:mm') }} | ||
</p> | ||
</div> | ||
|
||
<div class="flex-1 p-4 sm:p-6 overflow-y-auto"> | ||
<p class="whitespace-pre-wrap"> | ||
{{ mail.body }} | ||
</p> | ||
</div> | ||
|
||
<div class="pb-4 px-4 sm:px-6 shrink-0"> | ||
<UCard variant="subtle" class="mt-auto" :ui="{ header: 'flex items-center gap-1.5 text-(--ui-text-dimmed)' }"> | ||
<template #header> | ||
<UIcon name="i-lucide-reply" class="size-5" /> | ||
|
||
<span class="text-sm truncate"> | ||
Reply to {{ mail.from.name }} ({{ mail.from.email }}) | ||
</span> | ||
</template> | ||
|
||
<form @submit.prevent="onSubmit"> | ||
<UTextarea | ||
v-model="reply" | ||
color="neutral" | ||
variant="none" | ||
required | ||
autoresize | ||
placeholder="Write your reply..." | ||
:rows="4" | ||
:disabled="loading" | ||
class="w-full" | ||
:ui="{ base: 'p-0 resize-none' }" | ||
/> | ||
|
||
<div class="flex items-center justify-between"> | ||
<UTooltip text="Attach file"> | ||
<UButton | ||
color="neutral" | ||
variant="ghost" | ||
icon="i-lucide-paperclip" | ||
/> | ||
</UTooltip> | ||
|
||
<div class="flex items-center justify-end gap-2"> | ||
<UButton | ||
color="neutral" | ||
variant="ghost" | ||
label="Save draft" | ||
/> | ||
<UButton | ||
type="submit" | ||
color="neutral" | ||
:loading="loading" | ||
label="Send" | ||
icon="i-lucide-send" | ||
/> | ||
</div> | ||
</div> | ||
</form> | ||
</UCard> | ||
</div> | ||
</UDashboardPanel> | ||
</template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.