worklog-cli
Version:
A CLI tool for managing worklogs and timesheets
68 lines (56 loc) • 2.06 kB
JavaScript
import { program } from 'commander';
import inquirer from 'inquirer';
import dayjs from 'dayjs';
import chalk from 'chalk';
import figlet from 'figlet';
import boxen from 'boxen';
import gradient from 'gradient-string';
import { execSync } from 'child_process';
// These must also be ESM-compatible:
import { appendWorkLog, getTodayLogs, getTodayFirstLogStartTime } from './utils/sheets.js';
import { submitForm } from './utils/form.js';
program
.command('log')
.description('Log today\'s work')
.action(async () => {
const bannerText = figlet.textSync('Work Logger', { horizontalLayout: 'default' });
const styledBanner = gradient.pastel.multiline(bannerText);
console.log(
boxen(`${styledBanner}\n${chalk.gray('By Ramya Lakhani')}`, {
padding: 1,
borderColor: 'cyan',
borderStyle: 'round',
margin: 1,
})
);
const answers = await inquirer.prompt([
{ type: 'input', name: 'task', message: chalk.cyan('Task description:') },
{ type: 'input', name: 'start', message: chalk.cyan('Start time (HH:mm):') },
{ type: 'input', name: 'end', message: chalk.cyan('End time (HH:mm):') },
{ type: 'input', name: 'project', message: chalk.cyan('Project name:') },
]);
const date = dayjs().format('YYYY-MM-DD');
await appendWorkLog({
date,
task: answers.task,
start: answers.start,
end: answers.end,
project: answers.project,
});
console.log(chalk.green('\n✅ Work log successfully added to Google Sheets.\n'));
});
program
.command('submit-form <time>')
.description('Submit today\'s tasks to Google Form')
.action(async time => {
const logs = await getTodayLogs();
const startTime = await getTodayFirstLogStartTime();
if (!Object.keys(logs).length) {
console.log('⚠️ No tasks found for today.');
return;
}
await submitForm({ logs, startTime, time });
execSync('senddiscordtask ' + process.env.DISCORD_USER_ID_TO_SEND);
});
program.parse(process.argv);