Compare commits

...

1 Commits

Author SHA1 Message Date
f68deab8c0 Fix App Header
Layouts & Navigation
- app/(application)/_layout.tsx
- app/(application)/(user)/_layout.tsx
- app/(application)/(user)/event/(tabs)/_layout.tsx
- app/(application)/(user)/job/(tabs)/_layout.tsx
- app/(application)/(user)/voting/(tabs)/_layout.tsx
- app/(application)/(user)/portofolio/_layout.tsx
- app/(application)/(user)/profile/_layout.tsx
- app/(application)/admin/_layout.tsx
- app/+not-found.tsx

User – File
- app/(application)/(file)/[id].tsx

User – Collaboration
- app/(application)/(user)/collaboration/[id]/index.tsx
- app/(application)/(user)/collaboration/[id]/detail-project-main.tsx
- app/(application)/(user)/collaboration/[id]/detail-participant.tsx
- app/(application)/(user)/collaboration/[id]/[detail]/info.tsx
- app/(application)/(user)/collaboration/[id]/[detail]/room-chat.tsx

User – Donation
- app/(application)/(user)/donation/[id]/index.tsx
- app/(application)/(user)/donation/[id]/[status]/detail.tsx
- app/(application)/(user)/donation/[id]/(news)/[news]/index.tsx

User – Event
- app/(application)/(user)/event/[id]/[status]/detail-event.tsx
- app/(application)/(user)/event/[id]/confirmation.tsx
- app/(application)/(user)/event/[id]/contribution.tsx
- app/(application)/(user)/event/[id]/history.tsx
- app/(application)/(user)/event/[id]/publish.tsx

User – Investment
- app/(application)/(user)/investment/[id]/index.tsx
- app/(application)/(user)/investment/[id]/[status]/detail.tsx
- app/(application)/(user)/investment/[id]/(my-holding)/[id].tsx
- app/(application)/(user)/investment/[id]/(news)/[news]/index.tsx

User – Job
- app/(application)/(user)/job/[id]/[status]/detail.tsx

User – Portofolio
- app/(application)/(user)/portofolio/[id]/index.tsx

User – Profile
- app/(application)/(user)/profile/[id]/index.tsx

User – Voting
- app/(application)/(user)/voting/[id]/index.tsx
- app/(application)/(user)/voting/[id]/[status]/detail.tsx
- app/(application)/(user)/voting/[id]/contribution.tsx
- app/(application)/(user)/voting/[id]/history.tsx

Components
- components/Button/BackButtonFromNotification.tsx
- components/_ShareComponent/AppHeader.tsx

Admin Screens
- screens/Admin/Notification-Admin/ScreenNotificationAdmin.tsx
- screens/Admin/Notification-Admin/ScreenNotificationAdmin2.tsx

Screens – Donation
- screens/Donation/ScreenListOfNews.tsx
- screens/Donation/ScreenRecapOfNews.tsx

Screens – Forum
- screens/Forum/ViewBeranda.tsx
- screens/Forum/ViewBeranda2.tsx
- screens/Forum/ViewBeranda3.tsx

Screens – Investment
- screens/Invesment/Document/ScreenRecapOfDocument.tsx
- screens/Invesment/News/ScreenListOfNews.tsx
- screens/Invesment/News/ScreenRecapOfNews.tsx

Screens – Notification
- screens/Notification/ScreenNotification_V1.tsx
- screens/Notification/ScreenNotification_V2.tsx

iOS
- ios/HIPMIBadungConnect.xcodeproj/project.pbxproj

Docs
- QWEN.md

### Issue: Tabs can't clicked
2026-03-13 16:41:34 +08:00
50 changed files with 686 additions and 491 deletions

View File

@@ -387,7 +387,7 @@ apiConfig.interceptors.request.use(async (config) => {
### Deep Linking ### Deep Linking
- Scheme: `hipmimobile://` - Scheme: `hipmimobile://`
- HTTPS: `cld-dkr-staging-hipmi.wibudev.com` - HTTPS: `cld-dkr-hipmi-stg.wibudev.com`
- Configured for both platforms - Configured for both platforms
### Camera ### Camera

View File

@@ -1,4 +1,5 @@
import { BackButton } from "@/components"; import { BackButton } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import PdfViewer from "@/components/_ShareComponent/PdfViewer"; import PdfViewer from "@/components/_ShareComponent/PdfViewer";
import API_STRORAGE from "@/constants/base-url-api-strorage"; import API_STRORAGE from "@/constants/base-url-api-strorage";
import { Stack, useLocalSearchParams } from "expo-router"; import { Stack, useLocalSearchParams } from "expo-router";
@@ -12,8 +13,7 @@ export default function FileScreen() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "File", header: () => <AppHeader title="File" left={<BackButton />} />,
headerLeft: () => <BackButton />,
}} }}
/> />
<SafeAreaView style={{ flex: 1 }} edges={["bottom"]}> <SafeAreaView style={{ flex: 1 }} edges={["bottom"]}>

View File

