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 { 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, SafeAreaView, ScrollView, Text, ToastAndroid, View } from "react-native"; 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 [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 [data11, setData1] = useState(Array.from({ length: 20 }, (_, i) => `Item ${i}`)); const renderItem = ({ item }: { item: string }) => ( {item} ); async function handleEdit() { try { 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 { setVisibleEdit(false) setModal(false) ToastAndroid.show('Berhasil mengupdate data', ToastAndroid.SHORT) } } 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) ToastAndroid.show('Berhasil mengupdate data', ToastAndroid.SHORT) } } 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) }; 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.map((item, index) => { return ( { setIdChoose(item.id) setActiveChoose(item.isActive) setTitleChoose(item.name) setModal(true) }} borderType="all" icon={ } title={item.name} /> ) }) : Tidak ada data } } title={activeChoose ? "Non Aktifkan" : "Aktifkan"} onPress={() => { AlertKonfirmasi({ title: 'Konfirmasi', desc: activeChoose ? 'Apakah anda yakin ingin menonaktifkan data?' : 'Apakah anda yakin ingin mengaktifkan data?', onPress: () => { handleDelete() } }) }} /> } title="Edit" onPress={() => { setModal(false) setVisibleEdit(true) }} /> { handleEdit() }} /> ) }