Merge pull request 'fix : button header' (#12) from amalia/28-jan-26 into join

Reviewed-on: http://wibugit.wibudev.com/wibu/mobile-darmasaba/pulls/12
This commit is contained in:
2026-01-28 17:43:54 +08:00
34 changed files with 811 additions and 351 deletions

View File

@@ -149,7 +149,14 @@ export default function RootLayout() {
// headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
title: 'Divisi', title: 'Divisi',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => <HeaderRightDivisionList /> // headerRight: () => <HeaderRightDivisionList />
header: () => (
<AppHeader title="Divisi"
showBack={true}
onPressLeft={() => router.back()}
right={<HeaderRightDivisionList />}
/>
)
}} /> }} />
<Stack.Screen name="division/[id]/(fitur-division)" options={{ headerShown: false }} /> <Stack.Screen name="division/[id]/(fitur-division)" options={{ headerShown: false }} />
<Stack.Screen name="group/index" options={{ <Stack.Screen name="group/index" options={{

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader" import AppHeader from "@/components/AppHeader"
import HeaderRightDiscussionList from "@/components/discussion/headerDiscussionList" import HeaderRightDiscussionList from "@/components/discussion/headerDiscussionList"
import HeaderRightTaskList from "@/components/task/headerTaskList" import HeaderRightTaskList from "@/components/task/headerTaskList"
import { Headers } from "@/constants/Headers" import { Headers } from "@/constants/Headers"
@@ -9,22 +9,49 @@ export default function RootLayout() {
<> <>
<Stack screenOptions={Headers.shadow}> <Stack screenOptions={Headers.shadow}>
<Stack.Screen name="task/index" options={{ <Stack.Screen name="task/index" options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
title: 'Tugas Divisi', title: 'Tugas Divisi',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => <HeaderRightTaskList /> // headerRight: () => <HeaderRightTaskList />
header: () => (
<AppHeader
title="Tugas Divisi"
showBack={true}
onPressLeft={() => router.back()}
right={
<HeaderRightTaskList />
}
/>
)
}} /> }} />
<Stack.Screen name="discussion/index" options={{ <Stack.Screen name="discussion/index" options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
title: 'Diskusi Divisi', title: 'Diskusi Divisi',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => <HeaderRightDiscussionList /> // headerRight: () => <HeaderRightDiscussionList />
header: () => (
<AppHeader
title="Diskusi Divisi"
showBack={true}
onPressLeft={() => router.back()}
right={
<HeaderRightDiscussionList />
}
/>
)
}} /> }} />
<Stack.Screen name="calendar/history" <Stack.Screen name="calendar/history"
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Riwayat Acara', headerTitle: 'Riwayat Acara',
headerTitleAlign: 'center', headerTitleAlign: 'center',
header: () => (
<AppHeader
title="Riwayat Acara"
showBack={true}
onPressLeft={() => router.back()}
/>
)
}} }}
/> />
</Stack> </Stack>

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import ImageUser from "@/components/imageNew"; import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
@@ -103,16 +103,32 @@ export default function AddMemberCalendarEvent() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Tambah Anggota', headerTitle: 'Tambah Anggota',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
category="update" // category="update"
disable={selectMember.length == 0 || loading ? true : false} // disable={selectMember.length == 0 || loading ? true : false}
onPress={() => { // onPress={() => {
handleAddMember() // handleAddMember()
}} // }}
// />
// )
header: () => (
<AppHeader
title="Tambah Anggota"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
category="update"
disable={selectMember.length == 0 || loading ? true : false}
onPress={() => {
handleAddMember()
}}
/>
}
/> />
) )
}} }}

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader" import AppHeader from "@/components/AppHeader"
import ButtonSaveHeader from "@/components/buttonSaveHeader" import ButtonSaveHeader from "@/components/buttonSaveHeader"
import { InputDate } from "@/components/inputDate" import { InputDate } from "@/components/inputDate"
import { InputForm } from "@/components/inputForm" import { InputForm } from "@/components/inputForm"
@@ -165,17 +165,33 @@ export default function EditEventCalendar() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Edit Acara', headerTitle: 'Edit Acara',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => // headerRight: () =>
<ButtonSaveHeader // <ButtonSaveHeader
disable={Object.values(error).some((val) => val == true) || data.title == "" || data.dateStart == "" || data.timeStart == "" || data.timeEnd == "" || data.repeatEventTyper == "" || loading} // disable={Object.values(error).some((val) => val == true) || data.title == "" || data.dateStart == "" || data.timeStart == "" || data.timeEnd == "" || data.repeatEventTyper == "" || loading}
category="update-calendar" // category="update-calendar"
onPress={() => { // onPress={() => {
handleUpdate() // handleUpdate()
}} // }}
// />
header: () => (
<AppHeader
title="Edit Acara"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
disable={Object.values(error).some((val) => val == true) || data.title == "" || data.dateStart == "" || data.timeStart == "" || data.timeEnd == "" || data.repeatEventTyper == "" || loading}
category="update-calendar"
onPress={() => {
handleUpdate()
}}
/>
}
/> />
)
}} }}
/> />
<KeyboardAvoidingView <KeyboardAvoidingView

View File

