@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.
- package/dist/admin.cjs +183 -65
- package/dist/admin.js +183 -65
- package/dist/api.cjs +40 -40
- package/dist/api.d.cts +2 -0
- package/dist/api.d.ts +2 -0
- package/dist/api.js +8 -8
- package/dist/{chunk-KAOHOHCA.js → chunk-6YOQ7G5O.js} +92 -51
- package/dist/{chunk-BWOITUNI.js → chunk-ACBN6UWZ.js} +320 -81
- package/dist/chunk-BXAKL2TF.cjs +84 -0
- package/dist/{chunk-7L556RGL.cjs → chunk-GLD263KW.cjs} +3 -3
- package/dist/{chunk-EWXG4E74.cjs → chunk-NIRYYJIJ.cjs} +330 -91
- package/dist/{chunk-MWEK7N3F.js → chunk-OPJEV44S.js} +2 -2
- package/dist/{chunk-DTUL3Q5L.js → chunk-RDEVZMO5.js} +36 -20
- package/dist/{chunk-77YWLP4X.js → chunk-SANKKGB3.js} +68 -32
- package/dist/chunk-THL5JDWJ.cjs +101 -0
- package/dist/{chunk-RXTUSF3R.js → chunk-TU23GJPJ.js} +2 -2
- package/dist/{chunk-JLDHK2QE.cjs → chunk-TZEMLHSP.cjs} +20 -14
- package/dist/{chunk-RHYVNRYG.cjs → chunk-V6EYAC7X.cjs} +38 -22
- package/dist/{chunk-YVP4NQII.cjs → chunk-VM6OVUUM.cjs} +93 -52
- package/dist/{chunk-MXABMVF7.cjs → chunk-XFDIIVZB.cjs} +4 -4
- package/dist/chunk-XJNNOSJR.js +98 -0
- package/dist/chunk-YEAXE4U2.js +77 -0
- package/dist/{chunk-CJEOH6QC.cjs → chunk-YHEITFHR.cjs} +112 -76
- package/dist/{chunk-3VZAAQUV.js → chunk-YRCKEGL2.js} +20 -14
- package/dist/{email-queue-VTYL2KFA.cjs → email-queue-4OY45JIU.cjs} +7 -7
- package/dist/{email-queue-YPRSVG56.js → email-queue-HGXB2FIS.js} +3 -3
- package/dist/{email-service-ATCPJFWG.cjs → email-service-5O24BSFR.cjs} +7 -7
- package/dist/{email-service-DPKVQOKP.js → email-service-ADDF52PJ.js} +2 -2
- package/dist/{emit-order-notification-trigger-WI4HGMKH.cjs → emit-order-notification-trigger-DR74TQXN.cjs} +4 -4
- package/dist/{emit-order-notification-trigger-XVG2B5ZF.js → emit-order-notification-trigger-UCKJHDQK.js} +2 -2
- package/dist/{erp-order-invoice-3UGWLICU.js → erp-order-invoice-H6HCJ7YS.js} +2 -2
- package/dist/{erp-order-invoice-KJYJNWMG.cjs → erp-order-invoice-YUSPZ7CE.cjs} +6 -6
- package/dist/index.cjs +279 -265
- package/dist/index.d.cts +46 -22
- package/dist/index.d.ts +46 -22
- package/dist/index.js +43 -29
- package/dist/migrations/1783000000000-AddOrderPendingProcessingCompletedTriggers.ts +15 -39
- package/dist/migrations/1783300000000-SeedOrderNotificationTriggersAndTemplates.ts +155 -0
- package/dist/{order-completion-otp-handlers-WGM7HWG4.js → order-completion-otp-handlers-CH22ZRAI.js} +5 -5
- package/dist/{order-completion-otp-handlers-IMMQGHDR.cjs → order-completion-otp-handlers-RW5RSXH3.cjs} +7 -7
- package/dist/{order-notification-dispatcher-JKFQJYGG.js → order-notification-dispatcher-3TXUAJ7L.js} +6 -6
- package/dist/{order-notification-dispatcher-5TUFCDU7.cjs → order-notification-dispatcher-Y7NZAALH.cjs} +11 -11
- package/dist/{pg-boss-service-L6MTF4EQ.cjs → pg-boss-service-BDGOKM2T.cjs} +3 -3
- package/dist/pg-boss-service-WCBJD4JB.js +2 -0
- package/package.json +1 -1
- package/dist/chunk-AYWDQFJZ.js +0 -27
- package/dist/chunk-GO7PPYNU.js +0 -76
- package/dist/chunk-UEE4PTTB.cjs +0 -30
- package/dist/chunk-XQ3QUHWR.cjs +0 -83
- 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.
|
|
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: "
|
|
16361
|
-
label: "Order
|
|
16362
|
-
description: "
|
|
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: "
|
|
16366
|
-
label: "Order
|
|
16367
|
-
description: "
|
|
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: "
|
|
16371
|
-
label: "Order
|
|
16372
|
-
description: "
|
|
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: "
|
|
16376
|
-
label: "
|
|
16377
|
-
description: "
|
|
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
|
|
16382
|
-
description: "
|
|
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
|
|
16387
|
-
description: "
|
|
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
|
|
16392
|
-
description: "
|
|
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
|
|
16397
|
-
description: "
|
|
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
|
-
|
|
16402
|
-
subject: "Your order {{orderNumber}} is
|
|
16403
|
-
subjectPlaceholder: "e.g. Your order {{orderNumber}} is
|
|
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}}
|
|
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
|
|
16427
|
+
Your Tax Invoice PDF is attached to this email for your records.
|
|
16420
16428
|
|
|
16421
|
-
|
|
16422
|
-
bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is
|
|
16429
|
+
Thank you!`,
|
|
16430
|
+
bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} for {{total}} {{currency}} is confirmed.\n\nThank you!"
|
|
16423
16431
|
},
|
|
16424
|
-
|
|
16425
|
-
subject: "Your order {{orderNumber}}
|
|
16426
|
-
subjectPlaceholder: "e.g. Your order {{orderNumber}}
|
|
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}}
|
|
16437
|
+
Your order {{orderNumber}} for {{total}} {{currency}} is currently pending.
|
|
16430
16438
|
|
|
16431
|
-
|
|
16432
|
-
|
|
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
|
-
|
|
16435
|
-
subject: "Your order {{orderNumber}}
|
|
16436
|
-
subjectPlaceholder: "e.g. Your order {{orderNumber}}
|
|
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
|
-
|
|
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\
|
|
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
|
-
}, "
|
|
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 (
|
|
20966
|
+
label: "Email logo override (optional)",
|
|
20886
20967
|
value: logoUrl,
|
|
20887
20968
|
onChange: setLogoUrl,
|
|
20888
20969
|
previewVariant: "logo",
|
|
20889
|
-
placeholder: "
|
|
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
|
-
|
|
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
|
|
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.
|
|
27427
|
-
})
|
|
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"
|