upd : scroll view

Deskripsi:
- horizontal view hide
- vertical view hide
- scroll view height

No Issues
This commit is contained in:
2025-09-09 12:30:40 +08:00
parent 1509d1b702
commit 83291676d3
25 changed files with 124 additions and 67 deletions

View File

@@ -8,7 +8,7 @@ import { useAuthSession } from "@/providers/AuthProvider";
import { Entypo, MaterialIcons } from "@expo/vector-icons"; import { Entypo, MaterialIcons } from "@expo/vector-icons";
import { router, Stack, useLocalSearchParams } from "expo-router"; import { router, Stack, useLocalSearchParams } from "expo-router";
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { Dimensions, SafeAreaView, ScrollView, View } from "react-native"; import { Dimensions, RefreshControl, SafeAreaView, ScrollView, View } from "react-native";
import RenderHTML from 'react-native-render-html'; import RenderHTML from 'react-native-render-html';
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
@@ -28,6 +28,7 @@ export default function DetailAnnouncement() {
const contentWidth = Dimensions.get('window').width const contentWidth = Dimensions.get('window').width
const [loading, setLoading] = useState(true) const [loading, setLoading] = useState(true)
const arrSkeleton = Array.from({ length: 2 }, (_, index) => index) const arrSkeleton = Array.from({ length: 2 }, (_, index) => index)
const [refreshing, setRefreshing] = useState(false)
async function handleLoad(loading: boolean) { async function handleLoad(loading: boolean) {
try { try {
@@ -56,6 +57,13 @@ export default function DetailAnnouncement() {
return htmlRegex.test(text); return htmlRegex.test(text);
}; };
const handleRefresh = async () => {
setRefreshing(true)
handleLoad(false)
await new Promise(resolve => setTimeout(resolve, 2000));
setRefreshing(false)
};
return ( return (
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
@@ -66,7 +74,16 @@ export default function DetailAnnouncement() {
headerRight: () => entityUser.role != 'user' && entityUser.role != 'coadmin' ? <HeaderRightAnnouncementDetail id={id} /> : <></>, headerRight: () => entityUser.role != 'user' && entityUser.role != 'coadmin' ? <HeaderRightAnnouncementDetail id={id} /> : <></>,
}} }}
/> />
<ScrollView> <ScrollView
showsVerticalScrollIndicator={false}
style={[Styles.h100]}
refreshControl={
<RefreshControl
refreshing={refreshing}
onRefresh={() => handleRefresh()}
/>
}
>
<View style={[Styles.p15]}> <View style={[Styles.p15]}>
<View style={[Styles.wrapPaper]}> <View style={[Styles.wrapPaper]}>
{ {

View File

@@ -110,8 +110,11 @@ export default function CreateAnnouncement() {
), ),
}} }}
/> />
<ScrollView> <ScrollView
<View style={[Styles.p15, Styles.mb100]}> showsVerticalScrollIndicator={false}
style={[Styles.h100]}
>
<View style={[Styles.p15]}>
<InputForm <InputForm
label="Judul" label="Judul"
type="default" type="default"

View File

@@ -153,8 +153,11 @@ export default function EditAnnouncement() {
), ),
}} }}
/> />
<ScrollView> <ScrollView
<View style={[Styles.p15, Styles.mb100]}> showsVerticalScrollIndicator={false}
style={[Styles.h100]}
>
<View style={[Styles.p15]}>
<InputForm <InputForm
label="Judul" label="Judul"
type="default" type="default"

View File

@@ -130,7 +130,7 @@ export default function EditBanner() {
category="update" />, category="update" />,
}} }}
/> />
<ScrollView> <ScrollView showsVerticalScrollIndicator={false} style={[Styles.h100]}>
<View style={[Styles.p15, Styles.mb100]}> <View style={[Styles.p15, Styles.mb100]}>
<View style={[Styles.mb15]}> <View style={[Styles.mb15]}>
{selectedImage != undefined ? ( {selectedImage != undefined ? (

View File

@@ -117,8 +117,8 @@ export default function CreateBanner() {
), ),
}} }}
/> />
<ScrollView> <ScrollView showsVerticalScrollIndicator={false} style={[Styles.h100]}>
<View style={[Styles.p15, Styles.mb100]}> <View style={[Styles.p15]}>
<View style={[Styles.mb15]}> <View style={[Styles.mb15]}>
{selectedImage != undefined ? ( {selectedImage != undefined ? (
<Pressable onPress={pickImageAsync}> <Pressable onPress={pickImageAsync}>

View File

@@ -139,7 +139,7 @@ export default function DetailDiscussionGeneral() {
}} }}
/> />
<View style={{ flex: 1 }}> <View style={{ flex: 1 }}>
<ScrollView> <ScrollView showsVerticalScrollIndicator={false}>
<View style={[Styles.p15, Styles.mb100]}> <View style={[Styles.p15, Styles.mb100]}>
{ {
loading ? loading ?

View File

@@ -116,7 +116,7 @@ export default function AddMemberDiscussionDetail() {
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]}> <ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -133,7 +133,9 @@ export default function AddMemberDiscussionDetail() {
: :
<Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text> <Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text>
} }
<ScrollView> <ScrollView
showsVerticalScrollIndicator={false}
>
{ {
data.length > 0 ? data.length > 0 ?

View File

@@ -142,7 +142,7 @@ export default function CreateDiscussionGeneral() {
), ),
}} }}
/> />
<ScrollView> <ScrollView showsVerticalScrollIndicator={false} style={[Styles.h100]}>
<View style={[Styles.p15, Styles.mb100]}> <View style={[Styles.p15, Styles.mb100]}>
{ {
(entityUser.role == "supadmin" || (entityUser.role == "supadmin" ||

View File

@@ -119,7 +119,7 @@ export default function EditDiscussionGeneral() {
), ),
}} }}
/> />
<ScrollView> <ScrollView showsVerticalScrollIndicator={false} style={[Styles.h100]}>
<View style={[Styles.p15]}> <View style={[Styles.p15]}>
<InputForm <InputForm
label="Judul" label="Judul"

