Skip to content

Commit 0633e03

Browse files
committed
fix: reload signature data on retry
1 parent 4305a79 commit 0633e03

File tree

3 files changed

+57
-2
lines changed

3 files changed

+57
-2
lines changed

ts/features/fci/saga/index.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { fciQtspFilledDocumentUrlSelector } from "../store/reducers/fciQtspFille
2424
import { CreateSignatureBody } from "../../../../definitions/fci/CreateSignatureBody";
2525
import {
2626
fciSignatureRequestFromId,
27+
fciSignatureRequestRetryFromId,
2728
fciClearStateRequest,
2829
fciStartRequest,
2930
fciLoadQtspClauses,
@@ -94,6 +95,12 @@ export function* watchFciSaga(
9495

9596
yield* takeLatest(fciStartRequest, watchFciStartSaga);
9697

98+
// handle the request of retrying a signature, getting FCI signatureRequestDetails and restarting the signing flow
99+
yield* takeLatest(
100+
fciSignatureRequestRetryFromId,
101+
watchFciSignatureRequestRetrySaga
102+
);
103+
97104
yield* takeLatest(fciLoadQtspClauses.success, watchFciQtspClausesSaga);
98105

99106
// handle the request to get the document file from url
@@ -193,6 +200,37 @@ function* watchFciStartSaga(): SagaIterator {
193200
yield* put(fciMetadataRequest.request());
194201
}
195202

203+
/**
204+
* Handle the FCI signature request retry saga
205+
*/
206+
function* watchFciSignatureRequestRetrySaga(
207+
action: ActionType<typeof fciSignatureRequestRetryFromId>
208+
): SagaIterator {
209+
// get new SignatureRequestDetails
210+
yield* put(fciSignatureRequestFromId.request(action.payload));
211+
212+
while (true) {
213+
const result = yield* take([
214+
fciSignatureRequestFromId.success,
215+
fciSignatureRequestFromId.failure
216+
]);
217+
218+
if (isActionOf(fciSignatureRequestFromId.success, result)) {
219+
if (result.payload.id === action.payload) {
220+
// start a new signing flow
221+
yield* put(fciStartRequest());
222+
return;
223+
}
224+
225+
continue;
226+
}
227+
228+
if (isActionOf(fciSignatureRequestFromId.failure, result)) {
229+
return;
230+
}
231+
}
232+
}
233+
196234
/**
197235
* Clears cached file for the fci document preview
198236
* and reset the state to empty.

ts/features/fci/screens/valid/FciThankyouScreen.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,22 @@ import { useIODispatch, useIOSelector } from "../../../../store/hooks";
66
import { trackFciUxSuccess } from "../../analytics";
77
import LoadingComponent from "../../components/LoadingComponent";
88
import SignatureStatusComponent from "../../components/SignatureStatusComponent";
9-
import { fciEndRequest, fciStartRequest } from "../../store/actions";
9+
import {
10+
fciEndRequest,
11+
fciSignatureRequestRetryFromId
12+
} from "../../store/actions";
1013
import { fciDocumentSignaturesSelector } from "../../store/reducers/fciDocumentSignatures";
1114
import { fciEnvironmentSelector } from "../../store/reducers/fciEnvironment";
1215
import { fciSignatureSelector } from "../../store/reducers/fciSignature";
1316
import { getClausesCountByTypes } from "../../utils/signatureFields";
17+
import { fciSignatureRequestIdSelector } from "../../store/reducers/fciSignatureRequest";
1418

1519
const FciThankyouScreen = () => {
1620
const fciCreateSignatureSelector = useIOSelector(fciSignatureSelector);
1721
const documentSignatures = useIOSelector(fciDocumentSignaturesSelector);
1822
const fciEnvironment = useIOSelector(fciEnvironmentSelector);
1923
const dispatch = useIODispatch();
24+
const signatureRequestId = useIOSelector(fciSignatureRequestIdSelector);
2025

2126
const LoadingView = () => (
2227
<LoadingComponent testID={"FciTypLoadingScreenTestID"} />
@@ -26,7 +31,11 @@ const FciThankyouScreen = () => {
2631
<SignatureStatusComponent
2732
title={I18n.t("features.fci.errors.generic.signing.title")}
2833
subTitle={I18n.t("features.fci.errors.generic.signing.subTitle")}
29-
onPress={() => dispatch(fciStartRequest())}
34+
onPress={() => {
35+
if (signatureRequestId) {
36+
dispatch(fciSignatureRequestRetryFromId(signatureRequestId));
37+
}
38+
}}
3039
pictogram={"umbrella"}
3140
retry={true}
3241
assistance={true}

ts/features/fci/store/actions/index.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ export const fciSignatureRequestFromId = createAsyncAction(
2727
"FCI_SIGNATURE_DETAIL_FAILURE"
2828
)<string, SignatureRequestDetailView, NetworkError>();
2929

30+
/**
31+
* retry flow for signatureRequest by id
32+
*/
33+
export const fciSignatureRequestRetryFromId = createStandardAction(
34+
"FCI_SIGNATURE_DETAIL_RETRY_REQUEST"
35+
)<string>();
36+
3037
/**
3138
* get and handle the QTSP clauses
3239
*/
@@ -143,6 +150,7 @@ export const fciEnvironmentSet = createStandardAction("FCI_ENVIRONMENT_SET")<
143150

144151
export type FciActions =
145152
| ActionType<typeof fciSignatureRequestFromId>
153+
| ActionType<typeof fciSignatureRequestRetryFromId>
146154
| ActionType<typeof fciLoadQtspClauses>
147155
| ActionType<typeof fciLoadQtspFilledDocument>
148156
| ActionType<typeof fciSigningRequest>

0 commit comments

Comments
 (0)