@asdp/ferryui 0.1.22-dev.10171 → 0.1.22-dev.10177

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
@@ -1480,6 +1480,8 @@ interface ModalTotalPassengersLabels {
1480
1480
  saveButton: string;
1481
1481
  closeAriaLabel: string;
1482
1482
  emptyContent: string;
1483
+ childCompanionWarning: string;
1484
+ infantCompanionWarning: string;
1483
1485
  }
1484
1486
  /**
1485
1487
  * Passenger object structure
package/dist/index.d.ts CHANGED
@@ -1480,6 +1480,8 @@ interface ModalTotalPassengersLabels {
1480
1480
  saveButton: string;
1481
1481
  closeAriaLabel: string;
1482
1482
  emptyContent: string;
1483
+ childCompanionWarning: string;
1484
+ infantCompanionWarning: string;
1483
1485
  }
1484
1486
  /**
1485
1487
  * Passenger object structure
package/dist/index.js CHANGED
@@ -7931,7 +7931,9 @@ var DEFAULT_LABELS14 = {
7931
7931
  loading: "Memuat...",
7932
7932
  saveButton: "Simpan",
7933
7933
  closeAriaLabel: "Tutup",
7934
- emptyContent: "Kelas Penumpang"
7934
+ emptyContent: "Kelas Penumpang",
7935
+ childCompanionWarning: "Anak harus didampingi minimal 1 dewasa atau lansia.",
7936
+ infantCompanionWarning: "Bayi harus didampingi minimal 1 dewasa atau lansia."
7935
7937
  },
7936
7938
  en: {
7937
7939
  title: "Select Total Passengers",
@@ -7939,7 +7941,9 @@ var DEFAULT_LABELS14 = {
7939
7941
  loading: "Loading...",
7940
7942
  saveButton: "Save",
7941
7943
  closeAriaLabel: "Close",
7942
- emptyContent: "Passengers Class"
7944
+ emptyContent: "Passengers Class",
7945
+ childCompanionWarning: "Children must be accompanied by at least 1 adult or elderly.",
7946
+ infantCompanionWarning: "Infants must be accompanied by at least 1 adult or elderly."
7943
7947
  }
7944
7948
  };
7945
7949
  var useStyles15 = reactComponents.makeStyles({
@@ -8012,6 +8016,14 @@ var useStyles15 = reactComponents.makeStyles({
8012
8016
  },
8013
8017
  accordionPanel: {
8014
8018
  margin: 0
8019
+ },
8020
+ warningText: {
8021
+ display: "flex",
8022
+ alignItems: "center",
8023
+ gap: "6px",
8024
+ marginBottom: "1rem",
8025
+ fontSize: reactComponents.tokens.fontSizeBase300,
8026
+ color: "#E87511"
8015
8027
  }
8016
8028
  });
8017
8029
  var TotalPassengersListSkeleton = ({
@@ -8090,6 +8102,9 @@ var ModalTotalPassengers = ({
8090
8102
  const mergedLabels = { ...DEFAULT_LABELS14[language], ...labels };
8091
8103
  const [passengers, setPassengers] = React.useState([]);
8092
8104
  const [openItems, setOpenItems] = React.useState([]);
8105
+ const [companionWarnings, setCompanionWarnings] = React.useState(
8106
+ /* @__PURE__ */ new Set()
8107
+ );
8093
8108
  const defaultInfoMessage = mergedLabels.infoMessage.replace(
8094
8109
  "{maxPassengers}",
8095
8110
  String(maxPassengers)
@@ -8147,13 +8162,6 @@ var ModalTotalPassengers = ({
8147
8162
  const cls = passenger.classes.find((c) => c.classCode === classCode);
8148
8163
  return cls?.count ?? 0;
8149
8164
  };
8150
- const getTotalCountForType = (passengerAgeCode) => {
8151
- const passenger = passengers.find(
8152
- (p) => p.passengerAgeCode === passengerAgeCode
8153
- );
8154
- if (!passenger) return 0;
8155
- return passenger.classes.reduce((sum, cls) => sum + (cls.count ?? 0), 0);
8156
- };
8157
8165
  const getTotalForType = (passengerAgeCode) => {
8158
8166
  const passenger = passengers.find(
8159
8167
  (p) => p.passengerAgeCode === passengerAgeCode
@@ -8172,6 +8180,20 @@ var ModalTotalPassengers = ({
8172
8180
  (total, passenger) => total + passenger.classes.reduce((sum, cls) => sum + (cls.count ?? 0), 0),
8173
8181
  0
8174
8182
  );
8183
+ React.useEffect(() => {
8184
+ const warnings = /* @__PURE__ */ new Set();
8185
+ const hasAdultOrElderly = passengers.some(
8186
+ (p) => (p.passengerAgeCode === "ADULT" || p.passengerAgeCode === "ELDERLY") && p.classes.some((cls) => (cls.count ?? 0) > 0)
8187
+ );
8188
+ if (!hasAdultOrElderly) {
8189
+ passengers.forEach((p) => {
8190
+ if ((p.passengerAgeCode === "CHILD" || p.passengerAgeCode === "INFANT") && p.classes.some((cls) => (cls.count ?? 0) > 0)) {
8191
+ warnings.add(p.passengerAgeCode);
8192
+ }
8193
+ });
8194
+ }
8195
+ setCompanionWarnings(warnings);
8196
+ }, [passengers]);
8175
8197
  const handleIncrement = (passengerAgeCode, classCode) => {
8176
8198
  setPassengers(
8177
8199
  (prev) => prev.map((passenger) => {
@@ -8266,80 +8288,96 @@ var ModalTotalPassengers = ({
8266
8288
  className: styles.passengerSection,
8267
8289
  children: passengerTypes.map((passengerType) => {
8268
8290
  const classes = passengerType.classes || [];
8269
- return /* @__PURE__ */ jsxRuntime.jsxs(
8270
- reactComponents.AccordionItem,
8271
- {
8272
- value: String(passengerType.id),
8273
- className: styles.accordionItem,
8274
- children: [
8275
- /* @__PURE__ */ jsxRuntime.jsxs(
8276
- reactComponents.AccordionHeader,
8277
- {
8278
- className: styles.accordionHeader,
8279
- expandIconPosition: "end",
8280
- children: [
8281
- passengerType.passengerAgeName,
8282
- " (",
8283
- getTotalForType(passengerType.passengerAgeCode),
8284
- ")"
8285
- ]
8286
- }
8287
- ),
8288
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.AccordionPanel, { className: styles.accordionPanel, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.nestedSection, children: classes.map((cls) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.nestedRow, children: [
8289
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: (cls?.className || "")?.toUpperCase() }),
8290
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.passengerCount, children: [
8291
- /* @__PURE__ */ jsxRuntime.jsx(
8292
- reactComponents.Button,
8293
- {
8294
- appearance: "outline",
8295
- className: styles.counterButton,
8296
- size: "small",
8297
- icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:subtract-12-regular" }),
8298
- onClick: (e) => {
8299
- e.stopPropagation();
8300
- handleDecrement(
8291
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8292
+ /* @__PURE__ */ jsxRuntime.jsxs(
8293
+ reactComponents.AccordionItem,
8294
+ {
8295
+ value: String(passengerType.id),
8296
+ className: styles.accordionItem,
8297
+ children: [
8298
+ /* @__PURE__ */ jsxRuntime.jsxs(
8299
+ reactComponents.AccordionHeader,
8300
+ {
8301
+ className: styles.accordionHeader,
8302
+ expandIconPosition: "end",
8303
+ children: [
8304
+ passengerType.passengerAgeName,
8305
+ " (",
8306
+ getTotalForType(passengerType.passengerAgeCode),
8307
+ ")"
8308
+ ]
8309
+ }
8310
+ ),
8311
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.AccordionPanel, { className: styles.accordionPanel, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.nestedSection, children: classes.map((cls) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.nestedRow, children: [
8312
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: (cls?.className || "")?.toUpperCase() }),
8313
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.passengerCount, children: [
8314
+ /* @__PURE__ */ jsxRuntime.jsx(
8315
+ reactComponents.Button,
8316
+ {
8317
+ appearance: "outline",
8318
+ className: styles.counterButton,
8319
+ size: "small",
8320
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:subtract-12-regular" }),
8321
+ onClick: (e) => {
8322
+ e.stopPropagation();
8323
+ handleDecrement(
8324
+ passengerType.passengerAgeCode,
8325
+ cls.classCode
8326
+ );
8327
+ },
8328
+ disabled: getServiceCount(
8301
8329
  passengerType.passengerAgeCode,
8302
8330
  cls.classCode
8303
- );
8304
- },
8305
- disabled: getServiceCount(
8306
- passengerType.passengerAgeCode,
8307
- cls.classCode
8308
- ) === 0 || getTotalCountForType(
8309
- passengerType.passengerAgeCode
8310
- ) <= passengerType.minCapacity
8311
- }
8312
- ),
8313
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { className: styles.countText, children: getServiceCount(
8314
- passengerType.passengerAgeCode,
8315
- cls.classCode
8316
- ) }),
8317
- /* @__PURE__ */ jsxRuntime.jsx(
8318
- reactComponents.Button,
8319
- {
8320
- appearance: "outline",
8321
- className: styles.counterButton,
8322
- size: "small",
8323
- icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:add-12-regular" }),
8324
- disabled: getServiceCount(
8325
- passengerType.passengerAgeCode,
8326
- cls.classCode
8327
- ) >= cls.maxCapacity || totalPassengerCount >= maxPassengers,
8328
- onClick: (e) => {
8329
- e.stopPropagation();
8330
- handleIncrement(
8331
+ ) === 0
8332
+ }
8333
+ ),
8334
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { className: styles.countText, children: getServiceCount(
8335
+ passengerType.passengerAgeCode,
8336
+ cls.classCode
8337
+ ) }),
8338
+ /* @__PURE__ */ jsxRuntime.jsx(
8339
+ reactComponents.Button,
8340
+ {
8341
+ appearance: "outline",
8342
+ className: styles.counterButton,
8343
+ size: "small",
8344
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:add-12-regular" }),
8345
+ disabled: getServiceCount(
8331
8346
  passengerType.passengerAgeCode,
8332
8347
  cls.classCode
8333
- );
8348
+ ) >= cls.maxCapacity || totalPassengerCount >= maxPassengers,
8349
+ onClick: (e) => {
8350
+ e.stopPropagation();
8351
+ handleIncrement(
8352
+ passengerType.passengerAgeCode,
8353
+ cls.classCode
8354
+ );
8355
+ }
8334
8356
  }
8335
- }
8336
- )
8337
- ] })
8338
- ] }, cls.id)) }) })
8339
- ]
8340
- },
8341
- passengerType.id
8342
- );
8357
+ )
8358
+ ] })
8359
+ ] }, cls.id)) }) })
8360
+ ]
8361
+ },
8362
+ passengerType.id
8363
+ ),
8364
+ companionWarnings.has(
8365
+ passengerType.passengerAgeCode
8366
+ ) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.warningText, children: [
8367
+ /* @__PURE__ */ jsxRuntime.jsx(
8368
+ react.Icon,
8369
+ {
8370
+ icon: "fluent:warning-12-filled",
8371
+ style: {
8372
+ fontSize: "16px",
8373
+ color: "#E87511",
8374
+ flexShrink: 0
8375
+ }
8376
+ }
8377
+ ),
8378
+ passengerType.passengerAgeCode === "CHILD" ? mergedLabels.childCompanionWarning : mergedLabels.infantCompanionWarning
8379
+ ] })
8380
+ ] });
8343
8381
  })
8344
8382
  }
8345
8383
  ),
@@ -8350,6 +8388,7 @@ var ModalTotalPassengers = ({
8350
8388
  size: "medium",
8351
8389
  className: styles.submitButton,
8352
8390
  onClick: handleSave,
8391
+ disabled: totalPassengerCount === 0,
8353
8392
  children: mergedLabels.saveButton
8354
8393
  }
8355
8394
  )