@tosin2013/kanbn
Version:
A CLI Kanban board with AI-powered task management features
107 lines (94 loc) • 2.48 kB
JavaScript
const kanbnModule = require('../main');
const utility = require('../utility');
const inquirer = require('inquirer');
/**
* Rename a task interactively
* @param {object} taskData
* @return {Promise<any>}
*/
async function interactive(taskData) {
return await inquirer.prompt([
{
type: 'input',
name: 'name',
message: 'Task name:',
default: taskData.name || '',
validate: async value => {
if (!value) {
return 'Task name cannot be empty';
}
return true;
}
}
]);
}
/**
* Rename a task
* @param {string} taskId
* @param {string} newTaskName
* @param {string} currentTaskName
* @param {object} kanbn The kanbn instance
*/
function renameTask(taskId, newTaskName, currentTaskName, kanbn) {
// Check if the new name is the same as the current name
if (newTaskName === currentTaskName) {
utility.error(`Task "${taskId}" already has the name "${newTaskName}"`);
return;
}
// New name is different to current name, so rename the task
kanbn
.renameTask(taskId, newTaskName)
.then(newTaskId => {
console.log(`Renamed task "${taskId}" to "${newTaskId}"`);
})
.catch(error => {
utility.error(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 renaming
const taskId = args._[1];
if (!taskId) {
utility.error('No task id specified\nTry running {b}kanbn rename "task id"{b}');
return;
}
// Make sure the task exists
try {
await kanbn.taskExists(taskId);
} catch (error) {
utility.error(error);
return;
}
// Get the current task data
let taskData;
try {
taskData = await kanbn.getTask(taskId);
} catch (error) {
utility.error(error);
return;
}
const currentTaskName = taskData.name;
// Get new task name from arguments
if (args.name) {
taskData.name = utility.strArg(args.name);
}
// Rename task interactively
if (args.interactive) {
interactive(taskData)
.then(answers => {
renameTask(taskId, answers.name, currentTaskName, kanbn);
})
.catch(error => {
utility.error(error);
});
// Otherwise rename task non-interactively
} else {
renameTask(taskId, taskData.name, currentTaskName, kanbn);
}
};