feat: Dashboard redesign, plan permissions, and help docs improvements

Major updates including:
- Customizable dashboard with drag-and-drop widget grid layout
- Plan-based feature locking for plugins and tasks
- Comprehensive help documentation updates across all pages
- Plugin seeding in deployment process for all tenants
- Permission synchronization system for subscription plans
- QuotaOverageModal component and enhanced UX flows

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-03 13:02:44 -05:00
parent 9444e26924
commit dcb14503a2
66 changed files with 7099 additions and 1467 deletions

View File

@@ -25,6 +25,8 @@ import {
import api from '../api/client';
import { PluginInstallation, PluginCategory } from '../types';
import EmailTemplateSelector from '../components/EmailTemplateSelector';
import { usePlanFeatures } from '../hooks/usePlanFeatures';
import { LockedSection } from '../components/UpgradePrompt';
// Category icon mapping
const categoryIcons: Record<PluginCategory, React.ReactNode> = {
@@ -60,6 +62,11 @@ const MyPlugins: React.FC = () => {
const [review, setReview] = useState('');
const [configValues, setConfigValues] = useState<Record<string, any>>({});
// Check plan permissions
const { canUse, isLoading: permissionsLoading } = usePlanFeatures();
const hasPluginsFeature = canUse('plugins');
const isLocked = !hasPluginsFeature;
// Fetch installed plugins
const { data: plugins = [], isLoading, error } = useQuery<PluginInstallation[]>({
queryKey: ['plugin-installations'],
@@ -227,7 +234,7 @@ const MyPlugins: React.FC = () => {
}
};
if (isLoading) {
if (isLoading || permissionsLoading) {
return (
<div className="p-8">
<div className="flex items-center justify-center h-64">
@@ -250,6 +257,7 @@ const MyPlugins: React.FC = () => {
}
return (
<LockedSection feature="plugins" isLocked={isLocked} variant="overlay">
<div className="p-8 space-y-6 max-w-7xl mx-auto">
{/* Header */}
<div className="flex items-center justify-between">
@@ -763,6 +771,7 @@ const MyPlugins: React.FC = () => {
</div>
)}
</div>
</LockedSection>
);
};