import ButtonBackHeader from "@/components/buttonBackHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader"; import { InputForm } from "@/components/inputForm"; import Text from "@/components/Text"; import Styles from "@/constants/Styles"; import { apiCreateBanner, apiGetBanner } from "@/lib/api"; import { setEntities } from "@/lib/bannerSlice"; import { useAuthSession } from "@/providers/AuthProvider"; import { Entypo } from "@expo/vector-icons"; import * as ImagePicker from "expo-image-picker"; import { router, Stack } from "expo-router"; import { useState } from "react"; import { Image, Pressable, SafeAreaView, ScrollView, View } from "react-native"; import Toast from "react-native-toast-message"; import { useDispatch } from "react-redux"; export default function CreateBanner() { const { decryptToken, token } = useAuthSession(); const dispatch = useDispatch(); const [selectedImage, setSelectedImage] = useState( undefined ); const [imgForm, setImgForm] = useState(); const [title, setTitle] = useState(""); const [error, setError] = useState(false); const [loading, setLoading] = useState(false) const pickImageAsync = async () => { let result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ["images"], allowsEditing: false, quality: 1, aspect: [1535, 450], }); if (!result.canceled) { if (result.assets?.[0].uri) { setSelectedImage(result.assets[0].uri); setImgForm(result.assets[0]); } else { alert("Tidak ada gambar yang dipilih"); } } }; function onValidate(val: string) { setTitle(val) if (val == "") { setError(true); } else { setError(false); } } const handleCreateEntity = async () => { try { setLoading(true) const hasil = await decryptToken(String(token?.current)); const fd = new FormData(); fd.append("file", { uri: imgForm.uri, type: imgForm.mimeType, name: imgForm.fileName, } as any); fd.append( "data", JSON.stringify({ title, user: hasil, }) ); const createdEntity = await apiCreateBanner(fd); if (createdEntity.success) { Toast.show({ type: 'small', text1: 'Berhasil menambahkan data', }) apiGetBanner({ user: hasil }).then((data) => dispatch(setEntities(data.data)) ); router.back(); } else { Toast.show({ type: 'small', text1: 'Gagal menambahkan data', }) } } catch (error) { console.error(error); Toast.show({ type: 'small', text1: 'Gagal menambahkan data', }) } finally { setLoading(false) } }; return ( ( { router.back(); }} /> ), headerTitle: "Tambah Banner", headerTitleAlign: "center", headerRight: () => ( { handleCreateEntity(); }} /> ), }} /> {selectedImage != undefined ? ( ) : ( Mohon unggah gambar dalam resolusi 1535 x 450 pixel untuk memastikan )} ); }