From 9162ca7c9424078cacb31ea8b8b0d283d129ba3a Mon Sep 17 00:00:00 2001
From: Bryan1029384756 <23323626+Bryan1029384756@users.noreply.github.com>
Date: Mon, 16 Feb 2026 22:22:31 -0600
Subject: [PATCH] Fix emojis in pin
---
.../src/components/PinnedMessagesPanel.jsx | 5 +++--
packages/shared/src/components/SearchPanel.jsx | 17 ++++++++++++++++-
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/packages/shared/src/components/PinnedMessagesPanel.jsx b/packages/shared/src/components/PinnedMessagesPanel.jsx
index 648b7c7..aea386d 100644
--- a/packages/shared/src/components/PinnedMessagesPanel.jsx
+++ b/packages/shared/src/components/PinnedMessagesPanel.jsx
@@ -5,6 +5,7 @@ import MessageItem from './MessageItem';
import { usePlatform } from '../platform';
const TAG_LENGTH = 32;
+const EMPTY = [];
const PinnedMessagesPanel = ({
channelId,
@@ -28,13 +29,13 @@ const PinnedMessagesPanel = ({
const pinnedMessages = useQuery(
api.messages.listPinned,
channelId ? { channelId, userId: userId || undefined } : "skip"
- ) || [];
+ ) || EMPTY;
const unpinMutation = useMutation(api.messages.pin);
useEffect(() => {
if (!pinnedMessages.length || !channelKey) {
- setDecryptedPins([]);
+ setDecryptedPins(prev => prev.length === 0 ? prev : []);
return;
}
diff --git a/packages/shared/src/components/SearchPanel.jsx b/packages/shared/src/components/SearchPanel.jsx
index 3745a3e..49c8902 100644
--- a/packages/shared/src/components/SearchPanel.jsx
+++ b/packages/shared/src/components/SearchPanel.jsx
@@ -1,9 +1,12 @@
import React, { useState, useCallback, useEffect, useRef } from 'react';
+import { useQuery } from 'convex/react';
+import { api } from '../../../../convex/_generated/api';
import { useSearch } from '../contexts/SearchContext';
import { parseFilters } from '../utils/searchUtils';
import { usePlatform } from '../platform';
import { LinkPreview } from './ChatArea';
import { extractUrls } from './MessageItem';
+import { AllEmojis } from '../assets/emojis';
function formatTime(ts) {
const d = new Date(ts);
@@ -23,6 +26,17 @@ function linkifyHtml(html) {
return html.replace(/(https?:\/\/[^\s<]+)/g, '$1');
}
+function formatEmojisHtml(html, customEmojis = []) {
+ if (!html) return '';
+ return html.replace(/:([a-zA-Z0-9_]+):/g, (match, name) => {
+ const custom = customEmojis.find(e => e.name === name);
+ if (custom) return ``;
+ const emoji = AllEmojis.find(e => e.name === name);
+ if (emoji) return `
`;
+ return match;
+ });
+}
+
function getAvatarColor(name) {
const colors = ['#5865F2', '#57F287', '#FEE75C', '#EB459E', '#ED4245', '#F47B67', '#E67E22', '#3498DB'];
let hash = 0;
@@ -206,6 +220,7 @@ const SearchResultFile = ({ metadata }) => {
const SearchPanel = ({ visible, onClose, channels, isDM, dmChannelId, onJumpToMessage, query, sortOrder, onSortChange }) => {
const { search, isReady } = useSearch() || {};
const { links } = usePlatform();
+ const customEmojis = useQuery(api.customEmojis.list) || [];
const [results, setResults] = useState([]);
const [searching, setSearching] = useState(false);
const [showSortMenu, setShowSortMenu] = useState(false);
@@ -390,7 +405,7 @@ const SearchPanel = ({ visible, onClose, channels, isDM, dmChannelId, onJumpToMe
{!(r.has_attachment && r.attachment_meta) && (