@smvtech/x-flux 1.1.12 → 1.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -5465,6 +5465,7 @@ type TEDCFlowContext = {
5465
5465
  order: TVisaOrder | null;
5466
5466
  questionnaire: TQuestionnaire | null;
5467
5467
  applicants: Record<string, TEDCApplicant>;
5468
+ applicantIds: Set<string>;
5468
5469
  activeApplicant: string | null;
5469
5470
  setActiveApplicant: (application_id: string | null) => void;
5470
5471
  loading: boolean;
@@ -5499,16 +5500,16 @@ declare function getSignedUrlFromAsset(docId: string): Promise<string | null>;
5499
5500
  declare function getDisplayableQuestions(questions: TEDCApplicant["questions"], questionAnswerSources: ANSWER_SOURCE[]): TEDCApplicant["questions"];
5500
5501
  declare function getDisplayableDocuments(questions: TEDCApplicant["questions"], documentAnswerSources: ANSWER_SOURCE[]): TEDCApplicant["questions"];
5501
5502
  declare function getValidationErrors(validations?: TAnswer["validations"] | null): ValidationResult;
5502
- declare function getValidationResult(question: TEDCApplicant["questions"][0]): ValidationResult;
5503
- declare function validateApplicantQuestions(applicant: TEDCApplicant, questionAnswerSources: ANSWER_SOURCE[]): Array<{
5503
+ declare function getValidationResult(question: TEDCApplicant["questions"][0], applicantIds: Set<string>): ValidationResult;
5504
+ declare function validateApplicantQuestions(applicant: TEDCApplicant, questionAnswerSources: ANSWER_SOURCE[], applicantIds: Set<string>): Array<{
5504
5505
  name: string;
5505
5506
  validationResult: ValidationResult;
5506
5507
  }>;
5507
- declare function validateApplicantDocuments(applicant: TEDCApplicant, documentAnswerSources: ANSWER_SOURCE[]): Array<{
5508
+ declare function validateApplicantDocuments(applicant: TEDCApplicant, documentAnswerSources: ANSWER_SOURCE[], applicantIds: Set<string>): Array<{
5508
5509
  name: string;
5509
5510
  validationResult: ValidationResult;
5510
5511
  }>;
5511
- declare function validateApplicant(applicant: TEDCApplicant, questionAnswerSources: ANSWER_SOURCE[], documentAnswerSources: ANSWER_SOURCE[]): {
5512
+ declare function validateApplicant(applicant: TEDCApplicant, questionAnswerSources: ANSWER_SOURCE[], documentAnswerSources: ANSWER_SOURCE[], applicantIds: Set<string>): {
5512
5513
  isComplete: boolean;
5513
5514
  questionValidations: Array<{
5514
5515
  name: string;
@@ -5567,6 +5568,7 @@ declare const EDCFlow: {
5567
5568
  order: TVisaOrder | null;
5568
5569
  questionnaire: TQuestionnaire | null;
5569
5570
  applicants: Record<string, TEDCApplicant>;
5571
+ applicantIds: Set<string>;
5570
5572
  activeApplicant: string | null;
5571
5573
  setActiveApplicant: (application_id: string | null) => void;
5572
5574
  loading: boolean;
package/dist/index.d.ts CHANGED
@@ -5465,6 +5465,7 @@ type TEDCFlowContext = {
5465
5465
  order: TVisaOrder | null;
5466
5466
  questionnaire: TQuestionnaire | null;
5467
5467
  applicants: Record<string, TEDCApplicant>;
5468
+ applicantIds: Set<string>;
5468
5469
  activeApplicant: string | null;
5469
5470
  setActiveApplicant: (application_id: string | null) => void;
5470
5471
  loading: boolean;
@@ -5499,16 +5500,16 @@ declare function getSignedUrlFromAsset(docId: string): Promise<string | null>;
5499
5500
  declare function getDisplayableQuestions(questions: TEDCApplicant["questions"], questionAnswerSources: ANSWER_SOURCE[]): TEDCApplicant["questions"];
5500
5501
  declare function getDisplayableDocuments(questions: TEDCApplicant["questions"], documentAnswerSources: ANSWER_SOURCE[]): TEDCApplicant["questions"];
5501
5502
  declare function getValidationErrors(validations?: TAnswer["validations"] | null): ValidationResult;
5502
- declare function getValidationResult(question: TEDCApplicant["questions"][0]): ValidationResult;
5503
- declare function validateApplicantQuestions(applicant: TEDCApplicant, questionAnswerSources: ANSWER_SOURCE[]): Array<{
5503
+ declare function getValidationResult(question: TEDCApplicant["questions"][0], applicantIds: Set<string>): ValidationResult;
5504
+ declare function validateApplicantQuestions(applicant: TEDCApplicant, questionAnswerSources: ANSWER_SOURCE[], applicantIds: Set<string>): Array<{
5504
5505
  name: string;
5505
5506
  validationResult: ValidationResult;
5506
5507
  }>;
5507
- declare function validateApplicantDocuments(applicant: TEDCApplicant, documentAnswerSources: ANSWER_SOURCE[]): Array<{
5508
+ declare function validateApplicantDocuments(applicant: TEDCApplicant, documentAnswerSources: ANSWER_SOURCE[], applicantIds: Set<string>): Array<{
5508
5509
  name: string;
5509
5510
  validationResult: ValidationResult;
5510
5511
  }>;
5511
- declare function validateApplicant(applicant: TEDCApplicant, questionAnswerSources: ANSWER_SOURCE[], documentAnswerSources: ANSWER_SOURCE[]): {
5512
+ declare function validateApplicant(applicant: TEDCApplicant, questionAnswerSources: ANSWER_SOURCE[], documentAnswerSources: ANSWER_SOURCE[], applicantIds: Set<string>): {
5512
5513
  isComplete: boolean;
5513
5514
  questionValidations: Array<{
5514
5515
  name: string;
@@ -5567,6 +5568,7 @@ declare const EDCFlow: {
5567
5568
  order: TVisaOrder | null;
5568
5569
  questionnaire: TQuestionnaire | null;
5569
5570
  applicants: Record<string, TEDCApplicant>;
5571
+ applicantIds: Set<string>;
5570
5572
  activeApplicant: string | null;
5571
5573
  setActiveApplicant: (application_id: string | null) => void;
5572
5574
  loading: boolean;
package/dist/index.js CHANGED
@@ -558,6 +558,11 @@ var extractDefaultAnswer = (value) => {
558
558
  const match = value.match(/^\{\{.*\}\}$/);
559
559
  return match ? match[0] : null;
560
560
  };
561
+ var isDynamicApplicantAnswerEmpty = (answer, applicantIds) => {
562
+ const match = answer.match(/^app_id_(.+)$/);
563
+ if (!match) return false;
564
+ return !applicantIds.has(match[1]);
565
+ };
561
566
  function getDisplayableQuestions(questions, questionAnswerSources) {
562
567
  return questions.filter((q) => {
563
568
  if (q.question.type === "DOCUMENT" /* DOCUMENT */) return false;
@@ -621,7 +626,7 @@ function getValidationErrors(validations) {
621
626
  totalTimeSaved
622
627
  };
623
628
  }
624
- function getValidationResult(question) {
629
+ function getValidationResult(question, applicantIds) {
625
630
  const backendResult = getValidationErrors(question.answer_data?.validations);
626
631
  if (backendResult && backendResult.status !== "PERFECT" /* PERFECT */) {
627
632
  return backendResult;
@@ -630,7 +635,7 @@ function getValidationResult(question) {
630
635
  const isDocument = question.question.type === "DOCUMENT" /* DOCUMENT */;
631
636
  const hasApproved = question.answer_data?.assets_id?.find((asset) => asset.status === "APPROVED");
632
637
  const answer = question.answer_data?.answer?.[0];
633
- const isAnswerEmpty = !answer || answer === "" || extractDefaultAnswer(answer) !== null;
638
+ const isAnswerEmpty = !answer || answer === "" || extractDefaultAnswer(answer) !== null || isDynamicApplicantAnswerEmpty(answer, applicantIds);
634
639
  if (isDocument && !hasApproved || !isDocument && isAnswerEmpty) {
635
640
  const answerRequiredItem = {
636
641
  error_text: isDocument ? "Please upload the required document" : "Answer cannot be empty",
@@ -655,11 +660,11 @@ function getValidationResult(question) {
655
660
  totalTimeSaved: 0
656
661
  };
657
662
  }
658
- function validateApplicantQuestions(applicant, questionAnswerSources) {
663
+ function validateApplicantQuestions(applicant, questionAnswerSources, applicantIds) {
659
664
  const displayableQuestions = getDisplayableQuestions(applicant.questions, questionAnswerSources);
660
665
  const questionValidations = [];
661
666
  displayableQuestions.forEach((question) => {
662
- const validationResult = getValidationResult(question);
667
+ const validationResult = getValidationResult(question, applicantIds);
663
668
  if (validationResult && (validationResult.status === "MISSING" /* MISSING */ || validationResult.status === "UNFIXABLE" /* UNFIXABLE */)) {
664
669
  questionValidations.push({
665
670
  name: question.question.question,
@@ -669,11 +674,11 @@ function validateApplicantQuestions(applicant, questionAnswerSources) {
669
674
  });
670
675
  return questionValidations;
671
676
  }
672
- function validateApplicantDocuments(applicant, documentAnswerSources) {
677
+ function validateApplicantDocuments(applicant, documentAnswerSources, applicantIds) {
673
678
  const displayableDocuments = getDisplayableDocuments(applicant.questions, documentAnswerSources);
674
679
  const documentValidations = [];
675
680
  displayableDocuments.forEach((document) => {
676
- const validationResult = getValidationResult(document);
681
+ const validationResult = getValidationResult(document, applicantIds);
677
682
  if (validationResult && (validationResult.status === "MISSING" /* MISSING */ || validationResult.status === "UNFIXABLE" /* UNFIXABLE */)) {
678
683
  documentValidations.push({
679
684
  name: document.question.question,
@@ -683,9 +688,9 @@ function validateApplicantDocuments(applicant, documentAnswerSources) {
683
688
  });
684
689
  return documentValidations;
685
690
  }
686
- function validateApplicant(applicant, questionAnswerSources, documentAnswerSources) {
687
- const questionValidations = validateApplicantQuestions(applicant, questionAnswerSources);
688
- const documentValidations = validateApplicantDocuments(applicant, documentAnswerSources);
691
+ function validateApplicant(applicant, questionAnswerSources, documentAnswerSources, applicantIds) {
692
+ const questionValidations = validateApplicantQuestions(applicant, questionAnswerSources, applicantIds);
693
+ const documentValidations = validateApplicantDocuments(applicant, documentAnswerSources, applicantIds);
689
694
  const applicantValidations = getValidationErrors(applicant.application?.validations);
690
695
  const hasBlockingIssues = questionValidations.some((q) => q.validationResult?.status === "MISSING" /* MISSING */ || q.validationResult?.status === "UNFIXABLE" /* UNFIXABLE */) || documentValidations.some((d) => d.validationResult?.status === "MISSING" /* MISSING */ || d.validationResult?.status === "UNFIXABLE" /* UNFIXABLE */) || applicantValidations?.status === "UNFIXABLE" /* UNFIXABLE */;
691
696
  return {
@@ -697,9 +702,12 @@ function validateApplicant(applicant, questionAnswerSources, documentAnswerSourc
697
702
  }
698
703
  function validateAllApplicants(applicants, questionAnswerSources, documentAnswerSources) {
699
704
  const applicantsArray = Array.isArray(applicants) ? applicants : Object.values(applicants);
705
+ const applicantIds = new Set(
706
+ Array.isArray(applicants) ? applicants.map((a) => a.application_id) : Object.keys(applicants)
707
+ );
700
708
  const applicantValidations = [];
701
709
  applicantsArray.forEach((applicant) => {
702
- const validation = validateApplicant(applicant, questionAnswerSources, documentAnswerSources);
710
+ const validation = validateApplicant(applicant, questionAnswerSources, documentAnswerSources, applicantIds);
703
711
  if (!validation.isComplete) {
704
712
  const applicantName = getFullName(
705
713
  applicant.traveller.first_name,
@@ -886,6 +894,7 @@ var EDCFlowProvider = ({ children, orderId }) => {
886
894
  const [questionnaire, setQuestionnaire] = react.useState(null);
887
895
  const [dynamicQuestionMap, setDynamicQuestionMap] = react.useState({});
888
896
  const [applicants, setApplicants] = react.useState({});
897
+ const [applicantIds, setApplicantIds] = react.useState(/* @__PURE__ */ new Set());
889
898
  const [activeApplicant, setActiveApplicant] = react.useState(null);
890
899
  const [loading, setLoading] = react.useState(true);
891
900
  const [error, setError] = react.useState(null);
@@ -958,6 +967,7 @@ var EDCFlowProvider = ({ children, orderId }) => {
958
967
  setQuestionnaire(updatedQuestionnaire);
959
968
  return applicantsWithSideEffects;
960
969
  });
970
+ setApplicantIds((prev) => /* @__PURE__ */ new Set([...prev, applicant.application_id]));
961
971
  setActiveApplicant(applicant.application_id);
962
972
  setSuccess("Traveller added and Applicant created");
963
973
  return applicant;
@@ -1011,10 +1021,10 @@ var EDCFlowProvider = ({ children, orderId }) => {
1011
1021
  [updatedAnswerData.docId]: updatedAnswerData.signedUrl
1012
1022
  }));
1013
1023
  }
1014
- if (question_type === "DOCUMENT" /* DOCUMENT */) {
1024
+ const shouldRefresh = question_type === "DOCUMENT" /* DOCUMENT */ || question.toLowerCase().includes("birth");
1025
+ if (shouldRefresh) {
1015
1026
  await refreshApplicant(application_id);
1016
1027
  } else {
1017
- const shouldRecalculateSideEffects = question.toLowerCase().includes("birth");
1018
1028
  setApplicants((prev) => {
1019
1029
  const currentApplicant = prev[application_id];
1020
1030
  if (!currentApplicant) return prev;
@@ -1024,13 +1034,7 @@ var EDCFlowProvider = ({ children, orderId }) => {
1024
1034
  updatedAnswerData.answers,
1025
1035
  questionnaire
1026
1036
  );
1027
- const updatedApplicants = { ...prev, [application_id]: applicantWithUpdatedAnswer };
1028
- if (shouldRecalculateSideEffects) {
1029
- const { updatedQuestionnaire, updatedApplicants: applicantsWithSideEffects } = runApplicantSideEffects(updatedApplicants, questionnaire, dynamicQuestionMap);
1030
- setQuestionnaire(updatedQuestionnaire);
1031
- return applicantsWithSideEffects;
1032
- }
1033
- return updatedApplicants;
1037
+ return { ...prev, [application_id]: applicantWithUpdatedAnswer };
1034
1038
  });
1035
1039
  }
1036
1040
  } catch (err) {
@@ -1038,7 +1042,7 @@ var EDCFlowProvider = ({ children, orderId }) => {
1038
1042
  setError("Failed to update answer");
1039
1043
  }
1040
1044
  },
1041
- [questionnaire, refreshApplicant, order, dynamicQuestionMap]
1045
+ [questionnaire, refreshApplicant, order]
1042
1046
  );
1043
1047
  const applyAutoFix = react.useCallback(
1044
1048
  async (applicationId, answerId) => {
@@ -1079,6 +1083,11 @@ var EDCFlowProvider = ({ children, orderId }) => {
1079
1083
  });
1080
1084
  return applicantsWithSideEffects;
1081
1085
  });
1086
+ setApplicantIds((prev) => {
1087
+ const next = new Set(prev);
1088
+ next.delete(application_id);
1089
+ return next;
1090
+ });
1082
1091
  setSuccess("Applicant deleted successfully");
1083
1092
  } catch (err) {
1084
1093
  console.error("Failed to delete applicant:", err);
@@ -1144,12 +1153,12 @@ var EDCFlowProvider = ({ children, orderId }) => {
1144
1153
  const { updatedQuestionnaire, updatedApplicants } = runApplicantSideEffects(applicants2, questionnaire, dynamicQuestionMap);
1145
1154
  setQuestionnaire(updatedQuestionnaire);
1146
1155
  setApplicants(updatedApplicants);
1147
- const applicantIds = Object.keys(updatedApplicants);
1148
- if (applicantIds.length > 0) {
1149
- if (activeApplicant && applicantIds.includes(activeApplicant)) {
1156
+ const applicantIds2 = Object.keys(updatedApplicants);
1157
+ if (applicantIds2.length > 0) {
1158
+ if (activeApplicant && applicantIds2.includes(activeApplicant)) {
1150
1159
  setActiveApplicant(activeApplicant);
1151
1160
  } else {
1152
- setActiveApplicant(applicantIds[0]);
1161
+ setActiveApplicant(applicantIds2[0]);
1153
1162
  }
1154
1163
  }
1155
1164
  }
@@ -1209,9 +1218,10 @@ var EDCFlowProvider = ({ children, orderId }) => {
1209
1218
  const { updatedQuestionnaire, updatedApplicants } = runApplicantSideEffects(applicants2, questionnaireData, dynamicMap);
1210
1219
  setQuestionnaire(updatedQuestionnaire);
1211
1220
  setApplicants(updatedApplicants);
1212
- const applicantIds = Object.keys(updatedApplicants);
1213
- if (applicantIds.length > 0) {
1214
- setActiveApplicant(applicantIds[0]);
1221
+ setApplicantIds(new Set(Object.keys(updatedApplicants)));
1222
+ const ids = Object.keys(updatedApplicants);
1223
+ if (ids.length > 0) {
1224
+ setActiveApplicant(ids[0]);
1215
1225
  }
1216
1226
  }
1217
1227
  } catch (err) {
@@ -1228,6 +1238,7 @@ var EDCFlowProvider = ({ children, orderId }) => {
1228
1238
  order,
1229
1239
  questionnaire,
1230
1240
  applicants,
1241
+ applicantIds,
1231
1242
  activeApplicant,
1232
1243
  setActiveApplicant,
1233
1244
  loading,
package/dist/index.mjs CHANGED
@@ -532,6 +532,11 @@ var extractDefaultAnswer = (value) => {
532
532
  const match = value.match(/^\{\{.*\}\}$/);
533
533
  return match ? match[0] : null;
534
534
  };
535
+ var isDynamicApplicantAnswerEmpty = (answer, applicantIds) => {
536
+ const match = answer.match(/^app_id_(.+)$/);
537
+ if (!match) return false;
538
+ return !applicantIds.has(match[1]);
539
+ };
535
540
  function getDisplayableQuestions(questions, questionAnswerSources) {
536
541
  return questions.filter((q) => {
537
542
  if (q.question.type === "DOCUMENT" /* DOCUMENT */) return false;
@@ -595,7 +600,7 @@ function getValidationErrors(validations) {
595
600
  totalTimeSaved
596
601
  };
597
602
  }
598
- function getValidationResult(question) {
603
+ function getValidationResult(question, applicantIds) {
599
604
  const backendResult = getValidationErrors(question.answer_data?.validations);
600
605
  if (backendResult && backendResult.status !== "PERFECT" /* PERFECT */) {
601
606
  return backendResult;
@@ -604,7 +609,7 @@ function getValidationResult(question) {
604
609
  const isDocument = question.question.type === "DOCUMENT" /* DOCUMENT */;
605
610
  const hasApproved = question.answer_data?.assets_id?.find((asset) => asset.status === "APPROVED");
606
611
  const answer = question.answer_data?.answer?.[0];
607
- const isAnswerEmpty = !answer || answer === "" || extractDefaultAnswer(answer) !== null;
612
+ const isAnswerEmpty = !answer || answer === "" || extractDefaultAnswer(answer) !== null || isDynamicApplicantAnswerEmpty(answer, applicantIds);
608
613
  if (isDocument && !hasApproved || !isDocument && isAnswerEmpty) {
609
614
  const answerRequiredItem = {
610
615
  error_text: isDocument ? "Please upload the required document" : "Answer cannot be empty",
@@ -629,11 +634,11 @@ function getValidationResult(question) {
629
634
  totalTimeSaved: 0
630
635
  };
631
636
  }
632
- function validateApplicantQuestions(applicant, questionAnswerSources) {
637
+ function validateApplicantQuestions(applicant, questionAnswerSources, applicantIds) {
633
638
  const displayableQuestions = getDisplayableQuestions(applicant.questions, questionAnswerSources);
634
639
  const questionValidations = [];
635
640
  displayableQuestions.forEach((question) => {
636
- const validationResult = getValidationResult(question);
641
+ const validationResult = getValidationResult(question, applicantIds);
637
642
  if (validationResult && (validationResult.status === "MISSING" /* MISSING */ || validationResult.status === "UNFIXABLE" /* UNFIXABLE */)) {
638
643
  questionValidations.push({
639
644
  name: question.question.question,
@@ -643,11 +648,11 @@ function validateApplicantQuestions(applicant, questionAnswerSources) {
643
648
  });
644
649
  return questionValidations;
645
650
  }
646
- function validateApplicantDocuments(applicant, documentAnswerSources) {
651
+ function validateApplicantDocuments(applicant, documentAnswerSources, applicantIds) {
647
652
  const displayableDocuments = getDisplayableDocuments(applicant.questions, documentAnswerSources);
648
653
  const documentValidations = [];
649
654
  displayableDocuments.forEach((document) => {
650
- const validationResult = getValidationResult(document);
655
+ const validationResult = getValidationResult(document, applicantIds);
651
656
  if (validationResult && (validationResult.status === "MISSING" /* MISSING */ || validationResult.status === "UNFIXABLE" /* UNFIXABLE */)) {
652
657
  documentValidations.push({
653
658
  name: document.question.question,
@@ -657,9 +662,9 @@ function validateApplicantDocuments(applicant, documentAnswerSources) {
657
662
  });
658
663
  return documentValidations;
659
664
  }
660
- function validateApplicant(applicant, questionAnswerSources, documentAnswerSources) {
661
- const questionValidations = validateApplicantQuestions(applicant, questionAnswerSources);
662
- const documentValidations = validateApplicantDocuments(applicant, documentAnswerSources);
665
+ function validateApplicant(applicant, questionAnswerSources, documentAnswerSources, applicantIds) {
666
+ const questionValidations = validateApplicantQuestions(applicant, questionAnswerSources, applicantIds);
667
+ const documentValidations = validateApplicantDocuments(applicant, documentAnswerSources, applicantIds);
663
668
  const applicantValidations = getValidationErrors(applicant.application?.validations);
664
669
  const hasBlockingIssues = questionValidations.some((q) => q.validationResult?.status === "MISSING" /* MISSING */ || q.validationResult?.status === "UNFIXABLE" /* UNFIXABLE */) || documentValidations.some((d) => d.validationResult?.status === "MISSING" /* MISSING */ || d.validationResult?.status === "UNFIXABLE" /* UNFIXABLE */) || applicantValidations?.status === "UNFIXABLE" /* UNFIXABLE */;
665
670
  return {
@@ -671,9 +676,12 @@ function validateApplicant(applicant, questionAnswerSources, documentAnswerSourc
671
676
  }
672
677
  function validateAllApplicants(applicants, questionAnswerSources, documentAnswerSources) {
673
678
  const applicantsArray = Array.isArray(applicants) ? applicants : Object.values(applicants);
679
+ const applicantIds = new Set(
680
+ Array.isArray(applicants) ? applicants.map((a) => a.application_id) : Object.keys(applicants)
681
+ );
674
682
  const applicantValidations = [];
675
683
  applicantsArray.forEach((applicant) => {
676
- const validation = validateApplicant(applicant, questionAnswerSources, documentAnswerSources);
684
+ const validation = validateApplicant(applicant, questionAnswerSources, documentAnswerSources, applicantIds);
677
685
  if (!validation.isComplete) {
678
686
  const applicantName = getFullName(
679
687
  applicant.traveller.first_name,
@@ -860,6 +868,7 @@ var EDCFlowProvider = ({ children, orderId }) => {
860
868
  const [questionnaire, setQuestionnaire] = useState(null);
861
869
  const [dynamicQuestionMap, setDynamicQuestionMap] = useState({});
862
870
  const [applicants, setApplicants] = useState({});
871
+ const [applicantIds, setApplicantIds] = useState(/* @__PURE__ */ new Set());
863
872
  const [activeApplicant, setActiveApplicant] = useState(null);
864
873
  const [loading, setLoading] = useState(true);
865
874
  const [error, setError] = useState(null);
@@ -932,6 +941,7 @@ var EDCFlowProvider = ({ children, orderId }) => {
932
941
  setQuestionnaire(updatedQuestionnaire);
933
942
  return applicantsWithSideEffects;
934
943
  });
944
+ setApplicantIds((prev) => /* @__PURE__ */ new Set([...prev, applicant.application_id]));
935
945
  setActiveApplicant(applicant.application_id);
936
946
  setSuccess("Traveller added and Applicant created");
937
947
  return applicant;
@@ -985,10 +995,10 @@ var EDCFlowProvider = ({ children, orderId }) => {
985
995
  [updatedAnswerData.docId]: updatedAnswerData.signedUrl
986
996
  }));
987
997
  }
988
- if (question_type === "DOCUMENT" /* DOCUMENT */) {
998
+ const shouldRefresh = question_type === "DOCUMENT" /* DOCUMENT */ || question.toLowerCase().includes("birth");
999
+ if (shouldRefresh) {
989
1000
  await refreshApplicant(application_id);
990
1001
  } else {
991
- const shouldRecalculateSideEffects = question.toLowerCase().includes("birth");
992
1002
  setApplicants((prev) => {
993
1003
  const currentApplicant = prev[application_id];
994
1004
  if (!currentApplicant) return prev;
@@ -998,13 +1008,7 @@ var EDCFlowProvider = ({ children, orderId }) => {
998
1008
  updatedAnswerData.answers,
999
1009
  questionnaire
1000
1010
  );
1001
- const updatedApplicants = { ...prev, [application_id]: applicantWithUpdatedAnswer };
1002
- if (shouldRecalculateSideEffects) {
1003
- const { updatedQuestionnaire, updatedApplicants: applicantsWithSideEffects } = runApplicantSideEffects(updatedApplicants, questionnaire, dynamicQuestionMap);
1004
- setQuestionnaire(updatedQuestionnaire);
1005
- return applicantsWithSideEffects;
1006
- }
1007
- return updatedApplicants;
1011
+ return { ...prev, [application_id]: applicantWithUpdatedAnswer };
1008
1012
  });
1009
1013
  }
1010
1014
  } catch (err) {
@@ -1012,7 +1016,7 @@ var EDCFlowProvider = ({ children, orderId }) => {
1012
1016
  setError("Failed to update answer");
1013
1017
  }
1014
1018
  },
1015
- [questionnaire, refreshApplicant, order, dynamicQuestionMap]
1019
+ [questionnaire, refreshApplicant, order]
1016
1020
  );
1017
1021
  const applyAutoFix = useCallback(
1018
1022
  async (applicationId, answerId) => {
@@ -1053,6 +1057,11 @@ var EDCFlowProvider = ({ children, orderId }) => {
1053
1057
  });
1054
1058
  return applicantsWithSideEffects;
1055
1059
  });
1060
+ setApplicantIds((prev) => {
1061
+ const next = new Set(prev);
1062
+ next.delete(application_id);
1063
+ return next;
1064
+ });
1056
1065
  setSuccess("Applicant deleted successfully");
1057
1066
  } catch (err) {
1058
1067
  console.error("Failed to delete applicant:", err);
@@ -1118,12 +1127,12 @@ var EDCFlowProvider = ({ children, orderId }) => {
1118
1127
  const { updatedQuestionnaire, updatedApplicants } = runApplicantSideEffects(applicants2, questionnaire, dynamicQuestionMap);
1119
1128
  setQuestionnaire(updatedQuestionnaire);
1120
1129
  setApplicants(updatedApplicants);
1121
- const applicantIds = Object.keys(updatedApplicants);
1122
- if (applicantIds.length > 0) {
1123
- if (activeApplicant && applicantIds.includes(activeApplicant)) {
1130
+ const applicantIds2 = Object.keys(updatedApplicants);
1131
+ if (applicantIds2.length > 0) {
1132
+ if (activeApplicant && applicantIds2.includes(activeApplicant)) {
1124
1133
  setActiveApplicant(activeApplicant);
1125
1134
  } else {
1126
- setActiveApplicant(applicantIds[0]);
1135
+ setActiveApplicant(applicantIds2[0]);
1127
1136
  }
1128
1137
  }
1129
1138
  }
@@ -1183,9 +1192,10 @@ var EDCFlowProvider = ({ children, orderId }) => {
1183
1192
  const { updatedQuestionnaire, updatedApplicants } = runApplicantSideEffects(applicants2, questionnaireData, dynamicMap);
1184
1193
  setQuestionnaire(updatedQuestionnaire);
1185
1194
  setApplicants(updatedApplicants);
1186
- const applicantIds = Object.keys(updatedApplicants);
1187
- if (applicantIds.length > 0) {
1188
- setActiveApplicant(applicantIds[0]);
1195
+ setApplicantIds(new Set(Object.keys(updatedApplicants)));
1196
+ const ids = Object.keys(updatedApplicants);
1197
+ if (ids.length > 0) {
1198
+ setActiveApplicant(ids[0]);
1189
1199
  }
1190
1200
  }
1191
1201
  } catch (err) {
@@ -1202,6 +1212,7 @@ var EDCFlowProvider = ({ children, orderId }) => {
1202
1212
  order,
1203
1213
  questionnaire,
1204
1214
  applicants,
1215
+ applicantIds,
1205
1216
  activeApplicant,
1206
1217
  setActiveApplicant,
1207
1218
  loading,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smvtech/x-flux",
3
- "version": "1.1.12",
3
+ "version": "1.1.14",
4
4
  "description": "x-flux - A powerful React package for managing effective document collection flows, visa questionnaires, travellers, and applications",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",