Compare commits

...

7 Commits

Author SHA1 Message Date
eb64c30d49 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 <qwen-coder@alibabacloud.com>
2026-04-13 17:56:49 +08:00
2f87776d8b docs: Add User Phase 9 Investment screens details to TASK-005
- Document 24 investment screens to migrate
- Include tabs, list/document, detail, form, and transaction flow screens
- Note tabs layout height fix needed for investment

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-13 16:45:15 +08:00
243313b8eb feat: Complete User Phase 8 Donation screens + add PADDING_INLINE to all list/recap screens
- Migrate 25 donation screens to OS_Wrapper (tabs, list, detail, forms, transaction flow)
- Add contentPadding={PADDING_INLINE} to 7 list/recap screens for consistent spacing
- Migrate crowdfunding screen to OS_Wrapper
- Fix voting tabs layout height to use OS_IOS_HEIGHT/OS_ANDROID_HEIGHT constants
- Migrate news detail screen to OS_Wrapper
- Update TASK-005 progress to 73% complete (104 files migrated)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-13 16:24:14 +08:00
8e61c980af fix: Remove PADDING_INLINE from non-tabs ScreenListOfContributor + update task
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-13 12:25:12 +08:00
c709dffd20 feat: Complete User Phase 7 Voting screens migration to OS_Wrapper
- Migrate 5 list screens (Beranda, Contribution, History, Status, ListOfContributor)
- Migrate 2 form screens (create, edit) with enableKeyboardHandling
- Migrate 4 detail screens (index, contribution, history, detail)
- Add PADDING_INLINE to tabs screens for consistent spacing
- Update TASK-005 progress to 80% complete (71/89 files)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-13 12:24:23 +08:00
54537d2449 feat: Complete Phase 6 Event screens migration + add PADDING_INLINE to tabs
User Phase 6 - Event Screens (16 files):
- Beranda, Status, History, Contribution (tabs screens)
  → NewWrapper → OS_Wrapper + contentPadding={PADDING_INLINE}
- create.tsx & edit.tsx → Forms with enableKeyboardHandling + contentPaddingBottom={250}
- [id]/publish.tsx, history.tsx, contribution.tsx, confirmation.tsx → Static detail screens
- [id]/[status]/detail-event.tsx → Status detail screen
- detail/[id].tsx → Detail route screen
- ScreenListOfParticipants.tsx → Participants list screen

Key Improvements:
- Added contentPadding={PADDING_INLINE} to all Event (tabs) screens to prevent tight edge margins.
- Form screens (create, edit) use enableKeyboardHandling + contentPaddingBottom={250}.
- Removed all ViewWrapper and NewWrapper instances from Event feature.

Documentation:
- Update TASK-005 with Phase 6 completion details and new progress totals.
- Added note about PADDING_INLINE usage for tab screens.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-10 13:50:59 +08:00
66792186ca feat: Complete Forum & Admin User Access migration + fix scroll issues
Forum Screens (User Phase 5 - 17 files):
- Migrate all forum list, detail, create, and report screens to OS_Wrapper.
- ViewBeranda, ViewBeranda2, ViewBeranda3: List screens with pull-to-refresh.
- DetailForum, DetailForum2: Comment sections with headers (apply disableFlexGrow fix).
- create, edit, report-*, other-report-*, preview-report-*: Forms with keyboard handling.

Admin Phase 9 (User Access - 2 files):
- index.tsx: List with search and pagination.
- [id]/index.tsx: Detail with status toggle footer.

Scroll Fixes (Critical Bugs):
- Fix "Ghost Scroll" in Android FlatList: Removed TouchableWithoutFeedback and KeyboardAvoidingView wrappers in List Mode.
- Fix Large Header Cut-off: Added optional disableFlexGrow={true} to OS_Wrapper for screens with complex ListHeaderComponents (e.g., Forum Detail).
- Fix Keyboard Dismiss: Changed keyboardShouldPersistTaps to "handled" so taps on empty areas dismiss the keyboard while allowing scroll.

Documentation:
- Update TASK-005 with complete Phase 5 details and new progress totals.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-09 17:48:51 +08:00
103 changed files with 800 additions and 430 deletions

View File

@@ -540,3 +540,4 @@ Contoh:
- User akan review dan tambahkan sendiri jika perlu
Profile screens: PADDING_INLINE dihapus dari edit.tsx dan create.tsx
- User ingin mengecek semua user layout tabs setelah perubahan height layout tabs donation di constants. Pattern yang perlu dicek: semua tabs screens harus pakai contentPadding={PADDING_INLINE} untuk konsistensi layout.

View File

@@ -1,9 +1,9 @@
import {
BaseBox,
Grid,
OS_Wrapper,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import { MainColor } from "@/constants/color-palet";
import { ICON_SIZE_SMALL } from "@/constants/constans-value";
@@ -25,7 +25,7 @@ export default function Crowdfunding() {
];
return (
<ViewWrapper>
<OS_Wrapper>
<StackCustom>
<Image
source={require("@/assets/images/constants/crowd-hipmi.png")}
@@ -63,6 +63,6 @@ export default function Crowdfunding() {
</BaseBox>
))}
</StackCustom>
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -1,5 +1,5 @@
import { IconHome, IconStatus } from "@/components/_Icon";
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 {
FontAwesome5
@@ -23,12 +23,12 @@ function DonationTabsWrapper() {
ios: {
borderTopWidth: 0,
paddingTop: 12,
height: 80,
height: OS_IOS_HEIGHT,
},
android: {
borderTopWidth: 0,
paddingTop: 5,
height: 70 + paddingBottom,
height: OS_ANDROID_HEIGHT + paddingBottom,
},
}),
}}

View File

