Skip to content

Commit

Permalink
[🐴] Input hover and focus styles (#4064)
Browse files Browse the repository at this point in the history
* styles for native input

* web focus/hover

* nit
  • Loading branch information
haileyok authored May 16, 2024
1 parent ba068c8 commit a84a14d
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 11 deletions.
21 changes: 15 additions & 6 deletions src/screens/Messages/Conversation/MessageInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
import {isIOS} from 'platform/detection'
import * as Toast from '#/view/com/util/Toast'
import {atoms as a, useTheme} from '#/alf'
import {useSharedInputStyles} from '#/components/forms/TextField'
import {PaperPlane_Stroke2_Corner0_Rounded as PaperPlane} from '#/components/icons/PaperPlane'

export function MessageInput({
Expand All @@ -41,8 +42,12 @@ export function MessageInput({

const {top: topInset} = useSafeAreaInsets()

const inputStyles = useSharedInputStyles()
const [isFocused, setIsFocused] = React.useState(false)
const inputRef = React.useRef<TextInput>(null)

useSaveMessageDraft(message)

const onSubmit = React.useCallback(() => {
if (message.trim() === '') {
return
Expand Down Expand Up @@ -76,19 +81,21 @@ export function MessageInput({
[scrollToEnd, topInset],
)

useSaveMessageDraft(message)

return (
<View style={a.p_md}>
<View
style={[
a.w_full,
a.flex_row,
a.py_sm,
a.px_sm,
a.pl_md,
t.atoms.bg_contrast_25,
{borderRadius: 23},
{
padding: a.p_sm.padding - 2,
paddingLeft: a.p_md.padding - 2,
borderWidth: 2,
borderRadius: 23,
borderColor: 'transparent',
},
isFocused && inputStyles.chromeFocus,
]}>
<TextInput
accessibilityLabel={_(msg`Message input field`)}
Expand All @@ -108,6 +115,8 @@ export function MessageInput({
keyboardAppearance={t.name === 'light' ? 'light' : 'dark'}
scrollEnabled={isInputScrollable}
blurOnSubmit={false}
onFocus={() => setIsFocused(true)}
onBlur={() => setIsFocused(false)}
onContentSizeChange={onInputLayout}
ref={inputRef}
hitSlop={HITSLOP_10}
Expand Down
26 changes: 21 additions & 5 deletions src/screens/Messages/Conversation/MessageInput.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
} from '#/state/messages/message-drafts'
import * as Toast from '#/view/com/util/Toast'
import {atoms as a, useTheme} from '#/alf'
import {useSharedInputStyles} from '#/components/forms/TextField'
import {PaperPlane_Stroke2_Corner0_Rounded as PaperPlane} from '#/components/icons/PaperPlane'

export function MessageInput({
Expand All @@ -25,6 +26,10 @@ export function MessageInput({
const {getDraft, clearDraft} = useMessageDraft()
const [message, setMessage] = React.useState(getDraft)

const inputStyles = useSharedInputStyles()
const [isFocused, setIsFocused] = React.useState(false)
const [isHovered, setIsHovered] = React.useState(false)

const onSubmit = React.useCallback(() => {
if (message.trim() === '') {
return
Expand Down Expand Up @@ -63,11 +68,20 @@ export function MessageInput({
<View
style={[
a.flex_row,
a.px_sm,
a.pl_md,
t.atoms.bg_contrast_25,
{borderRadius: 23},
]}>
{
paddingHorizontal: a.p_sm.padding - 2,
paddingLeft: a.p_md.padding - 2,
borderWidth: 2,
borderRadius: 23,
borderColor: 'transparent',
},
isHovered && inputStyles.chromeHover,
isFocused && inputStyles.chromeFocus,
]}
// @ts-expect-error web only
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}>
<TextareaAutosize
style={StyleSheet.flatten([
a.flex_1,
Expand All @@ -87,6 +101,8 @@ export function MessageInput({
value={message}
dirName="ltr"
autoFocus={true}
onFocus={() => setIsFocused(true)}
onBlur={() => setIsFocused(false)}
onChange={onChange}
onKeyDown={onKeyDown}
/>
Expand All @@ -101,7 +117,7 @@ export function MessageInput({
{
height: 30,
width: 30,
marginTop: 6,
marginTop: 5,
backgroundColor: t.palette.primary_500,
},
]}
Expand Down

0 comments on commit a84a14d

Please sign in to comment.