Add:
- (user)/donation/[id]/(transaction-flow)/[invoiceId]

Fix:
Integrasi dalam alur transaksi
- Buat invoice dan list transaksi

### No Issue
This commit is contained in:
2025-10-07 17:40:54 +08:00
parent 7c82e8b588
commit a980397640
11 changed files with 284 additions and 86 deletions

View File

@@ -5,24 +5,93 @@ import {
ViewWrapper,
} from "@/components";
import { RadioCustom, RadioGroup } from "@/components/Radio/RadioCustom";
import { LOCAL_STORAGE_KEY } from "@/constants/local-storage-key";
import { useAuth } from "@/hooks/use-auth";
import { dummyMasterBank } from "@/lib/dummy-data/_master/bank";
import { router, useLocalSearchParams } from "expo-router";
import { useState } from "react";
import { apiDonationCreateInvoice } from "@/service/api-client/api-donation";
import { apiMasterBank } from "@/service/api-client/api-master";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { router, useFocusEffect, useLocalSearchParams } from "expo-router";
import _ from "lodash";
import { useCallback, useEffect, useState } from "react";
export default function DonationSelectBank() {
const { id, transaction } = useLocalSearchParams();
const [value, setValue] = useState<any | number>("");
const { user } = useAuth();
const { id } = useLocalSearchParams();
console.log("id", id);
const [select, setSelect] = useState<any | number>("");
const [listBank, setListBank] = useState<any>([]);
const [isLoading, setIsLoading] = useState<boolean>(false);
useEffect(() => {
loadListBank();
}, []);
const loadListBank = async () => {
try {
const response = await apiMasterBank();
setListBank(response.data);
} catch (error) {
console.log("[ERROR]", error);
setListBank([]);
}
};
const handlerSubmit = async () => {
try {
setIsLoading(true);
const dataStorage = await AsyncStorage.getItem(
LOCAL_STORAGE_KEY.transactionDonation
);
if (dataStorage) {
const storage = JSON.parse(dataStorage);
const newData = {
...storage,
bankId: select,
authorId: user?.id,
};
console.log("[NEW DATA]", newData);
const response = await apiDonationCreateInvoice({
id: id as string,
data: newData,
});
console.log("[RESPONSE CREATE>>]", response);
if (response.success) {
const invoiceId = response.data.id;
const delStorage = await AsyncStorage.removeItem(
LOCAL_STORAGE_KEY.transactionDonation
);
console.log("[DEL STORAGE]", delStorage);
router.replace(
`/(application)/(user)/donation/[id]/(transaction-flow)/${invoiceId}/invoice`
);
} else {
console.log("[FAILED]", response);
}
}
} catch (error) {
console.log("[ERROR]", error);
} finally {
setIsLoading(false);
}
};
const buttonSubmit = () => {
return (
<>
<BoxButtonOnFooter>
<ButtonCustom
onPress={() =>
router.replace(
`/(application)/(user)/donation/${id}/(transaction-flow)/${transaction}/invoice`
)
}
isLoading={isLoading}
disabled={!select}
onPress={() => handlerSubmit()}
>
Pilih
</ButtonCustom>
@@ -32,12 +101,14 @@ export default function DonationSelectBank() {
};
return (
<ViewWrapper footerComponent={buttonSubmit()}>
<RadioGroup value={value} onChange={setValue}>
{dummyMasterBank.map((item) => (
<BaseBox key={item.name}>
<RadioCustom label={item.name} value={item.code} />
</BaseBox>
))}
<RadioGroup value={select} onChange={setSelect}>
{_.isEmpty(listBank)
? []
: listBank?.map((item: any, index: number) => (
<BaseBox key={index}>
<RadioCustom label={item.namaBank} value={item.id} />
</BaseBox>
))}
</RadioGroup>
</ViewWrapper>
);