diff options
| author | eug-vs <eug-vs@keemail.me> | 2020-04-05 08:57:10 +0300 | 
|---|---|---|
| committer | eug-vs <eug-vs@keemail.me> | 2020-04-05 08:57:10 +0300 | 
| commit | 21cb0da607e4c0b71f847756e2736cf99b143885 (patch) | |
| tree | 4adac1749c19fc87fe0383c1318807366883ec21 /src | |
| parent | 0389a542776f8f7fc3bc71a54b0aca7179f6fed3 (diff) | |
| download | react-benzin-21cb0da607e4c0b71f847756e2736cf99b143885.tar.gz | |
feat: parse emoji :fire:
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/Markdown/Paragraph.tsx | 24 | 
1 files changed, 22 insertions, 2 deletions
| diff --git a/src/lib/Markdown/Paragraph.tsx b/src/lib/Markdown/Paragraph.tsx index a473142..19f8382 100644 --- a/src/lib/Markdown/Paragraph.tsx +++ b/src/lib/Markdown/Paragraph.tsx @@ -1,11 +1,17 @@  import React from 'react';  import { Link } from '@material-ui/core'; +import axios from 'axios';  interface PropTypes {    data: string;  } -type InlineRuleName = 'bold' | 'italic' | 'code' | 'strikeThrough'; +interface Emoji { +  name: string; +  char: string; +} + +type InlineRuleName = 'bold' | 'italic' | 'code' | 'strikeThrough' | 'emoji';  interface InlineRuleProperties {    enclosure: string; @@ -31,6 +37,10 @@ const inlineRules: Record<InlineRuleName, InlineRuleProperties>= {      enclosure: '\\*\\*',      style: { fontWeight: 'bold' },    }, +  emoji: { +    enclosure: ':', +    style: {}, +  }  };  const inlineRuleNames = Object.keys(inlineRules) as InlineRuleName[]; @@ -54,6 +64,11 @@ inlineRuleNames.forEach(name => {  const splitter = new RegExp(ruleSplitPatterns.join('|')); +const emojiList: Emoji[] = []; +axios.get('https://unpkg.com/emojilib@2.4.0/emojis.json').then(response => { +  Object.keys(response.data).forEach(name => emojiList.push({ name, char: response.data[name].char })); +}); +  const SyntaxSpan: React.FC<PropTypes> = ({ data }) => {    if (!data) return null; @@ -69,7 +84,12 @@ const SyntaxSpan: React.FC<PropTypes> = ({ data }) => {    inlineRuleNames.forEach(name => {      const rule = inlineRules[name];      const match = data.match(rule.pattern || ''); -    if (match) span = <span style={rule.style}>{match[1]}</span>; +    if (match) { +      if (name === 'emoji') { +        const emoji = emojiList.find(emoji => emoji.name === match[1]); +        span = <span>{emoji ? emoji.char : ''}</span>; +      } else span = <span style={rule.style}>{match[1]}</span>; +    }    });    return span;  } | 
