feat: Added reset avatar feature and center align items in userpopup (#2658)

* feat: Add reset avatar functionality and update localization strings

* fix: Center align upload and reset avatar options in UserPopup
This commit is contained in:
Asurada 2025-03-03 17:58:15 +08:00 committed by GitHub
parent e8bfb2b49b
commit a12d10f4f7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 52 additions and 22 deletions

View File

@ -1,3 +1,4 @@
import DefaultAvatar from '@renderer/assets/images/avatar.png'
import useAvatar from '@renderer/hooks/useAvatar' import useAvatar from '@renderer/hooks/useAvatar'
import { useSettings } from '@renderer/hooks/useSettings' import { useSettings } from '@renderer/hooks/useSettings'
import ImageStorage from '@renderer/services/ImageStorage' import ImageStorage from '@renderer/services/ImageStorage'
@ -50,39 +51,50 @@ const PopupContainer: React.FC<Props> = ({ resolve }) => {
window.message.error(error.message) window.message.error(error.message)
} }
} }
const handleReset = async () => {
try {
await ImageStorage.set('avatar', DefaultAvatar)
dispatch(setAvatar(DefaultAvatar))
setDropdownOpen(false)
} catch (error: any) {
window.message.error(error.message)
}
}
const items = [ const items = [
{ {
key: 'upload', key: 'upload',
label: ( label: (
<Upload <div style={{ width: '100%', textAlign: 'center' }}>
customRequest={() => {}} <Upload
accept="image/png, image/jpeg, image/gif" customRequest={() => {}}
itemRender={() => null} accept="image/png, image/jpeg, image/gif"
maxCount={1} itemRender={() => null}
onChange={async ({ file }) => { maxCount={1}
try { onChange={async ({ file }) => {
const _file = file.originFileObj as File try {
if (_file.type === 'image/gif') { const _file = file.originFileObj as File
await ImageStorage.set('avatar', _file) if (_file.type === 'image/gif') {
} else { await ImageStorage.set('avatar', _file)
const compressedFile = await compressImage(_file) } else {
await ImageStorage.set('avatar', compressedFile) const compressedFile = await compressImage(_file)
await ImageStorage.set('avatar', compressedFile)
}
dispatch(setAvatar(await ImageStorage.get('avatar')))
setDropdownOpen(false)
} catch (error: any) {
window.message.error(error.message)
} }
dispatch(setAvatar(await ImageStorage.get('avatar'))) }}>
setDropdownOpen(false) {t('settings.general.image_upload')}
} catch (error: any) { </Upload>
window.message.error(error.message) </div>
}
}}>
<div>{t('settings.general.image_upload')}</div>
</Upload>
) )
}, },
{ {
key: 'emoji', key: 'emoji',
label: ( label: (
<div <div
style={{ width: '100%', textAlign: 'center' }}
onClick={(e) => { onClick={(e) => {
e.stopPropagation() e.stopPropagation()
setEmojiPickerOpen(true) setEmojiPickerOpen(true)
@ -91,6 +103,19 @@ const PopupContainer: React.FC<Props> = ({ resolve }) => {
{t('settings.general.emoji_picker')} {t('settings.general.emoji_picker')}
</div> </div>
) )
},
{
key: 'reset',
label: (
<div
style={{ width: '100%', textAlign: 'center' }}
onClick={(e) => {
e.stopPropagation()
handleReset()
}}>
{t('settings.general.avatar.reset')}
</div>
)
} }
] ]

View File

@ -701,6 +701,7 @@
"general.user_name.placeholder": "Enter your name", "general.user_name.placeholder": "Enter your name",
"general.image_upload": "Image Upload", "general.image_upload": "Image Upload",
"general.emoji_picker": "Emoji Picker", "general.emoji_picker": "Emoji Picker",
"general.avatar.reset": "Reset Avatar",
"general.view_webdav_settings": "View WebDAV settings", "general.view_webdav_settings": "View WebDAV settings",
"input.auto_translate_with_space": "Quickly translate with 3 spaces", "input.auto_translate_with_space": "Quickly translate with 3 spaces",
"input.target_language": "Target language", "input.target_language": "Target language",

View File

@ -701,6 +701,7 @@
"general.user_name.placeholder": "ユーザー名を入力", "general.user_name.placeholder": "ユーザー名を入力",
"general.image_upload": "画像アップロード", "general.image_upload": "画像アップロード",
"general.emoji_picker": "絵文字ピッカー", "general.emoji_picker": "絵文字ピッカー",
"general.avatar.reset": "アバターをリセット",
"general.view_webdav_settings": "WebDAV設定を表示", "general.view_webdav_settings": "WebDAV設定を表示",
"input.auto_translate_with_space": "スペースを3回押して翻訳", "input.auto_translate_with_space": "スペースを3回押して翻訳",
"input.target_language": "目標言語", "input.target_language": "目標言語",

View File

@ -701,6 +701,7 @@
"general.user_name.placeholder": "Введите ваше имя", "general.user_name.placeholder": "Введите ваше имя",
"general.image_upload": "Загрузка изображений", "general.image_upload": "Загрузка изображений",
"general.emoji_picker": "Выбор эмодзи", "general.emoji_picker": "Выбор эмодзи",
"general.avatar.reset": "Сброс аватара",
"general.view_webdav_settings": "Просмотр настроек WebDAV", "general.view_webdav_settings": "Просмотр настроек WebDAV",
"input.auto_translate_with_space": "Быстрый перевод с помощью 3-х пробелов", "input.auto_translate_with_space": "Быстрый перевод с помощью 3-х пробелов",
"input.target_language": "Целевой язык", "input.target_language": "Целевой язык",

View File

@ -701,6 +701,7 @@
"general.user_name.placeholder": "请输入用户名", "general.user_name.placeholder": "请输入用户名",
"general.image_upload": "图片上传", "general.image_upload": "图片上传",
"general.emoji_picker": "表情选择器", "general.emoji_picker": "表情选择器",
"general.avatar.reset": "重置头像",
"general.view_webdav_settings": "查看 WebDAV 设置", "general.view_webdav_settings": "查看 WebDAV 设置",
"input.auto_translate_with_space": "快速敲击3次空格翻译", "input.auto_translate_with_space": "快速敲击3次空格翻译",
"input.target_language": "目标语言", "input.target_language": "目标语言",

View File

@ -700,6 +700,7 @@
"general.user_name.placeholder": "輸入您的名稱", "general.user_name.placeholder": "輸入您的名稱",
"general.image_upload": "圖片上傳", "general.image_upload": "圖片上傳",
"general.emoji_picker": "表情選擇器", "general.emoji_picker": "表情選擇器",
"general.avatar.reset": "重置頭像",
"general.view_webdav_settings": "查看 WebDAV 設定", "general.view_webdav_settings": "查看 WebDAV 設定",
"input.auto_translate_with_space": "快速敲擊3次空格翻譯", "input.auto_translate_with_space": "快速敲擊3次空格翻譯",
"input.target_language": "目標語言", "input.target_language": "目標語言",