fix: improve emoji extraction and display logic in TaskCard

- Updated emoji regex to capture more emoji variations, including ZWJ sequences.
- Refactored emoji handling to display the first emoji from tags if no title emojis are found, enhancing visual representation.
- Adjusted rendering logic to use the new displayEmojis array for consistent emoji display in the TaskCard component.
This commit is contained in:
Julien Froidefond
2025-09-15 16:49:07 +02:00
parent addd57cd50
commit 83cf4ce06b

View File

@@ -89,10 +89,22 @@ export function TaskCard({ task, onDelete, onEdit, onUpdateTitle, compactView =
} : undefined;
// Extraire les emojis du titre pour les afficher comme tags visuels
const emojiRegex = /[\u{1F600}-\u{1F64F}]|[\u{1F300}-\u{1F5FF}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]/gu;
const emojis = task.title.match(emojiRegex) || [];
const emojiRegex = /(?:[\u{1F600}-\u{1F64F}]|[\u{1F300}-\u{1F5FF}]|[\u{1F680}-\u{1F6FF}]|[\u{1F900}-\u{1F9FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}])(?:[\u{200D}][\u{1F600}-\u{1F64F}]|[\u{1F300}-\u{1F5FF}]|[\u{1F680}-\u{1F6FF}]|[\u{1F900}-\u{1F9FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{FE0F}])*/gu;
const titleEmojis = task.title.match(emojiRegex) || [];
const titleWithoutEmojis = task.title.replace(emojiRegex, '').trim();
// Si pas d'emoji dans le titre, utiliser l'emoji du premier tag
let displayEmojis: string[] = titleEmojis;
if (displayEmojis.length === 0 && task.tags && task.tags.length > 0) {
const firstTag = availableTags.find(tag => tag.name === task.tags[0]);
if (firstTag) {
const tagEmojis = firstTag.name.match(emojiRegex);
if (tagEmojis && tagEmojis.length > 0) {
displayEmojis = [tagEmojis[0]]; // Prendre seulement le premier emoji du tag
}
}
}
// Vue compacte : seulement le titre
if (compactView) {
@@ -107,9 +119,9 @@ export function TaskCard({ task, onDelete, onEdit, onUpdateTitle, compactView =
{...(isEditingTitle ? {} : listeners)}
>
<div className="flex items-center gap-2">
{emojis.length > 0 && (
{displayEmojis.length > 0 && (
<div className="flex gap-1 flex-shrink-0">
{emojis.slice(0, 1).map((emoji, index) => (
{displayEmojis.slice(0, 1).map((emoji, index) => (
<span
key={index}
className="text-sm opacity-80 font-emoji"
@@ -190,9 +202,9 @@ export function TaskCard({ task, onDelete, onEdit, onUpdateTitle, compactView =
>
{/* Header tech avec titre et status */}
<div className="flex items-start gap-2 mb-2">
{emojis.length > 0 && (
{displayEmojis.length > 0 && (
<div className="flex gap-1 flex-shrink-0">
{emojis.slice(0, 2).map((emoji, index) => (
{displayEmojis.slice(0, 2).map((emoji, index) => (
<span
key={index}
className="text-sm opacity-80 font-emoji"