@tosin2013/kanbn
Version:
A CLI Kanban board with AI-powered task management features
86 lines (76 loc) • 2.08 kB
JavaScript
const kanbnModule = require('../main');
const utility = require('../utility');
const inquirer = require('inquirer');
/**
* Remove a task
* @param {string} taskId
* @param {boolean} removeFile
* @param {object} kanbnInstance The Kanbn instance to use
* @returns {Promise<string>} A promise that resolves with the task ID
*/
async function removeTask(taskId, removeFile, kanbnInstance) {
try {
const result = await kanbnInstance.deleteTask(taskId, removeFile);
console.log(`Removed task "${taskId}"${removeFile ? ' file and index entry' : ' from the index'}`);
return result;
} catch (error) {
utility.error(error);
throw error;
}
}
module.exports = async args => {
const kanbn = kanbnModule();
// Make sure kanbn has been initialised
if (!await kanbn.initialised()) {
utility.error('Kanbn has not been initialised in this folder\nTry running: {b}kanbn init{b}');
return;
}
// Get the task that we're removing
const taskId = args._[1];
if (!taskId) {
utility.error('No task id specified\nTry running {b}kanbn remove "task id"{b}');
return;
}
// Make sure the task exists
try {
await kanbn.taskExists(taskId);
} catch (error) {
utility.error(error);
return;
}
// Get the index
let index;
try {
index = await kanbn.getIndex();
} catch (error) {
utility.error(error);
return;
}
// If the force flag is specified, remove the task without asking
if (args.force) {
try {
await removeTask(taskId, !args.index, kanbn);
} catch (error) {
// Error already logged in removeTask
throw error;
}
// Otherwise, prompt for confirmation first
} else {
try {
const answers = await inquirer.prompt([
{
type: 'confirm',
message: 'Are you sure you want to remove this task?',
name: 'sure',
default: false
}
]);
if (answers.sure) {
await removeTask(taskId, !args.index, kanbn);
}
} catch (error) {
utility.error(error);
throw error;
}
}
};