@infuro/cms-core 1.0.63 → 1.0.65

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 (50) hide show
  1. package/dist/admin.cjs +183 -65
  2. package/dist/admin.js +183 -65
  3. package/dist/api.cjs +40 -40
  4. package/dist/api.d.cts +2 -0
  5. package/dist/api.d.ts +2 -0
  6. package/dist/api.js +8 -8
  7. package/dist/{chunk-KAOHOHCA.js → chunk-6YOQ7G5O.js} +92 -51
  8. package/dist/{chunk-BWOITUNI.js → chunk-ACBN6UWZ.js} +320 -81
  9. package/dist/chunk-BXAKL2TF.cjs +84 -0
  10. package/dist/{chunk-7L556RGL.cjs → chunk-GLD263KW.cjs} +3 -3
  11. package/dist/{chunk-EWXG4E74.cjs → chunk-NIRYYJIJ.cjs} +330 -91
  12. package/dist/{chunk-MWEK7N3F.js → chunk-OPJEV44S.js} +2 -2
  13. package/dist/{chunk-DTUL3Q5L.js → chunk-RDEVZMO5.js} +36 -20
  14. package/dist/{chunk-77YWLP4X.js → chunk-SANKKGB3.js} +68 -32
  15. package/dist/chunk-THL5JDWJ.cjs +101 -0
  16. package/dist/{chunk-RXTUSF3R.js → chunk-TU23GJPJ.js} +2 -2
  17. package/dist/{chunk-JLDHK2QE.cjs → chunk-TZEMLHSP.cjs} +20 -14
  18. package/dist/{chunk-RHYVNRYG.cjs → chunk-V6EYAC7X.cjs} +38 -22
  19. package/dist/{chunk-YVP4NQII.cjs → chunk-VM6OVUUM.cjs} +93 -52
  20. package/dist/{chunk-MXABMVF7.cjs → chunk-XFDIIVZB.cjs} +4 -4
  21. package/dist/chunk-XJNNOSJR.js +98 -0
  22. package/dist/chunk-YEAXE4U2.js +77 -0
  23. package/dist/{chunk-CJEOH6QC.cjs → chunk-YHEITFHR.cjs} +112 -76
  24. package/dist/{chunk-3VZAAQUV.js → chunk-YRCKEGL2.js} +20 -14
  25. package/dist/{email-queue-VTYL2KFA.cjs → email-queue-4OY45JIU.cjs} +7 -7
  26. package/dist/{email-queue-YPRSVG56.js → email-queue-HGXB2FIS.js} +3 -3
  27. package/dist/{email-service-ATCPJFWG.cjs → email-service-5O24BSFR.cjs} +7 -7
  28. package/dist/{email-service-DPKVQOKP.js → email-service-ADDF52PJ.js} +2 -2
  29. package/dist/{emit-order-notification-trigger-WI4HGMKH.cjs → emit-order-notification-trigger-DR74TQXN.cjs} +4 -4
  30. package/dist/{emit-order-notification-trigger-XVG2B5ZF.js → emit-order-notification-trigger-UCKJHDQK.js} +2 -2
  31. package/dist/{erp-order-invoice-3UGWLICU.js → erp-order-invoice-H6HCJ7YS.js} +2 -2
  32. package/dist/{erp-order-invoice-KJYJNWMG.cjs → erp-order-invoice-YUSPZ7CE.cjs} +6 -6
  33. package/dist/index.cjs +279 -265
  34. package/dist/index.d.cts +46 -22
  35. package/dist/index.d.ts +46 -22
  36. package/dist/index.js +43 -29
  37. package/dist/migrations/1783000000000-AddOrderPendingProcessingCompletedTriggers.ts +15 -39
  38. package/dist/migrations/1783300000000-SeedOrderNotificationTriggersAndTemplates.ts +155 -0
  39. package/dist/{order-completion-otp-handlers-WGM7HWG4.js → order-completion-otp-handlers-CH22ZRAI.js} +5 -5
  40. package/dist/{order-completion-otp-handlers-IMMQGHDR.cjs → order-completion-otp-handlers-RW5RSXH3.cjs} +7 -7
  41. package/dist/{order-notification-dispatcher-JKFQJYGG.js → order-notification-dispatcher-3TXUAJ7L.js} +6 -6
  42. package/dist/{order-notification-dispatcher-5TUFCDU7.cjs → order-notification-dispatcher-Y7NZAALH.cjs} +11 -11
  43. package/dist/{pg-boss-service-L6MTF4EQ.cjs → pg-boss-service-BDGOKM2T.cjs} +3 -3
  44. package/dist/pg-boss-service-WCBJD4JB.js +2 -0
  45. package/package.json +1 -1
  46. package/dist/chunk-AYWDQFJZ.js +0 -27
  47. package/dist/chunk-GO7PPYNU.js +0 -76
  48. package/dist/chunk-UEE4PTTB.cjs +0 -30
  49. package/dist/chunk-XQ3QUHWR.cjs +0 -83
  50. package/dist/pg-boss-service-4XF2TQ2E.js +0 -2
