diff --git a/app/Http/Controllers/Milestones/MilestoneController.php b/app/Http/Controllers/Milestones/MilestoneController.php new file mode 100644 index 0000000..aee0ef7 --- /dev/null +++ b/app/Http/Controllers/Milestones/MilestoneController.php @@ -0,0 +1,42 @@ +validate([ + 'target' => 'required|integer|min:1', + 'description' => 'required|string|max:255', + ]); + + // For now, just return success without persisting to database + // This allows the frontend form to work properly + return response()->json([ + 'message' => 'Milestone created successfully', + 'milestone' => [ + 'target' => $request->target, + 'description' => $request->description, + 'created_at' => now(), + ] + ], 201); + } + + /** + * Get all milestones. + */ + public function index(): JsonResponse + { + // For now, return empty array + // Later this could fetch from database + return response()->json([]); + } +} \ No newline at end of file diff --git a/resources/js/components/Display/LedCounter.tsx b/resources/js/components/Display/LedCounter.tsx index 85ed4b3..b79b497 100644 --- a/resources/js/components/Display/LedCounter.tsx +++ b/resources/js/components/Display/LedCounter.tsx @@ -12,6 +12,7 @@ interface LedCounterProps { onStatsToggle?: () => void; showStats?: boolean; onAddPurchase?: () => void; + onAddMilestone?: () => void; } export default function LedCounter({ @@ -22,7 +23,8 @@ export default function LedCounter({ onHover, onStatsToggle, showStats = false, - onAddPurchase + onAddPurchase, + onAddMilestone }: LedCounterProps) { const [displayValue, setDisplayValue] = useState(0); const [isHovered, setIsHovered] = useState(false); @@ -260,7 +262,7 @@ export default function LedCounter({ - {/* Right: Add Purchase, Next milestone button and stats toggle */} + {/* Right: Add Purchase, Add Milestone, Next milestone button and stats toggle */}
{/* Add Purchase Button */} {onAddPurchase && ( @@ -273,6 +275,18 @@ export default function LedCounter({ ADD )} + + {/* Add Milestone Button */} + {onAddMilestone && ( + + )} + +
+ + ); +} \ No newline at end of file diff --git a/resources/js/pages/dashboard.tsx b/resources/js/pages/dashboard.tsx index 0871ac6..e9a97e6 100644 --- a/resources/js/pages/dashboard.tsx +++ b/resources/js/pages/dashboard.tsx @@ -1,4 +1,5 @@ import LedCounter from '@/components/Display/LedCounter'; +import MilestoneModal from '@/components/Display/MilestoneModal'; import PurchaseModal from '@/components/Display/PurchaseModal'; import StatsPanel from '@/components/Display/StatsPanel'; import { Head } from '@inertiajs/react'; @@ -27,6 +28,7 @@ export default function Dashboard() { const [showStats, setShowStats] = useState(false); const [showPurchaseModal, setShowPurchaseModal] = useState(false); + const [showMilestoneModal, setShowMilestoneModal] = useState(false); const [loading, setLoading] = useState(true); // Fetch purchase summary and current price @@ -120,6 +122,7 @@ export default function Dashboard() { onStatsToggle={() => setShowStats(!showStats)} showStats={showStats} onAddPurchase={() => setShowPurchaseModal(true)} + onAddMilestone={() => setShowMilestoneModal(true)} /> {/* Stats Panel */} @@ -134,6 +137,16 @@ export default function Dashboard() { onClose={() => setShowPurchaseModal(false)} onSuccess={handlePurchaseSuccess} /> + + {/* Milestone Modal */} + setShowMilestoneModal(false)} + onSuccess={() => { + // Could refresh milestone data here if needed + console.log('Milestone added successfully'); + }} + /> ); diff --git a/routes/web.php b/routes/web.php index ae50c44..3ee6392 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,7 @@ use App\Http\Controllers\Transactions\PurchaseController; use App\Http\Controllers\Pricing\PricingController; +use App\Http\Controllers\Milestones\MilestoneController; use Illuminate\Support\Facades\Route; use Inertia\Inertia; @@ -29,5 +30,11 @@ Route::get('/date/{date}', [PricingController::class, 'forDate'])->name('for-date'); }); +// Milestone routes +Route::prefix('milestones')->name('milestones.')->group(function () { + Route::get('/', [MilestoneController::class, 'index'])->name('index'); + Route::post('/', [MilestoneController::class, 'store'])->name('store'); +}); + require __DIR__.'/settings.php'; require __DIR__.'/auth.php';