diff --git a/app/(application)/(user)/investment/create.tsx b/app/(application)/(user)/investment/create.tsx
index bd0eb46..5d8e68c 100644
--- a/app/(application)/(user)/investment/create.tsx
+++ b/app/(application)/(user)/investment/create.tsx
@@ -118,20 +118,7 @@ export default function InvestmentCreate() {
try {
setIsLoading(true);
- const responseUploadImage = await uploadFileService({
- imageUri: image,
- dirId: DIRECTORY_ID.investasi_image,
- });
- if (!responseUploadImage.success) {
- Toast.show({
- type: "error",
- text1: "Gagal mengunggah gambar",
- });
- return;
- }
-
- const imageId = responseUploadImage.data.id;
const responseUploadPdf = await uploadFileService({
imageUri: pdf.uri,
dirId: DIRECTORY_ID.investasi_prospektus,
@@ -144,8 +131,22 @@ export default function InvestmentCreate() {
});
return;
}
-
const pdfId = responseUploadPdf.data.id;
+
+ const responseUploadImage = await uploadFileService({
+ imageUri: image,
+ dirId: DIRECTORY_ID.investasi_image,
+ });
+
+ if (!responseUploadImage.success) {
+ Toast.show({
+ type: "error",
+ text1: "Gagal mengunggah gambar",
+ });
+ return;
+ }
+ const imageId = responseUploadImage.data.id;
+
const newData = {
title: data.title,
targetDana: data.targetDana,
diff --git a/app/(application)/admin/job/[id]/[status]/index.tsx b/app/(application)/admin/job/[id]/[status]/index.tsx
index 75a8429..3dec758 100644
--- a/app/(application)/admin/job/[id]/[status]/index.tsx
+++ b/app/(application)/admin/job/[id]/[status]/index.tsx
@@ -5,11 +5,10 @@ import {
BaseBox,
DummyLandscapeImage,
Grid,
- NewWrapper,
+ OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
- ViewWrapper,
} from "@/components";
import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle";
import AdminButtonReject from "@/components/_ShareComponent/Admin/ButtonReject";
@@ -121,7 +120,7 @@ export default function AdminJobDetailStatus() {
return (
<>
- }
>
@@ -185,7 +184,7 @@ export default function AdminJobDetailStatus() {
/>
)}
-
+
>
);
}
diff --git a/app/(application)/admin/job/[id]/[status]/reject-input.tsx b/app/(application)/admin/job/[id]/[status]/reject-input.tsx
index 7454d82..93a1f24 100644
--- a/app/(application)/admin/job/[id]/[status]/reject-input.tsx
+++ b/app/(application)/admin/job/[id]/[status]/reject-input.tsx
@@ -2,9 +2,8 @@
import {
AlertDefaultSystem,
BoxButtonOnFooter,
- NewWrapper,
+ OS_Wrapper,
TextAreaCustom,
- ViewWrapper,
} from "@/components";
import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle";
import AdminButtonReject from "@/components/_ShareComponent/Admin/ButtonReject";
@@ -101,7 +100,9 @@ export default function AdminJobRejectInput() {
return (
<>
- }
>
@@ -113,7 +114,7 @@ export default function AdminJobRejectInput() {
showCount
maxLength={1000}
/>
-
+
>
);
}
diff --git a/app/(application)/admin/job/index.tsx b/app/(application)/admin/job/index.tsx
index ec9d39e..a0f30ef 100644
--- a/app/(application)/admin/job/index.tsx
+++ b/app/(application)/admin/job/index.tsx
@@ -1,5 +1,5 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
-import { Spacing, StackCustom, ViewWrapper } from "@/components";
+import { OS_Wrapper, Spacing, StackCustom } from "@/components";
import {
IconPublish,
IconReject,
@@ -42,7 +42,7 @@ export default function AdminJob() {
return (
<>
-
+
@@ -50,7 +50,7 @@ export default function AdminJob() {
))}
-
+
>
);
}
diff --git a/screens/Admin/Job/ScreenJobStatus.tsx b/screens/Admin/Job/ScreenJobStatus.tsx
index d63aadf..3738c92 100644
--- a/screens/Admin/Job/ScreenJobStatus.tsx
+++ b/screens/Admin/Job/ScreenJobStatus.tsx
@@ -1,6 +1,5 @@
-import { SearchInput } from "@/components";
+import { OS_Wrapper, SearchInput } from "@/components";
import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage";
-import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { MainColor } from "@/constants/color-palet";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
@@ -82,7 +81,7 @@ export function Admin_ScreenJobStatus() {
});
return (
- item.id.toString()}
diff --git a/tasks/TASK-005-OS-Wrapper-Implementation.md b/tasks/TASK-005-OS-Wrapper-Implementation.md
index a7abc4f..9cafb31 100644
--- a/tasks/TASK-005-OS-Wrapper-Implementation.md
+++ b/tasks/TASK-005-OS-Wrapper-Implementation.md
@@ -375,10 +375,27 @@ import { OS_Wrapper } from "@/components";
- [ ] `screens/Admin/Collaboration/ScreenCollaborationReject.tsx`
- [ ] `screens/Admin/Collaboration/ScreenCollaborationDetail.tsx`
-## ⏳ Admin Phase 6: Job Admin (Priority: MEDIUM)
-- [ ] `screens/Admin/Job/ScreenJobAdminList.tsx`
-- [ ] `screens/Admin/Job/ScreenJobAdminDetail.tsx`
-- [ ] `screens/Admin/Job/ScreenJobAdminStatus.tsx`
+## ✅ Admin Phase 6: Job Admin - COMPLETED (2026-04-14)
+
+**Files migrated: 4**
+
+#### Admin Job Dashboard (OS_Wrapper static):
+- ✅ `app/(application)/admin/job/index.tsx` - ViewWrapper → OS_Wrapper (dashboard with status cards)
+
+#### Admin Job List Screen (OS_Wrapper):
+- ✅ `screens/Admin/Job/ScreenJobStatus.tsx` - NewWrapper → OS_Wrapper (pagination list with search)
+
+#### Admin Job Detail Screen (OS_Wrapper static):
+- ✅ `app/(application)/admin/job/[id]/[status]/index.tsx` - NewWrapper → OS_Wrapper (detail with action buttons)
+
+#### Admin Job Form Screen (OS_Wrapper with enableKeyboardHandling):
+- ✅ `app/(application)/admin/job/[id]/[status]/reject-input.tsx` - NewWrapper → OS_Wrapper + `enableKeyboardHandling` + `contentPaddingBottom={250}`
+
+**Testing Status:**
+- ✅ TypeScript: No errors
+- ⏳ Build: Pending
+- ⏳ iOS Testing: Pending
+- ⏳ Android Testing: Pending
## ⏳ Admin Phase 7: Investment Admin (Priority: LOW)
- [ ] `screens/Admin/Investment/ScreenInvestmentList.tsx`
@@ -494,18 +511,18 @@ import { OS_Wrapper } from "@/components";
| Admin Phase 3 (Donation) | ~3 | 0 | 0 | ⏳ Pending |
| Admin Phase 4 (Forum) | ~5 | 0 | 0 | ⏳ Pending |
| Admin Phase 5 (Collaboration) | ~5 | 0 | 0 | ⏳ Pending |
-| Admin Phase 6 (Job) | ~3 | 0 | 0 | ⏳ Pending |
+| Admin Phase 6 (Job) | 4 | 4 | ✅ No errors | ✅ Complete |
| Admin Phase 7 (Investment) | ~3 | 0 | 0 | ⏳ Pending |
| Admin Phase 8 (App Info) | ~4 | 0 | 0 | ⏳ Pending |
| Admin Phase 9 (User Access) | 2 | 2 | 0 | ✅ Complete |
-| **Admin Total** | **~31** | **2** | **0** | **~6% Complete** |
+| **Admin Total** | **~31** | **6** | **0** | **~19% Complete** |
### Grand Total:
| Category | Total Files | Migrated | Status |
|----------|-------------|----------|--------|
| **User Screens** | ~132 | 126 | ~95% Complete |
-| **Admin Screens** | ~31 | 2 | ~6% Complete |
-| **GRAND TOTAL** | **~163** | **128** | **~79% Complete** |
+| **Admin Screens** | ~31 | 6 | ~19% Complete |
+| **GRAND TOTAL** | **~167** | **132** | **~79% Complete** |
## 🔄 Rollback Plan
@@ -519,7 +536,7 @@ 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-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)
+**Last Updated**: 2026-04-14
+**Status**: User Phase 1-9 Complete ✅ | Admin Phase 6 & 9 Complete ✅ (132 files migrated)
+**Current**: Admin Phase 6 Complete ✅
+**Next**: Admin Phase 1-3 (HIGH Priority, ~9 files) OR User Phase 10-11 (~6 files)