@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.js
CHANGED
|
@@ -861,7 +861,7 @@ var init_admin_config_context = __esm({
|
|
|
861
861
|
var CMS_VERSION;
|
|
862
862
|
var init_cms_version = __esm({
|
|
863
863
|
"src/lib/cms-version.ts"() {
|
|
864
|
-
CMS_VERSION = "1.0.
|
|
864
|
+
CMS_VERSION = "1.0.65" ;
|
|
865
865
|
}
|
|
866
866
|
});
|
|
867
867
|
function useCatalogCategories(enabled = true) {
|
|
@@ -16318,99 +16318,140 @@ var init_order_notification_bindings_shared = __esm({
|
|
|
16318
16318
|
"refundAmount",
|
|
16319
16319
|
"invoiceNumber",
|
|
16320
16320
|
"invoiceAttachment",
|
|
16321
|
-
"orderDetails"
|
|
16321
|
+
"orderDetails",
|
|
16322
|
+
"assigneeName",
|
|
16323
|
+
"assigneePhone",
|
|
16324
|
+
"timeSlot",
|
|
16325
|
+
"serviceDate",
|
|
16326
|
+
"taskDescription",
|
|
16327
|
+
"customerAddress"
|
|
16322
16328
|
];
|
|
16323
16329
|
__name(useNotificationVariables, "useNotificationVariables");
|
|
16324
16330
|
ORDER_NOTIFICATION_EVENT_TRIGGERS = [
|
|
16325
16331
|
{
|
|
16326
|
-
key: "
|
|
16327
|
-
label: "Order
|
|
16328
|
-
description: "
|
|
16332
|
+
key: "order_placed",
|
|
16333
|
+
label: "Order placed",
|
|
16334
|
+
description: "Fires when a new order is created (storefront checkout or admin)."
|
|
16329
16335
|
},
|
|
16330
16336
|
{
|
|
16331
|
-
key: "
|
|
16332
|
-
label: "Order
|
|
16333
|
-
description: "
|
|
16337
|
+
key: "order_pending",
|
|
16338
|
+
label: "Order pending",
|
|
16339
|
+
description: "Fires when an order is in pending status (awaiting payment or review)."
|
|
16334
16340
|
},
|
|
16335
16341
|
{
|
|
16336
|
-
key: "
|
|
16337
|
-
label: "Order
|
|
16338
|
-
description: "
|
|
16342
|
+
key: "order_assigned",
|
|
16343
|
+
label: "Order assigned (Customer)",
|
|
16344
|
+
description: "Fires when a teammate is assigned to the order (notifies customer with assignee details and scheduled time slot)."
|
|
16339
16345
|
},
|
|
16340
16346
|
{
|
|
16341
|
-
key: "
|
|
16342
|
-
label: "
|
|
16343
|
-
description: "
|
|
16347
|
+
key: "order_assigned_assignee",
|
|
16348
|
+
label: "Task assigned (Assignee)",
|
|
16349
|
+
description: "Fires when a task is assigned to a teammate (notifies assignee with task description and customer details)."
|
|
16344
16350
|
},
|
|
16345
16351
|
{
|
|
16346
16352
|
key: "order_cancelled",
|
|
16347
|
-
label: "Order
|
|
16348
|
-
description: "
|
|
16353
|
+
label: "Order cancelled",
|
|
16354
|
+
description: "Fires when an order is cancelled (includes refund amount when applicable)."
|
|
16355
|
+
},
|
|
16356
|
+
{
|
|
16357
|
+
key: "order_processing",
|
|
16358
|
+
label: "Order processing",
|
|
16359
|
+
description: "Fires when an order status changes to processing."
|
|
16349
16360
|
},
|
|
16350
16361
|
{
|
|
16351
16362
|
key: "payment_success",
|
|
16352
|
-
label: "Payment
|
|
16353
|
-
description: "
|
|
16363
|
+
label: "Payment success",
|
|
16364
|
+
description: "Fires when order is placed and payment status is paid."
|
|
16365
|
+
},
|
|
16366
|
+
{
|
|
16367
|
+
key: "order_completed",
|
|
16368
|
+
label: "Order completed",
|
|
16369
|
+
description: "Fires when an order status changes to completed / fulfilled."
|
|
16354
16370
|
},
|
|
16355
16371
|
{
|
|
16356
16372
|
key: "payment_failed",
|
|
16357
|
-
label: "Payment
|
|
16358
|
-
description: "
|
|
16373
|
+
label: "Payment failed",
|
|
16374
|
+
description: "Fires when payment status is pending, unpaid, or failed, or when order is cancelled without payment."
|
|
16359
16375
|
},
|
|
16360
16376
|
{
|
|
16361
16377
|
key: "payment_refund_initiated",
|
|
16362
|
-
label: "Payment
|
|
16363
|
-
description: "
|
|
16378
|
+
label: "Payment refund initiated",
|
|
16379
|
+
description: "Fires when order is cancelled and its payment status is paid (refund initiated)."
|
|
16364
16380
|
}
|
|
16365
16381
|
];
|
|
16366
16382
|
EMAIL_TRIGGER_DEFAULTS = {
|
|
16367
|
-
|
|
16368
|
-
subject: "Your order {{orderNumber}} is
|
|
16369
|
-
subjectPlaceholder: "e.g. Your order {{orderNumber}} is
|
|
16383
|
+
order_placed: {
|
|
16384
|
+
subject: "Your order {{orderNumber}} is confirmed",
|
|
16385
|
+
subjectPlaceholder: "e.g. Your order {{orderNumber}} is confirmed",
|
|
16370
16386
|
body: `Hi {{customerName}},
|
|
16371
16387
|
|
|
16372
|
-
Thank you for your order {{orderNumber}}
|
|
16373
|
-
|
|
16374
|
-
Order Total: {{total}} {{currency}}
|
|
16388
|
+
Thank you for your order! Your order {{orderNumber}} for {{total}} {{currency}} has been confirmed.
|
|
16375
16389
|
|
|
16376
16390
|
Order Details:
|
|
16377
|
-
{{orderDetails}}
|
|
16378
|
-
bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is pending."
|
|
16379
|
-
},
|
|
16380
|
-
order_processing: {
|
|
16381
|
-
subject: "Your order {{orderNumber}} is now processing",
|
|
16382
|
-
subjectPlaceholder: "e.g. Your order {{orderNumber}} is now processing",
|
|
16383
|
-
body: `Hi {{customerName}},
|
|
16391
|
+
{{orderDetails}}
|
|
16384
16392
|
|
|
16385
|
-
Your
|
|
16393
|
+
Your Tax Invoice PDF is attached to this email for your records.
|
|
16386
16394
|
|
|
16387
|
-
|
|
16388
|
-
bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is
|
|
16395
|
+
Thank you!`,
|
|
16396
|
+
bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} for {{total}} {{currency}} is confirmed.\n\nThank you!"
|
|
16389
16397
|
},
|
|
16390
|
-
|
|
16391
|
-
subject: "Your order {{orderNumber}}
|
|
16392
|
-
subjectPlaceholder: "e.g. Your order {{orderNumber}}
|
|
16398
|
+
order_pending: {
|
|
16399
|
+
subject: "Your order {{orderNumber}} is Pending",
|
|
16400
|
+
subjectPlaceholder: "e.g. Your order {{orderNumber}} is Pending",
|
|
16393
16401
|
body: `Hi {{customerName}},
|
|
16394
16402
|
|
|
16395
|
-
Your order {{orderNumber}}
|
|
16403
|
+
Your order {{orderNumber}} for {{total}} {{currency}} is currently pending.
|
|
16396
16404
|
|
|
16397
|
-
|
|
16398
|
-
|
|
16405
|
+
Order Details:
|
|
16406
|
+
{{orderDetails}}
|
|
16407
|
+
|
|
16408
|
+
We will update you as soon as your order status changes.
|
|
16409
|
+
|
|
16410
|
+
Thank you!`,
|
|
16411
|
+
bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is pending."
|
|
16399
16412
|
},
|
|
16400
|
-
|
|
16401
|
-
subject: "Your order {{orderNumber}}
|
|
16402
|
-
subjectPlaceholder: "e.g. Your order {{orderNumber}}
|
|
16413
|
+
order_assigned: {
|
|
16414
|
+
subject: "Your service expert has been assigned for order {{orderNumber}}",
|
|
16415
|
+
subjectPlaceholder: "e.g. Your service expert has been assigned for order {{orderNumber}}",
|
|
16403
16416
|
body: `Hi {{customerName}},
|
|
16404
16417
|
|
|
16405
|
-
|
|
16418
|
+
A service expert has been assigned to your order {{orderNumber}}.
|
|
16419
|
+
|
|
16420
|
+
Assignee Details:
|
|
16421
|
+
\u2022 Name: {{assigneeName}}
|
|
16422
|
+
\u2022 Phone: {{assigneePhone}}
|
|
16423
|
+
|
|
16424
|
+
Your expert will reach you by your scheduled time slot:
|
|
16425
|
+
\u2022 Date: {{serviceDate}}
|
|
16426
|
+
\u2022 Slot: {{timeSlot}}
|
|
16406
16427
|
|
|
16407
16428
|
Order Details:
|
|
16408
16429
|
{{orderDetails}}
|
|
16409
16430
|
|
|
16410
|
-
Your Tax Invoice PDF is attached to this email for your records.
|
|
16411
|
-
|
|
16412
16431
|
Thank you!`,
|
|
16413
|
-
bodyPlaceholder: "Hi {{customerName}},\n\
|
|
16432
|
+
bodyPlaceholder: "Hi {{customerName}},\n\nAn expert has been assigned for order {{orderNumber}}."
|
|
16433
|
+
},
|
|
16434
|
+
order_assigned_assignee: {
|
|
16435
|
+
subject: "New task assigned: Order {{orderNumber}}",
|
|
16436
|
+
subjectPlaceholder: "e.g. New task assigned: Order {{orderNumber}}",
|
|
16437
|
+
body: `Hi {{assigneeName}},
|
|
16438
|
+
|
|
16439
|
+
A new task has been assigned to you for order {{orderNumber}}.
|
|
16440
|
+
|
|
16441
|
+
Task Details:
|
|
16442
|
+
{{taskDescription}}
|
|
16443
|
+
|
|
16444
|
+
Customer Details:
|
|
16445
|
+
\u2022 Name: {{customerName}}
|
|
16446
|
+
\u2022 Phone: {{customerPhone}}
|
|
16447
|
+
\u2022 Address: {{customerAddress}}
|
|
16448
|
+
|
|
16449
|
+
Schedule:
|
|
16450
|
+
\u2022 Date: {{serviceDate}}
|
|
16451
|
+
\u2022 Slot: {{timeSlot}}
|
|
16452
|
+
|
|
16453
|
+
Please arrive promptly within the scheduled time slot.`,
|
|
16454
|
+
bodyPlaceholder: "Hi {{assigneeName}},\n\nA new task {{orderNumber}} has been assigned to you."
|
|
16414
16455
|
},
|
|
16415
16456
|
order_cancelled: {
|
|
16416
16457
|
subject: "Your order {{orderNumber}} has been cancelled",
|
|
@@ -16426,6 +16467,21 @@ If you have any questions, please contact us.
|
|
|
16426
16467
|
Thank you!`,
|
|
16427
16468
|
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."
|
|
16428
16469
|
},
|
|
16470
|
+
order_processing: {
|
|
16471
|
+
subject: "Your order {{orderNumber}} is now Processing",
|
|
16472
|
+
subjectPlaceholder: "e.g. Your order {{orderNumber}} is now Processing",
|
|
16473
|
+
body: `Hi {{customerName}},
|
|
16474
|
+
|
|
16475
|
+
Your order {{orderNumber}} for {{total}} {{currency}} is currently being processed.
|
|
16476
|
+
|
|
16477
|
+
Order Details:
|
|
16478
|
+
{{orderDetails}}
|
|
16479
|
+
|
|
16480
|
+
We will notify you once it is completed.
|
|
16481
|
+
|
|
16482
|
+
Thank you!`,
|
|
16483
|
+
bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is processing."
|
|
16484
|
+
},
|
|
16429
16485
|
payment_success: {
|
|
16430
16486
|
subject: "Payment Successful for Order {{orderNumber}}",
|
|
16431
16487
|
subjectPlaceholder: "e.g. Payment Successful for Order {{orderNumber}}",
|
|
@@ -16439,6 +16495,19 @@ Order Details:
|
|
|
16439
16495
|
Thank you!`,
|
|
16440
16496
|
bodyPlaceholder: "Hi {{customerName}},\n\nPayment for order {{orderNumber}} was successful.\n\nThank you!"
|
|
16441
16497
|
},
|
|
16498
|
+
order_completed: {
|
|
16499
|
+
subject: "Your order {{orderNumber}} is Completed",
|
|
16500
|
+
subjectPlaceholder: "e.g. Your order {{orderNumber}} is Completed",
|
|
16501
|
+
body: `Hi {{customerName}},
|
|
16502
|
+
|
|
16503
|
+
Your order {{orderNumber}} for {{total}} {{currency}} has been completed.
|
|
16504
|
+
|
|
16505
|
+
Order Details:
|
|
16506
|
+
{{orderDetails}}
|
|
16507
|
+
|
|
16508
|
+
Thank you for choosing us!`,
|
|
16509
|
+
bodyPlaceholder: "Hi {{customerName}},\n\nYour order {{orderNumber}} is completed."
|
|
16510
|
+
},
|
|
16442
16511
|
payment_failed: {
|
|
16443
16512
|
subject: "Payment Failed for Order {{orderNumber}}",
|
|
16444
16513
|
subjectPlaceholder: "e.g. Payment Failed for Order {{orderNumber}}",
|
|
@@ -17371,7 +17440,13 @@ var init_emailTriggersBindingsPage = __esm({
|
|
|
17371
17440
|
refundAmount: "Refund amount (refund triggers)",
|
|
17372
17441
|
invoiceNumber: "Generated invoice number",
|
|
17373
17442
|
invoiceAttachment: "Include this variable to attach Tax Invoice PDF to email",
|
|
17374
|
-
orderDetails: "Formatted item details summary"
|
|
17443
|
+
orderDetails: "Formatted item details summary",
|
|
17444
|
+
assigneeName: "Name of assigned teammate / technician",
|
|
17445
|
+
assigneePhone: "Phone number of assigned teammate",
|
|
17446
|
+
timeSlot: "Scheduled service slot / arrival window",
|
|
17447
|
+
serviceDate: "Scheduled service / booking date",
|
|
17448
|
+
taskDescription: "Task summary / service details for assignee",
|
|
17449
|
+
customerAddress: "Full service or delivery address"
|
|
17375
17450
|
};
|
|
17376
17451
|
__name(EmailTriggerBindings, "EmailTriggerBindings");
|
|
17377
17452
|
__name(TriggerEmailEditor, "TriggerEmailEditor");
|
|
@@ -17678,7 +17753,13 @@ var init_pushTriggersBindingsPage = __esm({
|
|
|
17678
17753
|
refundAmount: "Refund amount (refund triggers)",
|
|
17679
17754
|
invoiceNumber: "Generated invoice number",
|
|
17680
17755
|
invoiceAttachment: "Include this variable to attach Tax Invoice PDF to email",
|
|
17681
|
-
orderDetails: "Formatted item details summary"
|
|
17756
|
+
orderDetails: "Formatted item details summary",
|
|
17757
|
+
assigneeName: "Name of assigned teammate / technician",
|
|
17758
|
+
assigneePhone: "Phone number of assigned teammate",
|
|
17759
|
+
timeSlot: "Scheduled service slot / arrival window",
|
|
17760
|
+
serviceDate: "Scheduled service / booking date",
|
|
17761
|
+
taskDescription: "Task summary / service details for assignee",
|
|
17762
|
+
customerAddress: "Full service or delivery address"
|
|
17682
17763
|
};
|
|
17683
17764
|
__name(PushTriggerBindings, "PushTriggerBindings");
|
|
17684
17765
|
}
|
|
@@ -20845,14 +20926,14 @@ function PluginSettingsPanel({ descriptor, onSaved }) {
|
|
|
20845
20926
|
placeholder: "e.g. crm@example.com"
|
|
20846
20927
|
}), /* @__PURE__ */ React.createElement("p", {
|
|
20847
20928
|
className: "text-xs text-gray-500 dark:text-gray-400"
|
|
20848
|
-
}, "
|
|
20929
|
+
}, "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", {
|
|
20849
20930
|
className: "space-y-1"
|
|
20850
20931
|
}, /* @__PURE__ */ React.createElement(ImageOrUrlField, {
|
|
20851
|
-
label: "Email logo (
|
|
20932
|
+
label: "Email logo override (optional)",
|
|
20852
20933
|
value: logoUrl,
|
|
20853
20934
|
onChange: setLogoUrl,
|
|
20854
20935
|
previewVariant: "logo",
|
|
20855
|
-
placeholder: "
|
|
20936
|
+
placeholder: "Leave empty to use Store company logo",
|
|
20856
20937
|
inputClassName: "h-8 text-sm w-full rounded-md border border-input bg-background px-3"
|
|
20857
20938
|
})), /* @__PURE__ */ React.createElement("div", {
|
|
20858
20939
|
className: "space-y-1"
|
|
@@ -24582,7 +24663,8 @@ function OrderDetailPage({ orderId }) {
|
|
|
24582
24663
|
__name(handleRepostToErp, "handleRepostToErp");
|
|
24583
24664
|
async function handleStartProcessing() {
|
|
24584
24665
|
if (!order || startingProcessing) return;
|
|
24585
|
-
|
|
24666
|
+
const currentAssigneeId = order.assignedUserId ?? order.assignedUser?.id ?? null;
|
|
24667
|
+
if (!currentAssigneeId) {
|
|
24586
24668
|
toast.info("Please assign a teammate before starting order processing.");
|
|
24587
24669
|
handleOpenAssignModal();
|
|
24588
24670
|
return;
|
|
@@ -24595,7 +24677,8 @@ function OrderDetailPage({ orderId }) {
|
|
|
24595
24677
|
"Content-Type": "application/json"
|
|
24596
24678
|
},
|
|
24597
24679
|
body: JSON.stringify({
|
|
24598
|
-
status: "processing"
|
|
24680
|
+
status: "processing",
|
|
24681
|
+
assignedUserId: currentAssigneeId
|
|
24599
24682
|
})
|
|
24600
24683
|
});
|
|
24601
24684
|
const data = await res.json().catch(() => ({}));
|
|
@@ -24634,13 +24717,9 @@ function OrderDetailPage({ orderId }) {
|
|
|
24634
24717
|
if (!order) return;
|
|
24635
24718
|
setSavingAssignee(true);
|
|
24636
24719
|
try {
|
|
24637
|
-
const isConfirmedOrPending = order.status === "confirmed" || order.status === "pending";
|
|
24638
24720
|
const bodyPayload = {
|
|
24639
24721
|
assignedUserId: selectedAssigneeId
|
|
24640
24722
|
};
|
|
24641
|
-
if (selectedAssigneeId && isConfirmedOrPending) {
|
|
24642
|
-
bodyPayload.status = "processing";
|
|
24643
|
-
}
|
|
24644
24723
|
const res = await fetch(`/api/orders/${orderId}`, {
|
|
24645
24724
|
method: "PUT",
|
|
24646
24725
|
headers: {
|
|
@@ -24656,7 +24735,7 @@ function OrderDetailPage({ orderId }) {
|
|
|
24656
24735
|
const updated = await fetch(`/api/orders/${orderId}`);
|
|
24657
24736
|
if (updated.ok) setOrder(await updated.json());
|
|
24658
24737
|
setAssignModalOpen(false);
|
|
24659
|
-
toast.success(selectedAssigneeId
|
|
24738
|
+
toast.success(selectedAssigneeId ? "Order assigned successfully" : "Assignee removed");
|
|
24660
24739
|
} catch {
|
|
24661
24740
|
toast.error("Failed to update assignee");
|
|
24662
24741
|
} finally {
|
|
@@ -26076,6 +26155,7 @@ function OrderPlacementPage({ editOrderId }) {
|
|
|
26076
26155
|
const [orderDate, setOrderDate] = useState(() => (/* @__PURE__ */ new Date()).toISOString().slice(0, 10));
|
|
26077
26156
|
const [bookingDate, setBookingDate] = useState("");
|
|
26078
26157
|
const [slot, setSlot] = useState("");
|
|
26158
|
+
const [slotOptions, setSlotOptions] = useState([]);
|
|
26079
26159
|
const [orderMetadata, setOrderMetadata] = useState({});
|
|
26080
26160
|
const [loadingOrder, setLoadingOrder] = useState(Boolean(editOrderId));
|
|
26081
26161
|
const [orderLoadError, setOrderLoadError] = useState(null);
|
|
@@ -26112,6 +26192,33 @@ function OrderPlacementPage({ editOrderId }) {
|
|
|
26112
26192
|
billingAddress,
|
|
26113
26193
|
sameAsBilling
|
|
26114
26194
|
]);
|
|
26195
|
+
useEffect(() => {
|
|
26196
|
+
let cancelled = false;
|
|
26197
|
+
void (async () => {
|
|
26198
|
+
try {
|
|
26199
|
+
const res = await fetch("/api/admin/serviceable-areas", {
|
|
26200
|
+
credentials: "include"
|
|
26201
|
+
});
|
|
26202
|
+
if (!res.ok || cancelled) return;
|
|
26203
|
+
const json = await res.json();
|
|
26204
|
+
const cfg = json?.config;
|
|
26205
|
+
const times = Array.isArray(cfg?.slots) ? cfg.slots : [];
|
|
26206
|
+
const extras = cfg?.serviceSlots && typeof cfg.serviceSlots === "object" ? Object.values(cfg.serviceSlots).flat() : [];
|
|
26207
|
+
const combined = [
|
|
26208
|
+
...times,
|
|
26209
|
+
...extras
|
|
26210
|
+
].map((s) => String(s ?? "").trim()).filter(Boolean);
|
|
26211
|
+
const unique = Array.from(new Set(combined));
|
|
26212
|
+
if (!cancelled && unique.length > 0) {
|
|
26213
|
+
setSlotOptions(unique);
|
|
26214
|
+
}
|
|
26215
|
+
} catch {
|
|
26216
|
+
}
|
|
26217
|
+
})();
|
|
26218
|
+
return () => {
|
|
26219
|
+
cancelled = true;
|
|
26220
|
+
};
|
|
26221
|
+
}, []);
|
|
26115
26222
|
useEffect(() => {
|
|
26116
26223
|
if (editOrderId) return;
|
|
26117
26224
|
fetch("/api/settings/store").then((r) => r.ok ? r.json() : {}).then((data) => {
|
|
@@ -26962,6 +27069,9 @@ function OrderPlacementPage({ editOrderId }) {
|
|
|
26962
27069
|
payload.accountCustomerId = selectedCustomerId;
|
|
26963
27070
|
}
|
|
26964
27071
|
if (coupons.length > 0) payload.discountId = coupons[0].discountId;
|
|
27072
|
+
if (!editOrderId && orderDate) {
|
|
27073
|
+
payload.createdAt = `${orderDate}T06:30:00.000Z`;
|
|
27074
|
+
}
|
|
26965
27075
|
const url = editOrderId ? `/api/orders/${editOrderId}` : "/api/orders";
|
|
26966
27076
|
const method = editOrderId ? "PUT" : "POST";
|
|
26967
27077
|
const res = await fetch(url, {
|
|
@@ -27387,10 +27497,18 @@ function OrderPlacementPage({ editOrderId }) {
|
|
|
27387
27497
|
htmlFor: "service-slot"
|
|
27388
27498
|
}, "Slot"), /* @__PURE__ */ React.createElement(Input, {
|
|
27389
27499
|
id: "service-slot",
|
|
27500
|
+
list: "admin-booking-slot-options",
|
|
27390
27501
|
value: slot,
|
|
27391
27502
|
onChange: /* @__PURE__ */ __name((e) => setSlot(e.target.value), "onChange"),
|
|
27392
|
-
placeholder: "e.g.
|
|
27393
|
-
})
|
|
27503
|
+
placeholder: "Pick or type, e.g. 11:00 AM"
|
|
27504
|
+
}), /* @__PURE__ */ React.createElement("datalist", {
|
|
27505
|
+
id: "admin-booking-slot-options"
|
|
27506
|
+
}, slotOptions.map((t) => /* @__PURE__ */ React.createElement("option", {
|
|
27507
|
+
key: t,
|
|
27508
|
+
value: t
|
|
27509
|
+
}))), /* @__PURE__ */ React.createElement("p", {
|
|
27510
|
+
className: "text-[11px] text-gray-500"
|
|
27511
|
+
}, "Select a configured slot or type a custom time.")), /* @__PURE__ */ React.createElement("div", {
|
|
27394
27512
|
className: "space-y-2 sm:col-span-1"
|
|
27395
27513
|
}, /* @__PURE__ */ React.createElement(Label3, {
|
|
27396
27514
|
htmlFor: "service-date"
|
package/dist/api.cjs
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkYHEITFHR_cjs = require('./chunk-YHEITFHR.cjs');
|
|
4
4
|
require('./chunk-WFMVD567.cjs');
|
|
5
|
-
require('./chunk-
|
|
5
|
+
require('./chunk-THL5JDWJ.cjs');
|
|
6
6
|
require('./chunk-HY3AXLOI.cjs');
|
|
7
|
-
require('./chunk-
|
|
7
|
+
require('./chunk-NIRYYJIJ.cjs');
|
|
8
8
|
require('./chunk-H3IVLIPR.cjs');
|
|
9
|
-
require('./chunk-
|
|
9
|
+
require('./chunk-BXAKL2TF.cjs');
|
|
10
10
|
require('./chunk-7NMT3GBR.cjs');
|
|
11
|
-
require('./chunk-
|
|
12
|
-
require('./chunk-
|
|
13
|
-
require('./chunk-
|
|
11
|
+
require('./chunk-VM6OVUUM.cjs');
|
|
12
|
+
require('./chunk-XFDIIVZB.cjs');
|
|
13
|
+
require('./chunk-GLD263KW.cjs');
|
|
14
14
|
require('./chunk-UPLVMVRX.cjs');
|
|
15
|
-
require('./chunk-
|
|
15
|
+
require('./chunk-TZEMLHSP.cjs');
|
|
16
16
|
require('./chunk-3DZRIZOD.cjs');
|
|
17
17
|
require('./chunk-OOTLNH63.cjs');
|
|
18
18
|
require('./chunk-TJ2MIQUT.cjs');
|
|
@@ -26,131 +26,131 @@ require('./chunk-USNT2KNT.cjs');
|
|
|
26
26
|
|
|
27
27
|
Object.defineProperty(exports, "autoExpireOrderIfPaymentTimeExceeded", {
|
|
28
28
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
29
|
+
get: function () { return chunkYHEITFHR_cjs.autoExpireOrderIfPaymentTimeExceeded; }
|
|
30
30
|
});
|
|
31
31
|
Object.defineProperty(exports, "createAnalyticsHandlers", {
|
|
32
32
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
33
|
+
get: function () { return chunkYHEITFHR_cjs.createAnalyticsHandlers; }
|
|
34
34
|
});
|
|
35
35
|
Object.defineProperty(exports, "createBlogBySlugHandler", {
|
|
36
36
|
enumerable: true,
|
|
37
|
-
get: function () { return
|
|
37
|
+
get: function () { return chunkYHEITFHR_cjs.createBlogBySlugHandler; }
|
|
38
38
|
});
|
|
39
39
|
Object.defineProperty(exports, "createChangePasswordHandler", {
|
|
40
40
|
enumerable: true,
|
|
41
|
-
get: function () { return
|
|
41
|
+
get: function () { return chunkYHEITFHR_cjs.createChangePasswordHandler; }
|
|
42
42
|
});
|
|
43
43
|
Object.defineProperty(exports, "createCmsApiHandler", {
|
|
44
44
|
enumerable: true,
|
|
45
|
-
get: function () { return
|
|
45
|
+
get: function () { return chunkYHEITFHR_cjs.createCmsApiHandler; }
|
|
46
46
|
});
|
|
47
47
|
Object.defineProperty(exports, "createCrudByIdHandler", {
|
|
48
48
|
enumerable: true,
|
|
49
|
-
get: function () { return
|
|
49
|
+
get: function () { return chunkYHEITFHR_cjs.createCrudByIdHandler; }
|
|
50
50
|
});
|
|
51
51
|
Object.defineProperty(exports, "createCrudHandler", {
|
|
52
52
|
enumerable: true,
|
|
53
|
-
get: function () { return
|
|
53
|
+
get: function () { return chunkYHEITFHR_cjs.createCrudHandler; }
|
|
54
54
|
});
|
|
55
55
|
Object.defineProperty(exports, "createDashboardStatsHandler", {
|
|
56
56
|
enumerable: true,
|
|
57
|
-
get: function () { return
|
|
57
|
+
get: function () { return chunkYHEITFHR_cjs.createDashboardStatsHandler; }
|
|
58
58
|
});
|
|
59
59
|
Object.defineProperty(exports, "createEcommerceAnalyticsHandler", {
|
|
60
60
|
enumerable: true,
|
|
61
|
-
get: function () { return
|
|
61
|
+
get: function () { return chunkYHEITFHR_cjs.createEcommerceAnalyticsHandler; }
|
|
62
62
|
});
|
|
63
63
|
Object.defineProperty(exports, "createForgotPasswordHandler", {
|
|
64
64
|
enumerable: true,
|
|
65
|
-
get: function () { return
|
|
65
|
+
get: function () { return chunkYHEITFHR_cjs.createForgotPasswordHandler; }
|
|
66
66
|
});
|
|
67
67
|
Object.defineProperty(exports, "createFormBySlugHandler", {
|
|
68
68
|
enumerable: true,
|
|
69
|
-
get: function () { return
|
|
69
|
+
get: function () { return chunkYHEITFHR_cjs.createFormBySlugHandler; }
|
|
70
70
|
});
|
|
71
71
|
Object.defineProperty(exports, "createInviteAcceptHandler", {
|
|
72
72
|
enumerable: true,
|
|
73
|
-
get: function () { return
|
|
73
|
+
get: function () { return chunkYHEITFHR_cjs.createInviteAcceptHandler; }
|
|
74
74
|
});
|
|
75
75
|
Object.defineProperty(exports, "createJobScheduleHandlers", {
|
|
76
76
|
enumerable: true,
|
|
77
|
-
get: function () { return
|
|
77
|
+
get: function () { return chunkYHEITFHR_cjs.createJobScheduleHandlers; }
|
|
78
78
|
});
|
|
79
79
|
Object.defineProperty(exports, "createLlmAgentKnowledgeHandlers", {
|
|
80
80
|
enumerable: true,
|
|
81
|
-
get: function () { return
|
|
81
|
+
get: function () { return chunkYHEITFHR_cjs.createLlmAgentKnowledgeHandlers; }
|
|
82
82
|
});
|
|
83
83
|
Object.defineProperty(exports, "createMediaZipExtractHandler", {
|
|
84
84
|
enumerable: true,
|
|
85
|
-
get: function () { return
|
|
85
|
+
get: function () { return chunkYHEITFHR_cjs.createMediaZipExtractHandler; }
|
|
86
86
|
});
|
|
87
87
|
Object.defineProperty(exports, "createSetPasswordHandler", {
|
|
88
88
|
enumerable: true,
|
|
89
|
-
get: function () { return
|
|
89
|
+
get: function () { return chunkYHEITFHR_cjs.createSetPasswordHandler; }
|
|
90
90
|
});
|
|
91
91
|
Object.defineProperty(exports, "createSettingsApiHandlers", {
|
|
92
92
|
enumerable: true,
|
|
93
|
-
get: function () { return
|
|
93
|
+
get: function () { return chunkYHEITFHR_cjs.createSettingsApiHandlers; }
|
|
94
94
|
});
|
|
95
95
|
Object.defineProperty(exports, "createStorefrontApiHandler", {
|
|
96
96
|
enumerable: true,
|
|
97
|
-
get: function () { return
|
|
97
|
+
get: function () { return chunkYHEITFHR_cjs.createStorefrontApiHandler; }
|
|
98
98
|
});
|
|
99
99
|
Object.defineProperty(exports, "createUploadHandler", {
|
|
100
100
|
enumerable: true,
|
|
101
|
-
get: function () { return
|
|
101
|
+
get: function () { return chunkYHEITFHR_cjs.createUploadHandler; }
|
|
102
102
|
});
|
|
103
103
|
Object.defineProperty(exports, "createUserAuthApiRouter", {
|
|
104
104
|
enumerable: true,
|
|
105
|
-
get: function () { return
|
|
105
|
+
get: function () { return chunkYHEITFHR_cjs.createUserAuthApiRouter; }
|
|
106
106
|
});
|
|
107
107
|
Object.defineProperty(exports, "createUserAvatarHandler", {
|
|
108
108
|
enumerable: true,
|
|
109
|
-
get: function () { return
|
|
109
|
+
get: function () { return chunkYHEITFHR_cjs.createUserAvatarHandler; }
|
|
110
110
|
});
|
|
111
111
|
Object.defineProperty(exports, "createUserProfileHandler", {
|
|
112
112
|
enumerable: true,
|
|
113
|
-
get: function () { return
|
|
113
|
+
get: function () { return chunkYHEITFHR_cjs.createUserProfileHandler; }
|
|
114
114
|
});
|
|
115
115
|
Object.defineProperty(exports, "createUsersApiHandlers", {
|
|
116
116
|
enumerable: true,
|
|
117
|
-
get: function () { return
|
|
117
|
+
get: function () { return chunkYHEITFHR_cjs.createUsersApiHandlers; }
|
|
118
118
|
});
|
|
119
119
|
Object.defineProperty(exports, "createVendorDashboardHandler", {
|
|
120
120
|
enumerable: true,
|
|
121
|
-
get: function () { return
|
|
121
|
+
get: function () { return chunkYHEITFHR_cjs.createVendorDashboardHandler; }
|
|
122
122
|
});
|
|
123
123
|
Object.defineProperty(exports, "createVendorOnboardHandlers", {
|
|
124
124
|
enumerable: true,
|
|
125
|
-
get: function () { return
|
|
125
|
+
get: function () { return chunkYHEITFHR_cjs.createVendorOnboardHandlers; }
|
|
126
126
|
});
|
|
127
127
|
Object.defineProperty(exports, "getPublicSettingsGroup", {
|
|
128
128
|
enumerable: true,
|
|
129
|
-
get: function () { return
|
|
129
|
+
get: function () { return chunkYHEITFHR_cjs.getPublicSettingsGroup; }
|
|
130
130
|
});
|
|
131
131
|
Object.defineProperty(exports, "mergeGuardrailsIntoSystemPrompt", {
|
|
132
132
|
enumerable: true,
|
|
133
|
-
get: function () { return
|
|
133
|
+
get: function () { return chunkYHEITFHR_cjs.mergeGuardrailsIntoSystemPrompt; }
|
|
134
134
|
});
|
|
135
135
|
Object.defineProperty(exports, "parseLlmAgentValidationRules", {
|
|
136
136
|
enumerable: true,
|
|
137
|
-
get: function () { return
|
|
137
|
+
get: function () { return chunkYHEITFHR_cjs.parseLlmAgentValidationRules; }
|
|
138
138
|
});
|
|
139
139
|
Object.defineProperty(exports, "simpleDecrypt", {
|
|
140
140
|
enumerable: true,
|
|
141
|
-
get: function () { return
|
|
141
|
+
get: function () { return chunkYHEITFHR_cjs.simpleDecrypt; }
|
|
142
142
|
});
|
|
143
143
|
Object.defineProperty(exports, "simpleEncrypt", {
|
|
144
144
|
enumerable: true,
|
|
145
|
-
get: function () { return
|
|
145
|
+
get: function () { return chunkYHEITFHR_cjs.simpleEncrypt; }
|
|
146
146
|
});
|
|
147
147
|
Object.defineProperty(exports, "validateUserMessageAgainstAgentRules", {
|
|
148
148
|
enumerable: true,
|
|
149
|
-
get: function () { return
|
|
149
|
+
get: function () { return chunkYHEITFHR_cjs.validateUserMessageAgainstAgentRules; }
|
|
150
150
|
});
|
|
151
151
|
Object.defineProperty(exports, "validateUserMessageAgainstStructuredRules", {
|
|
152
152
|
enumerable: true,
|
|
153
|
-
get: function () { return
|
|
153
|
+
get: function () { return chunkYHEITFHR_cjs.validateUserMessageAgainstStructuredRules; }
|
|
154
154
|
});
|
|
155
155
|
Object.defineProperty(exports, "createCmsAuthBundle", {
|
|
156
156
|
enumerable: true,
|
package/dist/api.d.cts
CHANGED
|
@@ -181,6 +181,8 @@ interface CompanyDetails {
|
|
|
181
181
|
companyName?: string;
|
|
182
182
|
supportEmail?: string;
|
|
183
183
|
supportPhone?: string;
|
|
184
|
+
/** From Store → Invoice Header & Store Details (`companyAddress`). */
|
|
185
|
+
companyAddress?: string;
|
|
184
186
|
socialLinks?: SocialLinkItem[];
|
|
185
187
|
/** Shown below footer rows; from email plugin settings */
|
|
186
188
|
footerDisclaimer?: string;
|
package/dist/api.d.ts
CHANGED
|
@@ -181,6 +181,8 @@ interface CompanyDetails {
|
|
|
181
181
|
companyName?: string;
|
|
182
182
|
supportEmail?: string;
|
|
183
183
|
supportPhone?: string;
|
|
184
|
+
/** From Store → Invoice Header & Store Details (`companyAddress`). */
|
|
185
|
+
companyAddress?: string;
|
|
184
186
|
socialLinks?: SocialLinkItem[];
|
|
185
187
|
/** Shown below footer rows; from email plugin settings */
|
|
186
188
|
footerDisclaimer?: string;
|
package/dist/api.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
export { autoExpireOrderIfPaymentTimeExceeded, createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createSetPasswordHandler, createSettingsApiHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, getPublicSettingsGroup, mergeGuardrailsIntoSystemPrompt, parseLlmAgentValidationRules, simpleDecrypt, simpleEncrypt, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules } from './chunk-
|
|
1
|
+
export { autoExpireOrderIfPaymentTimeExceeded, createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createSetPasswordHandler, createSettingsApiHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, getPublicSettingsGroup, mergeGuardrailsIntoSystemPrompt, parseLlmAgentValidationRules, simpleDecrypt, simpleEncrypt, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules } from './chunk-SANKKGB3.js';
|
|
2
2
|
import './chunk-OVTOP42W.js';
|
|
3
|
-
import './chunk-
|
|
3
|
+
import './chunk-XJNNOSJR.js';
|
|
4
4
|
import './chunk-3K5AIEIZ.js';
|
|
5
|
-
import './chunk-
|
|
5
|
+
import './chunk-ACBN6UWZ.js';
|
|
6
6
|
import './chunk-GWDI752Q.js';
|
|
7
|
-
import './chunk-
|
|
7
|
+
import './chunk-YEAXE4U2.js';
|
|
8
8
|
import './chunk-JXF23MPG.js';
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
11
|
-
import './chunk-
|
|
9
|
+
import './chunk-6YOQ7G5O.js';
|
|
10
|
+
import './chunk-TU23GJPJ.js';
|
|
11
|
+
import './chunk-OPJEV44S.js';
|
|
12
12
|
import './chunk-JC6DLWTE.js';
|
|
13
|
-
import './chunk-
|
|
13
|
+
import './chunk-YRCKEGL2.js';
|
|
14
14
|
import './chunk-MQBT33IV.js';
|
|
15
15
|
import './chunk-CRFV5WJK.js';
|
|
16
16
|
import './chunk-AYERBA7I.js';
|