chore: show current vault in template note if using exclusive mode

This commit is contained in:
Aman Harwara
2023-09-14 15:25:24 +05:30
parent cac8f4adf5
commit 7b0e4d0edc
3 changed files with 54 additions and 17 deletions

View File

@@ -14,6 +14,7 @@ import {
VaultLockServiceEvent,
} from '@standardnotes/services'
import {
DecryptedItemInterface,
ExclusionaryOptions,
VaultDisplayOptions,
VaultDisplayOptionsPersistable,
@@ -103,6 +104,19 @@ export class VaultDisplayService
return this.options.isInExclusiveDisplayMode()
}
getItemVault(item: DecryptedItemInterface): VaultListingInterface | undefined {
if (this.application.items.isTemplateItem(item)) {
if (this.exclusivelyShownVault) {
return this.exclusivelyShownVault
}
return undefined
}
const vault = this.application.vaults.getItemVault(item)
return vault
}
changeToMultipleVaultDisplayMode(): void {
const vaults = this.application.vaults.getVaults()
const lockedVaults = this.application.vaultLocks.getLockedvaults()

View File

@@ -1,9 +1,11 @@
import { VaultDisplayOptions, VaultListingInterface } from '@standardnotes/models'
import { DecryptedItemInterface, VaultDisplayOptions, VaultListingInterface } from '@standardnotes/models'
import { AbstractUIServiceInterface } from '../Abstract/AbstractUIServiceInterface'
export interface VaultDisplayServiceInterface extends AbstractUIServiceInterface {
exclusivelyShownVault?: VaultListingInterface
getItemVault(item: DecryptedItemInterface): VaultListingInterface | undefined
getOptions(): VaultDisplayOptions
isVaultDisabledOrLocked(vault: VaultListingInterface): boolean

View File

@@ -1,7 +1,12 @@
import { useApplication } from '@/Components/ApplicationProvider'
import { DecryptedItemInterface, TrustedContactInterface, VaultListingInterface } from '@standardnotes/snjs'
import useItem from './useItem'
import { useRef } from 'react'
import {
ContentType,
DecryptedItemInterface,
TrustedContactInterface,
VaultListingInterface,
} from '@standardnotes/snjs'
import { useCallback, useEffect, useLayoutEffect, useState } from 'react'
import { useStateRef } from './useStateRef'
type ItemVaultInfo = {
vault?: VaultListingInterface
@@ -12,21 +17,37 @@ type ItemVaultInfo = {
export const useItemVaultInfo = (item: DecryptedItemInterface): ItemVaultInfo => {
const application = useApplication()
const info = useRef<ItemVaultInfo>({
vault: undefined,
lastEditedByContact: undefined,
sharedByContact: undefined,
})
const [vault, setVault] = useState<VaultListingInterface>()
const vaultRef = useStateRef(vault)
const [lastEditedByContact, setLastEditedByContact] = useState<TrustedContactInterface>()
const [sharedByContact, setSharedByContact] = useState<TrustedContactInterface>()
info.current.vault = useItem(application.vaults.getItemVault(item)?.uuid)
const updateInfo = useCallback(() => {
if (!application.featuresController.isEntitledToVaults()) {
return
}
const lastEditedBy = application.sharedVaults.getItemLastEditedBy(item)
info.current.lastEditedByContact = lastEditedBy || info.current.lastEditedByContact
info.current.sharedByContact = application.sharedVaults.getItemSharedBy(item)
setVault(application.vaultDisplayService.getItemVault(item))
setLastEditedByContact((lastEditedBy) => application.sharedVaults.getItemLastEditedBy(item) || lastEditedBy)
setSharedByContact(application.sharedVaults.getItemSharedBy(item))
}, [application.featuresController, application.sharedVaults, application.vaultDisplayService, item])
if (!application.featuresController.isEntitledToVaults()) {
return info.current
useLayoutEffect(() => {
updateInfo()
}, [updateInfo])
useEffect(() => {
return application.items.streamItems(ContentType.TYPES.VaultListing, ({ changed, inserted }) => {
const matchingItem = changed.concat(inserted).find((vault) => vault.uuid === vaultRef.current?.uuid)
if (matchingItem) {
setVault(matchingItem as VaultListingInterface)
}
})
}, [application.items, vaultRef])
return {
vault,
lastEditedByContact,
sharedByContact,
}
return info.current
}