about summary refs log tree commit diff
path: root/src/view/com/composer/text-input/hooks
diff options
context:
space:
mode:
authorOllie H <renahlee@outlook.com>2023-05-09 10:13:23 -0700
committerGitHub <noreply@github.com>2023-05-09 12:13:23 -0500
commit8f6b5d3df9b5a5bb61514497f3f25289513ef119 (patch)
treee3b16b8aa3f9cb54595c17e78b3ebb18e3b2ae55 /src/view/com/composer/text-input/hooks
parent9a91b0c538e3c24a25285ae2bdf1d0dfd2ba53a4 (diff)
downloadvoidsky-8f6b5d3df9b5a5bb61514497f3f25289513ef119.tar.zst
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
Diffstat (limited to 'src/view/com/composer/text-input/hooks')
-rw-r--r--src/view/com/composer/text-input/hooks/useGrapheme.tsx36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/view/com/composer/text-input/hooks/useGrapheme.tsx b/src/view/com/composer/text-input/hooks/useGrapheme.tsx
new file mode 100644
index 000000000..25947c3ec
--- /dev/null
+++ b/src/view/com/composer/text-input/hooks/useGrapheme.tsx
@@ -0,0 +1,36 @@
+import Graphemer from 'graphemer'
+import {useCallback, useMemo} from 'react'
+
+export const useGrapheme = () => {
+  const splitter = useMemo(() => new Graphemer(), [])
+
+  const getGraphemeString = useCallback(
+    (name: string, length: number) => {
+      let remainingCharacters = 0
+
+      if (name.length > length) {
+        const graphemes = splitter.splitGraphemes(name)
+
+        if (graphemes.length > length) {
+          remainingCharacters = 0
+          name = `${graphemes.slice(0, length).join('')}...`
+        } else {
+          remainingCharacters = length - graphemes.length
+          name = graphemes.join('')
+        }
+      } else {
+        remainingCharacters = length - name.length
+      }
+
+      return {
+        name,
+        remainingCharacters,
+      }
+    },
+    [splitter],
+  )
+
+  return {
+    getGraphemeString,
+  }
+}