@@ -1,4 +1,5 @@
import AlertKonfirmasi from "@/components/alertKonfirmasi" import AlertKonfirmasi from "@/components/alertKonfirmasi"
import AppHeader from "@/components/AppHeader"
import BorderBottomItem from "@/components/borderBottomItem" import BorderBottomItem from "@/components/borderBottomItem"
import ButtonBackHeader from "@/components/buttonBackHeader" import ButtonBackHeader from "@/components/buttonBackHeader"
import HeaderRightCalendarDetail from "@/components/calendar/headerCalendarDetail" import HeaderRightCalendarDetail from "@/components/calendar/headerCalendarDetail"
@@ -154,10 +155,20 @@ export default function DetailEventCalendar() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Detail Acara', headerTitle: 'Detail Acara',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => (entityUser.role == "user" || entityUser.role == "coadmin") && !isMemberDivision ? <></> : <HeaderRightCalendarDetail id={String(data?.idCalendar)} idReminder={String(detail)} /> // headerRight: () => (entityUser.role == "user" || entityUser.role == "coadmin") && !isMemberDivision ? <></> : <HeaderRightCalendarDetail id={String(data?.idCalendar)} idReminder={String(detail)} />
header:()=>(
<AppHeader
title="Detail Acara"
showBack={true}
onPressLeft={() => router.back()}
right={
(entityUser.role == "user" || entityUser.role == "coadmin") && !isMemberDivision ? <></> : <HeaderRightCalendarDetail id={String(data?.idCalendar)} idReminder={String(detail)} />
}
/>
)
}} }}
/> />
<ScrollView <ScrollView

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import ImageUser from "@/components/imageNew"; import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
@@ -93,14 +93,28 @@ export default function CreateCalendarAddMember() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Pilih Anggota', headerTitle: 'Pilih Anggota',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
category="create" // category="create"
disable={selectMember.length == 0 || loading ? true : false} // disable={selectMember.length == 0 || loading ? true : false}
onPress={() => { handleAddMember() }} // onPress={() => { handleAddMember() }}
// />
// )
header: () => (
<AppHeader
title="Pilih Anggota"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
category="create"
disable={selectMember.length == 0 || loading ? true : false}
onPress={() => { handleAddMember() }}
/>
}
/> />
) )
}} }}

View File

@@ -1,3 +1,4 @@
import AppHeader from "@/components/AppHeader";
import ButtonBackHeader from "@/components/buttonBackHeader"; import ButtonBackHeader from "@/components/buttonBackHeader";
import ButtonNextHeader from "@/components/buttonNextHeader"; import ButtonNextHeader from "@/components/buttonNextHeader";
import { InputDate } from "@/components/inputDate"; import { InputDate } from "@/components/inputDate";
@@ -7,6 +8,7 @@ import SelectForm from "@/components/selectForm";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
import { setFormCreateCalendar } from "@/lib/calendarCreate"; import { setFormCreateCalendar } from "@/lib/calendarCreate";
import { stringToDateTime } from "@/lib/fun_stringToDate"; import { stringToDateTime } from "@/lib/fun_stringToDate";
import { useHeaderHeight } from '@react-navigation/elements';
import { Stack, router, useLocalSearchParams } from "expo-router"; import { Stack, router, useLocalSearchParams } from "expo-router";
import { useState } from "react"; import { useState } from "react";
import { import {
@@ -17,7 +19,6 @@ import {
View View
} from "react-native"; } from "react-native";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { useHeaderHeight } from '@react-navigation/elements';
export default function CalendarDivisionCreate() { export default function CalendarDivisionCreate() {
const { id } = useLocalSearchParams<{ id: string }>() const { id } = useLocalSearchParams<{ id: string }>()
@@ -128,28 +129,44 @@ export default function CalendarDivisionCreate() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Tambah Acara", headerTitle: "Tambah Acara",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonNextHeader // <ButtonNextHeader
onPress={() => { handleSetData() }} // onPress={() => { handleSetData() }}
disable={Object.values(error).some((val) => val == true) || data.title == "" || data.dateStart == "" || data.timeStart == "" || data.timeEnd == "" || data.repeatEventType == ""} // disable={Object.values(error).some((val) => val == true) || data.title == "" || data.dateStart == "" || data.timeStart == "" || data.timeEnd == "" || data.repeatEventType == ""}
// />
// ),
header:()=>(
<AppHeader
title="Tambah Acara"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonNextHeader
onPress={() => { handleSetData() }}
disable={Object.values(error).some((val) => val == true) || data.title == "" || data.dateStart == "" || data.timeStart == "" || data.timeEnd == "" || data.repeatEventType == ""}
/>
}
/> />
), )
}} }}
/> />
<KeyboardAvoidingView <KeyboardAvoidingView
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]}> <View style={[Styles.p15]}>
<InputForm <InputForm
label="Nama Acara" label="Nama Acara"

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import HeaderRightCalendarList from "@/components/calendar/headerCalendarList"; import HeaderRightCalendarList from "@/components/calendar/headerCalendarList";
import ItemDateCalendar from "@/components/calendar/itemDateCalendar"; import ItemDateCalendar from "@/components/calendar/itemDateCalendar";
import EventItem from "@/components/eventItem"; import EventItem from "@/components/eventItem";
@@ -128,16 +128,24 @@ export default function CalendarDivision() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Kalender", headerTitle: "Kalender",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => <HeaderRightCalendarList />, // headerRight: () => <HeaderRightCalendarList />,
header: () => (
<AppHeader
title="Kalender"
showBack={true}
onPressLeft={() => router.back()}
right={<HeaderRightCalendarList />}
/>
)
}} }}
/> />
<ScrollView <ScrollView

