From 9b471eb2696c4c7c633161fb2026116248dfccc0 Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 29 Apr 2025 11:01:36 +0800 Subject: [PATCH] upd: user role Desrkipsi: - global state pada user role login - update fitur home No Issues --- app/(application)/feature.tsx | 25 ++++++------------------- components/home/carouselHome.tsx | 14 +++++++++++++- lib/store.ts | 9 +++------ lib/userSlice.ts | 14 ++++++++++++++ 4 files changed, 36 insertions(+), 26 deletions(-) create mode 100644 lib/userSlice.ts diff --git a/app/(application)/feature.tsx b/app/(application)/feature.tsx index e66c553..9aba816 100644 --- a/app/(application)/feature.tsx +++ b/app/(application)/feature.tsx @@ -1,26 +1,13 @@ import ButtonBackHeader from "@/components/buttonBackHeader"; import { ButtonFiturMenu } from "@/components/buttonFiturMenu"; import Styles from "@/constants/Styles"; -import { apiGetProfile } from "@/lib/api"; -import { useAuthSession } from "@/providers/AuthProvider"; import { AntDesign, Entypo, Ionicons, MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons"; import { router, Stack } from "expo-router"; -import { useEffect, useState } from "react"; import { SafeAreaView, View } from "react-native"; +import { useSelector } from "react-redux"; export default function Feature() { - const { token, decryptToken } = useAuthSession() - const [roleUser, setRoleUser] = useState('user') - - async function handleUserLogin() { - const hasil = await decryptToken(String(token?.current)) - const respons = await apiGetProfile({ id: hasil }) - setRoleUser(respons.data.idUserRole) - } - - useEffect(() => { - handleUserLogin() - }) + const entityUser = useSelector((state: any) => state.user) return ( @@ -38,14 +25,14 @@ export default function Feature() { } text="Pengumuman" onPress={() => { router.push('/announcement') }} /> } text="Diskusi" onPress={() => { router.push('/discussion?active=true') }} /> - + } text="Anggota" onPress={() => { router.push('/member?active=true') }} /> } text="Jabatan" onPress={() => { router.push('/position?active=true') }} /> { - roleUser == "cosupadmin" && } text="Banner" onPress={() => { router.push('/banner') }} /> + entityUser.role == "cosupadmin" && } text="Banner" onPress={() => { router.push('/banner') }} /> } { - (roleUser == "supadmin" || roleUser == "developer") && + (entityUser.role == "supadmin" || entityUser.role == "developer") && <> } text="Lembaga Desa" onPress={() => { router.push('/group?active=true') }} /> } text="Tema" onPress={() => { }} /> @@ -53,7 +40,7 @@ export default function Feature() { } { - (roleUser == "supadmin" || roleUser == "developer") && + (entityUser.role == "supadmin" || entityUser.role == "developer") && } text="Banner" onPress={() => { router.push('/banner') }} /> diff --git a/components/home/carouselHome.tsx b/components/home/carouselHome.tsx index a61bad0..6dfaee4 100644 --- a/components/home/carouselHome.tsx +++ b/components/home/carouselHome.tsx @@ -1,6 +1,7 @@ import Styles from "@/constants/Styles"; -import { apiGetBanner } from "@/lib/api"; +import { apiGetBanner, apiGetProfile } from "@/lib/api"; import { setEntities } from "@/lib/bannerSlice"; +import { setEntityUser } from "@/lib/userSlice"; import { useAuthSession } from "@/providers/AuthProvider"; import React, { useEffect } from "react"; import { Dimensions, Image, View } from "react-native"; @@ -15,16 +16,27 @@ export default function CaraouselHome() { const progress = useSharedValue(0); const dispatch = useDispatch() const entities = useSelector((state: any) => state.banner) + const entityUser = useSelector((state: any) => state.user) async function handleBannerView() { const hasil = await decryptToken(String(token?.current)) apiGetBanner({ user: hasil }).then((data) => dispatch(setEntities(data.data))) } + async function handleUser() { + const hasil = await decryptToken(String(token?.current)) + const response = await apiGetProfile({ id: hasil }) + dispatch(setEntityUser({ role: response.data.idUserRole, admin: false })) + } + useEffect(() => { handleBannerView() }, [dispatch]); + useEffect(() => { + handleUser() + }, []); + return ( { + return action.payload; + }, + }, +}); + +export const { setEntityUser } = userSlice.actions; +export default userSlice.reducer; \ No newline at end of file