Enhance bootcamp with rich text editor, curriculum management, and video toggle
Phase 1: Rich Text Editor with Code Syntax Highlighting - Add TipTap CodeBlock extension with lowlight for syntax highlighting - Support multiple languages (JavaScript, TypeScript, Python, Java, C++, HTML, CSS, JSON) - Add copy-to-clipboard button on code blocks - Add line numbers display with CSS - Replace textarea with RichTextEditor in CurriculumEditor - Add DOMPurify sanitization in Bootcamp display - Add dark theme syntax highlighting styles Phase 2: Admin Curriculum Management Page - Create dedicated ProductCurriculum page at /admin/products/:id/curriculum - Three-column layout: Modules (3) | Lessons (5) | Editor (4) - Full-page UX with drag-and-drop reordering - Add "Manage Curriculum" button for bootcamp products in AdminProducts - Breadcrumb navigation back to products Phase 3: Product-Level Video Source Toggle - Add youtube_url and embed_code columns to bootcamp_lessons table - Add video_source and video_source_config columns to products table - Update ProductCurriculum with separate YouTube URL and Embed Code fields - Create smart VideoPlayer component in Bootcamp.tsx - Support YouTube ↔ Embed switching with smart fallback - Show "Konten tidak tersedia" warning when no video configured - Maintain backward compatibility with existing video_url field 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -37,6 +37,7 @@ import AdminEvents from "./pages/admin/AdminEvents";
|
||||
import AdminSettings from "./pages/admin/AdminSettings";
|
||||
import AdminConsulting from "./pages/admin/AdminConsulting";
|
||||
import AdminReviews from "./pages/admin/AdminReviews";
|
||||
import ProductCurriculum from "./pages/admin/ProductCurriculum";
|
||||
|
||||
const queryClient = new QueryClient();
|
||||
|
||||
@@ -73,6 +74,7 @@ const App = () => (
|
||||
{/* Admin routes */}
|
||||
<Route path="/admin" element={<AdminDashboard />} />
|
||||
<Route path="/admin/products" element={<AdminProducts />} />
|
||||
<Route path="/admin/products/:id/curriculum" element={<ProductCurriculum />} />
|
||||
<Route path="/admin/bootcamp" element={<AdminBootcamp />} />
|
||||
<Route path="/admin/orders" element={<AdminOrders />} />
|
||||
<Route path="/admin/members" element={<AdminMembers />} />
|
||||
|
||||
Reference in New Issue
Block a user