Merge pull request #553 from SatsAllDay/autocomplete-ln-addr
Add auto-complete support when withdrawing to ln addr
This commit is contained in:
commit
a37c0ef14a
@ -230,12 +230,13 @@ export function MarkdownInput ({ label, topLevel, groupClassName, onChange, setH
|
||||
query={mentionQuery}
|
||||
onSelect={insertMention}
|
||||
dropdownStyle={userSuggestDropdownStyle}
|
||||
>{({ onKeyDown: userSuggestOnKeyDown }) => (
|
||||
>{({ onKeyDown: userSuggestOnKeyDown, resetSuggestions }) => (
|
||||
<InputInner
|
||||
innerRef={innerRef}
|
||||
{...props}
|
||||
onChange={onChangeInner}
|
||||
onKeyDown={onKeyDownInner(userSuggestOnKeyDown)}
|
||||
onBlur={resetSuggestions}
|
||||
/>)}
|
||||
</UserSuggest>
|
||||
</div>
|
||||
@ -408,15 +409,28 @@ function InputInner ({
|
||||
}
|
||||
|
||||
const INITIAL_SUGGESTIONS = { array: [], index: 0 }
|
||||
export function UserSuggest ({ query, onSelect, dropdownStyle, children }) {
|
||||
export function UserSuggest ({
|
||||
query, onSelect, dropdownStyle, children,
|
||||
transformUser = user => user, selectWithTab = true, filterUsers = () => true
|
||||
}) {
|
||||
const [getUsers] = useLazyQuery(TOP_USERS, {
|
||||
onCompleted: data => {
|
||||
setSuggestions({ array: data.topUsers.users, index: 0 })
|
||||
setSuggestions({
|
||||
array: data.topUsers.users
|
||||
.filter((...args) => filterUsers(query, ...args))
|
||||
.map(transformUser),
|
||||
index: 0
|
||||
})
|
||||
}
|
||||
})
|
||||
const [getSuggestions] = useLazyQuery(USER_SEARCH, {
|
||||
onCompleted: data => {
|
||||
setSuggestions({ array: data.searchUsers, index: 0 })
|
||||
setSuggestions({
|
||||
array: data.searchUsers
|
||||
.filter((...args) => filterUsers(query, ...args))
|
||||
.map(transformUser),
|
||||
index: 0
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
@ -462,6 +476,9 @@ export function UserSuggest ({ query, onSelect, dropdownStyle, children }) {
|
||||
break
|
||||
case 'Tab':
|
||||
case 'Enter':
|
||||
if (e.code === 'Tab' && !selectWithTab) {
|
||||
break
|
||||
}
|
||||
if (suggestions.array?.length === 0) {
|
||||
break
|
||||
}
|
||||
@ -479,7 +496,7 @@ export function UserSuggest ({ query, onSelect, dropdownStyle, children }) {
|
||||
}, [onSelect, resetSuggestions, suggestions])
|
||||
return (
|
||||
<>
|
||||
{children?.({ onKeyDown })}
|
||||
{children?.({ onKeyDown, resetSuggestions })}
|
||||
<Dropdown show={suggestions.array.length > 0} style={dropdownStyle}>
|
||||
<Dropdown.Menu className={styles.suggestionsMenu}>
|
||||
{suggestions.array.map((v, i) =>
|
||||
@ -499,16 +516,19 @@ export function UserSuggest ({ query, onSelect, dropdownStyle, children }) {
|
||||
)
|
||||
}
|
||||
|
||||
export function InputUserSuggest ({ label, groupClassName, ...props }) {
|
||||
export function InputUserSuggest ({ label, groupClassName, transformUser, filterUsers, selectWithTab, ...props }) {
|
||||
const [ovalue, setOValue] = useState()
|
||||
const [query, setQuery] = useState()
|
||||
return (
|
||||
<FormGroup label={label} className={groupClassName}>
|
||||
<UserSuggest
|
||||
transformUser={transformUser}
|
||||
filterUsers={filterUsers}
|
||||
selectWithTab={selectWithTab}
|
||||
onSelect={setOValue}
|
||||
query={query}
|
||||
>
|
||||
{({ onKeyDown }) => (
|
||||
{({ onKeyDown, resetSuggestions }) => (
|
||||
<InputInner
|
||||
{...props}
|
||||
autoComplete='off'
|
||||
@ -518,6 +538,7 @@ export function InputUserSuggest ({ label, groupClassName, ...props }) {
|
||||
}}
|
||||
overrideValue={ovalue}
|
||||
onKeyDown={onKeyDown}
|
||||
onBlur={resetSuggestions}
|
||||
/>
|
||||
)}
|
||||
</UserSuggest>
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { useRouter } from 'next/router'
|
||||
import { Checkbox, Form, Input, SubmitButton } from '../components/form'
|
||||
import { Checkbox, Form, Input, InputUserSuggest, SubmitButton } from '../components/form'
|
||||
import Link from 'next/link'
|
||||
import Button from 'react-bootstrap/Button'
|
||||
import { gql, useMutation, useQuery } from '@apollo/client'
|
||||
@ -349,12 +349,21 @@ export function LnAddrWithdrawal () {
|
||||
router.push(`/withdrawals/${data.sendToLnAddr.id}`)
|
||||
}}
|
||||
>
|
||||
<Input
|
||||
<InputUserSuggest
|
||||
label='lightning address'
|
||||
name='addr'
|
||||
required
|
||||
autoFocus
|
||||
onChange={onAddrChange}
|
||||
transformUser={user => ({ ...user, name: `${user.name}@stacker.news` })}
|
||||
selectWithTab={false}
|
||||
filterUsers={(query) => {
|
||||
if (!query.includes('@')) {
|
||||
return true
|
||||
}
|
||||
const [, domain] = query.split('@')
|
||||
return 'stacker.news'.startsWith(domain)
|
||||
}}
|
||||
/>
|
||||
<Input
|
||||
label='amount'
|
||||
|
Loading…
x
Reference in New Issue
Block a user