Deskripsi :
- load refresh pada project
- load refresh pada task divisi
- text pada modal salin atau pindah
- crash modal pada modal more dokumen divisi
- memberi loadin pada modal info dokumen divisi
- crash modal pada header dokumen divisi
- kyboard avoiding pada project
- keyboard avoiding pada tugas divisi
- image pada user yg diselect pada tambah anggota divisi

nb : qc blm selesai

No Issues
This commit is contained in:
2025-07-31 15:10:51 +08:00
parent 5898655fac
commit e7ef09e9aa
21 changed files with 584 additions and 456 deletions

View File

@@ -6,6 +6,7 @@ import DrawerBottom from "@/components/drawerBottom"
import ImageUser from "@/components/imageNew"
import MenuItemRow from "@/components/menuItemRow"
import Skeleton from "@/components/skeleton"
import Text from "@/components/Text"
import Styles from "@/constants/Styles"
import { apiDeleteCalendarMember, apiGetCalendarOne, apiGetDivisionOneFeature } from "@/lib/api"
import { setUpdateCalendar } from "@/lib/calendarUpdate"
@@ -13,7 +14,7 @@ import { useAuthSession } from "@/providers/AuthProvider"
import { MaterialCommunityIcons } from "@expo/vector-icons"
import { router, Stack, useLocalSearchParams } from "expo-router"
import { useEffect, useState } from "react"
import { SafeAreaView, ScrollView, Text, View } from "react-native"
import { RefreshControl, SafeAreaView, ScrollView, View } from "react-native"
import Toast from "react-native-toast-message"
import { useDispatch, useSelector } from "react-redux"
@@ -52,7 +53,7 @@ export default function DetailEventCalendar() {
const entityUser = useSelector((state: any) => state.user);
const [isMemberDivision, setIsMemberDivision] = useState(false);
const [loading, setLoading] = useState(true)
const arrSkeleton = Array.from({ length: 5 })
const [refreshing, setRefreshing] = useState(false)
async function handleCheckMember() {
try {
@@ -69,9 +70,9 @@ export default function DetailEventCalendar() {
}
}
async function handleLoad() {
async function handleLoad(loading:boolean) {
try {
setLoading(true)
setLoading(loading)
const hasil = await decryptToken(String(token?.current));
const response = await apiGetCalendarOne({
user: hasil,
@@ -105,7 +106,7 @@ export default function DetailEventCalendar() {
}
useEffect(() => {
handleLoad();
handleLoad(true);
handleCheckMember()
}, []);
@@ -133,6 +134,15 @@ export default function DetailEventCalendar() {
}
}
const handleRefresh = async () => {
setRefreshing(true)
handleLoad(false)
handleLoadMember()
await new Promise(resolve => setTimeout(resolve, 2000));
setRefreshing(false)
};
return (
<SafeAreaView>
<Stack.Screen
@@ -143,7 +153,15 @@ export default function DetailEventCalendar() {
headerRight: () => (entityUser.role == "user" || entityUser.role == "coadmin") && !isMemberDivision ? <></> : <HeaderRightCalendarDetail id={String(data?.idCalendar)} idReminder={String(detail)} />
}}
/>
<ScrollView>
<ScrollView
style={[Styles.h100]}
refreshControl={
<RefreshControl
refreshing={refreshing}
onRefresh={handleRefresh}
/>
}
>
<View style={[Styles.p15]}>
<View style={[Styles.wrapPaper, Styles.mb15]}>
<View style={Styles.rowItemsCenter}>

View File

@@ -157,6 +157,13 @@ export default function CalendarDivision() {
onChange={({ date }) => setSelected(date)}
styles={{
selected: Styles.selectedDate,
month_label: Styles.cBlack,
month_selector_label: Styles.cBlack,
year_label: Styles.cBlack,
year_selector_label: Styles.cBlack,
day_label: Styles.cBlack,
time_label: Styles.cBlack,
weekday_label: Styles.cBlack,
}}
/>
</View>