@mrfylke/contact-form 0.1.9 → 0.1.11
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/lib/ContactFormRoot.d.ts +11 -1
- package/lib/ContactFormRoot.d.ts.map +1 -1
- package/lib/ContactFormRoot.js +2 -2
- package/lib/journey-info/index.d.ts.map +1 -1
- package/lib/journey-info/index.js +3 -3
- package/lib/layouts/contact-page-layout.d.ts.map +1 -1
- package/lib/layouts/contact-page-layout.js +10 -4
- package/lib/lines/use-lines.d.ts +2 -4
- package/lib/lines/use-lines.d.ts.map +1 -1
- package/lib/lines/use-lines.js +41 -41
- package/lib/means-of-transport/forms/serviceOfferingForm.d.ts.map +1 -1
- package/lib/means-of-transport/forms/serviceOfferingForm.js +1 -2
- package/lib/means-of-transport/means-of-transport-form-machine.d.ts.map +1 -1
- package/lib/means-of-transport/means-of-transport-form-machine.js +0 -1
- package/lib/modules/config/data.d.ts +3 -0
- package/lib/modules/config/data.d.ts.map +1 -0
- package/lib/modules/config/data.js +18 -0
- package/lib/modules/config/types.d.ts +8 -0
- package/lib/modules/config/types.d.ts.map +1 -1
- package/lib/refund/forms/refund-and-travel-guarantee/index.d.ts.map +1 -1
- package/lib/refund/forms/refund-and-travel-guarantee/index.js +7 -5
- package/lib/refund/forms/refund-and-travel-guarantee/refundCarForm.d.ts.map +1 -1
- package/lib/refund/forms/refund-and-travel-guarantee/refundCarForm.js +29 -26
- package/lib/refund/forms/refund-and-travel-guarantee/refundTaxiForm.d.ts.map +1 -1
- package/lib/refund/forms/refund-and-travel-guarantee/refundTaxiForm.js +27 -25
- package/lib/refund/forms/refund-ticket/appTicketRefund.d.ts.map +1 -1
- package/lib/refund/forms/refund-ticket/appTicketRefund.js +2 -16
- package/lib/refund/forms/refund-ticket/index.d.ts.map +1 -1
- package/lib/refund/forms/refund-ticket/index.js +4 -2
- package/lib/refund/forms/refund-ticket/otherTicketRefund.d.ts.map +1 -1
- package/lib/refund/forms/refund-ticket/otherTicketRefund.js +5 -13
- package/lib/refund/refundFormMachine.d.ts.map +1 -1
- package/lib/refund/refundFormMachine.js +13 -10
- package/lib/test-utils/setup.d.ts +2 -0
- package/lib/test-utils/setup.d.ts.map +1 -0
- package/lib/test-utils/setup.js +3 -0
- package/lib/ticket-control/forms/feeComplaintForm.d.ts.map +1 -1
- package/lib/ticket-control/forms/feeComplaintForm.js +15 -15
- package/lib/ticket-control/forms/feedbackForm.d.ts.map +1 -1
- package/lib/ticket-control/forms/feedbackForm.js +7 -3
- package/lib/ticket-control/index.d.ts.map +1 -1
- package/lib/ticket-control/index.js +8 -2
- package/lib/ticket-control/ticket-control-form-machine.d.ts +5 -1
- package/lib/ticket-control/ticket-control-form-machine.d.ts.map +1 -1
- package/lib/ticket-control/ticket-control-form-machine.js +9 -4
- package/lib/translations/merge-overrides.d.ts.map +1 -1
- package/lib/translations/merge-overrides.js +8 -1
- package/lib/translations/pages/contact.d.ts +15 -0
- package/lib/translations/pages/contact.d.ts.map +1 -1
- package/lib/translations/pages/contact.js +14 -0
- package/lib/types/submit-payloads.d.ts +21 -11
- package/lib/types/submit-payloads.d.ts.map +1 -1
- package/lib/types/submit-payloads.js +1 -1
- package/lib/validation/validationRules.d.ts.map +1 -1
- package/lib/validation/validationRules.js +24 -0
- package/package.json +11 -2
|
@@ -21,7 +21,7 @@ const disagreeAgreements = (context) => {
|
|
|
21
21
|
};
|
|
22
22
|
const setInputsToValidate = (context) => {
|
|
23
23
|
// Destructure the needed fields from context
|
|
24
|
-
const { formType, firstName, lastName, email, feeNumber, feedback, phoneNumber, invoiceNumber, appPhoneNumber, customerNumber, travelCardNumber, address, postalCode, city, hasInternationalBankAccount, bankAccountNumber, IBAN, SWIFT, transportMode, line, dateOfTicketControl, timeOfTicketControl, isAppTicketStorageMode, } = context;
|
|
24
|
+
const { formType, firstName, lastName, email, feeNumber, feedback, phoneNumber, invoiceNumber, appPhoneNumber, customerNumber, travelCardNumber, address, postalCode, city, hasInternationalBankAccount, includeBankAccountFields, bankAccountNumber, IBAN, SWIFT, transportMode, line, fromStop, toStop, dateOfTicketControl, timeOfTicketControl, isAppTicketStorageMode, } = context;
|
|
25
25
|
switch (formType) {
|
|
26
26
|
case FormType.FeeComplaint:
|
|
27
27
|
return {
|
|
@@ -37,14 +37,17 @@ const setInputsToValidate = (context) => {
|
|
|
37
37
|
...(isAppTicketStorageMode
|
|
38
38
|
? { appPhoneNumber, customerNumber }
|
|
39
39
|
: { travelCardNumber }),
|
|
40
|
-
...(
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
...(includeBankAccountFields &&
|
|
41
|
+
(hasInternationalBankAccount
|
|
42
|
+
? { IBAN, SWIFT }
|
|
43
|
+
: { bankAccountNumber })),
|
|
43
44
|
};
|
|
44
45
|
case FormType.Feedback:
|
|
45
46
|
return {
|
|
46
47
|
transportMode,
|
|
47
48
|
line,
|
|
49
|
+
fromStop,
|
|
50
|
+
toStop,
|
|
48
51
|
dateOfTicketControl,
|
|
49
52
|
timeOfTicketControl,
|
|
50
53
|
feedback,
|
|
@@ -59,6 +62,7 @@ const setInputsToValidate = (context) => {
|
|
|
59
62
|
function createTicketControlFormMachine(onSubmit, paths) {
|
|
60
63
|
const successPath = paths?.successPath ?? '/contact/success';
|
|
61
64
|
const errorPath = paths?.errorPath ?? '/contact/error';
|
|
65
|
+
const includeBankAccountFields = paths?.includeBankAccountFields !== false;
|
|
62
66
|
return (0, xstate_1.setup)({
|
|
63
67
|
types: {
|
|
64
68
|
context: {},
|
|
@@ -162,6 +166,7 @@ function createTicketControlFormMachine(onSubmit, paths) {
|
|
|
162
166
|
agreesFirstAgreement: false,
|
|
163
167
|
agreesSecondAgreement: false,
|
|
164
168
|
hasInternationalBankAccount: false,
|
|
169
|
+
includeBankAccountFields,
|
|
165
170
|
isAppTicketStorageMode: true,
|
|
166
171
|
errorMessages: {},
|
|
167
172
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-overrides.d.ts","sourceRoot":"","sources":["../../src/translations/merge-overrides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,UAAU,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,UAAU,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GACvD,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,MAAM,CASzC;
|
|
1
|
+
{"version":3,"file":"merge-overrides.d.ts","sourceRoot":"","sources":["../../src/translations/merge-overrides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,UAAU,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,UAAU,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GACvD,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,MAAM,CASzC;AAsFD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,+BAA+B,GACzC;IACD,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,UAAU,EAAE,OAAO,UAAU,CAAC;CAC/B,CAiBA"}
|
|
@@ -73,8 +73,15 @@ function deepMergeTranslations(defaults, overrides) {
|
|
|
73
73
|
(commons_1.Language.Norwegian in defaultValue ||
|
|
74
74
|
commons_1.Language.English in defaultValue ||
|
|
75
75
|
commons_1.Language.Nynorsk in defaultValue)) {
|
|
76
|
-
//
|
|
76
|
+
// If override is already a proper TranslatedString, use it directly
|
|
77
77
|
if (overrideValue &&
|
|
78
|
+
typeof overrideValue === 'object' &&
|
|
79
|
+
(commons_1.Language.Norwegian in overrideValue ||
|
|
80
|
+
commons_1.Language.English in overrideValue ||
|
|
81
|
+
commons_1.Language.Nynorsk in overrideValue)) {
|
|
82
|
+
result[key] = overrideValue;
|
|
83
|
+
}
|
|
84
|
+
else if (overrideValue &&
|
|
78
85
|
typeof overrideValue === 'object' &&
|
|
79
86
|
('no' in overrideValue ||
|
|
80
87
|
'en' in overrideValue ||
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { translation as _ } from '../../translations/commons';
|
|
1
2
|
import { ReasonForTransportFailure, TicketTypeId } from '../../types';
|
|
2
3
|
export declare const Contact: {
|
|
3
4
|
pageTitle: import("../../translations/commons").TranslatedString;
|
|
@@ -240,6 +241,10 @@ export declare const Contact: {
|
|
|
240
241
|
};
|
|
241
242
|
checkbox: import("../../translations/commons").TranslatedString;
|
|
242
243
|
};
|
|
244
|
+
nonRefundableTicketTypes: {
|
|
245
|
+
title: import("../../translations/commons").TranslatedString;
|
|
246
|
+
rules: ReturnType<typeof _>[];
|
|
247
|
+
};
|
|
243
248
|
};
|
|
244
249
|
appTicketRefund: {
|
|
245
250
|
label: import("../../translations/commons").TranslatedString;
|
|
@@ -516,6 +521,16 @@ export declare const Contact: {
|
|
|
516
521
|
empty: import("../../translations/commons").TranslatedString;
|
|
517
522
|
};
|
|
518
523
|
};
|
|
524
|
+
referenceNumber: {
|
|
525
|
+
label: import("../../translations/commons").TranslatedString;
|
|
526
|
+
errorMessages: {
|
|
527
|
+
empty: import("../../translations/commons").TranslatedString;
|
|
528
|
+
invalidFormat: {
|
|
529
|
+
singleId: import("../../translations/commons").TranslatedString;
|
|
530
|
+
multipleIds: import("../../translations/commons").TranslatedString;
|
|
531
|
+
};
|
|
532
|
+
};
|
|
533
|
+
};
|
|
519
534
|
orderId: {
|
|
520
535
|
label: (expectsSingleOrderId: boolean) => import("../../translations/commons").TranslatedString;
|
|
521
536
|
description: import("../../translations/commons").TranslatedString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact.d.ts","sourceRoot":"","sources":["../../../src/translations/pages/contact.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contact.d.ts","sourceRoot":"","sources":["../../../src/translations/pages/contact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,CAAC,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAulDtE,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAh2BG,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAialC,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CAgPF,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAqLd,MAAM;;;;yCASA,MAAM;;;;CAiCvC,CAAC"}
|
|
@@ -283,6 +283,10 @@ const ContactInternal = {
|
|
|
283
283
|
},
|
|
284
284
|
checkbox: (0, commons_1.translation)('Jeg forstår', 'I understand', 'Eg forstår'),
|
|
285
285
|
},
|
|
286
|
+
nonRefundableTicketTypes: {
|
|
287
|
+
title: (0, commons_1.translation)('Vi refunderer IKKE disse billettypene:', 'We do NOT refund these ticket types:', 'Vi refunderer IKKJE desse billettypane:'),
|
|
288
|
+
rules: [],
|
|
289
|
+
},
|
|
286
290
|
},
|
|
287
291
|
appTicketRefund: {
|
|
288
292
|
label: (0, commons_1.translation)('Billett kjøpt i app eller nettbutikk', 'Ticket purchased in an app or webshop', 'Billett kjøpt i app eller nettbutikk'),
|
|
@@ -566,6 +570,16 @@ const ContactInternal = {
|
|
|
566
570
|
empty: (0, commons_1.translation)('Spørsmålet mangler', 'The question is missing', 'Spørsmålet manglar'),
|
|
567
571
|
},
|
|
568
572
|
},
|
|
573
|
+
referenceNumber: {
|
|
574
|
+
label: (0, commons_1.translation)('Referansenummer', 'Reference number', 'Referansenummer'),
|
|
575
|
+
errorMessages: {
|
|
576
|
+
empty: (0, commons_1.translation)('Referansenummer mangler', 'Reference number is missing', 'Referansenummer manglar'),
|
|
577
|
+
invalidFormat: {
|
|
578
|
+
singleId: (0, commons_1.translation)('Ugyldig referansenummer. Skriv inn en gyldig ID på 6 eller 8 tegn.', 'Invalid reference number. Please enter a valid ID of 6 or 8 characters.', 'Ugyldig referansenummer. Skriv inn ein gyldig ID på 6 eller 8 teikn.'),
|
|
579
|
+
multipleIds: (0, commons_1.translation)('En eller flere referansenumre ugyldige. En gyldig ID består av 6 eller 8 tegn.', 'One or more reference numbers are invalid. A valid ID consists of 6 or 8 characters.', 'Ein eller fleire referansenummer er ugyldige. Ein gyldig ID består av 6 eller 8 teikn.'),
|
|
580
|
+
},
|
|
581
|
+
},
|
|
582
|
+
},
|
|
569
583
|
orderId: {
|
|
570
584
|
label: (expectsSingleOrderId) => expectsSingleOrderId
|
|
571
585
|
? (0, commons_1.translation)('Ordre-id', 'Order ID', 'Ordre-id')
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared payload types for contact form submissions.
|
|
3
3
|
* API providers can use these types to understand the structure of incoming data.
|
|
4
|
-
* Attachments are
|
|
4
|
+
* Attachments are objects with a filename and a base64-encoded body.
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
7
|
* Payload for ticket control form submissions (fee complaint, feedback, postpone payment).
|
|
@@ -29,8 +29,10 @@ export interface TicketControlSubmitPayload {
|
|
|
29
29
|
dateOfTicketControl?: string;
|
|
30
30
|
timeOfTicketControl?: string;
|
|
31
31
|
invoiceNumber?: string;
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
attachments?: {
|
|
33
|
+
filename: string;
|
|
34
|
+
body: string;
|
|
35
|
+
}[];
|
|
34
36
|
}
|
|
35
37
|
/**
|
|
36
38
|
* Payload for refund form submissions.
|
|
@@ -64,8 +66,10 @@ export interface RefundSubmitPayload {
|
|
|
64
66
|
travelCardNumber?: string;
|
|
65
67
|
refundReason?: string;
|
|
66
68
|
purchasePlatform?: string;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
attachments?: {
|
|
70
|
+
filename: string;
|
|
71
|
+
body: string;
|
|
72
|
+
}[];
|
|
69
73
|
}
|
|
70
74
|
/**
|
|
71
75
|
* Payload for means of transport form submissions (driver, transportation, delay, etc.).
|
|
@@ -84,8 +88,10 @@ export interface MeansOfTransportSubmitPayload {
|
|
|
84
88
|
lastName?: string;
|
|
85
89
|
email?: string;
|
|
86
90
|
isResponseWanted?: boolean;
|
|
87
|
-
|
|
88
|
-
|
|
91
|
+
attachments?: {
|
|
92
|
+
filename: string;
|
|
93
|
+
body: string;
|
|
94
|
+
}[];
|
|
89
95
|
}
|
|
90
96
|
/**
|
|
91
97
|
* Payload for ticketing form submissions.
|
|
@@ -102,8 +108,10 @@ export interface TicketingSubmitPayload {
|
|
|
102
108
|
customerNumber?: string;
|
|
103
109
|
travelCardNumber?: string;
|
|
104
110
|
ticketType?: object;
|
|
105
|
-
|
|
106
|
-
|
|
111
|
+
attachments?: {
|
|
112
|
+
filename: string;
|
|
113
|
+
body: string;
|
|
114
|
+
}[];
|
|
107
115
|
}
|
|
108
116
|
/**
|
|
109
117
|
* Payload for journey info form submissions.
|
|
@@ -113,7 +121,9 @@ export interface JourneyInfoSubmitPayload {
|
|
|
113
121
|
lastName?: string;
|
|
114
122
|
email?: string;
|
|
115
123
|
question?: string;
|
|
116
|
-
|
|
117
|
-
|
|
124
|
+
attachments?: {
|
|
125
|
+
filename: string;
|
|
126
|
+
body: string;
|
|
127
|
+
}[];
|
|
118
128
|
}
|
|
119
129
|
//# sourceMappingURL=submit-payloads.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-payloads.d.ts","sourceRoot":"","sources":["../../src/types/submit-payloads.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"submit-payloads.d.ts","sourceRoot":"","sources":["../../src/types/submit-payloads.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Shared payload types for contact form submissions.
|
|
4
4
|
* API providers can use these types to understand the structure of incoming data.
|
|
5
|
-
* Attachments are
|
|
5
|
+
* Attachments are objects with a filename and a base64-encoded body.
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validationRules.d.ts","sourceRoot":"","sources":["../../src/validation/validationRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAyD7D,KAAK,cAAc,GAAG;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;IAClC,YAAY,EAAE,gBAAgB,CAAC;CAChC,CAAC;
|
|
1
|
+
{"version":3,"file":"validationRules.d.ts","sourceRoot":"","sources":["../../src/validation/validationRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAyD7D,KAAK,cAAc,GAAG;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;IAClC,YAAY,EAAE,gBAAgB,CAAC;CAChC,CAAC;AAkXF,KAAK,kBAAkB,GAAG;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CAAA;CAAE,CAAC;AAEpE,eAAO,MAAM,eAAe,EAAE,kBAuC7B,CAAC"}
|
|
@@ -261,6 +261,29 @@ const rulesOrderId = [
|
|
|
261
261
|
errorMessage: translations_1.PageText.Contact.input.orderId.errorMessages.invalidFormat.multipleIds,
|
|
262
262
|
},
|
|
263
263
|
];
|
|
264
|
+
const rulesReferenceNumber = [
|
|
265
|
+
{
|
|
266
|
+
validate: isNonEmptyString,
|
|
267
|
+
errorMessage: translations_1.PageText.Contact.input.referenceNumber.errorMessages.empty,
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
validate: (val) => {
|
|
271
|
+
if (val.includes(','))
|
|
272
|
+
return true;
|
|
273
|
+
return hasExpectedLength(6, 8)(removeWhitespace(val));
|
|
274
|
+
},
|
|
275
|
+
errorMessage: translations_1.PageText.Contact.input.referenceNumber.errorMessages.invalidFormat
|
|
276
|
+
.singleId,
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
validate: (val) => {
|
|
280
|
+
const ids = removeWhitespace(val).split(',');
|
|
281
|
+
return ids.every((id) => hasExpectedLength(6, 8)(id));
|
|
282
|
+
},
|
|
283
|
+
errorMessage: translations_1.PageText.Contact.input.referenceNumber.errorMessages.invalidFormat
|
|
284
|
+
.multipleIds,
|
|
285
|
+
},
|
|
286
|
+
];
|
|
264
287
|
const rulesRefundReason = [
|
|
265
288
|
{
|
|
266
289
|
validate: isNonEmptyString,
|
|
@@ -360,6 +383,7 @@ exports.validationRules = {
|
|
|
360
383
|
toAddress: rulesToAddress,
|
|
361
384
|
question: rulesQuestion,
|
|
362
385
|
orderId: rulesOrderId,
|
|
386
|
+
referenceNumber: rulesReferenceNumber,
|
|
363
387
|
refundReason: rulesRefundReason,
|
|
364
388
|
amount: rulesAmount,
|
|
365
389
|
ticketType: rulesTicketType,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mrfylke/contact-form",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"license": "EUPL-1.2",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -34,6 +34,11 @@
|
|
|
34
34
|
"import": "./lib/modules/config/index.js",
|
|
35
35
|
"require": "./lib/modules/config/index.js"
|
|
36
36
|
},
|
|
37
|
+
"./config/data": {
|
|
38
|
+
"types": "./lib/modules/config/data.d.ts",
|
|
39
|
+
"import": "./lib/modules/config/data.js",
|
|
40
|
+
"require": "./lib/modules/config/data.js"
|
|
41
|
+
},
|
|
37
42
|
"./server": {
|
|
38
43
|
"types": "./lib/server/index.d.ts",
|
|
39
44
|
"import": "./lib/server/index.js",
|
|
@@ -45,7 +50,9 @@
|
|
|
45
50
|
"clean": "rm -rf lib",
|
|
46
51
|
"lint": "eslint \"src/**/*.{ts,tsx}\"",
|
|
47
52
|
"format": "prettier --write \"src/**/*.{ts,tsx,json,md}\"",
|
|
48
|
-
"format:check": "prettier --check \"src/**/*.{ts,tsx,json,md}\""
|
|
53
|
+
"format:check": "prettier --check \"src/**/*.{ts,tsx,json,md}\"",
|
|
54
|
+
"test": "vitest run",
|
|
55
|
+
"test:watch": "vitest"
|
|
49
56
|
},
|
|
50
57
|
"devDependencies": {
|
|
51
58
|
"@graphql-codegen/cli": "^5.0.7",
|
|
@@ -57,11 +64,13 @@
|
|
|
57
64
|
"@testing-library/jest-dom": "^6.7.0",
|
|
58
65
|
"@testing-library/react": "^16.3.2",
|
|
59
66
|
"@testing-library/user-event": "^14.6.1",
|
|
67
|
+
"@types/jsdom": "^28.0.0",
|
|
60
68
|
"@types/react": "19.1.10",
|
|
61
69
|
"@types/react-dom": "19.1.7",
|
|
62
70
|
"eslint": "^9",
|
|
63
71
|
"eslint-plugin-react": "^7.37.0",
|
|
64
72
|
"eslint-plugin-react-hooks": "^7.0.0",
|
|
73
|
+
"jsdom": "^28.1.0",
|
|
65
74
|
"prettier": "^3.0.0",
|
|
66
75
|
"typescript-eslint": "^8.54.0",
|
|
67
76
|
"vitest": "^4.0.18"
|