@@ -1,22 +1,21 @@
import { BackButton } from "@/components"; import { BackButton } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconPlus } from "@/components/_Icon"; import { IconPlus } from "@/components/_Icon";
import { IconDot } from "@/components/_Icon/IconComponent"; import { IconDot } from "@/components/_Icon/IconComponent";
import LeftButtonCustom from "@/components/Button/BackButton"; import LeftButtonCustom from "@/components/Button/BackButton";
import { MainColor } from "@/constants/color-palet"; import { MainColor } from "@/constants/color-palet";
import { ICON_SIZE_SMALL } from "@/constants/constans-value"; import { ICON_SIZE_SMALL } from "@/constants/constans-value";
import { HeaderStyles } from "@/styles/header-styles";
import { Ionicons } from "@expo/vector-icons"; import { Ionicons } from "@expo/vector-icons";
import { router, Stack } from "expo-router"; import { router, Stack } from "expo-router";
export default function UserLayout() { export default function UserLayout() {
return ( return (
<> <>
<Stack screenOptions={HeaderStyles}> <Stack>
<Stack.Screen <Stack.Screen
name="delete-account" name="delete-account"
options={{ options={{
title: "Hapus Akun", header: () => <AppHeader title="Hapus Akun" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
@@ -47,8 +46,7 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="user-search/index" name="user-search/index"
options={{ options={{
title: "Pencarian Pengguna", header: () => <AppHeader title="Pencarian Pengguna" />,
headerLeft: () => <BackButton />,
}} }}
/> />
@@ -71,10 +69,18 @@ export default function UserLayout() {
{/* ========== Event Section ========= */} {/* ========== Event Section ========= */}
{/* <Stack.Screen
name="event/(tabs)"
options={{
header: () => <AppHeader title="Event" left={<BackButton path="/home" />} />,
}}
/> */}
<Stack.Screen <Stack.Screen
name="event/(tabs)" name="event/(tabs)"
options={{ options={{
title: "Event", title: "Event",
header: () => <AppHeader title="Event" left={<BackButton path="/home" />} />,
// NOTE: DIPINDAH DI FILE /Event/(Tabs)/_layout.tsx // NOTE: DIPINDAH DI FILE /Event/(Tabs)/_layout.tsx
// headerLeft: () => ( // headerLeft: () => (
// <LeftButtonCustom path="/(application)/(user)/home" /> // <LeftButtonCustom path="/(application)/(user)/home" />
@@ -85,32 +91,28 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="event/create" name="event/create"
options={{ options={{
title: "Tambah Event", header: () => <AppHeader title="Tambah Event" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="event/detail/[id]" name="event/detail/[id]"
options={{ options={{
title: "Event Detail", header: () => <AppHeader title="Event Detail" left={<LeftButtonCustom />} />,
headerLeft: () => <LeftButtonCustom />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="event/[id]/edit" name="event/[id]/edit"
options={{ options={{
title: "Edit Event", header: () => <AppHeader title="Edit Event" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="event/[id]/list-of-participants" name="event/[id]/list-of-participants"
options={{ options={{
title: "Daftar peserta", header: () => <AppHeader title="Daftar peserta" />,
headerLeft: () => <BackButton />,
}} }}
/> />
{/* ========== End Event Section ========= */} {/* ========== End Event Section ========= */}
@@ -119,22 +121,19 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="collaboration/(tabs)" name="collaboration/(tabs)"
options={{ options={{
title: "Collaboration", header: () => <AppHeader title="Collaboration" left={<BackButton path="/home" />} />,
headerLeft: () => <BackButton path="/home" />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="collaboration/create" name="collaboration/create"
options={{ options={{
title: "Tambah Proyek", header: () => <AppHeader title="Tambah Proyek" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="collaboration/[id]/list-of-participants" name="collaboration/[id]/list-of-participants"
options={{ options={{
title: "Daftar Partisipan", header: () => <AppHeader title="Daftar Partisipan" />,
headerLeft: () => <BackButton />,
}} }}
/> />
{/* <Stack.Screen {/* <Stack.Screen
@@ -147,22 +146,19 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="collaboration/[id]/edit" name="collaboration/[id]/edit"
options={{ options={{
title: "Edit Proyek", header: () => <AppHeader title="Edit Proyek" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="collaboration/[id]/create-pacticipants" name="collaboration/[id]/create-pacticipants"
options={{ options={{
title: "Ajukan Partisipasi", header: () => <AppHeader title="Ajukan Partisipasi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="collaboration/[id]/select-of-participants" name="collaboration/[id]/select-of-participants"
options={{ options={{
title: "Pilih Partisipan", header: () => <AppHeader title="Pilih Partisipan" />,
headerLeft: () => <BackButton />,
}} }}
/> />
@@ -172,29 +168,25 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="voting/create" name="voting/create"
options={{ options={{
title: "Tambah Voting", header: () => <AppHeader title="Tambah Voting" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="voting/(tabs)" name="voting/(tabs)"
options={{ options={{
title: "Voting", header: () => <AppHeader title="Voting" left={<BackButton path="/home" />} />,
headerLeft: () => <BackButton path="/home" />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="voting/[id]/edit" name="voting/[id]/edit"
options={{ options={{
title: "Edit Voting", header: () => <AppHeader title="Edit Voting" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="voting/[id]/list-of-contributor" name="voting/[id]/list-of-contributor"
options={{ options={{
title: "Daftar Kontributor", header: () => <AppHeader title="Daftar Kontributor" />,
headerLeft: () => <BackButton />,
}} }}
/> />
@@ -204,8 +196,7 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="crowdfunding/index" name="crowdfunding/index"
options={{ options={{
title: "Crowdfunding", header: () => <AppHeader title="Crowdfunding" left={<BackButton path="/home" />} />,
headerLeft: () => <BackButton path="/home" />,
}} }}
/> />
@@ -215,103 +206,95 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="investment/(tabs)" name="investment/(tabs)"
options={{ options={{
title: "Investasi", header: () => <AppHeader title="Investasi" left={<BackButton path="/crowdfunding" />} />,
headerLeft: () => <BackButton path="/crowdfunding" />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/create" name="investment/create"
options={{ options={{
title: "Tambah Investasi", header: () => <AppHeader title="Tambah Investasi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/index" name="investment/[id]/index"
options={{ options={{
title: "Detail Investasi", header: () => <AppHeader title="Detail Investasi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/edit" name="investment/[id]/edit"
options={{ options={{
title: "Edit Investasi", header: () => <AppHeader title="Edit Investasi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/edit-prospectus" name="investment/[id]/edit-prospectus"
options={{ options={{
title: "Edit Prospektus", header: () => <AppHeader title="Edit Prospektus" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/(document)/list-of-document" name="investment/[id]/(document)/list-of-document"
options={{ options={{
title: "Daftar Dokumen", header: () => <AppHeader title="Daftar Dokumen" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/(document)/add-document" name="investment/[id]/(document)/add-document"
options={{ options={{
title: "Tambah Dokumen", header: () => <AppHeader title="Tambah Dokumen" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/(document)/edit-document" name="investment/[id]/(document)/edit-document"
options={{ options={{
title: "Edit Dokumen", header: () => <AppHeader title="Edit Dokumen" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/(news)/add-news" name="investment/[id]/(news)/add-news"
options={{ options={{
title: "Tambah Berita", header: () => <AppHeader title="Tambah Berita" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/investor" name="investment/[id]/investor"
options={{ options={{
title: "Investor", header: () => <AppHeader title="Investor" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/(transaction-flow)/index" name="investment/[id]/(transaction-flow)/index"
options={{ options={{
title: "Pembelian Saham", header: () => <AppHeader title="Pembelian Saham" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/(transaction-flow)/select-bank" name="investment/[id]/(transaction-flow)/select-bank"
options={{ options={{
title: "Pilih Bank", header: () => <AppHeader title="Pilih Bank" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/(transaction-flow)/invoice" name="investment/[id]/(transaction-flow)/invoice"
options={{ options={{
title: "Invoice", header: () => (
headerLeft: () => ( <AppHeader
<Ionicons title="Invoice"
name="close" left={
size={ICON_SIZE_SMALL} <Ionicons
color={MainColor.yellow} name="close"
onPress={() => size={ICON_SIZE_SMALL}
router.navigate(`/investment/(tabs)/transaction`) color={MainColor.yellow}
onPress={() =>
router.navigate(`/investment/(tabs)/transaction`)
}
/>
} }
/> />
), ),
@@ -320,14 +303,18 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="investment/[id]/(transaction-flow)/process" name="investment/[id]/(transaction-flow)/process"
options={{ options={{
title: "Proses", header: () => (
headerLeft: () => ( <AppHeader
<Ionicons title="Proses"
name="close" left={
size={ICON_SIZE_SMALL} <Ionicons
color={MainColor.yellow} name="close"
onPress={() => size={ICON_SIZE_SMALL}
router.navigate(`/investment/(tabs)/transaction`) color={MainColor.yellow}
onPress={() =>
router.navigate(`/investment/(tabs)/transaction`)
}
/>
} }
/> />
), ),
@@ -336,23 +323,20 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="investment/[id]/(transaction-flow)/success" name="investment/[id]/(transaction-flow)/success"
options={{ options={{
title: "Transaksi Berhasil", header: () => <AppHeader title="Transaksi Berhasil" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/(transaction-flow)/failed" name="investment/[id]/(transaction-flow)/failed"
options={{ options={{
title: "Transaksi Gagal", header: () => <AppHeader title="Transaksi Gagal" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="investment/[id]/(my-holding)/[id]" name="investment/[id]/(my-holding)/[id]"
options={{ options={{
title: "Detail Saham Saya", header: () => <AppHeader title="Detail Saham Saya" />,
headerLeft: () => <BackButton />,
}} }}
/> />
{/* ========== End Investment Section ========= */} {/* ========== End Investment Section ========= */}
@@ -361,122 +345,111 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="donation/(tabs)" name="donation/(tabs)"
options={{ options={{
title: "Donasi", header: () => <AppHeader title="Donasi" left={<BackButton path="/crowdfunding" />} />,
headerLeft: () => <BackButton path="/crowdfunding" />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/create" name="donation/create"
options={{ options={{
title: "Tambah Donasi", header: () => <AppHeader title="Tambah Donasi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/create-story" name="donation/create-story"
options={{ options={{
title: "Tambah Donasi", header: () => <AppHeader title="Tambah Donasi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/edit" name="donation/[id]/edit"
options={{ options={{
title: "Edit Donasi", header: () => <AppHeader title="Edit Donasi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/edit-story" name="donation/[id]/edit-story"
options={{ options={{
title: "Edit Donasi", header: () => <AppHeader title="Edit Donasi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/edit-rekening" name="donation/[id]/edit-rekening"
options={{ options={{
title: "Edit Rekening", header: () => <AppHeader title="Edit Rekening" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/detail-story" name="donation/[id]/detail-story"
options={{ options={{
title: "Cerita Penggalang", header: () => <AppHeader title="Cerita Penggalang" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/infromation-fundrising" name="donation/[id]/infromation-fundrising"
options={{ options={{
title: "Informasi Penggalang Dana", header: () => <AppHeader title="Informasi Penggalang Dana" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/list-of-donatur" name="donation/[id]/list-of-donatur"
options={{ options={{
title: "Daftar Donatur", header: () => <AppHeader title="Daftar Donatur" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/fund-disbursement" name="donation/[id]/fund-disbursement"
options={{ options={{
title: "Pencairan Dana", header: () => <AppHeader title="Pencairan Dana" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/(news)/recap-of-news" name="donation/[id]/(news)/recap-of-news"
options={{ options={{
title: "Rekap Kabar", header: () => <AppHeader title="Rekap Kabar" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/(news)/add-news" name="donation/[id]/(news)/add-news"
options={{ options={{
title: "Tambah Berita", header: () => <AppHeader title="Tambah Berita" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/(news)/[news]/edit-news" name="donation/[id]/(news)/[news]/edit-news"
options={{ options={{
title: "Edit Berita", header: () => <AppHeader title="Edit Berita" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/(transaction-flow)/index" name="donation/[id]/(transaction-flow)/index"
options={{ options={{
title: "Donasi", header: () => <AppHeader title="Donasi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/(transaction-flow)/select-bank" name="donation/[id]/(transaction-flow)/select-bank"
options={{ options={{
title: "Pilih Bank", header: () => <AppHeader title="Pilih Bank" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/(transaction-flow)/[invoiceId]/invoice" name="donation/[id]/(transaction-flow)/[invoiceId]/invoice"
options={{ options={{
title: "Invoice", header: () => (
headerLeft: () => ( <AppHeader
<Ionicons title="Invoice"
name="close" left={
size={ICON_SIZE_SMALL} <Ionicons
color={MainColor.yellow} name="close"
onPress={() => router.navigate(`/donation/(tabs)/my-donation`)} size={ICON_SIZE_SMALL}
color={MainColor.yellow}
onPress={() => router.navigate(`/donation/(tabs)/my-donation`)}
/>
}
/> />
), ),
}} }}
@@ -484,13 +457,17 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="donation/[id]/(transaction-flow)/[invoiceId]/process" name="donation/[id]/(transaction-flow)/[invoiceId]/process"
options={{ options={{
title: "Proses", header: () => (
headerLeft: () => ( <AppHeader
<Ionicons title="Proses"
name="close" left={
size={ICON_SIZE_SMALL} <Ionicons
color={MainColor.yellow} name="close"
onPress={() => router.navigate(`/donation/(tabs)/my-donation`)} size={ICON_SIZE_SMALL}
color={MainColor.yellow}
onPress={() => router.navigate(`/donation/(tabs)/my-donation`)}
/>
}
/> />
), ),
}} }}
@@ -498,55 +475,51 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="donation/[id]/(transaction-flow)/[invoiceId]/success" name="donation/[id]/(transaction-flow)/[invoiceId]/success"
options={{ options={{
title: "Donasi Berhasil", header: () => <AppHeader title="Donasi Berhasil" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="donation/[id]/(transaction-flow)/[invoiceId]/failed" name="donation/[id]/(transaction-flow)/[invoiceId]/failed"
options={{ options={{
title: "Donasi Gagal", header: () => <AppHeader title="Donasi Gagal" />,
headerLeft: () => <BackButton />,
}} }}
/> />
{/* ========== End Donation Section ========= */} {/* ========== End Donation Section ========= */}
{/* ========== Job Section ========= */} {/* ========== Job Section ========= */}
<Stack.Screen <Stack.Screen
name="job/create" name="job/create"
options={{ options={{
title: "Tambah Job", header: () => <AppHeader title="Tambah Job" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="job/(tabs)" name="job/(tabs)"
options={{ options={{
title: "Job Vacancy", title: "Job Vacancy",
// headerLeft: () => <BackButton path="/home" />,
// NOTE: headerLeft di pindahkan ke Tabs Layout // NOTE: headerLeft di pindahkan ke Tabs Layout
header: () => <AppHeader title="Job Vacancy" left={<BackButton path="/home" />} />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="job/[id]/index" name="job/[id]/index"
options={{ options={{
title: "Detail Job", header: () => <AppHeader title="Detail Job" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="job/[id]/edit" name="job/[id]/edit"
options={{ options={{
title: "Edit Job", header: () => <AppHeader title="Edit Job" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="job/[id]/archive" name="job/[id]/archive"
options={{ options={{
title: "Arsip Job", header: () => <AppHeader title="Arsip Job" />,
headerLeft: () => <BackButton />,
}} }}
/> />
@@ -556,78 +529,67 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="forum/create" name="forum/create"
options={{ options={{
title: "Tambah Diskusi", header: () => <AppHeader title="Tambah Diskusi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="forum/[id]/edit" name="forum/[id]/edit"
options={{ options={{
title: "Edit Diskusi", header: () => <AppHeader title="Edit Diskusi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="forum/[id]/forumku" name="forum/[id]/forumku"
options={{ options={{
title: "Forumku", header: () => <AppHeader title="Forumku" left={<BackButton icon={"close"} />} />,
headerLeft: () => <BackButton icon={"close"} />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="forum/[id]/index" name="forum/[id]/index"
options={{ options={{
title: "Detail", header: () => <AppHeader title="Detail" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="forum/[id]/report-commentar" name="forum/[id]/report-commentar"
options={{ options={{
title: "Laporkan Komentar", header: () => <AppHeader title="Laporkan Komentar" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="forum/[id]/other-report-commentar" name="forum/[id]/other-report-commentar"
options={{ options={{
title: "Laporkan Komentar", header: () => <AppHeader title="Laporkan Komentar" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="forum/[id]/report-posting" name="forum/[id]/report-posting"
options={{ options={{
title: "Laporkan Diskusi", header: () => <AppHeader title="Laporkan Diskusi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="forum/[id]/other-report-posting" name="forum/[id]/other-report-posting"
options={{ options={{
title: "Laporkan Diskusi", header: () => <AppHeader title="Laporkan Diskusi" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="forum/terms" name="forum/terms"
options={{ options={{
title: "Syarat & Ketentuan Forum", header: () => <AppHeader title="Syarat & Ketentuan Forum" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="forum/[id]/preview-report-posting" name="forum/[id]/preview-report-posting"
options={{ options={{
title: "Laporan Postingan", header: () => <AppHeader title="Laporan Postingan" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="forum/[id]/preview-report-comment" name="forum/[id]/preview-report-comment"
options={{ options={{
title: "Laporan Komentar", header: () => <AppHeader title="Laporan Komentar" />,
headerLeft: () => <BackButton />,
}} }}
/> />
@@ -635,29 +597,25 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="maps/index" name="maps/index"
options={{ options={{
title: "Maps", header: () => <AppHeader title="Maps" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="maps/create" name="maps/create"
options={{ options={{
title: "Tambah Maps", header: () => <AppHeader title="Tambah Maps" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="maps/[id]/edit" name="maps/[id]/edit"
options={{ options={{
title: "Edit Maps", header: () => <AppHeader title="Edit Maps" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="maps/[id]/custom-pin" name="maps/[id]/custom-pin"
options={{ options={{
title: "Custom Pin Maps", header: () => <AppHeader title="Custom Pin Maps" />,
headerLeft: () => <BackButton />,
}} }}
/> />
@@ -665,8 +623,7 @@ export default function UserLayout() {
<Stack.Screen <Stack.Screen
name="marketplace/index" name="marketplace/index"
options={{ options={{
title: "Market Place", header: () => <AppHeader title="Market Place" />,
headerLeft: () => <BackButton />,
}} }}
/> />
</Stack> </Stack>

View File

@@ -10,6 +10,7 @@ import {
TextCustom, TextCustom,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { apiCollaborationGroup } from "@/service/api-client/api-collaboration"; import { apiCollaborationGroup } from "@/service/api-client/api-collaboration";
import { Stack, useFocusEffect, useLocalSearchParams } from "expo-router"; import { Stack, useFocusEffect, useLocalSearchParams } from "expo-router";
import { useState, useCallback } from "react"; import { useState, useCallback } from "react";
@@ -40,8 +41,7 @@ export default function CollaborationRoomInfo() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Info`, header: () => <AppHeader title="Info" left={<BackButton />} />,
headerLeft: () => <BackButton />,
}} }}
/> />

View File

@@ -1,4 +1,5 @@
import { BackButton } from "@/components"; import { BackButton } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { MainColor } from "@/constants/color-palet"; import { MainColor } from "@/constants/color-palet";
import { ICON_SIZE_SMALL } from "@/constants/constans-value"; import { ICON_SIZE_SMALL } from "@/constants/constans-value";
import ChatScreen from "@/screens/Collaboration/GroupChatSection"; import ChatScreen from "@/screens/Collaboration/GroupChatSection";
@@ -12,14 +13,18 @@ export default function CollaborationRoomChat() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Proyek ${detail}`, header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title={`Proyek ${detail}`}
<Feather left={<BackButton />}
name="info" right={
size={ICON_SIZE_SMALL} <Feather
color={MainColor.yellow} name="info"
onPress={() => router.push(`/collaboration/${id}/${detail}/info`)} size={ICON_SIZE_SMALL}
color={MainColor.yellow}
onPress={() => router.push(`/collaboration/${id}/${detail}/info`)}
/>
}
/> />
), ),
}} }}

View File

@@ -6,6 +6,7 @@ import {
MenuDrawerDynamicGrid, MenuDrawerDynamicGrid,
ViewWrapper ViewWrapper
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import Collaboration_BoxDetailSection from "@/screens/Collaboration/BoxDetailSection"; import Collaboration_BoxDetailSection from "@/screens/Collaboration/BoxDetailSection";
import { apiCollaborationGetOne } from "@/service/api-client/api-collaboration"; import { apiCollaborationGetOne } from "@/service/api-client/api-collaboration";
import { Ionicons } from "@expo/vector-icons"; import { Ionicons } from "@expo/vector-icons";
@@ -38,10 +39,14 @@ export default function CollaborationDetailParticipant() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Detail Proyek", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Detail Proyek"
<DotButton onPress={() => setOpenDrawerParticipant(true)} /> left={<BackButton />}
right={
<DotButton onPress={() => setOpenDrawerParticipant(true)} />
}
/>
), ),
}} }}
/> />

View File

@@ -8,6 +8,7 @@ import {
Spacing, Spacing,
ViewWrapper ViewWrapper
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconEdit } from "@/components/_Icon"; import { IconEdit } from "@/components/_Icon";
import Collaboration_BoxDetailSection from "@/screens/Collaboration/BoxDetailSection"; import Collaboration_BoxDetailSection from "@/screens/Collaboration/BoxDetailSection";
import { import {
@@ -66,9 +67,13 @@ export default function CollaborationDetailProjectMain() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Proyek Saya", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => <DotButton onPress={() => setOpenDrawer(true)} />, title="Proyek Saya"
left={<BackButton />}
right={<DotButton onPress={() => setOpenDrawer(true)} />}
/>
),
}} }}
/> />
<ViewWrapper> <ViewWrapper>

View File

@@ -9,6 +9,7 @@ import {
MenuDrawerDynamicGrid, MenuDrawerDynamicGrid,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { useAuth } from "@/hooks/use-auth"; import { useAuth } from "@/hooks/use-auth";
import Collaboration_BoxDetailSection from "@/screens/Collaboration/BoxDetailSection"; import Collaboration_BoxDetailSection from "@/screens/Collaboration/BoxDetailSection";
import { import {
@@ -74,10 +75,14 @@ export default function CollaborationDetail() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Detail Proyek", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Detail Proyek"
<DotButton onPress={() => setOpenDrawerMenu(true)} /> left={<BackButton />}
right={
<DotButton onPress={() => setOpenDrawerMenu(true)} />
}
/>
), ),
}} }}
/> />

View File

@@ -11,6 +11,7 @@ import {
TextCustom, TextCustom,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconEdit } from "@/components/_Icon"; import { IconEdit } from "@/components/_Icon";
import { IconTrash } from "@/components/_Icon/IconTrash"; import { IconTrash } from "@/components/_Icon/IconTrash";
import { useAuth } from "@/hooks/use-auth"; import { useAuth } from "@/hooks/use-auth";
@@ -57,12 +58,17 @@ export default function DonationNews() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Detail Kabar", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => title="Detail Kabar"
user?.id === data?.authorId && ( left={<BackButton />}
<DotButton onPress={() => setOpenDrawer(true)} /> right={
), user?.id === data?.authorId && (
<DotButton onPress={() => setOpenDrawer(true)} />
)
}
/>
),
}} }}
/> />
<ViewWrapper> <ViewWrapper>

View File

@@ -7,6 +7,7 @@ import {
NewWrapper, NewWrapper,
Spacing, Spacing,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconEdit, IconNews } from "@/components/_Icon"; import { IconEdit, IconNews } from "@/components/_Icon";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom"; import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom";
@@ -97,14 +98,19 @@ export default function DonasiDetailStatus() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Detail ${_.startCase(status as string)}`, header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => title={`Detail ${_.startCase(status as string)}`}
status === "draft" ? ( left={<BackButton />}
<DotButton onPress={() => setOpenDrawer(true)} /> right={
) : status === "publish" ? ( status === "draft" ? (
<DotButton onPress={() => setOpenDrawerPublish(true)} /> <DotButton onPress={() => setOpenDrawer(true)} />
) : null, ) : status === "publish" ? (
<DotButton onPress={() => setOpenDrawerPublish(true)} />
) : null
}
/>
),
}} }}
/> />
<NewWrapper <NewWrapper

View File

@@ -10,6 +10,7 @@ import {
StackCustom, StackCustom,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconNews } from "@/components/_Icon"; import { IconNews } from "@/components/_Icon";
import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom"; import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom";
import { useAuth } from "@/hooks/use-auth"; import { useAuth } from "@/hooks/use-auth";
@@ -90,12 +91,17 @@ export default function DonasiDetailBeranda() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Detail Donasi`, header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => title="Detail Donasi"
user?.id === data?.Author?.id ? ( left={<BackButton />}
<DotButton onPress={() => setOpenDrawer(true)} /> right={
) : null, user?.id === data?.Author?.id ? (
<DotButton onPress={() => setOpenDrawer(true)} />
) : null
}
/>
),
}} }}
/> />
<NewWrapper footerComponent={buttonSection}> <NewWrapper footerComponent={buttonSection}>

View File

@@ -4,36 +4,34 @@ import {
IconHome, IconHome,
IconStatus, IconStatus,
} from "@/components/_Icon"; } from "@/components/_Icon";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import BackButtonFromNotification from "@/components/Button/BackButtonFromNotification"; import BackButtonFromNotification from "@/components/Button/BackButtonFromNotification";
import { TabsStyles } from "@/styles/tabs-styles"; import { TabsStyles } from "@/styles/tabs-styles";
import { router, Tabs, useLocalSearchParams, useNavigation } from "expo-router"; import { router, Tabs, useLocalSearchParams } from "expo-router";
import { useLayoutEffect } from "react";
export default function EventTabsLayout() { export default function EventTabsLayout() {
const navigation = useNavigation();
const { from, category } = useLocalSearchParams<{ const { from, category } = useLocalSearchParams<{
from?: string; from?: string;
category?: string; category?: string;
}>(); }>();
console.log("from", from);
console.log("category", category);
// Atur header secara dinamis
useLayoutEffect(() => {
navigation.setOptions({
headerLeft: () => (
<BackButtonFromNotification
from={from as string}
category={category as string}
/>
),
});
}, [from, router, navigation]);
return ( return (
<Tabs screenOptions={TabsStyles}> <Tabs
screenOptions={{
...TabsStyles,
header: () => (
<AppHeader
title="Event"
left={
<BackButtonFromNotification
from={from as string}
category={category as string}
/>
}
/>
),
}}
>
<Tabs.Screen <Tabs.Screen
name="index" name="index"
options={{ options={{

View File

@@ -10,6 +10,7 @@ import {
TextCustom, TextCustom,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import LeftButtonCustom from "@/components/Button/BackButton"; import LeftButtonCustom from "@/components/Button/BackButton";
import Event_ButtonStatusSection from "@/screens/Event/ButtonStatusSection"; import Event_ButtonStatusSection from "@/screens/Event/ButtonStatusSection";
@@ -81,12 +82,17 @@ export default function EventDetailStatus() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Detail ${status === "publish" ? "" : status}`, header: () => (
headerLeft: () => <LeftButtonCustom />, <AppHeader
headerRight: () => title={`Detail ${status === "publish" ? "" : status}`}
status === "draft" ? ( left={<LeftButtonCustom />}
<DotButton onPress={() => setOpenDrawer(true)} /> right={
) : null, status === "draft" ? (
<DotButton onPress={() => setOpenDrawer(true)} />
) : null
}
/>
),
}} }}
/> />
<ViewWrapper> <ViewWrapper>

View File

@@ -9,6 +9,7 @@ import {
TextCustom, TextCustom,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { MainColor } from "@/constants/color-palet"; import { MainColor } from "@/constants/color-palet";
import { useAuth } from "@/hooks/use-auth"; import { useAuth } from "@/hooks/use-auth";
import { import {
@@ -265,13 +266,17 @@ export default function UserEventConfirmation() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Konfirmasi Event", header: () => (
headerLeft: () => ( <AppHeader
<Ionicons title="Konfirmasi Event"
name="arrow-back" left={
size={20} <Ionicons
color={MainColor.yellow} name="arrow-back"
onPress={() => router.navigate("/")} size={20}
color={MainColor.yellow}
onPress={() => router.navigate("/")}
/>
}
/> />
), ),
}} }}

View File

@@ -7,6 +7,7 @@ import {
Spacing, Spacing,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import LeftButtonCustom from "@/components/Button/BackButton"; import LeftButtonCustom from "@/components/Button/BackButton";
import Event_BoxDetailPublishSection from "@/screens/Event/BoxDetailPublishSection"; import Event_BoxDetailPublishSection from "@/screens/Event/BoxDetailPublishSection";
@@ -49,9 +50,13 @@ export default function EventDetailContribution() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Detail kontribusi`, header: () => (
headerLeft: () => <LeftButtonCustom />, <AppHeader
headerRight: () => <DotButton onPress={() => setOpenDrawer(true)} />, title="Detail kontribusi"
left={<LeftButtonCustom />}
right={<DotButton onPress={() => setOpenDrawer(true)} />}
/>
),
}} }}
/> />
<ViewWrapper> <ViewWrapper>

View File

@@ -6,6 +6,7 @@ import {
ViewWrapper, ViewWrapper,
Spacing, Spacing,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import LeftButtonCustom from "@/components/Button/BackButton"; import LeftButtonCustom from "@/components/Button/BackButton";
import Event_BoxDetailPublishSection from "@/screens/Event/BoxDetailPublishSection"; import Event_BoxDetailPublishSection from "@/screens/Event/BoxDetailPublishSection";
@@ -44,9 +45,13 @@ export default function EventDetailHistory() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Detail riwayat`, header: () => (
headerLeft: () => <LeftButtonCustom />, <AppHeader
headerRight: () => <DotButton onPress={() => setOpenDrawer(true)} />, title="Detail riwayat"
left={<LeftButtonCustom />}
right={<DotButton onPress={() => setOpenDrawer(true)} />}
/>
),
}} }}
/> />
<ViewWrapper> <ViewWrapper>

View File

@@ -8,6 +8,7 @@ import {
MenuDrawerDynamicGrid, MenuDrawerDynamicGrid,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom"; import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom";
import LeftButtonCustom from "@/components/Button/BackButton"; import LeftButtonCustom from "@/components/Button/BackButton";
@@ -156,9 +157,13 @@ export default function EventDetailPublish() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Event Publish`, header: () => (
headerLeft: () => <BackButton onPress={() => router.back()} />, <AppHeader
headerRight: () => <DotButton onPress={() => setOpenDrawer(true)} />, title="Event Publish"
left={<BackButton onPress={() => router.back()} />}
right={<DotButton onPress={() => setOpenDrawer(true)} />}
/>
),
}} }}
/> />
<ViewWrapper> <ViewWrapper>

View File

@@ -10,6 +10,7 @@ import {
TextCustom, TextCustom,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconDocument, IconEdit, IconNews } from "@/components/_Icon"; import { IconDocument, IconEdit, IconNews } from "@/components/_Icon";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import { MainColor } from "@/constants/color-palet"; import { MainColor } from "@/constants/color-palet";
@@ -76,14 +77,19 @@ export default function InvestmentDetailHolding() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Detail ${_.startCase(status as string)}`, header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => title={`Detail ${_.startCase(status as string)}`}
status === "draft" ? ( left={<BackButton />}
<DotButton onPress={() => setOpenDrawerDraft(true)} /> right={
) : status === "publish" ? ( status === "draft" ? (
<DotButton onPress={() => setOpenDrawerPublish(true)} /> <DotButton onPress={() => setOpenDrawerDraft(true)} />
) : null, ) : status === "publish" ? (
<DotButton onPress={() => setOpenDrawerPublish(true)} />
) : null
}
/>
),
}} }}
/> />

View File

@@ -11,6 +11,7 @@ import {
TextCustom, TextCustom,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconTrash } from "@/components/_Icon/IconTrash"; import { IconTrash } from "@/components/_Icon/IconTrash";
import { useAuth } from "@/hooks/use-auth"; import { useAuth } from "@/hooks/use-auth";
import { import {
@@ -56,12 +57,17 @@ export default function InvestmentNews() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Detail Berita", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => title="Detail Berita"
user?.id === data?.authorId && ( left={<BackButton />}
<DotButton onPress={() => setOpenDrawer(true)} /> right={
), user?.id === data?.authorId && (
<DotButton onPress={() => setOpenDrawer(true)} />
)
}
/>
),
}} }}
/> />
<ViewWrapper> <ViewWrapper>

View File

@@ -6,6 +6,7 @@ import {
MenuDrawerDynamicGrid, MenuDrawerDynamicGrid,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconDocument, IconEdit, IconNews } from "@/components/_Icon"; import { IconDocument, IconEdit, IconNews } from "@/components/_Icon";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import { MainColor } from "@/constants/color-palet"; import { MainColor } from "@/constants/color-palet";
@@ -106,14 +107,19 @@ export default function InvestmentDetailStatus() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Detail ${_.startCase(status as string)}`, header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => title={`Detail ${_.startCase(status as string)}`}
status === "draft" ? ( left={<BackButton />}
<DotButton onPress={() => setOpenDrawerDraft(true)} /> right={
) : status === "publish" ? ( status === "draft" ? (
<DotButton onPress={() => setOpenDrawerPublish(true)} /> <DotButton onPress={() => setOpenDrawerDraft(true)} />
) : null, ) : status === "publish" ? (
<DotButton onPress={() => setOpenDrawerPublish(true)} />
) : null
}
/>
),
}} }}
/> />

View File

@@ -6,6 +6,7 @@ import {
MenuDrawerDynamicGrid, MenuDrawerDynamicGrid,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconDocument, IconEdit, IconNews } from "@/components/_Icon"; import { IconDocument, IconEdit, IconNews } from "@/components/_Icon";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import { MainColor } from "@/constants/color-palet"; import { MainColor } from "@/constants/color-palet";
@@ -105,14 +106,19 @@ export default function InvestmentDetail() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Detail ${_.startCase(status as string)}`, header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => title={`Detail ${_.startCase(status as string)}`}
status === "draft" ? ( left={<BackButton />}
<DotButton onPress={() => setOpenDrawerDraft(true)} /> right={
) : status === "publish" ? ( status === "draft" ? (
<DotButton onPress={() => setOpenDrawerPublish(true)} /> <DotButton onPress={() => setOpenDrawerDraft(true)} />
) : null, ) : status === "publish" ? (
<DotButton onPress={() => setOpenDrawerPublish(true)} />
) : null
}
/>
),
}} }}
/> />

View File

@@ -1,5 +1,6 @@
/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable react-hooks/exhaustive-deps */
import { BackButton } from "@/components"; import { BackButton } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconHome, IconStatus } from "@/components/_Icon"; import { IconHome, IconStatus } from "@/components/_Icon";
import BackButtonFromNotification from "@/components/Button/BackButtonFromNotification"; import BackButtonFromNotification from "@/components/Button/BackButtonFromNotification";
import { TabsStyles } from "@/styles/tabs-styles"; import { TabsStyles } from "@/styles/tabs-styles";
@@ -7,31 +8,30 @@ import { Ionicons } from "@expo/vector-icons";
import { import {
router, router,
Tabs, Tabs,
useLocalSearchParams, useLocalSearchParams
useNavigation
} from "expo-router"; } from "expo-router";
import { useLayoutEffect } from "react";
export default function JobTabsLayout() { export default function JobTabsLayout() {
const navigation = useNavigation();
const { from, category } = useLocalSearchParams<{ const { from, category } = useLocalSearchParams<{
from?: string; from?: string;
category?: string; category?: string;
}>(); }>();
// Atur header secara dinamis
useLayoutEffect(() => {
navigation.setOptions({
headerLeft: () => (
<BackButtonFromNotification from={from as string} category={category as string} />
),
});
}, [from, router, navigation]);
return ( return (
<> <>
<Tabs screenOptions={TabsStyles}> <Tabs
screenOptions={{
...TabsStyles,
header: () => (
<AppHeader
title="Job Vacancy"
left={
<BackButtonFromNotification from={from as string} category={category as string} />
}
/>
),
}}
>
<Tabs.Screen <Tabs.Screen
name="index" name="index"
options={{ options={{

View File

@@ -9,6 +9,7 @@ import {
StackCustom, StackCustom,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconEdit } from "@/components/_Icon"; import { IconEdit } from "@/components/_Icon";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import ReportBox from "@/components/Box/ReportBox"; import ReportBox from "@/components/Box/ReportBox";
@@ -58,12 +59,17 @@ export default function JobDetailStatus() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Detail`, header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => title="Detail"
status === "draft" ? ( left={<BackButton />}
<DotButton onPress={() => setOpenDrawer(true)} /> right={
) : null, status === "draft" ? (
<DotButton onPress={() => setOpenDrawer(true)} />
) : null
}
/>
),
}} }}
/> />
<ViewWrapper> <ViewWrapper>

View File

@@ -8,6 +8,7 @@ import {
StackCustom, StackCustom,
TextCustom, TextCustom,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import LeftButtonCustom from "@/components/Button/BackButton"; import LeftButtonCustom from "@/components/Button/BackButton";
import GridTwoView from "@/components/_ShareComponent/GridTwoView"; import GridTwoView from "@/components/_ShareComponent/GridTwoView";
import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom"; import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom";
@@ -72,20 +73,23 @@ export default function Portofolio() {
{/* Header */} {/* Header */}
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Portofolio", header: () => (
headerLeft: () => <LeftButtonCustom />, <AppHeader
headerRight: () => title="Portofolio"
data?.Profile?.id !== profileId ? null : ( left={<LeftButtonCustom />}
<TouchableOpacity onPress={openDrawer}> right={
<Ionicons data?.Profile?.id !== profileId ? null : (
name="ellipsis-vertical" <TouchableOpacity onPress={openDrawer}>
size={20} <Ionicons
color={MainColor.yellow} name="ellipsis-vertical"
/> size={20}
</TouchableOpacity> color={MainColor.yellow}
), />
headerStyle: GStyles.headerStyle, </TouchableOpacity>
headerTitleStyle: GStyles.headerTitleStyle, )
}
/>
),
}} }}
/> />
<ViewWrapper> <ViewWrapper>

View File

@@ -1,5 +1,5 @@
import AppHeader from "@/components/_ShareComponent/AppHeader";
import LeftButtonCustom from "@/components/Button/BackButton"; import LeftButtonCustom from "@/components/Button/BackButton";
import { HeaderStyles } from "@/styles/header-styles";
import { Stack } from "expo-router"; import { Stack } from "expo-router";
export default function PortofolioLayout() { export default function PortofolioLayout() {
@@ -7,8 +7,9 @@ export default function PortofolioLayout() {
<> <>
<Stack <Stack
screenOptions={{ screenOptions={{
...HeaderStyles, header: () => (
headerLeft: () => <LeftButtonCustom />, <AppHeader title="Portofolio" left={<LeftButtonCustom />} />
),
}} }}
> >
{/* <Stack.Screen name="[id]/index" options={{ title: "Portofolio" }} /> */} {/* <Stack.Screen name="[id]/index" options={{ title: "Portofolio" }} /> */}

View File

@@ -1,5 +1,6 @@
/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable react-hooks/exhaustive-deps */
import { NewWrapper, StackCustom } from "@/components"; import { NewWrapper, StackCustom } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom"; import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom";
import LeftButtonCustom from "@/components/Button/BackButton"; import LeftButtonCustom from "@/components/Button/BackButton";
import DrawerCustom from "@/components/Drawer/DrawerCustom"; import DrawerCustom from "@/components/Drawer/DrawerCustom";
@@ -101,18 +102,20 @@ export default function Profile() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Profile`, header: () => (
headerLeft: () => <LeftButtonCustom />, <AppHeader
headerRight: () => ( title="Profile"
<ButtonnDot left={<LeftButtonCustom />}
id={id as string} right={
openDrawer={openDrawer} <ButtonnDot
isUserCheck={isUserCheck()} id={id as string}
logout={logout} openDrawer={openDrawer}
isUserCheck={isUserCheck()}
logout={logout}
/>
}
/> />
), ),
headerStyle: GStyles.headerStyle,
headerTitleStyle: GStyles.headerTitleStyle,
}} }}
/> />
{/* Main View */} {/* Main View */}

View File

@@ -1,47 +1,39 @@
import { BackButton } from "@/components"; import { BackButton } from "@/components";
import { GStyles } from "@/styles/global-styles"; import AppHeader from "@/components/_ShareComponent/AppHeader";
import { Stack } from "expo-router"; import { Stack } from "expo-router";
export default function ProfileLayout() { export default function ProfileLayout() {
return ( return (
<> <>
<Stack <Stack>
screenOptions={{
headerStyle: GStyles.headerStyle,
headerTitleStyle: GStyles.headerTitleStyle,
headerTitleAlign: "center",
headerBackButtonDisplayMode: "minimal",
}}
>
{/* <Stack.Screen name="[id]/index" options={{ headerShown: false }} /> */} {/* <Stack.Screen name="[id]/index" options={{ headerShown: false }} /> */}
<Stack.Screen <Stack.Screen
name="[id]/edit" name="[id]/edit"
options={{ title: "Edit Profile", headerLeft: () => <BackButton /> }} options={{ header: () => <AppHeader title="Edit Profile" /> }}
/> />
<Stack.Screen <Stack.Screen
name="[id]/update-photo" name="[id]/update-photo"
options={{ title: "Update Foto", headerLeft: () => <BackButton /> }} options={{ header: () => <AppHeader title="Update Foto" /> }}
/> />
<Stack.Screen <Stack.Screen
name="[id]/update-background" name="[id]/update-background"
options={{ options={{
title: "Update Latar Belakang", header: () => <AppHeader title="Update Latar Belakang" />,
headerLeft: () => <BackButton />,
}} }}
/> />
<Stack.Screen <Stack.Screen
name="create" name="create"
options={{ title: "Buat Profile", headerBackVisible: false }} options={{ headerBackVisible: false }}
/> />
<Stack.Screen <Stack.Screen
name="[id]/blocked-list" name="[id]/blocked-list"
options={{ title: "Daftar Blokir", headerLeft: () => <BackButton /> }} options={{ header: () => <AppHeader title="Daftar Blokir" /> }}
/> />
<Stack.Screen <Stack.Screen
name="[id]/detail-blocked" name="[id]/detail-blocked"
options={{ title: "Detail Blokir", headerLeft: () => <BackButton /> }} options={{ header: () => <AppHeader title="Detail Blokir" /> }}
/> />
</Stack> </Stack>
</> </>

View File

@@ -4,36 +4,34 @@ import {
IconHome, IconHome,
IconStatus, IconStatus,
} from "@/components/_Icon"; } from "@/components/_Icon";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import BackButtonFromNotification from "@/components/Button/BackButtonFromNotification"; import BackButtonFromNotification from "@/components/Button/BackButtonFromNotification";
import { TabsStyles } from "@/styles/tabs-styles"; import { TabsStyles } from "@/styles/tabs-styles";
import { Tabs, useLocalSearchParams, useNavigation, router } from "expo-router"; import { router, Tabs, useLocalSearchParams } from "expo-router";
import { useLayoutEffect } from "react";
export default function VotingTabsLayout() { export default function VotingTabsLayout() {
const navigation = useNavigation();
const { from, category } = useLocalSearchParams<{ const { from, category } = useLocalSearchParams<{
from?: string; from?: string;
category?: string; category?: string;
}>(); }>();
console.log("from", from);
console.log("category", category);
// Atur header secara dinamis
useLayoutEffect(() => {
navigation.setOptions({
headerLeft: () => (
<BackButtonFromNotification
from={from as string}
category={category as string}
/>
),
});
}, [from, router, navigation]);
return ( return (
<Tabs screenOptions={TabsStyles}> <Tabs
screenOptions={{
...TabsStyles,
header: () => (
<AppHeader
title="Voting"
left={
<BackButtonFromNotification
from={from as string}
category={category as string}
/>
}
/>
),
}}
>
<Tabs.Screen <Tabs.Screen
name="index" name="index"
options={{ options={{

View File

@@ -12,6 +12,7 @@ import {
TextCustom, TextCustom,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconArchive, IconContribution, IconEdit } from "@/components/_Icon"; import { IconArchive, IconContribution, IconEdit } from "@/components/_Icon";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import ReportBox from "@/components/Box/ReportBox"; import ReportBox from "@/components/Box/ReportBox";
@@ -103,14 +104,19 @@ export default function VotingDetailStatus() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Detail`, header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => title="Detail"
status === "draft" ? ( left={<BackButton />}
<DotButton onPress={() => setOpenDrawerDraft(true)} /> right={
) : status === "publish" ? ( status === "draft" ? (
<DotButton onPress={() => setOpenDrawerPublish(true)} /> <DotButton onPress={() => setOpenDrawerDraft(true)} />
) : null, ) : status === "publish" ? (
<DotButton onPress={() => setOpenDrawerPublish(true)} />
) : null
}
/>
),
}} }}
/> />
<ViewWrapper> <ViewWrapper>

View File

@@ -9,6 +9,7 @@ import {
Spacing, Spacing,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconContribution } from "@/components/_Icon"; import { IconContribution } from "@/components/_Icon";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import { useAuth } from "@/hooks/use-auth"; import { useAuth } from "@/hooks/use-auth";
@@ -81,10 +82,14 @@ export default function VotingDetailContribution() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Detail Kontribusi", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Detail Kontribusi"
<DotButton onPress={() => setOpenDrawerPublish(true)} /> left={<BackButton />}
right={
<DotButton onPress={() => setOpenDrawerPublish(true)} />
}
/>
), ),
}} }}
/> />

View File

@@ -9,6 +9,7 @@ import {
Spacing, Spacing,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconContribution } from "@/components/_Icon"; import { IconContribution } from "@/components/_Icon";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import { useAuth } from "@/hooks/use-auth"; import { useAuth } from "@/hooks/use-auth";
@@ -82,10 +83,14 @@ export default function VotingDetailHistory() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Riwayat Voting", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Riwayat Voting"
<DotButton onPress={() => setOpenDrawerPublish(true)} /> left={<BackButton />}
right={
<DotButton onPress={() => setOpenDrawerPublish(true)} />
}
/>
), ),
}} }}
/> />

View File

@@ -11,6 +11,7 @@ import {
StackCustom, StackCustom,
ViewWrapper, ViewWrapper,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconArchive, IconContribution } from "@/components/_Icon"; import { IconArchive, IconContribution } from "@/components/_Icon";
import { IMenuDrawerItem } from "@/components/_Interface/types"; import { IMenuDrawerItem } from "@/components/_Interface/types";
import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom"; import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom";
@@ -142,10 +143,14 @@ export default function VotingDetail() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: `Detail Voting`, header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Detail Voting"
<DotButton onPress={() => setOpenDrawerPublish(true)} /> left={<BackButton />}
right={
<DotButton onPress={() => setOpenDrawerPublish(true)} />
}
/>
), ),
}} }}
/> />

View File

@@ -1,8 +1,8 @@
import { BackButton } from "@/components"; import { BackButton } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import BackgroundNotificationHandler from "@/components/Notification/BackgroundNotificationHandler"; import BackgroundNotificationHandler from "@/components/Notification/BackgroundNotificationHandler";
import NotificationInitializer from "@/components/Notification/NotificationInitializer"; import NotificationInitializer from "@/components/Notification/NotificationInitializer";
import { NotificationProvider } from "@/hooks/use-notification-store"; import { NotificationProvider } from "@/hooks/use-notification-store";
import { HeaderStyles } from "@/styles/header-styles";
import { Stack } from "expo-router"; import { Stack } from "expo-router";
export default function ApplicationLayout() { export default function ApplicationLayout() {
@@ -20,7 +20,7 @@ export default function ApplicationLayout() {
function ApplicationStack() { function ApplicationStack() {
return ( return (
<> <>
<Stack screenOptions={HeaderStyles}> <Stack>
<Stack.Screen name="(user)" options={{ headerShown: false }} /> <Stack.Screen name="(user)" options={{ headerShown: false }} />
<Stack.Screen name="admin" options={{ headerShown: false }} /> <Stack.Screen name="admin" options={{ headerShown: false }} />
@@ -28,8 +28,7 @@ function ApplicationStack() {
<Stack.Screen <Stack.Screen
name="(image)/take-picture/[id]/index" name="(image)/take-picture/[id]/index"
options={{ options={{
title: "Ambil Gambar", header: () => <AppHeader title="Ambil Gambar" />,
headerLeft: () => <BackButton />,
}} }}
/> />
@@ -37,8 +36,7 @@ function ApplicationStack() {
<Stack.Screen <Stack.Screen
name="(image)/preview-image/[id]/index" name="(image)/preview-image/[id]/index"
options={{ options={{
title: "Preview Gambar", header: () => <AppHeader title="Preview Gambar" />,
headerLeft: () => <BackButton />,
}} }}
/> />
</Stack> </Stack>

View File

@@ -6,6 +6,7 @@ import {
StackCustom, StackCustom,
TextCustom, TextCustom,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import DrawerAdmin from "@/components/Drawer/DrawerAdmin"; import DrawerAdmin from "@/components/Drawer/DrawerAdmin";
import NavbarMenu from "@/components/Drawer/NavbarMenu"; import NavbarMenu from "@/components/Drawer/NavbarMenu";
import NavbarMenu_V2 from "@/components/Drawer/NavbarMenu_V2"; import NavbarMenu_V2 from "@/components/Drawer/NavbarMenu_V2";
@@ -35,12 +36,28 @@ import { useState } from "react";
export default function AdminLayout() { export default function AdminLayout() {
const [openDrawerNavbar, setOpenDrawerNavbar] = useState(false); const [openDrawerNavbar, setOpenDrawerNavbar] = useState(false);
const [openDrawerUser, setOpenDrawerUser] = useState(false); const [openDrawerUser, setOpenDrawerUser] = useState(false);
// const [user, setUser] = useState(null);
const { logout, user } = useAuth(); const { logout, user } = useAuth();
console.log("[USER LAYOUT]", JSON.stringify(user, null, 2)); console.log("[USER LAYOUT]", JSON.stringify(user, null, 2));
const headerLeft = () => (
<Ionicons
name="menu"
size={ICON_SIZE_XLARGE}
color={MainColor.white}
onPress={() => setOpenDrawerNavbar(true)}
/>
);
const headerRight = () => (
<FontAwesome6
name="circle-user"
size={ICON_SIZE_MEDIUM}
color={MainColor.white}
onPress={() => setOpenDrawerUser(true)}
/>
);
return ( return (
<> <>
<Stack <Stack
@@ -52,20 +69,33 @@ export default function AdminLayout() {
contentStyle: { contentStyle: {
borderBottomColor: AccentColor.blue, borderBottomColor: AccentColor.blue,
}, },
headerLeft: () => (
<Ionicons // headerLeft: () => (
name="menu" // <Ionicons
size={ICON_SIZE_XLARGE} // name="menu"
color={MainColor.white} // size={ICON_SIZE_XLARGE}
onPress={() => setOpenDrawerNavbar(true)} // color={MainColor.white}
/> // onPress={() => setOpenDrawerNavbar(true)}
), // />
headerRight: () => ( // ),
<FontAwesome6 // headerRight: () => (
name="circle-user" // <FontAwesome6
size={ICON_SIZE_MEDIUM} // name="circle-user"
color={MainColor.white} // size={ICON_SIZE_MEDIUM}
onPress={() => setOpenDrawerUser(true)} // color={MainColor.white}
// onPress={() => setOpenDrawerUser(true)}
// />
// ),
header: () => (
<AppHeader
title="HIPMI DASHBOARD"
showBack={false}
left={headerLeft()}
right={headerRight()}
/> />
), ),
}} }}

View File

@@ -1,4 +1,5 @@
import { BackButton, StackCustom, TextCustom, ViewWrapper } from "@/components"; import { BackButton, StackCustom, TextCustom, ViewWrapper } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { router, Stack } from "expo-router"; import { router, Stack } from "expo-router";
export default function NotFoundScreen() { export default function NotFoundScreen() {
@@ -15,7 +16,7 @@ export default function NotFoundScreen() {
return ( return (
<> <>
<Stack.Screen <Stack.Screen
options={{ headerShown: true, title: "", headerLeft: () => <BackButton onPress={() => handleBack()} /> }} options={{ header: () => <AppHeader title="" left={<BackButton onPress={() => handleBack()} />} /> }}
/> />
<ViewWrapper> <ViewWrapper>
<StackCustom <StackCustom

View File

@@ -12,14 +12,15 @@ export default function BackButtonFromNotification({
return ( return (
<> <>
<BackButton <BackButton
onPress={() => { onPress={() => {
if (from === "notifications") { if (from === "notifications") {
router.replace(`/notifications?category=${category}`); router.push(`/notifications?category=${category}`);
} else { } else {
if (from) { if (from) {
router.replace(`/${from}` as any); router.back();
} else { } else {
router.navigate("/home"); router.back();
} }
} }
}} }}

View File

@@ -43,9 +43,10 @@ export default function AppHeader({
paddingBottom, paddingBottom,
}, },
]} ]}
pointerEvents="box-none"
> >
{/* Header Container dengan absolute positioning untuk title center */} {/* Header Container dengan absolute positioning untuk title center */}
<View style={styles.headerApp}> <View style={styles.headerApp} pointerEvents="box-none">
{/* Left Section - Absolute Left */} {/* Left Section - Absolute Left */}
<View style={styles.headerLeft}> <View style={styles.headerLeft}>
{showBack ? ( {showBack ? (

View File

@@ -195,6 +195,8 @@
6ECA5F81B0BC4C70A91BE265 /* Remove signature files (Xcode workaround) */, 6ECA5F81B0BC4C70A91BE265 /* Remove signature files (Xcode workaround) */,
44265583B67C48F2A24BA93E /* Remove signature files (Xcode workaround) */, 44265583B67C48F2A24BA93E /* Remove signature files (Xcode workaround) */,
D5CA1D54CFF74AB4B8B5B583 /* Remove signature files (Xcode workaround) */, D5CA1D54CFF74AB4B8B5B583 /* Remove signature files (Xcode workaround) */,
97C01196E2194AF5A13C7773 /* Remove signature files (Xcode workaround) */,
EB19F4C53C8B434CBAD50897 /* Remove signature files (Xcode workaround) */,
); );
buildRules = ( buildRules = (
); );
@@ -1211,6 +1213,40 @@
rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\"; rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\";
"; ";
}; };
97C01196E2194AF5A13C7773 /* Remove signature files (Xcode workaround) */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
name = "Remove signature files (Xcode workaround)";
inputPaths = (
);
outputPaths = (
);
shellPath = /bin/sh;
shellScript = "
echo \"Remove signature files (Xcode workaround)\";
rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\";
";
};
EB19F4C53C8B434CBAD50897 /* Remove signature files (Xcode workaround) */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
name = "Remove signature files (Xcode workaround)";
inputPaths = (
);
outputPaths = (
);
shellPath = /bin/sh;
shellScript = "
echo \"Remove signature files (Xcode workaround)\";
rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\";
";
};
/* End PBXShellScriptBuildPhase section */ /* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */

View File

@@ -9,6 +9,7 @@ import {
StackCustom, StackCustom,
TextCustom, TextCustom,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconPlus } from "@/components/_Icon"; import { IconPlus } from "@/components/_Icon";
import { IconDot } from "@/components/_Icon/IconComponent"; import { IconDot } from "@/components/_Icon/IconComponent";
import ListSkeletonComponent from "@/components/_ShareComponent/ListSkeletonComponent"; import ListSkeletonComponent from "@/components/_ShareComponent/ListSkeletonComponent";
@@ -121,12 +122,16 @@ export default function Admin_ScreenNotification() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Admin Notifikasi", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Admin Notifikasi"
<IconDot left={<BackButton />}
color={MainColor.yellow} right={
onPress={() => setOpenDrawer(true)} <IconDot
color={MainColor.yellow}
onPress={() => setOpenDrawer(true)}
/>
}
/> />
), ),
}} }}

View File

@@ -11,6 +11,7 @@ import {
} from "@/components"; } from "@/components";
import { IconPlus } from "@/components/_Icon"; import { IconPlus } from "@/components/_Icon";
import { IconDot } from "@/components/_Icon/IconComponent"; import { IconDot } from "@/components/_Icon/IconComponent";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { AccentColor, MainColor } from "@/constants/color-palet"; import { AccentColor, MainColor } from "@/constants/color-palet";
import { ICON_SIZE_SMALL, PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; import { ICON_SIZE_SMALL, PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers"; import { createPaginationComponents } from "@/helpers/paginationHelpers";
@@ -169,12 +170,16 @@ export default function Admin_ScreenNotification2() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Admin Notifikasi", // title: "Admin Notifikasi",
headerLeft: () => <BackButton />, header: () => (
headerRight: () => ( <AppHeader
<IconDot title="Admin Notifikasi"
color={MainColor.yellow} right={
onPress={() => setOpenDrawer(true)} <IconDot
color={MainColor.yellow}
onPress={() => setOpenDrawer(true)}
/>
}
/> />
), ),
}} }}

View File

@@ -1,5 +1,6 @@
/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable react-hooks/exhaustive-deps */
import { BackButton, DrawerCustom, MenuDrawerDynamicGrid } from "@/components"; import { BackButton, DrawerCustom, MenuDrawerDynamicGrid } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconPlus } from "@/components/_Icon"; import { IconPlus } from "@/components/_Icon";
import NewWrapper from "@/components/_ShareComponent/NewWrapper"; import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { MainColor } from "@/constants/color-palet"; import { MainColor } from "@/constants/color-palet";
@@ -52,8 +53,12 @@ export default function Donation_ScreenListOfNews({
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Daftar Kabar", header: () => (
headerLeft: () => <BackButton />, <AppHeader
title="Daftar Kabar"
left={<BackButton />}
/>
),
}} }}
/> />
<NewWrapper <NewWrapper

View File

@@ -5,6 +5,7 @@ import {
DrawerCustom, DrawerCustom,
MenuDrawerDynamicGrid, MenuDrawerDynamicGrid,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconPlus } from "@/components/_Icon"; import { IconPlus } from "@/components/_Icon";
import NewWrapper from "@/components/_ShareComponent/NewWrapper"; import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
@@ -61,9 +62,13 @@ export default function Donation_ScreenRecapOfNews({
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Rekap Kabar", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => <DotButton onPress={() => setOpenDrawer(true)} />, title="Rekap Kabar"
left={<BackButton />}
right={<DotButton onPress={() => setOpenDrawer(true)} />}
/>
),
}} }}
/> />
<NewWrapper <NewWrapper

View File

@@ -7,6 +7,7 @@ import {
LoaderCustom, LoaderCustom,
TextCustom, TextCustom,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { useAuth } from "@/hooks/use-auth"; import { useAuth } from "@/hooks/use-auth";
import { apiForumGetAll } from "@/service/api-client/api-forum"; import { apiForumGetAll } from "@/service/api-client/api-forum";
import { apiUser } from "@/service/api-client/api-user"; import { apiUser } from "@/service/api-client/api-user";
@@ -54,13 +55,17 @@ export default function Forum_ViewBeranda() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Forum", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Forum"
<AvatarComp left={<BackButton />}
fileId={dataUser?.Profile?.imageId} right={
size="base" <AvatarComp
href={`/forum/${user?.id}/forumku`} fileId={dataUser?.Profile?.imageId}
size="base"
href={`/forum/${user?.id}/forumku`}
/>
}
/> />
), ),
}} }}

View File

@@ -8,6 +8,7 @@ import {
StackCustom, StackCustom,
TextCustom, // ← gunakan NewWrapper yang sudah diperbaiki TextCustom, // ← gunakan NewWrapper yang sudah diperbaiki
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import SkeletonCustom from "@/components/_ShareComponent/SkeletonCustom"; import SkeletonCustom from "@/components/_ShareComponent/SkeletonCustom";
import NewWrapper from "@/components/_ShareComponent/NewWrapper"; import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { useAuth } from "@/hooks/use-auth"; import { useAuth } from "@/hooks/use-auth";
@@ -155,13 +156,17 @@ export default function Forum_ViewBeranda2() {
{/* 🔹 Header Navigation */} {/* 🔹 Header Navigation */}
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Forum", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Forum"
<AvatarComp left={<BackButton />}
fileId={dataUser?.Profile?.imageId} right={
size="base" <AvatarComp
href={`/forum/${user?.id}/forumku`} fileId={dataUser?.Profile?.imageId}
size="base"
href={`/forum/${user?.id}/forumku`}
/>
}
/> />
), ),
}} }}

View File

@@ -4,6 +4,7 @@ import {
FloatingButton, FloatingButton,
SearchInput, SearchInput,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import NewWrapper from "@/components/_ShareComponent/NewWrapper"; import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { MainColor } from "@/constants/color-palet"; import { MainColor } from "@/constants/color-palet";
import { createPaginationComponents } from "@/helpers/paginationHelpers"; import { createPaginationComponents } from "@/helpers/paginationHelpers";
@@ -84,18 +85,22 @@ export default function Forum_ViewBeranda3() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Forum", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Forum"
<TouchableOpacity left={<BackButton />}
onPress={() => router.navigate(`/forum/${user?.id}/forumku`)} right={
> <TouchableOpacity
<AvatarComp onPress={() => router.navigate(`/forum/${user?.id}/forumku`)}
fileId={dataUser?.Profile?.imageId} >
size="base" <AvatarComp
href={`/forum/${user?.id}/forumku`} fileId={dataUser?.Profile?.imageId}
/> size="base"
</TouchableOpacity> href={`/forum/${user?.id}/forumku`}
/>
</TouchableOpacity>
}
/>
), ),
}} }}
/> />

View File

@@ -6,6 +6,7 @@ import {
DrawerCustom, DrawerCustom,
MenuDrawerDynamicGrid MenuDrawerDynamicGrid
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconEdit } from "@/components/_Icon"; import { IconEdit } from "@/components/_Icon";
import NewWrapper from "@/components/_ShareComponent/NewWrapper"; import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { MainColor } from "@/constants/color-palet"; import { MainColor } from "@/constants/color-palet";
@@ -125,14 +126,18 @@ export default function Investment_ScreenRecapOfDocument() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Rekap Dokumen", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Rekap Dokumen"
<DotButton left={<BackButton />}
onPress={() => { right={
setOpenDrawer(true); <DotButton
setOpenDrawerBox(false); onPress={() => {
}} setOpenDrawer(true);
setOpenDrawerBox(false);
}}
/>
}
/> />
), ),
}} }}

View File

@@ -7,6 +7,7 @@ import {
MenuDrawerDynamicGrid, MenuDrawerDynamicGrid,
TextCustom, TextCustom,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconPlus } from "@/components/_Icon"; import { IconPlus } from "@/components/_Icon";
import NewWrapper from "@/components/_ShareComponent/NewWrapper"; import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { usePagination } from "@/hooks/use-pagination"; import { usePagination } from "@/hooks/use-pagination";
@@ -64,9 +65,13 @@ export default function Investment_ScreenListOfNews({
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Daftar Berita", header: () => (
headerLeft: () => <BackButton />, <AppHeader
// headerRight: () => <DotButton onPress={() => setOpenDrawer(true)} />, title="Daftar Berita"
left={<BackButton />}
// headerRight: () => <DotButton onPress={() => setOpenDrawer(true)} />,
/>
),
}} }}
/> />

View File

@@ -9,6 +9,7 @@ import {
Spacing, Spacing,
TextCustom, TextCustom,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconPlus } from "@/components/_Icon"; import { IconPlus } from "@/components/_Icon";
import NewWrapper from "@/components/_ShareComponent/NewWrapper"; import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { usePagination } from "@/hooks/use-pagination"; import { usePagination } from "@/hooks/use-pagination";
@@ -66,9 +67,13 @@ export default function Investment_ScreenRecapOfNews({
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Rekap Berita", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => <DotButton onPress={() => setOpenDrawer(true)} />, title="Rekap Berita"
left={<BackButton />}
right={<DotButton onPress={() => setOpenDrawer(true)} />}
/>
),
}} }}
/> />
<NewWrapper <NewWrapper

View File

@@ -11,6 +11,7 @@ import {
StackCustom, StackCustom,
TextCustom, TextCustom,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconDot } from "@/components/_Icon/IconComponent"; import { IconDot } from "@/components/_Icon/IconComponent";
import ListSkeletonComponent from "@/components/_ShareComponent/ListSkeletonComponent"; import ListSkeletonComponent from "@/components/_ShareComponent/ListSkeletonComponent";
import NoDataText from "@/components/_ShareComponent/NoDataText"; import NoDataText from "@/components/_ShareComponent/NoDataText";
@@ -217,12 +218,16 @@ export default function ScreenNotification_V1() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Notifikasi", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Notifikasi"
<IconDot left={<BackButton />}
color={MainColor.yellow} right={
onPress={() => setOpenDrawer(true)} <IconDot
color={MainColor.yellow}
onPress={() => setOpenDrawer(true)}
/>
}
/> />
), ),
}} }}

View File

@@ -10,6 +10,7 @@ import {
StackCustom, StackCustom,
TextCustom, TextCustom,
} from "@/components"; } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconDot } from "@/components/_Icon/IconComponent"; import { IconDot } from "@/components/_Icon/IconComponent";
import { AccentColor, MainColor } from "@/constants/color-palet"; import { AccentColor, MainColor } from "@/constants/color-palet";
import { import {
@@ -182,12 +183,16 @@ export default function ScreenNotification_V2() {
<> <>
<Stack.Screen <Stack.Screen
options={{ options={{
title: "Notifikasi", header: () => (
headerLeft: () => <BackButton />, <AppHeader
headerRight: () => ( title="Notifikasi"
<IconDot left={<BackButton />}
color={MainColor.yellow} right={
onPress={() => setOpenDrawer(true)} <IconDot
color={MainColor.yellow}
onPress={() => setOpenDrawer(true)}
/>
}
/> />
), ),
}} }}