@@ -5,11 +5,11 @@ import {
ButtonCustom,
InformationBox,
LandscapeFrameUploaded,
OS_Wrapper,
Spacing,
StackCustom,
TextAreaCustom,
TextInputCustom,
ViewWrapper,
} from "@/components";
import API_STRORAGE from "@/constants/base-url-api-strorage";
import DIRECTORY_ID from "@/constants/directory-id";
@@ -105,7 +105,9 @@ export default function DonationEditNews() {
};
return (
<ViewWrapper
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={
<BoxButtonOnFooter>
<ButtonCustom
@@ -165,6 +167,6 @@ export default function DonationEditNews() {
<Spacing />
</StackCustom>
<Spacing />
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -7,9 +7,9 @@ import {
DrawerCustom,
DummyLandscapeImage,
MenuDrawerDynamicGrid,
OS_Wrapper,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconEdit } from "@/components/_Icon";
@@ -28,6 +28,7 @@ import {
} from "expo-router";
import { useCallback, useState } from "react";
import Toast from "react-native-toast-message";
import { dateTimeView } from "@/utils/dateTimeView";
export default function DonationNews() {
const { user } = useAuth();
@@ -71,11 +72,11 @@ export default function DonationNews() {
),
}}
/>
<ViewWrapper>
<OS_Wrapper>
<BaseBox>
<StackCustom>
<TextCustom style={{ alignSelf: "flex-end" }}>
{formatChatTime(data?.createdAt)}
<TextCustom color="gray" size={"small"} style={{ alignSelf: "flex-end" }}>
{dateTimeView({date: data?.createdAt})}
</TextCustom>
{data && data.imageId && (
@@ -89,7 +90,7 @@ export default function DonationNews() {
<TextCustom>{data?.deskripsi || "-"}</TextCustom>
</StackCustom>
</BaseBox>
</ViewWrapper>
</OS_Wrapper>
<DrawerCustom
isVisible={openDrawer}

View File

@@ -4,12 +4,11 @@ import {
ButtonCustom,
InformationBox,
LandscapeFrameUploaded,
NewWrapper,
OS_Wrapper,
Spacing,
StackCustom,
TextAreaCustom,
TextInputCustom,
ViewWrapper,
} from "@/components";
import DIRECTORY_ID from "@/constants/directory-id";
import { apiDonationCreateNews } from "@/service/api-client/api-donation";
@@ -72,7 +71,9 @@ export default function DonationAddNews() {
};
return (
<NewWrapper
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={
<BoxButtonOnFooter>
<ButtonCustom
@@ -133,6 +134,6 @@ export default function DonationAddNews() {
<Spacing />
</StackCustom>
</NewWrapper>
</OS_Wrapper>
);
}

View File

@@ -2,10 +2,10 @@
import {
BaseBox,
Grid,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import { MainColor } from "@/constants/color-palet";
import { apiDonationGetInvoiceById } from "@/service/api-client/api-donation";
@@ -63,7 +63,7 @@ export default function DonasiFailed() {
];
return (
<ViewWrapper>
<OS_Wrapper>
<StackCustom>
<BaseBox>
<StackCustom>
@@ -105,6 +105,6 @@ export default function DonasiFailed() {
</StackCustom>
</BaseBox>
</StackCustom>
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -6,10 +6,10 @@ import {
ButtonCustom,
Grid,
InformationBox,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import CopyButton from "@/components/Button/CoyButton";
import { MainColor } from "@/constants/color-palet";
@@ -101,8 +101,7 @@ export default function DonationInvoice() {
return (
<>
<ViewWrapper
hideFooter
<OS_Wrapper
footerComponent={
<BoxButtonOnFooter>
<ButtonCustom
@@ -222,7 +221,7 @@ export default function DonationInvoice() {
</BaseBox>
</StackCustom>
<Spacing />
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -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 DonationProcess() {
return (
<>
<ViewWrapper>
<OS_Wrapper>
<BaseBox>
<StackCustom>
<TextCustom align="center" bold>
@@ -35,7 +35,7 @@ export default function DonationProcess() {
</Grid.Col>
</Grid>
</BaseBox> */}
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -2,10 +2,10 @@
import {
BaseBox,
Grid,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import { MainColor } from "@/constants/color-palet";
import { apiDonationGetInvoiceById } from "@/service/api-client/api-donation";
@@ -63,7 +63,7 @@ export default function DonationSuccess() {
];
return (
<ViewWrapper>
<OS_Wrapper>
<StackCustom>
<BaseBox>
<StackCustom>
@@ -105,7 +105,7 @@ export default function DonationSuccess() {
</StackCustom>
</BaseBox>
</StackCustom>
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -3,9 +3,9 @@ import {
BoxButtonOnFooter,
ButtonCustom,
Grid,
OS_Wrapper,
TextCustom,
TextInputCustom,
ViewWrapper,
} from "@/components";
import { MainColor } from "@/constants/color-palet";
import { ICON_SIZE_SMALL } from "@/constants/constans-value";
@@ -64,7 +64,7 @@ export default function InvestmentInputDonation() {
);
return (
<>
<ViewWrapper footerComponent={bottomComponent}>
<OS_Wrapper enableKeyboardHandling contentPaddingBottom={250} footerComponent={bottomComponent}>
{listData.map((item, i) => (
<BaseBox key={i} onPress={() => setNominal(item.value)}>
<Grid>
@@ -98,7 +98,7 @@ export default function InvestmentInputDonation() {
Minimal donasi Rp. 10.000
</TextCustom>
</BaseBox>
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -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";
@@ -91,7 +91,7 @@ export default function DonationSelectBank() {
);
};
return (
<ViewWrapper footerComponent={buttonSubmit()}>
<OS_Wrapper footerComponent={buttonSubmit()}>
<RadioGroup value={select} onChange={setSelect}>
{_.isEmpty(listBank)
? []
@@ -101,6 +101,6 @@ export default function DonationSelectBank() {
</BaseBox>
))}
</RadioGroup>
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -4,7 +4,7 @@ import {
DotButton,
DrawerCustom,
MenuDrawerDynamicGrid,
NewWrapper,
OS_Wrapper,
Spacing,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
@@ -113,7 +113,7 @@ export default function DonasiDetailStatus() {
),
}}
/>
<NewWrapper
<OS_Wrapper
refreshControl={
<RefreshControl
refreshing={refreshing}
@@ -156,7 +156,7 @@ export default function DonasiDetailStatus() {
<Spacing />
</>
)}
</NewWrapper>
</OS_Wrapper>
<DrawerCustom
isVisible={openDrawer}

View File

@@ -1,9 +1,9 @@
/* eslint-disable react-hooks/exhaustive-deps */
import {
DummyLandscapeImage,
OS_Wrapper,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import { apiDonationGetOne } from "@/service/api-client/api-donation";
import { useFocusEffect, useLocalSearchParams } from "expo-router";
@@ -32,12 +32,12 @@ export default function DonationDetailStory() {
}
};
return (
<ViewWrapper>
<OS_Wrapper>
<StackCustom>
<TextCustom>{data?.pembukaan || "-"}</TextCustom>
<DummyLandscapeImage imageId={data?.imageId} />
<TextCustom>{data?.cerita || "-"}</TextCustom>
</StackCustom>
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -1,6 +1,6 @@
/* eslint-disable react-hooks/exhaustive-deps */
import {
ViewWrapper,
OS_Wrapper,
StackCustom,
InformationBox,
TextInputCustom,
@@ -76,7 +76,7 @@ export default function DonationEditRekening() {
};
return (
<ViewWrapper>
<OS_Wrapper enableKeyboardHandling contentPaddingBottom={250}>
<StackCustom gap={"xs"}>
<InformationBox text="Pastikan Anda mengisi nama bank dan nomor rekening dengan benar. Informasi ini akan membantu admin memverifikasi dan memproses penggalangan dana Anda dengan cepat dan tepat setelah penggalangan dana dipublikasikan." />
<TextInputCustom
@@ -105,6 +105,6 @@ export default function DonationEditRekening() {
</ButtonCustom>
</StackCustom>
<Spacing />
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -4,10 +4,10 @@ import {
ButtonCustom,
InformationBox,
LandscapeFrameUploaded,
OS_Wrapper,
Spacing,
StackCustom,
TextAreaCustom,
ViewWrapper,
} from "@/components";
import API_IMAGE from "@/constants/api-storage";
import DIRECTORY_ID from "@/constants/directory-id";
@@ -93,7 +93,7 @@ export default function DonationEditStory() {
};
return (
<ViewWrapper>
<OS_Wrapper enableKeyboardHandling contentPaddingBottom={250}>
<StackCustom gap={"xs"}>
<InformationBox text="Cerita Anda adalah kunci untuk menginspirasi kebaikan. Jelaskan dengan jujur dan jelas tujuan penggalangan dana ini agar calon donatur memahami dampak positif yang dapat mereka wujudkan melalui kontribusi mereka." />
<TextAreaCustom
@@ -146,6 +146,6 @@ export default function DonationEditStory() {
</ButtonCustom>
</StackCustom>
<Spacing />
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -6,12 +6,11 @@ import {
InformationBox,
LandscapeFrameUploaded,
LoaderCustom,
NewWrapper,
OS_Wrapper,
SelectCustom,
Spacing,
StackCustom,
TextInputCustom,
ViewWrapper,
} from "@/components";
import ListSkeletonComponent from "@/components/_ShareComponent/ListSkeletonComponent";
import API_IMAGE from "@/constants/api-storage";
@@ -184,7 +183,9 @@ export default function DonationEdit() {
};
return (
<NewWrapper
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={
<BoxButtonOnFooter>
<ButtonCustom
@@ -278,6 +279,6 @@ export default function DonationEdit() {
</StackCustom>
)}
<Spacing />
</NewWrapper>
</OS_Wrapper>
);
}

View File

@@ -6,9 +6,8 @@ import {
DotButton,
DrawerCustom,
MenuDrawerDynamicGrid,
NewWrapper,
OS_Wrapper,
StackCustom,
ViewWrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconNews } from "@/components/_Icon";
@@ -104,7 +103,7 @@ export default function DonasiDetailBeranda() {
),
}}
/>
<NewWrapper footerComponent={buttonSection}>
<OS_Wrapper footerComponent={buttonSection}>
{!data ? (
<CustomSkeleton height={400} />
) : (
@@ -127,7 +126,7 @@ export default function DonasiDetailBeranda() {
/>
</StackCustom>
)}
</NewWrapper>
</OS_Wrapper>
<DrawerCustom
isVisible={openDrawer}

View File

@@ -5,9 +5,9 @@ import {
ButtonCustom,
Grid,
LoaderCustom,
OS_Wrapper,
Spacing,
TextCustom,
ViewWrapper
} from "@/components";
import Donation_BoxPublish from "@/screens/Donation/BoxPublish";
import { apiDonationFundrising } from "@/service/api-client/api-donation";
@@ -44,7 +44,7 @@ export default function DonationInformationFunrising() {
return (
<>
<ViewWrapper>
<OS_Wrapper>
<BaseBox>
<Grid>
<Grid.Col span={6} style={{ justifyContent: "center" }}>
@@ -80,7 +80,7 @@ export default function DonationInformationFunrising() {
<Donation_BoxPublish key={index} id={item?.id} data={item} />
))
)}
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -10,7 +10,7 @@ import {
TextAreaCustom,
TextInputCustom,
} from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import OS_Wrapper from "@/components/_ShareComponent/OS_Wrapper";
import DIRECTORY_ID from "@/constants/directory-id";
import { useAuth } from "@/hooks/use-auth";
import {
@@ -113,7 +113,9 @@ export default function DonationCreateStory() {
};
return (
<NewWrapper
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={
<>
<BoxButtonOnFooter>
@@ -184,6 +186,6 @@ export default function DonationCreateStory() {
/>
</StackCustom>
<Spacing />
</NewWrapper>
</OS_Wrapper>
);
}

View File

@@ -5,12 +5,12 @@ import {
InformationBox,
LandscapeFrameUploaded,
LoaderCustom,
OS_Wrapper,
SelectCustom,
Spacing,
StackCustom,
TextInputCustom,
} from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import DIRECTORY_ID from "@/constants/directory-id";
import { apiDonationCreate } from "@/service/api-client/api-donation";
import { apiMasterDonation } from "@/service/api-client/api-master";
@@ -126,7 +126,9 @@ export default function DonationCreate() {
};
return (
<NewWrapper
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={
<>
<BoxButtonOnFooter>
@@ -220,6 +222,6 @@ export default function DonationCreate() {
)}
</StackCustom>
<Spacing />
</NewWrapper>
</OS_Wrapper>
);
}

View File

@@ -5,10 +5,10 @@ import {
DrawerCustom,
Grid,
MenuDrawerDynamicGrid,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IMenuDrawerItem } from "@/components/_Interface/types";
@@ -95,7 +95,7 @@ export default function EventDetailStatus() {
),
}}
/>
<ViewWrapper>
<OS_Wrapper>
<BaseBox>
<StackCustom>
<TextCustom bold align="center" size="xlarge">
@@ -118,7 +118,7 @@ export default function EventDetailStatus() {
status={status as string}
/>
<Spacing />
</ViewWrapper>
</OS_Wrapper>
<DrawerCustom
isVisible={openDrawer}

View File

@@ -5,9 +5,9 @@ import {
ButtonCustom,
CenterCustom,
LoaderCustom,
OS_Wrapper,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { MainColor } from "@/constants/color-palet";
@@ -281,7 +281,7 @@ export default function UserEventConfirmation() {
),
}}
/>
<ViewWrapper>{handlerReturn()}</ViewWrapper>
<OS_Wrapper>{handlerReturn()}</OS_Wrapper>
</>
);
}

View File

@@ -4,8 +4,8 @@ import {
DrawerCustom,
LoaderCustom,
MenuDrawerDynamicGrid,
OS_Wrapper,
Spacing,
ViewWrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IMenuDrawerItem } from "@/components/_Interface/types";
@@ -59,14 +59,14 @@ export default function EventDetailContribution() {
),
}}
/>
<ViewWrapper>
<OS_Wrapper>
{isLoadData ? (
<LoaderCustom />
) : (
<Event_BoxDetailPublishSection data={data} />
)}
<Spacing />
</ViewWrapper>
</OS_Wrapper>
<DrawerCustom
isVisible={openDrawer}
closeDrawer={() => setOpenDrawer(false)}

View File

@@ -3,14 +3,13 @@ import {
BoxButtonOnFooter,
ButtonCustom,
LoaderCustom,
NewWrapper,
OS_Wrapper,
SelectCustom,
Spacing,
StackCustom,
TextAreaCustom,
TextCustom,
TextInputCustom,
ViewWrapper,
} from "@/components";
import ListSkeletonComponent from "@/components/_ShareComponent/ListSkeletonComponent";
import DateTimePickerCustom from "@/components/DateInput/DateTimePickerCustom";
@@ -186,7 +185,9 @@ export default function EventEdit() {
return (
<>
<NewWrapper
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={
<BoxButtonOnFooter>
<ButtonCustom
@@ -283,7 +284,7 @@ export default function EventEdit() {
/>
</StackCustom>
)}
</NewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -3,7 +3,7 @@ import {
DotButton,
DrawerCustom,
MenuDrawerDynamicGrid,
ViewWrapper,
OS_Wrapper,
Spacing,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
@@ -54,10 +54,10 @@ export default function EventDetailHistory() {
),
}}
/>
<ViewWrapper>
<OS_Wrapper>
<Event_BoxDetailPublishSection data={data} />
<Spacing />
</ViewWrapper>
</OS_Wrapper>
<DrawerCustom
isVisible={openDrawer}
closeDrawer={() => setOpenDrawer(false)}

View File

@@ -6,7 +6,7 @@ import {
DotButton,
DrawerCustom,
MenuDrawerDynamicGrid,
ViewWrapper,
OS_Wrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IMenuDrawerItem } from "@/components/_Interface/types";
@@ -122,9 +122,9 @@ export default function EventDetailPublish() {
if (isEventFinished) {
return (
<ViewWrapper>
<OS_Wrapper>
<CustomSkeleton />
</ViewWrapper>
</OS_Wrapper>
);
}
@@ -166,7 +166,7 @@ export default function EventDetailPublish() {
),
}}
/>
<ViewWrapper>
<OS_Wrapper>
{isLoadingData ? (
<CustomSkeleton height={400} />
) : (
@@ -175,7 +175,7 @@ export default function EventDetailPublish() {
footerButton={FooterButton()}
/>
)}
</ViewWrapper>
</OS_Wrapper>
<DrawerCustom
isVisible={openDrawer}

View File

@@ -1,7 +1,7 @@
import {
BoxButtonOnFooter,
ButtonCustom,
NewWrapper,
OS_Wrapper,
SelectCustom,
Spacing,
StackCustom,
@@ -112,7 +112,9 @@ export default function EventCreate() {
return (
<>
<NewWrapper
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={<BoxButtonOnFooter>{buttonSubmit}</BoxButtonOnFooter>}
>
<StackCustom gap={"xs"}>
@@ -182,7 +184,7 @@ export default function EventCreate() {
/>
</StackCustom>
</StackCustom>
</NewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -1,4 +1,4 @@
import ViewWrapper from "@/components/_ShareComponent/ViewWrapper";
import { OS_Wrapper } from "@/components";
import { GStyles } from "@/styles/global-styles";
import { useLocalSearchParams } from "expo-router";
import { Text } from "react-native";
@@ -7,8 +7,8 @@ export default function DetailEvent() {
const { id } = useLocalSearchParams();
console.log("id event >", id);
return (
<ViewWrapper>
<OS_Wrapper>
<Text style={GStyles.textLabel}>Detail Event {id}</Text>
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -2,8 +2,8 @@ import {
BoxButtonOnFooter,
ButtonCustom,
LoaderCustom,
OS_Wrapper,
TextAreaCustom,
ViewWrapper,
} from "@/components";
import AlertWarning from "@/components/Alert/AlertWarning";
import { apiForumGetOne, apiForumUpdate } from "@/service/api-client/api-forum";
@@ -88,7 +88,11 @@ export default function ForumEdit() {
};
return (
<ViewWrapper footerComponent={buttonFooter()}>
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={buttonFooter()}
>
{!loadingGetData ? (
<TextAreaCustom
placeholder="Ketik diskusi anda..."
@@ -102,6 +106,6 @@ export default function ForumEdit() {
) : (
<LoaderCustom />
)}
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -1,8 +1,8 @@
import {
BoxButtonOnFooter,
ButtonCustom,
OS_Wrapper,
TextAreaCustom,
ViewWrapper,
} from "@/components";
import { MainColor } from "@/constants/color-palet";
import { useAuth } from "@/hooks/use-auth";
@@ -62,13 +62,17 @@ export default function ForumOtherReportCommentar() {
return (
<>
<ViewWrapper footerComponent={handleSubmit}>
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={handleSubmit}
>
<TextAreaCustom
placeholder="Laporkan Komentar"
value={value}
onChangeText={setValue}
/>
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -1,8 +1,8 @@
import {
BoxButtonOnFooter,
ButtonCustom,
OS_Wrapper,
TextAreaCustom,
ViewWrapper,
} from "@/components";
import { MainColor } from "@/constants/color-palet";
import { useAuth } from "@/hooks/use-auth";
@@ -61,13 +61,17 @@ export default function ForumOtherReportPosting() {
);
return (
<>
<ViewWrapper footerComponent={handleSubmit}>
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={handleSubmit}
>
<TextAreaCustom
placeholder="Laporkan Diskusi"
value={value}
onChangeText={setValue}
/>
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -1,6 +1,6 @@
import {
BaseBox,
NewWrapper,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
@@ -41,7 +41,7 @@ export default function ForumPreviewReportComment() {
return (
<>
<NewWrapper>
<OS_Wrapper>
<StackCustom>
<TextCustom color="red" bold>
Komentar anda telah melanggar aturan forum ! Admin mengambil
@@ -85,7 +85,7 @@ export default function ForumPreviewReportComment() {
</BaseBox>
))
)}
</NewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -1,6 +1,6 @@
import {
BaseBox,
NewWrapper,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
@@ -41,7 +41,7 @@ export default function ForumPreviewReportPosting() {
return (
<>
<NewWrapper>
<OS_Wrapper>
<StackCustom>
<TextCustom color="red" bold>
Postingan anda telah melanggar aturan forum ! Admin mengambil
@@ -85,7 +85,7 @@ export default function ForumPreviewReportPosting() {
</BaseBox>
))
)}
</NewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -1,9 +1,9 @@
import {
ButtonCustom,
LoaderCustom,
OS_Wrapper,
Spacing,
StackCustom,
ViewWrapper,
} from "@/components";
import { AccentColor, MainColor } from "@/constants/color-palet";
import { useAuth } from "@/hooks/use-auth";
@@ -69,7 +69,7 @@ export default function ForumReportCommentar() {
return (
<>
<ViewWrapper>
<OS_Wrapper>
{isLoadingList ? (
<LoaderCustom />
) : (
@@ -101,7 +101,7 @@ export default function ForumReportCommentar() {
<Spacing />
</StackCustom>
)}
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -2,9 +2,9 @@ import {
AlertDefaultSystem,
ButtonCustom,
LoaderCustom,
OS_Wrapper,
Spacing,
StackCustom,
ViewWrapper,
} from "@/components";
import { AccentColor, MainColor } from "@/constants/color-palet";
import { useAuth } from "@/hooks/use-auth";
@@ -73,7 +73,7 @@ export default function ForumReportPosting() {
return (
<>
<ViewWrapper>
<OS_Wrapper>
{isLoadingList ? (
<LoaderCustom />
) : (
@@ -114,7 +114,7 @@ export default function ForumReportPosting() {
<Spacing />
</StackCustom>
)}
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -1,8 +1,8 @@
import {
BoxButtonOnFooter,
ButtonCustom,
OS_Wrapper,
TextAreaCustom,
ViewWrapper,
} from "@/components";
import AlertWarning from "@/components/Alert/AlertWarning";
import { useAuth } from "@/hooks/use-auth";
@@ -67,7 +67,11 @@ export default function ForumCreate() {
);
return (
<ViewWrapper footerComponent={buttonFooter}>
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={buttonFooter}
>
<TextAreaCustom
placeholder="Ketik diskusi anda..."
maxLength={1000}
@@ -75,6 +79,6 @@ export default function ForumCreate() {
value={text}
onChangeText={setText}
/>
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -2,7 +2,7 @@ import {
BaseBox,
ButtonCustom,
CheckboxCustom,
NewWrapper,
OS_Wrapper,
StackCustom,
TextCustom,
} from "@/components";
@@ -54,7 +54,7 @@ export default function ForumSplash() {
};
return (
<NewWrapper>
<OS_Wrapper>
{/* <TextCustom bold>HIPMI Badung Connect</TextCustom> . */}
<BaseBox>
@@ -162,7 +162,7 @@ export default function ForumSplash() {
</ButtonCustom>
</StackCustom>
</BaseBox>
</NewWrapper>
</OS_Wrapper>
);
}

View File

@@ -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,
},
}),
}}

View File

@@ -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 (
<>
<ViewWrapper footerComponent={buttonFooter}>
<StackCustom gap={"xs"}>
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={buttonFooter}
>
<StackCustom gap={"xs"}>
<InformationBox text="File dokumen bersifat opsional, jika memang ada file yang bisa membantu meyakinkan investor. Anda bisa mengupload nya." />
<Spacing />
<TextInputCustom
@@ -124,7 +127,6 @@ export default function InvestmentAddDocument() {
Upload
</ButtonCenteredOnly>
</StackCustom>
</ViewWrapper>
</>
</OS_Wrapper>
);
}

View File

@@ -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 (
<>
<ViewWrapper footerComponent={buttonFooter}>
<StackCustom gap={"xs"}>
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={buttonFooter}
>
<StackCustom gap={"xs"}>
<InformationBox text="File dokumen bersifat opsional, jika memang ada file yang bisa membantu meyakinkan investor. Anda bisa mengupload nya." />
<Spacing />
<TextInputCustom
@@ -142,7 +145,6 @@ export default function InvestmentEditDocument() {
Upload
</ButtonCenteredOnly>
</StackCustom>
</ViewWrapper>
</>
</OS_Wrapper>
);
}

View File

@@ -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() {
}}
/>
<ViewWrapper>
<OS_Wrapper>
<BaseBox>
<StackCustom gap={"xs"}>
<Grid>
@@ -124,7 +124,7 @@ export default function InvestmentDetailHolding() {
status={"publish"}
bottomSection={bottomSection}
/>
</ViewWrapper>
</OS_Wrapper>
{/* ========= Draft Drawer ========= */}
<DrawerCustom

View File

@@ -7,9 +7,9 @@ import {
DrawerCustom,
DummyLandscapeImage,
MenuDrawerDynamicGrid,
OS_Wrapper,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconTrash } from "@/components/_Icon/IconTrash";
@@ -70,7 +70,7 @@ export default function InvestmentNews() {
),
}}
/>
<ViewWrapper>
<OS_Wrapper>
<BaseBox>
<StackCustom>
{data && data?.imageId && (
@@ -82,7 +82,7 @@ export default function InvestmentNews() {
<TextCustom>{(data && data?.deskripsi) || "-"}</TextCustom>
</StackCustom>
</BaseBox>
</ViewWrapper>
</OS_Wrapper>
<DrawerCustom
isVisible={openDrawer}

View File

@@ -3,11 +3,11 @@ import {
ButtonCustom,
InformationBox,
LandscapeFrameUploaded,
OS_Wrapper,
Spacing,
StackCustom,
TextAreaCustom,
TextInputCustom,
ViewWrapper,
} from "@/components";
import DIRECTORY_ID from "@/constants/directory-id";
import { apiInvestmentCreateNews } from "@/service/api-client/api-investment";
@@ -80,7 +80,10 @@ export default function InvestmentAddNews() {
};
return (
<ViewWrapper>
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
>
<StackCustom gap={"xs"}>
<InformationBox text="Pengunggahan foto ke aplikasi bersifat opsional dan tidak diwajibkan, Anda dapat menyimpan berita tanpa mengunggah foto." />
<LandscapeFrameUploaded image={image?.uri} />
@@ -123,7 +126,6 @@ export default function InvestmentAddNews() {
Simpan
</ButtonCustom>
</StackCustom>
<Spacing />
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -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 (
<ViewWrapper>
<OS_Wrapper>
<StackCustom>
<BaseBox>
<StackCustom>
@@ -110,6 +110,6 @@ export default function InvestmentFailed() {
</StackCustom>
</BaseBox>
</StackCustom>
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -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 (
<>
<ViewWrapper footerComponent={buttonSubmit()}>
<BaseBox>
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={buttonSubmit()}
>
<BaseBox>
<StackCustom gap={"xs"}>
<Grid>
<Grid.Col span={6}>
@@ -165,7 +168,6 @@ export default function InvestmentInvest() {
</Grid>
</StackCustom>
</BaseBox>
</ViewWrapper>
</>
</OS_Wrapper>
);
}

View File

@@ -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 (
<>
<ViewWrapper>
<OS_Wrapper>
<BaseBox>
<StackCustom>
<TextCustom align="center" bold>
@@ -35,7 +35,7 @@ export default function InvestmentProcess() {
</Grid.Col>
</Grid>
</BaseBox> */}
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -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 (
<ViewWrapper footerComponent={buttonSubmit()}>
<OS_Wrapper footerComponent={buttonSubmit()}>
<RadioGroup value={select} onChange={setSelect}>
{_.isEmpty(listBank)
? []
@@ -96,6 +96,6 @@ export default function InvestmentSelectBank() {
</BaseBox>
))}
</RadioGroup>
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -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 (
<ViewWrapper>
<OS_Wrapper>
<StackCustom>
<BaseBox>
<StackCustom>
@@ -110,6 +110,6 @@ export default function InvestmentSuccess() {
</StackCustom>
</BaseBox>
</StackCustom>
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -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() {
}}
/>
<ViewWrapper>
<OS_Wrapper>
<Invesment_DetailDataPublishSection
status={status as string}
data={data}
bottomSection={bottomSection}
buttonSection={buttonSection}
/>
</ViewWrapper>
</OS_Wrapper>
{/* ========= Draft Drawer ========= */}
<DrawerCustom

View File

@@ -7,10 +7,10 @@ import {
CenterCustom,
InformationBox,
LoaderCustom,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import DIRECTORY_ID from "@/constants/directory-id";
import {
@@ -116,7 +116,7 @@ export default function InvestmentEditProspectus() {
</BoxButtonOnFooter>
);
return (
<ViewWrapper footerComponent={!loadingGet && buttonFooter}>
<OS_Wrapper footerComponent={!loadingGet && buttonFooter}>
<StackCustom gap={"xs"}>
<InformationBox text="File prospektus wajib untuk diupload, agar calon investor paham dengan prospek investasi yang akan anda jalankan kedepan." />
<Spacing />
@@ -153,6 +153,6 @@ export default function InvestmentEditProspectus() {
Upload
</ButtonCenteredOnly>
</StackCustom>
</ViewWrapper>
</OS_Wrapper>
);
}

View File

@@ -6,7 +6,7 @@ import {
InformationBox,
LandscapeFrameUploaded,
LoaderCustom,
NewWrapper,
OS_Wrapper,
SelectCustom,
Spacing,
StackCustom,
@@ -199,7 +199,9 @@ export default function InvestmentEdit() {
};
return (
<NewWrapper
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={
<BoxButtonOnFooter>
<ButtonCustom isLoading={isLoading} onPress={handleSubmitUpdate}>
@@ -350,6 +352,6 @@ export default function InvestmentEdit() {
<Spacing />
</StackCustom>
</NewWrapper>
</OS_Wrapper>
);
}

View File

@@ -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() {
}}
/>
<ViewWrapper>
<OS_Wrapper>
<Invesment_DetailDataPublishSection
status={"publish"}
data={data}
bottomSection={bottomSection}
buttonSection={buttonSection}
/>
</ViewWrapper>
</OS_Wrapper>
{/* ========= Draft Drawer ========= */}
<DrawerCustom

View File

@@ -6,7 +6,7 @@ import {
CenterCustom,
InformationBox,
LandscapeFrameUploaded,
NewWrapper,
OS_Wrapper,
SelectCustom,
Spacing,
StackCustom,
@@ -185,7 +185,9 @@ export default function InvestmentCreate() {
// const [coba, setCoba] = useState("");
return (
<NewWrapper
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={
<BoxButtonOnFooter>
<ButtonCustom
@@ -373,7 +375,6 @@ export default function InvestmentCreate() {
<Spacing />
</StackCustom>
{/* <Spacing height={50} /> */}
</NewWrapper>
</OS_Wrapper>
);
}

View File

@@ -6,6 +6,7 @@ import {
} from "@/components/_Icon";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import BackButtonFromNotification from "@/components/Button/BackButtonFromNotification";
import { OS_ANDROID_HEIGHT, OS_IOS_HEIGHT } from "@/constants/constans-value";
import { TabsStyles } from "@/styles/tabs-styles";
import { router, Tabs, useLocalSearchParams } from "expo-router";
import { View } from "react-native";
@@ -30,12 +31,12 @@ function VotingTabsWrapper() {
ios: {
borderTopWidth: 0,
paddingTop: 12,
height: 80,
height: OS_IOS_HEIGHT,
},
android: {
borderTopWidth: 0,
paddingTop: 5,
height: 70 + paddingBottom,
height: OS_ANDROID_HEIGHT + paddingBottom,
},
}),
header: () => (

View File

@@ -7,10 +7,10 @@ import {
DrawerCustom,
LoaderCustom,
MenuDrawerDynamicGrid,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconArchive, IconContribution, IconEdit } from "@/components/_Icon";
@@ -119,7 +119,7 @@ export default function VotingDetailStatus() {
),
}}
/>
<ViewWrapper>
<OS_Wrapper>
{loadingGetData ? (
<LoaderCustom />
) : (
@@ -158,7 +158,7 @@ export default function VotingDetailStatus() {
<Spacing />
</>
)}
</ViewWrapper>
</OS_Wrapper>
{/* ========= Draft Drawer ========= */}
<DrawerCustom

View File

@@ -6,8 +6,8 @@ import {
DrawerCustom,
LoaderCustom,
MenuDrawerDynamicGrid,
OS_Wrapper,
Spacing,
ViewWrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconContribution } from "@/components/_Icon";
@@ -94,7 +94,7 @@ export default function VotingDetailContribution() {
}}
/>
<ViewWrapper>
<OS_Wrapper>
{loadingGetData ? (
<LoaderCustom />
) : (
@@ -116,7 +116,7 @@ export default function VotingDetailContribution() {
<Spacing />
</>
)}
</ViewWrapper>
</OS_Wrapper>
{/* ========= Publish Drawer ========= */}
<DrawerCustom

View File

@@ -5,7 +5,7 @@ import {
ButtonCustom,
CenterCustom,
LoaderCustom,
NewWrapper,
OS_Wrapper,
Spacing,
StackCustom,
TextAreaCustom,
@@ -189,7 +189,11 @@ export default function VotingEdit() {
};
return (
<NewWrapper footerComponent={buttonSubmit()}>
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={buttonSubmit()}
>
{loadingGetData ? (
<ListSkeletonComponent />
) : (
@@ -328,6 +332,6 @@ export default function VotingEdit() {
<Spacing />
</StackCustom>
)}
</NewWrapper>
</OS_Wrapper>
);
}

View File

@@ -6,8 +6,8 @@ import {
DrawerCustom,
LoaderCustom,
MenuDrawerDynamicGrid,
OS_Wrapper,
Spacing,
ViewWrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconContribution } from "@/components/_Icon";
@@ -94,7 +94,7 @@ export default function VotingDetailHistory() {
),
}}
/>
<ViewWrapper>
<OS_Wrapper>
{loadingGetData ? (
<LoaderCustom />
) : (
@@ -116,7 +116,7 @@ export default function VotingDetailHistory() {
<Spacing />
</>
)}
</ViewWrapper>
</OS_Wrapper>
{/* ========= Publish Drawer ========= */}
<DrawerCustom

View File

@@ -8,8 +8,8 @@ import {
InformationBox,
LoaderCustom,
MenuDrawerDynamicGrid,
OS_Wrapper,
StackCustom,
ViewWrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconArchive, IconContribution } from "@/components/_Icon";
@@ -32,6 +32,7 @@ import {
useLocalSearchParams,
} from "expo-router";
import React, { useCallback, useEffect, useState } from "react";
import { RefreshControl } from "react-native";
import Toast from "react-native-toast-message";
export default function VotingDetail() {
@@ -133,9 +134,9 @@ export default function VotingDetail() {
if (isEventFinished) {
return (
<ViewWrapper>
<OS_Wrapper>
<CustomSkeleton />
</ViewWrapper>
</OS_Wrapper>
);
}
@@ -155,7 +156,14 @@ export default function VotingDetail() {
}}
/>
<ViewWrapper>
<OS_Wrapper
refreshControl={
<RefreshControl
refreshing={loadingGetData}
onRefresh={handlerLoadData}
/>
}
>
{loadingGetData ? (
<LoaderCustom />
) : (
@@ -182,7 +190,7 @@ export default function VotingDetail() {
/>
</StackCustom>
)}
</ViewWrapper>
</OS_Wrapper>
{/* ========= Publish Drawer ========= */}
<DrawerCustom

View File

@@ -3,12 +3,11 @@ import {
BoxButtonOnFooter,
ButtonCustom,
CenterCustom,
NewWrapper,
OS_Wrapper,
Spacing,
StackCustom,
TextAreaCustom,
TextInputCustom,
ViewWrapper,
} from "@/components";
import DateTimePickerCustom from "@/components/DateInput/DateTimePickerCustom";
import { MainColor } from "@/constants/color-palet";
@@ -107,7 +106,11 @@ export default function VotingCreate() {
};
return (
<NewWrapper footerComponent={buttonSubmit()}>
<OS_Wrapper
enableKeyboardHandling
contentPaddingBottom={250}
footerComponent={buttonSubmit()}
>
<StackCustom gap={"xs"}>
<TextInputCustom
label="Judul Voting"
@@ -198,6 +201,6 @@ export default function VotingCreate() {
<Spacing />
</StackCustom>
</NewWrapper>
</OS_Wrapper>
);
}

View File

@@ -3,9 +3,9 @@ import {
BoxButtonOnFooter,
ButtonCustom,
LoaderCustom,
OS_Wrapper,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle";
import GridTwoView from "@/components/_ShareComponent/GridTwoView";
@@ -76,7 +76,7 @@ export default function AdminUserAccessDetail() {
return (
<>
<ViewWrapper
<OS_Wrapper
headerComponent={<AdminBackButtonAntTitle title={`Detail User`} />}
footerComponent={
data && (
@@ -108,7 +108,7 @@ export default function AdminUserAccessDetail() {
))}
</StackCustom>
)}
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -52,6 +52,12 @@ interface BaseProps {
* @default 16
*/
contentPadding?: number;
/**
* Disable flexGrow: 1 in contentContainerStyle
* Use this for screens with very large headers to fix scroll issues
* @default false
*/
disableFlexGrow?: boolean;
}
interface StaticModeProps extends BaseProps {
@@ -87,6 +93,7 @@ export function AndroidWrapper(props: AndroidWrapperProps) {
keyboardScrollOffset,
contentPaddingBottom,
contentPadding,
disableFlexGrow = false,
} = props;
// Default values (should be set by OS_Wrapper, but fallback for direct usage)
@@ -123,15 +130,12 @@ export function AndroidWrapper(props: AndroidWrapperProps) {
const listProps = props as ListModeProps;
return (
<TouchableWithoutFeedback onPress={Keyboard.dismiss} style={{ flex: 1 }}>
<KeyboardAvoidingView
behavior={undefined}
style={{ flex: 1, backgroundColor: MainColor.darkblue }}
>
{headerComponent && (
<View style={GStyles.stickyHeader}>{headerComponent}</View>
)}
<FlatList
<View style={{ flex: 1, backgroundColor: MainColor.darkblue }}>
{headerComponent && (
<View style={GStyles.stickyHeader}>{headerComponent}</View>
)}
<FlatList
style={{ flex: 1 }}
data={listProps.listData}
renderItem={listProps.renderItem}
keyExtractor={
@@ -145,13 +149,16 @@ export function AndroidWrapper(props: AndroidWrapperProps) {
ListFooterComponent={listProps.ListFooterComponent}
ListEmptyComponent={listProps.ListEmptyComponent}
contentContainerStyle={{
flexGrow: 1,
flexGrow: disableFlexGrow ? 0 : 1,
paddingBottom:
(footerComponent && !hideFooter ? OS_HEIGHT : 0) +
finalContentPaddingBottom,
padding: finalContentPadding,
}}
keyboardShouldPersistTaps="handled"
removeClippedSubviews={false}
stickyHeaderIndices={[]}
nestedScrollEnabled={true}
/>
{/* Footer - Fixed di bawah dengan width 100% */}
@@ -174,8 +181,7 @@ export function AndroidWrapper(props: AndroidWrapperProps) {
{floatingButton && (
<View style={GStyles.floatingContainer}>{floatingButton}</View>
)}
</KeyboardAvoidingView>
</TouchableWithoutFeedback>
</View>
);
}
@@ -200,7 +206,7 @@ export function AndroidWrapper(props: AndroidWrapperProps) {
refreshControl={refreshControl}
style={{ flex: 1 }}
contentContainerStyle={{
flexGrow: 1,
flexGrow: disableFlexGrow ? 0 : 1,
paddingBottom:
(footerComponent && !hideFooter ? OS_HEIGHT : 0) +
finalContentPaddingBottom,

View File

@@ -22,6 +22,7 @@ interface BaseProps {
edgesFooter?: NativeSafeAreaViewProps["edges"];
style?: StyleProp<ViewStyle>;
refreshControl?: ScrollViewProps["refreshControl"];
disableFlexGrow?: boolean;
}
// ========== Static Mode Props ==========
@@ -123,13 +124,14 @@ export function OS_Wrapper(props: OS_WrapperProps) {
keyboardScrollOffset = 100,
contentPaddingBottom = 100,
contentPadding = 0,
disableFlexGrow = false,
...wrapperProps
} = props;
// iOS uses IOSWrapper (based on NewWrapper)
if (Platform.OS === "ios") {
// Keyboard handling props are ignored on iOS
return <IOSWrapper {...(wrapperProps as any)} />;
return <IOSWrapper {...(wrapperProps as any)} disableFlexGrow={disableFlexGrow} />;
}
// Android uses AndroidWrapper (with keyboard handling support)
@@ -140,6 +142,7 @@ export function OS_Wrapper(props: OS_WrapperProps) {
keyboardScrollOffset={keyboardScrollOffset}
contentPaddingBottom={contentPaddingBottom}
contentPadding={contentPadding}
disableFlexGrow={disableFlexGrow}
/>
);
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,15 @@
{
"originHash" : "e70d3525c8e2819a8b34f22909815dab5c700c25a06c32388f3930f7b3627768",
"pins" : [
{
"identity" : "maplibre-gl-native-distribution",
"kind" : "remoteSourceControl",
"location" : "https://github.com/maplibre/maplibre-gl-native-distribution",
"state" : {
"revision" : "c68c970ff3ece56cfc3b36849db70167fa208beb",
"version" : "6.17.1"
}
}
],
"version" : 3
}

View File

@@ -3,13 +3,13 @@ import {
BadgeCustom,
CenterCustom,
Grid,
OS_Wrapper,
SearchInput,
StackCustom,
TextCustom,
} from "@/components";
import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox";
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";
@@ -101,7 +101,7 @@ export function Admin_ScreenUserAccess() {
);
return (
<NewWrapper
<OS_Wrapper
headerComponent={
<AdminComp_BoxTitle
title="User Access"

View File

@@ -1,7 +1,7 @@
import FloatingButton from "@/components/Button/FloatingButton";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { OS_Wrapper } from "@/components";
import { MainColor } from "@/constants/color-palet";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { PADDING_INLINE, PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { usePagination } from "@/hooks/use-pagination";
import Donation_BoxPublish from "@/screens/Donation/BoxPublish";
@@ -37,7 +37,8 @@ export default function Donation_ScreenBeranda() {
});
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={({ item }) => (
<Donation_BoxPublish data={item} id={item.id} />

View File

@@ -4,11 +4,13 @@ import {
BaseBox,
Grid,
InformationBox,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
} from "@/components";
import { MainColor } from "@/constants/color-palet";
import { PADDING_INLINE } from "@/constants/constans-value";
import { usePagination } from "@/hooks/use-pagination";
import {
apiDonationDisbursementOfFundsListById,
@@ -23,7 +25,6 @@ import React, { useState } from "react";
import { RefreshControl, View } from "react-native";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { Divider } from "react-native-paper";
interface Donation_ScreenFundDisbursementProps {
@@ -155,7 +156,8 @@ export default function Donation_ScreenFundDisbursement({
);
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
onEndReached={pagination.loadMore}

View File

@@ -3,11 +3,13 @@ import {
BaseBox,
Grid,
LoaderCustom,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
} from "@/components";
import { MainColor } from "@/constants/color-palet";
import { PADDING_INLINE } from "@/constants/constans-value";
import { usePagination } from "@/hooks/use-pagination";
import { apiDonationListOfDonaturById } from "@/service/api-client/api-donation";
import { formatCurrencyDisplay } from "@/utils/formatCurrencyDisplay";
@@ -16,7 +18,6 @@ import dayjs from "dayjs";
import { RefreshControl } from "react-native";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
interface Donation_ScreenListOfDonaturProps {
donationId: string;
@@ -80,7 +81,8 @@ export default function Donation_ScreenListOfDonatur({
});
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
hideFooter
listData={pagination.listData}
renderItem={renderItem}

View File

@@ -1,9 +1,9 @@
/* eslint-disable react-hooks/exhaustive-deps */
import { BackButton, DrawerCustom, MenuDrawerDynamicGrid } from "@/components";
import { BackButton, DrawerCustom, MenuDrawerDynamicGrid, OS_Wrapper } from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconPlus } from "@/components/_Icon";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { MainColor } from "@/constants/color-palet";
import { PADDING_INLINE } from "@/constants/constans-value";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { usePagination } from "@/hooks/use-pagination";
@@ -61,7 +61,8 @@ export default function Donation_ScreenListOfNews({
),
}}
/>
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
onEndReached={pagination.loadMore}

View File

@@ -3,13 +3,13 @@ import {
BaseBox,
DummyLandscapeImage,
Grid,
OS_Wrapper,
StackCustom,
TextCustom,
} from "@/components";
import FloatingButton from "@/components/Button/FloatingButton";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { MainColor } from "@/constants/color-palet";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { PADDING_INLINE, PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { useAuth } from "@/hooks/use-auth";
import { usePagination } from "@/hooks/use-pagination";
@@ -129,7 +129,8 @@ export default function Donation_ScreenMyDonation() {
);
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
onEndReached={pagination.loadMore}

View File

@@ -4,10 +4,11 @@ import {
DotButton,
DrawerCustom,
MenuDrawerDynamicGrid,
OS_Wrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconPlus } from "@/components/_Icon";
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 { usePagination } from "@/hooks/use-pagination";
@@ -71,7 +72,8 @@ export default function Donation_ScreenRecapOfNews({
),
}}
/>
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
onEndReached={pagination.loadMore}

View File

@@ -1,8 +1,7 @@
/* eslint-disable react-hooks/exhaustive-deps */
import { ScrollableCustom } from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { OS_Wrapper, ScrollableCustom } from "@/components";
import { MainColor } from "@/constants/color-palet";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { PADDING_INLINE, PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { useAuth } from "@/hooks/use-auth";
import { usePagination } from "@/hooks/use-pagination";
@@ -76,7 +75,8 @@ export default function Donation_ScreenStatus({
});
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
onEndReached={pagination.loadMore}

View File

@@ -1,8 +1,7 @@
import { TextCustom } from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { TextCustom, OS_Wrapper } from "@/components";
import FloatingButton from "@/components/Button/FloatingButton";
import { MainColor } from "@/constants/color-palet";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { PAGINATION_DEFAULT_TAKE, PADDING_INLINE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { usePagination } from "@/hooks/use-pagination";
import Event_BoxPublishSection from "@/screens/Event/BoxPublishSection";
@@ -52,7 +51,8 @@ export default function Event_ScreenBeranda() {
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderEventItem}
refreshControl={

View File

@@ -4,11 +4,11 @@ import {
BoxWithHeaderSection,
Spacing,
StackCustom,
TextCustom
TextCustom,
OS_Wrapper,
} from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { MainColor } from "@/constants/color-palet";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { PAGINATION_DEFAULT_TAKE, PADDING_INLINE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { useAuth } from "@/hooks/use-auth";
import { usePagination } from "@/hooks/use-pagination";
@@ -82,7 +82,8 @@ export default function Event_ScreenContribution() {
// }, []);
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderEventItem}
refreshControl={

View File

@@ -1,8 +1,7 @@
/* eslint-disable react-hooks/exhaustive-deps */
import { ButtonCustom, Spacing, TextCustom } from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { ButtonCustom, Spacing, TextCustom, OS_Wrapper } from "@/components";
import { AccentColor, MainColor } from "@/constants/color-palet";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { PAGINATION_DEFAULT_TAKE, PADDING_INLINE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { useAuth } from "@/hooks/use-auth";
import { usePagination } from "@/hooks/use-pagination";
@@ -100,8 +99,9 @@ export default function Event_ScreenHistory() {
);
return (
<NewWrapper
<OS_Wrapper
headerComponent={headerComponent}
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderEventItem}
refreshControl={

View File

@@ -2,11 +2,11 @@
import {
AvatarUsernameAndOtherComponent,
BadgeCustom,
BaseBox
BaseBox,
OS_Wrapper,
} from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { MainColor } from "@/constants/color-palet";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { PADDING_INLINE, PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { usePagination } from "@/hooks/use-pagination";
import {
@@ -102,7 +102,8 @@ export default function Event_ScreenListOfParticipants() {
);
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderParticipantItem}
refreshControl={

View File

@@ -5,9 +5,9 @@ import {
ScrollableCustom,
StackCustom,
TextCustom,
OS_Wrapper,
} from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { PAGINATION_DEFAULT_TAKE, PADDING_INLINE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { useAuth } from "@/hooks/use-auth";
import { usePagination } from "@/hooks/use-pagination";
@@ -103,8 +103,9 @@ export default function Event_ScreenStatus() {
);
return (
<NewWrapper
<OS_Wrapper
hideFooter
contentPadding={PADDING_INLINE}
headerComponent={<View style={{ paddingTop: 8 }}>{tabsComponent}</View>}
listData={pagination.listData}
renderItem={renderEventItem}

View File

@@ -3,12 +3,11 @@ import {
ButtonCustom,
DrawerCustom,
LoaderCustom,
NewWrapper,
OS_Wrapper,
Spacing,
TextAreaCustom,
TextCustom,
TextInputCustom,
ViewWrapper,
} from "@/components";
import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom";
import AlertWarning from "@/components/Alert/AlertWarning";
@@ -193,7 +192,7 @@ export default function DetailForum() {
return (
<>
<NewWrapper
<OS_Wrapper
// headerComponent={headerComponent()}
>
{!data && !listComment ? (
@@ -225,7 +224,7 @@ export default function DetailForum() {
))}
</>
)}
</NewWrapper>
</OS_Wrapper>
{/* Posting Drawer */}
<DrawerCustom

View File

@@ -3,13 +3,12 @@ import {
ButtonCustom,
DrawerCustom,
LoaderCustom,
NewWrapper,
OS_Wrapper,
Spacing,
StackCustom,
TextAreaCustom,
TextCustom,
TextInputCustom,
ViewWrapper,
} from "@/components";
import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom";
import AlertWarning from "@/components/Alert/AlertWarning";
@@ -34,6 +33,7 @@ import _ from "lodash";
import { useCallback, useEffect, useState } from "react";
import { RefreshControl } from "react-native";
import ListSkeletonComponent from "@/components/_ShareComponent/ListSkeletonComponent";
import { PADDING_INLINE } from "@/constants/constans-value";
export default function DetailForum2() {
const { id } = useLocalSearchParams();
@@ -213,20 +213,6 @@ export default function DetailForum2() {
}}
/>
)
// !data || !commentPagination.listData ? (
// // <ListSkeletonComponent height={120} />
// <LoaderCustom />
// ) : (
// <Forum_CommentarBoxSection
// key={item.id}
// data={item}
// onSetData={(value) => {
// setCommentId(value.setCommentId);
// setOpenDrawerCommentar(value.setOpenDrawer);
// setCommentAuthorId(value.setCommentAuthorId);
// }}
// />
// );
// Generate pagination components using helper
const { ListEmptyComponent, ListFooterComponent } =
@@ -242,8 +228,9 @@ export default function DetailForum2() {
return (
<>
<NewWrapper
// headerComponent={}
<OS_Wrapper
contentPadding={PADDING_INLINE}
disableFlexGrow
listData={commentPagination.listData}
renderItem={renderCommentItem}
refreshControl={

View File

@@ -1,7 +1,7 @@
import {
BackButton,
AvatarComp,
ViewWrapper,
OS_Wrapper,
SearchInput,
FloatingButton,
LoaderCustom,
@@ -71,7 +71,7 @@ export default function Forum_ViewBeranda() {
}}
/>
<ViewWrapper
<OS_Wrapper
headerComponent={
<SearchInput
placeholder="Cari topik diskusi"
@@ -107,7 +107,7 @@ export default function Forum_ViewBeranda() {
/>
))
)}
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -6,11 +6,11 @@ import {
LoaderCustom,
SearchInput,
StackCustom,
TextCustom, // ← gunakan NewWrapper yang sudah diperbaiki
TextCustom,
OS_Wrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import SkeletonCustom from "@/components/_ShareComponent/SkeletonCustom";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { useAuth } from "@/hooks/use-auth";
import Forum_BoxDetailSection from "@/screens/Forum/DiscussionBoxSection";
import { apiForumGetAll } from "@/service/api-client/api-forum";
@@ -172,8 +172,8 @@ export default function Forum_ViewBeranda2() {
}}
/>
{/* 🔹 NewWrapper dalam mode list */}
<NewWrapper
{/* 🔹 OS_Wrapper dalam mode list */}
<OS_Wrapper
// Header global (di atas FlatList, sticky)
headerComponent={
<View style={{ paddingHorizontal: 16, paddingTop: 8 }}>

View File

@@ -2,11 +2,12 @@ import {
AvatarComp,
BackButton,
FloatingButton,
OS_Wrapper,
SearchInput,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { MainColor } from "@/constants/color-palet";
import { PADDING_INLINE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { useAuth } from "@/hooks/use-auth";
import { usePagination } from "@/hooks/use-pagination";
@@ -75,12 +76,6 @@ export default function Forum_ViewBeranda3() {
/>
);
// const ListHeaderComponent = (
// <View style={{ paddingVertical: 8, alignItems: "center" }}>
// <TextCustom>Diskusi Terbaru</TextCustom>
// </View>
// );
return (
<>
<Stack.Screen
@@ -105,8 +100,9 @@ export default function Forum_ViewBeranda3() {
}}
/>
<NewWrapper
<OS_Wrapper
hideFooter
contentPadding={PADDING_INLINE}
headerComponent={
<View style={{ paddingTop: 8 }}>
<SearchInput

View File

@@ -7,9 +7,9 @@ import {
FloatingButton,
Grid,
LoaderCustom,
OS_Wrapper,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import { useAuth } from "@/hooks/use-auth";
import Forum_BoxDetailSection from "@/screens/Forum/DiscussionBoxSection";
@@ -66,7 +66,7 @@ export default function View_Forumku() {
return (
<>
<ViewWrapper
<OS_Wrapper
floatingButton={
user?.id === id && (
<FloatingButton
@@ -121,7 +121,7 @@ export default function View_Forumku() {
</>
)}
</StackCustom>
</ViewWrapper>
</OS_Wrapper>
{/* Drawer Komponen Eksternal */}
<DrawerCustom

View File

@@ -6,11 +6,11 @@ import {
FloatingButton,
Grid,
LoaderCustom,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
} from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import NoDataText from "@/components/_ShareComponent/NoDataText";
import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom";
import { MainColor } from "@/constants/color-palet";
@@ -24,6 +24,7 @@ import { router, useLocalSearchParams } from "expo-router";
import _ from "lodash";
import { useEffect, useState } from "react";
import { RefreshControl, View } from "react-native";
import { PADDING_INLINE } from "@/constants/constans-value";
export default function View_Forumku2() {
const { id } = useLocalSearchParams();
@@ -120,7 +121,8 @@ export default function View_Forumku2() {
return (
<>
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
floatingButton={
user?.id === id && (
<FloatingButton

View File

@@ -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 (
<NewWrapper
<OS_Wrapper
hideFooter
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderDocumentItem}
refreshControl={

View File

@@ -4,13 +4,13 @@ import {
BackButton,
DotButton,
DrawerCustom,
MenuDrawerDynamicGrid
MenuDrawerDynamicGrid,
OS_Wrapper,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconEdit } from "@/components/_Icon";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { MainColor } from "@/constants/color-palet";
import { ICON_SIZE_SMALL, PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { ICON_SIZE_SMALL, 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";
@@ -143,8 +143,9 @@ export default function Investment_ScreenRecapOfDocument() {
}}
/>
<NewWrapper
<OS_Wrapper
hideFooter
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderDocumentItem}
refreshControl={

View File

@@ -5,11 +5,12 @@ import {
DrawerCustom,
LoaderCustom,
MenuDrawerDynamicGrid,
OS_Wrapper,
TextCustom,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconPlus } from "@/components/_Icon";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { PADDING_INLINE } from "@/constants/constans-value";
import { usePagination } from "@/hooks/use-pagination";
import { apiInvestmentGetNews } from "@/service/api-client/api-investment";
import { router, Stack, useFocusEffect } from "expo-router";
@@ -75,8 +76,9 @@ export default function Investment_ScreenListOfNews({
}}
/>
<NewWrapper
<OS_Wrapper
hideFooter
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
onEndReached={pagination.loadMore}

View File

@@ -6,19 +6,19 @@ import {
DrawerCustom,
LoaderCustom,
MenuDrawerDynamicGrid,
OS_Wrapper,
Spacing,
TextCustom,
} from "@/components";
import AppHeader from "@/components/_ShareComponent/AppHeader";
import { IconPlus } from "@/components/_Icon";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { PAGINATION_DEFAULT_TAKE, PADDING_INLINE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { usePagination } from "@/hooks/use-pagination";
import { apiInvestmentGetNews } from "@/service/api-client/api-investment";
import { router, Stack, useFocusEffect } from "expo-router";
import { useCallback, useState } from "react";
import { RefreshControl } from "react-native";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import Investment_BoxNews from "./BoxNews";
interface InvestmentRecapOfNewsProps {
@@ -76,8 +76,9 @@ export default function Investment_ScreenRecapOfNews({
),
}}
/>
<NewWrapper
<OS_Wrapper
hideFooter
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
onEndReached={pagination.loadMore}

View File

@@ -1,8 +1,9 @@
import {
FloatingButton,
OS_Wrapper,
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 { usePagination } from "@/hooks/use-pagination";
@@ -46,7 +47,8 @@ export default function Investment_ScreenBursa() {
);
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderInvestmentItem}
refreshControl={

View File

@@ -3,12 +3,12 @@ import {
AvatarUsernameAndOtherComponent,
BoxWithHeaderSection,
CenterCustom,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
} from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { PAGINATION_DEFAULT_TAKE, PADDING_INLINE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { usePagination } from "@/hooks/use-pagination";
import { apiInvestmentGetInvestorById } from "@/service/api-client/api-investment";
@@ -66,8 +66,9 @@ export default function Investment_ScreenInvestor({
});
return (
<NewWrapper
<OS_Wrapper
hideFooter
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
onEndReached={pagination.loadMore}

View File

@@ -5,10 +5,10 @@ import {
ButtonCustom,
Grid,
InformationBox,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
ViewWrapper,
} from "@/components";
import CopyButton from "@/components/Button/CoyButton";
import { MainColor } from "@/constants/color-palet";
@@ -94,7 +94,7 @@ export default function Investment_ScreenInvoice() {
return (
<>
<ViewWrapper>
<OS_Wrapper>
<StackCustom>
<InformationBox text="Mohon transfer ke rekening dibawah" />
<BaseBox>
@@ -224,7 +224,7 @@ export default function Investment_ScreenInvoice() {
</ButtonCustom>
</StackCustom>
<Spacing />
</ViewWrapper>
</OS_Wrapper>
</>
);
}

View File

@@ -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 (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
onEndReached={pagination.loadMore}

View File

@@ -1,6 +1,6 @@
/* eslint-disable react-hooks/exhaustive-deps */
import { ScrollableCustom, TextCustom } from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { OS_Wrapper, ScrollableCustom, TextCustom } from "@/components";
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";
@@ -83,7 +83,8 @@ export default function Investment_ScreenPortofolio() {
);
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
hideFooter
headerComponent={tabsComponent}
listData={pagination.listData}

View File

@@ -3,12 +3,13 @@ import {
BadgeCustom,
BaseBox,
Grid,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
} from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import NoDataText from "@/components/_ShareComponent/NoDataText";
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";
@@ -128,7 +129,8 @@ export default function Investment_ScreenTransaction() {
);
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
hideFooter
listData={pagination.listData}
renderItem={renderTransactionItem}

View File

@@ -9,7 +9,7 @@ import { useCallback } from "react";
import { RefreshControl } from "react-native";
import Portofolio_BoxView from "./BoxPortofolioView";
import NoDataText from "@/components/_ShareComponent/NoDataText";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { PADDING_INLINE, PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
export default function ViewListPortofolio() {
const { id } = useLocalSearchParams();
@@ -19,9 +19,9 @@ export default function ViewListPortofolio() {
fetchFunction: async (page) => {
return await apiGetPortofolio({
id: id as string,
page: String(page) // API expects string
page: String(page), // API expects string
});
// return response.data;
// return response.data;
},
pageSize: PAGINATION_DEFAULT_TAKE,
dependencies: [id],
@@ -41,18 +41,20 @@ export default function ViewListPortofolio() {
);
// Generate pagination components using helper
const { ListEmptyComponent, ListFooterComponent } = createPaginationComponents({
loading: pagination.loading,
refreshing: pagination.refreshing,
listData: pagination.listData,
isInitialLoad: pagination.isInitialLoad,
emptyMessage: "Tidak ada portofolio",
skeletonCount: 3,
skeletonHeight: 100,
});
const { ListEmptyComponent, ListFooterComponent } =
createPaginationComponents({
loading: pagination.loading,
refreshing: pagination.refreshing,
listData: pagination.listData,
isInitialLoad: pagination.isInitialLoad,
emptyMessage: "Tidak ada portofolio",
skeletonCount: 3,
skeletonHeight: 100,
});
return (
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
refreshControl={

View File

@@ -1,6 +1,6 @@
/* eslint-disable react-hooks/exhaustive-deps */
import { FloatingButton, SearchInput } from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { FloatingButton, OS_Wrapper, SearchInput } from "@/components";
import { PADDING_INLINE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { useAuth } from "@/hooks/use-auth";
import { usePagination } from "@/hooks/use-pagination";
@@ -58,7 +58,8 @@ export default function Voting_ScreenBeranda() {
);
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
ListEmptyComponent={ListEmptyComponent}

View File

@@ -1,5 +1,6 @@
/* eslint-disable react-hooks/exhaustive-deps */
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { OS_Wrapper } from "@/components";
import { PADDING_INLINE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { useAuth } from "@/hooks/use-auth";
import { usePagination } from "@/hooks/use-pagination";
@@ -52,7 +53,8 @@ export default function Voting_ScreenContribution() {
);
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
ListEmptyComponent={ListEmptyComponent}

View File

@@ -1,8 +1,7 @@
/* eslint-disable react-hooks/exhaustive-deps */
import { ButtonCustom, Spacing, TextCustom } from "@/components";
import NewWrapper from "@/components/_ShareComponent/NewWrapper";
import { ButtonCustom, OS_Wrapper, Spacing, TextCustom } from "@/components";
import { AccentColor, MainColor } from "@/constants/color-palet";
import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { PADDING_INLINE, PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value";
import { createPaginationComponents } from "@/helpers/paginationHelpers";
import { useAuth } from "@/hooks/use-auth";
import { usePagination } from "@/hooks/use-pagination";
@@ -93,7 +92,8 @@ export default function Voting_ScreenHistory() {
);
return (
<NewWrapper
<OS_Wrapper
contentPadding={PADDING_INLINE}
headerComponent={headerComponent}
listData={pagination.listData}
renderItem={renderVotingItem}

Some files were not shown because too many files have changed in this diff Show More