feat: Add Plugin Marketplace and My Plugins management pages

This commit completes the plugin system UI by adding two key pages:

1. Plugin Marketplace (/plugins/marketplace):
   - Browse and search platform-provided plugins
   - Filter by category (EMAIL, REPORTS, CUSTOMER, BOOKING, etc.)
   - View plugin details including ratings, install count, description
   - Install plugins with one click
   - Modal view for detailed plugin information

2. My Plugins (/plugins/my-plugins):
   - View all installed plugins
   - Manage plugin activation status
   - Update plugins when new versions available
   - Rate and review installed plugins
   - Uninstall plugins with confirmation
   - Links to create custom plugins and browse marketplace

Additional changes:
- Added plugin routes to App.tsx with owner/manager access control
- Updated HelpPluginDocs.tsx with navigation callout boxes
- Added TypeScript interfaces for PluginTemplate and PluginInstallation
- Both pages feature full dark mode support
- Professional UI with Tailwind CSS styling
- React Query integration for data fetching

The pages are accessible from the Plugins dropdown menu in the sidebar.

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
poduck
2025-11-28 21:36:50 -05:00
parent e234d5fd9c
commit 141eadca8d
5 changed files with 1067 additions and 0 deletions

View File

@@ -301,4 +301,38 @@ export interface OAuthProviderCredential {
export interface BusinessOAuthCredentialsResponse {
credentials: Record<string, OAuthProviderCredential>;
useCustomCredentials: boolean;
}
// --- Plugin Types ---
export type PluginCategory = 'EMAIL' | 'REPORTS' | 'CUSTOMER' | 'BOOKING' | 'INTEGRATION' | 'AUTOMATION' | 'OTHER';
export interface PluginTemplate {
id: string;
name: string;
description: string;
category: PluginCategory;
version: string;
author: string;
rating: number;
ratingCount: number;
installCount: number;
isVerified: boolean;
isFeatured: boolean;
createdAt: string;
updatedAt: string;
}
export interface PluginInstallation {
id: string;
template: string;
templateName: string;
templateDescription: string;
category: PluginCategory;
version: string;
isActive: boolean;
installedAt: string;
hasUpdate: boolean;
rating?: number;
review?: string;
}