30 lines
927 B
JavaScript
30 lines
927 B
JavaScript
function createAssignAndStart({ available, claim, start, recover, announce }) {
|
|
let request = null;
|
|
|
|
function run(item) {
|
|
if (request) return request;
|
|
if (!available()) {
|
|
announce('Today is full—remove an item before assigning this issue.');
|
|
return Promise.resolve('full');
|
|
}
|
|
request = Promise.resolve()
|
|
.then(() => claim(item))
|
|
.then(confirmed => {
|
|
const outcome = start(confirmed);
|
|
if (outcome === 'started') {
|
|
announce('Assigned, added to Today, and ready to work.');
|
|
return outcome;
|
|
}
|
|
announce('Assigned to you, but Today could not start. The issue is open so you can recover.');
|
|
recover(confirmed);
|
|
return 'recovery';
|
|
})
|
|
.finally(() => { request = null; });
|
|
return request;
|
|
}
|
|
|
|
return { run };
|
|
}
|
|
|
|
if (typeof module !== 'undefined' && module.exports) module.exports = createAssignAndStart;
|