From 8f6b5d3df9b5a5bb61514497f3f25289513ef119 Mon Sep 17 00:00:00 2001 From: Ollie H Date: Tue, 9 May 2023 10:13:23 -0700 Subject: Add avatar to mobile autocomplete and create grapheme hook (#602) * Add avatar to mobile autocomplete and create grapheme hook * Remove comment, update filename, cut out redundant logic --- .../com/composer/text-input/web/Autocomplete.tsx | 30 ++++------------------ 1 file changed, 5 insertions(+), 25 deletions(-) (limited to 'src/view/com/composer/text-input/web/Autocomplete.tsx') diff --git a/src/view/com/composer/text-input/web/Autocomplete.tsx b/src/view/com/composer/text-input/web/Autocomplete.tsx index 20dbbbbe8..475ec119b 100644 --- a/src/view/com/composer/text-input/web/Autocomplete.tsx +++ b/src/view/com/composer/text-input/web/Autocomplete.tsx @@ -1,9 +1,7 @@ import React, { forwardRef, - useCallback, useEffect, useImperativeHandle, - useMemo, useState, } from 'react' import {StyleSheet, View} from 'react-native' @@ -16,9 +14,9 @@ import { } from '@tiptap/suggestion' import {UserAutocompleteModel} from 'state/models/discovery/user-autocomplete' import {usePalette} from 'lib/hooks/usePalette' -import Graphemer from 'graphemer' import {Text} from 'view/com/util/text/Text' import {UserAvatar} from 'view/com/util/UserAvatar' +import {useGrapheme} from '../hooks/useGrapheme' interface MentionListRef { onKeyDown: (props: SuggestionKeyDownProps) => boolean @@ -99,7 +97,7 @@ const MentionList = forwardRef( (props: SuggestionProps, ref) => { const [selectedIndex, setSelectedIndex] = useState(0) const pal = usePalette('default') - const splitter = useMemo(() => new Graphemer(), []) + const {getGraphemeString} = useGrapheme() const selectItem = (index: number) => { const item = props.items[index] @@ -148,32 +146,14 @@ const MentionList = forwardRef( const {items} = props - const getDisplayedName = useCallback( - (name: string) => { - // Heuristic value based on max display name and handle lengths - const DISPLAY_LIMIT = 30 - if (name.length > DISPLAY_LIMIT) { - const graphemes = splitter.splitGraphemes(name) - - if (graphemes.length > DISPLAY_LIMIT) { - return graphemes.length > DISPLAY_LIMIT - ? `${graphemes.slice(0, DISPLAY_LIMIT).join('')}...` - : name.substring(0, DISPLAY_LIMIT) - } - } - - return name - }, - [splitter], - ) - return (
{items.length > 0 ? ( items.map((item, index) => { - const displayName = getDisplayedName( + const {name: displayName} = getGraphemeString( item.displayName ?? item.handle, + 30, // Heuristic value; can be modified ) const isSelected = selectedIndex === index @@ -197,7 +177,7 @@ const MentionList = forwardRef( - {item.handle} + @{item.handle} ) -- cgit 1.4.1