Files
hipmi-mobile/screens/Invesment/ScreenInvestor.tsx
bagasbanuna 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

86 lines
2.5 KiB
TypeScript

/* eslint-disable react-hooks/exhaustive-deps */
import {
AvatarUsernameAndOtherComponent,
BoxWithHeaderSection,
CenterCustom,
OS_Wrapper,
Spacing,
StackCustom,
TextCustom,
} from "@/components";
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";
import { formatCurrencyDisplay } from "@/utils/formatCurrencyDisplay";
import { RefreshControl } from "react-native";
interface InvestmentInvestorProps {
investmentId: string;
}
export default function Investment_ScreenInvestor({
investmentId,
}: InvestmentInvestorProps) {
const pagination = usePagination({
fetchFunction: async (page) => {
return await apiInvestmentGetInvestorById({
id: investmentId,
page: String(page),
});
},
pageSize: PAGINATION_DEFAULT_TAKE,
dependencies: [investmentId],
onError: (error) => {
console.error("Error fetching investors:", error);
},
});
const renderItem = ({ item }: { item: any }) => (
<BoxWithHeaderSection>
<StackCustom>
<AvatarUsernameAndOtherComponent
avatar={item?.Author?.Profile?.imageId}
name={item?.Author?.username}
avatarHref={`/profile/${item?.Author?.Profile?.id}`}
/>
<CenterCustom>
<TextCustom size="large" bold>
Rp. {formatCurrencyDisplay(item?.nominal)}
</TextCustom>
</CenterCustom>
</StackCustom>
<Spacing height={10} />
</BoxWithHeaderSection>
);
const { ListEmptyComponent, ListFooterComponent } =
createPaginationComponents({
loading: pagination.loading,
refreshing: pagination.refreshing,
listData: pagination.listData,
isInitialLoad: pagination.isInitialLoad,
emptyMessage: "Tidak ada investor",
skeletonCount: PAGINATION_DEFAULT_TAKE,
skeletonHeight: 120,
});
return (
<OS_Wrapper
hideFooter
contentPadding={PADDING_INLINE}
listData={pagination.listData}
renderItem={renderItem}
onEndReached={pagination.loadMore}
ListEmptyComponent={ListEmptyComponent}
ListFooterComponent={ListFooterComponent}
refreshControl={
<RefreshControl
refreshing={pagination.refreshing}
onRefresh={pagination.onRefresh}
/>
}
/>
);
}