mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-18 02:21:51 +08:00
feat(core): replace emoji-mart with affine icon picker (#13644)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - New Features - Unified icon picker with consistent rendering across the app. - Picker can auto-close after selection. - “Remove” now clears the icon selection. - Refactor - Icon handling consolidated across editors, navigation, and document titles for consistent behavior. - Picker now opens on the Emoji panel by default. - Style - Adjusted line-height and selectors for icon picker visuals. - Chores - Removed unused emoji-mart dependencies. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -1,18 +1,29 @@
|
||||
import type { ReactNode } from 'react';
|
||||
|
||||
import { AffineIconRenderer } from './renderer/affine-icon';
|
||||
import { type IconData, IconType } from './type';
|
||||
|
||||
export const IconRenderer = ({
|
||||
iconType,
|
||||
icon,
|
||||
data,
|
||||
fallback,
|
||||
}: {
|
||||
iconType: 'emoji' | 'affine-icon';
|
||||
icon: string;
|
||||
data?: IconData;
|
||||
fallback?: ReactNode;
|
||||
}) => {
|
||||
if (iconType === 'emoji') {
|
||||
return icon;
|
||||
}
|
||||
if (iconType === 'affine-icon') {
|
||||
return <AffineIconRenderer name={icon} />;
|
||||
if (!data) {
|
||||
return fallback ?? null;
|
||||
}
|
||||
|
||||
return null;
|
||||
if (data.type === IconType.Emoji && data.unicode) {
|
||||
return data.unicode;
|
||||
}
|
||||
if (data.type === IconType.AffineIcon && data.name) {
|
||||
return <AffineIconRenderer name={data.name} color={data.color} />;
|
||||
}
|
||||
if (data.type === IconType.Blob) {
|
||||
// Not supported yet
|
||||
return null;
|
||||
}
|
||||
|
||||
return fallback ?? null;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user