Files
smoothschedule/frontend/src/pages/help/HelpTasks.tsx
poduck 11bb83a85d feat: Add comprehensive help documentation system and plugin creation page
- Add CreatePlugin.tsx page for custom plugin creation with code editor
- Add HelpButton component for contextual help links
- Create 21 new help pages covering all dashboard features:
  - Core: Dashboard, Scheduler, Tasks
  - Manage: Customers, Services, Resources, Staff
  - Communicate: Messages (Ticketing already existed)
  - Money: Payments
  - Extend: Plugins overview and creation guide
  - Settings: General, Resource Types, Booking, Appearance, Email, Domains, API, Auth, Billing, Quota
- Update HelpGuide.tsx as main documentation hub with quick start guide
- Add routes for all help pages in App.tsx
- Add HelpButton to Dashboard, Customers, Services, and Tasks pages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 02:18:05 -05:00

353 lines
17 KiB
TypeScript

/**
* Help Tasks Page
*
* Comprehensive help documentation for the Tasks (Scheduled Tasks) page.
*/
import React from 'react';
import { useTranslation } from 'react-i18next';
import { useNavigate, Link } from 'react-router-dom';
import {
ArrowLeft,
Clock,
Play,
Pause,
RefreshCw,
Zap,
Calendar,
Settings,
CheckCircle,
ChevronRight,
HelpCircle,
FileText,
AlertTriangle,
} from 'lucide-react';
const HelpTasks: React.FC = () => {
const { t } = useTranslation();
const navigate = useNavigate();
return (
<div className="max-w-4xl mx-auto py-8 px-4">
{/* Back Button */}
<button
onClick={() => navigate(-1)}
className="flex items-center gap-2 text-brand-600 hover:text-brand-700 dark:text-brand-400 mb-6"
>
<ArrowLeft size={20} />
{t('common.back', 'Back')}
</button>
{/* Header */}
<div className="mb-8">
<div className="flex items-center gap-3 mb-4">
<div className="w-12 h-12 rounded-xl bg-brand-100 dark:bg-brand-900/30 flex items-center justify-center">
<Clock size={24} className="text-brand-600 dark:text-brand-400" />
</div>
<div>
<h1 className="text-3xl font-bold text-gray-900 dark:text-white">
Tasks Guide
</h1>
<p className="text-gray-500 dark:text-gray-400">
Automate your business with scheduled tasks
</p>
</div>
</div>
</div>
{/* Overview Section */}
<section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center gap-2">
<Clock size={20} className="text-brand-500" />
Overview
</h2>
<div className="bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 p-6">
<p className="text-gray-600 dark:text-gray-300 mb-4">
Tasks are scheduled automations that run at specified intervals to help you manage your business. When you install a plugin from the marketplace, you can schedule it to run automatically - hourly, daily, weekly, or on custom schedules.
</p>
<p className="text-gray-600 dark:text-gray-300">
Tasks can send emails, generate reports, engage with customers, sync data with external services, and more. They run in the background so you can focus on running your business.
</p>
</div>
</section>
{/* Schedule Types Section */}
<section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center gap-2">
<Calendar size={20} className="text-brand-500" />
Schedule Types
</h2>
<div className="bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 p-6">
<div className="space-y-4">
<div className="flex items-start gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
<Clock size={20} className="text-blue-500 mt-0.5" />
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Hourly</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Runs every hour at the specified minute. Great for real-time monitoring and frequent updates.
</p>
</div>
</div>
<div className="flex items-start gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
<Calendar size={20} className="text-green-500 mt-0.5" />
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Daily</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Runs once per day at your chosen time. Perfect for daily reports, reminders, and cleanup tasks.
</p>
</div>
</div>
<div className="flex items-start gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
<RefreshCw size={20} className="text-purple-500 mt-0.5" />
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Weekly</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Runs once per week on your selected day. Ideal for weekly summaries, marketing campaigns, and reports.
</p>
</div>
</div>
<div className="flex items-start gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
<Settings size={20} className="text-orange-500 mt-0.5" />
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Custom (Cron)</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Advanced scheduling using cron expressions for complex schedules like "every Monday and Wednesday at 9am".
</p>
</div>
</div>
</div>
</div>
</section>
{/* Task Management Section */}
<section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center gap-2">
<Zap size={20} className="text-brand-500" />
Task Management
</h2>
<div className="bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 p-6">
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div className="flex items-start gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
<Play size={20} className="text-green-500 mt-0.5" />
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Run Now</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Manually trigger a task to run immediately, regardless of its schedule.
</p>
</div>
</div>
<div className="flex items-start gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
<Pause size={20} className="text-yellow-500 mt-0.5" />
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Pause/Resume</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Temporarily disable a task without deleting it. Resume when ready.
</p>
</div>
</div>
<div className="flex items-start gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
<FileText size={20} className="text-blue-500 mt-0.5" />
<div>
<h4 className="font-medium text-gray-900 dark:text-white">View Logs</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
See execution history, results, and any errors that occurred during task runs.
</p>
</div>
</div>
<div className="flex items-start gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
<Settings size={20} className="text-purple-500 mt-0.5" />
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Edit Configuration</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Modify task settings, change schedule, or update plugin configuration values.
</p>
</div>
</div>
</div>
</div>
</section>
{/* How to Create a Task Section */}
<section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center gap-2">
<CheckCircle size={20} className="text-brand-500" />
Creating a Scheduled Task
</h2>
<div className="bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 p-6">
<ol className="space-y-4">
<li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">1</span>
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Install a Plugin</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Go to the Plugin Marketplace and install a plugin you want to automate.
</p>
</div>
</li>
<li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">2</span>
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Configure the Plugin</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Set up any required configuration values for the plugin in My Plugins.
</p>
</div>
</li>
<li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">3</span>
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Navigate to Tasks</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Click "Tasks" in the sidebar to access the scheduled tasks page.
</p>
</div>
</li>
<li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">4</span>
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Create New Task</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Click "Create Task", select your installed plugin, and choose a schedule.
</p>
</div>
</li>
<li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">5</span>
<div>
<h4 className="font-medium text-gray-900 dark:text-white">Activate</h4>
<p className="text-sm text-gray-500 dark:text-gray-400">
Save the task. It will automatically run according to your schedule.
</p>
</div>
</li>
</ol>
</div>
</section>
{/* Task Status Section */}
<section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center gap-2">
<AlertTriangle size={20} className="text-brand-500" />
Task Statuses
</h2>
<div className="bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 p-6">
<div className="space-y-4">
<div className="flex items-center gap-4">
<span className="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full text-sm font-medium bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300 min-w-[100px]">
<CheckCircle size={14} /> Active
</span>
<p className="text-gray-600 dark:text-gray-300">
Task is scheduled and will run at the specified time
</p>
</div>
<div className="flex items-center gap-4">
<span className="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full text-sm font-medium bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300 min-w-[100px]">
<Pause size={14} /> Paused
</span>
<p className="text-gray-600 dark:text-gray-300">
Task is temporarily disabled and won't run until resumed
</p>
</div>
<div className="flex items-center gap-4">
<span className="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full text-sm font-medium bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300 min-w-[100px]">
<RefreshCw size={14} /> Running
</span>
<p className="text-gray-600 dark:text-gray-300">
Task is currently executing
</p>
</div>
<div className="flex items-center gap-4">
<span className="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full text-sm font-medium bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300 min-w-[100px]">
<AlertTriangle size={14} /> Failed
</span>
<p className="text-gray-600 dark:text-gray-300">
Last execution failed - check logs for details
</p>
</div>
</div>
</div>
</section>
{/* Benefits Section */}
<section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center gap-2">
<CheckCircle size={20} className="text-brand-500" />
Benefits
</h2>
<div className="bg-gradient-to-r from-brand-50 to-blue-50 dark:from-brand-900/20 dark:to-blue-900/20 rounded-xl border border-brand-200 dark:border-brand-800 p-6">
<ul className="space-y-3">
<li className="flex items-start gap-2">
<ChevronRight size={16} className="text-brand-500 mt-1 flex-shrink-0" />
<span className="text-gray-700 dark:text-gray-300">
<strong>Automation:</strong> Set it and forget it - tasks run automatically on schedule
</span>
</li>
<li className="flex items-start gap-2">
<ChevronRight size={16} className="text-brand-500 mt-1 flex-shrink-0" />
<span className="text-gray-700 dark:text-gray-300">
<strong>Time Savings:</strong> Automate repetitive tasks that would take hours manually
</span>
</li>
<li className="flex items-start gap-2">
<ChevronRight size={16} className="text-brand-500 mt-1 flex-shrink-0" />
<span className="text-gray-700 dark:text-gray-300">
<strong>Consistency:</strong> Tasks run exactly when scheduled, every time
</span>
</li>
<li className="flex items-start gap-2">
<ChevronRight size={16} className="text-brand-500 mt-1 flex-shrink-0" />
<span className="text-gray-700 dark:text-gray-300">
<strong>Visibility:</strong> Full logging shows exactly what happened and when
</span>
</li>
</ul>
</div>
</section>
{/* Related Features */}
<section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">
Related Features
</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link
to="/help/plugins-overview"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
>
<Zap size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Plugins Overview</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link>
<Link
to="/help/plugins"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
>
<FileText size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Plugin Documentation</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link>
</div>
</section>
{/* Need More Help */}
<section className="bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 p-6 text-center">
<HelpCircle size={32} className="mx-auto text-brand-500 mb-3" />
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
Need More Help?
</h3>
<p className="text-gray-600 dark:text-gray-300 mb-4">
If you have questions that aren't covered here, our support team is ready to help.
</p>
<button
onClick={() => navigate('/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
>
Contact Support
</button>
</section>
</div>
);
};
export default HelpTasks;