View File

@@ -1,5 +1,5 @@
import AppHeader from "@/components/AppHeader";
import BorderBottomItem from "@/components/borderBottomItem"; import BorderBottomItem from "@/components/borderBottomItem";
import ButtonBackHeader from "@/components/buttonBackHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import ButtonSelect from "@/components/buttonSelect"; import ButtonSelect from "@/components/buttonSelect";
import DrawerBottom from "@/components/drawerBottom"; import DrawerBottom from "@/components/drawerBottom";
@@ -130,24 +130,40 @@ export default function DiscussionDivisionEdit() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Edit Diskusi", headerTitle: "Edit Diskusi",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
disable={data == "" || loading} // disable={data == "" || loading}
category="update" // category="update"
onPress={() => { // onPress={() => {
handleUpdate(); // handleUpdate();
}} // }}
// />
// ),
header: () => (
<AppHeader
title="Edit Diskusi"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
disable={data == "" || loading}
category="update"
onPress={() => {
handleUpdate();
}}
/>
}
/> />
), )
}} }}
/> />
<LoadingOverlay visible={loading} /> <LoadingOverlay visible={loading} />

View File

@@ -1,7 +1,7 @@
import AlertKonfirmasi from "@/components/alertKonfirmasi"; import AlertKonfirmasi from "@/components/alertKonfirmasi";
import AppHeader from "@/components/AppHeader";
import BorderBottomItem from "@/components/borderBottomItem"; import BorderBottomItem from "@/components/borderBottomItem";
import BorderBottomItem2 from "@/components/borderBottomItem2"; import BorderBottomItem2 from "@/components/borderBottomItem2";
import ButtonBackHeader from "@/components/buttonBackHeader";
import HeaderRightDiscussionDetail from "@/components/discussion/headerDiscussionDetail"; import HeaderRightDiscussionDetail from "@/components/discussion/headerDiscussionDetail";
import DrawerBottom from "@/components/drawerBottom"; import DrawerBottom from "@/components/drawerBottom";
import ImageUser from "@/components/imageNew"; import ImageUser from "@/components/imageNew";
@@ -272,23 +272,38 @@ export default function DiscussionDetail() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Diskusi", headerTitle: "Diskusi",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => // headerRight: () =>
(entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision || isCreator ? // (entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision || isCreator ?
<HeaderRightDiscussionDetail // <HeaderRightDiscussionDetail
id={detail} // id={detail}
status={data?.status} // status={data?.status}
isActive={data?.isActive} // isActive={data?.isActive}
/> : (<></>) // /> : (<></>)
, // ,
header: () => (
<AppHeader
title="Diskusi"
showBack={true}
onPressLeft={() => router.back()}
right={
(entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision || isCreator ?
<HeaderRightDiscussionDetail
id={detail}
status={data?.status}
isActive={data?.isActive}
/> : (<></>)
}
/>
)
}} }}
/> />
<View style={{ flex: 1 }}> <View style={{ flex: 1 }}>

View File

@@ -1,5 +1,5 @@
import AppHeader from "@/components/AppHeader"
import BorderBottomItem from "@/components/borderBottomItem" import BorderBottomItem from "@/components/borderBottomItem"
import ButtonBackHeader from "@/components/buttonBackHeader"
import ButtonSaveHeader from "@/components/buttonSaveHeader" import ButtonSaveHeader from "@/components/buttonSaveHeader"
import ButtonSelect from "@/components/buttonSelect" import ButtonSelect from "@/components/buttonSelect"
import DrawerBottom from "@/components/drawerBottom" import DrawerBottom from "@/components/drawerBottom"
@@ -91,15 +91,30 @@ export default function CreateDiscussionDivision() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Tambah Diskusi', headerTitle: 'Tambah Diskusi',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => <ButtonSaveHeader // headerRight: () => <ButtonSaveHeader
disable={desc == "" || loading} // disable={desc == "" || loading}
category="create" // category="create"
onPress={() => { // onPress={() => {
handleCreate() // handleCreate()
}} /> // }} />
header: () => (
<AppHeader
title="Tambah Diskusi"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
disable={desc == "" || loading}
category="create"
onPress={() => {
handleCreate()
}} />
}
/>
)
}} }}
/> />
<LoadingOverlay visible={loading} /> <LoadingOverlay visible={loading} />

View File

