show list of users in rooms
This commit is contained in:
parent
649bccb01e
commit
398d243eac
@ -8,5 +8,6 @@
|
|||||||
--tertiary-background: #2a2a33;
|
--tertiary-background: #2a2a33;
|
||||||
--quaternary-background: #303a46;
|
--quaternary-background: #303a46;
|
||||||
--selected: #41474f;
|
--selected: #41474f;
|
||||||
|
/* 343a46 */
|
||||||
}
|
}
|
||||||
/* .badge-primary { */
|
/* .badge-primary { */
|
27
front/src/components/User.vue
Normal file
27
front/src/components/User.vue
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { defineProps, PropType } from "vue";
|
||||||
|
import { Address } from "@/store/models/model";
|
||||||
|
import Badge from "./Badge.vue";
|
||||||
|
|
||||||
|
const props = defineProps({ address: Object as PropType<Address> });
|
||||||
|
const value = props.address?.name ? props.address?.name : props.address?.email;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="main">
|
||||||
|
{{ value }}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.main {
|
||||||
|
align-items: center;
|
||||||
|
background-color: var(--quaternary-background);
|
||||||
|
border-radius: 1.6rem;
|
||||||
|
color: var(--primary-text);
|
||||||
|
display: inline-flex;
|
||||||
|
max-width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0.1rem 0.4em;
|
||||||
|
}
|
||||||
|
</style>
|
@ -1,7 +1,7 @@
|
|||||||
// todo optimize
|
// todo optimize
|
||||||
|
|
||||||
export function decodeEmojis(text: string): string {
|
export function decodeEmojis(text: string | undefined): string {
|
||||||
if (!text) return text;
|
if (!text) return "";
|
||||||
const regex = /\\u{([^}]+)}/g;
|
const regex = /\\u{([^}]+)}/g;
|
||||||
const decodedText = text.replace(regex, (_: string, hex: string) => String.fromCodePoint(parseInt(hex, 16)));
|
const decodedText = text.replace(regex, (_: string, hex: string) => String.fromCodePoint(parseInt(hex, 16)));
|
||||||
return decodedText;
|
return decodedText;
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { defineProps } from "vue";
|
import { defineProps, PropType } from "vue";
|
||||||
import Badge from "@/components/Badge.vue";
|
import Badge from "@/components/Badge.vue";
|
||||||
import { RoomType, Address } from "@/store/models/model";
|
import { RoomType, Address, Room } from "@/store/models/model";
|
||||||
import MemberList from "./MemberList.vue";
|
import MemberList from "./MemberList.vue";
|
||||||
|
|
||||||
const props = defineProps({ id: Number, room: Object });
|
const props = defineProps({ id: Number, room: Object as PropType<Room> });
|
||||||
|
|
||||||
const roomTitle = () => {
|
const roomTitle = () => {
|
||||||
const type = props.room?.roomType;
|
const type = props.room?.roomType;
|
||||||
@ -22,21 +22,20 @@ const cc = () => props.room?.members.filter((member: Address) => member.type ==
|
|||||||
<div class="main">
|
<div class="main">
|
||||||
<div class="context">
|
<div class="context">
|
||||||
<div class="infos">
|
<div class="infos">
|
||||||
<Badge :value="RoomType[room?.roomType]" />
|
<Badge :value="RoomType[room?.roomType ?? 0]" />
|
||||||
{{ roomTitle() }}
|
{{ roomTitle() }}
|
||||||
</div>
|
</div>
|
||||||
<div class="action">action: threads message important</div>
|
<div class="action">action: threads message important</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="members" v-if="room?.roomType != RoomType.DM">
|
<div class="members" v-if="room?.roomType != RoomType.DM">
|
||||||
<MemberList v-if="to()?.length > 0" type="to" :members="to()" />
|
<MemberList class="members-list" v-if="to()?.length ?? 0 > 0" type="to" :members="to()" />
|
||||||
<MemberList v-if="cc()?.length > 0" type="cc" :members="cc()" />
|
<MemberList class="members-list" v-if="cc()?.length ?? 0 > 0" type="cc" :members="cc()" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.main {
|
.main {
|
||||||
border-bottom: 1px solid #505050;
|
|
||||||
}
|
}
|
||||||
.context {
|
.context {
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -48,6 +47,11 @@ const cc = () => props.room?.members.filter((member: Address) => member.type ==
|
|||||||
height: 35px;
|
height: 35px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.members-list {
|
||||||
|
padding: 3px 0;
|
||||||
|
margin: 0 5px;
|
||||||
|
border-bottom: 1px solid #505050;
|
||||||
|
}
|
||||||
.members {
|
.members {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,19 +1,36 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import Badge from "@/components/Badge.vue";
|
||||||
|
import User from "@/components/User.vue";
|
||||||
import { Address } from "@/store/models/model";
|
import { Address } from "@/store/models/model";
|
||||||
import { defineProps } from "vue";
|
import { defineProps, PropType } from "vue";
|
||||||
|
|
||||||
const props = defineProps({ type: String, members: Object });
|
const props = defineProps({ type: String, members: Object as PropType<Address[]> });
|
||||||
let emails = "";
|
// const members: Address[] = [];
|
||||||
props.members?.forEach((member: Address) => {
|
|
||||||
emails += member.email + "; ";
|
// for (let i = 0; i < 4; i++) {
|
||||||
});
|
// if (!props.members) continue;
|
||||||
|
// members?.push(props?.members[0]);
|
||||||
|
// }
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
{{ props.type }}:
|
<Badge :value="props.type + ': '" />
|
||||||
{{ emails }}
|
<div class="users">
|
||||||
|
<User class="user" v-for="(member, index) in props?.members" :key="index" :address="member" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped>
|
||||||
|
.main {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.users {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
Loading…
Reference in New Issue
Block a user