@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 +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +53 -9
- package/dist/index.mjs +53 -9
- package/package.json +1 -1
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: "
|
|
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: "
|
|
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
|
|
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: !
|
|
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
|
|
740
|
+
const hasOrderBlockingIssues = orderValidations?.status === "UNFIXABLE" /* UNFIXABLE */;
|
|
740
741
|
return {
|
|
741
|
-
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: "
|
|
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: "
|
|
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
|
|
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: !
|
|
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
|
|
714
|
+
const hasOrderBlockingIssues = orderValidations?.status === "UNFIXABLE" /* UNFIXABLE */;
|
|
714
715
|
return {
|
|
715
|
-
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.
|
|
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",
|