@@ -1,5 +1,5 @@
import AlertKonfirmasi from "@/components/alertKonfirmasi"; import AlertKonfirmasi from "@/components/alertKonfirmasi";
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import { ButtonHeader } from "@/components/buttonHeader"; import { ButtonHeader } from "@/components/buttonHeader";
import HeaderRightDocument from "@/components/document/headerDocument"; import HeaderRightDocument from "@/components/document/headerDocument";
import ItemFile from "@/components/document/itemFile"; import ItemFile from "@/components/document/itemFile";
@@ -337,39 +337,74 @@ export default function DocumentDivision() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => // headerLeft: () =>
selectedFiles.length > 0 || dariSelectAll ? ( // selectedFiles.length > 0 || dariSelectAll ? (
<ButtonHeader // <ButtonHeader
item={<MaterialIcons name="close" size={20} color="white" />} // item={<MaterialIcons name="close" size={20} color="white" />}
onPress={() => { // onPress={() => {
handleBatal(); // handleBatal();
}} // }}
/> // />
) : ( // ) : (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: headerTitle:
selectedFiles.length > 0 || dariSelectAll selectedFiles.length > 0 || dariSelectAll
? `${selectedFiles.length} item terpilih` ? `${selectedFiles.length} item terpilih`
: "Dokumen Divisi", : "Dokumen Divisi",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => // headerRight: () =>
selectedFiles.length > 0 || dariSelectAll ? ( // selectedFiles.length > 0 || dariSelectAll ? (
<ButtonHeader // <ButtonHeader
item={ // item={
<MaterialIcons name="checklist-rtl" size={20} color="white" /> // <MaterialIcons name="checklist-rtl" size={20} color="white" />
} // }
onPress={() => { // onPress={() => {
handleSelectAll(); // handleSelectAll();
}} // }}
/> // />
) : ( // ) : (
<HeaderRightDocument path={path} isMember={isMemberDivision} /> // <HeaderRightDocument path={path} isMember={isMemberDivision} />
), // ),
header: () => (
<AppHeader
title={
selectedFiles.length > 0 || dariSelectAll
? `${selectedFiles.length} item terpilih`
: "Dokumen Divisi"
}
showBack={(selectedFiles.length > 0 || dariSelectAll) ? false : true}
left={
<ButtonHeader
item={<MaterialIcons name="close" size={20} color="white" />}
onPress={() => {
handleBatal();
}}
/>
}
onPressLeft={() => {
(selectedFiles.length > 0 || dariSelectAll) ? handleBatal() : router.back();
}}
right={
selectedFiles.length > 0 || dariSelectAll ? (
<ButtonHeader
item={
<MaterialIcons name="checklist-rtl" size={20} color="white" />
}
onPress={() => {
handleSelectAll();
}}
/>
) : (
<HeaderRightDocument path={path} isMember={isMemberDivision} />
)
}
/>
)
}} }}
/> />
<ModalLoading isVisible={loadingOpen} setVisible={setLoadingOpen} /> <ModalLoading isVisible={loadingOpen} setVisible={setLoadingOpen} />

View File

