UNPKG

@wordpress/core-data

Version:
142 lines (139 loc) 4.14 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.__experimentalUseResourcePermissions = __experimentalUseResourcePermissions; exports.default = useResourcePermissions; var _deprecated = _interopRequireDefault(require("@wordpress/deprecated")); var _ = require("../"); var _constants = require("./constants"); var _useQuerySelect = _interopRequireDefault(require("./use-query-select")); /** * WordPress dependencies */ /** * Internal dependencies */ /** * Resolves resource permissions. * * @since 6.1.0 Introduced in WordPress core. * * @param resource The resource in question, e.g. media. * @param id ID of a specific resource entry, if needed, e.g. 10. * * @example * ```js * import { useResourcePermissions } from '@wordpress/core-data'; * * function PagesList() { * const { canCreate, isResolving } = useResourcePermissions( 'pages' ); * * if ( isResolving ) { * return 'Loading ...'; * } * * return ( * <div> * {canCreate ? (<button>+ Create a new page</button>) : false} * // ... * </div> * ); * } * * // Rendered in the application: * // <PagesList /> * ``` * * @example * ```js * import { useResourcePermissions } from '@wordpress/core-data'; * * function Page({ pageId }) { * const { * canCreate, * canUpdate, * canDelete, * isResolving * } = useResourcePermissions( 'pages', pageId ); * * if ( isResolving ) { * return 'Loading ...'; * } * * return ( * <div> * {canCreate ? (<button>+ Create a new page</button>) : false} * {canUpdate ? (<button>Edit page</button>) : false} * {canDelete ? (<button>Delete page</button>) : false} * // ... * </div> * ); * } * * // Rendered in the application: * // <Page pageId={ 15 } /> * ``` * * In the above example, when `PagesList` is rendered into an * application, the appropriate permissions and the resolution details will be retrieved from * the store state using `canUser()`, or resolved if missing. * * @return Entity records data. * @template IdType */ function useResourcePermissions(resource, id) { return (0, _useQuerySelect.default)(resolve => { const { canUser } = resolve(_.store); const create = canUser('create', resource); if (!id) { const read = canUser('read', resource); const isResolving = create.isResolving || read.isResolving; const hasResolved = create.hasResolved && read.hasResolved; let status = _constants.Status.Idle; if (isResolving) { status = _constants.Status.Resolving; } else if (hasResolved) { status = _constants.Status.Success; } return { status, isResolving, hasResolved, canCreate: create.hasResolved && create.data, canRead: read.hasResolved && read.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 = _constants.Status.Idle; if (isResolving) { status = _constants.Status.Resolving; } else if (hasResolved) { status = _constants.Status.Success; } return { status, isResolving, hasResolved, canRead: hasResolved && read.data, canCreate: hasResolved && create.data, canUpdate: hasResolved && update.data, canDelete: hasResolved && _delete.data }; }, [resource, id]); } function __experimentalUseResourcePermissions(resource, id) { (0, _deprecated.default)(`wp.data.__experimentalUseResourcePermissions`, { alternative: 'wp.data.useResourcePermissions', since: '6.1' }); return useResourcePermissions(resource, id); } //# sourceMappingURL=use-resource-permissions.js.map