import React, { useState, useMemo } from 'react'; import { Utensils, Wallet, Users, Store, List, ShoppingCart, Plus, Minus, Check, LogOut, AlertCircle, ChevronRight, Receipt, Clock } from 'lucide-react'; // --- INITIAL MOCK DATA (Simulasi Database) --- const initialRestaurants = [ { id: 1, name: 'Warteg Bahari Kharisma' }, { id: 2, name: 'Ayam Geprek Bensu' }, { id: 3, name: 'Soto Lamongan Cak Har' } ]; const initialMenus = [ { id: 1, restaurant_id: 1, name: 'Nasi Telur Dadar + Orek', price: 15000 }, { id: 2, restaurant_id: 1, name: 'Nasi Ayam Goreng', price: 18000 }, { id: 3, restaurant_id: 1, name: 'Es Teh Manis', price: 4000 }, { id: 4, restaurant_id: 2, name: 'Paket Geprek Leleh', price: 25000 }, { id: 5, restaurant_id: 2, name: 'Jamur Crispy', price: 10000 }, { id: 6, restaurant_id: 3, name: 'Soto Ayam Campur', price: 18000 }, { id: 7, restaurant_id: 3, name: 'Soto Daging Pisah', price: 22000 }, ]; const initialOrders = [ { id: 1, userName: "Mbak Rini", total: 19000, items: [ { menuId: 1, name: 'Nasi Telur Dadar + Orek', price: 15000, qty: 1, notes: "Oreknya basah ya mas" }, { menuId: 3, name: 'Es Teh Manis', price: 4000, qty: 1, notes: "" }, ] } ]; // Helper: Format Rupiah const formatRp = (num) => 'Rp ' + num.toLocaleString('id-ID'); // ========================================== // MAIN APP COMPONENT // ========================================== export default function LunchApp() { // Global States const [currentUser, setCurrentUser] = useState(null); // null = belum login // "Database" States const [restaurants, setRestaurants] = useState(initialRestaurants); const [menus, setMenus] = useState(initialMenus); const [orders, setOrders] = useState(initialOrders); const [session, setSession] = useState({ isOpen: false, openRestoIds: [1, 2], // Default resto yang dipilih Admin endTime: '11:30', bankAccount: 'BCA 123456789 a.n Bapak OB', rejectMessage: 'Moon maaf, jam order udah lewat, silakan hubungi saya via wa... tapi please jangan order yang jauh2 ya 😭' }); // Handle Login Logic const handleLogin = (name, phone) => { // Sesuai PRD: Role Admin/OB jika login khusus. // Di sini kita buat trigger rahasia: Jika no HP '0000', maka dia OB. const role = phone === '0000' ? 'admin' : 'user'; setCurrentUser({ name, phone, role }); }; const handleLogout = () => { setCurrentUser(null); }; const addOrder = (orderData) => { setOrders([...orders, { id: Date.now(), ...orderData }]); }; return (
{/* Mobile Wrapper */}
{!currentUser ? ( ) : currentUser.role === 'admin' ? ( ) : ( )}
); } // ========================================== // LOGIN SCREEN // ========================================== function LoginScreen({ onLogin }) { const [name, setName] = useState(''); const [phone, setPhone] = useState(''); const handleSubmit = (e) => { e.preventDefault(); if (name.trim() && phone.trim()) { onLogin(name, phone); } }; return (

MakanBang!

Pesan makan siang kantor tanpa ribet, tanpa pusing ngitung.

setName(e.target.value)} placeholder="Mis: Aa Raffi" className="w-full border-2 border-gray-200 p-3 rounded-xl focus:border-amber-500 focus:outline-none transition" />
setPhone(e.target.value)} placeholder="0812xxxxxx" className="w-full border-2 border-gray-200 p-3 rounded-xl focus:border-amber-500 focus:outline-none transition" />

Rahasia Testing: Masukkan No. HP 0000 untuk login sebagai OB (Admin). Selain itu, Anda masuk sebagai Karyawan.

); } // ========================================== // ADMIN DASHBOARD & VIEWS // ========================================== function AdminDashboard({ onLogout, restaurants, setRestaurants, menus, setMenus, session, setSession, orders }) { const [activeTab, setActiveTab] = useState('lapak'); // lapak | master | rekap return ( <>

Panel OB

{activeTab === 'lapak' && } {activeTab === 'master' && } {activeTab === 'rekap' && }
{/* Admin Bottom Navigation */}
); } function AdminLapak({ session, setSession, restaurants }) { const [formData, setFormData] = useState(session); const handleToggleResto = (id) => { setFormData(prev => ({ ...prev, openRestoIds: prev.openRestoIds.includes(id) ? prev.openRestoIds.filter(rId => rId !== id) : [...prev.openRestoIds, id] })); }; const handleSave = () => { if (formData.openRestoIds.length === 0) return alert('Pilih minimal 1 restoran!'); setSession({ ...formData, isOpen: true }); }; if (session.isOpen) { return (

Lapak Sedang Buka!

Karyawan sekarang bisa melihat menu dan melakukan pemesanan.

); } return (

Setup Lapak Hari Ini

Pilih restoran dan atur batas waktu pesanan.

{restaurants.map(resto => ( ))}
setFormData({...formData, endTime: e.target.value})} className="w-full border p-3 rounded-xl bg-gray-50" />
setFormData({...formData, bankAccount: e.target.value})} className="w-full border p-3 rounded-xl bg-gray-50" placeholder="Misal: BCA 1234 a.n Budi" />