@asdp/ferryui 0.1.22-dev.10206 → 0.1.22-dev.10214

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 CHANGED
@@ -2869,6 +2869,8 @@ interface ModalPassengerFormProps {
2869
2869
  * Whether the form is currently submitting
2870
2870
  */
2871
2871
  isLoading?: boolean;
2872
+ minAge: number;
2873
+ maxAge: number;
2872
2874
  }
2873
2875
 
2874
2876
  declare const ModalPassengerForm: React$1.FC<ModalPassengerFormProps>;
@@ -2896,6 +2898,10 @@ interface CardPassengerListProps {
2896
2898
  * Callback when a passenger is clicked
2897
2899
  */
2898
2900
  onPassengerClick: (passenger: Passenger) => void;
2901
+ /**
2902
+ * Callback when a passenger is clicked
2903
+ */
2904
+ onIconClick: (event: React.MouseEvent<SVGSVGElement, MouseEvent>, passenger: Passenger, mode: 'add' | 'edit') => void;
2899
2905
  /**
2900
2906
  * Custom labels override (optional)
2901
2907
  * If not provided, default labels based on language will be used
package/dist/index.d.ts CHANGED
@@ -2869,6 +2869,8 @@ interface ModalPassengerFormProps {
2869
2869
  * Whether the form is currently submitting
2870
2870
  */
2871
2871
  isLoading?: boolean;
2872
+ minAge: number;
2873
+ maxAge: number;
2872
2874
  }
2873
2875
 
2874
2876
  declare const ModalPassengerForm: React$1.FC<ModalPassengerFormProps>;
@@ -2896,6 +2898,10 @@ interface CardPassengerListProps {
2896
2898
  * Callback when a passenger is clicked
2897
2899
  */
2898
2900
  onPassengerClick: (passenger: Passenger) => void;
2901
+ /**
2902
+ * Callback when a passenger is clicked
2903
+ */
2904
+ onIconClick: (event: React.MouseEvent<SVGSVGElement, MouseEvent>, passenger: Passenger, mode: 'add' | 'edit') => void;
2899
2905
  /**
2900
2906
  * Custom labels override (optional)
2901
2907
  * If not provided, default labels based on language will be used
package/dist/index.js CHANGED
@@ -11298,7 +11298,9 @@ var ModalPassengerForm = ({
11298
11298
  idTypes,
11299
11299
  ticketClassOptions,
11300
11300
  onScanComplete,
11301
- isLoading
11301
+ isLoading,
11302
+ minAge,
11303
+ maxAge
11302
11304
  }) => {
11303
11305
  const styles = useStyles24();
11304
11306
  const mergedLabels = { ...DEFAULT_LABELS23[language], ...labels };
@@ -11307,6 +11309,15 @@ var ModalPassengerForm = ({
11307
11309
  ...labels?.errors
11308
11310
  };
11309
11311
  const displayTitle = title || mergedLabels.title;
11312
+ const computeDateBound = (yearsOffset) => {
11313
+ const d = /* @__PURE__ */ new Date();
11314
+ d.setFullYear(d.getFullYear() - yearsOffset);
11315
+ const offset = d.getTimezoneOffset();
11316
+ const adjusted = new Date(d.getTime() - offset * 60 * 1e3);
11317
+ return adjusted.toISOString().split("T")[0];
11318
+ };
11319
+ const birthdateMaxDate = computeDateBound(minAge);
11320
+ const birthdateMinDate = computeDateBound(maxAge);
11310
11321
  const [isModalSelectIdTypeOpen, setIsModalSelectIdTypeOpen] = React.useState(false);
11311
11322
  const [isModalScanOpen, setIsModalScanOpen] = React.useState(false);
11312
11323
  const [scannedIdType, setScannedIdType] = React.useState(null);
@@ -11342,6 +11353,15 @@ var ModalPassengerForm = ({
11342
11353
  const dynamicMinLengthId = idRuleLengthMatch ? parseInt(idRuleLengthMatch[1], 10) : 6;
11343
11354
  React.useEffect(() => {
11344
11355
  reset(defaultValues);
11356
+ if (defaultValues?.birthdate) {
11357
+ const { years, months } = calculateAge(defaultValues.birthdate);
11358
+ setValue(
11359
+ "age",
11360
+ `${years} ${mergedLabels.yearLabel} ${months} ${mergedLabels.monthLabel}`
11361
+ );
11362
+ } else {
11363
+ setValue("age", "");
11364
+ }
11345
11365
  }, [defaultValues, reset]);
11346
11366
  React.useEffect(() => {
11347
11367
  if (watchIdentityTypeId) {
@@ -11359,6 +11379,7 @@ var ModalPassengerForm = ({
11359
11379
  setValue("age", "");
11360
11380
  }
11361
11381
  }, [
11382
+ open,
11362
11383
  watchBirthdate,
11363
11384
  setValue,
11364
11385
  mergedLabels.yearLabel,
@@ -11894,14 +11915,23 @@ var ModalPassengerForm = ({
11894
11915
  size: "large",
11895
11916
  required: true,
11896
11917
  disableFutureDates: true,
11918
+ min: birthdateMinDate,
11919
+ max: birthdateMaxDate,
11897
11920
  validationRules: {
11898
11921
  required: mergedErrors.requiredDate,
11899
11922
  validate: (value) => {
11900
- const selectedDate = new Date(value);
11901
- const today = /* @__PURE__ */ new Date();
11902
- today.setHours(0, 0, 0, 0);
11903
- if (selectedDate > today) {
11904
- return mergedErrors.birthDateFuture;
11923
+ const { years } = calculateAge(value);
11924
+ if (years < minAge) {
11925
+ return mergedErrors.minAge.replace(
11926
+ /\d+/,
11927
+ minAge.toString()
11928
+ );
11929
+ }
11930
+ if (years > maxAge) {
11931
+ return mergedErrors.maxAge.replace(
11932
+ /\d+/,
11933
+ maxAge.toString()
11934
+ );
11905
11935
  }
11906
11936
  return true;
11907
11937
  }
@@ -12221,6 +12251,7 @@ var CardPassengerList = ({
12221
12251
  title,
12222
12252
  passengers,
12223
12253
  onPassengerClick,
12254
+ onIconClick,
12224
12255
  labels,
12225
12256
  className
12226
12257
  }) => {
@@ -12287,7 +12318,14 @@ var CardPassengerList = ({
12287
12318
  {
12288
12319
  icon: passenger.id && passenger.serviceName ? "fluent:edit-24-regular" : "fluent:chevron-right-24-regular",
12289
12320
  width: 20,
12290
- height: 20
12321
+ height: 20,
12322
+ onClick: (event) => {
12323
+ onIconClick(
12324
+ event,
12325
+ passenger,
12326
+ passenger.id && passenger.serviceName ? "edit" : "add"
12327
+ );
12328
+ }
12291
12329
  }
12292
12330
  )
12293
12331
  ]