add actions header room

This commit is contained in:
grimhilt 2023-05-17 18:00:15 +02:00
parent 737a22e1f8
commit 7be2e84691
5 changed files with 20 additions and 13 deletions

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 3V5H17V11L19 14V16H13V23H11V16H5V14L7 11V5H6V3H18ZM9 5V11.6056L7.4037 14H16.5963L15 11.6056V5H9Z"></path></svg>

After

Width:  |  Height:  |  Size: 184 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.8273 1.68994L22.3126 10.1752L20.8984 11.5894L20.1913 10.8823L15.9486 15.125L15.2415 18.6605L13.8273 20.0747L9.58466 15.8321L4.63492 20.7818L3.2207 19.3676L8.17045 14.4179L3.92781 10.1752L5.34202 8.76101L8.87756 8.0539L13.1202 3.81126L12.4131 3.10416L13.8273 1.68994ZM14.5344 5.22548L9.86358 9.89631L7.0417 10.4607L13.5418 16.9608L14.1062 14.1389L18.7771 9.46812L14.5344 5.22548Z"></path></svg>

After

Width:  |  Height:  |  Size: 466 B

View File

@ -36,6 +36,8 @@ const classes = () => props.classes?.split(",") ?? "";
img { img {
padding: 1px; padding: 1px;
min-width: 26px;
min-height: 26px;
filter: var(--svg-primary-text); filter: var(--svg-primary-text);
&.danger { &.danger {
filter: var(--svg-danger); filter: var(--svg-danger);

View File

@ -31,4 +31,7 @@ export default {
deleteEverywhere(data: { mailboxId: number; messageId: number }) { deleteEverywhere(data: { mailboxId: number; messageId: number }) {
return API().post(`/message/delete`, data); return API().post(`/message/delete`, data);
}, },
deleteRoom(id: number) {
return API().post(`/room/delete`, id);
},
}; };

View File

@ -4,6 +4,7 @@ import Badge from "@/components/Badge.vue";
import SvgLoader from "@/components/utils/SvgLoader.vue"; import SvgLoader from "@/components/utils/SvgLoader.vue";
import { RoomType, Address, Room } from "@/store/models/model"; import { RoomType, Address, Room } from "@/store/models/model";
import MemberList from "./MemberList.vue"; import MemberList from "./MemberList.vue";
import imapAPI from "@/services/imapAPI";
const props = defineProps({ id: Number, room: Object as PropType<Room> }); const props = defineProps({ id: Number, room: Object as PropType<Room> });
@ -15,33 +16,37 @@ const roomTitle = () => {
return props.room?.roomName; return props.room?.roomName;
}; };
const handleDelete = () => {
if (props.room?.id) {
imapAPI.deleteRoom(props.room.id);
}
// todo loading, delete
};
// todo remove us from list // todo remove us from list
const to = () => props.room?.members.filter((member: Address) => member.type == "to"); const to = () => props.room?.members.filter((member: Address) => member.type == "to");
const cc = () => props.room?.members.filter((member: Address) => member.type == "cc"); const cc = () => props.room?.members.filter((member: Address) => member.type == "cc");
</script> </script>
<template> <template>
<div class="main"> <div>
<div class="context"> <div class="context">
<div class="infos"> <div class="infos">
<Badge :value="RoomType[room?.roomType ?? 0]" /> <Badge :value="RoomType[room?.roomType ?? 0]" />
{{ roomTitle() }} {{ roomTitle() }}
</div> </div>
<div class="action"> <div class="action">
action: threads message important <SvgLoader svg="list-unordered" classes="selectable" v-tooltip="{ text: 'Thread list' }" />
<SvgLoader svg="pushpin-line" classes="selectable" v-tooltip="{ text: 'Important messages' }" />
<SvgLoader <SvgLoader
svg="delete-bin-4-line" svg="delete-bin-4-line"
@click=" @click="handleDelete()"
() => {
console.log('clicked');
}
"
classes="danger,selectable" classes="danger,selectable"
v-tooltip="{ text: 'Delete room' }" v-tooltip="{ text: 'Delete room' }"
/> />
</div> </div>
</div> </div>
<div class="members" v-if="room?.roomType != RoomType.DM"> <div v-if="room?.roomType != RoomType.DM">
<MemberList class="members-list" v-if="to()?.length ?? 0 > 0" type="to" :members="to()" /> <MemberList class="members-list" v-if="to()?.length ?? 0 > 0" type="to" :members="to()" />
<MemberList class="members-list" v-if="cc()?.length ?? 0 > 0" type="cc" :members="cc()" /> <MemberList class="members-list" v-if="cc()?.length ?? 0 > 0" type="cc" :members="cc()" />
</div> </div>
@ -49,8 +54,6 @@ const cc = () => props.room?.members.filter((member: Address) => member.type ==
</template> </template>
<style scoped> <style scoped>
.main {
}
.context { .context {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@ -65,9 +68,6 @@ const cc = () => props.room?.members.filter((member: Address) => member.type ==
padding: 3px 5px; padding: 3px 5px;
border-bottom: 1px solid var(--border-color); border-bottom: 1px solid var(--border-color);
} }
.members {
}
.infos { .infos {
margin-left: 15px; margin-left: 15px;
} }