@@ -1,5 +1,5 @@
import AppHeader from "@/components/AppHeader";
import BorderBottomItem from "@/components/borderBottomItem"; import BorderBottomItem from "@/components/borderBottomItem";
import ButtonBackHeader from "@/components/buttonBackHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import ButtonSelect from "@/components/buttonSelect"; import ButtonSelect from "@/components/buttonSelect";
import DrawerBottom from "@/components/drawerBottom"; import DrawerBottom from "@/components/drawerBottom";
@@ -130,22 +130,36 @@ export default function TaskDivisionAddFile() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Tambah File", headerTitle: "Tambah File",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
category="create" // category="create"
disable={fileForm.length == 0 || loading ? true : false} // disable={fileForm.length == 0 || loading ? true : false}
onPress={() => { handleAddFile() }} // onPress={() => { handleAddFile() }}
// />
// ),
header: () => (
<AppHeader
title="Tambah File"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
category="create"
disable={fileForm.length == 0 || loading ? true : false}
onPress={() => { handleAddFile() }}
/>
}
/> />
), )
}} }}
/> />
<ScrollView> <ScrollView>

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import ImageUser from "@/components/imageNew"; import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
@@ -97,16 +97,32 @@ export default function AddMemberTask() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Tambah Anggota Kegiatan', headerTitle: 'Tambah Anggota Kegiatan',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
category="update" // category="update"
disable={selectMember.length == 0 || loading ? true : false} // disable={selectMember.length == 0 || loading ? true : false}
onPress={() => { // onPress={() => {
handleAddMember() // handleAddMember()
}} // }}
// />
// )
header: () => (
<AppHeader
title="Tambah Anggota Kegiatan"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
category="update"
disable={selectMember.length == 0 || loading ? true : false}
onPress={() => {
handleAddMember()
}}
/>
}
/> />
) )
}} }}

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import { InputForm } from "@/components/inputForm"; import { InputForm } from "@/components/inputForm";
import ModalAddDetailTugasTask from "@/components/task/modalAddDetailTugasTask"; import ModalAddDetailTugasTask from "@/components/task/modalAddDetailTugasTask";
@@ -141,24 +141,40 @@ export default function TaskDivisionAddTask() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Tambah Tugas", headerTitle: "Tambah Tugas",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
category="create" // category="create"
disable={disable || loading} // disable={disable || loading}
onPress={() => { // onPress={() => {
handleCreate(); // handleCreate();
}} // }}
// />
// ),
header: () => (
<AppHeader
title="Tambah Tugas"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
category="create"
disable={disable || loading}
onPress={() => {
handleCreate();
}}
/>
}
/> />
), )
}} }}
/> />
<KeyboardAvoidingView <KeyboardAvoidingView

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import { InputForm } from "@/components/inputForm"; import { InputForm } from "@/components/inputForm";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
@@ -72,24 +72,40 @@ export default function TaskDivisionCancel() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Pembatalan Tugas", headerTitle: "Pembatalan Tugas",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
disable={disable || loading} // disable={disable || loading}
category="cancel" // category="cancel"
onPress={() => { // onPress={() => {
handleCancel(); // handleCancel();
}} // }}
// />
// ),
header: () => (
<AppHeader
title="Pembatalan Tugas"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
disable={disable || loading}
category="cancel"
onPress={() => {
handleCancel();
}}
/>
}
/> />
), )
}} }}
/> />
<ScrollView> <ScrollView>

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import { InputForm } from "@/components/inputForm"; import { InputForm } from "@/components/inputForm";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
@@ -90,22 +90,35 @@ export default function TaskDivisionEdit() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Edit Judul", headerTitle: "Edit Judul",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
category="update" // category="update"
disable={disable || loading} // disable={disable || loading}
onPress={() => { handleUpdate() }} // onPress={() => { handleUpdate() }}
// />
// ),
header: () => (
<AppHeader title="Tambah Kegiatan"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
category="update"
disable={disable || loading}
onPress={() => { handleUpdate() }}
/>
}
/> />
), )
}} }}
/> />
<ScrollView> <ScrollView>

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import SectionCancel from "@/components/sectionCancel"; import SectionCancel from "@/components/sectionCancel";
import SectionProgress from "@/components/sectionProgress"; import SectionProgress from "@/components/sectionProgress";
import HeaderRightTaskDetail from "@/components/task/headerTaskDetail"; import HeaderRightTaskDetail from "@/components/task/headerTaskDetail";
@@ -100,12 +100,24 @@ export default function DetailTaskDivision() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: loading ? 'Loading... ' : data?.title, headerTitle: loading ? 'Loading... ' : data?.title,
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => (entityUser.role == "user" || entityUser.role == "coadmin") && !isMemberDivision // headerRight: () => (entityUser.role == "user" || entityUser.role == "coadmin") && !isMemberDivision
? <></> // ? <></>
: <HeaderRightTaskDetail id={detail} division={id} status={data?.status} isAdminDivision={isAdminDivision} />, // : <HeaderRightTaskDetail id={detail} division={id} status={data?.status} isAdminDivision={isAdminDivision} />,
header: () => (
<AppHeader
title={loading ? 'Loading...' : data ? data?.title : ''}
showBack={true}
onPressLeft={() => router.back()}
right={
(entityUser.role == "user" || entityUser.role == "coadmin") && !isMemberDivision
? <></>
: <HeaderRightTaskDetail id={detail} division={id} status={data?.status} isAdminDivision={isAdminDivision} />
}
/>
)
}} }}
/> />
<ScrollView <ScrollView

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import { InputForm } from "@/components/inputForm"; import { InputForm } from "@/components/inputForm";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
@@ -90,22 +90,35 @@ export default function TaskDivisionReport() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Laporan Kegiatan", headerTitle: "Laporan Kegiatan",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
category="update" // category="update"
disable={disable || loading} // disable={disable || loading}
onPress={() => { handleUpdate() }} // onPress={() => { handleUpdate() }}
// />
// ),
header: () => (
<AppHeader title="Laporan Kegiatan"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
category="update"
disable={disable || loading}
onPress={() => { handleUpdate() }}
/>
}
/> />
), )
}} }}
/> />
<ScrollView> <ScrollView>

View File

