UNPKG

@wordpress/core-data

Version:
78 lines (77 loc) 2.85 kB
// packages/core-data/src/hooks/use-resource-permissions.ts import deprecated from "@wordpress/deprecated"; import warning from "@wordpress/warning"; import { store as coreStore } from "../"; import { Status } from "./constants"; import useQuerySelect from "./use-query-select"; function useResourcePermissions(resource, id) { const isEntity = typeof resource === "object"; const resourceAsString = isEntity ? JSON.stringify(resource) : resource; if (isEntity && typeof id !== "undefined") { warning( `When 'resource' is an entity object, passing 'id' as a separate argument isn't supported.` ); } return useQuerySelect( (resolve) => { const hasId = isEntity ? !!resource.id : !!id; const { canUser } = resolve(coreStore); const create = canUser( "create", isEntity ? { kind: resource.kind, name: resource.name } : resource ); if (!hasId) { const read2 = canUser("read", resource); const isResolving2 = create.isResolving || read2.isResolving; const hasResolved2 = create.hasResolved && read2.hasResolved; let status2 = Status.Idle; if (isResolving2) { status2 = Status.Resolving; } else if (hasResolved2) { status2 = Status.Success; } return { status: status2, isResolving: isResolving2, hasResolved: hasResolved2, canCreate: create.hasResolved && create.data, canRead: read2.hasResolved && read2.data }; } const read = canUser("read", resource, id); const update = canUser("update", resource, id); const _delete = canUser("delete", resource, id); const isResolving = read.isResolving || create.isResolving || update.isResolving || _delete.isResolving; const hasResolved = read.hasResolved && create.hasResolved && update.hasResolved && _delete.hasResolved; let status = Status.Idle; if (isResolving) { status = Status.Resolving; } else if (hasResolved) { status = Status.Success; } return { status, isResolving, hasResolved, canRead: hasResolved && read.data, canCreate: hasResolved && create.data, canUpdate: hasResolved && update.data, canDelete: hasResolved && _delete.data }; }, [resourceAsString, id] ); } var use_resource_permissions_default = useResourcePermissions; function __experimentalUseResourcePermissions(resource, id) { deprecated(`wp.data.__experimentalUseResourcePermissions`, { alternative: "wp.data.useResourcePermissions", since: "6.1" }); return useResourcePermissions(resource, id); } export { __experimentalUseResourcePermissions, use_resource_permissions_default as default }; //# sourceMappingURL=use-resource-permissions.js.map