about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/view/com/modals/CreateScene.tsx16
-rw-r--r--src/view/com/modals/EditProfile.tsx5
-rw-r--r--src/view/lib/strings.ts11
3 files changed, 26 insertions, 6 deletions
diff --git a/src/view/com/modals/CreateScene.tsx b/src/view/com/modals/CreateScene.tsx
index 4cda1ad1e..9c4cdc5da 100644
--- a/src/view/com/modals/CreateScene.tsx
+++ b/src/view/com/modals/CreateScene.tsx
@@ -4,7 +4,6 @@ import {
   ActivityIndicator,
   StyleSheet,
   Text,
-  TextInput,
   TouchableOpacity,
   View,
 } from 'react-native'
@@ -13,7 +12,13 @@ import {BottomSheetScrollView, BottomSheetTextInput} from '@gorhom/bottom-sheet'
 import {ErrorMessage} from '../util/ErrorMessage'
 import {useStores} from '../../../state'
 import {s, colors, gradients} from '../../lib/styles'
-import {makeValidHandle, createFullHandle} from '../../lib/strings'
+import {
+  makeValidHandle,
+  createFullHandle,
+  enforceLen,
+  MAX_DISPLAY_NAME,
+  MAX_DESCRIPTION,
+} from '../../lib/strings'
 import {AppBskyActorCreateScene} from '../../../third-party/api/index'
 
 export const snapPoints = ['60%']
@@ -102,6 +107,7 @@ export function Component({}: {}) {
             <BottomSheetTextInput
               style={styles.textInput}
               placeholder="e.g. alices-friends"
+              autoCorrect={false}
               value={handle}
               onChangeText={str => setHandle(makeValidHandle(str))}
             />
@@ -112,7 +118,9 @@ export function Component({}: {}) {
               style={styles.textInput}
               placeholder="e.g. Alice's Friends"
               value={displayName}
-              onChangeText={setDisplayName}
+              onChangeText={v =>
+                setDisplayName(enforceLen(v, MAX_DISPLAY_NAME))
+              }
             />
           </View>
           <View style={styles.group}>
@@ -122,7 +130,7 @@ export function Component({}: {}) {
               placeholder="e.g. Artists, dog-lovers, and memelords."
               multiline
               value={description}
-              onChangeText={setDescription}
+              onChangeText={v => setDescription(enforceLen(v, MAX_DESCRIPTION))}
             />
           </View>
           {error !== '' && (
diff --git a/src/view/com/modals/EditProfile.tsx b/src/view/com/modals/EditProfile.tsx
index 3049ad5b8..2bc02afe6 100644
--- a/src/view/com/modals/EditProfile.tsx
+++ b/src/view/com/modals/EditProfile.tsx
@@ -6,6 +6,7 @@ import {ErrorMessage} from '../util/ErrorMessage'
 import {useStores} from '../../../state'
 import {ProfileViewModel} from '../../../state/models/profile-view'
 import {s, colors, gradients} from '../../lib/styles'
+import {enforceLen, MAX_DISPLAY_NAME, MAX_DESCRIPTION} from '../../lib/strings'
 import * as Profile from '../../../third-party/api/src/client/types/app/bsky/actor/profile'
 
 export const snapPoints = ['80%']
@@ -64,7 +65,7 @@ export function Component({profileView}: {profileView: ProfileViewModel}) {
             style={styles.textInput}
             placeholder="e.g. Alice Roberts"
             value={displayName}
-            onChangeText={setDisplayName}
+            onChangeText={v => setDisplayName(enforceLen(v, MAX_DISPLAY_NAME))}
           />
         </View>
         <View style={styles.group}>
@@ -74,7 +75,7 @@ export function Component({profileView}: {profileView: ProfileViewModel}) {
             placeholder="e.g. Artist, dog-lover, and memelord."
             multiline
             value={description}
-            onChangeText={setDescription}
+            onChangeText={v => setDescription(enforceLen(v, MAX_DESCRIPTION))}
           />
         </View>
         <TouchableOpacity style={s.mt10} onPress={onPressSave}>
diff --git a/src/view/lib/strings.ts b/src/view/lib/strings.ts
index 26e1b04e2..19bd5c473 100644
--- a/src/view/lib/strings.ts
+++ b/src/view/lib/strings.ts
@@ -1,6 +1,9 @@
 import {AtUri} from '../../third-party/uri'
 import {Entity} from '../../third-party/api/src/client/types/app/bsky/feed/post'
 
+export const MAX_DISPLAY_NAME = 64
+export const MAX_DESCRIPTION = 256
+
 export function pluralize(n: number, base: string, plural?: string): string {
   if (n === 1) {
     return base
@@ -85,3 +88,11 @@ export function createFullHandle(name: string, domain: string): string {
   domain = domain.replace(/^[\.]+/, '')
   return `${name}.${domain}`
 }
+
+export function enforceLen(str: string, len: number): string {
+  str = str || ''
+  if (str.length > len) {
+    return str.slice(0, len)
+  }
+  return str
+}