@@ -1,5 +1,5 @@
import AppHeader from "@/components/AppHeader";
import BorderBottomItem from "@/components/borderBottomItem"; import BorderBottomItem from "@/components/borderBottomItem";
import ButtonBackHeader from "@/components/buttonBackHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import ButtonSelect from "@/components/buttonSelect"; import ButtonSelect from "@/components/buttonSelect";
import DrawerBottom from "@/components/drawerBottom"; import DrawerBottom from "@/components/drawerBottom";
@@ -116,22 +116,36 @@ export default function CreateTaskDivision() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
handleBack(); // handleBack();
}} // }}
/> // />
), // ),
headerTitle: `Tambah Tugas`, headerTitle: `Tambah Tugas`,
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
disable={title == "" || entitiesMember.length == 0 || taskCreate.length == 0 || loading} // disable={title == "" || entitiesMember.length == 0 || taskCreate.length == 0 || loading}
category="create" // category="create"
onPress={() => { handleCreate() }} // onPress={() => { handleCreate() }}
// />
// ),
header: () => (
<AppHeader
title="Tambah Tugas"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
disable={title == "" || entitiesMember.length == 0 || taskCreate.length == 0 || loading}
category="create"
onPress={() => { handleCreate() }}
/>
}
/> />
), )
}} }}
/> />
<ScrollView> <ScrollView>

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import ImageUser from "@/components/imageNew"; import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
@@ -67,16 +67,32 @@ export default function AddMemberCreateTask() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Pilih Anggota', headerTitle: 'Pilih Anggota',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
category="create" // category="create"
disable={selectMember.length > 0 ? false : true} // disable={selectMember.length > 0 ? false : true}
onPress={() => { // onPress={() => {
handleAddMember() // handleAddMember()
}} // }}
// />
// )
header: () => (
<AppHeader
title="Pilih Anggota"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
category="create"
disable={selectMember.length > 0 ? false : true}
onPress={() => {
handleAddMember()
}}
/>
}
/> />
) )
}} }}

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import { InputForm } from "@/components/inputForm"; import { InputForm } from "@/components/inputForm";
import ModalAddDetailTugasTask from "@/components/task/modalAddDetailTugasTask"; import ModalAddDetailTugasTask from "@/components/task/modalAddDetailTugasTask";
@@ -121,22 +121,35 @@ export default function CreateTaskAddTugas() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Tambah Tugas", headerTitle: "Tambah Tugas",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
disable={disable} // disable={disable}
category="create" // category="create"
onPress={() => { handleCreate() }} // onPress={() => { handleCreate() }}
// />
// ),
header: () => (
<AppHeader title="Tambah Tugas"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
disable={disable}
category="create"
onPress={() => { handleCreate() }}
/>
}
/> />
), )
}} }}
/> />
<KeyboardAvoidingView <KeyboardAvoidingView

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import { InputForm } from "@/components/inputForm"; import { InputForm } from "@/components/inputForm";
import ModalAddDetailTugasTask from "@/components/task/modalAddDetailTugasTask"; import ModalAddDetailTugasTask from "@/components/task/modalAddDetailTugasTask";
@@ -189,24 +189,40 @@ export default function UpdateProjectTaskDivision() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Edit Tanggal dan Tugas", headerTitle: "Edit Tanggal dan Tugas",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
disable={disableBtn || loadingSubmit} // disable={disableBtn || loadingSubmit}
category="update" // category="update"
onPress={() => { // onPress={() => {
handleEdit() // handleEdit()
}} // }}
// />
// ),
header: () => (
<AppHeader
title="Edit Tanggal dan Tugas"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
disable={disableBtn || loadingSubmit}
category="update"
onPress={() => {
handleEdit()
}}
/>
}
/> />
), )
}} }}
/> />
<KeyboardAvoidingView <KeyboardAvoidingView

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import ImageUser from "@/components/imageNew"; import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
@@ -12,7 +12,7 @@ import { useAuthSession } from "@/providers/AuthProvider";
import { AntDesign } from "@expo/vector-icons"; import { AntDesign } from "@expo/vector-icons";
import { router, Stack, useLocalSearchParams } from "expo-router"; import { router, Stack, useLocalSearchParams } from "expo-router";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { Pressable, SafeAreaView, ScrollView, View } from "react-native"; import { Pressable, ScrollView, View } from "react-native";
import Toast from "react-native-toast-message"; import Toast from "react-native-toast-message";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
@@ -100,16 +100,32 @@ export default function AddMemberDivision() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Tambah Anggota', headerTitle: 'Tambah Anggota',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
category="update" // category="update"
disable={selectMember.length == 0 || loading ? true : false} // disable={selectMember.length == 0 || loading ? true : false}
onPress={() => { // onPress={() => {
handleAddMember() // handleAddMember()
}} // }}
// />
// )
header: () => (
<AppHeader
title="Tambah Anggota"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
category="update"
disable={selectMember.length == 0 || loading ? true : false}
onPress={() => {
handleAddMember()
}}
/>
}
/> />
) )
}} }}

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import { InputForm } from "@/components/inputForm"; import { InputForm } from "@/components/inputForm";
import Styles from "@/constants/Styles"; import Styles from "@/constants/Styles";
@@ -66,22 +66,36 @@ export default function EditDivision() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Edit Divisi", headerTitle: "Edit Divisi",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
disable={error.name || loading ? true : false} // disable={error.name || loading ? true : false}
category="update" // category="update"
onPress={() => { handleEdit() }} // onPress={() => { handleEdit() }}
// />
// ),
header: () => (
<AppHeader
title="Edit Divisi"
showBack={true}
onPressLeft={() => router.back()}
right={
<ButtonSaveHeader
disable={error.name || loading ? true : false}
category="update"
onPress={() => { handleEdit() }}
/>
}
/> />
), )
}} }}
/> />
<ScrollView> <ScrollView>

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader" import AppHeader from "@/components/AppHeader"
import DiscussionDivisionDetail from "@/components/division/discussionDivisionDetail" import DiscussionDivisionDetail from "@/components/division/discussionDivisionDetail"
import FileDivisionDetail from "@/components/division/fileDivisionDetail" import FileDivisionDetail from "@/components/division/fileDivisionDetail"
import FiturDivisionDetail from "@/components/division/fiturDivisionDetail" import FiturDivisionDetail from "@/components/division/fiturDivisionDetail"
@@ -57,10 +57,18 @@ export default function DetailDivisionFitur() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: loading ? 'Loading... ' : data?.name, headerTitle: loading ? 'Loading... ' : data?.name,
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => <HeaderRightDivisionDetail id={id} />, // headerRight: () => <HeaderRightDivisionDetail id={id} />,
header: () => (
<AppHeader
title={loading ? 'Loading...' : data?.name || ''}
showBack={true}
onPressLeft={() => router.back()}
right={<HeaderRightDivisionDetail id={id} />}
/>
)
}} }}
/> />
<ScrollView <ScrollView
@@ -74,10 +82,10 @@ export default function DetailDivisionFitur() {
> >
<CaraouselHome refreshing={refreshing} /> <CaraouselHome refreshing={refreshing} />
<View style={[Styles.ph15, Styles.mb100]}> <View style={[Styles.ph15, Styles.mb100]}>
<FiturDivisionDetail refreshing={refreshing}/> <FiturDivisionDetail refreshing={refreshing} />
<TaskDivisionDetail refreshing={refreshing}/> <TaskDivisionDetail refreshing={refreshing} />
<FileDivisionDetail refreshing={refreshing}/> <FileDivisionDetail refreshing={refreshing} />
<DiscussionDivisionDetail refreshing={refreshing}/> <DiscussionDivisionDetail refreshing={refreshing} />
</View> </View>
</ScrollView> </ScrollView>
</SafeAreaView> </SafeAreaView>

View File

@@ -1,6 +1,6 @@
import AlertKonfirmasi from "@/components/alertKonfirmasi" import AlertKonfirmasi from "@/components/alertKonfirmasi"
import AppHeader from "@/components/AppHeader"
import BorderBottomItem from "@/components/borderBottomItem" import BorderBottomItem from "@/components/borderBottomItem"
import ButtonBackHeader from "@/components/buttonBackHeader"
import HeaderRightDivisionInfo from "@/components/division/headerDivisionInfo" import HeaderRightDivisionInfo from "@/components/division/headerDivisionInfo"
import DrawerBottom from "@/components/drawerBottom" import DrawerBottom from "@/components/drawerBottom"
import ImageUser from "@/components/imageNew" import ImageUser from "@/components/imageNew"
@@ -164,10 +164,20 @@ export default function InformationDivision() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Informasi Divisi', headerTitle: 'Informasi Divisi',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => ((entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision) && <HeaderRightDivisionInfo id={id} active={dataDetail?.isActive} />, // headerRight: () => ((entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision) && <HeaderRightDivisionInfo id={id} active={dataDetail?.isActive} />,
header: () => (
<AppHeader
title="Informasi Divisi"
showBack={true}
onPressLeft={() => router.back()}
right={
((entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision) && <HeaderRightDivisionInfo id={id} active={dataDetail?.isActive} />
}
/>
)
}} }}
/> />
<ScrollView <ScrollView

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader" import AppHeader from "@/components/AppHeader"
import ReportChartDocument from "@/components/division/reportChartDocument" import ReportChartDocument from "@/components/division/reportChartDocument"
import ReportChartEvent from "@/components/division/reportChartEvent" import ReportChartEvent from "@/components/division/reportChartEvent"
import ReportChartProgress from "@/components/division/reportChartProgress" import ReportChartProgress from "@/components/division/reportChartProgress"
@@ -107,9 +107,16 @@ export default function ReportDivision() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Laporan Divisi', headerTitle: 'Laporan Divisi',
headerTitleAlign: 'center', headerTitleAlign: 'center',
header: () => (
<AppHeader
title="Laporan Divisi"
showBack={true}
onPressLeft={() => router.back()}
/>
)
}} }}
/> />
<ScrollView> <ScrollView>

