feat: authorize notes for listed (#1823)

This commit is contained in:
Mo
2022-10-18 10:49:30 -05:00
committed by GitHub
parent e4de9c1be7
commit 9954bdc29f
14 changed files with 104 additions and 46 deletions

View File

@@ -14,10 +14,27 @@ type ListedActionsMenuProps = {
const ListedActionsMenu = ({ application, note }: ListedActionsMenuProps) => {
const [menuGroups, setMenuGroups] = useState<ListedMenuGroup[]>([])
const [isFetchingAccounts, setIsFetchingAccounts] = useState(true)
const [isAuthorized, setIsAuthorized] = useState(false)
useEffect(() => {
const authorize = async () => {
if (!application.listed.isNoteAuthorizedForListed(note)) {
await application.listed.authorizeNoteForListed(note)
}
setIsAuthorized(application.listed.isNoteAuthorizedForListed(note))
}
void authorize()
}, [application, note])
const reloadMenuGroup = useCallback(
async (group: ListedMenuGroup) => {
const updatedAccountInfo = await application.getListedAccountInfo(group.account, note.uuid)
if (!isAuthorized) {
return
}
const updatedAccountInfo = await application.listed.getListedAccountInfo(group.account, note.uuid)
if (!updatedAccountInfo) {
return
@@ -39,7 +56,7 @@ const ListedActionsMenu = ({ application, note }: ListedActionsMenuProps) => {
setMenuGroups(updatedGroups)
},
[application, menuGroups, note],
[application, menuGroups, note, isAuthorized],
)
useEffect(() => {
@@ -49,19 +66,21 @@ const ListedActionsMenu = ({ application, note }: ListedActionsMenuProps) => {
return
}
if (!isAuthorized) {
return
}
try {
const listedAccountEntries = await application.getListedAccounts()
const listedAccountEntries = await application.listed.getListedAccounts()
if (!listedAccountEntries.length) {
throw new Error('No Listed accounts found')
}
const menuGroups: ListedMenuGroup[] = []
await Promise.all(
listedAccountEntries.map(async (account) => {
const accountInfo = await application.getListedAccountInfo(account, note.uuid)
const accountInfo = await application.listed.getListedAccountInfo(account, note.uuid)
if (accountInfo) {
menuGroups.push({
name: accountInfo.display_name,
@@ -91,7 +110,11 @@ const ListedActionsMenu = ({ application, note }: ListedActionsMenuProps) => {
}
void fetchListedAccounts()
}, [application, note.uuid])
}, [application, note.uuid, isAuthorized])
if (!isAuthorized) {
return null
}
return (
<>

View File

@@ -17,9 +17,15 @@ const ListedActionsOption: FunctionComponent<Props> = ({ application, note }) =>
const [isOpen, setIsOpen] = useState(false)
const toggleMenu = useCallback(() => {
setIsOpen((isOpen) => !isOpen)
}, [])
const toggleMenu = useCallback(async () => {
if (!application.listed.isNoteAuthorizedForListed(note)) {
await application.listed.authorizeNoteForListed(note)
}
if (application.listed.isNoteAuthorizedForListed(note)) {
setIsOpen((isOpen) => !isOpen)
}
}, [application, note])
return (
<div ref={menuContainerRef}>