@adyen/kyc-components
Version:
This guide assumes that you have already an account with Adyen. A legalEntity needs to be created, and you need to have a `legalEntityId` to instatiate a Component.
207 lines (206 loc) • 9.26 kB
JavaScript
try {
let e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "d0d6a01f-03cb-4272-b0cb-cf7c27f16976", e._sentryDebugIdIdentifier = "sentry-dbid-d0d6a01f-03cb-4272-b0cb-cf7c27f16976");
} catch (e) {}
import { i as Typography, r as useTranslation } from "./translation-BFxyJ1c5.js";
import { t as Button } from "./Button-oj6H8OrC.js";
import { r as httpPost, s as useApiContext } from "./http-D1NDkBxF.js";
import { t as useAnalyticsContext } from "./useAnalyticsContext-BVFDMrVE.js";
import { t as CountryCodes } from "./country-code-CX5KqMBr.js";
import { c as individualBaseMapping, y as reverseMapping } from "./processCapabilities-DlZY9-Jc.js";
import { o as getNomineeFromAssociation } from "./entityAssociationUtil-BEzUdPbm.js";
import { t as DecisionMakerTypes } from "./decision-maker-type-Cow3CpUd.js";
import { r as formatObject } from "./utils-oc3EdK6K.js";
import { t as Field } from "./Field-pcJkjIG_.js";
import { t as TileGroup } from "./TileGroup-D0YbtzZ0.js";
import { n as mapApiScriptLocalizationToSchemaFields, t as mapAddressLocalizationToJpAddressSchema } from "./mapAddressLocalizationToJpAddressSchema-Cu5HfF7K.js";
import { jsx, jsxs } from "preact/jsx-runtime";
import { signal } from "@preact/signals";
import { useMutation } from "@tanstack/preact-query";
//#region src/api/invitations/useCreateInvitation.ts
var createInvitation = async (baseUrl, organizationLegalEntityId, inviteeLegalEntityId, data) => {
return httpPost({
baseUrl,
path: `legalEntities/${organizationLegalEntityId}/invitations/associations/${inviteeLegalEntityId}`
}, data);
};
var useCreateInvitation = (options) => {
const { baseUrl } = useApiContext();
return useMutation({
mutationFn: ({ organizationLegalEntityId, inviteeLegalEntityId, data }) => {
return createInvitation(baseUrl.value, organizationLegalEntityId, inviteeLegalEntityId, data);
},
...options
});
};
//#endregion
//#region src/stores/formState.ts
var individualFormDefaultData = signal(null);
var GuidanceQuestion_module_default = {
"guidance-question": "adyen-kyc-guidance-question",
guidanceQuestion: "adyen-kyc-guidance-question",
options: "adyen-kyc-options"
};
//#endregion
//#region src/components/Individual/forms/GuidanceQuestion/GuidanceQuestion.tsx
var GuidanceQuestionValues = {
YES: "Yes",
NO: "No"
};
var GuidanceQuestion = (props) => {
const { descriptionLinkText, errorMessage, name, noLabel, onChange, onDescriptionLinkClick, question, value, yesLabel } = props;
const { t } = useTranslation("common");
const userEvents = useAnalyticsContext();
const handleChange = (selectedValue) => {
userEvents.addFieldEvent("Interacted with form field", {
actionType: "select",
field: name,
returnValue: selectedValue
});
onChange(selectedValue || null);
};
const yesTileLabel = yesLabel ?? t(($) => $["yes"]);
const noTileLabel = noLabel ?? t(($) => $["no"]);
return /* @__PURE__ */ jsxs("div", {
className: GuidanceQuestion_module_default.guidanceQuestion,
children: [
/* @__PURE__ */ jsx(Typography, {
variant: "body",
el: "p",
id: `${name}-question`,
children: question
}),
descriptionLinkText && onDescriptionLinkClick && /* @__PURE__ */ jsx(Button, {
variant: "link",
onClick: onDescriptionLinkClick,
children: descriptionLinkText
}),
/* @__PURE__ */ jsx("div", {
role: "group",
"aria-labelledby": `${name}-question`,
children: /* @__PURE__ */ jsx(Field, {
name,
className: GuidanceQuestion_module_default.options,
children: () => /* @__PURE__ */ jsx(TileGroup, {
allowMultiple: false,
errorMessage,
isHorizontal: true,
maxSelected: 1,
name,
onChange: handleChange,
selected: value || "",
tiles: [{
label: yesTileLabel,
value: GuidanceQuestionValues.YES
}, {
label: noTileLabel,
value: GuidanceQuestionValues.NO
}]
})
})
})
]
});
};
//#endregion
//#region src/components/Individual/mapping/getOnfidoIdentityTypeToApiIdentityTypeMap.ts
var getOnfidoIdentityTypeToApiIdentityTypeMap = (data) => {
const { country } = data;
switch (country) {
case CountryCodes.HongKong: return {
passport: "passport",
driversLicense: "driversLicense",
proofOfIdentityCard: "nationalIdNumber"
};
default: return {
nationalIdNumber: "nationalIdNumber",
passport: "passport",
driversLicense: "driversLicense",
proofOfIdentityCard: "identityCard"
};
}
};
//#endregion
//#region src/components/Individual/mapping/mapLegalEntityToIndividualSchema.ts
var getIndividualSchemaFromAPI = { ...individualBaseMapping };
var mapLegalEntityToIndividualSchema = (legalEntity, isChangingType, isRoleFieldNeeded, parentLegalEntity) => {
let individual = { ...formatObject(legalEntity, getIndividualSchemaFromAPI) };
individual = {
...individual,
basicDetails: {
...individual?.basicDetails,
...isChangingType && {
firstName: "",
lastName: "",
localization: {}
}
},
signatoryQuestionnaire: { isSignatory: isChangingType ? null : individual.signatoryQuestionnaire?.isSignatory ?? null },
uboQuestionnaire: isChangingType ? {
isOwner: null,
isControllingPerson: null,
isDirector: null,
isNomineeShareholder: null,
isNomineeDirector: null
} : {
isOwner: individual.uboQuestionnaire?.isOwner ?? null,
isControllingPerson: individual.uboQuestionnaire?.isControllingPerson ?? null,
isDirector: individual.uboQuestionnaire?.isDirector ?? null,
isNomineeDirector: individual.uboQuestionnaire?.isNomineeDirector ?? null,
isNomineeShareholder: individual.uboQuestionnaire?.isNomineeShareholder ?? null
}
};
if (legalEntity?.documentDetails?.length) individual = {
...individual,
idVerificationMethod: {
idVerificationMethod: "existingDocument",
idDocument: mapDocumentDetailToIdDocument(legalEntity.documentDetails)
}
};
if (legalEntity.individual?.identificationData?.type && individual.additionalPersonalDetails) {
const apiIdentityTypeToIdentityTypeMap = reverseMapping(getOnfidoIdentityTypeToApiIdentityTypeMap(individual.additionalPersonalDetails));
individual.additionalPersonalDetails.typeOfIdentity = apiIdentityTypeToIdentityTypeMap[legalEntity.individual.identificationData.type];
}
if (legalEntity.individual?.name?.localization) for (const scriptLoc of legalEntity.individual.name.localization) individual.basicDetails = {
...individual.basicDetails,
...mapApiScriptLocalizationToSchemaFields(scriptLoc)
};
if (legalEntity.individual?.residentialAddress?.localization) individual.additionalPersonalDetails = {
...individual.additionalPersonalDetails,
...mapAddressLocalizationToJpAddressSchema(legalEntity.individual.residentialAddress.localization)
};
/**
* Map association details of individual to personal
* details from parentLegalEntity. role, jobTitle, relationship, nomineeShareholder,
* nomineeDirector are not part of individual legalEntity but part of entityAssociations
* in parentLegalEntity
* **/
if (!parentLegalEntity?.entityAssociations) return individual;
const associations = parentLegalEntity?.entityAssociations?.filter((ea) => ea.legalEntityId === legalEntity?.id) ?? [];
if (isRoleFieldNeeded && individual.basicDetails) {
individual.basicDetails.role = associations.map((ea) => ea.type);
individual.basicDetails.jobTitle = associations.find(({ jobTitle }) => Boolean(jobTitle))?.jobTitle;
}
if (isRoleFieldNeeded && individual.signatoryQuestionnaire && individual.uboQuestionnaire) {
const associationTypes = new Set(associations.map((ea) => ea.type));
const hasAssociation = (type) => associationTypes.has(type) ? GuidanceQuestionValues.YES : GuidanceQuestionValues.NO;
individual.signatoryQuestionnaire.isSignatory = hasAssociation(DecisionMakerTypes.SIGNATORY);
individual.uboQuestionnaire.isOwner = hasAssociation(DecisionMakerTypes.OWNER);
individual.uboQuestionnaire.isControllingPerson = hasAssociation(DecisionMakerTypes.CONTROLLING_PERSON);
individual.uboQuestionnaire.isDirector = hasAssociation(DecisionMakerTypes.DIRECTOR);
const hasNomineeAssociation = (type) => associations.some((ea) => ea.type === type && ea.nominee) ? GuidanceQuestionValues.YES : GuidanceQuestionValues.NO;
individual.uboQuestionnaire.isNomineeDirector = hasNomineeAssociation(DecisionMakerTypes.DIRECTOR);
individual.uboQuestionnaire.isNomineeShareholder = hasNomineeAssociation(DecisionMakerTypes.OWNER);
}
individual.basicDetails = getNomineeFromAssociation(associations, individual.basicDetails);
return individual;
};
var mapDocumentDetailToIdDocument = (documents) => {
const activeDocument = documents.find((document) => document.active);
return activeDocument ? {
idDocumentType: activeDocument.type,
modificationDate: activeDocument.modificationDate
} : void 0;
};
//#endregion
export { individualFormDefaultData as a, GuidanceQuestionValues as i, getOnfidoIdentityTypeToApiIdentityTypeMap as n, useCreateInvitation as o, GuidanceQuestion as r, mapLegalEntityToIndividualSchema as t };