diff options
-rw-r--r-- | src/view/com/modals/CreateScene.tsx | 16 | ||||
-rw-r--r-- | src/view/com/modals/EditProfile.tsx | 5 | ||||
-rw-r--r-- | src/view/lib/strings.ts | 11 |
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 +} |