feat: Implement PageWrapper and migrate all Job screens

Create PageWrapper component that routes to:
- iOS: NewWrapper (stable, tested)
- Android: NewWrapper_V2 (keyboard handling fix)

New Files:
- components/_ShareComponent/PageWrapper.tsx
- docs/PAGEWRAPPER-USAGE.md

Migrated Job Screens (10):
- screens/Job/ScreenJobCreate.tsx: NewWrapper_V2 → PageWrapper
- screens/Job/ScreenJobEdit.tsx: NewWrapper_V2 → PageWrapper
- screens/Job/ScreenArchive.tsx: ViewWrapper → PageWrapper
- screens/Job/ScreenArchive2.tsx: NewWrapper_V2 → PageWrapper
- screens/Job/ScreenBeranda2.tsx: NewWrapper_V2 → PageWrapper
- screens/Job/MainViewStatus2.tsx: NewWrapper_V2 → PageWrapper
- app/(application)/(user)/job/[id]/index.tsx: ViewWrapper → PageWrapper
- app/(application)/(user)/job/[id]/archive.tsx: ViewWrapper → PageWrapper
- app/(application)/(user)/job/[id]/[status]/detail.tsx: NewWrapper_V2 → PageWrapper

Benefits:
- iOS users (70%+) get stable NewWrapper
- Android users get keyboard handling fix
- Clean API - no Platform.OS checks in screens
- Easy future migration path

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
2026-04-06 14:41:54 +08:00
parent 6b786d7983
commit e3b5d3ddb1
13 changed files with 578 additions and 33 deletions

View File

@@ -5,7 +5,7 @@ import {
DrawerCustom,
LoaderCustom,
MenuDrawerDynamicGrid,
NewWrapper_V2,
PageWrapper,
Spacing,
StackCustom,
} from "@/components";
@@ -72,7 +72,7 @@ export default function JobDetailStatus() {
),
}}
/>
<NewWrapper_V2>
<PageWrapper>
{isLoadData ? (
<LoaderCustom />
) : (
@@ -96,7 +96,7 @@ export default function JobDetailStatus() {
<Spacing />
</>
)}
</NewWrapper_V2>
</PageWrapper>
<DrawerCustom
isVisible={openDrawer}

View File

@@ -2,9 +2,9 @@
import {
ButtonCustom,
LoaderCustom,
PageWrapper,
Spacing,
StackCustom,
ViewWrapper,
} from "@/components";
import Job_BoxDetailSection from "@/screens/Job/BoxDetailSection";
import { apiJobGetOne, apiJobUpdateData } from "@/service/api-client/api-job";
@@ -71,7 +71,7 @@ export default function JobDetailArchive() {
{isLoadData ? (
<LoaderCustom />
) : (
<ViewWrapper>
<PageWrapper>
<>
<StackCustom>
<Job_BoxDetailSection data={data} />
@@ -83,17 +83,10 @@ export default function JobDetailArchive() {
>
Publish kembali
</ButtonCustom>
{/* <Job_ButtonStatusSection
id={id as string}
status={status as string}
isLoading={isLoading}
onSetLoading={setIsLoading}
isArchive={true}
/> */}
</StackCustom>
<Spacing />
</>
</ViewWrapper>
</PageWrapper>
)}
</>
);

View File

@@ -1,5 +1,5 @@
/* eslint-disable react-hooks/exhaustive-deps */
import { ButtonCustom, LoaderCustom, Spacing, StackCustom, ViewWrapper } from "@/components";
import { ButtonCustom, LoaderCustom, PageWrapper, Spacing, StackCustom } from "@/components";
import { MainColor } from "@/constants/color-palet";
import { ICON_SIZE_SMALL } from "@/constants/constans-value";
import Job_BoxDetailSection from "@/screens/Job/BoxDetailSection";
@@ -88,7 +88,7 @@ export default function JobDetail() {
};
return (
<ViewWrapper>
<PageWrapper>
{isLoading ? (
<LoaderCustom />
) : (
@@ -101,6 +101,6 @@ export default function JobDetail() {
<Spacing />
</>
)}
</ViewWrapper>
</PageWrapper>
);
}