View File

@@ -1,5 +1,5 @@
import AlertKonfirmasi from "@/components/alertKonfirmasi"; import AlertKonfirmasi from "@/components/alertKonfirmasi";
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonNextHeader from "@/components/buttonNextHeader"; import ButtonNextHeader from "@/components/buttonNextHeader";
import { InputForm } from "@/components/inputForm"; import { InputForm } from "@/components/inputForm";
import ModalSelect from "@/components/modalSelect"; import ModalSelect from "@/components/modalSelect";
@@ -102,25 +102,38 @@ export default function CreateDivision() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Tambah Divisi", headerTitle: "Tambah Divisi",
headerTitleAlign: "center", headerTitleAlign: "center",
headerRight: () => ( // headerRight: () => (
<ButtonNextHeader // <ButtonNextHeader
onPress={() => { handleCheckName() }} // onPress={() => { handleCheckName() }}
disable={loadingBtn || error.idGroup || error.name || chooseGroup.val == "" || chooseGroup.val == "null" || dataForm.name == "" || dataForm.name == "null"} // disable={loadingBtn || error.idGroup || error.name || chooseGroup.val == "" || chooseGroup.val == "null" || dataForm.name == "" || dataForm.name == "null"}
// />
// ),
header: () => (
<AppHeader title="Tambah Divisi"
showBack={true}
onPressLeft={() => router.back()}
right={<ButtonNextHeader
onPress={() => { handleCheckName() }}
disable={loadingBtn || error.idGroup || error.name || chooseGroup.val == "" || chooseGroup.val == "null" || dataForm.name == "" || dataForm.name == "null"}
/>}
/> />
), )
}} }}
/> />
<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

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader"; import ButtonSaveHeader from "@/components/buttonSaveHeader";
import ImageUser from "@/components/imageNew"; import ImageUser from "@/components/imageNew";
import Text from "@/components/Text"; import Text from "@/components/Text";
@@ -12,7 +12,7 @@ import { AntDesign } from "@expo/vector-icons";
import { StackActions, useNavigation } from "@react-navigation/native"; import { StackActions, useNavigation } from "@react-navigation/native";
import { router, Stack, useLocalSearchParams } from "expo-router"; import { router, Stack, useLocalSearchParams } from "expo-router";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { Pressable, SafeAreaView, ScrollView, View } from "react-native"; import { Pressable, ScrollView, View } from "react-native";
import Toast from "react-native-toast-message"; import Toast from "react-native-toast-message";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
@@ -77,16 +77,29 @@ export default function CreateDivisionAddAdmin() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Pilih Admin Divisi', headerTitle: 'Pilih Admin Divisi',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => ( // headerRight: () => (
<ButtonSaveHeader // <ButtonSaveHeader
category="create" // category="create"
disable={selectMember.length == 0 || loading ? true : false} // disable={selectMember.length == 0 || loading ? true : false}
onPress={() => { // onPress={() => {
handleAddMember() // handleAddMember()
}} // }}
// />
// )
header: () => (
<AppHeader title="Pilih Admin Divisi"
showBack={true}
onPressLeft={() => router.back()}
right={<ButtonSaveHeader
category="create"
disable={selectMember.length == 0 || loading ? true : false}
onPress={() => {
handleAddMember()
}}
/>}
/> />
) )
}} }}

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ButtonNextHeader from "@/components/buttonNextHeader"; import ButtonNextHeader from "@/components/buttonNextHeader";
import ImageUser from "@/components/imageNew"; import ImageUser from "@/components/imageNew";
import ImageWithLabel from "@/components/imageWithLabel"; import ImageWithLabel from "@/components/imageWithLabel";
@@ -63,13 +63,23 @@ export default function CreateDivisionAddMember() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />, // headerLeft: () => <ButtonBackHeader onPress={() => { router.back() }} />,
headerTitle: 'Pilih Anggota', headerTitle: 'Pilih Anggota',
headerTitleAlign: 'center', headerTitleAlign: 'center',
headerRight: () => ( // headerRight: () => (
<ButtonNextHeader // <ButtonNextHeader
disable={selectMember.length > 0 ? false : true} // disable={selectMember.length > 0 ? false : true}
onPress={() => { handleAddMember() }} // onPress={() => { handleAddMember() }}
// />
// )
header: () => (
<AppHeader title="Pilih Anggota"
showBack={true}
onPressLeft={() => router.back()}
right={<ButtonNextHeader
disable={selectMember.length > 0 ? false : true}
onPress={() => { handleAddMember() }}
/>}
/> />
) )
}} }}

View File

@@ -1,4 +1,4 @@
import ButtonBackHeader from "@/components/buttonBackHeader"; import AppHeader from "@/components/AppHeader";
import ReportChartDocument from "@/components/division/reportChartDocument"; import ReportChartDocument from "@/components/division/reportChartDocument";
import ReportChartEvent from "@/components/division/reportChartEvent"; import ReportChartEvent from "@/components/division/reportChartEvent";
import ReportChartProgress from "@/components/division/reportChartProgress"; import ReportChartProgress from "@/components/division/reportChartProgress";
@@ -125,19 +125,28 @@ export default function Report() {
<SafeAreaView> <SafeAreaView>
<Stack.Screen <Stack.Screen
options={{ options={{
headerLeft: () => ( // headerLeft: () => (
<ButtonBackHeader // <ButtonBackHeader
onPress={() => { // onPress={() => {
router.back(); // router.back();
}} // }}
/> // />
), // ),
headerTitle: "Laporan Divisi", headerTitle: "Laporan Divisi",
headerTitleAlign: "center", headerTitleAlign: "center",
header: () => (
<AppHeader title="Laporan Divisi"
showBack={true}
onPressLeft={() => router.back()}
/>
)
}} }}
/> />
<ScrollView> <ScrollView
<View style={[Styles.p15, Styles.mb100]}> showsVerticalScrollIndicator={false}
style={[Styles.h100]}
>
<View style={[Styles.p15, Styles.mb50]}>
<SelectForm <SelectForm
bg="white" bg="white"
label="Lembaga Desa" label="Lembaga Desa"

View File

@@ -1,17 +1,18 @@
import Styles from '@/constants/Styles';
import { useRouter } from 'expo-router'; import { useRouter } from 'expo-router';
import { StyleSheet, Text, View } from 'react-native'; import { Text, View } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { useSafeAreaInsets } from 'react-native-safe-area-context';
import ButtonBackHeader from './buttonBackHeader'; import ButtonBackHeader from './buttonBackHeader';
import Styles from '@/constants/Styles';
type Props = { type Props = {
title: string; title: string;
right?: React.ReactNode; right?: React.ReactNode;
showBack?: boolean; showBack?: boolean;
onPressLeft?: () => void onPressLeft?: () => void
left?: React.ReactNode
}; };
export default function AppHeader({ title, right, showBack = true, onPressLeft }: Props) { export default function AppHeader({ title, right, showBack = true, onPressLeft, left }: Props) {
const insets = useSafeAreaInsets(); const insets = useSafeAreaInsets();
const router = useRouter(); const router = useRouter();
@@ -20,9 +21,11 @@ export default function AppHeader({ title, right, showBack = true, onPressLeft }
<View style={Styles.headerApp}> <View style={Styles.headerApp}>
{showBack ? ( {showBack ? (
<ButtonBackHeader onPress={onPressLeft} /> <ButtonBackHeader onPress={onPressLeft} />
) : ( ) :
<View style={Styles.headerSide} /> left ? left :
)} (
<View style={Styles.headerSide} />
)}
<Text style={Styles.headerTitle}>{title}</Text> <Text style={Styles.headerTitle}>{title}</Text>

View File

@@ -570,7 +570,8 @@ const Styles = StyleSheet.create({
paddingVertical: 10, paddingVertical: 10,
position: 'absolute', position: 'absolute',
width: '100%', width: '100%',
bottom: 0 bottom: 0,
backgroundColor:'black'
}, },
animatedView: { animatedView: {
width: '100%', width: '100%',