UNPKG

rflect

Version:

A CLI tool for guided reflections and journaling

143 lines (130 loc) 5.25 kB
const { checkConfig, updateConfig } = require('../utils/config'); const { deleteAllEntries, deleteEntryByFileName, getEntryDates, getEntryByFileName, } = require('../utils/entries'); const styles = require('../utils/styles'); const inquirer = require('inquirer'); async function deleteCommand(options) { try { const { isFirstTime, config } = await checkConfig(); if (isFirstTime) { console.log(styles.warning(`\nWelcome to rflect! Let's get you set up first.`)); console.log( styles.info('Run ') + styles.value('rflect init') + styles.info(' to start your reflection journey.') ); return; } if (!options.all && !options.date) { console.log(styles.help('Available options:')); console.log(styles.value(' rflect delete --all ') + styles.info('Remove all entries')); console.log( styles.value(' rflect delete --date ') + styles.info('Remove entries from specific date') ); return; } if (options.all) { const { firstConfirm } = await inquirer.prompt([ { type: 'confirm', name: 'firstConfirm', message: styles.warning( `⚠️ PERMANENT DELETION WARNING\n\nThis action will completely remove ALL of your journal entries from your computer.\n- This cannot be undone\n- ALL journal entries will be permanently deleted\n- This includes ALL saved entries across ALL dates\n\nAre you absolutely certain you want to proceed?` ), default: false, }, ]); if (firstConfirm) { const { finalConfirm } = await inquirer.prompt([ { type: 'confirm', name: 'finalConfirm', message: styles.warning( `🚨 FINAL CONFIRMATION\n\nYou are about to permanently delete EVERYTHING:\n- ALL journal entries will be IRREVERSIBLY ERASED\n- No recovery is possible\n\nDO YOU WANT TO CONTINUE?` ), default: false, }, ]); if (finalConfirm) { const deletedFileCount = await deleteAllEntries(); const totalEntryCount = config.stats.totalEntries; config.stats.deletedEntries += totalEntryCount; const totalWordCount = config.stats.totalWords; config.stats.deletedWords += totalWordCount; config.stats.totalEntries = 0; config.stats.totalWords = 0; await updateConfig(config); console.log(styles.success(`Deleted ${deletedFileCount} entries.`)); console.log('\n' + styles.info('🔄 Recommendation:')); console.log( styles.help(' - Use ') + styles.value('rflect init') + styles.help(' to reset your account settings and start a fresh reflection journey.') ); console.log( styles.help(' - This will help you reconfigure your preferences and goals.') ); } } } if (options.date) { const dates = await getEntryDates(); const answers = await inquirer.prompt([ { type: 'list', name: 'selectedEntry', message: styles.prompt(`Select the date/time of the entry you'd like to DELETE: `), choices: dates.map((date) => ({ name: date.dateString, value: { filename: date.filename, dateString: date.dateString, }, })), }, { type: 'confirm', name: 'confirmation', message: (answers) => styles.warning( `WARNING: This action cannot be undone. Are you sure you want to delete the entry from ${answers.selectedEntry.dateString}?` ), default: false, }, ]); if (answers.confirmation) { const fileToDelete = await getEntryByFileName(answers.selectedEntry.filename); await deleteEntryByFileName(answers.selectedEntry.filename); config.stats.totalEntries = config.stats.totalEntries - 1; config.stats.deletedEntries = config.stats.deletedEntries + 1; config.stats.deletedWords = config.stats.deletedWords + fileToDelete.content.wordCount; config.stats.totalWords = config.stats.totalWords - fileToDelete.content.wordCount; await updateConfig(config); console.log( styles.success(`Entry from ${answers.selectedEntry.dateString} deleted successfully.`) ); const remainingEntries = await getEntryDates(); if (remainingEntries.length === 0) { console.log('\n' + styles.info('🔄 Recommendation:')); console.log( styles.help(' - No entries remain. Consider using ') + styles.value('rflect init') + styles.help(' to reset your account settings.') ); console.log( styles.help(' - This will help you reconfigure your preferences and goals.') ); } } } } catch (error) { console.error(styles.error('Error during deletion: ') + styles.value(error.message)); console.log(styles.help('Please try again or report this issue.')); } } module.exports = deleteCommand;