keanu-weblite/src/components/ProfileInfoPopup.vue
2025-05-19 10:23:50 +02:00

238 lines
No EOL
6 KiB
Vue

<template>
<v-dialog v-model="showDialog" content-class="profile-info-popup" class="ma-0 pa-0">
<v-card flat>
<v-card-text>
<div class="you-are">{{ $t("profile_info_popup.you_are") }}</div>
<v-container fluid>
<v-row>
<v-col :class="['username', { 'editable': editDisplayName }]" cols="pa-2" ref="username">
<div v-if="$matrix.currentUser.is_guest">
<i18n-t keypath="profile_info_popup.identity_temporary" tag="span">
<template v-slot:displayName>
<input v-model="displayName"
@keyup.enter="$event => $event.target.blur()"
@blur="
updateDisplayName($event.target.value);
editDisplayName = !editDisplayName;
" @focus="editDisplayName = !editDisplayName" />
</template>
</i18n-t>
</div>
<div v-else>
<i18n-t keypath="profile_info_popup.identity" tag="span">
<template v-slot:displayName>
<input
v-model="displayName"
@keyup.enter="$event => $event.target.blur()"
@blur="updateDisplayName($event.target.value);editDisplayName = !editDisplayName;"
@focus="editDisplayName = !editDisplayName"
/>
</template>
</i18n-t>
</div>
</v-col>
<v-col cols="auto" class="pa-2">
<v-avatar class="avatar-32" size="32" color="#e0e0e0" @click.stop="viewProfile">
<AuthedImage v-if="userAvatar" :src="userAvatar" />
<span v-else class="text-white">{{ userAvatarLetter }}</span>
</v-avatar>
</v-col>
</v-row>
</v-container>
<div class="more-container">
<div class="want_more">
🙌 {{ $t("profile_info_popup.want_more") }}
</div>
<i18n-t keypath="profile_info_popup.powered_by" tag="div">
<template v-slot:product>{{ product }}</template>
<template v-slot:productLink>
<a :href="'//' + productLink">{{ productLink }}</a>
</template>
</i18n-t>
<div class="text-end" v-if="!$config.hide_add_room_on_home">
<v-btn id="btn-new-room" class="new_room" text @click="createRoom">
{{ $t("profile_info_popup.new_room") }}
</v-btn>
</div>
</div>
<a href="./ua.html" class="review-ua-link">{{ $t("profile_info_popup.review_ua") }}</a>
</v-card-text>
</v-card>
</v-dialog>
</template>
<script>
import profileInfoMixin from "./profileInfoMixin";
import AuthedImage from "./AuthedImage.vue";
export default {
name: "ProfileInfoPopup",
mixins: [profileInfoMixin],
components: { AuthedImage },
props: {
show: {
type: Boolean,
default: function () {
return false;
},
},
},
data() {
return {
showDialog: false,
editDisplayName: false,
};
},
computed: {
product() {
return this.$config.appName;
},
productLink() {
return this.$config.productLink;
},
},
watch: {
show: {
handler(newVal, ignoredOldVal) {
this.showDialog = newVal;
},
},
showDialog() {
if (!this.showDialog) {
this.$emit("close");
}
},
},
methods: {
viewProfile() {
this.showDialog = false;
this.$navigation.push({ name: "Profile" }, 1);
},
createRoom() {
this.showDialog = false;
this.$navigation.push({ name: "Create" });
},
},
};
</script>
<style lang="scss">
@import "@/assets/css/chat.scss";
@import 'vuetify/settings';
.profile-info-popup {
font-family: "Inter", sans-serif !important;
font-size: 16px;
position: fixed;
margin: 0px;
top: 70px;
right: 10px;
[dir="rtl"] & {
right: inherit;
left: unset;
}
border-radius: 40px;
width: 95%;
.you-are {
padding-top: 20px;
font-size: 12px;
}
.username {
border-radius: 4px;
background-color: #f5f5f5;
&.editable {
background-color: unset;
box-shadow: 0px 2px 6px rgb(0 0 0 / 8%);
}
input {
width: 100%;
&:focus {
outline: none;
}
}
}
.more-container {
border-radius: 10px;
background-color: #f5f5f5;
padding: 20px;
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-size: 14 * $chat-text-size;
line-height: 117%;
letter-spacing: 0.4px;
color: #000B16;
margin-top: 18px;
a {
color: #000B16 !important;
}
.want_more {
font-family: "Poppins", sans-serif;
font-weight: 700;
font-size: 13 * $chat-text-size;
color: #0e252d;
margin-bottom: 9px;
}
.new_room {
margin-top: 16px;
height: 27px;
border-radius: 13.5px;
border: 1px solid #000000;
}
.new_room .v-btn__content {
font-family: 'Inter', sans-serif;
font-style: normal;
font-weight: 700;
font-size: 10 * $chat-text-size !important;
line-height: 133%;
letter-spacing: 0.34px;
text-transform: uppercase;
color: #181719;
}
}
.review-ua-link {
margin-top: 10px;
text-decoration: none;
color: #181719;
font-family: 'Inter', sans-serif;
font-style: normal;
font-weight: 400;
font-size: 10 * $chat-text-size !important;
}
@media #{map-get($display-breakpoints, 'sm-and-up')} {
width: 70%;
}
@media #{map-get($display-breakpoints, 'lg-and-up')} {
overflow: unset;
width: $main-desktop-width;
position: absolute;
top: 70px;
right: unset;
width: $dialog-desktop-width;
&::before {
position: absolute;
top: -18px;
right: 40px;
}
.v-card {
border-radius: 20px;
}
}
}
</style>