fix corner cases in lightning address autosuggestions

This commit is contained in:
keyan 2023-10-12 15:29:22 -05:00
parent 6516ce9c9e
commit 8f034f0e0a
2 changed files with 18 additions and 13 deletions

View File

@ -439,7 +439,8 @@ export function UserSuggest ({
useEffect(() => { useEffect(() => {
if (query !== undefined) { if (query !== undefined) {
const q = query?.replace(/^[@ ]+|[ ]+$/g, '') // remove both the leading @ and any @domain after nym
const q = query?.replace(/^[@ ]+|[ ]+$/g, '').replace(/@[^\s]*$/, '')
if (q === '') { if (q === '') {
getUsers({ variables: { by: 'stacked', when: 'week', limit: 5 } }) getUsers({ variables: { by: 'stacked', when: 'week', limit: 5 } })
} else { } else {
@ -516,7 +517,10 @@ export function UserSuggest ({
) )
} }
export function InputUserSuggest ({ label, groupClassName, transformUser, filterUsers, selectWithTab, ...props }) { export function InputUserSuggest ({
label, groupClassName, transformUser, filterUsers,
selectWithTab, onChange, transformQuery, ...props
}) {
const [ovalue, setOValue] = useState() const [ovalue, setOValue] = useState()
const [query, setQuery] = useState() const [query, setQuery] = useState()
return ( return (
@ -525,20 +529,25 @@ export function InputUserSuggest ({ label, groupClassName, transformUser, filter
transformUser={transformUser} transformUser={transformUser}
filterUsers={filterUsers} filterUsers={filterUsers}
selectWithTab={selectWithTab} selectWithTab={selectWithTab}
onSelect={setOValue} onSelect={(v) => {
// HACK ... ovalue does not trigger onChange
onChange && onChange(undefined, { target: { value: v } })
setOValue(v)
}}
query={query} query={query}
> >
{({ onKeyDown, resetSuggestions }) => ( {({ onKeyDown, resetSuggestions }) => (
<InputInner <InputInner
{...props} {...props}
autoComplete='off' autoComplete='off'
onChange={(_, e) => { onChange={(formik, e) => {
onChange && onChange(formik, e)
setOValue(e.target.value) setOValue(e.target.value)
setQuery(e.target.value.replace(/^[@ ]+|[ ]+$/g, '')) setQuery(e.target.value.replace(/^[@ ]+|[ ]+$/g, ''))
}} }}
overrideValue={ovalue} overrideValue={ovalue}
onKeyDown={onKeyDown} onKeyDown={onKeyDown}
onBlur={resetSuggestions} onBlur={() => setTimeout(resetSuggestions, 100)}
/> />
)} )}
</UserSuggest> </UserSuggest>

View File

@ -311,14 +311,13 @@ export function LnAddrWithdrawal () {
let options let options
try { try {
options = await lnAddrOptions(e.target.value) options = await lnAddrOptions(e.target.value)
setAddrOptions(options)
setFormSchema(lnAddrSchema(options))
} catch (e) { } catch (e) {
console.log(e) console.log(e)
setAddrOptions(defaultOptions) setAddrOptions(defaultOptions)
return setFormSchema(lnAddrSchema())
} }
setAddrOptions(options)
setFormSchema(lnAddrSchema(options))
}, 500, [setAddrOptions, setFormSchema]) }, 500, [setAddrOptions, setFormSchema])
return ( return (
@ -358,11 +357,8 @@ export function LnAddrWithdrawal () {
transformUser={user => ({ ...user, name: `${user.name}@stacker.news` })} transformUser={user => ({ ...user, name: `${user.name}@stacker.news` })}
selectWithTab={false} selectWithTab={false}
filterUsers={(query) => { filterUsers={(query) => {
if (!query.includes('@')) {
return true
}
const [, domain] = query.split('@') const [, domain] = query.split('@')
return 'stacker.news'.startsWith(domain) return !domain || 'stacker.news'.startsWith(domain)
}} }}
/> />
<Input <Input