about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2024-05-04 01:49:49 +0100
committerGitHub <noreply@github.com>2024-05-04 01:49:49 +0100
commitc223bcdaf796938b411c7df5c9560ebc0685ceb4 (patch)
treece78c0c1aadf2e9825f6a8e7cd28d6c8a2d9c553 /src
parentfeff55a14a050665e6cc8bb7511425986ef4768a (diff)
downloadvoidsky-c223bcdaf796938b411c7df5c9560ebc0685ceb4.tar.zst
Assorted clipclop fixes (#3853)
* empty state for new chat dialog

* use terniary

* dark mode pending state

* copy message text option

* fix service url input (scrollview ftw)

* whoops, fix equality

* slightly reduce horizontal message padding
Diffstat (limited to 'src')
-rw-r--r--src/components/dms/MessageItem.tsx9
-rw-r--r--src/components/dms/MessageMenu.tsx25
-rw-r--r--src/components/dms/NewChat.tsx47
-rw-r--r--src/screens/Messages/List/index.tsx5
-rw-r--r--src/view/com/util/forms/PostDropdownBtn.tsx4
5 files changed, 67 insertions, 23 deletions
diff --git a/src/components/dms/MessageItem.tsx b/src/components/dms/MessageItem.tsx
index fd8edaf2d..f8f5197ca 100644
--- a/src/components/dms/MessageItem.tsx
+++ b/src/components/dms/MessageItem.tsx
@@ -62,19 +62,23 @@ export let MessageItem = ({
     lastInGroupRef.current = isLastInGroup
   }
 
+  const pendingColor =
+    t.name === 'light' ? t.palette.primary_200 : t.palette.primary_800
+
   return (
     <View>
       <ActionsWrapper isFromSelf={isFromSelf} message={item}>
         <View
           style={[
             a.py_sm,
-            a.px_lg,
             a.my_2xs,
             a.rounded_md,
             {
+              paddingLeft: 14,
+              paddingRight: 14,
               backgroundColor: isFromSelf
                 ? pending
-                  ? t.palette.primary_200
+                  ? pendingColor
                   : t.palette.primary_500
                 : t.palette.contrast_50,
               borderRadius: 17,
@@ -88,6 +92,7 @@ export let MessageItem = ({
               a.text_md,
               a.leading_snug,
               isFromSelf && {color: t.palette.white},
+              pending && t.name !== 'light' && {color: t.palette.primary_300},
             ]}>
             {item.text}
           </Text>
diff --git a/src/components/dms/MessageMenu.tsx b/src/components/dms/MessageMenu.tsx
index a21324204..1e1733609 100644
--- a/src/components/dms/MessageMenu.tsx
+++ b/src/components/dms/MessageMenu.tsx
@@ -1,10 +1,12 @@
 import React from 'react'
 import {Pressable, View} from 'react-native'
+import * as Clipboard from 'expo-clipboard'
 import {ChatBskyConvoDefs} from '@atproto-labs/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
 import {useSession} from 'state/session'
+import * as Toast from '#/view/com/util/Toast'
 import {atoms as a, useTheme} from '#/alf'
 import {DotGrid_Stroke2_Corner0_Rounded as DotsHorizontal} from '#/components/icons/DotGrid'
 import {Trash_Stroke2_Corner0_Rounded as Trash} from '#/components/icons/Trash'
@@ -12,6 +14,7 @@ import {Warning_Stroke2_Corner0_Rounded as Warning} from '#/components/icons/War
 import * as Menu from '#/components/Menu'
 import * as Prompt from '#/components/Prompt'
 import {usePromptControl} from '#/components/Prompt'
+import {Clipboard_Stroke2_Corner2_Rounded as ClipboardIcon} from '../icons/Clipboard'
 
 export let MessageMenu = ({
   message,
@@ -32,6 +35,14 @@ export let MessageMenu = ({
 
   const isFromSelf = message.sender?.did === currentAccount?.did
 
+  const onCopyPostText = React.useCallback(() => {
+    // use when we have rich text
+    // const str = richTextToString(richText, true)
+
+    Clipboard.setStringAsync(message.text)
+    Toast.show(_(msg`Copied to clipboard`))
+  }, [_, message.text])
+
   const onDelete = React.useCallback(() => {
     // TODO delete the message
   }, [])
@@ -64,10 +75,20 @@ export let MessageMenu = ({
         <Menu.Outer>
           <Menu.Group>
             <Menu.Item
+              testID="messageDropdownCopyBtn"
+              label={_(msg`Copy message text`)}
+              onPress={onCopyPostText}>
+              <Menu.ItemText>{_(msg`Copy message text`)}</Menu.ItemText>
+              <Menu.ItemIcon icon={ClipboardIcon} position="right" />
+            </Menu.Item>
+          </Menu.Group>
+          <Menu.Divider />
+          <Menu.Group>
+            <Menu.Item
               testID="messageDropdownDeleteBtn"
-              label={_(msg`Delete message`)}
+              label={_(msg`Delete message for me`)}
               onPress={deleteControl.open}>
-              <Menu.ItemText>{_(msg`Delete`)}</Menu.ItemText>
+              <Menu.ItemText>{_(msg`Delete for me`)}</Menu.ItemText>
               <Menu.ItemIcon icon={Trash} position="right" />
             </Menu.Item>
             {!isFromSelf && (
diff --git a/src/components/dms/NewChat.tsx b/src/components/dms/NewChat.tsx
index a6b5d5632..5dde8628c 100644
--- a/src/components/dms/NewChat.tsx
+++ b/src/components/dms/NewChat.tsx
@@ -20,6 +20,7 @@ import * as TextField from '#/components/forms/TextField'
 import {MagnifyingGlass2_Stroke2_Corner0_Rounded as Search} from '#/components/icons/MagnifyingGlass2'
 import {PlusLarge_Stroke2_Corner0_Rounded as Plus} from '#/components/icons/Plus'
 import {Button} from '../Button'
+import {Envelope_Stroke2_Corner0_Rounded as Envelope} from '../icons/Envelope'
 import {ListMaybePlaceholder} from '../Lists'
 import {Text} from '../Typography'
 
@@ -178,7 +179,7 @@ function SearchablePeopleList({
         </Text>
         <TextField.Root>
           <TextField.Icon icon={Search} />
-          <TextField.Input
+          <Dialog.Input
             label={_(msg`Search profiles`)}
             placeholder={_(msg`Search`)}
             value={searchText}
@@ -197,6 +198,7 @@ function SearchablePeopleList({
             autoCorrect={false}
             autoComplete="off"
             autoCapitalize="none"
+            autoFocus
           />
         </TextField.Root>
       </View>
@@ -211,20 +213,35 @@ function SearchablePeopleList({
       ListHeaderComponent={
         <>
           {listHeader}
-          {searchText.length > 0 && !actorAutocompleteData?.length && (
-            <ListMaybePlaceholder
-              isLoading={isFetching}
-              isError={isError}
-              onRetry={refetch}
-              hideBackButton={true}
-              emptyType="results"
-              sideBorders={false}
-              emptyMessage={
-                isError
-                  ? _(msg`No search results found for "${searchText}".`)
-                  : _(msg`Could not load profiles. Please try again later.`)
-              }
-            />
+          {searchText.length === 0 ? (
+            <View style={[a.pt_4xl, a.align_center, a.px_lg]}>
+              <Envelope width={64} fill={t.palette.contrast_200} />
+              <Text
+                style={[
+                  a.text_lg,
+                  a.text_center,
+                  a.mt_md,
+                  t.atoms.text_contrast_low,
+                ]}>
+                <Trans>Search for someone to start a conversation with.</Trans>
+              </Text>
+            </View>
+          ) : (
+            !actorAutocompleteData?.length && (
+              <ListMaybePlaceholder
+                isLoading={isFetching}
+                isError={isError}
+                onRetry={refetch}
+                hideBackButton={true}
+                emptyType="results"
+                sideBorders={false}
+                emptyMessage={
+                  isError
+                    ? _(msg`No search results found for "${searchText}".`)
+                    : _(msg`Could not load profiles. Please try again later.`)
+                }
+              />
+            )
           )}
         </>
       }
diff --git a/src/screens/Messages/List/index.tsx b/src/screens/Messages/List/index.tsx
index 25c1a39d5..ce8f52af9 100644
--- a/src/screens/Messages/List/index.tsx
+++ b/src/screens/Messages/List/index.tsx
@@ -21,6 +21,7 @@ import {TimeElapsed} from '#/view/com/util/TimeElapsed'
 import {PreviewableUserAvatar} from '#/view/com/util/UserAvatar'
 import {ViewHeader} from '#/view/com/util/ViewHeader'
 import {CenteredView} from '#/view/com/util/Views'
+import {ScrollView} from '#/view/com/util/Views'
 import {atoms as a, useBreakpoints, useTheme, web} from '#/alf'
 import {Button, ButtonIcon, ButtonText} from '#/components/Button'
 import {DialogControlProps, useDialogControl} from '#/components/Dialog'
@@ -130,7 +131,7 @@ export function MessagesScreen({navigation}: Props) {
 
   if (!hasValidServiceUrl) {
     return (
-      <CenteredView sideBorders style={[a.flex_1, a.p_md]}>
+      <ScrollView contentContainerStyle={a.p_lg}>
         <View>
           <TextField.LabelText>Service URL</TextField.LabelText>
           <TextField.Root>
@@ -143,7 +144,7 @@ export function MessagesScreen({navigation}: Props) {
             />
           </TextField.Root>
         </View>
-      </CenteredView>
+      </ScrollView>
     )
   }
 
diff --git a/src/view/com/util/forms/PostDropdownBtn.tsx b/src/view/com/util/forms/PostDropdownBtn.tsx
index 32520182e..ac97f3da2 100644
--- a/src/view/com/util/forms/PostDropdownBtn.tsx
+++ b/src/view/com/util/forms/PostDropdownBtn.tsx
@@ -1,6 +1,6 @@
 import React, {memo} from 'react'
 import {Pressable, PressableProps, StyleProp, ViewStyle} from 'react-native'
-import {setStringAsync} from 'expo-clipboard'
+import * as Clipboard from 'expo-clipboard'
 import {
   AppBskyActorDefs,
   AppBskyFeedPost,
@@ -160,7 +160,7 @@ let PostDropdownBtn = ({
   const onCopyPostText = React.useCallback(() => {
     const str = richTextToString(richText, true)
 
-    setStringAsync(str)
+    Clipboard.setStringAsync(str)
     Toast.show(_(msg`Copied to clipboard`))
   }, [_, richText])