diff --git a/src/components/user_card/user_card.js b/src/components/user_card/user_card.js index ca18cbfca..e80ee91de 100644 --- a/src/components/user_card/user_card.js +++ b/src/components/user_card/user_card.js @@ -15,7 +15,7 @@ import RichContent from 'src/components/rich_content/rich_content.jsx' import UserTimedFilterModal from 'src/components/user_timed_filter_modal/user_timed_filter_modal.vue' import Checkbox from 'src/components/checkbox/checkbox.vue' import EmojiInput from 'src/components/emoji_input/emoji_input.vue' -import Modal from 'src/components/modal/modal.vue' +import DialogModal from 'src/components/dialog_modal/dialog_modal.vue' import ImageCropper from 'src/components/image_cropper/image_cropper.vue' import localeService from 'src/services/locale/locale.service.js' @@ -37,8 +37,6 @@ import { faExpandAlt, faBirthdayCake, faSave, - faChevronRight, - faChevronDown, faClockRotateLeft } from '@fortawesome/free-solid-svg-icons' @@ -55,8 +53,6 @@ library.add( faTimes, faExpandAlt, faBirthdayCake, - faChevronRight, - faChevronDown, faClockRotateLeft ) @@ -74,7 +70,7 @@ export default { 'hasNoteEditor' ], components: { - Modal, + DialogModal, UserAvatar, Checkbox, RemoteFollow, @@ -100,22 +96,27 @@ export default { muteExpiryUnit: 'minutes', // Editable stuff + editImage: false, + newName: user.name_unescaped, editingName: false, - editImage: false, - newAvatar: '', - newAvatarFile: null, - newBanner: '', - newBannerFile: null, - newActorType: user.actor_type, + newBio: unescape(user.description), editingBio: false, + + newAvatar: null, + newAvatarFile: null, + + newBanner: null, + newBannerFile: null, + + newActorType: user.actor_type, newBirthday: user.birthday, newShowBirthday: user.show_birthday, - newCoverPhoto: user.cover_photo, + newShowRole: user.show_role, + newFields: user.fields?.map(field => ({ name: field.name, value: field.value })), editingFields: false, - newShowRole: user.show_role, } }, created () { @@ -248,24 +249,20 @@ export default { // Editable stuff avatarImgSrc () { - const src = this.newAvatar - return (!src) ? (this.user.profile_image_url_original || this.defaultAvatar) : src + const currentUrl = this.user.profile_image_url_original || this.defaultAvatar + const newUrl = this.newAvatar === '' ? this.defaultAvatar : this.newAvatar + return (this.newAvatar === null) ? currentUrl : newUrl }, bannerImgSrc () { - const src = this.newBanner - return (!src) ? (this.user.cover_photo || this.defaultBanner) : src + const currentUrl = this.user.cover_photo || this.defaultBanner + const newUrl = this.newBanner === '' ? this.defaultBanner : this.newBanner + return (this.newBanner === null) ? currentUrl : newUrl }, defaultAvatar () { - if (this.isDefaultAvatar) { - return this.$store.state.instance.server + this.$store.state.instance.defaultAvatar - } - return this.user.profile_image_url + return this.$store.state.instance.server + this.$store.state.instance.defaultAvatar }, defaultBanner () { - if (this.isDefaultBanner) { - return this.$store.state.instance.server + this.$store.state.instance.defaultBanner - } - return this.user.cover_photo + return this.$store.state.instance.server + this.$store.state.instance.defaultBanner }, isDefaultAvatar () { const baseAvatar = this.$store.state.instance.defaultAvatar @@ -366,24 +363,6 @@ export default { changeBanner () { this.editImage = 'banner' }, - resetAvatar () { - const confirmed = window.confirm(this.$t('settings.reset_avatar_confirm')) - if (confirmed) { - this.submitAvatar(undefined, '') - } - }, - resetBanner () { - const confirmed = window.confirm(this.$t('settings.reset_banner_confirm')) - if (confirmed) { - this.submitBanner('') - } - }, - resetBackground () { - const confirmed = window.confirm(this.$t('settings.reset_background_confirm')) - if (confirmed) { - this.submitBackground('') - } - }, submitImage ({ canvas, file }) { if (canvas) { return canvas.toBlob((data) => this.submitImage({ canvas: null, file: data })) @@ -407,6 +386,16 @@ export default { reader.readAsDataURL(file) }, + resetImage () { + if (this.editImage === 'avatar') { + this.newAvatar = '' + this.newAvatarFile = '' + } else { + this.newBanner = '' + this.newBannerFile = '' + } + this.editImage = false + }, addField () { if (this.newFields.length < this.maxFields) { this.newFields.push({ name: '', value: '' }) @@ -423,21 +412,24 @@ export default { cancelImageText () { return }, - resetNews () { + resetState () { const user = this.$store.state.users.currentUser this.newName = user.name_unescaped - this.newAvatar = '' - this.newAvatarFile = null - this.newBanner = '' - this.newBannerFile = null - this.newActorType = user.actor_type this.newBio = unescape(user.description) + + this.newAvatar = null + this.newAvatarFile = null + + this.newBanner = null + this.newBannerFile = null + + this.newActorType = user.actor_type this.newBirthday = user.birthday this.newShowBirthday = user.show_birthday - this.newCoverPhoto = user.cover_photo - this.newFields = user.fields.map(field => ({ name: field.name, value: field.value })) this.newShowRole = user.show_role + + this.newFields = user.fields.map(field => ({ name: field.name, value: field.value })) }, updateProfile () { const params = { @@ -455,11 +447,11 @@ export default { params.actor_type = this.actorType } - if (this.newAvatar) { + if (this.newAvatarFile !== null) { params.avatar = this.newAvatarFile } - if (this.newBanner) { + if (this.newBannerFile !== null) { params.header = this.newBannerFile } @@ -474,7 +466,7 @@ export default { merge(this.newFields, user.fields) this.$store.commit('addNewUsers', [user]) this.$store.commit('setCurrentUser', user) - this.resetNews() + this.resetState() }) .catch((error) => { this.displayUploadError(error) diff --git a/src/components/user_card/user_card.scss b/src/components/user_card/user_card.scss index d8e6e82fb..84e103aec 100644 --- a/src/components/user_card/user_card.scss +++ b/src/components/user_card/user_card.scss @@ -410,7 +410,7 @@ .user-interactions { position: relative; display: grid; - grid-template-columns: repeat(auto-fit, minmax(7.5em, 20%)); + grid-template-columns: repeat(auto-fit, minmax(5em, 40%)); grid-gap: 0.6em; max-width: 98vw; margin-bottom: 0.6em; @@ -568,11 +568,9 @@ object-fit: contain; } - .images-container { - display: grid; - margin: 1em; - grid-template-columns: 1fr 5em 1fr; - grid-template-rows: 20em; + .image-container { + display: flex; + margin: 0 1em 0.5em; gap: 0.5em; .new-image { diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index 27cd07fa1..4fe2905ec 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -19,10 +19,7 @@ class="user-info-avatar -link" @click="zoomAvatar" > - +