Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beasy-mobile
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
4
Issues
4
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
G
beasy-mobile
Commits
44507987
Commit
44507987
authored
Jun 18, 2024
by
G
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
useWave hook to handle most of the wave payment logic
parent
1a0f2ebb
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
119 additions
and
0 deletions
+119
-0
useWave.tsx
src/hooks/useWave.tsx
+119
-0
No files found.
src/hooks/useWave.tsx
0 → 100644
View file @
44507987
import
{
useModalsManagerContext
}
from
"@/contexts/ModalsManagerContext"
;
import
{
type
IwavePaymentStarter
,
getTransactionStatus
,
initTransaction
,
}
from
"@/utils/requests/wavePayment"
;
import
LoadingModal
from
"@components/modals/LoadingModal"
;
import
{
LOG
}
from
"@logger"
;
import
{
useMutation
,
useQueryClient
}
from
"@tanstack/react-query"
;
import
*
as
WebBrowser
from
"expo-web-browser"
;
import
{
useState
}
from
"react"
;
const
log
=
LOG
.
extend
(
"useWave"
);
const
paymentObjectDefault
:
IwavePaymentStarter
=
{
// biome-ignore lint/style/useNamingConvention: <api>
type_paiement
:
2
,
marchand
:
"1"
,
service
:
"1"
,
montant
:
0
,
};
const
useWave
=
()
=>
{
const
{
showModal
,
closeModal
}
=
useModalsManagerContext
();
const
[
isBrowserOpen
,
setIsBrowserOpen
]
=
useState
(
false
);
const
queryClient
=
useQueryClient
();
// Mutations
const
waveTransactionInitializerMutation
=
useMutation
({
mutationFn
:
(
amount
:
number
)
=>
initTransaction
({
...
paymentObjectDefault
,
montant
:
amount
,
}),
onSuccess
:
(
data
)
=>
{},
onError
:
(
err
)
=>
{
log
.
error
(
"waveTransactionInitializerMutation |"
,
err
);
},
});
const
waveTransactionStatusMutation
=
useMutation
({
mutationFn
:
(
orderId
:
string
)
=>
getTransactionStatus
(
orderId
),
onSuccess
:
(
data
)
=>
{
log
.
debug
(
"waveTransactionStatusMutation request success"
);
},
onError
:
(
err
)
=>
{
log
.
error
(
"waveTransactionStatusMutation |"
,
err
);
},
});
// Browser stuff
const
handlePaymentUsingBrowser
=
async
(
url
:
string
)
=>
{
log
.
debug
(
"handlePaymentUsingBrowser | Opening the browser at url :: "
,
url
);
setIsBrowserOpen
(
true
);
const
result
=
await
WebBrowser
.
openBrowserAsync
(
url
);
// setResult(result);
log
.
debug
(
"handlePaymentUsingBrowser | Result ::"
,
result
);
setIsBrowserOpen
(
false
);
};
const
openBrowserThenCheckStatus
=
async
(
paymentUrl
:
string
,
orderId
:
string
)
=>
{
try
{
await
handlePaymentUsingBrowser
(
paymentUrl
);
log
.
info
(
"openBrowserThenCheckStatus | Verifying transaction status..."
);
showModal
(<
LoadingModal
message=
"Vérification du statut de la transaction..."
/>);
await
waveTransactionStatusMutation
.
mutateAsync
(
orderId
);
closeModal
();
// navigation?.getParent()?.navigate("paymentResultScreen");
}
catch
(
error
)
{
log
.
error
(
"openBrowserThenCheckStatus |"
,
error
);
// if (error instanceof Error) {
// if (error.name === "ORANGE_PAYMENT_IN_PROGRESS") {
// log.warn("openBrowserThenCheckStatus | ORANGE_PAYMENT_IN_PROGRESS");
// await showModal(
// <InformationModal
// message="Le payment est toujours en cours."
// actionLabel="Rééssayer"
// onPress={() => openBrowserThenCheckStatus(paymentUrl, orderId)}
// />,
// );
// } else if (error.name === "ORANGE_PAYMENT_FAILED") {
// showModal(<ErrorModal message="Le paiment à échoué." />);
// log.error("openBrowserThenCheckStatus | ORANGE_PAYMENT_FAILED");
// }
// } else {
// log.error("openBrowserThenCheckStatus |", error);
// closeModal();
// throw error;
// }
}
};
// Handlers
const
waveTransactionHandler
=
async
(
amount
:
number
)
=>
{
try
{
showModal
(<
LoadingModal
message=
"Initialization de la transaction."
/>);
const
response
=
await
waveTransactionInitializerMutation
.
mutateAsync
(
amount
);
log
.
info
(
"waveTransactionHandler :: "
,
response
.
wave_launch_url
);
log
.
info
(
"Opening browser for payment..."
);
await
openBrowserThenCheckStatus
(
response
.
wave_launch_url
,
response
.
id
);
}
catch
(
error
)
{
log
.
error
(
"waveTransactionHandler |"
,
error
);
throw
error
;
}
};
return
{
waveTransactionInitializerMutation
,
waveTransactionHandler
,
};
};
export
default
useWave
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment