You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
import { SearchIndex } from 'emoji-mart';
 | 
						|
import { SuggestionDataItem } from 'react-mentions';
 | 
						|
import styled from 'styled-components';
 | 
						|
import { searchSync } from '../../../util/emoji';
 | 
						|
 | 
						|
const EmojiQuickResult = styled.span`
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  min-width: 250px;
 | 
						|
  width: 100%;
 | 
						|
  padding-inline-end: 20px;
 | 
						|
  padding-inline-start: 10px;
 | 
						|
`;
 | 
						|
const EmojiQuickResultIcon = styled.span`
 | 
						|
  padding-inline-end: 20px;
 | 
						|
  padding-inline-start: 10px;
 | 
						|
  font-size: 1.4rem;
 | 
						|
`;
 | 
						|
const EmojiQuickResultText = styled.span``;
 | 
						|
 | 
						|
export const renderEmojiQuickResultRow = (suggestion: SuggestionDataItem) => {
 | 
						|
  return (
 | 
						|
    <EmojiQuickResult>
 | 
						|
      <EmojiQuickResultIcon>{suggestion.id}</EmojiQuickResultIcon>
 | 
						|
      <EmojiQuickResultText>{suggestion.display}</EmojiQuickResultText>
 | 
						|
    </EmojiQuickResult>
 | 
						|
  );
 | 
						|
};
 | 
						|
 | 
						|
export const searchEmojiForQuery = (query: string): Array<SuggestionDataItem> => {
 | 
						|
  if (query.length === 0 || !SearchIndex) {
 | 
						|
    return [];
 | 
						|
  }
 | 
						|
 | 
						|
  const results1 = searchSync(`:${query}`);
 | 
						|
  const results2 = searchSync(query);
 | 
						|
  const results = [...new Set(results1.concat(results2))];
 | 
						|
  if (!results || !results.length) {
 | 
						|
    return [];
 | 
						|
  }
 | 
						|
 | 
						|
  const cleanResults = results
 | 
						|
    .map(emoji => {
 | 
						|
      return {
 | 
						|
        id: emoji.skins[0].native,
 | 
						|
        display: `:${emoji.id}:`,
 | 
						|
      };
 | 
						|
    })
 | 
						|
    .slice(0, 8);
 | 
						|
  return cleanResults;
 | 
						|
};
 |