package/dist/admin.cjs CHANGED
@@ -895,7 +895,7 @@ var init_admin_config_context = __esm({
895
895
  var CMS_VERSION;
896
896
  var init_cms_version = __esm({
897
897
  "src/lib/cms-version.ts"() {
898
- CMS_VERSION = "1.0.63" ;
898
+ CMS_VERSION = "1.0.65" ;
899
899
  }
900
900
  });
901
901
  function useCatalogCategories(enabled = true) {
@@ -16352,99 +16352,140 @@ var init_order_notification_bindings_shared = __esm({
16352
16352
  "refundAmount",
16353
16353
  "invoiceNumber",
16354
16354
  "invoiceAttachment",
16355
- "orderDetails"
16355
+ "orderDetails",
16356
+ "assigneeName",
16357
+ "assigneePhone",
16358
+ "timeSlot",
16359
+ "serviceDate",
16360
+ "taskDescription",
16361
+ "customerAddress"
16356
16362
  ];
16357
16363
  __name(useNotificationVariables, "useNotificationVariables");
16358
16364
  ORDER_NOTIFICATION_EVENT_TRIGGERS = [
16359
16365
  {
16360
- key: "order_pending",
16361
- label: "Order Pending",
16362
- description: "When an order is created and pending confirmation or payment"
16366
+ key: "order_placed",
16367
+ label: "Order placed",
16368
+ description: "Fires when a new order is created (storefront checkout or admin)."
16363
16369
  },
16364
16370
  {
16365
- key: "order_processing",
16366
- label: "Order Processing",
16367
- description: "When an order is assigned and starts processing"
16371
+ key: "order_pending",
16372
+ label: "Order pending",
16373
+ description: "Fires when an order is in pending status (awaiting payment or review)."
16368
16374
  },
16369
16375
  {
16370
- key: "order_completed",
16371
- label: "Order Completed",
16372
- description: "When an order is verified with OTP and completed"
16376
+ key: "order_assigned",
16377
+ label: "Order assigned (Customer)",
16378
+ description: "Fires when a teammate is assigned to the order (notifies customer with assignee details and scheduled time slot)."
16373
16379
  },
16374
16380
  {
16375
- key: "order_placed",
16376
- label: "Order Placed / Confirmed",
16377
- description: "When a new order is created or confirmed"
16381
+ key: "order_assigned_assignee",
16382
+ label: "Task assigned (Assignee)",
16383
+ description: "Fires when a task is assigned to a teammate (notifies assignee with task description and customer details)."
16378
16384
  },
16379
16385
  {
16380
16386
  key: "order_cancelled",
16381
- label: "Order Cancelled",
16382
- description: "When an order is cancelled"
16387
+ label: "Order cancelled",
16388
+ description: "Fires when an order is cancelled (includes refund amount when applicable)."
16389
+ },
16390
+ {
16391
+ key: "order_processing",
16392
+ label: "Order processing",
16393
+ description: "Fires when an order status changes to processing."
16383
16394
  },
16384
16395
  {
16385
16396
  key: "payment_success",
16386
- label: "Payment Success",
16387
- description: "When order payment status is paid"
16397
+ label: "Payment success",
16398
+ description: "Fires when order is placed and payment status is paid."
16399
+ },
16400
+ {
16401
+ key: "order_completed",
16402
+ label: "Order completed",
16403
+ description: "Fires when an order status changes to completed / fulfilled."
16388
16404
  },
16389
16405
  {
16390
16406
  key: "payment_failed",
16391
- label: "Payment Failed",
16392
- description: "When payment status is unpaid or failed"
16407
+ label: "Payment failed",
16408
+ description: "Fires when payment status is pending, unpaid, or failed, or when order is cancelled without payment."
16393
16409
  },
16394
16410
  {
16395
16411
  key: "payment_refund_initiated",
16396
- label: "Payment Refund Initiated",
16397
- description: "When refund is initiated for cancelled order"
16412
+ label: "Payment refund initiated",
16413
+ description: "Fires when order is cancelled and its payment status is paid (refund initiated)."
16398
16414
  }
16399
16415
  ];
16400
16416
  EMAIL_TRIGGER_DEFAULTS = {
16401
- order_pending: {
16402
- subject: "Your order {{orderNumber}} is pending",
16403
- subjectPlaceholder: "e.g. Your order {{orderNumber}} is pending",
16417
+ order_placed: {
16418
+ subject: "Your order {{orderNumber}} is confirmed",
16419
+ subjectPlaceholder: "e.g. Your order {{orderNumber}} is confirmed",
16404
16420
  body: `Hi {{customerName}},
16405
16421
 
16406
- Thank you for your order {{orderNumber}}! It is currently pending confirmation.
16407
-
16408
- Order Total: {{total}} {{currency}}
16422
+ Thank you for your order! Your order {{orderNumber}} for {{total}} {{currency}} has been confirmed.
16409
16423
 
16410
16424
  Order Details:
16411
- {{orderDetails}}`,
16412
- bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is pending."
16413
- },
16414
- order_processing: {
16415
- subject: "Your order {{orderNumber}} is now processing",
16416
- subjectPlaceholder: "e.g. Your order {{orderNumber}} is now processing",
16417
- body: `Hi {{customerName}},
16425
+ {{orderDetails}}
16418
16426
 
16419
- Your order {{orderNumber}} is now being processed by our team.
16427
+ Your Tax Invoice PDF is attached to this email for your records.
16420
16428
 
16421
- Vendor: {{vendorName}}`,
16422
- bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is processing."
16429
+ Thank you!`,
16430
+ bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} for {{total}} {{currency}} is confirmed.\n\nThank you!"
16423
16431
  },
16424
- order_completed: {
16425
- subject: "Your order {{orderNumber}} has been completed",
16426
- subjectPlaceholder: "e.g. Your order {{orderNumber}} has been completed",
16432
+ order_pending: {
16433
+ subject: "Your order {{orderNumber}} is Pending",
16434
+ subjectPlaceholder: "e.g. Your order {{orderNumber}} is Pending",
16427
16435
  body: `Hi {{customerName}},
16428
16436
 
16429
- Your order {{orderNumber}} has been successfully completed! Thank you for choosing us.
16437
+ Your order {{orderNumber}} for {{total}} {{currency}} is currently pending.
16430
16438
 
16431
- Invoice: {{invoiceNumber}}`,
16432
- bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is completed."
16439
+ Order Details:
16440
+ {{orderDetails}}
16441
+
16442
+ We will update you as soon as your order status changes.
16443
+
16444
+ Thank you!`,
16445
+ bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is pending."
16433
16446
  },
16434
- order_placed: {
16435
- subject: "Your order {{orderNumber}} is confirmed",
16436
- subjectPlaceholder: "e.g. Your order {{orderNumber}} is confirmed",
16447
+ order_assigned: {
16448
+ subject: "Your service expert has been assigned for order {{orderNumber}}",
16449
+ subjectPlaceholder: "e.g. Your service expert has been assigned for order {{orderNumber}}",
16437
16450
  body: `Hi {{customerName}},
16438
16451
 
16439
- Thank you for your order! Your order {{orderNumber}} for {{total}} {{currency}} has been confirmed.
16452
+ A service expert has been assigned to your order {{orderNumber}}.
16453
+
16454
+ Assignee Details:
16455
+ \u2022 Name: {{assigneeName}}
16456
+ \u2022 Phone: {{assigneePhone}}
16457
+
16458
+ Your expert will reach you by your scheduled time slot:
16459
+ \u2022 Date: {{serviceDate}}
16460
+ \u2022 Slot: {{timeSlot}}
16440
16461
 
16441
16462
  Order Details:
16442
16463
  {{orderDetails}}
16443
16464
 
16444
- Your Tax Invoice PDF is attached to this email for your records.
16445
-
16446
16465
  Thank you!`,
16447
- bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} for {{total}} {{currency}} is confirmed.\n\nThank you!"
16466
+ bodyPlaceholder: "Hi {{customerName}},\n\nAn expert has been assigned for order {{orderNumber}}."
16467
+ },
16468
+ order_assigned_assignee: {
16469
+ subject: "New task assigned: Order {{orderNumber}}",
16470
+ subjectPlaceholder: "e.g. New task assigned: Order {{orderNumber}}",
16471
+ body: `Hi {{assigneeName}},
16472
+
16473
+ A new task has been assigned to you for order {{orderNumber}}.
16474
+
16475
+ Task Details:
16476
+ {{taskDescription}}
16477
+
16478
+ Customer Details:
16479
+ \u2022 Name: {{customerName}}
16480
+ \u2022 Phone: {{customerPhone}}
16481
+ \u2022 Address: {{customerAddress}}
16482
+
16483
+ Schedule:
16484
+ \u2022 Date: {{serviceDate}}
16485
+ \u2022 Slot: {{timeSlot}}
16486
+
16487
+ Please arrive promptly within the scheduled time slot.`,
16488
+ bodyPlaceholder: "Hi {{assigneeName}},\n\nA new task {{orderNumber}} has been assigned to you."
16448
16489
  },
16449
16490
  order_cancelled: {
16450
16491
  subject: "Your order {{orderNumber}} has been cancelled",
@@ -16460,6 +16501,21 @@ If you have any questions, please contact us.
16460
16501
  Thank you!`,
16461
16502
  bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} has been cancelled.\n\nIf a refund is due, it will be returned to your original payment method."
16462
16503
  },
16504
+ order_processing: {
16505
+ subject: "Your order {{orderNumber}} is now Processing",
16506
+ subjectPlaceholder: "e.g. Your order {{orderNumber}} is now Processing",
16507
+ body: `Hi {{customerName}},
16508
+
16509
+ Your order {{orderNumber}} for {{total}} {{currency}} is currently being processed.
16510
+
16511
+ Order Details:
16512
+ {{orderDetails}}
16513
+
16514
+ We will notify you once it is completed.
16515
+
16516
+ Thank you!`,
16517
+ bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is processing."
16518
+ },
16463
16519
  payment_success: {
16464
16520
  subject: "Payment Successful for Order {{orderNumber}}",
16465
16521
  subjectPlaceholder: "e.g. Payment Successful for Order {{orderNumber}}",
@@ -16473,6 +16529,19 @@ Order Details:
16473
16529
  Thank you!`,
16474
16530
  bodyPlaceholder: "Hi {{customerName}},\n\nPayment for order {{orderNumber}} was successful.\n\nThank you!"
16475
16531
  },
16532
+ order_completed: {
16533
+ subject: "Your order {{orderNumber}} is Completed",
16534
+ subjectPlaceholder: "e.g. Your order {{orderNumber}} is Completed",
16535
+ body: `Hi {{customerName}},
16536
+
16537
+ Your order {{orderNumber}} for {{total}} {{currency}} has been completed.
16538
+
16539
+ Order Details:
16540
+ {{orderDetails}}
16541
+
16542
+ Thank you for choosing us!`,
16543
+ bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is completed."
16544
+ },
16476
16545
  payment_failed: {
16477
16546
  subject: "Payment Failed for Order {{orderNumber}}",
16478
16547
  subjectPlaceholder: "e.g. Payment Failed for Order {{orderNumber}}",
@@ -17405,7 +17474,13 @@ var init_emailTriggersBindingsPage = __esm({
17405
17474
  refundAmount: "Refund amount (refund triggers)",
17406
17475
  invoiceNumber: "Generated invoice number",
17407
17476
  invoiceAttachment: "Include this variable to attach Tax Invoice PDF to email",
17408
- orderDetails: "Formatted item details summary"
17477
+ orderDetails: "Formatted item details summary",
17478
+ assigneeName: "Name of assigned teammate / technician",
17479
+ assigneePhone: "Phone number of assigned teammate",
17480
+ timeSlot: "Scheduled service slot / arrival window",
17481
+ serviceDate: "Scheduled service / booking date",
17482
+ taskDescription: "Task summary / service details for assignee",
17483
+ customerAddress: "Full service or delivery address"
17409
17484
  };
17410
17485
  __name(EmailTriggerBindings, "EmailTriggerBindings");
17411
17486
  __name(TriggerEmailEditor, "TriggerEmailEditor");
@@ -17712,7 +17787,13 @@ var init_pushTriggersBindingsPage = __esm({
17712
17787
  refundAmount: "Refund amount (refund triggers)",
17713
17788
  invoiceNumber: "Generated invoice number",
17714
17789
  invoiceAttachment: "Include this variable to attach Tax Invoice PDF to email",
17715
- orderDetails: "Formatted item details summary"
17790
+ orderDetails: "Formatted item details summary",
17791
+ assigneeName: "Name of assigned teammate / technician",
17792
+ assigneePhone: "Phone number of assigned teammate",
17793
+ timeSlot: "Scheduled service slot / arrival window",
17794
+ serviceDate: "Scheduled service / booking date",
17795
+ taskDescription: "Task summary / service details for assignee",
17796
+ customerAddress: "Full service or delivery address"
17716
17797
  };
17717
17798
  __name(PushTriggerBindings, "PushTriggerBindings");
17718
17799
  }
@@ -20879,14 +20960,14 @@ function PluginSettingsPanel({ descriptor, onSaved }) {
20879
20960
  placeholder: "e.g. crm@example.com"
20880
20961
  }), /* @__PURE__ */ React.createElement("p", {
20881
20962
  className: "text-xs text-gray-500 dark:text-gray-400"
20882
- }, "Layout below merges with Branding and Store settings. Upload a logo here (or in Settings \u2192 Store \u2192 Company Logo) \u2014 email uses that image in the header. Prefer a publicly reachable URL in production."), /* @__PURE__ */ React.createElement("div", {
20963
+ }, "Email header/footer use ", /* @__PURE__ */ React.createElement("strong", null, "Settings \u2192 Store \u2192 Invoice Header & Store Details"), " (logo, company name, email, phone, address). Social links and disclaimer below are email-only extras."), /* @__PURE__ */ React.createElement("div", {
20883
20964
  className: "space-y-1"
20884
20965
  }, /* @__PURE__ */ React.createElement(ImageOrUrlField, {
20885
- label: "Email logo (upload or URL)",
20966
+ label: "Email logo override (optional)",
20886
20967
  value: logoUrl,
20887
20968
  onChange: setLogoUrl,
20888
20969
  previewVariant: "logo",
20889
- placeholder: "Upload image or paste https://\u2026",
20970
+ placeholder: "Leave empty to use Store company logo",
20890
20971
  inputClassName: "h-8 text-sm w-full rounded-md border border-input bg-background px-3"
20891
20972
  })), /* @__PURE__ */ React.createElement("div", {
20892
20973
  className: "space-y-1"
@@ -24616,7 +24697,8 @@ function OrderDetailPage({ orderId }) {
24616
24697
  __name(handleRepostToErp, "handleRepostToErp");
24617
24698
  async function handleStartProcessing() {
24618
24699
  if (!order || startingProcessing) return;
24619
- if (!order.assignedUserId && !order.assignedUser) {
24700
+ const currentAssigneeId = order.assignedUserId ?? order.assignedUser?.id ?? null;
24701
+ if (!currentAssigneeId) {
24620
24702
  sonner.toast.info("Please assign a teammate before starting order processing.");
24621
24703
  handleOpenAssignModal();
24622
24704
  return;
@@ -24629,7 +24711,8 @@ function OrderDetailPage({ orderId }) {
24629
24711
  "Content-Type": "application/json"
24630
24712
  },
24631
24713
  body: JSON.stringify({
24632
- status: "processing"
24714
+ status: "processing",
24715
+ assignedUserId: currentAssigneeId
24633
24716
  })
24634
24717
  });
24635
24718
  const data = await res.json().catch(() => ({}));
@@ -24668,13 +24751,9 @@ function OrderDetailPage({ orderId }) {
24668
24751
  if (!order) return;
24669
24752
  setSavingAssignee(true);
24670
24753
  try {
24671
- const isConfirmedOrPending = order.status === "confirmed" || order.status === "pending";
24672
24754
  const bodyPayload = {
24673
24755
  assignedUserId: selectedAssigneeId
24674
24756
  };
24675
- if (selectedAssigneeId && isConfirmedOrPending) {
24676
- bodyPayload.status = "processing";
24677
- }
24678
24757
  const res = await fetch(`/api/orders/${orderId}`, {
24679
24758
  method: "PUT",
24680
24759
  headers: {
@@ -24690,7 +24769,7 @@ function OrderDetailPage({ orderId }) {
24690
24769
  const updated = await fetch(`/api/orders/${orderId}`);
24691
24770
  if (updated.ok) setOrder(await updated.json());
24692
24771
  setAssignModalOpen(false);
24693
- sonner.toast.success(selectedAssigneeId && isConfirmedOrPending ? "Order assigned and moved to processing" : selectedAssigneeId ? "Order assigned successfully" : "Assignee removed");
24772
+ sonner.toast.success(selectedAssigneeId ? "Order assigned successfully" : "Assignee removed");
24694
24773
  } catch {
24695
24774
  sonner.toast.error("Failed to update assignee");
24696
24775
  } finally {
@@ -26110,6 +26189,7 @@ function OrderPlacementPage({ editOrderId }) {
26110
26189
  const [orderDate, setOrderDate] = React27.useState(() => (/* @__PURE__ */ new Date()).toISOString().slice(0, 10));
26111
26190
  const [bookingDate, setBookingDate] = React27.useState("");
26112
26191
  const [slot, setSlot] = React27.useState("");
26192
+ const [slotOptions, setSlotOptions] = React27.useState([]);
26113
26193
  const [orderMetadata, setOrderMetadata] = React27.useState({});
26114
26194
  const [loadingOrder, setLoadingOrder] = React27.useState(Boolean(editOrderId));
26115
26195
  const [orderLoadError, setOrderLoadError] = React27.useState(null);
@@ -26146,6 +26226,33 @@ function OrderPlacementPage({ editOrderId }) {
26146
26226
  billingAddress,
26147
26227
  sameAsBilling
26148
26228
  ]);
26229
+ React27.useEffect(() => {
26230
+ let cancelled = false;
26231
+ void (async () => {
26232
+ try {
26233
+ const res = await fetch("/api/admin/serviceable-areas", {
26234
+ credentials: "include"
26235
+ });
26236
+ if (!res.ok || cancelled) return;
26237
+ const json = await res.json();
26238
+ const cfg = json?.config;
26239
+ const times = Array.isArray(cfg?.slots) ? cfg.slots : [];
26240
+ const extras = cfg?.serviceSlots && typeof cfg.serviceSlots === "object" ? Object.values(cfg.serviceSlots).flat() : [];
26241
+ const combined = [
26242
+ ...times,
26243
+ ...extras
26244
+ ].map((s) => String(s ?? "").trim()).filter(Boolean);
26245
+ const unique = Array.from(new Set(combined));
26246
+ if (!cancelled && unique.length > 0) {
26247
+ setSlotOptions(unique);
26248
+ }
26249
+ } catch {
26250
+ }
26251
+ })();
26252
+ return () => {
26253
+ cancelled = true;
26254
+ };
26255
+ }, []);
26149
26256
  React27.useEffect(() => {
26150
26257
  if (editOrderId) return;
26151
26258
  fetch("/api/settings/store").then((r) => r.ok ? r.json() : {}).then((data) => {
@@ -26996,6 +27103,9 @@ function OrderPlacementPage({ editOrderId }) {
26996
27103
  payload.accountCustomerId = selectedCustomerId;
26997
27104
  }
26998
27105
  if (coupons.length > 0) payload.discountId = coupons[0].discountId;
27106
+ if (!editOrderId && orderDate) {
27107
+ payload.createdAt = `${orderDate}T06:30:00.000Z`;
27108
+ }
26999
27109
  const url = editOrderId ? `/api/orders/${editOrderId}` : "/api/orders";
27000
27110
  const method = editOrderId ? "PUT" : "POST";
27001
27111
  const res = await fetch(url, {
@@ -27421,10 +27531,18 @@ function OrderPlacementPage({ editOrderId }) {
27421
27531
  htmlFor: "service-slot"
27422
27532
  }, "Slot"), /* @__PURE__ */ React.createElement(Input, {
27423
27533
  id: "service-slot",
27534
+ list: "admin-booking-slot-options",
27424
27535
  value: slot,
27425
27536
  onChange: /* @__PURE__ */ __name((e) => setSlot(e.target.value), "onChange"),
27426
- placeholder: "e.g. 10:00 AM - 01:00 PM"
27427
- })), /* @__PURE__ */ React.createElement("div", {
27537
+ placeholder: "Pick or type, e.g. 11:00 AM"
27538
+ }), /* @__PURE__ */ React.createElement("datalist", {
27539
+ id: "admin-booking-slot-options"
27540
+ }, slotOptions.map((t) => /* @__PURE__ */ React.createElement("option", {
27541
+ key: t,
27542
+ value: t
27543
+ }))), /* @__PURE__ */ React.createElement("p", {
27544
+ className: "text-[11px] text-gray-500"
27545
+ }, "Select a configured slot or type a custom time.")), /* @__PURE__ */ React.createElement("div", {
27428
27546
  className: "space-y-2 sm:col-span-1"
27429
27547
  }, /* @__PURE__ */ React.createElement(Label3, {
27430
27548
  htmlFor: "service-date"