upd: announcement

Deskripsi:
- load all announcement
- pencarian announcement
- tambah announcement
- get detail one announcement

No Issues
This commit is contained in:
amel
2025-05-07 17:26:49 +08:00
parent dee684fb88
commit 6cae53cbc7
8 changed files with 431 additions and 153 deletions

View File

@@ -1,12 +1,40 @@
import HeaderRightAnnouncementDetail from "@/components/announcement/headerAnnouncementDetail";
import ButtonBackHeader from "@/components/buttonBackHeader";
import Styles from "@/constants/Styles";
import { AntDesign, MaterialIcons } from "@expo/vector-icons";
import { apiGetAnnouncementOne } from "@/lib/api";
import { useAuthSession } from "@/providers/AuthProvider";
import { AntDesign, Entypo, MaterialIcons } from "@expo/vector-icons";
import { router, Stack, useLocalSearchParams } from "expo-router";
import { SafeAreaView, ScrollView, SectionList, Text, View } from "react-native";
import { useEffect, useState } from "react";
import { SafeAreaView, ScrollView, Text, View } from "react-native";
type Props = {
id: string
title: string
desc: string
}
export default function DetailAnnouncement() {
const { id } = useLocalSearchParams()
const { id } = useLocalSearchParams<{ id: string }>();
const { token, decryptToken } = useAuthSession()
const [data, setData] = useState<Props>()
const [dataMember, setDataMember] = useState<any>({})
async function handleLoad() {
try {
const hasil = await decryptToken(String(token?.current))
const response = await apiGetAnnouncementOne({ id: id, user: hasil })
setData(response.data)
setDataMember(response.member)
} catch (error) {
console.error(error)
}
}
useEffect(() => {
handleLoad()
}, [])
return (
<SafeAreaView>
<Stack.Screen
@@ -17,39 +45,42 @@ export default function DetailAnnouncement() {
headerRight: () => <HeaderRightAnnouncementDetail id={id} />,
}}
/>
{/* <ScrollView> */}
<View style={[Styles.p15]}>
<View style={[Styles.wrapPaper]}>
<View style={Styles.rowItemsCenter}>
<MaterialIcons name="campaign" size={30} color="black" style={Styles.mr05} />
<Text style={[Styles.textDefaultSemiBold]}>Libur Nyepi</Text>
<ScrollView>
<View style={[Styles.p15]}>
<View style={[Styles.wrapPaper]}>
<View style={Styles.rowItemsCenter}>
<MaterialIcons name="campaign" size={30} color="black" style={Styles.mr05} />
<Text style={[Styles.textDefaultSemiBold]}>{data?.title}</Text>
</View>
<View style={[Styles.rowItemsCenter, Styles.mt10]}>
<AntDesign name="profile" size={30} color="black" style={Styles.mr05} />
<Text style={[Styles.textDefault]}>{data?.desc}</Text>
</View>
</View>
<View style={[Styles.rowItemsCenter, Styles.mt10]}>
<AntDesign name="profile" size={30} color="black" style={Styles.mr05} />
<Text style={[Styles.textDefault]}>Pengumuman terkait libur nyepi</Text>
<View style={[Styles.wrapPaper, Styles.mv15]}>
{
Object.keys(dataMember).map((v: any, i: any) => {
return (
<View key={i} style={[Styles.mb05]}>
<Text style={[Styles.textDefaultSemiBold]}>{dataMember[v]?.[0].group}</Text>
{
dataMember[v].map((item: any, x: any) => {
return (
<View style={[Styles.rowItemsCenter]}>
<Entypo name="dot-single" size={24} color="black" />
<Text style={[Styles.textDefault]}>{item.division}</Text>
</View>
)
})
}
</View>
)
})
}
</View>
</View>
<View style={[Styles.wrapPaper, Styles.mv15, { paddingTop: 0, paddingBottom: 10 }]}>
<SectionList
sections={[
{ title: 'Dinas', data: ['TU dan Umum', 'Kasi Pemerintahan', 'Pelaksana Kewilayahan'] },
{
title: 'Adat',
data: [
'PKK',
'Karang Taruna',
],
},
]}
renderItem={({ item }) => <Text style={Styles.textDefault}>{item}</Text>}
renderSectionHeader={({ section }) => (
<Text style={[Styles.textDefaultSemiBold, Styles.mt10, { borderBottomWidth: 1, borderBottomColor: 'gray' }]}>{section.title}</Text>
)}
keyExtractor={item => `basicListEntry-${item}`}
/>
</View>
</View>
{/* </ScrollView> */}
</ScrollView>
</SafeAreaView>
)
}