medusa-contact-us 0.0.21 → 0.0.22
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/.medusa/server/src/admin/index.js +300 -0
- package/.medusa/server/src/admin/index.mjs +300 -0
- package/.medusa/server/src/api/admin/contact-requests/[id]/assign/route.js +54 -0
- package/.medusa/server/src/api/admin/contact-requests/[id]/comments/route.js +28 -0
- package/.medusa/server/src/api/admin/contact-requests/[id]/route.js +36 -9
- package/.medusa/server/src/api/admin/contact-requests/validators.js +9 -2
- package/.medusa/server/src/modules/contact-requests/index.js +4 -2
- package/.medusa/server/src/modules/contact-requests/migrations/Migration20241129163317.js +2 -2
- package/.medusa/server/src/modules/contact-requests/migrations/Migration20251222161335.js +27 -0
- package/.medusa/server/src/modules/contact-requests/migrations/Migration20251222161336.js +37 -0
- package/.medusa/server/src/modules/contact-requests/models/contact-request-comment.js +13 -0
- package/.medusa/server/src/modules/contact-requests/models/contact-request.js +2 -1
- package/.medusa/server/src/modules/contact-requests/service.js +92 -1
- package/.medusa/server/src/modules/contact-subscriptions/migrations/Migration20241126103000.js +2 -2
- package/package.json +8 -5
|
@@ -4,6 +4,7 @@ import { defineRouteConfig } from "@medusajs/admin-sdk";
|
|
|
4
4
|
import { Container, Heading, Text, Button, Input, Badge, Textarea } from "@medusajs/ui";
|
|
5
5
|
import { Envelope, ChatBubbleLeftRight, ArrowLeft } from "@medusajs/icons";
|
|
6
6
|
import { useNavigate, useParams } from "react-router-dom";
|
|
7
|
+
import "@medusajs/admin-shared";
|
|
7
8
|
const useDebounce$1 = (value, delay) => {
|
|
8
9
|
const [debouncedValue, setDebouncedValue] = useState(value);
|
|
9
10
|
useEffect(() => {
|
|
@@ -335,6 +336,7 @@ const ContactRequestsPage = () => {
|
|
|
335
336
|
/* @__PURE__ */ jsx("thead", { className: "bg-ui-bg-subtle", children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
336
337
|
/* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Email" }),
|
|
337
338
|
/* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Status" }),
|
|
339
|
+
/* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Assigned To" }),
|
|
338
340
|
/* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Source" }),
|
|
339
341
|
/* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Created" }),
|
|
340
342
|
/* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Actions" })
|
|
@@ -357,6 +359,7 @@ const ContactRequestsPage = () => {
|
|
|
357
359
|
children: request.status.replace("_", " ")
|
|
358
360
|
}
|
|
359
361
|
) }),
|
|
362
|
+
/* @__PURE__ */ jsx("td", { className: "px-4 py-4 text-ui-fg-subtle", children: request.assign_to ? /* @__PURE__ */ jsx(Badge, { size: "2xsmall", children: request.assign_to }) : /* @__PURE__ */ jsx("span", { children: "—" }) }),
|
|
360
363
|
/* @__PURE__ */ jsx("td", { className: "px-4 py-4 text-ui-fg-subtle", children: request.source ?? "storefront" }),
|
|
361
364
|
/* @__PURE__ */ jsx("td", { className: "px-4 py-4 text-ui-fg-subtle", children: new Date(request.created_at).toLocaleString() }),
|
|
362
365
|
/* @__PURE__ */ jsx("td", { className: "px-4 py-4", children: /* @__PURE__ */ jsx(
|
|
@@ -411,6 +414,7 @@ const ContactRequestDetailPage = () => {
|
|
|
411
414
|
const navigate = useNavigate();
|
|
412
415
|
const { id } = useParams();
|
|
413
416
|
const [request, setRequest] = useState(null);
|
|
417
|
+
const [comments, setComments] = useState([]);
|
|
414
418
|
const [nextAllowedStatuses, setNextAllowedStatuses] = useState([]);
|
|
415
419
|
const [selectedStatus, setSelectedStatus] = useState("");
|
|
416
420
|
const [isLoading, setIsLoading] = useState(true);
|
|
@@ -418,6 +422,15 @@ const ContactRequestDetailPage = () => {
|
|
|
418
422
|
const [error, setError] = useState(null);
|
|
419
423
|
const [updateError, setUpdateError] = useState(null);
|
|
420
424
|
const [updateSuccess, setUpdateSuccess] = useState(false);
|
|
425
|
+
const [selectedAssignTo, setSelectedAssignTo] = useState("");
|
|
426
|
+
const [isAssigning, setIsAssigning] = useState(false);
|
|
427
|
+
const [assignError, setAssignError] = useState(null);
|
|
428
|
+
const [assignSuccess, setAssignSuccess] = useState(false);
|
|
429
|
+
const [commentText, setCommentText] = useState("");
|
|
430
|
+
const [commentImages, setCommentImages] = useState([]);
|
|
431
|
+
const [isCreatingComment, setIsCreatingComment] = useState(false);
|
|
432
|
+
const [commentError, setCommentError] = useState(null);
|
|
433
|
+
const [commentSuccess, setCommentSuccess] = useState(false);
|
|
421
434
|
useEffect(() => {
|
|
422
435
|
if (!id) {
|
|
423
436
|
navigate("/contact-requests");
|
|
@@ -436,8 +449,10 @@ const ContactRequestDetailPage = () => {
|
|
|
436
449
|
}
|
|
437
450
|
const payload = await response.json();
|
|
438
451
|
setRequest(payload.request);
|
|
452
|
+
setComments(payload.comments ?? []);
|
|
439
453
|
setNextAllowedStatuses(payload.next_allowed_statuses ?? []);
|
|
440
454
|
setSelectedStatus("");
|
|
455
|
+
setSelectedAssignTo("");
|
|
441
456
|
} catch (loadError) {
|
|
442
457
|
const message = loadError instanceof Error ? loadError.message : "Unable to load contact request";
|
|
443
458
|
setError(message);
|
|
@@ -477,6 +492,8 @@ const ContactRequestDetailPage = () => {
|
|
|
477
492
|
});
|
|
478
493
|
if (detailResponse.ok) {
|
|
479
494
|
const detailPayload = await detailResponse.json();
|
|
495
|
+
setRequest(detailPayload.request);
|
|
496
|
+
setComments(detailPayload.comments ?? []);
|
|
480
497
|
setNextAllowedStatuses(detailPayload.next_allowed_statuses ?? []);
|
|
481
498
|
}
|
|
482
499
|
} catch (updateErr) {
|
|
@@ -486,6 +503,144 @@ const ContactRequestDetailPage = () => {
|
|
|
486
503
|
setIsUpdating(false);
|
|
487
504
|
}
|
|
488
505
|
};
|
|
506
|
+
const handleAssign = async () => {
|
|
507
|
+
if (!id) {
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
510
|
+
try {
|
|
511
|
+
setIsAssigning(true);
|
|
512
|
+
setAssignError(null);
|
|
513
|
+
setAssignSuccess(false);
|
|
514
|
+
const response = await fetch(`/admin/contact-requests/${id}/assign`, {
|
|
515
|
+
method: "POST",
|
|
516
|
+
headers: {
|
|
517
|
+
"Content-Type": "application/json"
|
|
518
|
+
},
|
|
519
|
+
credentials: "include",
|
|
520
|
+
body: JSON.stringify({
|
|
521
|
+
assign_to: selectedAssignTo.trim() || null
|
|
522
|
+
})
|
|
523
|
+
});
|
|
524
|
+
if (!response.ok) {
|
|
525
|
+
const message = await response.text();
|
|
526
|
+
throw new Error(message || "Unable to assign contact request");
|
|
527
|
+
}
|
|
528
|
+
const payload = await response.json();
|
|
529
|
+
setRequest(payload.request);
|
|
530
|
+
setSelectedAssignTo("");
|
|
531
|
+
setAssignSuccess(true);
|
|
532
|
+
setTimeout(() => setAssignSuccess(false), 3e3);
|
|
533
|
+
const detailResponse = await fetch(`/admin/contact-requests/${id}`, {
|
|
534
|
+
credentials: "include"
|
|
535
|
+
});
|
|
536
|
+
if (detailResponse.ok) {
|
|
537
|
+
const detailPayload = await detailResponse.json();
|
|
538
|
+
setRequest(detailPayload.request);
|
|
539
|
+
setComments(detailPayload.comments ?? []);
|
|
540
|
+
setNextAllowedStatuses(detailPayload.next_allowed_statuses ?? []);
|
|
541
|
+
}
|
|
542
|
+
} catch (assignErr) {
|
|
543
|
+
const message = assignErr instanceof Error ? assignErr.message : "Unable to assign contact request";
|
|
544
|
+
setAssignError(message);
|
|
545
|
+
} finally {
|
|
546
|
+
setIsAssigning(false);
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
const handleUnassign = async () => {
|
|
550
|
+
if (!id) {
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
try {
|
|
554
|
+
setIsAssigning(true);
|
|
555
|
+
setAssignError(null);
|
|
556
|
+
setAssignSuccess(false);
|
|
557
|
+
const response = await fetch(`/admin/contact-requests/${id}/assign`, {
|
|
558
|
+
method: "POST",
|
|
559
|
+
headers: {
|
|
560
|
+
"Content-Type": "application/json"
|
|
561
|
+
},
|
|
562
|
+
credentials: "include",
|
|
563
|
+
body: JSON.stringify({
|
|
564
|
+
assign_to: null
|
|
565
|
+
})
|
|
566
|
+
});
|
|
567
|
+
if (!response.ok) {
|
|
568
|
+
const message = await response.text();
|
|
569
|
+
throw new Error(message || "Unable to unassign contact request");
|
|
570
|
+
}
|
|
571
|
+
const payload = await response.json();
|
|
572
|
+
setRequest(payload.request);
|
|
573
|
+
setAssignSuccess(true);
|
|
574
|
+
setTimeout(() => setAssignSuccess(false), 3e3);
|
|
575
|
+
const detailResponse = await fetch(`/admin/contact-requests/${id}`, {
|
|
576
|
+
credentials: "include"
|
|
577
|
+
});
|
|
578
|
+
if (detailResponse.ok) {
|
|
579
|
+
const detailPayload = await detailResponse.json();
|
|
580
|
+
setRequest(detailPayload.request);
|
|
581
|
+
setComments(detailPayload.comments ?? []);
|
|
582
|
+
setNextAllowedStatuses(detailPayload.next_allowed_statuses ?? []);
|
|
583
|
+
}
|
|
584
|
+
} catch (assignErr) {
|
|
585
|
+
const message = assignErr instanceof Error ? assignErr.message : "Unable to unassign contact request";
|
|
586
|
+
setAssignError(message);
|
|
587
|
+
} finally {
|
|
588
|
+
setIsAssigning(false);
|
|
589
|
+
}
|
|
590
|
+
};
|
|
591
|
+
const handleCreateComment = async () => {
|
|
592
|
+
if (!id || !commentText.trim() && commentImages.length === 0) {
|
|
593
|
+
setCommentError("Please provide a comment or at least one image");
|
|
594
|
+
return;
|
|
595
|
+
}
|
|
596
|
+
try {
|
|
597
|
+
setIsCreatingComment(true);
|
|
598
|
+
setCommentError(null);
|
|
599
|
+
setCommentSuccess(false);
|
|
600
|
+
const response = await fetch(`/admin/contact-requests/${id}/comments`, {
|
|
601
|
+
method: "POST",
|
|
602
|
+
headers: {
|
|
603
|
+
"Content-Type": "application/json"
|
|
604
|
+
},
|
|
605
|
+
credentials: "include",
|
|
606
|
+
body: JSON.stringify({
|
|
607
|
+
comment: commentText.trim() || void 0,
|
|
608
|
+
images: commentImages.filter((img) => img.trim()).length > 0 ? commentImages.filter((img) => img.trim()) : void 0
|
|
609
|
+
})
|
|
610
|
+
});
|
|
611
|
+
if (!response.ok) {
|
|
612
|
+
const message = await response.text();
|
|
613
|
+
throw new Error(message || "Unable to create comment");
|
|
614
|
+
}
|
|
615
|
+
const detailResponse = await fetch(`/admin/contact-requests/${id}`, {
|
|
616
|
+
credentials: "include"
|
|
617
|
+
});
|
|
618
|
+
if (detailResponse.ok) {
|
|
619
|
+
const detailPayload = await detailResponse.json();
|
|
620
|
+
setComments(detailPayload.comments ?? []);
|
|
621
|
+
}
|
|
622
|
+
setCommentText("");
|
|
623
|
+
setCommentImages([]);
|
|
624
|
+
setCommentSuccess(true);
|
|
625
|
+
setTimeout(() => setCommentSuccess(false), 3e3);
|
|
626
|
+
} catch (commentErr) {
|
|
627
|
+
const message = commentErr instanceof Error ? commentErr.message : "Unable to create comment";
|
|
628
|
+
setCommentError(message);
|
|
629
|
+
} finally {
|
|
630
|
+
setIsCreatingComment(false);
|
|
631
|
+
}
|
|
632
|
+
};
|
|
633
|
+
const addImageInput = () => {
|
|
634
|
+
setCommentImages([...commentImages, ""]);
|
|
635
|
+
};
|
|
636
|
+
const removeImageInput = (index) => {
|
|
637
|
+
setCommentImages(commentImages.filter((_, i) => i !== index));
|
|
638
|
+
};
|
|
639
|
+
const updateImageUrl = (index, value) => {
|
|
640
|
+
const updated = [...commentImages];
|
|
641
|
+
updated[index] = value;
|
|
642
|
+
setCommentImages(updated);
|
|
643
|
+
};
|
|
489
644
|
if (isLoading) {
|
|
490
645
|
return /* @__PURE__ */ jsx("div", { className: "w-full p-6", children: /* @__PURE__ */ jsx(Container, { className: "mx-auto flex w-full max-w-5xl flex-col gap-6 p-6", children: /* @__PURE__ */ jsx("div", { className: "flex justify-center py-16", children: /* @__PURE__ */ jsx(Text, { children: "Loading contact request..." }) }) }) });
|
|
491
646
|
}
|
|
@@ -557,6 +712,54 @@ const ContactRequestDetailPage = () => {
|
|
|
557
712
|
updateError && /* @__PURE__ */ jsx(Text, { size: "small", className: "mt-2 text-ui-fg-error", children: updateError }),
|
|
558
713
|
updateSuccess && /* @__PURE__ */ jsx(Text, { size: "small", className: "mt-2 text-ui-fg-success", children: "Status updated successfully" })
|
|
559
714
|
] }),
|
|
715
|
+
/* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-ui-border-base bg-ui-bg-base p-6", children: [
|
|
716
|
+
/* @__PURE__ */ jsx(Heading, { level: "h2", className: "mb-4 text-lg", children: "Assignment" }),
|
|
717
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
718
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
719
|
+
/* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "Currently Assigned To" }),
|
|
720
|
+
/* @__PURE__ */ jsx(Text, { className: "font-medium", children: request.assign_to ? /* @__PURE__ */ jsx(Badge, { size: "small", className: "mt-1", children: request.assign_to }) : /* @__PURE__ */ jsx("span", { className: "text-ui-fg-subtle", children: "Unassigned" }) })
|
|
721
|
+
] }),
|
|
722
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 md:flex-row md:items-end", children: [
|
|
723
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
|
|
724
|
+
/* @__PURE__ */ jsx("label", { className: "mb-2 block text-sm font-medium text-ui-fg-base", children: "Admin User ID" }),
|
|
725
|
+
/* @__PURE__ */ jsx(
|
|
726
|
+
Input,
|
|
727
|
+
{
|
|
728
|
+
type: "text",
|
|
729
|
+
value: selectedAssignTo,
|
|
730
|
+
onChange: (event) => setSelectedAssignTo(event.target.value),
|
|
731
|
+
placeholder: "Enter admin user ID",
|
|
732
|
+
className: "w-full"
|
|
733
|
+
}
|
|
734
|
+
)
|
|
735
|
+
] }),
|
|
736
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
|
|
737
|
+
/* @__PURE__ */ jsx(
|
|
738
|
+
Button,
|
|
739
|
+
{
|
|
740
|
+
variant: "primary",
|
|
741
|
+
onClick: handleAssign,
|
|
742
|
+
disabled: isAssigning,
|
|
743
|
+
isLoading: isAssigning,
|
|
744
|
+
children: "Assign"
|
|
745
|
+
}
|
|
746
|
+
),
|
|
747
|
+
request.assign_to && /* @__PURE__ */ jsx(
|
|
748
|
+
Button,
|
|
749
|
+
{
|
|
750
|
+
variant: "secondary",
|
|
751
|
+
onClick: handleUnassign,
|
|
752
|
+
disabled: isAssigning,
|
|
753
|
+
isLoading: isAssigning,
|
|
754
|
+
children: "Unassign"
|
|
755
|
+
}
|
|
756
|
+
)
|
|
757
|
+
] })
|
|
758
|
+
] }),
|
|
759
|
+
assignError && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-error", children: assignError }),
|
|
760
|
+
assignSuccess && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-success", children: "Assignment updated successfully" })
|
|
761
|
+
] })
|
|
762
|
+
] }),
|
|
560
763
|
/* @__PURE__ */ jsxs("div", { className: "grid gap-6 md:grid-cols-2", children: [
|
|
561
764
|
/* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-ui-border-base bg-ui-bg-base p-6", children: [
|
|
562
765
|
/* @__PURE__ */ jsx(Heading, { level: "h2", className: "mb-4 text-lg", children: "Contact Information" }),
|
|
@@ -630,6 +833,103 @@ const ContactRequestDetailPage = () => {
|
|
|
630
833
|
/* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: key }),
|
|
631
834
|
/* @__PURE__ */ jsx(Text, { size: "small", className: "font-medium", children: typeof value === "string" ? value : JSON.stringify(value) })
|
|
632
835
|
] }, key)) })
|
|
836
|
+
] }),
|
|
837
|
+
/* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-ui-border-base bg-ui-bg-base p-6", children: [
|
|
838
|
+
/* @__PURE__ */ jsx(Heading, { level: "h2", className: "mb-4 text-lg", children: "Comments" }),
|
|
839
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-6 space-y-4 rounded-lg border border-ui-border-subtle bg-ui-bg-subtle p-4", children: [
|
|
840
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
841
|
+
/* @__PURE__ */ jsx("label", { className: "mb-2 block text-sm font-medium text-ui-fg-base", children: "Add Comment" }),
|
|
842
|
+
/* @__PURE__ */ jsx(
|
|
843
|
+
Textarea,
|
|
844
|
+
{
|
|
845
|
+
value: commentText,
|
|
846
|
+
onChange: (event) => setCommentText(event.target.value),
|
|
847
|
+
placeholder: "Enter your comment...",
|
|
848
|
+
className: "min-h-[80px]"
|
|
849
|
+
}
|
|
850
|
+
)
|
|
851
|
+
] }),
|
|
852
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
853
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
|
|
854
|
+
/* @__PURE__ */ jsx("label", { className: "text-sm font-medium text-ui-fg-base", children: "Images (URLs)" }),
|
|
855
|
+
/* @__PURE__ */ jsx(
|
|
856
|
+
Button,
|
|
857
|
+
{
|
|
858
|
+
variant: "transparent",
|
|
859
|
+
size: "small",
|
|
860
|
+
onClick: addImageInput,
|
|
861
|
+
type: "button",
|
|
862
|
+
children: "Add Image URL"
|
|
863
|
+
}
|
|
864
|
+
)
|
|
865
|
+
] }),
|
|
866
|
+
commentImages.length > 0 && /* @__PURE__ */ jsx("div", { className: "space-y-2", children: commentImages.map((url, index) => /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
|
|
867
|
+
/* @__PURE__ */ jsx(
|
|
868
|
+
Input,
|
|
869
|
+
{
|
|
870
|
+
type: "text",
|
|
871
|
+
value: url,
|
|
872
|
+
onChange: (event) => updateImageUrl(index, event.target.value),
|
|
873
|
+
placeholder: "https://example.com/image.jpg",
|
|
874
|
+
className: "flex-1"
|
|
875
|
+
}
|
|
876
|
+
),
|
|
877
|
+
/* @__PURE__ */ jsx(
|
|
878
|
+
Button,
|
|
879
|
+
{
|
|
880
|
+
variant: "transparent",
|
|
881
|
+
size: "small",
|
|
882
|
+
onClick: () => removeImageInput(index),
|
|
883
|
+
type: "button",
|
|
884
|
+
children: "Remove"
|
|
885
|
+
}
|
|
886
|
+
)
|
|
887
|
+
] }, index)) })
|
|
888
|
+
] }),
|
|
889
|
+
/* @__PURE__ */ jsx(
|
|
890
|
+
Button,
|
|
891
|
+
{
|
|
892
|
+
variant: "primary",
|
|
893
|
+
onClick: handleCreateComment,
|
|
894
|
+
disabled: isCreatingComment || !commentText.trim() && commentImages.filter((img) => img.trim()).length === 0,
|
|
895
|
+
isLoading: isCreatingComment,
|
|
896
|
+
children: "Add Comment"
|
|
897
|
+
}
|
|
898
|
+
),
|
|
899
|
+
commentError && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-error", children: commentError }),
|
|
900
|
+
commentSuccess && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-success", children: "Comment added successfully" })
|
|
901
|
+
] }),
|
|
902
|
+
comments.length > 0 ? /* @__PURE__ */ jsx("div", { className: "space-y-4", children: comments.map((comment) => /* @__PURE__ */ jsxs(
|
|
903
|
+
"div",
|
|
904
|
+
{
|
|
905
|
+
className: "rounded-lg border border-ui-border-subtle bg-ui-bg-subtle p-4",
|
|
906
|
+
children: [
|
|
907
|
+
/* @__PURE__ */ jsx("div", { className: "mb-2 flex items-center justify-between", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
908
|
+
/* @__PURE__ */ jsx(Badge, { size: "2xsmall", children: comment.admin_id }),
|
|
909
|
+
/* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: new Date(comment.created_at).toLocaleString() })
|
|
910
|
+
] }) }),
|
|
911
|
+
comment.comment && /* @__PURE__ */ jsx(Text, { className: "mb-2 whitespace-pre-wrap", children: comment.comment }),
|
|
912
|
+
comment.images && comment.images.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-3 space-y-2", children: [
|
|
913
|
+
/* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "Images:" }),
|
|
914
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: comment.images.map((imageUrl, index) => /* @__PURE__ */ jsxs(
|
|
915
|
+
"a",
|
|
916
|
+
{
|
|
917
|
+
href: imageUrl,
|
|
918
|
+
target: "_blank",
|
|
919
|
+
rel: "noopener noreferrer",
|
|
920
|
+
className: "text-sm text-ui-fg-interactive hover:underline",
|
|
921
|
+
children: [
|
|
922
|
+
"Image ",
|
|
923
|
+
index + 1
|
|
924
|
+
]
|
|
925
|
+
},
|
|
926
|
+
index
|
|
927
|
+
)) })
|
|
928
|
+
] })
|
|
929
|
+
]
|
|
930
|
+
},
|
|
931
|
+
comment.id
|
|
932
|
+
)) }) : /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "No comments yet" })
|
|
633
933
|
] })
|
|
634
934
|
] }) });
|
|
635
935
|
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const contact_requests_1 = require("../../../../../modules/contact-requests");
|
|
7
|
+
const validators_1 = require("../../validators");
|
|
8
|
+
const POST = async (req, res) => {
|
|
9
|
+
const { id } = req.params;
|
|
10
|
+
try {
|
|
11
|
+
// Validate input
|
|
12
|
+
const body = validators_1.AdminAssignContactRequestSchema.parse(req.body ?? {});
|
|
13
|
+
const service = req.scope.resolve(contact_requests_1.CONTACT_REQUEST_MODULE);
|
|
14
|
+
const request = await service.assignRequest({
|
|
15
|
+
id,
|
|
16
|
+
assign_to: body.assign_to,
|
|
17
|
+
});
|
|
18
|
+
res.status(200).json({ request });
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
// Handle validation errors
|
|
22
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
23
|
+
res.status(400).json({
|
|
24
|
+
message: "Invalid request data",
|
|
25
|
+
errors: error.errors,
|
|
26
|
+
type: "invalid_data",
|
|
27
|
+
code: "invalid_data",
|
|
28
|
+
});
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Handle MedusaError
|
|
32
|
+
if (error instanceof utils_1.MedusaError) {
|
|
33
|
+
const statusCode = error.type === utils_1.MedusaError.Types.NOT_FOUND ? 404 : 400;
|
|
34
|
+
res.status(statusCode).json({
|
|
35
|
+
message: error.message,
|
|
36
|
+
type: error.type,
|
|
37
|
+
code: error.type,
|
|
38
|
+
});
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// Handle unexpected errors
|
|
42
|
+
const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
|
|
43
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
44
|
+
console.error("Error assigning contact request:", error);
|
|
45
|
+
res.status(500).json({
|
|
46
|
+
message: errorMessage,
|
|
47
|
+
type: "unknown_error",
|
|
48
|
+
code: "unknown_error",
|
|
49
|
+
...(process.env.NODE_ENV === "development" && { stack: errorStack }),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.POST = POST;
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvbnRhY3QtcmVxdWVzdHMvW2lkXS9hc3NpZ24vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQXVEO0FBQ3ZELDZCQUF1QjtBQUN2Qiw4RUFBZ0Y7QUFFaEYsaURBQWtFO0FBRTNELE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNwRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixJQUFJLENBQUM7UUFDSCxpQkFBaUI7UUFDakIsTUFBTSxJQUFJLEdBQUcsNENBQStCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUE7UUFFbEUsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQy9CLHlDQUFzQixDQUN2QixDQUFBO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzFDLEVBQUU7WUFDRixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQyxDQUFBO1FBRUYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsMkJBQTJCO1FBQzNCLElBQUksS0FBSyxZQUFZLE9BQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbkIsT0FBTyxFQUFFLHNCQUFzQjtnQkFDL0IsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNwQixJQUFJLEVBQUUsY0FBYztnQkFDcEIsSUFBSSxFQUFFLGNBQWM7YUFDckIsQ0FBQyxDQUFBO1lBQ0YsT0FBTTtRQUNSLENBQUM7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxLQUFLLFlBQVksbUJBQVcsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sVUFBVSxHQUNkLEtBQUssQ0FBQyxJQUFJLEtBQUssbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtZQUN4RCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDMUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTthQUNqQixDQUFDLENBQUE7WUFDRixPQUFNO1FBQ1IsQ0FBQztRQUVELDJCQUEyQjtRQUMzQixNQUFNLFlBQVksR0FDaEIsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUE7UUFDdEUsTUFBTSxVQUFVLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRW5FLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFFeEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLFlBQVk7WUFDckIsSUFBSSxFQUFFLGVBQWU7WUFDckIsSUFBSSxFQUFFLGVBQWU7WUFDckIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLGFBQWEsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztTQUNyRSxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBdkRZLFFBQUEsSUFBSSxRQXVEaEIifQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = exports.GET = void 0;
|
|
4
|
+
const contact_requests_1 = require("../../../../../modules/contact-requests");
|
|
5
|
+
const validators_1 = require("../../validators");
|
|
6
|
+
const GET = async (req, res) => {
|
|
7
|
+
const { id } = req.params;
|
|
8
|
+
const service = req.scope.resolve(contact_requests_1.CONTACT_REQUEST_MODULE);
|
|
9
|
+
const comments = await service.listComments(id);
|
|
10
|
+
res.status(200).json({ comments });
|
|
11
|
+
};
|
|
12
|
+
exports.GET = GET;
|
|
13
|
+
const POST = async (req, res) => {
|
|
14
|
+
const { id } = req.params;
|
|
15
|
+
const body = validators_1.AdminCreateCommentSchema.parse(req.body ?? {});
|
|
16
|
+
const authContext = req.auth_context;
|
|
17
|
+
const adminId = authContext?.actor_id || authContext?.user_id || "admin";
|
|
18
|
+
const service = req.scope.resolve(contact_requests_1.CONTACT_REQUEST_MODULE);
|
|
19
|
+
const comment = await service.createComment({
|
|
20
|
+
contact_request_id: id,
|
|
21
|
+
admin_id: adminId,
|
|
22
|
+
comment: body.comment,
|
|
23
|
+
images: body.images,
|
|
24
|
+
});
|
|
25
|
+
res.status(201).json({ comment });
|
|
26
|
+
};
|
|
27
|
+
exports.POST = POST;
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvbnRhY3QtcmVxdWVzdHMvW2lkXS9jb21tZW50cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw4RUFBZ0Y7QUFFaEYsaURBQTJEO0FBRXBELE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDL0IseUNBQXNCLENBQ3ZCLENBQUE7SUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFL0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0FBQ3BDLENBQUMsQ0FBQTtBQVZZLFFBQUEsR0FBRyxPQVVmO0FBRU0sTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ3BFLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO0lBQ3pCLE1BQU0sSUFBSSxHQUFHLHFDQUF3QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRTNELE1BQU0sV0FBVyxHQUFJLEdBRW5CLENBQUMsWUFBWSxDQUFBO0lBQ2YsTUFBTSxPQUFPLEdBQUcsV0FBVyxFQUFFLFFBQVEsSUFBSSxXQUFXLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQTtJQUV4RSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDL0IseUNBQXNCLENBQ3ZCLENBQUE7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDMUMsa0JBQWtCLEVBQUUsRUFBRTtRQUN0QixRQUFRLEVBQUUsT0FBTztRQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87UUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0tBQ3BCLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtBQUNuQyxDQUFDLENBQUE7QUFyQlksUUFBQSxJQUFJLFFBcUJoQiJ9
|
|
@@ -1,17 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GET = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
4
5
|
const contact_requests_1 = require("../../../../modules/contact-requests");
|
|
5
6
|
const GET = async (req, res) => {
|
|
6
7
|
const { id } = req.params;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
request
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
try {
|
|
9
|
+
const service = req.scope.resolve(contact_requests_1.CONTACT_REQUEST_MODULE);
|
|
10
|
+
const request = await service.getRequest(id);
|
|
11
|
+
const comments = await service.listComments(id);
|
|
12
|
+
// Get next allowed statuses for the admin UI
|
|
13
|
+
const nextAllowedStatuses = service.getNextAllowedStatuses(request.status);
|
|
14
|
+
res.status(200).json({
|
|
15
|
+
request,
|
|
16
|
+
comments,
|
|
17
|
+
next_allowed_statuses: nextAllowedStatuses,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
// Log error for debugging
|
|
22
|
+
console.error("Error fetching contact request:", error);
|
|
23
|
+
if (error instanceof utils_1.MedusaError) {
|
|
24
|
+
const statusCode = error.type === utils_1.MedusaError.Types.NOT_FOUND ? 404 : 400;
|
|
25
|
+
res.status(statusCode).json({
|
|
26
|
+
message: error.message,
|
|
27
|
+
type: error.type,
|
|
28
|
+
code: error.type,
|
|
29
|
+
});
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Handle unexpected errors
|
|
33
|
+
const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
|
|
34
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
35
|
+
res.status(500).json({
|
|
36
|
+
message: errorMessage,
|
|
37
|
+
type: "unknown_error",
|
|
38
|
+
code: "unknown_error",
|
|
39
|
+
...(process.env.NODE_ENV === "development" && { stack: errorStack }),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
15
42
|
};
|
|
16
43
|
exports.GET = GET;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvbnRhY3QtcmVxdWVzdHMvW2lkXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBdUQ7QUFDdkQsMkVBQTZFO0FBR3RFLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDL0IseUNBQXNCLENBQ3ZCLENBQUE7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRS9DLDZDQUE2QztRQUM3QyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFMUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTztZQUNQLFFBQVE7WUFDUixxQkFBcUIsRUFBRSxtQkFBbUI7U0FDM0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZiwwQkFBMEI7UUFDMUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUV2RCxJQUFJLEtBQUssWUFBWSxtQkFBVyxFQUFFLENBQUM7WUFDakMsTUFBTSxVQUFVLEdBQ2QsS0FBSyxDQUFDLElBQUksS0FBSyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1lBQ3hELEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMxQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2FBQ2pCLENBQUMsQ0FBQTtZQUNGLE9BQU07UUFDUixDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLE1BQU0sWUFBWSxHQUNoQixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQTtRQUN0RSxNQUFNLFVBQVUsR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFbkUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLFlBQVk7WUFDckIsSUFBSSxFQUFFLGVBQWU7WUFDckIsSUFBSSxFQUFFLGVBQWU7WUFDckIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLGFBQWEsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztTQUNyRSxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBOUNZLFFBQUEsR0FBRyxPQThDZiJ9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AdminUpdateContactRequestStatusSchema = exports.AdminListContactRequestsSchema = exports.AdminCreateContactRequestSchema = void 0;
|
|
3
|
+
exports.AdminCreateCommentSchema = exports.AdminAssignContactRequestSchema = exports.AdminUpdateContactRequestStatusSchema = exports.AdminListContactRequestsSchema = exports.AdminCreateContactRequestSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
exports.AdminCreateContactRequestSchema = zod_1.z.object({
|
|
6
6
|
email: zod_1.z.string().email(),
|
|
@@ -26,4 +26,11 @@ exports.AdminListContactRequestsSchema = zod_1.z.object({
|
|
|
26
26
|
exports.AdminUpdateContactRequestStatusSchema = zod_1.z.object({
|
|
27
27
|
status: zod_1.z.string(),
|
|
28
28
|
});
|
|
29
|
-
|
|
29
|
+
exports.AdminAssignContactRequestSchema = zod_1.z.object({
|
|
30
|
+
assign_to: zod_1.z.string().nullable(),
|
|
31
|
+
});
|
|
32
|
+
exports.AdminCreateCommentSchema = zod_1.z.object({
|
|
33
|
+
comment: zod_1.z.string().optional(),
|
|
34
|
+
images: zod_1.z.array(zod_1.z.string()).optional(),
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vY29udGFjdC1yZXF1ZXN0cy92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUF1QjtBQUVWLFFBQUEsK0JBQStCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0RCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRTtJQUN6QixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDekMsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzFDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzlCLENBQUMsQ0FBQTtBQU1XLFFBQUEsOEJBQThCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyRCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixVQUFVLEVBQUUsT0FBQztTQUNWLE1BQU0sQ0FBQztRQUNOLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3JDLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQ3RDLENBQUM7U0FDRCxRQUFRLEVBQUU7SUFDYixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hELEtBQUssRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMvRCxlQUFlLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Q0FDekQsQ0FBQyxDQUFBO0FBTVcsUUFBQSxxQ0FBcUMsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVELE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0NBQ25CLENBQUMsQ0FBQTtBQU1XLFFBQUEsK0JBQStCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0RCxTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNqQyxDQUFDLENBQUE7QUFNVyxRQUFBLHdCQUF3QixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUIsTUFBTSxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ3ZDLENBQUMsQ0FBQSJ9
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ContactRequestModuleService = exports.CONTACT_REQUEST_MODULE = void 0;
|
|
6
|
+
exports.ContactRequestComment = exports.ContactRequestModuleService = exports.CONTACT_REQUEST_MODULE = void 0;
|
|
7
7
|
const utils_1 = require("@medusajs/framework/utils");
|
|
8
8
|
const service_1 = __importDefault(require("./service"));
|
|
9
9
|
exports.ContactRequestModuleService = service_1.default;
|
|
@@ -11,4 +11,6 @@ exports.CONTACT_REQUEST_MODULE = "contact_requests";
|
|
|
11
11
|
exports.default = (0, utils_1.Module)(exports.CONTACT_REQUEST_MODULE, {
|
|
12
12
|
service: service_1.default,
|
|
13
13
|
});
|
|
14
|
-
|
|
14
|
+
var contact_request_comment_1 = require("./models/contact-request-comment");
|
|
15
|
+
Object.defineProperty(exports, "ContactRequestComment", { enumerable: true, get: function () { return contact_request_comment_1.ContactRequestComment; } });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb250YWN0LXJlcXVlc3RzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUFrRDtBQUNsRCx3REFBbUQ7QUFRMUMsc0NBUkYsaUJBQTJCLENBUUU7QUFOdkIsUUFBQSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FBQTtBQUV4RCxrQkFBZSxJQUFBLGNBQU0sRUFBQyw4QkFBc0IsRUFBRTtJQUM1QyxPQUFPLEVBQUUsaUJBQTJCO0NBQ3JDLENBQUMsQ0FBQTtBQUdGLDRFQUF3RTtBQUEvRCxnSUFBQSxxQkFBcUIsT0FBQSJ9
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Migration20241129163317 = void 0;
|
|
4
|
-
const migrations_1 = require("@mikro-orm/migrations");
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
5
|
class Migration20241129163317 extends migrations_1.Migration {
|
|
6
6
|
async up() {
|
|
7
7
|
this.addSql(`
|
|
@@ -44,4 +44,4 @@ class Migration20241129163317 extends migrations_1.Migration {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
exports.Migration20241129163317 = Migration20241129163317;
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNDExMjkxNjMzMTcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb250YWN0LXJlcXVlc3RzL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNDExMjkxNjMzMTcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7O0tBYVgsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFBO0lBQ3hELENBQUM7Q0FDRjtBQTlDRCwwREE4Q0MifQ==
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20251222161335 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20251222161335 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`
|
|
8
|
+
ALTER TABLE "contact_request"
|
|
9
|
+
ADD COLUMN IF NOT EXISTS "assign_to" text NULL;
|
|
10
|
+
`);
|
|
11
|
+
this.addSql(`
|
|
12
|
+
CREATE INDEX IF NOT EXISTS "IDX_contact_request_assign_to"
|
|
13
|
+
ON "contact_request" ("assign_to");
|
|
14
|
+
`);
|
|
15
|
+
}
|
|
16
|
+
async down() {
|
|
17
|
+
this.addSql(`
|
|
18
|
+
DROP INDEX IF EXISTS "IDX_contact_request_assign_to";
|
|
19
|
+
`);
|
|
20
|
+
this.addSql(`
|
|
21
|
+
ALTER TABLE "contact_request"
|
|
22
|
+
DROP COLUMN IF EXISTS "assign_to";
|
|
23
|
+
`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.Migration20251222161335 = Migration20251222161335;
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTEyMjIxNjEzMzUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb250YWN0LXJlcXVlc3RzL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTEyMjIxNjEzMzUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDOztLQUVYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjtBQXZCRCwwREF1QkMifQ==
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20251222161336 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20251222161336 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`
|
|
8
|
+
CREATE TABLE IF NOT EXISTS "contact_request_comment" (
|
|
9
|
+
"id" text PRIMARY KEY,
|
|
10
|
+
"admin_id" text NOT NULL,
|
|
11
|
+
"contact_request_id" text NOT NULL,
|
|
12
|
+
"comment" text NULL,
|
|
13
|
+
"images" jsonb NULL,
|
|
14
|
+
"created_at" timestamptz NOT NULL DEFAULT now(),
|
|
15
|
+
"updated_at" timestamptz NOT NULL DEFAULT now(),
|
|
16
|
+
"deleted_at" timestamptz NULL
|
|
17
|
+
);
|
|
18
|
+
`);
|
|
19
|
+
this.addSql(`
|
|
20
|
+
CREATE INDEX IF NOT EXISTS "IDX_contact_request_comment_contact_request_id"
|
|
21
|
+
ON "contact_request_comment" ("contact_request_id");
|
|
22
|
+
`);
|
|
23
|
+
this.addSql(`
|
|
24
|
+
CREATE INDEX IF NOT EXISTS "IDX_contact_request_comment_admin_id"
|
|
25
|
+
ON "contact_request_comment" ("admin_id");
|
|
26
|
+
`);
|
|
27
|
+
this.addSql(`
|
|
28
|
+
CREATE INDEX IF NOT EXISTS "IDX_contact_request_comment_deleted_at"
|
|
29
|
+
ON "contact_request_comment" ("deleted_at");
|
|
30
|
+
`);
|
|
31
|
+
}
|
|
32
|
+
async down() {
|
|
33
|
+
this.addSql(`DROP TABLE IF EXISTS "contact_request_comment";`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.Migration20251222161336 = Migration20251222161336;
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTEyMjIxNjEzMzYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb250YWN0LXJlcXVlc3RzL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTEyMjIxNjEzMzYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7OztLQVdYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsaURBQWlELENBQUMsQ0FBQTtJQUNoRSxDQUFDO0NBQ0Y7QUFsQ0QsMERBa0NDIn0=
|