sanity
Version:
Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches
40 lines (32 loc) • 1.33 kB
text/typescript
import {useMemo} from 'react'
import {useFeatureEnabled} from '../../hooks/useFeatureEnabled'
import {useResourceCache} from '../../store/_legacy/ResourceCacheProvider'
import {createReleasePermissionsStore} from './createReleasePermissionsStore'
const RELEASE_PERMISSIONS_RESOURCE_CACHE_NAMESPACE = 'ReleasePermissions'
export interface useReleasePermissionsValue {
checkWithPermissionGuard: <T extends (...args: any[]) => Promise<void> | void>(
action: T,
...args: Parameters<T>
) => Promise<boolean>
permissions: {[key: string]: boolean}
}
/**
* @internal
*/
export function useReleasePermissions(): useReleasePermissionsValue {
const resourceCache = useResourceCache()
const contentReleasesFeature = useFeatureEnabled('contentReleases')
return useMemo(() => {
const releasePermissionsStore =
resourceCache.get<useReleasePermissionsValue>({
dependencies: [contentReleasesFeature],
namespace: RELEASE_PERMISSIONS_RESOURCE_CACHE_NAMESPACE,
}) || createReleasePermissionsStore(contentReleasesFeature.enabled)
resourceCache.set({
namespace: RELEASE_PERMISSIONS_RESOURCE_CACHE_NAMESPACE,
value: releasePermissionsStore,
dependencies: [contentReleasesFeature],
})
return releasePermissionsStore
}, [contentReleasesFeature, resourceCache])
}