29 lines
1.0 KiB
JavaScript
29 lines
1.0 KiB
JavaScript
function createSearchDefer({ claim, accept, defer, refresh, announce, formatTime }) {
|
|
let request = null;
|
|
|
|
function run(detail, until) {
|
|
if (request) return request;
|
|
const wasClaimable = Boolean(detail?.claimable);
|
|
request = Promise.resolve(wasClaimable ? claim(detail) : detail)
|
|
.then(confirmed => {
|
|
const item = accept(confirmed);
|
|
const outcome = defer(item, until);
|
|
refresh();
|
|
if (outcome === 'deferred') {
|
|
announce((wasClaimable ? 'Assigned and deferred until ' : 'Deferred until ') + formatTime(until) + '.');
|
|
} else {
|
|
announce(wasClaimable
|
|
? 'Assignment succeeded, but Later could not be saved. Open this issue in My Work to retry.'
|
|
: 'Could not save Later on this device. Retry scheduling.');
|
|
}
|
|
return outcome;
|
|
})
|
|
.finally(() => { request = null; });
|
|
return request;
|
|
}
|
|
|
|
return { run, pending:() => Boolean(request) };
|
|
}
|
|
|
|
if (typeof module !== 'undefined' && module.exports) module.exports = createSearchDefer;
|