"use client" import { useEffect, useState } from 'react'; import { signIn, signOut, useSession } from "next-auth/react"; import { getFips } from 'crypto'; import { Button, Modal } from 'flowbite-react'; import ValidasiLogin from '@/app/component/loginvalidasi'; function convertToWebP(file, maxWidth, maxHeight) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = function (event) { const img = new Image(); img.onload = function () { let width = img.width; let height = img.height; // Mengatur ukuran gambar if (width > maxWidth || height > maxHeight) { const aspectRatio = width / height; if (width > maxWidth) { width = maxWidth; height = width / aspectRatio; } if (height > maxHeight) { height = maxHeight; width = height * aspectRatio; } } const canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; const ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0, width, height); // Konversi ke format WebP canvas.toBlob(function (blob) { if (!blob) { reject(new Error('Konversi ke format WebP gagal')); } else { resolve(blob); } }, 'image/webp', 0.8); // Kualitas gambar, dalam hal ini, 0.8 }; img.src = event.target.result; }; reader.readAsDataURL(file); }); } function blobToBase64(blob) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = function () { const base64String = reader.result.split(',')[1]; // Mengambil bagian base64 saja resolve(base64String); }; reader.onerror = function (error) { reject(error); }; reader.readAsDataURL(blob); }); } export default function EditProfile() { const [popupVisible, setPopUpVisible] = useState(false); const [avatar, setAvatar] = useState(""); const [fullname, setName] = useState(""); const [email, setEmail] = useState(""); const [about, setAbout] = useState(""); const [telp, setTelp] = useState(""); const [password, setPassword] = useState(""); const [dataResponse, setDataresponse] = useState(null); const [uniqId, setUniqId] = useState(null); const [openModal, setOpenModal] = useState(); const props = { openModal, setOpenModal }; const openPopUp = () => { setPopUpVisible(true); }; const closePopUp = () => { setPopUpVisible(false); }; const warning = function(text){ alert(text); throw 'stop action'; } const submitAction = function(){ telp?telp:warning('Telp wajib diisi'); password?password:warning('Password wajib diisi'); let data = { password: password , email: email , telp: telp , fullname: fullname , about: about , uniqid: uniqId , avatar: avatar } fetch('/api/update/profile', { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify(data) }).then((res)=>{ return res.json(); }) .then((res)=>{ props.setOpenModal('dismissible') console.log(res) }) } const { data: session } = useSession(); if (!dataResponse){ if(session){ let email = session.user.email; //console.log(session); setAvatar(session.user.image); setDataresponse(1); fetch('/api/user?email='+email) .then((res)=>{ return res.json() }) .then((res)=>{ let [data] = res.message; setUniqId(data.uniqid) setName(data.fullname) setEmail(data.email) setAbout(data.about) setPassword(data.password) setTelp(data.telp) if (data.avatar!=='' && data.avatar!==null) { setAvatar(data.avatar) } }) } } const uploadChange = async function(e){ let el = e.target.files[0]; let webp = await convertToWebP(el, 720, 720); let base64 = await blobToBase64(webp); const formData = new FormData(); formData.append("content", base64); formData.append("uniq", uniqId); formData.append("time", Date.now()); fetch("/api/profile", { method: 'POST', body: formData }) .then(function(r){ return r.json() }).then(function(r){ window.location.reload(); }) .catch(function(o){ console.log(o) }) } return (<> props.setOpenModal(undefined)}> Success

Data telah diupdate

Edit Profil

Informasi Dasar
{ setName(e.target.value); }} name="avatar" />
{ setName(e.target.value); }} name="fullname" placeholder="Nama Lengkap" className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" />
Donasi sekarang dan bantu kami mewujudkan impian Anda
Informasi Kontak
{ setTelp(e.target.value) }} name="telp" placeholder="+6281234567890" className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" />
Apakah ini penting?. Hal tersebut penting untuk memungkinkan kami berkomunikasi dengan Anda dengan aman.
{ setEmail(e.target.value) }} value={email?email:""} placeholder="Email" className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" />
Kami tidak akan mengungkapkan email Anda kepada orang lain atau menggunakannya untuk mengirimi Anda spam.
{ setPassword(e.target.value) }} value={password?password:""} name="password" placeholder="Password" className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" />
Ini sangat rahasia bagi Anda dan kami akan menjaganya dengan baik pada sitem yang telah kami bangun.
{ popupVisible && (
)}
) }