@wordpress/core-data
Version:
Access to and manipulation of core WordPress entities.
78 lines (77 loc) • 2.85 kB
JavaScript
// 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