import AlertKonfirmasi from "@/components/alertKonfirmasi"; import BorderBottomItem from "@/components/borderBottomItem"; import { ButtonForm } from "@/components/buttonForm"; import ButtonTab from "@/components/buttonTab"; import DrawerBottom from "@/components/drawerBottom"; import { InputForm } from "@/components/inputForm"; import InputSearch from "@/components/inputSearch"; import MenuItemRow from "@/components/menuItemRow"; import SkeletonTwoItem from "@/components/skeletonTwoItem"; import Text from "@/components/Text"; import { ColorsStatus } from "@/constants/ColorsStatus"; import Styles from "@/constants/Styles"; import { apiDeleteGroup, apiEditGroup, apiGetGroup } from "@/lib/api"; import { setUpdateGroup } from "@/lib/groupSlice"; import { useAuthSession } from "@/providers/AuthProvider"; import { AntDesign, Feather, MaterialCommunityIcons } from "@expo/vector-icons"; import { useEffect, useState } from "react"; import { RefreshControl, View, VirtualizedList } from "react-native"; import Toast from "react-native-toast-message"; import { useDispatch, useSelector } from "react-redux"; type Props = { id: string name: string isActive: boolean } export default function Index() { const { token, decryptToken } = useAuthSession() const [isModal, setModal] = useState(false) const [isVisibleEdit, setVisibleEdit] = useState(false) const [data, setData] = useState([]) const [search, setSearch] = useState('') const arrSkeleton = Array.from({ length: 5 }, (_, index) => index) const [loading, setLoading] = useState(true) const [status, setStatus] = useState<'true' | 'false'>('true') const [loadingSubmit, setLoadingSubmit] = useState(false) const [idChoose, setIdChoose] = useState('') const [activeChoose, setActiveChoose] = useState(true) const [titleChoose, setTitleChoose] = useState('') const [refreshing, setRefreshing] = useState(false) const dispatch = useDispatch() const update = useSelector((state: any) => state.groupUpdate) const [error, setError] = useState({ title: false, }); async function handleEdit() { try { setLoadingSubmit(true) const hasil = await decryptToken(String(token?.current)) const response = await apiEditGroup({ user: hasil, name: titleChoose }, idChoose) dispatch(setUpdateGroup(!update)) } catch (error) { console.error(error) } finally { setLoadingSubmit(false) setVisibleEdit(false) setModal(false) Toast.show({ type: 'small', text1: 'Berhasil mengupdate data', }) } } async function handleDelete() { try { const hasil = await decryptToken(String(token?.current)) const response = await apiDeleteGroup({ user: hasil, isActive: activeChoose }, idChoose) dispatch(setUpdateGroup(!update)) } catch (error) { console.error(error) } finally { setModal(false) Toast.show({ type: 'small', text1: 'Berhasil mengupdate data', }) } } async function handleLoad(loading: boolean) { try { setLoading(loading) const hasil = await decryptToken(String(token?.current)) const response = await apiGetGroup({ user: hasil, active: status, search: search }) setData(response.data) } catch (error) { console.error(error) } finally { setLoading(false) } } useEffect(() => { handleLoad(false) }, [update]) useEffect(() => { handleLoad(true) }, [status, search]) const handleRefresh = async () => { setRefreshing(true) handleLoad(false) await new Promise(resolve => setTimeout(resolve, 2000)); setRefreshing(false) }; function validationForm(val: any, cat: 'title') { if (cat === 'title') { setTitleChoose(val) if (val == "" || val.length < 3) { setError((prev) => ({ ...prev, title: true })) } else { setError((prev) => ({ ...prev, title: false })) } } } const getItem = (_data: unknown, index: number): Props => ({ id: data[index].id, name: data[index].name, isActive: data[index].isActive, }); return ( { setStatus("true") }} label="Aktif" icon={} n={2} /> { setStatus("false") }} label="Tidak Aktif" icon={} n={2} /> { loading ? arrSkeleton.map((item, index) => { return ( ) }) : data.length > 0 ? data.length} getItem={getItem} renderItem={({ item, index }: { item: Props, index: number }) => { return ( { setIdChoose(item.id) setActiveChoose(item.isActive) setTitleChoose(item.name) setModal(true) }} borderType="all" icon={ } title={item.name} /> ) }} keyExtractor={(item, index) => String(index)} showsVerticalScrollIndicator={false} refreshControl={ } /> : Tidak ada data } setModal(false)} title={titleChoose}> } title={activeChoose ? "Non Aktifkan" : "Aktifkan"} onPress={() => { setModal(false) AlertKonfirmasi({ title: 'Konfirmasi', desc: activeChoose ? 'Apakah anda yakin ingin menonaktifkan data?' : 'Apakah anda yakin ingin mengaktifkan data?', onPress: () => { handleDelete() } }) }} /> } title="Edit" onPress={() => { setModal(false) setTimeout(() => { setVisibleEdit(true) }, 600); }} /> setVisibleEdit(false)} title="Edit Lembaga Desa"> { validationForm(val, 'title') }} /> v == true) || titleChoose == "" || loadingSubmit} onPress={() => { handleEdit() }} /> ) }