@swan-io/shared-business 8.14.6 → 8.15.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swan-io/shared-business",
3
- "version": "8.14.6",
3
+ "version": "8.15.0",
4
4
  "engines": {
5
5
  "node": ">=20.9.0",
6
6
  "yarn": "^1.22.0"
@@ -7,7 +7,7 @@ import { LakeTextInput } from "@swan-io/lake/src/components/LakeTextInput";
7
7
  import { Stack } from "@swan-io/lake/src/components/Stack";
8
8
  import { breakpoints, colors } from "@swan-io/lake/src/constants/design";
9
9
  import { useResponsive } from "@swan-io/lake/src/hooks/useResponsive";
10
- import { isEmpty, isNotNullish, isNullish } from "@swan-io/lake/src/utils/nullish";
10
+ import { isNotNullish, isNullish } from "@swan-io/lake/src/utils/nullish";
11
11
  import { useForm } from "@swan-io/use-form";
12
12
  import { StyleSheet, View } from "react-native";
13
13
  import { match } from "ts-pattern";
@@ -29,6 +29,7 @@ const months = [
29
29
  { value: "12", name: t("datePicker.month.december") },
30
30
  ];
31
31
  const styles = StyleSheet.create({
32
+ container: { paddingTop: 6 },
32
33
  dayMobile: {
33
34
  maxWidth: 70,
34
35
  flexGrow: 0,
@@ -69,9 +70,7 @@ export const BirthdatePicker = ({ value, label, onValueChange, error: externalEr
69
70
  : undefined,
70
71
  strategy: "onBlur",
71
72
  validate: date => {
72
- const errorMessage = isNullish(date) || Object.values(date).some(isEmpty)
73
- ? t("datePicker.error.incomplete")
74
- : validateBirthdate(date);
73
+ const errorMessage = validateBirthdate(date);
75
74
  if (isNullish(errorMessage) && isNotNullish(date)) {
76
75
  return onValueChange(formatExtractedDate(date));
77
76
  }
@@ -82,7 +81,7 @@ export const BirthdatePicker = ({ value, label, onValueChange, error: externalEr
82
81
  },
83
82
  },
84
83
  });
85
- return (_jsx(View, { style: style, children: _jsx(Field, { name: "birthdate", children: ({ error, onBlur, onChange, value }) => (_jsx(LakeLabel, { label: label, render: id => {
84
+ return (_jsx(View, { style: [styles.container, style], children: _jsx(Field, { name: "birthdate", children: ({ error, onBlur, onChange, value }) => (_jsx(LakeLabel, { label: label, render: id => {
86
85
  var _a;
87
86
  const day = (_jsx(View, { style: desktop ? styles.day : styles.dayMobile, children: _jsx(LakeTextInput, { id: id, style: (isNotNullish(error) || isNotNullish(externalError)) && styles.error, placeholder: t("datePicker.day"), value: (_a = value === null || value === void 0 ? void 0 : value.day) !== null && _a !== void 0 ? _a : undefined, onBlur: onBlur, hideErrors: true, onChangeText: day => {
88
87
  var _a, _b;
@@ -1,14 +1,19 @@
1
1
  import { StyleProp, ViewStyle } from "react-native";
2
+ type Amount = {
3
+ value: string;
4
+ currency: string;
5
+ };
6
+ type TransactionType = "SepaCreditTransferIn" | "SepaCreditTransferOut" | "SepaInstantCreditTransferIn" | "SepaInstantCreditTransferOut" | "InternalCreditTransferIn" | "InternalCreditTransferOut" | "InternationalCreditTransferIn" | "InternationalCreditTransferOut";
2
7
  type TransactionStatementV1Props = {
3
8
  version: "v1";
4
9
  partnerLogoUrl?: string;
5
10
  generationDate: string;
6
11
  executionDate: string;
7
- type: string;
8
- amount: string;
9
- targetTransferAmount?: string;
10
- exchangeRate?: string;
11
- fees?: string;
12
+ type: TransactionType;
13
+ amount: Amount;
14
+ targetTransferAmount?: Amount;
15
+ exchangeRate?: [Amount, Amount];
16
+ fees?: Amount;
12
17
  label: string;
13
18
  reference: string;
14
19
  debtorName: string;
@@ -6,10 +6,10 @@ import { Space } from "@swan-io/lake/src/components/Space";
6
6
  import { Stack } from "@swan-io/lake/src/components/Stack";
7
7
  import { SwanLogo } from "@swan-io/lake/src/components/SwanLogo";
8
8
  import { colors, fonts, interFontStyle } from "@swan-io/lake/src/constants/design";
9
- import { isNotNullishOrEmpty } from "@swan-io/lake/src/utils/nullish";
9
+ import { isNotNullish, isNotNullishOrEmpty } from "@swan-io/lake/src/utils/nullish";
10
10
  import { StyleSheet, Text, View } from "react-native";
11
11
  import { match } from "ts-pattern";
12
- import { t } from "../utils/i18n";
12
+ import { formatCurrency, t } from "../utils/i18n";
13
13
  const LOGO_MAX_HEIGHT = 24;
14
14
  const LOGO_MAX_WIDTH = 150;
15
15
  const getTextStyle = (type, fontSize) => ({
@@ -21,9 +21,9 @@ const getTextStyle = (type, fontSize) => ({
21
21
  });
22
22
  const styles = StyleSheet.create({
23
23
  container: {
24
- height: 842,
25
- width: 595,
26
- padding: 42,
24
+ height: 1050,
25
+ width: 793,
26
+ padding: 56,
27
27
  },
28
28
  partnershipText: {
29
29
  ...getTextStyle("sans", 12),
@@ -74,7 +74,16 @@ const logoStyle = {
74
74
  objectPosition: "left",
75
75
  };
76
76
  export const TransactionStatementV1 = ({ partnerLogoUrl, generationDate, executionDate, type, amount, targetTransferAmount, exchangeRate, fees, label, reference, debtorName, debtorAccountNumber, debtorBankName, debtorBankIdentifier, creditorName, creditorAccountNumber, creditorBankName, creditorBankIdentifier, style, }) => {
77
- return (_jsxs(View, { style: [styles.container, style], children: [_jsxs(Box, { direction: "row", alignItems: "center", children: [isNotNullishOrEmpty(partnerLogoUrl) ? (_jsx("img", { src: partnerLogoUrl, style: logoStyle })) : (_jsx(SwanLogo, { style: styles.defaultLogo })), _jsx(Separator, { horizontal: true, space: 8 }), _jsx(Text, { style: styles.partnershipText, children: t("transactionStatement.partnership") }), _jsx(Space, { width: 4 }), _jsx(SwanLogo, { color: colors.gray[900], style: styles.swanLogo })] }), _jsx(Space, { height: 24 }), _jsx(Text, { style: styles.pageTitle, children: t("transactionStatement.title.document") }), _jsx(Space, { height: 24 }), _jsx(Text, { style: styles.sectionTitle, children: t("transactionStatement.title.information") }), _jsx(Space, { height: 8 }), _jsxs(Stack, { space: 8, children: [_jsx(Line, { name: t("transactionStatement.information.executionDate"), value: executionDate }), _jsx(Line, { name: t("transactionStatement.information.type"), value: type }), _jsx(Line, { name: t("transactionStatement.information.amount"), value: amount }), isNotNullishOrEmpty(targetTransferAmount) && (_jsx(Line, { name: t("transactionStatement.information.targetTransferAmount"), value: targetTransferAmount })), isNotNullishOrEmpty(exchangeRate) && (_jsx(Line, { name: t("transactionStatement.information.exchangeRate"), value: exchangeRate })), isNotNullishOrEmpty(fees) && (_jsx(Line, { name: t("transactionStatement.information.fees"), value: fees })), _jsx(Line, { name: "Label", value: label }), _jsx(Line, { name: "Reference", value: reference })] }), _jsx(Space, { height: 24 }), _jsx(Text, { style: styles.sectionTitle, children: t("transactionStatement.title.debtor") }), _jsx(Space, { height: 8 }), _jsxs(Stack, { space: 8, children: [_jsx(Line, { name: t("transactionStatement.debtor.name"), value: debtorName }), _jsx(Line, { name: t("transactionStatement.debtor.accountNumber"), value: debtorAccountNumber }), isNotNullishOrEmpty(debtorBankName) && (_jsx(Line, { name: t("transactionStatement.debtor.bankName"), value: debtorBankName })), isNotNullishOrEmpty(debtorBankIdentifier) && (_jsx(Line, { name: t("transactionStatement.debtor.bankIdentifier"), value: debtorBankIdentifier }))] }), _jsx(Space, { height: 24 }), _jsx(Text, { style: styles.sectionTitle, children: t("transactionStatement.title.creditor") }), _jsx(Space, { height: 8 }), _jsxs(Stack, { space: 8, children: [_jsx(Line, { name: t("transactionStatement.creditor.name"), value: creditorName }), _jsx(Line, { name: t("transactionStatement.creditor.accountNumber"), value: creditorAccountNumber }), isNotNullishOrEmpty(creditorBankName) && (_jsx(Line, { name: t("transactionStatement.creditor.bankName"), value: creditorBankName })), isNotNullishOrEmpty(creditorBankIdentifier) && (_jsx(Line, { name: t("transactionStatement.creditor.bankIdentifier"), value: creditorBankIdentifier }))] }), _jsx(Fill, { minHeight: 8 }), _jsx(Text, { style: styles.generationInfos, children: t("transactionStatement.generationDate", { date: generationDate }) }), _jsx(Space, { height: 8 }), _jsx(Text, { style: styles.generationInfos, children: t("transactionStatement.generationInfos") }), _jsx(Separator, { space: 24 }), _jsx(Text, { style: styles.footer, children: t("transactionStatement.footer") })] }));
77
+ return (_jsxs(View, { style: [styles.container, style], children: [_jsxs(Box, { direction: "row", alignItems: "center", children: [isNotNullishOrEmpty(partnerLogoUrl) ? (_jsx("img", { src: partnerLogoUrl, style: logoStyle })) : (_jsx(SwanLogo, { style: styles.defaultLogo })), _jsx(Separator, { horizontal: true, space: 8 }), _jsx(Text, { style: styles.partnershipText, children: t("transactionStatement.partnership") }), _jsx(Space, { width: 4 }), _jsx(SwanLogo, { color: colors.gray[900], style: styles.swanLogo })] }), _jsx(Space, { height: 24 }), _jsx(Text, { style: styles.pageTitle, children: t("transactionStatement.title.document") }), _jsx(Space, { height: 24 }), _jsx(Text, { style: styles.sectionTitle, children: t("transactionStatement.title.information") }), _jsx(Space, { height: 8 }), _jsxs(Stack, { space: 8, children: [_jsx(Line, { name: t("transactionStatement.information.executionDate"), value: executionDate }), _jsx(Line, { name: t("transactionStatement.information.type"), value: match(type)
78
+ .with("SepaCreditTransferIn", () => t("transactionStatement.type.SepaCreditTransferIn"))
79
+ .with("SepaCreditTransferOut", () => t("transactionStatement.type.SepaCreditTransferOut"))
80
+ .with("SepaInstantCreditTransferIn", () => t("transactionStatement.type.SepaInstantCreditTransferIn"))
81
+ .with("SepaInstantCreditTransferOut", () => t("transactionStatement.type.SepaInstantCreditTransferOut"))
82
+ .with("InternalCreditTransferIn", () => t("transactionStatement.type.InternalCreditTransferIn"))
83
+ .with("InternalCreditTransferOut", () => t("transactionStatement.type.InternalCreditTransferOut"))
84
+ .with("InternationalCreditTransferIn", () => t("transactionStatement.type.InternationalCreditTransferIn"))
85
+ .with("InternationalCreditTransferOut", () => t("transactionStatement.type.InternationalCreditTransferOut"))
86
+ .exhaustive() }), _jsx(Line, { name: t("transactionStatement.information.amount"), value: formatCurrency(Number(amount.value), amount.currency) }), isNotNullish(targetTransferAmount) && (_jsx(Line, { name: t("transactionStatement.information.targetTransferAmount"), value: formatCurrency(Number(targetTransferAmount.value), targetTransferAmount.currency) })), isNotNullish(exchangeRate) && (_jsx(Line, { name: t("transactionStatement.information.exchangeRate"), value: `${formatCurrency(Number(exchangeRate[0].value), exchangeRate[0].currency)} : ${formatCurrency(Number(exchangeRate[1].value), exchangeRate[1].currency)}` })), isNotNullish(fees) && (_jsx(Line, { name: t("transactionStatement.information.fees"), value: formatCurrency(Number(fees.value), fees.currency) })), _jsx(Line, { name: "Label", value: label }), _jsx(Line, { name: "Reference", value: reference })] }), _jsx(Space, { height: 24 }), _jsx(Text, { style: styles.sectionTitle, children: t("transactionStatement.title.debtor") }), _jsx(Space, { height: 8 }), _jsxs(Stack, { space: 8, children: [_jsx(Line, { name: t("transactionStatement.debtor.name"), value: debtorName }), _jsx(Line, { name: t("transactionStatement.debtor.accountNumber"), value: debtorAccountNumber }), isNotNullishOrEmpty(debtorBankName) && (_jsx(Line, { name: t("transactionStatement.debtor.bankName"), value: debtorBankName })), isNotNullishOrEmpty(debtorBankIdentifier) && (_jsx(Line, { name: t("transactionStatement.debtor.bankIdentifier"), value: debtorBankIdentifier }))] }), _jsx(Space, { height: 24 }), _jsx(Text, { style: styles.sectionTitle, children: t("transactionStatement.title.creditor") }), _jsx(Space, { height: 8 }), _jsxs(Stack, { space: 8, children: [_jsx(Line, { name: t("transactionStatement.creditor.name"), value: creditorName }), _jsx(Line, { name: t("transactionStatement.creditor.accountNumber"), value: creditorAccountNumber }), isNotNullishOrEmpty(creditorBankName) && (_jsx(Line, { name: t("transactionStatement.creditor.bankName"), value: creditorBankName })), isNotNullishOrEmpty(creditorBankIdentifier) && (_jsx(Line, { name: t("transactionStatement.creditor.bankIdentifier"), value: creditorBankIdentifier }))] }), _jsx(Fill, { minHeight: 8 }), _jsx(Text, { style: styles.generationInfos, children: t("transactionStatement.generationDate", { date: generationDate }) }), _jsx(Space, { height: 8 }), _jsx(Text, { style: styles.generationInfos, children: t("transactionStatement.generationInfos") }), _jsx(Separator, { space: 24 }), _jsx(Text, { style: styles.footer, children: t("transactionStatement.footer") })] }));
78
87
  };
79
88
  export const TransactionStatement = (props) => match(props)
80
89
  .with({ version: "v1" }, props => _jsx(TransactionStatementV1, { ...props }))
@@ -48,7 +48,6 @@
48
48
  "datePicker.day.thursday": "Donnerstag",
49
49
  "datePicker.day.tuesday": "Dienstag",
50
50
  "datePicker.day.wednesday": "Mittwoch",
51
- "datePicker.error.incomplete": "Bitte geben Sie Ihr gültiges Geburtsdatum ein: Monat, Tag und Jahr.",
52
51
  "datePicker.month": "Monat",
53
52
  "datePicker.month.april": "April",
54
53
  "datePicker.month.august": "August",
@@ -298,6 +297,14 @@
298
297
  "transactionStatement.title.debtor": "Informationen zum Zahlungspflichtigen",
299
298
  "transactionStatement.title.document": "Transaktionsbestätigung",
300
299
  "transactionStatement.title.information": "Informationen",
300
+ "transactionStatement.type.InternalCreditTransferIn": "Interne Überweisung erhalten",
301
+ "transactionStatement.type.InternalCreditTransferOut": "Interne Überweisung gesendet",
302
+ "transactionStatement.type.InternationalCreditTransferIn": "Internationale Überweisung erhalten",
303
+ "transactionStatement.type.InternationalCreditTransferOut": "Internationale Überweisung gesendet",
304
+ "transactionStatement.type.SepaCreditTransferIn": "SEPA-Überweisung erhalten",
305
+ "transactionStatement.type.SepaCreditTransferOut": "SEPA-Überweisung gesendet",
306
+ "transactionStatement.type.SepaInstantCreditTransferIn": "SEPA Sofortüberweisung erhalten",
307
+ "transactionStatement.type.SepaInstantCreditTransferOut": "SEPA Sofortüberweisung gesendet",
301
308
  "validation.birthdateCannotBeFuture": "Geburtsdatum kann nicht in der Zukunft liegen.",
302
- "validation.invalidBirthDate": "Bitte geben Sie Ihr gültiges Geburtsdatum ein."
309
+ "validation.invalidBirthDate": "Bitte geben Sie ein gültiges Geburtsdatum ein."
303
310
  }
@@ -48,7 +48,6 @@
48
48
  "datePicker.day.thursday": "Thursday",
49
49
  "datePicker.day.tuesday": "Tuesday",
50
50
  "datePicker.day.wednesday": "Wednesday",
51
- "datePicker.error.incomplete": "Please enter your valid birth date: month, day, and year.",
52
51
  "datePicker.month": "Month",
53
52
  "datePicker.month.april": "April",
54
53
  "datePicker.month.august": "August",
@@ -298,6 +297,14 @@
298
297
  "transactionStatement.title.debtor": "Debtor information",
299
298
  "transactionStatement.title.document": "Transaction confirmation",
300
299
  "transactionStatement.title.information": "Information",
300
+ "transactionStatement.type.SepaCreditTransferIn": "SEPA Credit Transfer received",
301
+ "transactionStatement.type.SepaCreditTransferOut": "SEPA Credit Transfer sent",
302
+ "transactionStatement.type.SepaInstantCreditTransferIn": "SEPA Instant Credit Transfer received",
303
+ "transactionStatement.type.SepaInstantCreditTransferOut": "SEPA Instant Credit Transfer sent",
304
+ "transactionStatement.type.InternalCreditTransferIn": "Internal Credit Transfer received",
305
+ "transactionStatement.type.InternalCreditTransferOut": "Internal Credit Transfer sent",
306
+ "transactionStatement.type.InternationalCreditTransferIn": "International Credit Transfer received",
307
+ "transactionStatement.type.InternationalCreditTransferOut": "International Credit Transfer sent",
301
308
  "validation.birthdateCannotBeFuture": "Birthdate cannot be in the future",
302
- "validation.invalidBirthDate": "Please enter your valid birth date."
309
+ "validation.invalidBirthDate": "Please enter a valid birth date."
303
310
  }
@@ -48,7 +48,6 @@
48
48
  "datePicker.day.thursday": "Jueves",
49
49
  "datePicker.day.tuesday": "Martes",
50
50
  "datePicker.day.wednesday": "Miércoles",
51
- "datePicker.error.incomplete": "Por favor, introduce tu fecha de nacimiento válida: mes, día y año.",
52
51
  "datePicker.month": "Mes",
53
52
  "datePicker.month.april": "Abril",
54
53
  "datePicker.month.august": "Agosto",
@@ -298,6 +297,14 @@
298
297
  "transactionStatement.title.debtor": "Información del Deudor",
299
298
  "transactionStatement.title.document": "Confirmación de la transacción",
300
299
  "transactionStatement.title.information": "Información",
300
+ "transactionStatement.type.InternalCreditTransferIn": "Transferencia interna recibida",
301
+ "transactionStatement.type.InternalCreditTransferOut": "Transferencia interna enviada",
302
+ "transactionStatement.type.InternationalCreditTransferIn": "Transferencia internacional recibida",
303
+ "transactionStatement.type.InternationalCreditTransferOut": "Transferencia internacional enviada",
304
+ "transactionStatement.type.SepaCreditTransferIn": "Transferencia SEPA recibida",
305
+ "transactionStatement.type.SepaCreditTransferOut": "Transferencia SEPA enviada",
306
+ "transactionStatement.type.SepaInstantCreditTransferIn": "Transferencia SEPA Instantánea recibida",
307
+ "transactionStatement.type.SepaInstantCreditTransferOut": "Transferencia SEPA Instantánea enviada",
301
308
  "validation.birthdateCannotBeFuture": "La fecha de nacimiento no puede estar en el futuro",
302
- "validation.invalidBirthDate": "Por favor, introduce tu fecha de nacimiento válida."
309
+ "validation.invalidBirthDate": "Por favor, introduce una fecha de nacimiento válida."
303
310
  }
@@ -48,7 +48,6 @@
48
48
  "datePicker.day.thursday": "Torstai",
49
49
  "datePicker.day.tuesday": "Tiistai",
50
50
  "datePicker.day.wednesday": "Keskiviikko",
51
- "datePicker.error.incomplete": "Please enter your valid birth date: month, day, and year.",
52
51
  "datePicker.month": "Month",
53
52
  "datePicker.month.april": "Huhtikuu",
54
53
  "datePicker.month.august": "Elokuu",
@@ -298,6 +297,14 @@
298
297
  "transactionStatement.title.debtor": "Velallisen tiedot",
299
298
  "transactionStatement.title.document": "Transaction confirmation",
300
299
  "transactionStatement.title.information": "Tiedot",
301
- "validation.birthdateCannotBeFuture": "Birthdate cannot be in the future",
302
- "validation.invalidBirthDate": "Please enter your valid birth date."
300
+ "transactionStatement.type.InternalCreditTransferIn": "Vastaanotettu sisäinen tilisiirto",
301
+ "transactionStatement.type.InternalCreditTransferOut": "Lähetetty sisäinen tilisiirto",
302
+ "transactionStatement.type.InternationalCreditTransferIn": "Vastaanotettu kansainvälinen tilisiirto",
303
+ "transactionStatement.type.InternationalCreditTransferOut": "Lähetetty kansainvälinen tilisiirto",
304
+ "transactionStatement.type.SepaCreditTransferIn": "Vastaanotettu SEPA-tilisiirto",
305
+ "transactionStatement.type.SepaCreditTransferOut": "Lähetetty SEPA-tilisiirto",
306
+ "transactionStatement.type.SepaInstantCreditTransferIn": "Vastaanotettu SEPA Instant -tilisiirto",
307
+ "transactionStatement.type.SepaInstantCreditTransferOut": "Lähetetty SEPA Instant -tilisiirto",
308
+ "validation.birthdateCannotBeFuture": "Syntymäpäivä ei voi olla tulevaisuudessa",
309
+ "validation.invalidBirthDate": "Syötä kelvollinen syntymäpäivä."
303
310
  }
@@ -48,7 +48,6 @@
48
48
  "datePicker.day.thursday": "Jeudi",
49
49
  "datePicker.day.tuesday": "Mardi",
50
50
  "datePicker.day.wednesday": "Mercredi",
51
- "datePicker.error.incomplete": "Veuillez saisir votre date de naissance valide : mois, jour et année.",
52
51
  "datePicker.month": "Mois",
53
52
  "datePicker.month.april": "Avril",
54
53
  "datePicker.month.august": "Août",
@@ -298,6 +297,14 @@
298
297
  "transactionStatement.title.debtor": "Informations sur le débiteur",
299
298
  "transactionStatement.title.document": "Confirmation de transaction",
300
299
  "transactionStatement.title.information": "Informations",
300
+ "transactionStatement.type.InternalCreditTransferIn": "Virement interne reçu",
301
+ "transactionStatement.type.InternalCreditTransferOut": "Virement interne envoyé",
302
+ "transactionStatement.type.InternationalCreditTransferIn": "Virement international reçu",
303
+ "transactionStatement.type.InternationalCreditTransferOut": "Virement international envoyé",
304
+ "transactionStatement.type.SepaCreditTransferIn": "Virement SEPA reçu",
305
+ "transactionStatement.type.SepaCreditTransferOut": "Virement SEPA envoyé",
306
+ "transactionStatement.type.SepaInstantCreditTransferIn": "Virement SEPA instantané reçu",
307
+ "transactionStatement.type.SepaInstantCreditTransferOut": "Virement SEPA instantané envoyé",
301
308
  "validation.birthdateCannotBeFuture": "La date de naissance ne peut pas être future",
302
- "validation.invalidBirthDate": "Veuillez saisir votre date de naissance valide."
309
+ "validation.invalidBirthDate": "Veuillez saisir une date de naissance valide."
303
310
  }
@@ -48,7 +48,6 @@
48
48
  "datePicker.day.thursday": "Giovedì",
49
49
  "datePicker.day.tuesday": "Martedì",
50
50
  "datePicker.day.wednesday": "Mercoledì",
51
- "datePicker.error.incomplete": "Inserisci la tua data di nascita valida: mese, giorno e anno.",
52
51
  "datePicker.month": "Mese",
53
52
  "datePicker.month.april": "Aprile",
54
53
  "datePicker.month.august": "Agosto",
@@ -298,6 +297,14 @@
298
297
  "transactionStatement.title.debtor": "Informazioni debitore",
299
298
  "transactionStatement.title.document": "Conferma della transazione",
300
299
  "transactionStatement.title.information": "Informazioni",
300
+ "transactionStatement.type.InternalCreditTransferIn": "Bonifico interno ricevuto",
301
+ "transactionStatement.type.InternalCreditTransferOut": "Bonifico interno inviato",
302
+ "transactionStatement.type.InternationalCreditTransferIn": "Bonifico internazionale ricevuto",
303
+ "transactionStatement.type.InternationalCreditTransferOut": "Bonifico internazionale inviato",
304
+ "transactionStatement.type.SepaCreditTransferIn": "Bonifico SEPA ricevuto",
305
+ "transactionStatement.type.SepaCreditTransferOut": "Bonifico SEPA inviato",
306
+ "transactionStatement.type.SepaInstantCreditTransferIn": "Bonifico SEPA istantaneo ricevuto",
307
+ "transactionStatement.type.SepaInstantCreditTransferOut": "Bonifico SEPA istantaneo inviato",
301
308
  "validation.birthdateCannotBeFuture": "La data di nascita non può essere nel futuro",
302
- "validation.invalidBirthDate": "Inserisci la tua data di nascita valida."
309
+ "validation.invalidBirthDate": "Inserisci una data di nascita valida."
303
310
  }
@@ -48,7 +48,6 @@
48
48
  "datePicker.day.thursday": "Donderdag",
49
49
  "datePicker.day.tuesday": "Dinsdag",
50
50
  "datePicker.day.wednesday": "Woensdag",
51
- "datePicker.error.incomplete": "Voer alstublieft uw geldige geboortedatum in: maand, dag en jaar.",
52
51
  "datePicker.month": "Maand",
53
52
  "datePicker.month.april": "April",
54
53
  "datePicker.month.august": "Augustus",
@@ -298,6 +297,14 @@
298
297
  "transactionStatement.title.debtor": "Informatie over Debiteur",
299
298
  "transactionStatement.title.document": "Transactiebevestiging",
300
299
  "transactionStatement.title.information": "Informatie",
300
+ "transactionStatement.type.InternalCreditTransferIn": "Interne Overschrijving ontvangen",
301
+ "transactionStatement.type.InternalCreditTransferOut": "Interne Overschrijving verzonden",
302
+ "transactionStatement.type.InternationalCreditTransferIn": "Internationale Overschrijving ontvangen",
303
+ "transactionStatement.type.InternationalCreditTransferOut": "Internationale Overschrijving verzonden",
304
+ "transactionStatement.type.SepaCreditTransferIn": "SEPA Overschrijving ontvangen",
305
+ "transactionStatement.type.SepaCreditTransferOut": "SEPA Overschrijving verzonden",
306
+ "transactionStatement.type.SepaInstantCreditTransferIn": "SEPA Directe Overschrijving ontvangen",
307
+ "transactionStatement.type.SepaInstantCreditTransferOut": "SEPA Directe Overschrijving verzonden",
301
308
  "validation.birthdateCannotBeFuture": "Geboortedatum kan niet in de toekomst liggen",
302
- "validation.invalidBirthDate": "Voer je volledige en geldige geboortedatum in: maand, dag en jaar"
309
+ "validation.invalidBirthDate": "Voer alstublieft een geldige geboortedatum in."
303
310
  }
@@ -48,7 +48,6 @@
48
48
  "datePicker.day.thursday": "Quinta-feira",
49
49
  "datePicker.day.tuesday": "Terça-feira",
50
50
  "datePicker.day.wednesday": "Quarta-feira",
51
- "datePicker.error.incomplete": "Por favor, insira a sua data de nascimento válida: mês, dia e ano.",
52
51
  "datePicker.month": "Mês",
53
52
  "datePicker.month.april": "Abril",
54
53
  "datePicker.month.august": "Agosto",
@@ -298,6 +297,14 @@
298
297
  "transactionStatement.title.debtor": "Informações do devedor",
299
298
  "transactionStatement.title.document": "Confirmação da transação",
300
299
  "transactionStatement.title.information": "Informação",
300
+ "transactionStatement.type.InternalCreditTransferIn": "Transferência de crédito interna recebida",
301
+ "transactionStatement.type.InternalCreditTransferOut": "Transferência de crédito interna enviada",
302
+ "transactionStatement.type.InternationalCreditTransferIn": "Transferência de crédito internacional recebida",
303
+ "transactionStatement.type.InternationalCreditTransferOut": "Transferência de crédito internacional enviada",
304
+ "transactionStatement.type.SepaCreditTransferIn": "Transferência de crédito SEPA recebida",
305
+ "transactionStatement.type.SepaCreditTransferOut": "Transferência de crédito SEPA enviada",
306
+ "transactionStatement.type.SepaInstantCreditTransferIn": "Transferência de crédito instantânea SEPA recebida",
307
+ "transactionStatement.type.SepaInstantCreditTransferOut": "Transferência de crédito instantânea SEPA enviada",
301
308
  "validation.birthdateCannotBeFuture": "A data de nascimento não pode estar no futuro",
302
- "validation.invalidBirthDate": "Por favor, introduza a sua data de nascimento completa e válida: mês, dia e ano"
309
+ "validation.invalidBirthDate": "Por favor, insira uma data de nascimento válida."
303
310
  }
@@ -18,6 +18,7 @@ type Locale = {
18
18
  };
19
19
  export declare const locale: Locale;
20
20
  export declare const t: (key: TranslationKey, params?: TranslationParams) => string;
21
+ export declare const formatCurrency: (value: number, currency: string) => string;
21
22
  export declare const formatNestedMessage: (key: TranslationKey, params: Record<string, string | number | ReactElement | ((children: ReactNode) => ReactNode)>) => (string | ReactElement<any, string | import("react").JSXElementConstructor<any>>)[];
22
23
  export declare const rifmDateProps: RifmProps;
23
24
  export declare const isTranslationKey: (value: unknown) => value is TranslationKey;
package/src/utils/i18n.js CHANGED
@@ -116,6 +116,7 @@ const intl = createIntl({
116
116
  messages: locale.translations,
117
117
  }, createIntlCache());
118
118
  export const t = (key, params) => intl.formatMessage({ id: key, defaultMessage: translationEN[key] }, params).toString();
119
+ export const formatCurrency = (value, currency) => intl.formatNumber(value, { style: "currency", currency });
119
120
  export const formatNestedMessage = (key, params) => {
120
121
  const result = intl.formatMessage({ id: key, defaultMessage: translationEN[key] },
121
122
  // @ts-expect-error
@@ -10,4 +10,4 @@ export declare const validateIndividualTaxNumber: (accountCountry: AccountCountr
10
10
  export declare const validateCompanyTaxNumber: (accountCountry: AccountCountry) => Validator<string | undefined>;
11
11
  export { printFormat as printIbanFormat } from "iban";
12
12
  export declare const validateIban: (iban: string) => string | undefined;
13
- export declare const validateBirthdate: (value: ExtractedDate) => string | undefined;
13
+ export declare const validateBirthdate: (value: ExtractedDate | undefined) => string | undefined;
@@ -1,4 +1,5 @@
1
1
  import { noop } from "@swan-io/lake/src/utils/function";
2
+ import { isNullish } from "@swan-io/lake/src/utils/nullish";
2
3
  import dayjs from "dayjs";
3
4
  import { isValid as isValidIban } from "iban";
4
5
  import { match } from "ts-pattern";
@@ -105,6 +106,9 @@ export const validateIban = (iban) => {
105
106
  }
106
107
  };
107
108
  export const validateBirthdate = (value) => {
109
+ if (isNullish(value)) {
110
+ return t("validation.invalidBirthDate");
111
+ }
108
112
  const date = dayjs.utc(formatExtractedDate(value), "YYYY-MM-DD", true);
109
113
  const isBirthdateOver150years = date.isBefore(dayjs.utc().subtract(100, "years"));
110
114
  const isBirthdateWithin4years = date.isAfter(dayjs.utc().subtract(4, "years"));