@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.mjs CHANGED
@@ -7922,7 +7922,9 @@ var DEFAULT_LABELS14 = {
7922
7922
  loading: "Memuat...",
7923
7923
  saveButton: "Simpan",
7924
7924
  closeAriaLabel: "Tutup",
7925
- emptyContent: "Kelas Penumpang"
7925
+ emptyContent: "Kelas Penumpang",
7926
+ childCompanionWarning: "Anak harus didampingi minimal 1 dewasa atau lansia.",
7927
+ infantCompanionWarning: "Bayi harus didampingi minimal 1 dewasa atau lansia."
7926
7928
  },
7927
7929
  en: {
7928
7930
  title: "Select Total Passengers",
@@ -7930,7 +7932,9 @@ var DEFAULT_LABELS14 = {
7930
7932
  loading: "Loading...",
7931
7933
  saveButton: "Save",
7932
7934
  closeAriaLabel: "Close",
7933
- emptyContent: "Passengers Class"
7935
+ emptyContent: "Passengers Class",
7936
+ childCompanionWarning: "Children must be accompanied by at least 1 adult or elderly.",
7937
+ infantCompanionWarning: "Infants must be accompanied by at least 1 adult or elderly."
7934
7938
  }
7935
7939
  };
7936
7940
  var useStyles15 = makeStyles({
@@ -8003,6 +8007,14 @@ var useStyles15 = makeStyles({
8003
8007
  },
8004
8008
  accordionPanel: {
8005
8009
  margin: 0
8010
+ },
8011
+ warningText: {
8012
+ display: "flex",
8013
+ alignItems: "center",
8014
+ gap: "6px",
8015
+ marginBottom: "1rem",
8016
+ fontSize: tokens.fontSizeBase300,
8017
+ color: "#E87511"
8006
8018
  }
8007
8019
  });
8008
8020
  var TotalPassengersListSkeleton = ({
@@ -8081,6 +8093,9 @@ var ModalTotalPassengers = ({
8081
8093
  const mergedLabels = { ...DEFAULT_LABELS14[language], ...labels };
8082
8094
  const [passengers, setPassengers] = useState([]);
8083
8095
  const [openItems, setOpenItems] = useState([]);
8096
+ const [companionWarnings, setCompanionWarnings] = useState(
8097
+ /* @__PURE__ */ new Set()
8098
+ );
8084
8099
  const defaultInfoMessage = mergedLabels.infoMessage.replace(
8085
8100
  "{maxPassengers}",
8086
8101
  String(maxPassengers)
@@ -8138,13 +8153,6 @@ var ModalTotalPassengers = ({
8138
8153
  const cls = passenger.classes.find((c) => c.classCode === classCode);
8139
8154
  return cls?.count ?? 0;
8140
8155
  };
8141
- const getTotalCountForType = (passengerAgeCode) => {
8142
- const passenger = passengers.find(
8143
- (p) => p.passengerAgeCode === passengerAgeCode
8144
- );
8145
- if (!passenger) return 0;
8146
- return passenger.classes.reduce((sum, cls) => sum + (cls.count ?? 0), 0);
8147
- };
8148
8156
  const getTotalForType = (passengerAgeCode) => {
8149
8157
  const passenger = passengers.find(
8150
8158
  (p) => p.passengerAgeCode === passengerAgeCode
@@ -8163,6 +8171,20 @@ var ModalTotalPassengers = ({
8163
8171
  (total, passenger) => total + passenger.classes.reduce((sum, cls) => sum + (cls.count ?? 0), 0),
8164
8172
  0
8165
8173
  );
8174
+ useEffect(() => {
8175
+ const warnings = /* @__PURE__ */ new Set();
8176
+ const hasAdultOrElderly = passengers.some(
8177
+ (p) => (p.passengerAgeCode === "ADULT" || p.passengerAgeCode === "ELDERLY") && p.classes.some((cls) => (cls.count ?? 0) > 0)
8178
+ );
8179
+ if (!hasAdultOrElderly) {
8180
+ passengers.forEach((p) => {
8181
+ if ((p.passengerAgeCode === "CHILD" || p.passengerAgeCode === "INFANT") && p.classes.some((cls) => (cls.count ?? 0) > 0)) {
8182
+ warnings.add(p.passengerAgeCode);
8183
+ }
8184
+ });
8185
+ }
8186
+ setCompanionWarnings(warnings);
8187
+ }, [passengers]);
8166
8188
  const handleIncrement = (passengerAgeCode, classCode) => {
8167
8189
  setPassengers(
8168
8190
  (prev) => prev.map((passenger) => {
@@ -8257,80 +8279,96 @@ var ModalTotalPassengers = ({
8257
8279
  className: styles.passengerSection,
8258
8280
  children: passengerTypes.map((passengerType) => {
8259
8281
  const classes = passengerType.classes || [];
8260
- return /* @__PURE__ */ jsxs(
8261
- AccordionItem,
8262
- {
8263
- value: String(passengerType.id),
8264
- className: styles.accordionItem,
8265
- children: [
8266
- /* @__PURE__ */ jsxs(
8267
- AccordionHeader,
8268
- {
8269
- className: styles.accordionHeader,
8270
- expandIconPosition: "end",
8271
- children: [
8272
- passengerType.passengerAgeName,
8273
- " (",
8274
- getTotalForType(passengerType.passengerAgeCode),
8275
- ")"
8276
- ]
8277
- }
8278
- ),
8279
- /* @__PURE__ */ jsx(AccordionPanel, { className: styles.accordionPanel, children: /* @__PURE__ */ jsx("div", { className: styles.nestedSection, children: classes.map((cls) => /* @__PURE__ */ jsxs("div", { className: styles.nestedRow, children: [
8280
- /* @__PURE__ */ jsx(Body1, { children: (cls?.className || "")?.toUpperCase() }),
8281
- /* @__PURE__ */ jsxs("div", { className: styles.passengerCount, children: [
8282
- /* @__PURE__ */ jsx(
8283
- Button,
8284
- {
8285
- appearance: "outline",
8286
- className: styles.counterButton,
8287
- size: "small",
8288
- icon: /* @__PURE__ */ jsx(Icon, { icon: "fluent:subtract-12-regular" }),
8289
- onClick: (e) => {
8290
- e.stopPropagation();
8291
- handleDecrement(
8282
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
8283
+ /* @__PURE__ */ jsxs(
8284
+ AccordionItem,
8285
+ {
8286
+ value: String(passengerType.id),
8287
+ className: styles.accordionItem,
8288
+ children: [
8289
+ /* @__PURE__ */ jsxs(
8290
+ AccordionHeader,
8291
+ {
8292
+ className: styles.accordionHeader,
8293
+ expandIconPosition: "end",
8294
+ children: [
8295
+ passengerType.passengerAgeName,
8296
+ " (",
8297
+ getTotalForType(passengerType.passengerAgeCode),
8298
+ ")"
8299
+ ]
8300
+ }
8301
+ ),
8302
+ /* @__PURE__ */ jsx(AccordionPanel, { className: styles.accordionPanel, children: /* @__PURE__ */ jsx("div", { className: styles.nestedSection, children: classes.map((cls) => /* @__PURE__ */ jsxs("div", { className: styles.nestedRow, children: [
8303
+ /* @__PURE__ */ jsx(Body1, { children: (cls?.className || "")?.toUpperCase() }),
8304
+ /* @__PURE__ */ jsxs("div", { className: styles.passengerCount, children: [
8305
+ /* @__PURE__ */ jsx(
8306
+ Button,
8307
+ {
8308
+ appearance: "outline",
8309
+ className: styles.counterButton,
8310
+ size: "small",
8311
+ icon: /* @__PURE__ */ jsx(Icon, { icon: "fluent:subtract-12-regular" }),
8312
+ onClick: (e) => {
8313
+ e.stopPropagation();
8314
+ handleDecrement(
8315
+ passengerType.passengerAgeCode,
8316
+ cls.classCode
8317
+ );
8318
+ },
8319
+ disabled: getServiceCount(
8292
8320
  passengerType.passengerAgeCode,
8293
8321
  cls.classCode
8294
- );
8295
- },
8296
- disabled: getServiceCount(
8297
- passengerType.passengerAgeCode,
8298
- cls.classCode
8299
- ) === 0 || getTotalCountForType(
8300
- passengerType.passengerAgeCode
8301
- ) <= passengerType.minCapacity
8302
- }
8303
- ),
8304
- /* @__PURE__ */ jsx(Body1, { className: styles.countText, children: getServiceCount(
8305
- passengerType.passengerAgeCode,
8306
- cls.classCode
8307
- ) }),
8308
- /* @__PURE__ */ jsx(
8309
- Button,
8310
- {
8311
- appearance: "outline",
8312
- className: styles.counterButton,
8313
- size: "small",
8314
- icon: /* @__PURE__ */ jsx(Icon, { icon: "fluent:add-12-regular" }),
8315
- disabled: getServiceCount(
8316
- passengerType.passengerAgeCode,
8317
- cls.classCode
8318
- ) >= cls.maxCapacity || totalPassengerCount >= maxPassengers,
8319
- onClick: (e) => {
8320
- e.stopPropagation();
8321
- handleIncrement(
8322
+ ) === 0
8323
+ }
8324
+ ),
8325
+ /* @__PURE__ */ jsx(Body1, { className: styles.countText, children: getServiceCount(
8326
+ passengerType.passengerAgeCode,
8327
+ cls.classCode
8328
+ ) }),
8329
+ /* @__PURE__ */ jsx(
8330
+ Button,
8331
+ {
8332
+ appearance: "outline",
8333
+ className: styles.counterButton,
8334
+ size: "small",
8335
+ icon: /* @__PURE__ */ jsx(Icon, { icon: "fluent:add-12-regular" }),
8336
+ disabled: getServiceCount(
8322
8337
  passengerType.passengerAgeCode,
8323
8338
  cls.classCode
8324
- );
8339
+ ) >= cls.maxCapacity || totalPassengerCount >= maxPassengers,
8340
+ onClick: (e) => {
8341
+ e.stopPropagation();
8342
+ handleIncrement(
8343
+ passengerType.passengerAgeCode,
8344
+ cls.classCode
8345
+ );
8346
+ }
8325
8347
  }
8326
- }
8327
- )
8328
- ] })
8329
- ] }, cls.id)) }) })
8330
- ]
8331
- },
8332
- passengerType.id
8333
- );
8348
+ )
8349
+ ] })
8350
+ ] }, cls.id)) }) })
8351
+ ]
8352
+ },
8353
+ passengerType.id
8354
+ ),
8355
+ companionWarnings.has(
8356
+ passengerType.passengerAgeCode
8357
+ ) && /* @__PURE__ */ jsxs("div", { className: styles.warningText, children: [
8358
+ /* @__PURE__ */ jsx(
8359
+ Icon,
8360
+ {
8361
+ icon: "fluent:warning-12-filled",
8362
+ style: {
8363
+ fontSize: "16px",
8364
+ color: "#E87511",
8365
+ flexShrink: 0
8366
+ }
8367
+ }
8368
+ ),
8369
+ passengerType.passengerAgeCode === "CHILD" ? mergedLabels.childCompanionWarning : mergedLabels.infantCompanionWarning
8370
+ ] })
8371
+ ] });
8334
8372
  })
8335
8373
  }
8336
8374
  ),
@@ -8341,6 +8379,7 @@ var ModalTotalPassengers = ({
8341
8379
  size: "medium",
8342
8380
  className: styles.submitButton,
8343
8381
  onClick: handleSave,
8382
+ disabled: totalPassengerCount === 0,
8344
8383
  children: mergedLabels.saveButton
8345
8384
  }
8346
8385
  )