From eb64c30d49dd4dc05c0ff7eace6e81006aa3097d Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Mon, 13 Apr 2026 17:56:49 +0800 Subject: [PATCH] feat: Complete User Phase 9 Investment screens migration + note known upload issue - Migrate 24 investment screens to OS_Wrapper (tabs, list, detail, forms, transaction flow) - Add contentPadding={PADDING_INLINE} to 9 list/tabs screens for consistent spacing - Add enableKeyboardHandling to 6 form screens - Fix investment tabs layout height to use OS_IOS_HEIGHT/OS_ANDROID_HEIGHT constants - Update TASK-005 with known issue: upload image returns 500 error in dev env - Note: Investment feature not fully complete - upload issue needs investigation tomorrow Co-authored-by: Qwen-Coder --- .../(user)/investment/(tabs)/_layout.tsx | 6 +- .../[id]/(document)/add-document.tsx | 14 ++-- .../[id]/(document)/edit-document.tsx | 14 ++-- .../investment/[id]/(my-holding)/[id].tsx | 6 +- .../investment/[id]/(news)/[news]/index.tsx | 6 +- .../investment/[id]/(news)/add-news.tsx | 10 ++- .../[id]/(transaction-flow)/failed.tsx | 6 +- .../[id]/(transaction-flow)/index.tsx | 14 ++-- .../[id]/(transaction-flow)/process.tsx | 6 +- .../[id]/(transaction-flow)/select-bank.tsx | 6 +- .../[id]/(transaction-flow)/success.tsx | 6 +- .../investment/[id]/[status]/detail.tsx | 6 +- .../investment/[id]/edit-prospectus.tsx | 6 +- .../(user)/investment/[id]/edit.tsx | 8 +- .../(user)/investment/[id]/index.tsx | 6 +- .../(user)/investment/create.tsx | 9 ++- .../Invesment/Document/ScreenListDocument.tsx | 8 +- .../Document/ScreenRecapOfDocument.tsx | 9 ++- screens/Invesment/News/ScreenListOfNews.tsx | 6 +- screens/Invesment/News/ScreenRecapOfNews.tsx | 9 ++- screens/Invesment/ScreenBursa.tsx | 6 +- screens/Invesment/ScreenInvestor.tsx | 7 +- screens/Invesment/ScreenInvoice.tsx | 6 +- screens/Invesment/ScreenMyHolding.tsx | 6 +- screens/Invesment/ScreenPortofolio.tsx | 7 +- screens/Invesment/ScreenTransaction.tsx | 6 +- tasks/TASK-005-OS-Wrapper-Implementation.md | 77 ++++++++++--------- 27 files changed, 153 insertions(+), 123 deletions(-) diff --git a/app/(application)/(user)/investment/(tabs)/_layout.tsx b/app/(application)/(user)/investment/(tabs)/_layout.tsx index eb0f9ed..21cbf3f 100644 --- a/app/(application)/(user)/investment/(tabs)/_layout.tsx +++ b/app/(application)/(user)/investment/(tabs)/_layout.tsx @@ -1,5 +1,5 @@ import BackButtonFromNotification from "@/components/Button/BackButtonFromNotification"; -import { ICON_SIZE_SMALL } from "@/constants/constans-value"; +import { ICON_SIZE_SMALL, OS_ANDROID_HEIGHT, OS_IOS_HEIGHT } from "@/constants/constans-value"; import { TabsStyles } from "@/styles/tabs-styles"; import { Feather, FontAwesome6, Ionicons } from "@expo/vector-icons"; import { router, Tabs, useLocalSearchParams, useNavigation } from "expo-router"; @@ -40,12 +40,12 @@ function InvestmentTabsWrapper() { ios: { borderTopWidth: 0, paddingTop: 12, - height: 80, + height: OS_IOS_HEIGHT, }, android: { borderTopWidth: 0, paddingTop: 5, - height: 70 + paddingBottom, + height: OS_ANDROID_HEIGHT + paddingBottom, }, }), }} diff --git a/app/(application)/(user)/investment/[id]/(document)/add-document.tsx b/app/(application)/(user)/investment/[id]/(document)/add-document.tsx index e5ae294..38ae316 100644 --- a/app/(application)/(user)/investment/[id]/(document)/add-document.tsx +++ b/app/(application)/(user)/investment/[id]/(document)/add-document.tsx @@ -5,11 +5,11 @@ import { ButtonCustom, CenterCustom, InformationBox, + OS_Wrapper, Spacing, StackCustom, TextCustom, TextInputCustom, - ViewWrapper, } from "@/components"; import { MainColor } from "@/constants/color-palet"; import DIRECTORY_ID from "@/constants/directory-id"; @@ -83,9 +83,12 @@ export default function InvestmentAddDocument() { ); return ( - <> - - + + - - + ); } diff --git a/app/(application)/(user)/investment/[id]/(document)/edit-document.tsx b/app/(application)/(user)/investment/[id]/(document)/edit-document.tsx index 42ee78e..d271217 100644 --- a/app/(application)/(user)/investment/[id]/(document)/edit-document.tsx +++ b/app/(application)/(user)/investment/[id]/(document)/edit-document.tsx @@ -6,11 +6,11 @@ import { ButtonCustom, CenterCustom, InformationBox, + OS_Wrapper, Spacing, StackCustom, TextCustom, TextInputCustom, - ViewWrapper, } from "@/components"; import DIRECTORY_ID from "@/constants/directory-id"; import { @@ -105,9 +105,12 @@ export default function InvestmentEditDocument() { ); return ( - <> - - + + - - + ); } diff --git a/app/(application)/(user)/investment/[id]/(my-holding)/[id].tsx b/app/(application)/(user)/investment/[id]/(my-holding)/[id].tsx index 37b14b3..1085527 100644 --- a/app/(application)/(user)/investment/[id]/(my-holding)/[id].tsx +++ b/app/(application)/(user)/investment/[id]/(my-holding)/[id].tsx @@ -6,9 +6,9 @@ import { DrawerCustom, Grid, MenuDrawerDynamicGrid, + OS_Wrapper, StackCustom, TextCustom, - ViewWrapper, } from "@/components"; import AppHeader from "@/components/_ShareComponent/AppHeader"; import { IconDocument, IconEdit, IconNews } from "@/components/_Icon"; @@ -93,7 +93,7 @@ export default function InvestmentDetailHolding() { }} /> - + @@ -124,7 +124,7 @@ export default function InvestmentDetailHolding() { status={"publish"} bottomSection={bottomSection} /> - + {/* ========= Draft Drawer ========= */} - + {data && data?.imageId && ( @@ -82,7 +82,7 @@ export default function InvestmentNews() { {(data && data?.deskripsi) || "-"} - + + @@ -123,7 +126,6 @@ export default function InvestmentAddNews() { Simpan - - + ); } diff --git a/app/(application)/(user)/investment/[id]/(transaction-flow)/failed.tsx b/app/(application)/(user)/investment/[id]/(transaction-flow)/failed.tsx index b1e1d29..99b7d65 100644 --- a/app/(application)/(user)/investment/[id]/(transaction-flow)/failed.tsx +++ b/app/(application)/(user)/investment/[id]/(transaction-flow)/failed.tsx @@ -2,10 +2,10 @@ import { BaseBox, Grid, + OS_Wrapper, Spacing, StackCustom, TextCustom, - ViewWrapper, } from "@/components"; import { MainColor } from "@/constants/color-palet"; import { apiInvestmentGetInvoice } from "@/service/api-client/api-investment"; @@ -69,7 +69,7 @@ export default function InvestmentFailed() { ]; return ( - + @@ -110,6 +110,6 @@ export default function InvestmentFailed() { - + ); } diff --git a/app/(application)/(user)/investment/[id]/(transaction-flow)/index.tsx b/app/(application)/(user)/investment/[id]/(transaction-flow)/index.tsx index ca205b0..43fbb8e 100644 --- a/app/(application)/(user)/investment/[id]/(transaction-flow)/index.tsx +++ b/app/(application)/(user)/investment/[id]/(transaction-flow)/index.tsx @@ -5,10 +5,10 @@ import { ButtonCustom, Divider, Grid, + OS_Wrapper, StackCustom, TextCustom, TextInputCustom, - ViewWrapper, } from "@/components"; import { LOCAL_STORAGE_KEY } from "@/constants/local-storage-key"; import { apiInvestmentGetOne } from "@/service/api-client/api-investment"; @@ -99,9 +99,12 @@ export default function InvestmentInvest() { }; return ( - <> - - + + @@ -165,7 +168,6 @@ export default function InvestmentInvest() { - - + ); } diff --git a/app/(application)/(user)/investment/[id]/(transaction-flow)/process.tsx b/app/(application)/(user)/investment/[id]/(transaction-flow)/process.tsx index 8ebdd23..d389f1c 100644 --- a/app/(application)/(user)/investment/[id]/(transaction-flow)/process.tsx +++ b/app/(application)/(user)/investment/[id]/(transaction-flow)/process.tsx @@ -1,11 +1,11 @@ -import { BaseBox, StackCustom, TextCustom, ViewWrapper } from "@/components"; +import { BaseBox, OS_Wrapper, StackCustom, TextCustom } from "@/components"; import MoneyTransferAnimation from "@/components/_ShareComponent/MoneyTransferAnimation"; import { View } from "react-native"; export default function InvestmentProcess() { return ( <> - + @@ -35,7 +35,7 @@ export default function InvestmentProcess() { */} - + ); } diff --git a/app/(application)/(user)/investment/[id]/(transaction-flow)/select-bank.tsx b/app/(application)/(user)/investment/[id]/(transaction-flow)/select-bank.tsx index 311385f..e480f58 100644 --- a/app/(application)/(user)/investment/[id]/(transaction-flow)/select-bank.tsx +++ b/app/(application)/(user)/investment/[id]/(transaction-flow)/select-bank.tsx @@ -2,7 +2,7 @@ import { BaseBox, BoxButtonOnFooter, ButtonCustom, - ViewWrapper, + OS_Wrapper, } from "@/components"; import { RadioCustom, RadioGroup } from "@/components/Radio/RadioCustom"; import { LOCAL_STORAGE_KEY } from "@/constants/local-storage-key"; @@ -86,7 +86,7 @@ export default function InvestmentSelectBank() { }; return ( - + {_.isEmpty(listBank) ? [] @@ -96,6 +96,6 @@ export default function InvestmentSelectBank() { ))} - + ); } diff --git a/app/(application)/(user)/investment/[id]/(transaction-flow)/success.tsx b/app/(application)/(user)/investment/[id]/(transaction-flow)/success.tsx index d8778c7..e0c5913 100644 --- a/app/(application)/(user)/investment/[id]/(transaction-flow)/success.tsx +++ b/app/(application)/(user)/investment/[id]/(transaction-flow)/success.tsx @@ -2,10 +2,10 @@ import { BaseBox, Grid, + OS_Wrapper, Spacing, StackCustom, TextCustom, - ViewWrapper, } from "@/components"; import { MainColor } from "@/constants/color-palet"; import { apiInvestmentGetInvoice } from "@/service/api-client/api-investment"; @@ -69,7 +69,7 @@ export default function InvestmentSuccess() { ]; return ( - + @@ -110,6 +110,6 @@ export default function InvestmentSuccess() { - + ); } diff --git a/app/(application)/(user)/investment/[id]/[status]/detail.tsx b/app/(application)/(user)/investment/[id]/[status]/detail.tsx index 6fe973c..78727cc 100644 --- a/app/(application)/(user)/investment/[id]/[status]/detail.tsx +++ b/app/(application)/(user)/investment/[id]/[status]/detail.tsx @@ -4,7 +4,7 @@ import { DotButton, DrawerCustom, MenuDrawerDynamicGrid, - ViewWrapper, + OS_Wrapper, } from "@/components"; import AppHeader from "@/components/_ShareComponent/AppHeader"; import { IconDocument, IconEdit, IconNews } from "@/components/_Icon"; @@ -123,14 +123,14 @@ export default function InvestmentDetailStatus() { }} /> - + - + {/* ========= Draft Drawer ========= */} ); return ( - + @@ -153,6 +153,6 @@ export default function InvestmentEditProspectus() { Upload - + ); } diff --git a/app/(application)/(user)/investment/[id]/edit.tsx b/app/(application)/(user)/investment/[id]/edit.tsx index af3b344..5c91391 100644 --- a/app/(application)/(user)/investment/[id]/edit.tsx +++ b/app/(application)/(user)/investment/[id]/edit.tsx @@ -6,7 +6,7 @@ import { InformationBox, LandscapeFrameUploaded, LoaderCustom, - NewWrapper, + OS_Wrapper, SelectCustom, Spacing, StackCustom, @@ -199,7 +199,9 @@ export default function InvestmentEdit() { }; return ( - @@ -350,6 +352,6 @@ export default function InvestmentEdit() { - + ); } diff --git a/app/(application)/(user)/investment/[id]/index.tsx b/app/(application)/(user)/investment/[id]/index.tsx index 8c98aa5..625c876 100644 --- a/app/(application)/(user)/investment/[id]/index.tsx +++ b/app/(application)/(user)/investment/[id]/index.tsx @@ -4,7 +4,7 @@ import { DotButton, DrawerCustom, MenuDrawerDynamicGrid, - ViewWrapper, + OS_Wrapper, } from "@/components"; import AppHeader from "@/components/_ShareComponent/AppHeader"; import { IconDocument, IconEdit, IconNews } from "@/components/_Icon"; @@ -122,14 +122,14 @@ export default function InvestmentDetail() { }} /> - + - + {/* ========= Draft Drawer ========= */} - {/* */} - + ); } diff --git a/screens/Invesment/Document/ScreenListDocument.tsx b/screens/Invesment/Document/ScreenListDocument.tsx index c65f261..90de55e 100644 --- a/screens/Invesment/Document/ScreenListDocument.tsx +++ b/screens/Invesment/Document/ScreenListDocument.tsx @@ -1,7 +1,6 @@ /* eslint-disable react-hooks/exhaustive-deps */ -import { TextCustom } from "@/components"; -import NewWrapper from "@/components/_ShareComponent/NewWrapper"; -import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; +import { TextCustom, OS_Wrapper } from "@/components"; +import { PAGINATION_DEFAULT_TAKE, PADDING_INLINE } from "@/constants/constans-value"; import { createPaginationComponents } from "@/helpers/paginationHelpers"; import { usePagination } from "@/hooks/use-pagination"; import Investment_BoxDetailDocument from "@/screens/Invesment/Document/RecapBoxDetail"; @@ -58,8 +57,9 @@ export default function Investment_ScreenListOfDocument() { ); return ( - - - - - + @@ -224,7 +224,7 @@ export default function Investment_ScreenInvoice() { - + ); } diff --git a/screens/Invesment/ScreenMyHolding.tsx b/screens/Invesment/ScreenMyHolding.tsx index 1e643d5..e971228 100644 --- a/screens/Invesment/ScreenMyHolding.tsx +++ b/screens/Invesment/ScreenMyHolding.tsx @@ -1,11 +1,12 @@ /* eslint-disable react-hooks/exhaustive-deps */ import { BaseBox, + OS_Wrapper, ProgressCustom, StackCustom, TextCustom } from "@/components"; -import NewWrapper from "@/components/_ShareComponent/NewWrapper"; +import { PADDING_INLINE } from "@/constants/constans-value"; import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; import { createPaginationComponents } from "@/helpers/paginationHelpers"; import { useAuth } from "@/hooks/use-auth"; @@ -73,7 +74,8 @@ export default function Investment_ScreenMyHolding() { }); return ( - > http://192.168.1.112:3000/api/mobile/file` + `[ERROR] [AxiosError: Request failed with status code 500]` +- **Status:** ❌ Belum diperbaiki - akan diperbaiki besok +- **Note Penting:** Fitur Investment **belum sepenuhnya rampung** - masih ada issue upload file yang perlu diinvestigasi lebih lanjut. Kemungkinan masalah di server upload service atau environment development. Production saat ini masih aman. + --- # 🔴 ADMIN PHASES (Admin-Facing Screens) @@ -475,10 +481,10 @@ import { OS_Wrapper } from "@/components"; | User Phase 6 (Event) | 16 | 16 | ⏳ Pending | ✅ Complete | | User Phase 7 (Voting) | 11 | 11 | ✅ No errors | ✅ Complete | | User Phase 8 (Donation + Others) | 31 | 31 | ✅ No errors | ✅ Complete | -| User Phase 9 (Investment) | 24 | 0 | 0 | ⏳ Pending | +| User Phase 9 (Investment) | 24 | 24 | ✅ No errors | ✅ Complete | | User Phase 10 (Collaboration) | ~3 | 0 | 0 | ⏳ Pending | | User Phase 11 (Others) | ~3 | 0 | 0 | ⏳ Pending | -| **User Total** | **~132** | **102** | **10** | **~77% Complete** | +| **User Total** | **~132** | **126** | **10** | **~95% Complete** | ### Admin Phases: | Phase | Total Files | Migrated | Testing | Status | @@ -497,9 +503,9 @@ import { OS_Wrapper } from "@/components"; ### Grand Total: | Category | Total Files | Migrated | Status | |----------|-------------|----------|--------| -| **User Screens** | ~132 | 102 | ~77% Complete | +| **User Screens** | ~132 | 126 | ~95% Complete | | **Admin Screens** | ~31 | 2 | ~6% Complete | -| **GRAND TOTAL** | **~163** | **104** | **~64% Complete** | +| **GRAND TOTAL** | **~163** | **128** | **~79% Complete** | ## 🔄 Rollback Plan @@ -514,5 +520,6 @@ Jika ada issue yang tidak bisa di-fix dalam 1 jam: **Co-authored-by**: Qwen-Coder **Created**: 2026-04-06 **Last Updated**: 2026-04-13 -**Status**: User Phase 1-8 Complete ✅ | Admin Phase 9 Complete ✅ (104 files migrated) -**Next**: User Phase 9 - Investment Screens (24 files) +**Status**: User Phase 1-9 Complete ✅ (with known issues) | Admin Phase 9 Complete ✅ (128 files migrated) +**Next**: User Phase 10-11 (~6 files) OR Admin Phase 1-3 (HIGH Priority, ~9 files) +**TODO Tomorrow**: Fix Investment upload error (status 500 on image upload)