chore: add options menu to vault selection menu items (#2497)
This commit is contained in:
58
packages/web/src/javascripts/Hooks/useVault.ts
Normal file
58
packages/web/src/javascripts/Hooks/useVault.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import { useApplication } from '@/Components/ApplicationProvider'
|
||||
import {
|
||||
KeySystemPasswordType,
|
||||
KeySystemRootKeyStorageMode,
|
||||
VaultListingInterface,
|
||||
VaultLockServiceEvent,
|
||||
} from '@standardnotes/snjs'
|
||||
import { useState, useEffect, useCallback } from 'react'
|
||||
|
||||
export const useVault = (vault: VaultListingInterface) => {
|
||||
const application = useApplication()
|
||||
|
||||
const canShowLockOption =
|
||||
vault.keyPasswordType === KeySystemPasswordType.UserInputted &&
|
||||
vault.keyStorageMode === KeySystemRootKeyStorageMode.Ephemeral
|
||||
|
||||
const [isLocked, setIsLocked] = useState(() => application.vaultLocks.isVaultLocked(vault))
|
||||
|
||||
useEffect(() => {
|
||||
return application.vaultLocks.addEventObserver((event) => {
|
||||
if (event === VaultLockServiceEvent.VaultLocked || event === VaultLockServiceEvent.VaultUnlocked) {
|
||||
setIsLocked(application.vaultLocks.isVaultLocked(vault))
|
||||
}
|
||||
})
|
||||
}, [application.vaultLocks, vault])
|
||||
|
||||
const toggleLock = useCallback(async () => {
|
||||
if (!canShowLockOption) {
|
||||
return
|
||||
}
|
||||
|
||||
if (isLocked) {
|
||||
application.vaultDisplayService.unlockVault(vault).catch(console.error)
|
||||
} else {
|
||||
application.vaultLocks.lockNonPersistentVault(vault).catch(console.error)
|
||||
}
|
||||
}, [application.vaultDisplayService, application.vaultLocks, canShowLockOption, isLocked, vault])
|
||||
|
||||
const isCurrentUserAdmin = !vault.isSharedVaultListing()
|
||||
? true
|
||||
: application.vaultUsers.isCurrentUserSharedVaultAdmin(vault)
|
||||
|
||||
const ensureVaultIsUnlocked = useCallback(async () => {
|
||||
if (!application.vaultLocks.isVaultLocked(vault)) {
|
||||
return true
|
||||
}
|
||||
const unlocked = await application.vaultDisplayService.unlockVault(vault)
|
||||
return unlocked
|
||||
}, [application, vault])
|
||||
|
||||
return {
|
||||
canShowLockOption,
|
||||
isLocked,
|
||||
toggleLock,
|
||||
ensureVaultIsUnlocked,
|
||||
isCurrentUserAdmin,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user