From 2467bd738a11d1670eec472e6cddd2c1d3c5c669 Mon Sep 17 00:00:00 2001 From: Kerwin Bryant Date: Tue, 24 Jun 2025 11:13:28 +0800 Subject: [PATCH] Improve App Icon Picker: Stable Modal Height & Collapsible Emoji Style Section (#21399) --- .../components/base/app-icon-picker/index.tsx | 6 +- .../components/base/emoji-picker/Inner.tsx | 65 ++++++++++--------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/web/app/components/base/app-icon-picker/index.tsx b/web/app/components/base/app-icon-picker/index.tsx index 975f8aeb6c..8e66cd38cf 100644 --- a/web/app/components/base/app-icon-picker/index.tsx +++ b/web/app/components/base/app-icon-picker/index.tsx @@ -112,7 +112,7 @@ const AppIconPicker: FC = ({ isShow closable={false} wrapperClassName={className} - className={cn(s.container, '!w-[362px] !p-0')} + className={cn(s.container, '!h-[462px] !w-[362px] !p-0')} > {!DISABLE_UPLOAD_IMAGE_AS_ICON &&
@@ -131,8 +131,8 @@ const AppIconPicker: FC = ({
} - - + {activeTab === 'emoji' && } + {activeTab === 'image' && }
diff --git a/web/app/components/base/emoji-picker/Inner.tsx b/web/app/components/base/emoji-picker/Inner.tsx index 34ce3f7da0..8d05967f33 100644 --- a/web/app/components/base/emoji-picker/Inner.tsx +++ b/web/app/components/base/emoji-picker/Inner.tsx @@ -5,6 +5,8 @@ import data from '@emoji-mart/data' import type { EmojiMartData } from '@emoji-mart/data' import { init } from 'emoji-mart' import { + ChevronDownIcon, + ChevronUpIcon, MagnifyingGlassIcon, } from '@heroicons/react/24/outline' import Input from '@/app/components/base/input' @@ -60,16 +62,20 @@ const EmojiPickerInner: FC = ({ const { categories } = data as EmojiMartData const [selectedEmoji, setSelectedEmoji] = useState('') const [selectedBackground, setSelectedBackground] = useState(backgroundColors[0]) + const [showStyleColors, setShowStyleColors] = useState(false) const [searchedEmojis, setSearchedEmojis] = useState([]) const [isSearching, setIsSearching] = useState(false) React.useEffect(() => { - if (selectedEmoji && selectedBackground) - onSelect?.(selectedEmoji, selectedBackground) + if (selectedEmoji) { + setShowStyleColors(true) + if (selectedBackground) + onSelect?.(selectedEmoji, selectedBackground) + } }, [onSelect, selectedEmoji, selectedBackground]) - return
+ return
@@ -95,7 +101,7 @@ const EmojiPickerInner: FC = ({
-
+
{isSearching && <>

Search

@@ -141,33 +147,34 @@ const EmojiPickerInner: FC = ({
{/* Color Select */} -
+

Choose Style

-
- {backgroundColors.map((color) => { - return
{ - setSelectedBackground(color) - }} - > -
- {selectedEmoji !== '' && } -
-
- })} -
+ {showStyleColors ? setShowStyleColors(!showStyleColors)} /> : setShowStyleColors(!showStyleColors)} />}
+ {showStyleColors &&
+ {backgroundColors.map((color) => { + return
{ + setSelectedBackground(color) + }} + > +
+ {selectedEmoji !== '' && } +
+
+ })} +
}
} export default EmojiPickerInner