View File

@@ -123,7 +123,7 @@ export default function AddMemberCalendarEvent() {
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]}> <ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -140,7 +140,9 @@ export default function AddMemberCalendarEvent() {
: :
<Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text> <Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text>
} }
<ScrollView> <ScrollView
showsVerticalScrollIndicator={false}
>
{ {
data.length > 0 ? data.length > 0 ?
data.map((item: any, index: any) => { data.map((item: any, index: any) => {

View File

@@ -112,7 +112,7 @@ export default function CreateCalendarAddMember() {
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]}> <ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -129,7 +129,9 @@ export default function CreateCalendarAddMember() {
: :
<Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text> <Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text>
} }
<ScrollView> <ScrollView
showsVerticalScrollIndicator={false}
>
{ {
data.length > 0 ? data.length > 0 ?

View File

@@ -118,7 +118,7 @@ export default function AddMemberTask() {
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]}> <ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -135,7 +135,9 @@ export default function AddMemberTask() {
: :
<Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text> <Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text>
} }
<ScrollView> <ScrollView
showsVerticalScrollIndicator={false}
>
{ {
data.length > 0 ? data.length > 0 ?

View File

@@ -88,7 +88,7 @@ export default function AddMemberCreateTask() {
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]}> <ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -105,7 +105,9 @@ export default function AddMemberCreateTask() {
: :
<Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text> <Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text>
} }
<ScrollView> <ScrollView
showsVerticalScrollIndicator={false}
>
{ {
data.length > 0 ? data.length > 0 ?

View File

@@ -106,7 +106,7 @@ export default function ListTask() {
return ( return (
<View style={[Styles.p15, { flex: 1 }]}> <View style={[Styles.p15, { flex: 1 }]}>
<View> <View>
<ScrollView horizontal style={[Styles.mb10]}> <ScrollView horizontal style={[Styles.mb10]} showsHorizontalScrollIndicator={false}>
<ButtonTab <ButtonTab
active={statusFix} active={statusFix}
value="0" value="0"

View File

@@ -119,7 +119,7 @@ export default function AddMemberDivision() {
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]}> <ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -136,7 +136,9 @@ export default function AddMemberDivision() {
: :
<Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text> <Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text>
} }
<ScrollView> <ScrollView
showsVerticalScrollIndicator={false}
>
{ {
data.length > 0 ? data.length > 0 ?

View File

@@ -81,7 +81,7 @@ export default function CreateDivisionAddMember() {
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]}> <ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -98,7 +98,9 @@ export default function CreateDivisionAddMember() {
: :
<Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text> <Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text>
} }
<ScrollView> <ScrollView
showsVerticalScrollIndicator={false}
>
{ {
data.length > 0 ? data.length > 0 ?

View File

@@ -231,7 +231,7 @@ export default function CreateMember() {
behavior={Platform.OS === 'ios' ? 'padding' : undefined} behavior={Platform.OS === 'ios' ? 'padding' : undefined}
keyboardVerticalOffset={headerHeight} keyboardVerticalOffset={headerHeight}
> >
<ScrollView> <ScrollView showsVerticalScrollIndicator={false}>
<View style={[Styles.p15]}> <View style={[Styles.p15]}>
<View style={{ justifyContent: "center", alignItems: "center" }}> <View style={{ justifyContent: "center", alignItems: "center" }}>
{selectedImage != undefined ? ( {selectedImage != undefined ? (

View File

@@ -264,8 +264,8 @@ export default function EditMember() {
behavior={Platform.OS === 'ios' ? 'padding' : undefined} behavior={Platform.OS === 'ios' ? 'padding' : undefined}
keyboardVerticalOffset={headerHeight} keyboardVerticalOffset={headerHeight}
> >
<ScrollView> <ScrollView showsVerticalScrollIndicator={false} style={[Styles.h100]}>
<View style={[Styles.p15, Styles.mb100]}> <View style={[Styles.p15]}>
<View style={{ justifyContent: "center", alignItems: "center" }}> <View style={{ justifyContent: "center", alignItems: "center" }}>
{ {
errorImg ? errorImg ?

View File

@@ -117,7 +117,7 @@ export default function AddMemberProject() {
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]}> <ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -134,35 +134,43 @@ export default function AddMemberProject() {
: :
<Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text> <Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text>
} }
<ScrollView> <ScrollView
showsVerticalScrollIndicator={false}
style={[Styles.h100]}
>
{ {
data.length > 0 ? data.length > 0 ?
data.map((item: any, index: any) => { <View style={[Styles.mb100]}>
const found = dataOld.some((i: any) => i.idUser == item.id) {
return ( data.map((item: any, index: any) => {
<Pressable const found = dataOld.some((i: any) => i.idUser == item.id)
key={index} return (
style={[Styles.itemSelectModal]} <Pressable
onPress={() => { key={index}
!found && onChoose(item.id, item.name, item.img) style={[Styles.itemSelectModal]}
}} onPress={() => {
> !found && onChoose(item.id, item.name, item.img)
<View style={[Styles.rowItemsCenter, Styles.w80]}> }}
<ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border /> >
<View style={[Styles.ml10]}> <View style={[Styles.rowItemsCenter, Styles.w80]}>
<Text style={[Styles.textDefault]} numberOfLines={1}>{item.name}</Text> <ImageUser src={`${ConstEnv.url_storage}/files/${item.img}`} border />
<View style={[Styles.ml10]}>
<Text style={[Styles.textDefault]} numberOfLines={1}>{item.name}</Text>
{
found && <Text style={[Styles.textInformation, Styles.cGray]}>sudah menjadi anggota</Text>
}
</View>
</View>
{ {
found && <Text style={[Styles.textInformation, Styles.cGray]}>sudah menjadi anggota</Text> selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'} />
} }
</View> </Pressable>
</View> )
{ }
selectMember.some((i: any) => i.idUser == item.id) && <AntDesign name="check" size={20} color={'black'} /> )
} }
</Pressable> </View>
)
}
)
: :
<Text style={[Styles.textDefault, { textAlign: 'center' }]}>Tidak ada data</Text> <Text style={[Styles.textDefault, { textAlign: 'center' }]}>Tidak ada data</Text>
} }

View File

@@ -88,8 +88,11 @@ export default function ProjectCancel() {
), ),
}} }}
/> />
<ScrollView> <ScrollView
<View style={[Styles.p15, Styles.mb100]}> showsVerticalScrollIndicator={false}
style={[Styles.h100]}
>
<View style={[Styles.p15]}>
<InputForm <InputForm
label="Alasan Pembatalan" label="Alasan Pembatalan"
type="default" type="default"
@@ -99,6 +102,7 @@ export default function ProjectCancel() {
error={error} error={error}
errorText="Alasan pembatalan harus diisi" errorText="Alasan pembatalan harus diisi"
onChange={(val) => onValidation(val)} onChange={(val) => onValidation(val)}
multiline
/> />
</View> </View>
</ScrollView> </ScrollView>

View File

@@ -107,8 +107,11 @@ export default function ReportProject() {
), ),
}} }}
/> />
<ScrollView> <ScrollView
<View style={[Styles.p15, Styles.mb100]}> showsVerticalScrollIndicator={false}
style={[Styles.h100]}
>
<View style={[Styles.p15]}>
<InputForm <InputForm
label="Laporan Kegiatan" label="Laporan Kegiatan"
type="default" type="default"

View File

@@ -205,8 +205,11 @@ export default function CreateProject() {
), ),
}} }}
/> />
<ScrollView> <ScrollView
<View style={[Styles.p15, Styles.mb100]}> showsVerticalScrollIndicator={false}
style={[Styles.h100]}
>
<View style={[Styles.p15]}>
{ {
(entityUser.role == "supadmin" || entityUser.role == "developer") (entityUser.role == "supadmin" || entityUser.role == "developer")
&& &&

View File

@@ -95,7 +95,7 @@ export default function AddMemberCreateProject() {
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]}> <ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -112,7 +112,9 @@ export default function AddMemberCreateProject() {
: :
<Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text> <Text style={[Styles.textDefault, Styles.cGray, Styles.pv05, { textAlign: 'center' }]}>Tidak ada member yang dipilih</Text>
} }
<ScrollView> <ScrollView
showsVerticalScrollIndicator={false}
>
{ {
data.length > 0 ? data.length > 0 ?

View File

@@ -120,7 +120,7 @@ export default function ListProject() {
return ( return (
<View style={[Styles.p15, { flex: 1 }]}> <View style={[Styles.p15, { flex: 1 }]}>
<View> <View>
<ScrollView horizontal style={[Styles.mb10]}> <ScrollView horizontal style={[Styles.mb10]} showsHorizontalScrollIndicator={false}>
<ButtonTab <ButtonTab
active={statusFix} active={statusFix}
value="0" value="0"

View File

@@ -135,7 +135,7 @@ export default function ModalSelect({ open, close, title, category, idParent, on
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]}> <ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -154,7 +154,7 @@ export default function ModalSelect({ open, close, title, category, idParent, on
} }
</> </>
} }
<ScrollView> <ScrollView showsVerticalScrollIndicator={false}>
<View> <View>
{ {
category != 'status-task' ? category != 'status-task' ?