about summary refs log tree commit diff
path: root/src/view/com/composer/text-input
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/com/composer/text-input')
-rw-r--r--src/view/com/composer/text-input/TextInput.tsx54
-rw-r--r--src/view/com/composer/text-input/TextInput.web.tsx51
2 files changed, 105 insertions, 0 deletions
diff --git a/src/view/com/composer/text-input/TextInput.tsx b/src/view/com/composer/text-input/TextInput.tsx
new file mode 100644
index 000000000..3c5dacf80
--- /dev/null
+++ b/src/view/com/composer/text-input/TextInput.tsx
@@ -0,0 +1,54 @@
+import React from 'react'
+import {StyleProp, TextStyle} from 'react-native'
+import PasteInput, {
+  PastedFile,
+  PasteInputRef,
+} from '@mattermost/react-native-paste-input'
+import {usePalette} from '../../../lib/hooks/usePalette'
+
+export type TextInputRef = PasteInputRef
+
+interface TextInputProps {
+  testID: string
+  innerRef: React.Ref<TextInputRef>
+  placeholder: string
+  style: StyleProp<TextStyle>
+  onChangeText: (str: string) => void
+  onPaste: (err: string | undefined, uris: string[]) => void
+}
+
+export function TextInput({
+  testID,
+  innerRef,
+  placeholder,
+  style,
+  onChangeText,
+  onPaste,
+  children,
+}: React.PropsWithChildren<TextInputProps>) {
+  const pal = usePalette('default')
+  const onPasteInner = (err: string | undefined, files: PastedFile[]) => {
+    if (err) {
+      onPaste(err, [])
+    } else {
+      onPaste(
+        undefined,
+        files.map(f => f.uri),
+      )
+    }
+  }
+  return (
+    <PasteInput
+      testID={testID}
+      ref={innerRef}
+      multiline
+      scrollEnabled
+      onChangeText={(str: string) => onChangeText(str)}
+      onPaste={onPasteInner}
+      placeholder={placeholder}
+      placeholderTextColor={pal.colors.textLight}
+      style={style}>
+      {children}
+    </PasteInput>
+  )
+}
diff --git a/src/view/com/composer/text-input/TextInput.web.tsx b/src/view/com/composer/text-input/TextInput.web.tsx
new file mode 100644
index 000000000..6960bf7ab
--- /dev/null
+++ b/src/view/com/composer/text-input/TextInput.web.tsx
@@ -0,0 +1,51 @@
+import React from 'react'
+import {
+  StyleProp,
+  StyleSheet,
+  TextInput as RNTextInput,
+  TextStyle,
+} from 'react-native'
+import {usePalette} from '../../lib/hooks/usePalette'
+import {addStyle} from '../../lib/addStyle'
+
+export type TextInputRef = RNTextInput
+
+interface TextInputProps {
+  testID: string
+  innerRef: React.Ref<TextInputRef>
+  placeholder: string
+  style: StyleProp<TextStyle>
+  onChangeText: (str: string) => void
+  onPaste: (err: string | undefined, uris: string[]) => void
+}
+
+export function TextInput({
+  testID,
+  innerRef,
+  placeholder,
+  style,
+  onChangeText,
+  children,
+}: React.PropsWithChildren<TextInputProps>) {
+  const pal = usePalette('default')
+  style = addStyle(style, styles.input)
+  return (
+    <RNTextInput
+      testID={testID}
+      ref={innerRef}
+      multiline
+      scrollEnabled
+      onChangeText={(str: string) => onChangeText(str)}
+      placeholder={placeholder}
+      placeholderTextColor={pal.colors.textLight}
+      style={style}>
+      {children}
+    </RNTextInput>
+  )
+}
+
+const styles = StyleSheet.create({
+  input: {
+    minHeight: 140,
+  },
+})