@wordpress/core-data
Version:
Access to and manipulation of core WordPress entities.
69 lines (67 loc) • 1.58 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createLocks;
var _reducer = _interopRequireDefault(require("./reducer"));
var _selectors = require("./selectors");
/**
* Internal dependencies
*/
function createLocks() {
let state = (0, _reducer.default)(undefined, {
type: '@@INIT'
});
function processPendingLockRequests() {
for (const request of (0, _selectors.getPendingLockRequests)(state)) {
const {
store,
path,
exclusive,
notifyAcquired
} = request;
if ((0, _selectors.isLockAvailable)(state, store, path, {
exclusive
})) {
const lock = {
store,
path,
exclusive
};
state = (0, _reducer.default)(state, {
type: 'GRANT_LOCK_REQUEST',
lock,
request
});
notifyAcquired(lock);
}
}
}
function acquire(store, path, exclusive) {
return new Promise(resolve => {
state = (0, _reducer.default)(state, {
type: 'ENQUEUE_LOCK_REQUEST',
request: {
store,
path,
exclusive,
notifyAcquired: resolve
}
});
processPendingLockRequests();
});
}
function release(lock) {
state = (0, _reducer.default)(state, {
type: 'RELEASE_LOCK',
lock
});
processPendingLockRequests();
}
return {
acquire,
release
};
}
//# sourceMappingURL=engine.js.map