@smvtech/x-flux 1.1.1 → 1.1.3

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
@@ -72,7 +72,8 @@ declare enum TA_QC_EXTRACTION_STATUS {
72
72
  declare enum VALIDATION_STATUS {
73
73
  PERFECT = "PERFECT",
74
74
  FIXABLE = "FIXABLE",
75
- UNFIXABLE = "UNFIXABLE"
75
+ UNFIXABLE = "UNFIXABLE",
76
+ MISSING = "MISSING"
76
77
  }
77
78
  declare const QuestionnaireSchema: z.ZodObject<{
78
79
  questionsWithRank: z.ZodArray<z.ZodObject<{
@@ -5359,6 +5360,7 @@ type TEDCFlowContext = {
5359
5360
  getS3UrlForAsset: (doc_id: string) => Promise<string | null>;
5360
5361
  acceptOrderQCTermsAndConditions: () => Promise<void>;
5361
5362
  runAllValidations: () => Promise<void>;
5363
+ runApplicantValidations: (applicationId: string) => Promise<void>;
5362
5364
  };
5363
5365
  type TEDCFlowProviderProps = {
5364
5366
  children: ReactNode;
@@ -5458,6 +5460,7 @@ declare const EDCFlow: {
5458
5460
  getS3UrlForAsset: (doc_id: string) => Promise<string | null>;
5459
5461
  acceptOrderQCTermsAndConditions: () => Promise<void>;
5460
5462
  runAllValidations: () => Promise<void>;
5463
+ runApplicantValidations: (applicationId: string) => Promise<void>;
5461
5464
  };
5462
5465
  };
5463
5466
 
package/dist/index.d.ts CHANGED
@@ -72,7 +72,8 @@ declare enum TA_QC_EXTRACTION_STATUS {
72
72
  declare enum VALIDATION_STATUS {
73
73
  PERFECT = "PERFECT",
74
74
  FIXABLE = "FIXABLE",
75
- UNFIXABLE = "UNFIXABLE"
75
+ UNFIXABLE = "UNFIXABLE",
76
+ MISSING = "MISSING"
76
77
  }
77
78
  declare const QuestionnaireSchema: z.ZodObject<{
78
79
  questionsWithRank: z.ZodArray<z.ZodObject<{
@@ -5359,6 +5360,7 @@ type TEDCFlowContext = {
5359
5360
  getS3UrlForAsset: (doc_id: string) => Promise<string | null>;
5360
5361
  acceptOrderQCTermsAndConditions: () => Promise<void>;
5361
5362
  runAllValidations: () => Promise<void>;
5363
+ runApplicantValidations: (applicationId: string) => Promise<void>;
5362
5364
  };
5363
5365
  type TEDCFlowProviderProps = {
5364
5366
  children: ReactNode;
@@ -5458,6 +5460,7 @@ declare const EDCFlow: {
5458
5460
  getS3UrlForAsset: (doc_id: string) => Promise<string | null>;
5459
5461
  acceptOrderQCTermsAndConditions: () => Promise<void>;
5460
5462
  runAllValidations: () => Promise<void>;
5463
+ runApplicantValidations: (applicationId: string) => Promise<void>;
5461
5464
  };
5462
5465
  };
5463
5466
 
package/dist/index.js CHANGED
@@ -127,6 +127,7 @@ var VALIDATION_STATUS = /* @__PURE__ */ ((VALIDATION_STATUS2) => {
127
127
  VALIDATION_STATUS2["PERFECT"] = "PERFECT";
128
128
  VALIDATION_STATUS2["FIXABLE"] = "FIXABLE";
129
129
  VALIDATION_STATUS2["UNFIXABLE"] = "UNFIXABLE";
130
+ VALIDATION_STATUS2["MISSING"] = "MISSING";
130
131
  return VALIDATION_STATUS2;
131
132
  })(VALIDATION_STATUS || {});
132
133
  var QuestionnaireSchema = z2__namespace.object({
@@ -642,7 +643,7 @@ function getValidationResult(question) {
642
643
  };
643
644
  } else if (extractDefaultAnswer(answer) !== null) {
644
645
  answerRequiredItem = {
645
- error_text: "Please provide a valid answer",
646
+ error_text: "Answer cannot be empty",
646
647
  time_saved: 0,
647
648
  validation_name: "answer_required"
648
649
  };
@@ -651,7 +652,7 @@ function getValidationResult(question) {
651
652
  if (answerRequiredItem) {
652
653
  const unfixable = toGroup([answerRequiredItem]);
653
654
  return {
654
- status: "UNFIXABLE" /* UNFIXABLE */,
655
+ status: "MISSING" /* MISSING */,
655
656
  fixable: EMPTY_GROUP,
656
657
  unfixable,
657
658
  perfect: EMPTY_GROUP,
@@ -673,7 +674,7 @@ function validateApplicantQuestions(applicant, questionAnswerSources) {
673
674
  const questionValidations = [];
674
675
  displayableQuestions.forEach((question) => {
675
676
  const validationResult = getValidationResult(question);
676
- if (validationResult && validationResult.status === "UNFIXABLE" /* UNFIXABLE */) {
677
+ if (validationResult && (validationResult.status === "MISSING" /* MISSING */ || validationResult.status === "UNFIXABLE" /* UNFIXABLE */)) {
677
678
  questionValidations.push({
678
679
  name: question.question.question,
679
680
  validationResult
@@ -687,7 +688,7 @@ function validateApplicantDocuments(applicant, documentAnswerSources) {
687
688
  const documentValidations = [];
688
689
  displayableDocuments.forEach((document) => {
689
690
  const validationResult = getValidationResult(document);
690
- if (validationResult && validationResult.status === "UNFIXABLE" /* UNFIXABLE */) {
691
+ if (validationResult && (validationResult.status === "MISSING" /* MISSING */ || validationResult.status === "UNFIXABLE" /* UNFIXABLE */)) {
691
692
  documentValidations.push({
692
693
  name: document.question.question,
693
694
  validationResult
@@ -700,9 +701,9 @@ function validateApplicant(applicant, questionAnswerSources, documentAnswerSourc
700
701
  const questionValidations = validateApplicantQuestions(applicant, questionAnswerSources);
701
702
  const documentValidations = validateApplicantDocuments(applicant, documentAnswerSources);
702
703
  const applicantValidations = getValidationErrors(applicant.application?.validations);
703
- const hasUnfixableIssues = questionValidations.some((q) => q.validationResult?.status === "UNFIXABLE" /* UNFIXABLE */) || documentValidations.some((d) => d.validationResult?.status === "UNFIXABLE" /* UNFIXABLE */) || applicantValidations?.status === "UNFIXABLE" /* UNFIXABLE */;
704
+ 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 */;
704
705
  return {
705
- isComplete: !hasUnfixableIssues && questionValidations.length === 0 && documentValidations.length === 0,
706
+ isComplete: !hasBlockingIssues && questionValidations.length === 0 && documentValidations.length === 0,
706
707
  questionValidations,
707
708
  documentValidations,
708
709
  applicantValidations
@@ -736,9 +737,9 @@ function validateAllApplicants(applicants, questionAnswerSources, documentAnswer
736
737
  function validateOrder(order, applicants, questionAnswerSources, documentAnswerSources) {
737
738
  const orderValidations = getValidationErrors(order?.validations);
738
739
  const applicantsResult = validateAllApplicants(applicants, questionAnswerSources, documentAnswerSources);
739
- const hasOrderUnfixableIssues = orderValidations?.status === "UNFIXABLE" /* UNFIXABLE */;
740
+ const hasOrderBlockingIssues = orderValidations?.status === "UNFIXABLE" /* UNFIXABLE */;
740
741
  return {
741
- isComplete: !hasOrderUnfixableIssues && applicantsResult.isComplete,
742
+ isComplete: !hasOrderBlockingIssues && applicantsResult.isComplete,
742
743
  orderValidations,
743
744
  applicantValidations: applicantsResult.applicantValidations
744
745
  };
@@ -854,6 +855,18 @@ var runAllValidations = async (orderId) => {
854
855
  }
855
856
  };
856
857
  };
858
+ var runApplicantValidations = async (applicationId) => {
859
+ const client = getClient();
860
+ const response = await client.post(`/edc/run-applicant-validations`, {
861
+ application_id: applicationId
862
+ });
863
+ const rawData = response.data.data;
864
+ return {
865
+ data: {
866
+ application: transformApplicationData(rawData.application)
867
+ }
868
+ };
869
+ };
857
870
  var updateOrderQCTermsAndConditions = async (orderId) => {
858
871
  const client = getClient();
859
872
  const response = await client.patch(`/visa_orders/update-order-qc-terms-conditions/${orderId}`);
@@ -1123,6 +1136,36 @@ var EDCFlowProvider = ({ children, orderId }) => {
1123
1136
  setError("Failed to run all validations");
1124
1137
  }
1125
1138
  }, [orderId, questionnaire, dynamicQuestionMap, activeApplicant]);
1139
+ const runApplicantValidationsHandler = react.useCallback(async (applicationId) => {
1140
+ if (!orderId || !questionnaire) return;
1141
+ try {
1142
+ setError(null);
1143
+ const { data } = await runApplicantValidations(applicationId);
1144
+ if (data.application) {
1145
+ const applicant = createApplicantData(
1146
+ data.application.traveller,
1147
+ data.application.answers,
1148
+ questionnaire,
1149
+ data.application.application
1150
+ );
1151
+ if (applicant) {
1152
+ setApplicants((prev) => {
1153
+ const updatedApplicants = {
1154
+ ...prev,
1155
+ [applicationId]: applicant
1156
+ };
1157
+ const { updatedQuestionnaire, updatedApplicants: applicantsWithSideEffects } = runApplicantSideEffects(updatedApplicants, questionnaire, dynamicQuestionMap);
1158
+ setQuestionnaire(updatedQuestionnaire);
1159
+ return applicantsWithSideEffects;
1160
+ });
1161
+ }
1162
+ }
1163
+ setSuccess("Applicant validations completed successfully");
1164
+ } catch (err) {
1165
+ console.error("Failed to run applicant validations:", err);
1166
+ setError("Failed to run applicant validations");
1167
+ }
1168
+ }, [orderId, questionnaire, dynamicQuestionMap]);
1126
1169
  react.useEffect(() => {
1127
1170
  if (!orderId) return;
1128
1171
  const initialize = async () => {
@@ -1174,7 +1217,8 @@ var EDCFlowProvider = ({ children, orderId }) => {
1174
1217
  refreshApplicant,
1175
1218
  getS3UrlForAsset,
1176
1219
  acceptOrderQCTermsAndConditions,
1177
- runAllValidations: runAllValidationsHandler
1220
+ runAllValidations: runAllValidationsHandler,
1221
+ runApplicantValidations: runApplicantValidationsHandler
1178
1222
  };
1179
1223
  return /* @__PURE__ */ jsxRuntime.jsx(EDCFlowContext.Provider, { value, children });
1180
1224
  };
package/dist/index.mjs CHANGED
@@ -101,6 +101,7 @@ var VALIDATION_STATUS = /* @__PURE__ */ ((VALIDATION_STATUS2) => {
101
101
  VALIDATION_STATUS2["PERFECT"] = "PERFECT";
102
102
  VALIDATION_STATUS2["FIXABLE"] = "FIXABLE";
103
103
  VALIDATION_STATUS2["UNFIXABLE"] = "UNFIXABLE";
104
+ VALIDATION_STATUS2["MISSING"] = "MISSING";
104
105
  return VALIDATION_STATUS2;
105
106
  })(VALIDATION_STATUS || {});
106
107
  var QuestionnaireSchema = z2.object({
@@ -616,7 +617,7 @@ function getValidationResult(question) {
616
617
  };
617
618
  } else if (extractDefaultAnswer(answer) !== null) {
618
619
  answerRequiredItem = {
619
- error_text: "Please provide a valid answer",
620
+ error_text: "Answer cannot be empty",
620
621
  time_saved: 0,
621
622
  validation_name: "answer_required"
622
623
  };
@@ -625,7 +626,7 @@ function getValidationResult(question) {
625
626
  if (answerRequiredItem) {
626
627
  const unfixable = toGroup([answerRequiredItem]);
627
628
  return {
628
- status: "UNFIXABLE" /* UNFIXABLE */,
629
+ status: "MISSING" /* MISSING */,
629
630
  fixable: EMPTY_GROUP,
630
631
  unfixable,
631
632
  perfect: EMPTY_GROUP,
@@ -647,7 +648,7 @@ function validateApplicantQuestions(applicant, questionAnswerSources) {
647
648
  const questionValidations = [];
648
649
  displayableQuestions.forEach((question) => {
649
650
  const validationResult = getValidationResult(question);
650
- if (validationResult && validationResult.status === "UNFIXABLE" /* UNFIXABLE */) {
651
+ if (validationResult && (validationResult.status === "MISSING" /* MISSING */ || validationResult.status === "UNFIXABLE" /* UNFIXABLE */)) {
651
652
  questionValidations.push({
652
653
  name: question.question.question,
653
654
  validationResult
@@ -661,7 +662,7 @@ function validateApplicantDocuments(applicant, documentAnswerSources) {
661
662
  const documentValidations = [];
662
663
  displayableDocuments.forEach((document) => {
663
664
  const validationResult = getValidationResult(document);
664
- if (validationResult && validationResult.status === "UNFIXABLE" /* UNFIXABLE */) {
665
+ if (validationResult && (validationResult.status === "MISSING" /* MISSING */ || validationResult.status === "UNFIXABLE" /* UNFIXABLE */)) {
665
666
  documentValidations.push({
666
667
  name: document.question.question,
667
668
  validationResult
@@ -674,9 +675,9 @@ function validateApplicant(applicant, questionAnswerSources, documentAnswerSourc
674
675
  const questionValidations = validateApplicantQuestions(applicant, questionAnswerSources);
675
676
  const documentValidations = validateApplicantDocuments(applicant, documentAnswerSources);
676
677
  const applicantValidations = getValidationErrors(applicant.application?.validations);
677
- const hasUnfixableIssues = questionValidations.some((q) => q.validationResult?.status === "UNFIXABLE" /* UNFIXABLE */) || documentValidations.some((d) => d.validationResult?.status === "UNFIXABLE" /* UNFIXABLE */) || applicantValidations?.status === "UNFIXABLE" /* UNFIXABLE */;
678
+ 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 */;
678
679
  return {
679
- isComplete: !hasUnfixableIssues && questionValidations.length === 0 && documentValidations.length === 0,
680
+ isComplete: !hasBlockingIssues && questionValidations.length === 0 && documentValidations.length === 0,
680
681
  questionValidations,
681
682
  documentValidations,
682
683
  applicantValidations
@@ -710,9 +711,9 @@ function validateAllApplicants(applicants, questionAnswerSources, documentAnswer
710
711
  function validateOrder(order, applicants, questionAnswerSources, documentAnswerSources) {
711
712
  const orderValidations = getValidationErrors(order?.validations);
712
713
  const applicantsResult = validateAllApplicants(applicants, questionAnswerSources, documentAnswerSources);
713
- const hasOrderUnfixableIssues = orderValidations?.status === "UNFIXABLE" /* UNFIXABLE */;
714
+ const hasOrderBlockingIssues = orderValidations?.status === "UNFIXABLE" /* UNFIXABLE */;
714
715
  return {
715
- isComplete: !hasOrderUnfixableIssues && applicantsResult.isComplete,
716
+ isComplete: !hasOrderBlockingIssues && applicantsResult.isComplete,
716
717
  orderValidations,
717
718
  applicantValidations: applicantsResult.applicantValidations
718
719
  };
@@ -828,6 +829,18 @@ var runAllValidations = async (orderId) => {
828
829
  }
829
830
  };
830
831
  };
832
+ var runApplicantValidations = async (applicationId) => {
833
+ const client = getClient();
834
+ const response = await client.post(`/edc/run-applicant-validations`, {
835
+ application_id: applicationId
836
+ });
837
+ const rawData = response.data.data;
838
+ return {
839
+ data: {
840
+ application: transformApplicationData(rawData.application)
841
+ }
842
+ };
843
+ };
831
844
  var updateOrderQCTermsAndConditions = async (orderId) => {
832
845
  const client = getClient();
833
846
  const response = await client.patch(`/visa_orders/update-order-qc-terms-conditions/${orderId}`);
@@ -1097,6 +1110,36 @@ var EDCFlowProvider = ({ children, orderId }) => {
1097
1110
  setError("Failed to run all validations");
1098
1111
  }
1099
1112
  }, [orderId, questionnaire, dynamicQuestionMap, activeApplicant]);
1113
+ const runApplicantValidationsHandler = useCallback(async (applicationId) => {
1114
+ if (!orderId || !questionnaire) return;
1115
+ try {
1116
+ setError(null);
1117
+ const { data } = await runApplicantValidations(applicationId);
1118
+ if (data.application) {
1119
+ const applicant = createApplicantData(
1120
+ data.application.traveller,
1121
+ data.application.answers,
1122
+ questionnaire,
1123
+ data.application.application
1124
+ );
1125
+ if (applicant) {
1126
+ setApplicants((prev) => {
1127
+ const updatedApplicants = {
1128
+ ...prev,
1129
+ [applicationId]: applicant
1130
+ };
1131
+ const { updatedQuestionnaire, updatedApplicants: applicantsWithSideEffects } = runApplicantSideEffects(updatedApplicants, questionnaire, dynamicQuestionMap);
1132
+ setQuestionnaire(updatedQuestionnaire);
1133
+ return applicantsWithSideEffects;
1134
+ });
1135
+ }
1136
+ }
1137
+ setSuccess("Applicant validations completed successfully");
1138
+ } catch (err) {
1139
+ console.error("Failed to run applicant validations:", err);
1140
+ setError("Failed to run applicant validations");
1141
+ }
1142
+ }, [orderId, questionnaire, dynamicQuestionMap]);
1100
1143
  useEffect(() => {
1101
1144
  if (!orderId) return;
1102
1145
  const initialize = async () => {
@@ -1148,7 +1191,8 @@ var EDCFlowProvider = ({ children, orderId }) => {
1148
1191
  refreshApplicant,
1149
1192
  getS3UrlForAsset,
1150
1193
  acceptOrderQCTermsAndConditions,
1151
- runAllValidations: runAllValidationsHandler
1194
+ runAllValidations: runAllValidationsHandler,
1195
+ runApplicantValidations: runApplicantValidationsHandler
1152
1196
  };
1153
1197
  return /* @__PURE__ */ jsx(EDCFlowContext.Provider, { value, children });
1154
1198
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smvtech/x-flux",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
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",