@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.
Files changed (56) hide show
  1. package/lib/ContactFormRoot.d.ts +11 -1
  2. package/lib/ContactFormRoot.d.ts.map +1 -1
  3. package/lib/ContactFormRoot.js +2 -2
  4. package/lib/journey-info/index.d.ts.map +1 -1
  5. package/lib/journey-info/index.js +3 -3
  6. package/lib/layouts/contact-page-layout.d.ts.map +1 -1
  7. package/lib/layouts/contact-page-layout.js +10 -4
  8. package/lib/lines/use-lines.d.ts +2 -4
  9. package/lib/lines/use-lines.d.ts.map +1 -1
  10. package/lib/lines/use-lines.js +41 -41
  11. package/lib/means-of-transport/forms/serviceOfferingForm.d.ts.map +1 -1
  12. package/lib/means-of-transport/forms/serviceOfferingForm.js +1 -2
  13. package/lib/means-of-transport/means-of-transport-form-machine.d.ts.map +1 -1
  14. package/lib/means-of-transport/means-of-transport-form-machine.js +0 -1
  15. package/lib/modules/config/data.d.ts +3 -0
  16. package/lib/modules/config/data.d.ts.map +1 -0
  17. package/lib/modules/config/data.js +18 -0
  18. package/lib/modules/config/types.d.ts +8 -0
  19. package/lib/modules/config/types.d.ts.map +1 -1
  20. package/lib/refund/forms/refund-and-travel-guarantee/index.d.ts.map +1 -1
  21. package/lib/refund/forms/refund-and-travel-guarantee/index.js +7 -5
  22. package/lib/refund/forms/refund-and-travel-guarantee/refundCarForm.d.ts.map +1 -1
  23. package/lib/refund/forms/refund-and-travel-guarantee/refundCarForm.js +29 -26
  24. package/lib/refund/forms/refund-and-travel-guarantee/refundTaxiForm.d.ts.map +1 -1
  25. package/lib/refund/forms/refund-and-travel-guarantee/refundTaxiForm.js +27 -25
  26. package/lib/refund/forms/refund-ticket/appTicketRefund.d.ts.map +1 -1
  27. package/lib/refund/forms/refund-ticket/appTicketRefund.js +2 -16
  28. package/lib/refund/forms/refund-ticket/index.d.ts.map +1 -1
  29. package/lib/refund/forms/refund-ticket/index.js +4 -2
  30. package/lib/refund/forms/refund-ticket/otherTicketRefund.d.ts.map +1 -1
  31. package/lib/refund/forms/refund-ticket/otherTicketRefund.js +5 -13
  32. package/lib/refund/refundFormMachine.d.ts.map +1 -1
  33. package/lib/refund/refundFormMachine.js +13 -10
  34. package/lib/test-utils/setup.d.ts +2 -0
  35. package/lib/test-utils/setup.d.ts.map +1 -0
  36. package/lib/test-utils/setup.js +3 -0
  37. package/lib/ticket-control/forms/feeComplaintForm.d.ts.map +1 -1
  38. package/lib/ticket-control/forms/feeComplaintForm.js +15 -15
  39. package/lib/ticket-control/forms/feedbackForm.d.ts.map +1 -1
  40. package/lib/ticket-control/forms/feedbackForm.js +7 -3
  41. package/lib/ticket-control/index.d.ts.map +1 -1
  42. package/lib/ticket-control/index.js +8 -2
  43. package/lib/ticket-control/ticket-control-form-machine.d.ts +5 -1
  44. package/lib/ticket-control/ticket-control-form-machine.d.ts.map +1 -1
  45. package/lib/ticket-control/ticket-control-form-machine.js +9 -4
  46. package/lib/translations/merge-overrides.d.ts.map +1 -1
  47. package/lib/translations/merge-overrides.js +8 -1
  48. package/lib/translations/pages/contact.d.ts +15 -0
  49. package/lib/translations/pages/contact.d.ts.map +1 -1
  50. package/lib/translations/pages/contact.js +14 -0
  51. package/lib/types/submit-payloads.d.ts +21 -11
  52. package/lib/types/submit-payloads.d.ts.map +1 -1
  53. package/lib/types/submit-payloads.js +1 -1
  54. package/lib/validation/validationRules.d.ts.map +1 -1
  55. package/lib/validation/validationRules.js +24 -0
  56. 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
- ...(hasInternationalBankAccount
41
- ? { IBAN, SWIFT }
42
- : { bankAccountNumber }),
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;AA8ED;;;;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"}
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
- // Merge TranslatedString
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":"AAEA,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAwjDtE,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAxaT,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CAyNF,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAqLd,MAAM;;;;yCASA,MAAM;;;;CAiCvC,CAAC"}
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 base64-encoded strings when sent to the API.
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
- /** Base64-encoded attachments */
33
- attachments?: string[];
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
- /** Base64-encoded attachments */
68
- attachments?: string[];
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
- /** Base64-encoded attachments */
88
- attachments?: string[];
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
- /** Base64-encoded attachments */
106
- attachments?: string[];
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
- /** Base64-encoded attachments */
117
- attachments?: string[];
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":"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"}
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 base64-encoded strings when sent to the API.
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;AAyVF,KAAK,kBAAkB,GAAG;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CAAA;CAAE,CAAC;AAEpE,eAAO,MAAM,eAAe,EAAE,kBAsC7B,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.9",
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"