import React, { useState, useEffect, useRef } from 'react'; import { Heart, Calendar, MapPin, Star, Menu, X, Instagram, Mail, Phone, ChevronRight, Sparkles, Camera, Lock, Save, LogOut, Loader2, CheckCircle, ArrowLeft, ChevronLeft, MessageCircle, Plus, Minus, Feather, Quote } from 'lucide-react'; // ⚠️ PENTING: MASUKKAN URL GOOGLE APPS SCRIPT ANDA DI SINI const GOOGLE_SCRIPT_URL = "https://script.google.com/macros/s/AKfycbwsSPmOLtgdhYG61bDDY_xKNLKFKTgRz0SId9_g23N-VC7WS-d1UBN4xYOH_Nur5Z_S/exec"; // ========================================== // KOMPONEN DASHBOARD ADMIN // ========================================== const AdminPanel = ({ initialData, onBack }) => { const [isLoggedIn, setIsLoggedIn] = useState(false); const [password, setPassword] = useState(''); const [formData, setFormData] = useState({}); const [isSaving, setIsSaving] = useState(false); const [toast, setToast] = useState({ show: false, message: '', type: '' }); useEffect(() => { if (initialData) setFormData(initialData); }, [initialData]); const showToast = (msg, type = 'success') => { setToast({ show: true, message: msg, type }); setTimeout(() => setToast({ show: false, message: '', type: '' }), 3000); }; const handleLogin = (e) => { e.preventDefault(); if (password.trim() !== '') setIsLoggedIn(true); }; const handleSave = async () => { setIsSaving(true); try { const response = await fetch(GOOGLE_SCRIPT_URL, { method: 'POST', headers: { 'Content-Type': 'text/plain;charset=utf-8' }, body: JSON.stringify({ password, updates: formData }) }); const result = await response.json(); if (result.status === 'success') { showToast(result.message, 'success'); } else { showToast(result.message, 'error'); if (result.message.toLowerCase().includes("sandi")) { setTimeout(() => setIsLoggedIn(false), 2000); } } } catch (error) { showToast('Gagal terhubung ke server. Pastikan URL Script benar.', 'error'); } setIsSaving(false); }; if (!isLoggedIn) { return (

Admin Login

Masukkan kata sandi untuk masuk ke panel pengaturan CMS.

setPassword(e.target.value)} className="w-full px-4 py-3 bg-gray-50 border border-gray-200 rounded-xl focus:outline-none focus:border-[#9C7449] transition-all" placeholder="Kata Sandi..." required />
); } return (
{toast.message}

Editor Konten Website

{Object.keys(formData).length === 0 ? (
Tidak ada data yang ditemukan. Pastikan URL Google Script sudah diisi dan Spreadsheet tidak kosong.
) : (
{Object.keys(formData).sort().map(key => (
{String(formData[key]).length > 60 || key.includes('desc') ? (