aboutsummaryrefslogtreecommitdiff
path: root/src/utils/comments.tsx
diff options
context:
space:
mode:
authorIvan Chen <ivan@tagg.id>2021-04-30 18:05:28 -0400
committerIvan Chen <ivan@tagg.id>2021-05-04 20:48:06 -0400
commit9322aede82815ba5a6bddf5b289692955d6e1d96 (patch)
tree17655bb5460915a2edca18cb738e615c91050f92 /src/utils/comments.tsx
parenta665c527cf0ab24b1a19b2ed35f38b9acb79cdeb (diff)
added display text parsing
Diffstat (limited to 'src/utils/comments.tsx')
-rw-r--r--src/utils/comments.tsx67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/utils/comments.tsx b/src/utils/comments.tsx
new file mode 100644
index 00000000..a1f353d6
--- /dev/null
+++ b/src/utils/comments.tsx
@@ -0,0 +1,67 @@
+import React from 'react';
+import {Text} from 'react-native';
+import {
+ isMentionPartType,
+ parseValue,
+ Part,
+ PartType,
+} from 'react-native-controlled-mentions';
+import TaggTypeahead from '../components/common/TaggTypeahead';
+import {TAGG_LIGHT_BLUE} from '../constants';
+
+/**
+ * Part renderer
+ *
+ * https://github.com/dabakovich/react-native-controlled-mentions#rendering-mentioninputs-value
+ *
+ * @param part
+ * @param index
+ */
+const renderPart = (part: Part, index: number) => {
+ // Just plain text
+ if (!part.partType) {
+ return <Text key={index}>{part.text}</Text>;
+ }
+
+ // Mention type part
+ if (isMentionPartType(part.partType)) {
+ return (
+ <Text
+ key={`${index}-${part.data?.trigger}`}
+ style={part.partType.textStyle}
+ onPress={() => console.log('Pressed', part.data)}>
+ {part.text}
+ </Text>
+ );
+ }
+
+ // Other styled part types
+ return (
+ <Text key={`${index}-pattern`} style={part.partType.textStyle}>
+ {part.text}
+ </Text>
+ );
+};
+
+/**
+ * Value renderer. Parsing value to parts array and then mapping the array using 'renderPart'
+ *
+ * https://github.com/dabakovich/react-native-controlled-mentions#rendering-mentioninputs-value
+ *
+ * @param value - value from MentionInput
+ * @param partTypes - the part types array that you providing to MentionInput
+ */
+export const renderValue: React.FC = (value: string, partTypes: PartType[]) => {
+ const {parts} = parseValue(value, partTypes);
+ return <Text>{parts.map(renderPart)}</Text>;
+};
+
+export const mentionPartTypes: PartType[] = [
+ {
+ trigger: '@',
+ renderSuggestions: (props) => <TaggTypeahead {...props} />,
+ allowedSpacesCount: 0,
+ isInsertSpaceAfterMention: true,
+ textStyle: {color: TAGG_LIGHT_BLUE},
+ },
+];