@medusajs/draft-order 2.11.0-preview-20251018090155 → 2.11.0-preview-20251018150154
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 +1266 -1266
- package/.medusa/server/src/admin/index.mjs +1266 -1266
- package/package.json +16 -16
|
@@ -9567,27 +9567,6 @@ const ID = () => {
|
|
|
9567
9567
|
/* @__PURE__ */ jsx(Outlet, {})
|
|
9568
9568
|
] });
|
|
9569
9569
|
};
|
|
9570
|
-
const CustomItems = () => {
|
|
9571
|
-
return /* @__PURE__ */ jsxs(RouteDrawer, { children: [
|
|
9572
|
-
/* @__PURE__ */ jsx(RouteDrawer.Header, { children: /* @__PURE__ */ jsx(RouteDrawer.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Edit Custom Items" }) }) }),
|
|
9573
|
-
/* @__PURE__ */ jsx(CustomItemsForm, {})
|
|
9574
|
-
] });
|
|
9575
|
-
};
|
|
9576
|
-
const CustomItemsForm = () => {
|
|
9577
|
-
const form = useForm({
|
|
9578
|
-
resolver: zodResolver(schema$5)
|
|
9579
|
-
});
|
|
9580
|
-
return /* @__PURE__ */ jsx(RouteDrawer.Form, { form, children: /* @__PURE__ */ jsxs(KeyboundForm, { className: "flex flex-1 flex-col", children: [
|
|
9581
|
-
/* @__PURE__ */ jsx(RouteDrawer.Body, {}),
|
|
9582
|
-
/* @__PURE__ */ jsx(RouteDrawer.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
9583
|
-
/* @__PURE__ */ jsx(RouteDrawer.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", children: "Cancel" }) }),
|
|
9584
|
-
/* @__PURE__ */ jsx(Button, { size: "small", type: "submit", children: "Save" })
|
|
9585
|
-
] }) })
|
|
9586
|
-
] }) });
|
|
9587
|
-
};
|
|
9588
|
-
const schema$5 = objectType({
|
|
9589
|
-
email: stringType().email()
|
|
9590
|
-
});
|
|
9591
9570
|
const BillingAddress = () => {
|
|
9592
9571
|
const { id } = useParams();
|
|
9593
9572
|
const { order, isPending, isError, error } = useOrder(id, {
|
|
@@ -9620,7 +9599,7 @@ const BillingAddressForm = ({ order }) => {
|
|
|
9620
9599
|
postal_code: ((_i = order.billing_address) == null ? void 0 : _i.postal_code) ?? "",
|
|
9621
9600
|
phone: ((_j = order.billing_address) == null ? void 0 : _j.phone) ?? ""
|
|
9622
9601
|
},
|
|
9623
|
-
resolver: zodResolver(schema$
|
|
9602
|
+
resolver: zodResolver(schema$5)
|
|
9624
9603
|
});
|
|
9625
9604
|
const { mutateAsync, isPending } = useUpdateDraftOrder(order.id);
|
|
9626
9605
|
const { handleSuccess } = useRouteModal();
|
|
@@ -9777,7 +9756,28 @@ const BillingAddressForm = ({ order }) => {
|
|
|
9777
9756
|
}
|
|
9778
9757
|
) });
|
|
9779
9758
|
};
|
|
9780
|
-
const schema$
|
|
9759
|
+
const schema$5 = addressSchema;
|
|
9760
|
+
const CustomItems = () => {
|
|
9761
|
+
return /* @__PURE__ */ jsxs(RouteDrawer, { children: [
|
|
9762
|
+
/* @__PURE__ */ jsx(RouteDrawer.Header, { children: /* @__PURE__ */ jsx(RouteDrawer.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Edit Custom Items" }) }) }),
|
|
9763
|
+
/* @__PURE__ */ jsx(CustomItemsForm, {})
|
|
9764
|
+
] });
|
|
9765
|
+
};
|
|
9766
|
+
const CustomItemsForm = () => {
|
|
9767
|
+
const form = useForm({
|
|
9768
|
+
resolver: zodResolver(schema$4)
|
|
9769
|
+
});
|
|
9770
|
+
return /* @__PURE__ */ jsx(RouteDrawer.Form, { form, children: /* @__PURE__ */ jsxs(KeyboundForm, { className: "flex flex-1 flex-col", children: [
|
|
9771
|
+
/* @__PURE__ */ jsx(RouteDrawer.Body, {}),
|
|
9772
|
+
/* @__PURE__ */ jsx(RouteDrawer.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
9773
|
+
/* @__PURE__ */ jsx(RouteDrawer.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", children: "Cancel" }) }),
|
|
9774
|
+
/* @__PURE__ */ jsx(Button, { size: "small", type: "submit", children: "Save" })
|
|
9775
|
+
] }) })
|
|
9776
|
+
] }) });
|
|
9777
|
+
};
|
|
9778
|
+
const schema$4 = objectType({
|
|
9779
|
+
email: stringType().email()
|
|
9780
|
+
});
|
|
9781
9781
|
const Email = () => {
|
|
9782
9782
|
const { id } = useParams();
|
|
9783
9783
|
const { order, isPending, isError, error } = useOrder(id, {
|
|
@@ -10820,392 +10820,115 @@ const customItemSchema = objectType({
|
|
|
10820
10820
|
quantity: numberType(),
|
|
10821
10821
|
unit_price: unionType([numberType(), stringType()])
|
|
10822
10822
|
});
|
|
10823
|
-
const
|
|
10824
|
-
|
|
10825
|
-
|
|
10826
|
-
|
|
10827
|
-
|
|
10828
|
-
|
|
10829
|
-
|
|
10830
|
-
|
|
10831
|
-
|
|
10832
|
-
|
|
10833
|
-
|
|
10834
|
-
|
|
10835
|
-
|
|
10836
|
-
|
|
10837
|
-
|
|
10838
|
-
|
|
10839
|
-
|
|
10840
|
-
|
|
10841
|
-
|
|
10842
|
-
}
|
|
10843
|
-
|
|
10823
|
+
const InlineTip = forwardRef(
|
|
10824
|
+
({ variant = "tip", label, className, children, ...props }, ref) => {
|
|
10825
|
+
const labelValue = label || (variant === "warning" ? "Warning" : "Tip");
|
|
10826
|
+
return /* @__PURE__ */ jsxs(
|
|
10827
|
+
"div",
|
|
10828
|
+
{
|
|
10829
|
+
ref,
|
|
10830
|
+
className: clx(
|
|
10831
|
+
"bg-ui-bg-component txt-small text-ui-fg-subtle grid grid-cols-[4px_1fr] items-start gap-3 rounded-lg border p-3",
|
|
10832
|
+
className
|
|
10833
|
+
),
|
|
10834
|
+
...props,
|
|
10835
|
+
children: [
|
|
10836
|
+
/* @__PURE__ */ jsx(
|
|
10837
|
+
"div",
|
|
10838
|
+
{
|
|
10839
|
+
role: "presentation",
|
|
10840
|
+
className: clx("w-4px bg-ui-tag-neutral-icon h-full rounded-full", {
|
|
10841
|
+
"bg-ui-tag-orange-icon": variant === "warning"
|
|
10842
|
+
})
|
|
10843
|
+
}
|
|
10844
|
+
),
|
|
10845
|
+
/* @__PURE__ */ jsxs("div", { className: "text-pretty", children: [
|
|
10846
|
+
/* @__PURE__ */ jsxs("strong", { className: "txt-small-plus text-ui-fg-base", children: [
|
|
10847
|
+
labelValue,
|
|
10848
|
+
":"
|
|
10849
|
+
] }),
|
|
10850
|
+
" ",
|
|
10851
|
+
children
|
|
10852
|
+
] })
|
|
10853
|
+
]
|
|
10854
|
+
}
|
|
10855
|
+
);
|
|
10856
|
+
}
|
|
10857
|
+
);
|
|
10858
|
+
InlineTip.displayName = "InlineTip";
|
|
10859
|
+
const MetadataFieldSchema = objectType({
|
|
10860
|
+
key: stringType(),
|
|
10861
|
+
disabled: booleanType().optional(),
|
|
10862
|
+
value: anyType()
|
|
10863
|
+
});
|
|
10864
|
+
const MetadataSchema = objectType({
|
|
10865
|
+
metadata: arrayType(MetadataFieldSchema)
|
|
10866
|
+
});
|
|
10867
|
+
const Metadata = () => {
|
|
10844
10868
|
const { id } = useParams();
|
|
10845
|
-
const {
|
|
10846
|
-
|
|
10847
|
-
|
|
10848
|
-
|
|
10849
|
-
|
|
10850
|
-
useInitiateOrderEdit({ preview });
|
|
10851
|
-
const { onCancel } = useCancelOrderEdit({ preview });
|
|
10852
|
-
if (isPreviewError) {
|
|
10853
|
-
throw previewError;
|
|
10869
|
+
const { order, isPending, isError, error } = useOrder(id, {
|
|
10870
|
+
fields: "metadata"
|
|
10871
|
+
});
|
|
10872
|
+
if (isError) {
|
|
10873
|
+
throw error;
|
|
10854
10874
|
}
|
|
10855
|
-
const isReady = !!
|
|
10856
|
-
return /* @__PURE__ */ jsxs(RouteDrawer, {
|
|
10857
|
-
/* @__PURE__ */
|
|
10858
|
-
|
|
10875
|
+
const isReady = !isPending && !!order;
|
|
10876
|
+
return /* @__PURE__ */ jsxs(RouteDrawer, { children: [
|
|
10877
|
+
/* @__PURE__ */ jsxs(RouteDrawer.Header, { children: [
|
|
10878
|
+
/* @__PURE__ */ jsx(RouteDrawer.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Metadata" }) }),
|
|
10879
|
+
/* @__PURE__ */ jsx(RouteDrawer.Description, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Add metadata to the draft order." }) })
|
|
10880
|
+
] }),
|
|
10881
|
+
!isReady ? /* @__PURE__ */ jsx(PlaceholderInner, {}) : /* @__PURE__ */ jsx(MetadataForm, { orderId: id, metadata: order == null ? void 0 : order.metadata })
|
|
10859
10882
|
] });
|
|
10860
10883
|
};
|
|
10861
|
-
const
|
|
10862
|
-
|
|
10863
|
-
|
|
10864
|
-
const [comboboxValue, setComboboxValue] = useState("");
|
|
10884
|
+
const METADATA_KEY_LABEL_ID = "metadata-form-key-label";
|
|
10885
|
+
const METADATA_VALUE_LABEL_ID = "metadata-form-value-label";
|
|
10886
|
+
const MetadataForm = ({ orderId, metadata }) => {
|
|
10865
10887
|
const { handleSuccess } = useRouteModal();
|
|
10866
|
-
const
|
|
10867
|
-
const
|
|
10868
|
-
const
|
|
10869
|
-
{
|
|
10870
|
-
|
|
10871
|
-
},
|
|
10872
|
-
{
|
|
10873
|
-
enabled: !!promoIds.length
|
|
10874
|
-
}
|
|
10875
|
-
);
|
|
10876
|
-
const comboboxData = useComboboxData({
|
|
10877
|
-
queryKey: ["promotions", "combobox", promoIds],
|
|
10878
|
-
queryFn: async (params) => {
|
|
10879
|
-
return await sdk.admin.promotion.list({
|
|
10880
|
-
...params,
|
|
10881
|
-
id: {
|
|
10882
|
-
$nin: promoIds
|
|
10883
|
-
}
|
|
10884
|
-
});
|
|
10888
|
+
const hasUneditableRows = getHasUneditableRows(metadata);
|
|
10889
|
+
const { mutateAsync, isPending } = useUpdateDraftOrder(orderId);
|
|
10890
|
+
const form = useForm({
|
|
10891
|
+
defaultValues: {
|
|
10892
|
+
metadata: getDefaultValues(metadata)
|
|
10885
10893
|
},
|
|
10886
|
-
|
|
10887
|
-
return data.promotions.map((promotion) => ({
|
|
10888
|
-
label: promotion.code,
|
|
10889
|
-
value: promotion.code
|
|
10890
|
-
}));
|
|
10891
|
-
}
|
|
10894
|
+
resolver: zodResolver(MetadataSchema)
|
|
10892
10895
|
});
|
|
10893
|
-
const
|
|
10894
|
-
|
|
10895
|
-
|
|
10896
|
-
}
|
|
10897
|
-
addPromotions(
|
|
10896
|
+
const handleSubmit = form.handleSubmit(async (data) => {
|
|
10897
|
+
const parsedData = parseValues(data);
|
|
10898
|
+
await mutateAsync(
|
|
10898
10899
|
{
|
|
10899
|
-
|
|
10900
|
+
metadata: parsedData
|
|
10900
10901
|
},
|
|
10901
10902
|
{
|
|
10902
|
-
onError: (e) => {
|
|
10903
|
-
toast.error(e.message);
|
|
10904
|
-
comboboxData.onSearchValueChange("");
|
|
10905
|
-
setComboboxValue("");
|
|
10906
|
-
},
|
|
10907
10903
|
onSuccess: () => {
|
|
10908
|
-
|
|
10909
|
-
|
|
10904
|
+
toast.success("Metadata updated");
|
|
10905
|
+
handleSuccess();
|
|
10906
|
+
},
|
|
10907
|
+
onError: (error) => {
|
|
10908
|
+
toast.error(error.message);
|
|
10910
10909
|
}
|
|
10911
10910
|
}
|
|
10912
10911
|
);
|
|
10913
|
-
};
|
|
10914
|
-
const {
|
|
10915
|
-
|
|
10916
|
-
|
|
10917
|
-
|
|
10918
|
-
|
|
10919
|
-
|
|
10920
|
-
|
|
10921
|
-
|
|
10922
|
-
|
|
10923
|
-
|
|
10924
|
-
|
|
10925
|
-
}
|
|
10926
|
-
});
|
|
10927
|
-
if (!requestSucceeded) {
|
|
10928
|
-
setIsSubmitting(false);
|
|
10929
|
-
return;
|
|
10912
|
+
});
|
|
10913
|
+
const { fields, insert, remove } = useFieldArray({
|
|
10914
|
+
control: form.control,
|
|
10915
|
+
name: "metadata"
|
|
10916
|
+
});
|
|
10917
|
+
function deleteRow(index) {
|
|
10918
|
+
remove(index);
|
|
10919
|
+
if (fields.length === 1) {
|
|
10920
|
+
insert(0, {
|
|
10921
|
+
key: "",
|
|
10922
|
+
value: "",
|
|
10923
|
+
disabled: false
|
|
10924
|
+
});
|
|
10930
10925
|
}
|
|
10931
|
-
|
|
10932
|
-
|
|
10933
|
-
|
|
10934
|
-
|
|
10935
|
-
|
|
10936
|
-
|
|
10937
|
-
},
|
|
10938
|
-
onSettled: () => {
|
|
10939
|
-
setIsSubmitting(false);
|
|
10940
|
-
}
|
|
10941
|
-
});
|
|
10942
|
-
};
|
|
10943
|
-
if (isError) {
|
|
10944
|
-
throw error;
|
|
10945
|
-
}
|
|
10946
|
-
return /* @__PURE__ */ jsxs(KeyboundForm, { className: "flex flex-1 flex-col", onSubmit, children: [
|
|
10947
|
-
/* @__PURE__ */ jsx(RouteDrawer.Body, { children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
10948
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
10949
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
10950
|
-
/* @__PURE__ */ jsx(Label$1, { size: "small", weight: "plus", htmlFor: "promotion-combobox", children: "Apply promotions" }),
|
|
10951
|
-
/* @__PURE__ */ jsx(Hint$1, { id: "promotion-combobox-hint", children: "Manage promotions that should be applied to the order." })
|
|
10952
|
-
] }),
|
|
10953
|
-
/* @__PURE__ */ jsx(
|
|
10954
|
-
Combobox,
|
|
10955
|
-
{
|
|
10956
|
-
id: "promotion-combobox",
|
|
10957
|
-
"aria-describedby": "promotion-combobox-hint",
|
|
10958
|
-
isFetchingNextPage: comboboxData.isFetchingNextPage,
|
|
10959
|
-
fetchNextPage: comboboxData.fetchNextPage,
|
|
10960
|
-
options: comboboxData.options,
|
|
10961
|
-
onSearchValueChange: comboboxData.onSearchValueChange,
|
|
10962
|
-
searchValue: comboboxData.searchValue,
|
|
10963
|
-
disabled: comboboxData.disabled || isAddingPromotions,
|
|
10964
|
-
onChange: add,
|
|
10965
|
-
value: comboboxValue
|
|
10966
|
-
}
|
|
10967
|
-
)
|
|
10968
|
-
] }),
|
|
10969
|
-
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
10970
|
-
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", children: promotions == null ? void 0 : promotions.map((promotion) => /* @__PURE__ */ jsx(
|
|
10971
|
-
PromotionItem,
|
|
10972
|
-
{
|
|
10973
|
-
promotion,
|
|
10974
|
-
orderId: preview.id,
|
|
10975
|
-
isLoading: isPending
|
|
10976
|
-
},
|
|
10977
|
-
promotion.id
|
|
10978
|
-
)) })
|
|
10979
|
-
] }) }),
|
|
10980
|
-
/* @__PURE__ */ jsx(RouteDrawer.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
10981
|
-
/* @__PURE__ */ jsx(RouteDrawer.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", children: "Cancel" }) }),
|
|
10982
|
-
/* @__PURE__ */ jsx(
|
|
10983
|
-
Button,
|
|
10984
|
-
{
|
|
10985
|
-
size: "small",
|
|
10986
|
-
type: "submit",
|
|
10987
|
-
isLoading: isSubmitting || isAddingPromotions,
|
|
10988
|
-
children: "Save"
|
|
10989
|
-
}
|
|
10990
|
-
)
|
|
10991
|
-
] }) })
|
|
10992
|
-
] });
|
|
10993
|
-
};
|
|
10994
|
-
const PromotionItem = ({
|
|
10995
|
-
promotion,
|
|
10996
|
-
orderId,
|
|
10997
|
-
isLoading
|
|
10998
|
-
}) => {
|
|
10999
|
-
var _a;
|
|
11000
|
-
const { mutateAsync: removePromotions, isPending } = useDraftOrderRemovePromotions(orderId);
|
|
11001
|
-
const onRemove = async () => {
|
|
11002
|
-
removePromotions(
|
|
11003
|
-
{
|
|
11004
|
-
promo_codes: [promotion.code]
|
|
11005
|
-
},
|
|
11006
|
-
{
|
|
11007
|
-
onError: (e) => {
|
|
11008
|
-
toast.error(e.message);
|
|
11009
|
-
}
|
|
11010
|
-
}
|
|
11011
|
-
);
|
|
11012
|
-
};
|
|
11013
|
-
const displayValue = getDisplayValue(promotion);
|
|
11014
|
-
return /* @__PURE__ */ jsxs(
|
|
11015
|
-
"div",
|
|
11016
|
-
{
|
|
11017
|
-
className: clx(
|
|
11018
|
-
"bg-ui-bg-component shadow-elevation-card-rest flex items-center justify-between rounded-lg px-3 py-2",
|
|
11019
|
-
{
|
|
11020
|
-
"animate-pulse": isLoading
|
|
11021
|
-
}
|
|
11022
|
-
),
|
|
11023
|
-
children: [
|
|
11024
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
11025
|
-
/* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", leading: "compact", children: promotion.code }),
|
|
11026
|
-
/* @__PURE__ */ jsxs("div", { className: "text-ui-fg-subtle flex items-center gap-1.5", children: [
|
|
11027
|
-
displayValue && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
11028
|
-
/* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", children: displayValue }),
|
|
11029
|
-
/* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", children: "·" })
|
|
11030
|
-
] }),
|
|
11031
|
-
/* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", className: "capitalize", children: (_a = promotion.application_method) == null ? void 0 : _a.allocation })
|
|
11032
|
-
] })
|
|
11033
|
-
] }),
|
|
11034
|
-
/* @__PURE__ */ jsx(
|
|
11035
|
-
IconButton,
|
|
11036
|
-
{
|
|
11037
|
-
size: "small",
|
|
11038
|
-
type: "button",
|
|
11039
|
-
variant: "transparent",
|
|
11040
|
-
onClick: onRemove,
|
|
11041
|
-
isLoading: isPending || isLoading,
|
|
11042
|
-
children: /* @__PURE__ */ jsx(XMark, {})
|
|
11043
|
-
}
|
|
11044
|
-
)
|
|
11045
|
-
]
|
|
11046
|
-
},
|
|
11047
|
-
promotion.id
|
|
11048
|
-
);
|
|
11049
|
-
};
|
|
11050
|
-
function getDisplayValue(promotion) {
|
|
11051
|
-
var _a, _b, _c, _d;
|
|
11052
|
-
const value = (_a = promotion.application_method) == null ? void 0 : _a.value;
|
|
11053
|
-
if (!value) {
|
|
11054
|
-
return null;
|
|
11055
|
-
}
|
|
11056
|
-
if (((_b = promotion.application_method) == null ? void 0 : _b.type) === "fixed") {
|
|
11057
|
-
const currency = (_c = promotion.application_method) == null ? void 0 : _c.currency_code;
|
|
11058
|
-
if (!currency) {
|
|
11059
|
-
return null;
|
|
11060
|
-
}
|
|
11061
|
-
return getLocaleAmount(value, currency);
|
|
11062
|
-
} else if (((_d = promotion.application_method) == null ? void 0 : _d.type) === "percentage") {
|
|
11063
|
-
return formatPercentage(value);
|
|
11064
|
-
}
|
|
11065
|
-
return null;
|
|
11066
|
-
}
|
|
11067
|
-
const formatter = new Intl.NumberFormat([], {
|
|
11068
|
-
style: "percent",
|
|
11069
|
-
minimumFractionDigits: 2
|
|
11070
|
-
});
|
|
11071
|
-
const formatPercentage = (value, isPercentageValue = false) => {
|
|
11072
|
-
let val = value || 0;
|
|
11073
|
-
if (!isPercentageValue) {
|
|
11074
|
-
val = val / 100;
|
|
11075
|
-
}
|
|
11076
|
-
return formatter.format(val);
|
|
11077
|
-
};
|
|
11078
|
-
function getPromotionIds(items, shippingMethods) {
|
|
11079
|
-
const promotionIds = /* @__PURE__ */ new Set();
|
|
11080
|
-
for (const item of items) {
|
|
11081
|
-
if (item.adjustments) {
|
|
11082
|
-
for (const adjustment of item.adjustments) {
|
|
11083
|
-
if (adjustment.promotion_id) {
|
|
11084
|
-
promotionIds.add(adjustment.promotion_id);
|
|
11085
|
-
}
|
|
11086
|
-
}
|
|
11087
|
-
}
|
|
11088
|
-
}
|
|
11089
|
-
for (const shippingMethod of shippingMethods) {
|
|
11090
|
-
if (shippingMethod.adjustments) {
|
|
11091
|
-
for (const adjustment of shippingMethod.adjustments) {
|
|
11092
|
-
if (adjustment.promotion_id) {
|
|
11093
|
-
promotionIds.add(adjustment.promotion_id);
|
|
11094
|
-
}
|
|
11095
|
-
}
|
|
11096
|
-
}
|
|
11097
|
-
}
|
|
11098
|
-
return Array.from(promotionIds);
|
|
11099
|
-
}
|
|
11100
|
-
const InlineTip = forwardRef(
|
|
11101
|
-
({ variant = "tip", label, className, children, ...props }, ref) => {
|
|
11102
|
-
const labelValue = label || (variant === "warning" ? "Warning" : "Tip");
|
|
11103
|
-
return /* @__PURE__ */ jsxs(
|
|
11104
|
-
"div",
|
|
11105
|
-
{
|
|
11106
|
-
ref,
|
|
11107
|
-
className: clx(
|
|
11108
|
-
"bg-ui-bg-component txt-small text-ui-fg-subtle grid grid-cols-[4px_1fr] items-start gap-3 rounded-lg border p-3",
|
|
11109
|
-
className
|
|
11110
|
-
),
|
|
11111
|
-
...props,
|
|
11112
|
-
children: [
|
|
11113
|
-
/* @__PURE__ */ jsx(
|
|
11114
|
-
"div",
|
|
11115
|
-
{
|
|
11116
|
-
role: "presentation",
|
|
11117
|
-
className: clx("w-4px bg-ui-tag-neutral-icon h-full rounded-full", {
|
|
11118
|
-
"bg-ui-tag-orange-icon": variant === "warning"
|
|
11119
|
-
})
|
|
11120
|
-
}
|
|
11121
|
-
),
|
|
11122
|
-
/* @__PURE__ */ jsxs("div", { className: "text-pretty", children: [
|
|
11123
|
-
/* @__PURE__ */ jsxs("strong", { className: "txt-small-plus text-ui-fg-base", children: [
|
|
11124
|
-
labelValue,
|
|
11125
|
-
":"
|
|
11126
|
-
] }),
|
|
11127
|
-
" ",
|
|
11128
|
-
children
|
|
11129
|
-
] })
|
|
11130
|
-
]
|
|
11131
|
-
}
|
|
11132
|
-
);
|
|
11133
|
-
}
|
|
11134
|
-
);
|
|
11135
|
-
InlineTip.displayName = "InlineTip";
|
|
11136
|
-
const MetadataFieldSchema = objectType({
|
|
11137
|
-
key: stringType(),
|
|
11138
|
-
disabled: booleanType().optional(),
|
|
11139
|
-
value: anyType()
|
|
11140
|
-
});
|
|
11141
|
-
const MetadataSchema = objectType({
|
|
11142
|
-
metadata: arrayType(MetadataFieldSchema)
|
|
11143
|
-
});
|
|
11144
|
-
const Metadata = () => {
|
|
11145
|
-
const { id } = useParams();
|
|
11146
|
-
const { order, isPending, isError, error } = useOrder(id, {
|
|
11147
|
-
fields: "metadata"
|
|
11148
|
-
});
|
|
11149
|
-
if (isError) {
|
|
11150
|
-
throw error;
|
|
11151
|
-
}
|
|
11152
|
-
const isReady = !isPending && !!order;
|
|
11153
|
-
return /* @__PURE__ */ jsxs(RouteDrawer, { children: [
|
|
11154
|
-
/* @__PURE__ */ jsxs(RouteDrawer.Header, { children: [
|
|
11155
|
-
/* @__PURE__ */ jsx(RouteDrawer.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Metadata" }) }),
|
|
11156
|
-
/* @__PURE__ */ jsx(RouteDrawer.Description, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Add metadata to the draft order." }) })
|
|
11157
|
-
] }),
|
|
11158
|
-
!isReady ? /* @__PURE__ */ jsx(PlaceholderInner, {}) : /* @__PURE__ */ jsx(MetadataForm, { orderId: id, metadata: order == null ? void 0 : order.metadata })
|
|
11159
|
-
] });
|
|
11160
|
-
};
|
|
11161
|
-
const METADATA_KEY_LABEL_ID = "metadata-form-key-label";
|
|
11162
|
-
const METADATA_VALUE_LABEL_ID = "metadata-form-value-label";
|
|
11163
|
-
const MetadataForm = ({ orderId, metadata }) => {
|
|
11164
|
-
const { handleSuccess } = useRouteModal();
|
|
11165
|
-
const hasUneditableRows = getHasUneditableRows(metadata);
|
|
11166
|
-
const { mutateAsync, isPending } = useUpdateDraftOrder(orderId);
|
|
11167
|
-
const form = useForm({
|
|
11168
|
-
defaultValues: {
|
|
11169
|
-
metadata: getDefaultValues(metadata)
|
|
11170
|
-
},
|
|
11171
|
-
resolver: zodResolver(MetadataSchema)
|
|
11172
|
-
});
|
|
11173
|
-
const handleSubmit = form.handleSubmit(async (data) => {
|
|
11174
|
-
const parsedData = parseValues(data);
|
|
11175
|
-
await mutateAsync(
|
|
11176
|
-
{
|
|
11177
|
-
metadata: parsedData
|
|
11178
|
-
},
|
|
11179
|
-
{
|
|
11180
|
-
onSuccess: () => {
|
|
11181
|
-
toast.success("Metadata updated");
|
|
11182
|
-
handleSuccess();
|
|
11183
|
-
},
|
|
11184
|
-
onError: (error) => {
|
|
11185
|
-
toast.error(error.message);
|
|
11186
|
-
}
|
|
11187
|
-
}
|
|
11188
|
-
);
|
|
11189
|
-
});
|
|
11190
|
-
const { fields, insert, remove } = useFieldArray({
|
|
11191
|
-
control: form.control,
|
|
11192
|
-
name: "metadata"
|
|
11193
|
-
});
|
|
11194
|
-
function deleteRow(index) {
|
|
11195
|
-
remove(index);
|
|
11196
|
-
if (fields.length === 1) {
|
|
11197
|
-
insert(0, {
|
|
11198
|
-
key: "",
|
|
11199
|
-
value: "",
|
|
11200
|
-
disabled: false
|
|
11201
|
-
});
|
|
11202
|
-
}
|
|
11203
|
-
}
|
|
11204
|
-
function insertRow(index, position) {
|
|
11205
|
-
insert(index + (position === "above" ? 0 : 1), {
|
|
11206
|
-
key: "",
|
|
11207
|
-
value: "",
|
|
11208
|
-
disabled: false
|
|
10926
|
+
}
|
|
10927
|
+
function insertRow(index, position) {
|
|
10928
|
+
insert(index + (position === "above" ? 0 : 1), {
|
|
10929
|
+
key: "",
|
|
10930
|
+
value: "",
|
|
10931
|
+
disabled: false
|
|
11209
10932
|
});
|
|
11210
10933
|
}
|
|
11211
10934
|
return /* @__PURE__ */ jsx(RouteDrawer.Form, { form, children: /* @__PURE__ */ jsxs(
|
|
@@ -11447,183 +11170,105 @@ function getHasUneditableRows(metadata) {
|
|
|
11447
11170
|
(value) => !EDITABLE_TYPES.includes(typeof value)
|
|
11448
11171
|
);
|
|
11449
11172
|
}
|
|
11450
|
-
const
|
|
11451
|
-
|
|
11452
|
-
|
|
11453
|
-
|
|
11454
|
-
|
|
11455
|
-
|
|
11456
|
-
|
|
11457
|
-
|
|
11458
|
-
|
|
11459
|
-
|
|
11460
|
-
|
|
11461
|
-
if (isError) {
|
|
11462
|
-
throw error;
|
|
11463
|
-
}
|
|
11464
|
-
const ISrEADY = !!draft_order && !isPending;
|
|
11465
|
-
return /* @__PURE__ */ jsxs(RouteDrawer, { children: [
|
|
11466
|
-
/* @__PURE__ */ jsxs(RouteDrawer.Header, { children: [
|
|
11467
|
-
/* @__PURE__ */ jsx(RouteDrawer.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Edit Sales Channel" }) }),
|
|
11468
|
-
/* @__PURE__ */ jsx(RouteDrawer.Description, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Update which sales channel the draft order is associated with" }) })
|
|
11469
|
-
] }),
|
|
11470
|
-
ISrEADY && /* @__PURE__ */ jsx(SalesChannelForm, { order: draft_order })
|
|
11471
|
-
] });
|
|
11472
|
-
};
|
|
11473
|
-
const SalesChannelForm = ({ order }) => {
|
|
11474
|
-
const form = useForm({
|
|
11475
|
-
defaultValues: {
|
|
11476
|
-
sales_channel_id: order.sales_channel_id || ""
|
|
11477
|
-
},
|
|
11478
|
-
resolver: zodResolver(schema$2)
|
|
11479
|
-
});
|
|
11480
|
-
const { mutateAsync, isPending } = useUpdateDraftOrder(order.id);
|
|
11481
|
-
const { handleSuccess } = useRouteModal();
|
|
11482
|
-
const onSubmit = form.handleSubmit(async (data) => {
|
|
11483
|
-
await mutateAsync(
|
|
11484
|
-
{
|
|
11485
|
-
sales_channel_id: data.sales_channel_id
|
|
11486
|
-
},
|
|
11487
|
-
{
|
|
11488
|
-
onSuccess: () => {
|
|
11489
|
-
toast.success("Sales channel updated");
|
|
11490
|
-
handleSuccess();
|
|
11491
|
-
},
|
|
11492
|
-
onError: (error) => {
|
|
11493
|
-
toast.error(error.message);
|
|
11494
|
-
}
|
|
11495
|
-
}
|
|
11496
|
-
);
|
|
11497
|
-
});
|
|
11498
|
-
return /* @__PURE__ */ jsx(RouteDrawer.Form, { form, children: /* @__PURE__ */ jsxs(
|
|
11499
|
-
KeyboundForm,
|
|
11500
|
-
{
|
|
11501
|
-
className: "flex flex-1 flex-col overflow-hidden",
|
|
11502
|
-
onSubmit,
|
|
11503
|
-
children: [
|
|
11504
|
-
/* @__PURE__ */ jsx(RouteDrawer.Body, { className: "flex flex-col gap-y-6 overflow-y-auto", children: /* @__PURE__ */ jsx(SalesChannelField, { control: form.control, order }) }),
|
|
11505
|
-
/* @__PURE__ */ jsx(RouteDrawer.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
11506
|
-
/* @__PURE__ */ jsx(RouteDrawer.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", children: "Cancel" }) }),
|
|
11507
|
-
/* @__PURE__ */ jsx(Button, { size: "small", type: "submit", isLoading: isPending, children: "Save" })
|
|
11508
|
-
] }) })
|
|
11509
|
-
]
|
|
11510
|
-
}
|
|
11511
|
-
) });
|
|
11173
|
+
const PROMOTION_QUERY_KEY = "promotions";
|
|
11174
|
+
const promotionsQueryKeys = {
|
|
11175
|
+
list: (query2) => [
|
|
11176
|
+
PROMOTION_QUERY_KEY,
|
|
11177
|
+
query2 ? query2 : void 0
|
|
11178
|
+
],
|
|
11179
|
+
detail: (id, query2) => [
|
|
11180
|
+
PROMOTION_QUERY_KEY,
|
|
11181
|
+
id,
|
|
11182
|
+
query2 ? query2 : void 0
|
|
11183
|
+
]
|
|
11512
11184
|
};
|
|
11513
|
-
const
|
|
11514
|
-
const
|
|
11515
|
-
|
|
11516
|
-
|
|
11517
|
-
|
|
11518
|
-
queryKey: ["sales-channels"],
|
|
11519
|
-
getOptions: (data) => {
|
|
11520
|
-
return data.sales_channels.map((salesChannel) => ({
|
|
11521
|
-
label: salesChannel.name,
|
|
11522
|
-
value: salesChannel.id
|
|
11523
|
-
}));
|
|
11524
|
-
},
|
|
11525
|
-
defaultValue: order.sales_channel_id || void 0
|
|
11185
|
+
const usePromotions = (query2, options) => {
|
|
11186
|
+
const { data, ...rest } = useQuery({
|
|
11187
|
+
queryKey: promotionsQueryKeys.list(query2),
|
|
11188
|
+
queryFn: async () => sdk.admin.promotion.list(query2),
|
|
11189
|
+
...options
|
|
11526
11190
|
});
|
|
11527
|
-
return
|
|
11528
|
-
Form$2.Field,
|
|
11529
|
-
{
|
|
11530
|
-
control,
|
|
11531
|
-
name: "sales_channel_id",
|
|
11532
|
-
render: ({ field }) => {
|
|
11533
|
-
return /* @__PURE__ */ jsxs(Form$2.Item, { children: [
|
|
11534
|
-
/* @__PURE__ */ jsx(Form$2.Label, { children: "Sales Channel" }),
|
|
11535
|
-
/* @__PURE__ */ jsx(Form$2.Control, { children: /* @__PURE__ */ jsx(
|
|
11536
|
-
Combobox,
|
|
11537
|
-
{
|
|
11538
|
-
options: salesChannels.options,
|
|
11539
|
-
fetchNextPage: salesChannels.fetchNextPage,
|
|
11540
|
-
isFetchingNextPage: salesChannels.isFetchingNextPage,
|
|
11541
|
-
searchValue: salesChannels.searchValue,
|
|
11542
|
-
onSearchValueChange: salesChannels.onSearchValueChange,
|
|
11543
|
-
placeholder: "Select sales channel",
|
|
11544
|
-
...field
|
|
11545
|
-
}
|
|
11546
|
-
) }),
|
|
11547
|
-
/* @__PURE__ */ jsx(Form$2.ErrorMessage, {})
|
|
11548
|
-
] });
|
|
11549
|
-
}
|
|
11550
|
-
}
|
|
11551
|
-
);
|
|
11191
|
+
return { ...data, ...rest };
|
|
11552
11192
|
};
|
|
11553
|
-
const
|
|
11554
|
-
sales_channel_id: stringType().min(1)
|
|
11555
|
-
});
|
|
11556
|
-
const STACKED_FOCUS_MODAL_ID = "shipping-form";
|
|
11557
|
-
const Shipping = () => {
|
|
11558
|
-
var _a;
|
|
11193
|
+
const Promotions = () => {
|
|
11559
11194
|
const { id } = useParams();
|
|
11560
|
-
const { order, isPending, isError, error } = useOrder(id, {
|
|
11561
|
-
fields: "+items.*,+items.variant.*,+items.variant.product.*,+items.variant.product.shipping_profile.*,+currency_code"
|
|
11562
|
-
});
|
|
11563
11195
|
const {
|
|
11564
11196
|
order: preview,
|
|
11565
|
-
isPending: isPreviewPending,
|
|
11566
11197
|
isError: isPreviewError,
|
|
11567
11198
|
error: previewError
|
|
11568
|
-
} = useOrderPreview(id);
|
|
11199
|
+
} = useOrderPreview(id, void 0);
|
|
11569
11200
|
useInitiateOrderEdit({ preview });
|
|
11570
11201
|
const { onCancel } = useCancelOrderEdit({ preview });
|
|
11571
|
-
if (isError) {
|
|
11572
|
-
throw error;
|
|
11573
|
-
}
|
|
11574
11202
|
if (isPreviewError) {
|
|
11575
11203
|
throw previewError;
|
|
11576
11204
|
}
|
|
11577
|
-
const
|
|
11578
|
-
|
|
11579
|
-
|
|
11580
|
-
/* @__PURE__ */ jsx(
|
|
11581
|
-
|
|
11582
|
-
/* @__PURE__ */ jsx(RouteFocusModal.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Shipping" }) }),
|
|
11583
|
-
/* @__PURE__ */ jsx(RouteFocusModal.Description, { asChild: true, children: /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "This draft order currently has no items. Add items to the order before adding shipping." }) })
|
|
11584
|
-
] }) }) }),
|
|
11585
|
-
/* @__PURE__ */ jsx(RouteFocusModal.Footer, { children: /* @__PURE__ */ jsx(RouteFocusModal.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", type: "button", children: "Cancel" }) }) })
|
|
11586
|
-
] }) : isReady ? /* @__PURE__ */ jsx(ShippingForm, { preview, order }) : /* @__PURE__ */ jsxs("div", { children: [
|
|
11587
|
-
/* @__PURE__ */ jsx(RouteFocusModal.Title, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Edit Shipping" }) }),
|
|
11588
|
-
/* @__PURE__ */ jsx(RouteFocusModal.Description, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Loading data for the draft order, please wait..." }) })
|
|
11589
|
-
] }) });
|
|
11205
|
+
const isReady = !!preview;
|
|
11206
|
+
return /* @__PURE__ */ jsxs(RouteDrawer, { onClose: onCancel, children: [
|
|
11207
|
+
/* @__PURE__ */ jsx(RouteDrawer.Header, { children: /* @__PURE__ */ jsx(RouteDrawer.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Edit Promotions" }) }) }),
|
|
11208
|
+
isReady && /* @__PURE__ */ jsx(PromotionForm, { preview })
|
|
11209
|
+
] });
|
|
11590
11210
|
};
|
|
11591
|
-
const
|
|
11592
|
-
|
|
11593
|
-
const { setIsOpen } = useStackedModal();
|
|
11211
|
+
const PromotionForm = ({ preview }) => {
|
|
11212
|
+
const { items, shipping_methods } = preview;
|
|
11594
11213
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
11595
|
-
const [
|
|
11596
|
-
const
|
|
11597
|
-
const {
|
|
11214
|
+
const [comboboxValue, setComboboxValue] = useState("");
|
|
11215
|
+
const { handleSuccess } = useRouteModal();
|
|
11216
|
+
const { mutateAsync: addPromotions, isPending: isAddingPromotions } = useDraftOrderAddPromotions(preview.id);
|
|
11217
|
+
const promoIds = getPromotionIds(items, shipping_methods);
|
|
11218
|
+
const { promotions, isPending, isError, error } = usePromotions(
|
|
11598
11219
|
{
|
|
11599
|
-
id:
|
|
11600
|
-
fields: "+service_zone.*,+service_zone.fulfillment_set.*,+service_zone.fulfillment_set.location.*"
|
|
11220
|
+
id: promoIds
|
|
11601
11221
|
},
|
|
11602
11222
|
{
|
|
11603
|
-
enabled:
|
|
11223
|
+
enabled: !!promoIds.length
|
|
11604
11224
|
}
|
|
11605
11225
|
);
|
|
11606
|
-
const
|
|
11607
|
-
|
|
11608
|
-
|
|
11609
|
-
|
|
11610
|
-
|
|
11611
|
-
|
|
11612
|
-
|
|
11613
|
-
|
|
11614
|
-
|
|
11615
|
-
|
|
11616
|
-
|
|
11226
|
+
const comboboxData = useComboboxData({
|
|
11227
|
+
queryKey: ["promotions", "combobox", promoIds],
|
|
11228
|
+
queryFn: async (params) => {
|
|
11229
|
+
return await sdk.admin.promotion.list({
|
|
11230
|
+
...params,
|
|
11231
|
+
id: {
|
|
11232
|
+
$nin: promoIds
|
|
11233
|
+
}
|
|
11234
|
+
});
|
|
11235
|
+
},
|
|
11236
|
+
getOptions: (data) => {
|
|
11237
|
+
return data.promotions.map((promotion) => ({
|
|
11238
|
+
label: promotion.code,
|
|
11239
|
+
value: promotion.code
|
|
11240
|
+
}));
|
|
11241
|
+
}
|
|
11242
|
+
});
|
|
11243
|
+
const add = async (value) => {
|
|
11244
|
+
if (!value) {
|
|
11245
|
+
return;
|
|
11246
|
+
}
|
|
11247
|
+
addPromotions(
|
|
11248
|
+
{
|
|
11249
|
+
promo_codes: [value]
|
|
11250
|
+
},
|
|
11251
|
+
{
|
|
11252
|
+
onError: (e) => {
|
|
11253
|
+
toast.error(e.message);
|
|
11254
|
+
comboboxData.onSearchValueChange("");
|
|
11255
|
+
setComboboxValue("");
|
|
11256
|
+
},
|
|
11257
|
+
onSuccess: () => {
|
|
11258
|
+
comboboxData.onSearchValueChange("");
|
|
11259
|
+
setComboboxValue("");
|
|
11260
|
+
}
|
|
11261
|
+
}
|
|
11262
|
+
);
|
|
11263
|
+
};
|
|
11617
11264
|
const { mutateAsync: confirmOrderEdit } = useDraftOrderConfirmEdit(preview.id);
|
|
11618
|
-
const { mutateAsync: requestOrderEdit } =
|
|
11619
|
-
const { mutateAsync: removeShippingMethod } = useDraftOrderRemoveShippingMethod(preview.id);
|
|
11620
|
-
const { mutateAsync: removeActionShippingMethod } = useDraftOrderRemoveActionShippingMethod(preview.id);
|
|
11265
|
+
const { mutateAsync: requestOrderEdit } = useOrderEditRequest(preview.id);
|
|
11621
11266
|
const onSubmit = async () => {
|
|
11622
11267
|
setIsSubmitting(true);
|
|
11623
11268
|
let requestSucceeded = false;
|
|
11624
11269
|
await requestOrderEdit(void 0, {
|
|
11625
11270
|
onError: (e) => {
|
|
11626
|
-
toast.error(
|
|
11271
|
+
toast.error(e.message);
|
|
11627
11272
|
},
|
|
11628
11273
|
onSuccess: () => {
|
|
11629
11274
|
requestSucceeded = true;
|
|
@@ -11635,7 +11280,7 @@ const ShippingForm = ({ preview, order }) => {
|
|
|
11635
11280
|
}
|
|
11636
11281
|
await confirmOrderEdit(void 0, {
|
|
11637
11282
|
onError: (e) => {
|
|
11638
|
-
toast.error(
|
|
11283
|
+
toast.error(e.message);
|
|
11639
11284
|
},
|
|
11640
11285
|
onSuccess: () => {
|
|
11641
11286
|
handleSuccess();
|
|
@@ -11645,721 +11290,269 @@ const ShippingForm = ({ preview, order }) => {
|
|
|
11645
11290
|
}
|
|
11646
11291
|
});
|
|
11647
11292
|
};
|
|
11648
|
-
|
|
11649
|
-
|
|
11650
|
-
|
|
11651
|
-
|
|
11652
|
-
|
|
11653
|
-
|
|
11654
|
-
|
|
11655
|
-
|
|
11656
|
-
|
|
11657
|
-
[data, isSubmitting, onSubmit]
|
|
11658
|
-
);
|
|
11659
|
-
useEffect(() => {
|
|
11660
|
-
document.addEventListener("keydown", onKeydown);
|
|
11661
|
-
return () => {
|
|
11662
|
-
document.removeEventListener("keydown", onKeydown);
|
|
11663
|
-
};
|
|
11664
|
-
}, [onKeydown]);
|
|
11665
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col overflow-hidden", children: [
|
|
11666
|
-
/* @__PURE__ */ jsx(RouteFocusModal.Header, {}),
|
|
11667
|
-
/* @__PURE__ */ jsxs(RouteFocusModal.Body, { className: "flex flex-1 flex-col overflow-hidden", children: [
|
|
11668
|
-
/* @__PURE__ */ jsx("div", { className: "flex flex-1 flex-col items-center overflow-y-auto", children: /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-[720px] flex-col gap-y-6 py-16 px-6", children: [
|
|
11669
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
11670
|
-
/* @__PURE__ */ jsx(RouteFocusModal.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Shipping" }) }),
|
|
11671
|
-
/* @__PURE__ */ jsx(RouteFocusModal.Description, { asChild: true, children: /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "Choose which shipping method(s) to use for the items in the order." }) })
|
|
11293
|
+
if (isError) {
|
|
11294
|
+
throw error;
|
|
11295
|
+
}
|
|
11296
|
+
return /* @__PURE__ */ jsxs(KeyboundForm, { className: "flex flex-1 flex-col", onSubmit, children: [
|
|
11297
|
+
/* @__PURE__ */ jsx(RouteDrawer.Body, { children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
11298
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
11299
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
11300
|
+
/* @__PURE__ */ jsx(Label$1, { size: "small", weight: "plus", htmlFor: "promotion-combobox", children: "Apply promotions" }),
|
|
11301
|
+
/* @__PURE__ */ jsx(Hint$1, { id: "promotion-combobox-hint", children: "Manage promotions that should be applied to the order." })
|
|
11672
11302
|
] }),
|
|
11673
|
-
/* @__PURE__ */ jsx(
|
|
11674
|
-
|
|
11675
|
-
|
|
11676
|
-
|
|
11677
|
-
|
|
11678
|
-
|
|
11679
|
-
|
|
11680
|
-
|
|
11681
|
-
|
|
11682
|
-
|
|
11683
|
-
|
|
11684
|
-
|
|
11685
|
-
|
|
11686
|
-
|
|
11687
|
-
|
|
11688
|
-
|
|
11689
|
-
|
|
11690
|
-
|
|
11691
|
-
|
|
11692
|
-
}
|
|
11693
|
-
)
|
|
11694
|
-
] }),
|
|
11695
|
-
/* @__PURE__ */ jsx("div", { className: "px-[5px] pb-[5px]", children: uniqueShippingProfiles.map((profile) => {
|
|
11696
|
-
var _a2, _b, _c, _d, _e, _f, _g;
|
|
11697
|
-
const items = getItemsWithShippingProfile(
|
|
11698
|
-
profile.id,
|
|
11699
|
-
order.items
|
|
11700
|
-
);
|
|
11701
|
-
const hasItems = items.length > 0;
|
|
11702
|
-
const shippingOption = shipping_options == null ? void 0 : shipping_options.find(
|
|
11703
|
-
(option) => option.shipping_profile_id === profile.id
|
|
11704
|
-
);
|
|
11705
|
-
const shippingMethod = preview.shipping_methods.find(
|
|
11706
|
-
(method) => method.shipping_option_id === (shippingOption == null ? void 0 : shippingOption.id)
|
|
11707
|
-
);
|
|
11708
|
-
const addShippingMethodAction = (_a2 = shippingMethod == null ? void 0 : shippingMethod.actions) == null ? void 0 : _a2.find(
|
|
11709
|
-
(action) => action.action === "SHIPPING_ADD"
|
|
11710
|
-
);
|
|
11711
|
-
return /* @__PURE__ */ jsxs(
|
|
11712
|
-
Accordion.Item,
|
|
11713
|
-
{
|
|
11714
|
-
value: profile.id,
|
|
11715
|
-
className: "bg-ui-bg-base shadow-elevation-card-rest rounded-lg",
|
|
11716
|
-
children: [
|
|
11717
|
-
/* @__PURE__ */ jsxs("div", { className: "px-3 py-2 flex items-center justify-between gap-3", children: [
|
|
11718
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-3 w-full overflow-hidden", children: [
|
|
11719
|
-
/* @__PURE__ */ jsx(Accordion.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
11720
|
-
IconButton,
|
|
11721
|
-
{
|
|
11722
|
-
size: "2xsmall",
|
|
11723
|
-
variant: "transparent",
|
|
11724
|
-
className: "group/trigger",
|
|
11725
|
-
disabled: !hasItems,
|
|
11726
|
-
children: /* @__PURE__ */ jsx(TriangleRightMini, { className: "group-data-[state=open]/trigger:rotate-90 transition-transform" })
|
|
11727
|
-
}
|
|
11728
|
-
) }),
|
|
11729
|
-
!shippingOption ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-3", children: [
|
|
11730
|
-
/* @__PURE__ */ jsx("div", { className: "size-7 rounded-md shadow-borders-base flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "size-6 rounded bg-ui-bg-component-hover flex items-center justify-center", children: /* @__PURE__ */ jsx(Shopping, { className: "text-ui-fg-subtle" }) }) }),
|
|
11731
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col flex-1", children: [
|
|
11732
|
-
/* @__PURE__ */ jsx(
|
|
11733
|
-
Text,
|
|
11734
|
-
{
|
|
11735
|
-
size: "small",
|
|
11736
|
-
weight: "plus",
|
|
11737
|
-
leading: "compact",
|
|
11738
|
-
children: profile.name
|
|
11739
|
-
}
|
|
11740
|
-
),
|
|
11741
|
-
/* @__PURE__ */ jsxs(
|
|
11742
|
-
Text,
|
|
11743
|
-
{
|
|
11744
|
-
size: "small",
|
|
11745
|
-
leading: "compact",
|
|
11746
|
-
className: "text-ui-fg-subtle",
|
|
11747
|
-
children: [
|
|
11748
|
-
items.length,
|
|
11749
|
-
" ",
|
|
11750
|
-
pluralize(items.length, "items", "item")
|
|
11751
|
-
]
|
|
11752
|
-
}
|
|
11753
|
-
)
|
|
11754
|
-
] })
|
|
11755
|
-
] }) : /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[5px] max-sm:flex-col max-sm:items-start flex-1 w-full overflow-hidden", children: [
|
|
11756
|
-
/* @__PURE__ */ jsx(
|
|
11757
|
-
Tooltip,
|
|
11758
|
-
{
|
|
11759
|
-
content: /* @__PURE__ */ jsx("ul", { children: items.map((item) => {
|
|
11760
|
-
var _a3, _b2, _c2;
|
|
11761
|
-
return /* @__PURE__ */ jsx(
|
|
11762
|
-
"li",
|
|
11763
|
-
{
|
|
11764
|
-
children: `${item.quantity}x ${(_b2 = (_a3 = item.variant) == null ? void 0 : _a3.product) == null ? void 0 : _b2.title} (${(_c2 = item.variant) == null ? void 0 : _c2.title})`
|
|
11765
|
-
},
|
|
11766
|
-
item.id
|
|
11767
|
-
);
|
|
11768
|
-
}) }),
|
|
11769
|
-
children: /* @__PURE__ */ jsxs(
|
|
11770
|
-
Badge,
|
|
11771
|
-
{
|
|
11772
|
-
className: "flex items-center gap-x-[3px] overflow-hidden cursor-default",
|
|
11773
|
-
size: "xsmall",
|
|
11774
|
-
children: [
|
|
11775
|
-
/* @__PURE__ */ jsx(Shopping, { className: "shrink-0" }),
|
|
11776
|
-
/* @__PURE__ */ jsxs("span", { className: "truncate", children: [
|
|
11777
|
-
items.reduce(
|
|
11778
|
-
(acc, item) => acc + item.quantity,
|
|
11779
|
-
0
|
|
11780
|
-
),
|
|
11781
|
-
"x",
|
|
11782
|
-
" ",
|
|
11783
|
-
pluralize(items.length, "items", "item")
|
|
11784
|
-
] })
|
|
11785
|
-
]
|
|
11786
|
-
}
|
|
11787
|
-
)
|
|
11788
|
-
}
|
|
11789
|
-
),
|
|
11790
|
-
/* @__PURE__ */ jsx(
|
|
11791
|
-
Tooltip,
|
|
11792
|
-
{
|
|
11793
|
-
content: (_d = (_c = (_b = shippingOption.service_zone) == null ? void 0 : _b.fulfillment_set) == null ? void 0 : _c.location) == null ? void 0 : _d.name,
|
|
11794
|
-
children: /* @__PURE__ */ jsxs(
|
|
11795
|
-
Badge,
|
|
11796
|
-
{
|
|
11797
|
-
className: "flex items-center gap-x-[3px] overflow-hidden cursor-default",
|
|
11798
|
-
size: "xsmall",
|
|
11799
|
-
children: [
|
|
11800
|
-
/* @__PURE__ */ jsx(Buildings, { className: "shrink-0" }),
|
|
11801
|
-
/* @__PURE__ */ jsx("span", { className: "truncate", children: (_g = (_f = (_e = shippingOption.service_zone) == null ? void 0 : _e.fulfillment_set) == null ? void 0 : _f.location) == null ? void 0 : _g.name })
|
|
11802
|
-
]
|
|
11803
|
-
}
|
|
11804
|
-
)
|
|
11805
|
-
}
|
|
11806
|
-
),
|
|
11807
|
-
/* @__PURE__ */ jsx(Tooltip, { content: shippingOption.name, children: /* @__PURE__ */ jsxs(
|
|
11808
|
-
Badge,
|
|
11809
|
-
{
|
|
11810
|
-
className: "flex items-center gap-x-[3px] overflow-hidden cursor-default",
|
|
11811
|
-
size: "xsmall",
|
|
11812
|
-
children: [
|
|
11813
|
-
/* @__PURE__ */ jsx(TruckFast, { className: "shrink-0" }),
|
|
11814
|
-
/* @__PURE__ */ jsx("span", { className: "truncate", children: shippingOption.name })
|
|
11815
|
-
]
|
|
11816
|
-
}
|
|
11817
|
-
) })
|
|
11818
|
-
] })
|
|
11819
|
-
] }),
|
|
11820
|
-
shippingOption ? /* @__PURE__ */ jsx(
|
|
11821
|
-
ActionMenu,
|
|
11822
|
-
{
|
|
11823
|
-
groups: [
|
|
11824
|
-
{
|
|
11825
|
-
actions: [
|
|
11826
|
-
hasItems ? {
|
|
11827
|
-
label: "Edit shipping option",
|
|
11828
|
-
icon: /* @__PURE__ */ jsx(Channels, {}),
|
|
11829
|
-
onClick: () => {
|
|
11830
|
-
setIsOpen(
|
|
11831
|
-
STACKED_FOCUS_MODAL_ID,
|
|
11832
|
-
true
|
|
11833
|
-
);
|
|
11834
|
-
setData({
|
|
11835
|
-
shippingProfileId: profile.id,
|
|
11836
|
-
shippingOption,
|
|
11837
|
-
shippingMethod
|
|
11838
|
-
});
|
|
11839
|
-
}
|
|
11840
|
-
} : void 0,
|
|
11841
|
-
{
|
|
11842
|
-
label: "Remove shipping option",
|
|
11843
|
-
icon: /* @__PURE__ */ jsx(Trash, {}),
|
|
11844
|
-
onClick: () => {
|
|
11845
|
-
if (shippingMethod) {
|
|
11846
|
-
if (addShippingMethodAction) {
|
|
11847
|
-
removeActionShippingMethod(
|
|
11848
|
-
addShippingMethodAction.id
|
|
11849
|
-
);
|
|
11850
|
-
} else {
|
|
11851
|
-
removeShippingMethod(
|
|
11852
|
-
shippingMethod.id
|
|
11853
|
-
);
|
|
11854
|
-
}
|
|
11855
|
-
}
|
|
11856
|
-
}
|
|
11857
|
-
}
|
|
11858
|
-
].filter(Boolean)
|
|
11859
|
-
}
|
|
11860
|
-
]
|
|
11861
|
-
}
|
|
11862
|
-
) : /* @__PURE__ */ jsx(
|
|
11863
|
-
StackedModalTrigger,
|
|
11864
|
-
{
|
|
11865
|
-
shippingProfileId: profile.id,
|
|
11866
|
-
shippingOption,
|
|
11867
|
-
shippingMethod,
|
|
11868
|
-
setData,
|
|
11869
|
-
children: "Add shipping option"
|
|
11870
|
-
}
|
|
11871
|
-
)
|
|
11872
|
-
] }),
|
|
11873
|
-
/* @__PURE__ */ jsxs(Accordion.Content, { children: [
|
|
11874
|
-
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
11875
|
-
items.map((item, idx) => {
|
|
11876
|
-
var _a3, _b2, _c2, _d2, _e2;
|
|
11877
|
-
return /* @__PURE__ */ jsxs("div", { children: [
|
|
11878
|
-
/* @__PURE__ */ jsxs(
|
|
11879
|
-
"div",
|
|
11880
|
-
{
|
|
11881
|
-
className: "px-3 flex items-center gap-x-3",
|
|
11882
|
-
children: [
|
|
11883
|
-
/* @__PURE__ */ jsx("div", { className: "w-5 h-[56px] flex flex-col justify-center items-center", children: /* @__PURE__ */ jsx(
|
|
11884
|
-
Divider,
|
|
11885
|
-
{
|
|
11886
|
-
variant: "dashed",
|
|
11887
|
-
orientation: "vertical"
|
|
11888
|
-
}
|
|
11889
|
-
) }),
|
|
11890
|
-
/* @__PURE__ */ jsxs("div", { className: "py-2 flex items-center gap-x-3", children: [
|
|
11891
|
-
/* @__PURE__ */ jsx("div", { className: "size-7 flex items-center justify-center tabular-nums", children: /* @__PURE__ */ jsxs(
|
|
11892
|
-
Text,
|
|
11893
|
-
{
|
|
11894
|
-
size: "small",
|
|
11895
|
-
leading: "compact",
|
|
11896
|
-
className: "text-ui-fg-subtle",
|
|
11897
|
-
children: [
|
|
11898
|
-
item.quantity,
|
|
11899
|
-
"x"
|
|
11900
|
-
]
|
|
11901
|
-
}
|
|
11902
|
-
) }),
|
|
11903
|
-
/* @__PURE__ */ jsx(Thumbnail, { thumbnail: item.thumbnail }),
|
|
11904
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
11905
|
-
/* @__PURE__ */ jsxs(
|
|
11906
|
-
Text,
|
|
11907
|
-
{
|
|
11908
|
-
size: "small",
|
|
11909
|
-
leading: "compact",
|
|
11910
|
-
weight: "plus",
|
|
11911
|
-
children: [
|
|
11912
|
-
(_b2 = (_a3 = item.variant) == null ? void 0 : _a3.product) == null ? void 0 : _b2.title,
|
|
11913
|
-
" (",
|
|
11914
|
-
(_c2 = item.variant) == null ? void 0 : _c2.title,
|
|
11915
|
-
")"
|
|
11916
|
-
]
|
|
11917
|
-
}
|
|
11918
|
-
),
|
|
11919
|
-
/* @__PURE__ */ jsx(
|
|
11920
|
-
Text,
|
|
11921
|
-
{
|
|
11922
|
-
size: "small",
|
|
11923
|
-
leading: "compact",
|
|
11924
|
-
className: "text-ui-fg-subtle",
|
|
11925
|
-
children: (_e2 = (_d2 = item.variant) == null ? void 0 : _d2.options) == null ? void 0 : _e2.map((option) => option.value).join(" · ")
|
|
11926
|
-
}
|
|
11927
|
-
)
|
|
11928
|
-
] })
|
|
11929
|
-
] })
|
|
11930
|
-
]
|
|
11931
|
-
},
|
|
11932
|
-
item.id
|
|
11933
|
-
),
|
|
11934
|
-
idx !== items.length - 1 && /* @__PURE__ */ jsx(Divider, { variant: "dashed" })
|
|
11935
|
-
] }, item.id);
|
|
11936
|
-
})
|
|
11937
|
-
] })
|
|
11938
|
-
]
|
|
11939
|
-
},
|
|
11940
|
-
profile.id
|
|
11941
|
-
);
|
|
11942
|
-
}) })
|
|
11943
|
-
] }) })
|
|
11944
|
-
] }) }),
|
|
11945
|
-
/* @__PURE__ */ jsx(
|
|
11946
|
-
StackedFocusModal,
|
|
11303
|
+
/* @__PURE__ */ jsx(
|
|
11304
|
+
Combobox,
|
|
11305
|
+
{
|
|
11306
|
+
id: "promotion-combobox",
|
|
11307
|
+
"aria-describedby": "promotion-combobox-hint",
|
|
11308
|
+
isFetchingNextPage: comboboxData.isFetchingNextPage,
|
|
11309
|
+
fetchNextPage: comboboxData.fetchNextPage,
|
|
11310
|
+
options: comboboxData.options,
|
|
11311
|
+
onSearchValueChange: comboboxData.onSearchValueChange,
|
|
11312
|
+
searchValue: comboboxData.searchValue,
|
|
11313
|
+
disabled: comboboxData.disabled || isAddingPromotions,
|
|
11314
|
+
onChange: add,
|
|
11315
|
+
value: comboboxValue
|
|
11316
|
+
}
|
|
11317
|
+
)
|
|
11318
|
+
] }),
|
|
11319
|
+
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
11320
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", children: promotions == null ? void 0 : promotions.map((promotion) => /* @__PURE__ */ jsx(
|
|
11321
|
+
PromotionItem,
|
|
11947
11322
|
{
|
|
11948
|
-
|
|
11949
|
-
|
|
11950
|
-
|
|
11951
|
-
|
|
11952
|
-
|
|
11953
|
-
|
|
11954
|
-
|
|
11955
|
-
|
|
11956
|
-
|
|
11957
|
-
)
|
|
11958
|
-
] }),
|
|
11959
|
-
/* @__PURE__ */ jsx(RouteFocusModal.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-x-2", children: [
|
|
11960
|
-
/* @__PURE__ */ jsx(RouteFocusModal.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", type: "button", children: "Cancel" }) }),
|
|
11323
|
+
promotion,
|
|
11324
|
+
orderId: preview.id,
|
|
11325
|
+
isLoading: isPending
|
|
11326
|
+
},
|
|
11327
|
+
promotion.id
|
|
11328
|
+
)) })
|
|
11329
|
+
] }) }),
|
|
11330
|
+
/* @__PURE__ */ jsx(RouteDrawer.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
11331
|
+
/* @__PURE__ */ jsx(RouteDrawer.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", children: "Cancel" }) }),
|
|
11961
11332
|
/* @__PURE__ */ jsx(
|
|
11962
11333
|
Button,
|
|
11963
11334
|
{
|
|
11964
11335
|
size: "small",
|
|
11965
|
-
type: "
|
|
11966
|
-
isLoading: isSubmitting,
|
|
11967
|
-
onClick: onSubmit,
|
|
11336
|
+
type: "submit",
|
|
11337
|
+
isLoading: isSubmitting || isAddingPromotions,
|
|
11968
11338
|
children: "Save"
|
|
11969
11339
|
}
|
|
11970
11340
|
)
|
|
11971
11341
|
] }) })
|
|
11972
11342
|
] });
|
|
11973
11343
|
};
|
|
11974
|
-
const
|
|
11975
|
-
|
|
11976
|
-
|
|
11977
|
-
|
|
11978
|
-
setData,
|
|
11979
|
-
children
|
|
11344
|
+
const PromotionItem = ({
|
|
11345
|
+
promotion,
|
|
11346
|
+
orderId,
|
|
11347
|
+
isLoading
|
|
11980
11348
|
}) => {
|
|
11981
|
-
|
|
11982
|
-
const
|
|
11983
|
-
const
|
|
11984
|
-
|
|
11985
|
-
|
|
11986
|
-
|
|
11987
|
-
|
|
11988
|
-
|
|
11989
|
-
|
|
11990
|
-
|
|
11991
|
-
|
|
11992
|
-
|
|
11993
|
-
|
|
11994
|
-
}
|
|
11349
|
+
var _a;
|
|
11350
|
+
const { mutateAsync: removePromotions, isPending } = useDraftOrderRemovePromotions(orderId);
|
|
11351
|
+
const onRemove = async () => {
|
|
11352
|
+
removePromotions(
|
|
11353
|
+
{
|
|
11354
|
+
promo_codes: [promotion.code]
|
|
11355
|
+
},
|
|
11356
|
+
{
|
|
11357
|
+
onError: (e) => {
|
|
11358
|
+
toast.error(e.message);
|
|
11359
|
+
}
|
|
11360
|
+
}
|
|
11361
|
+
);
|
|
11995
11362
|
};
|
|
11996
|
-
|
|
11997
|
-
|
|
11363
|
+
const displayValue = getDisplayValue(promotion);
|
|
11364
|
+
return /* @__PURE__ */ jsxs(
|
|
11365
|
+
"div",
|
|
11998
11366
|
{
|
|
11999
|
-
|
|
12000
|
-
|
|
12001
|
-
|
|
12002
|
-
|
|
12003
|
-
|
|
12004
|
-
|
|
11367
|
+
className: clx(
|
|
11368
|
+
"bg-ui-bg-component shadow-elevation-card-rest flex items-center justify-between rounded-lg px-3 py-2",
|
|
11369
|
+
{
|
|
11370
|
+
"animate-pulse": isLoading
|
|
11371
|
+
}
|
|
11372
|
+
),
|
|
11373
|
+
children: [
|
|
11374
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
11375
|
+
/* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", leading: "compact", children: promotion.code }),
|
|
11376
|
+
/* @__PURE__ */ jsxs("div", { className: "text-ui-fg-subtle flex items-center gap-1.5", children: [
|
|
11377
|
+
displayValue && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
11378
|
+
/* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", children: displayValue }),
|
|
11379
|
+
/* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", children: "·" })
|
|
11380
|
+
] }),
|
|
11381
|
+
/* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", className: "capitalize", children: (_a = promotion.application_method) == null ? void 0 : _a.allocation })
|
|
11382
|
+
] })
|
|
11383
|
+
] }),
|
|
11384
|
+
/* @__PURE__ */ jsx(
|
|
11385
|
+
IconButton,
|
|
11386
|
+
{
|
|
11387
|
+
size: "small",
|
|
11388
|
+
type: "button",
|
|
11389
|
+
variant: "transparent",
|
|
11390
|
+
onClick: onRemove,
|
|
11391
|
+
isLoading: isPending || isLoading,
|
|
11392
|
+
children: /* @__PURE__ */ jsx(XMark, {})
|
|
11393
|
+
}
|
|
11394
|
+
)
|
|
11395
|
+
]
|
|
11396
|
+
},
|
|
11397
|
+
promotion.id
|
|
12005
11398
|
);
|
|
12006
11399
|
};
|
|
12007
|
-
|
|
12008
|
-
|
|
12009
|
-
|
|
12010
|
-
|
|
12011
|
-
|
|
12012
|
-
|
|
12013
|
-
|
|
12014
|
-
|
|
12015
|
-
|
|
12016
|
-
|
|
12017
|
-
location_id: (_d = (_c = (_b = (_a = data.shippingOption) == null ? void 0 : _a.service_zone) == null ? void 0 : _b.fulfillment_set) == null ? void 0 : _c.location) == null ? void 0 : _d.id,
|
|
12018
|
-
shipping_option_id: (_e = data.shippingOption) == null ? void 0 : _e.id,
|
|
12019
|
-
custom_amount: (_f = data.shippingMethod) == null ? void 0 : _f.amount
|
|
11400
|
+
function getDisplayValue(promotion) {
|
|
11401
|
+
var _a, _b, _c, _d;
|
|
11402
|
+
const value = (_a = promotion.application_method) == null ? void 0 : _a.value;
|
|
11403
|
+
if (!value) {
|
|
11404
|
+
return null;
|
|
11405
|
+
}
|
|
11406
|
+
if (((_b = promotion.application_method) == null ? void 0 : _b.type) === "fixed") {
|
|
11407
|
+
const currency = (_c = promotion.application_method) == null ? void 0 : _c.currency_code;
|
|
11408
|
+
if (!currency) {
|
|
11409
|
+
return null;
|
|
12020
11410
|
}
|
|
12021
|
-
|
|
12022
|
-
|
|
12023
|
-
|
|
12024
|
-
|
|
12025
|
-
|
|
12026
|
-
|
|
12027
|
-
|
|
12028
|
-
|
|
12029
|
-
|
|
12030
|
-
|
|
11411
|
+
return getLocaleAmount(value, currency);
|
|
11412
|
+
} else if (((_d = promotion.application_method) == null ? void 0 : _d.type) === "percentage") {
|
|
11413
|
+
return formatPercentage(value);
|
|
11414
|
+
}
|
|
11415
|
+
return null;
|
|
11416
|
+
}
|
|
11417
|
+
const formatter = new Intl.NumberFormat([], {
|
|
11418
|
+
style: "percent",
|
|
11419
|
+
minimumFractionDigits: 2
|
|
11420
|
+
});
|
|
11421
|
+
const formatPercentage = (value, isPercentageValue = false) => {
|
|
11422
|
+
let val = value || 0;
|
|
11423
|
+
if (!isPercentageValue) {
|
|
11424
|
+
val = val / 100;
|
|
11425
|
+
}
|
|
11426
|
+
return formatter.format(val);
|
|
11427
|
+
};
|
|
11428
|
+
function getPromotionIds(items, shippingMethods) {
|
|
11429
|
+
const promotionIds = /* @__PURE__ */ new Set();
|
|
11430
|
+
for (const item of items) {
|
|
11431
|
+
if (item.adjustments) {
|
|
11432
|
+
for (const adjustment of item.adjustments) {
|
|
11433
|
+
if (adjustment.promotion_id) {
|
|
11434
|
+
promotionIds.add(adjustment.promotion_id);
|
|
11435
|
+
}
|
|
11436
|
+
}
|
|
12031
11437
|
}
|
|
12032
|
-
|
|
12033
|
-
|
|
12034
|
-
|
|
12035
|
-
|
|
12036
|
-
|
|
12037
|
-
|
|
12038
|
-
},
|
|
12039
|
-
{
|
|
12040
|
-
onError: (e) => {
|
|
12041
|
-
toast.error(e.message);
|
|
12042
|
-
},
|
|
12043
|
-
onSuccess: () => {
|
|
12044
|
-
setIsOpen(STACKED_FOCUS_MODAL_ID, false);
|
|
12045
|
-
}
|
|
11438
|
+
}
|
|
11439
|
+
for (const shippingMethod of shippingMethods) {
|
|
11440
|
+
if (shippingMethod.adjustments) {
|
|
11441
|
+
for (const adjustment of shippingMethod.adjustments) {
|
|
11442
|
+
if (adjustment.promotion_id) {
|
|
11443
|
+
promotionIds.add(adjustment.promotion_id);
|
|
12046
11444
|
}
|
|
12047
|
-
|
|
12048
|
-
|
|
11445
|
+
}
|
|
11446
|
+
}
|
|
11447
|
+
}
|
|
11448
|
+
return Array.from(promotionIds);
|
|
11449
|
+
}
|
|
11450
|
+
const SalesChannel = () => {
|
|
11451
|
+
const { id } = useParams();
|
|
11452
|
+
const { draft_order, isPending, isError, error } = useDraftOrder(
|
|
11453
|
+
id,
|
|
11454
|
+
{
|
|
11455
|
+
fields: "+sales_channel_id"
|
|
11456
|
+
},
|
|
11457
|
+
{
|
|
11458
|
+
enabled: !!id
|
|
12049
11459
|
}
|
|
12050
|
-
|
|
11460
|
+
);
|
|
11461
|
+
if (isError) {
|
|
11462
|
+
throw error;
|
|
11463
|
+
}
|
|
11464
|
+
const ISrEADY = !!draft_order && !isPending;
|
|
11465
|
+
return /* @__PURE__ */ jsxs(RouteDrawer, { children: [
|
|
11466
|
+
/* @__PURE__ */ jsxs(RouteDrawer.Header, { children: [
|
|
11467
|
+
/* @__PURE__ */ jsx(RouteDrawer.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Edit Sales Channel" }) }),
|
|
11468
|
+
/* @__PURE__ */ jsx(RouteDrawer.Description, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Update which sales channel the draft order is associated with" }) })
|
|
11469
|
+
] }),
|
|
11470
|
+
ISrEADY && /* @__PURE__ */ jsx(SalesChannelForm, { order: draft_order })
|
|
11471
|
+
] });
|
|
11472
|
+
};
|
|
11473
|
+
const SalesChannelForm = ({ order }) => {
|
|
11474
|
+
const form = useForm({
|
|
11475
|
+
defaultValues: {
|
|
11476
|
+
sales_channel_id: order.sales_channel_id || ""
|
|
11477
|
+
},
|
|
11478
|
+
resolver: zodResolver(schema$2)
|
|
11479
|
+
});
|
|
11480
|
+
const { mutateAsync, isPending } = useUpdateDraftOrder(order.id);
|
|
11481
|
+
const { handleSuccess } = useRouteModal();
|
|
11482
|
+
const onSubmit = form.handleSubmit(async (data) => {
|
|
11483
|
+
await mutateAsync(
|
|
12051
11484
|
{
|
|
12052
|
-
|
|
12053
|
-
custom_amount: values.custom_amount ? convertNumber(values.custom_amount) : void 0
|
|
11485
|
+
sales_channel_id: data.sales_channel_id
|
|
12054
11486
|
},
|
|
12055
11487
|
{
|
|
12056
|
-
onError: (e) => {
|
|
12057
|
-
toast.error(e.message);
|
|
12058
|
-
},
|
|
12059
11488
|
onSuccess: () => {
|
|
12060
|
-
|
|
11489
|
+
toast.success("Sales channel updated");
|
|
11490
|
+
handleSuccess();
|
|
11491
|
+
},
|
|
11492
|
+
onError: (error) => {
|
|
11493
|
+
toast.error(error.message);
|
|
12061
11494
|
}
|
|
12062
11495
|
}
|
|
12063
11496
|
);
|
|
12064
11497
|
});
|
|
12065
|
-
return /* @__PURE__ */ jsx(
|
|
11498
|
+
return /* @__PURE__ */ jsx(RouteDrawer.Form, { form, children: /* @__PURE__ */ jsxs(
|
|
12066
11499
|
KeyboundForm,
|
|
12067
11500
|
{
|
|
12068
|
-
className: "flex
|
|
11501
|
+
className: "flex flex-1 flex-col overflow-hidden",
|
|
12069
11502
|
onSubmit,
|
|
12070
11503
|
children: [
|
|
12071
|
-
/* @__PURE__ */ jsx(
|
|
12072
|
-
/* @__PURE__ */ jsx(
|
|
12073
|
-
/* @__PURE__ */
|
|
12074
|
-
|
|
12075
|
-
/* @__PURE__ */ jsx(RouteFocusModal.Description, { asChild: true, children: /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "Add a shipping method for the selected shipping profile. You can see the items that will be shipped using this method in the preview below." }) })
|
|
12076
|
-
] }),
|
|
12077
|
-
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
12078
|
-
/* @__PURE__ */ jsx(
|
|
12079
|
-
LocationField,
|
|
12080
|
-
{
|
|
12081
|
-
control: form.control,
|
|
12082
|
-
setValue: form.setValue
|
|
12083
|
-
}
|
|
12084
|
-
),
|
|
12085
|
-
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
12086
|
-
/* @__PURE__ */ jsx(
|
|
12087
|
-
ShippingOptionField,
|
|
12088
|
-
{
|
|
12089
|
-
shippingProfileId: data.shippingProfileId,
|
|
12090
|
-
preview,
|
|
12091
|
-
control: form.control
|
|
12092
|
-
}
|
|
12093
|
-
),
|
|
12094
|
-
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
12095
|
-
/* @__PURE__ */ jsx(
|
|
12096
|
-
CustomAmountField,
|
|
12097
|
-
{
|
|
12098
|
-
control: form.control,
|
|
12099
|
-
currencyCode: order.currency_code
|
|
12100
|
-
}
|
|
12101
|
-
),
|
|
12102
|
-
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
12103
|
-
/* @__PURE__ */ jsx(
|
|
12104
|
-
ItemsPreview,
|
|
12105
|
-
{
|
|
12106
|
-
order,
|
|
12107
|
-
shippingProfileId: data.shippingProfileId
|
|
12108
|
-
}
|
|
12109
|
-
)
|
|
12110
|
-
] }) }) }),
|
|
12111
|
-
/* @__PURE__ */ jsx(StackedFocusModal.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-x-2", children: [
|
|
12112
|
-
/* @__PURE__ */ jsx(StackedFocusModal.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", type: "button", children: "Cancel" }) }),
|
|
12113
|
-
/* @__PURE__ */ jsx(
|
|
12114
|
-
Button,
|
|
12115
|
-
{
|
|
12116
|
-
size: "small",
|
|
12117
|
-
type: "submit",
|
|
12118
|
-
isLoading: isPending || isUpdatingShippingMethod,
|
|
12119
|
-
children: data.shippingMethod ? "Update" : "Add"
|
|
12120
|
-
}
|
|
12121
|
-
)
|
|
11504
|
+
/* @__PURE__ */ jsx(RouteDrawer.Body, { className: "flex flex-col gap-y-6 overflow-y-auto", children: /* @__PURE__ */ jsx(SalesChannelField, { control: form.control, order }) }),
|
|
11505
|
+
/* @__PURE__ */ jsx(RouteDrawer.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
11506
|
+
/* @__PURE__ */ jsx(RouteDrawer.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", children: "Cancel" }) }),
|
|
11507
|
+
/* @__PURE__ */ jsx(Button, { size: "small", type: "submit", isLoading: isPending, children: "Save" })
|
|
12122
11508
|
] }) })
|
|
12123
11509
|
]
|
|
12124
11510
|
}
|
|
12125
|
-
) })
|
|
12126
|
-
};
|
|
12127
|
-
const shippingMethodSchema = objectType({
|
|
12128
|
-
location_id: stringType(),
|
|
12129
|
-
shipping_option_id: stringType(),
|
|
12130
|
-
custom_amount: unionType([numberType(), stringType()]).optional()
|
|
12131
|
-
});
|
|
12132
|
-
const ItemsPreview = ({ order, shippingProfileId }) => {
|
|
12133
|
-
const matches = order.items.filter(
|
|
12134
|
-
(item) => {
|
|
12135
|
-
var _a, _b, _c;
|
|
12136
|
-
return ((_c = (_b = (_a = item.variant) == null ? void 0 : _a.product) == null ? void 0 : _b.shipping_profile) == null ? void 0 : _c.id) === shippingProfileId;
|
|
12137
|
-
}
|
|
12138
|
-
);
|
|
12139
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-6", children: [
|
|
12140
|
-
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 items-center gap-3", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
12141
|
-
/* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", leading: "compact", children: "Items to ship" }),
|
|
12142
|
-
/* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "Items with the selected shipping profile." })
|
|
12143
|
-
] }) }),
|
|
12144
|
-
/* @__PURE__ */ jsxs("div", { className: "bg-ui-bg-subtle shadow-elevation-card-rest rounded-xl", children: [
|
|
12145
|
-
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-3 px-4 py-2 text-ui-fg-muted", children: [
|
|
12146
|
-
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", children: "Item" }) }),
|
|
12147
|
-
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", children: "Quantity" }) })
|
|
12148
|
-
] }),
|
|
12149
|
-
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-y-1.5 px-[5px] pb-[5px]", children: matches.length > 0 ? matches == null ? void 0 : matches.map((item) => /* @__PURE__ */ jsxs(
|
|
12150
|
-
"div",
|
|
12151
|
-
{
|
|
12152
|
-
className: "grid grid-cols-2 gap-3 px-4 py-2 bg-ui-bg-base shadow-elevation-card-rest rounded-lg items-center",
|
|
12153
|
-
children: [
|
|
12154
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-3", children: [
|
|
12155
|
-
/* @__PURE__ */ jsx(
|
|
12156
|
-
Thumbnail,
|
|
12157
|
-
{
|
|
12158
|
-
thumbnail: item.thumbnail,
|
|
12159
|
-
alt: item.product_title ?? void 0
|
|
12160
|
-
}
|
|
12161
|
-
),
|
|
12162
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
12163
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-1", children: [
|
|
12164
|
-
/* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", leading: "compact", children: item.product_title }),
|
|
12165
|
-
/* @__PURE__ */ jsxs(
|
|
12166
|
-
Text,
|
|
12167
|
-
{
|
|
12168
|
-
size: "small",
|
|
12169
|
-
leading: "compact",
|
|
12170
|
-
className: "text-ui-fg-subtle",
|
|
12171
|
-
children: [
|
|
12172
|
-
"(",
|
|
12173
|
-
item.variant_title,
|
|
12174
|
-
")"
|
|
12175
|
-
]
|
|
12176
|
-
}
|
|
12177
|
-
)
|
|
12178
|
-
] }),
|
|
12179
|
-
/* @__PURE__ */ jsx(
|
|
12180
|
-
Text,
|
|
12181
|
-
{
|
|
12182
|
-
size: "small",
|
|
12183
|
-
leading: "compact",
|
|
12184
|
-
className: "text-ui-fg-subtle",
|
|
12185
|
-
children: item.variant_sku
|
|
12186
|
-
}
|
|
12187
|
-
)
|
|
12188
|
-
] })
|
|
12189
|
-
] }),
|
|
12190
|
-
/* @__PURE__ */ jsxs(
|
|
12191
|
-
Text,
|
|
12192
|
-
{
|
|
12193
|
-
size: "small",
|
|
12194
|
-
leading: "compact",
|
|
12195
|
-
className: "text-ui-fg-subtle",
|
|
12196
|
-
children: [
|
|
12197
|
-
item.quantity,
|
|
12198
|
-
"x"
|
|
12199
|
-
]
|
|
12200
|
-
}
|
|
12201
|
-
)
|
|
12202
|
-
]
|
|
12203
|
-
},
|
|
12204
|
-
item.id
|
|
12205
|
-
)) : /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-x-3 bg-ui-bg-base rounded-lg p-4 shadow-elevation-card-rest flex-col gap-1", children: [
|
|
12206
|
-
/* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", leading: "compact", children: "No items found" }),
|
|
12207
|
-
/* @__PURE__ */ jsxs(Text, { size: "small", className: "text-ui-fg-subtle", children: [
|
|
12208
|
-
'No items found for "',
|
|
12209
|
-
query,
|
|
12210
|
-
'".'
|
|
12211
|
-
] })
|
|
12212
|
-
] }) })
|
|
12213
|
-
] })
|
|
12214
|
-
] });
|
|
12215
|
-
};
|
|
12216
|
-
const LocationField = ({ control, setValue }) => {
|
|
12217
|
-
const locations = useComboboxData({
|
|
12218
|
-
queryKey: ["locations"],
|
|
12219
|
-
queryFn: async (params) => {
|
|
12220
|
-
return await sdk.admin.stockLocation.list(params);
|
|
12221
|
-
},
|
|
12222
|
-
getOptions: (data) => {
|
|
12223
|
-
return data.stock_locations.map((location) => ({
|
|
12224
|
-
label: location.name,
|
|
12225
|
-
value: location.id
|
|
12226
|
-
}));
|
|
12227
|
-
}
|
|
12228
|
-
});
|
|
12229
|
-
return /* @__PURE__ */ jsx(
|
|
12230
|
-
Form$2.Field,
|
|
12231
|
-
{
|
|
12232
|
-
control,
|
|
12233
|
-
name: "location_id",
|
|
12234
|
-
render: ({ field: { onChange, ...field } }) => {
|
|
12235
|
-
return /* @__PURE__ */ jsx(Form$2.Item, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-x-3", children: [
|
|
12236
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
12237
|
-
/* @__PURE__ */ jsx(Form$2.Label, { children: "Location" }),
|
|
12238
|
-
/* @__PURE__ */ jsx(Form$2.Hint, { children: "Choose where you want to ship the items from." })
|
|
12239
|
-
] }),
|
|
12240
|
-
/* @__PURE__ */ jsx(Form$2.Control, { children: /* @__PURE__ */ jsx(
|
|
12241
|
-
Combobox,
|
|
12242
|
-
{
|
|
12243
|
-
options: locations.options,
|
|
12244
|
-
fetchNextPage: locations.fetchNextPage,
|
|
12245
|
-
isFetchingNextPage: locations.isFetchingNextPage,
|
|
12246
|
-
searchValue: locations.searchValue,
|
|
12247
|
-
onSearchValueChange: locations.onSearchValueChange,
|
|
12248
|
-
placeholder: "Select location",
|
|
12249
|
-
onChange: (value) => {
|
|
12250
|
-
setValue("shipping_option_id", "", {
|
|
12251
|
-
shouldDirty: true,
|
|
12252
|
-
shouldTouch: true
|
|
12253
|
-
});
|
|
12254
|
-
onChange(value);
|
|
12255
|
-
},
|
|
12256
|
-
...field
|
|
12257
|
-
}
|
|
12258
|
-
) })
|
|
12259
|
-
] }) });
|
|
12260
|
-
}
|
|
12261
|
-
}
|
|
12262
|
-
);
|
|
11511
|
+
) });
|
|
12263
11512
|
};
|
|
12264
|
-
const
|
|
12265
|
-
|
|
12266
|
-
preview,
|
|
12267
|
-
control
|
|
12268
|
-
}) => {
|
|
12269
|
-
var _a;
|
|
12270
|
-
const locationId = useWatch({ control, name: "location_id" });
|
|
12271
|
-
const shippingOptions = useComboboxData({
|
|
12272
|
-
queryKey: ["shipping_options", locationId, shippingProfileId],
|
|
11513
|
+
const SalesChannelField = ({ control, order }) => {
|
|
11514
|
+
const salesChannels = useComboboxData({
|
|
12273
11515
|
queryFn: async (params) => {
|
|
12274
|
-
return await sdk.admin.
|
|
12275
|
-
...params,
|
|
12276
|
-
stock_location_id: locationId,
|
|
12277
|
-
shipping_profile_id: shippingProfileId
|
|
12278
|
-
});
|
|
11516
|
+
return await sdk.admin.salesChannel.list(params);
|
|
12279
11517
|
},
|
|
11518
|
+
queryKey: ["sales-channels"],
|
|
12280
11519
|
getOptions: (data) => {
|
|
12281
|
-
return data.
|
|
12282
|
-
|
|
12283
|
-
|
|
12284
|
-
|
|
12285
|
-
)) {
|
|
12286
|
-
return void 0;
|
|
12287
|
-
}
|
|
12288
|
-
return {
|
|
12289
|
-
label: option.name,
|
|
12290
|
-
value: option.id
|
|
12291
|
-
};
|
|
12292
|
-
}).filter(Boolean);
|
|
11520
|
+
return data.sales_channels.map((salesChannel) => ({
|
|
11521
|
+
label: salesChannel.name,
|
|
11522
|
+
value: salesChannel.id
|
|
11523
|
+
}));
|
|
12293
11524
|
},
|
|
12294
|
-
|
|
12295
|
-
defaultValue: ((_a = preview.shipping_methods[0]) == null ? void 0 : _a.shipping_option_id) || void 0
|
|
11525
|
+
defaultValue: order.sales_channel_id || void 0
|
|
12296
11526
|
});
|
|
12297
|
-
const tooltipContent = !locationId && !shippingProfileId ? "Choose a location and shipping profile first." : !locationId ? "Choose a location first." : "Choose a shipping profile first.";
|
|
12298
11527
|
return /* @__PURE__ */ jsx(
|
|
12299
11528
|
Form$2.Field,
|
|
12300
11529
|
{
|
|
12301
11530
|
control,
|
|
12302
|
-
name: "
|
|
11531
|
+
name: "sales_channel_id",
|
|
12303
11532
|
render: ({ field }) => {
|
|
12304
|
-
return /* @__PURE__ */
|
|
12305
|
-
/* @__PURE__ */
|
|
12306
|
-
/* @__PURE__ */ jsx(Form$2.Label, { children: "Shipping option" }),
|
|
12307
|
-
/* @__PURE__ */ jsx(Form$2.Hint, { children: "Choose the shipping option to use." })
|
|
12308
|
-
] }),
|
|
12309
|
-
/* @__PURE__ */ jsx(
|
|
12310
|
-
ConditionalTooltip,
|
|
12311
|
-
{
|
|
12312
|
-
content: tooltipContent,
|
|
12313
|
-
showTooltip: !locationId || !shippingProfileId,
|
|
12314
|
-
children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Form$2.Control, { children: /* @__PURE__ */ jsx(
|
|
12315
|
-
Combobox,
|
|
12316
|
-
{
|
|
12317
|
-
options: shippingOptions.options,
|
|
12318
|
-
fetchNextPage: shippingOptions.fetchNextPage,
|
|
12319
|
-
isFetchingNextPage: shippingOptions.isFetchingNextPage,
|
|
12320
|
-
searchValue: shippingOptions.searchValue,
|
|
12321
|
-
onSearchValueChange: shippingOptions.onSearchValueChange,
|
|
12322
|
-
placeholder: "Select shipping option",
|
|
12323
|
-
...field,
|
|
12324
|
-
disabled: !locationId || !shippingProfileId
|
|
12325
|
-
}
|
|
12326
|
-
) }) })
|
|
12327
|
-
}
|
|
12328
|
-
)
|
|
12329
|
-
] }) });
|
|
12330
|
-
}
|
|
12331
|
-
}
|
|
12332
|
-
);
|
|
12333
|
-
};
|
|
12334
|
-
const CustomAmountField = ({
|
|
12335
|
-
control,
|
|
12336
|
-
currencyCode
|
|
12337
|
-
}) => {
|
|
12338
|
-
return /* @__PURE__ */ jsx(
|
|
12339
|
-
Form$2.Field,
|
|
12340
|
-
{
|
|
12341
|
-
control,
|
|
12342
|
-
name: "custom_amount",
|
|
12343
|
-
render: ({ field: { onChange, ...field } }) => {
|
|
12344
|
-
return /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-x-3", children: [
|
|
12345
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
12346
|
-
/* @__PURE__ */ jsx(Form$2.Label, { optional: true, children: "Custom amount" }),
|
|
12347
|
-
/* @__PURE__ */ jsx(Form$2.Hint, { children: "Set a custom amount for the shipping option." })
|
|
12348
|
-
] }),
|
|
11533
|
+
return /* @__PURE__ */ jsxs(Form$2.Item, { children: [
|
|
11534
|
+
/* @__PURE__ */ jsx(Form$2.Label, { children: "Sales Channel" }),
|
|
12349
11535
|
/* @__PURE__ */ jsx(Form$2.Control, { children: /* @__PURE__ */ jsx(
|
|
12350
|
-
|
|
11536
|
+
Combobox,
|
|
12351
11537
|
{
|
|
12352
|
-
|
|
12353
|
-
|
|
12354
|
-
|
|
12355
|
-
|
|
11538
|
+
options: salesChannels.options,
|
|
11539
|
+
fetchNextPage: salesChannels.fetchNextPage,
|
|
11540
|
+
isFetchingNextPage: salesChannels.isFetchingNextPage,
|
|
11541
|
+
searchValue: salesChannels.searchValue,
|
|
11542
|
+
onSearchValueChange: salesChannels.onSearchValueChange,
|
|
11543
|
+
placeholder: "Select sales channel",
|
|
11544
|
+
...field
|
|
12356
11545
|
}
|
|
12357
|
-
) })
|
|
11546
|
+
) }),
|
|
11547
|
+
/* @__PURE__ */ jsx(Form$2.ErrorMessage, {})
|
|
12358
11548
|
] });
|
|
12359
11549
|
}
|
|
12360
11550
|
}
|
|
12361
11551
|
);
|
|
12362
11552
|
};
|
|
11553
|
+
const schema$2 = objectType({
|
|
11554
|
+
sales_channel_id: stringType().min(1)
|
|
11555
|
+
});
|
|
12363
11556
|
const ShippingAddress = () => {
|
|
12364
11557
|
const { id } = useParams();
|
|
12365
11558
|
const { order, isPending, isError, error } = useOrder(id, {
|
|
@@ -12975,70 +12168,877 @@ const Illustration = () => {
|
|
|
12975
12168
|
strokeLinecap: "round",
|
|
12976
12169
|
strokeLinejoin: "round"
|
|
12977
12170
|
}
|
|
12978
|
-
) }),
|
|
12979
|
-
/* @__PURE__ */ jsxs("defs", { children: [
|
|
12980
|
-
/* @__PURE__ */ jsx("clipPath", { id: "clip0_20915_38670", children: /* @__PURE__ */ jsx(
|
|
12981
|
-
"rect",
|
|
12171
|
+
) }),
|
|
12172
|
+
/* @__PURE__ */ jsxs("defs", { children: [
|
|
12173
|
+
/* @__PURE__ */ jsx("clipPath", { id: "clip0_20915_38670", children: /* @__PURE__ */ jsx(
|
|
12174
|
+
"rect",
|
|
12175
|
+
{
|
|
12176
|
+
width: "12",
|
|
12177
|
+
height: "12",
|
|
12178
|
+
fill: "white",
|
|
12179
|
+
transform: "matrix(0.865865 0.500278 -0.871576 0.490261 138.36 74.6508)"
|
|
12180
|
+
}
|
|
12181
|
+
) }),
|
|
12182
|
+
/* @__PURE__ */ jsx("clipPath", { id: "clip1_20915_38670", children: /* @__PURE__ */ jsx(
|
|
12183
|
+
"rect",
|
|
12184
|
+
{
|
|
12185
|
+
width: "12",
|
|
12186
|
+
height: "12",
|
|
12187
|
+
fill: "white",
|
|
12188
|
+
transform: "matrix(0.865865 0.500278 -0.871576 0.490261 148.75 80.6541)"
|
|
12189
|
+
}
|
|
12190
|
+
) }),
|
|
12191
|
+
/* @__PURE__ */ jsx("clipPath", { id: "clip2_20915_38670", children: /* @__PURE__ */ jsx(
|
|
12192
|
+
"rect",
|
|
12193
|
+
{
|
|
12194
|
+
width: "12",
|
|
12195
|
+
height: "12",
|
|
12196
|
+
fill: "white",
|
|
12197
|
+
transform: "matrix(0.865865 0.500278 -0.871576 0.490261 159.141 86.6575)"
|
|
12198
|
+
}
|
|
12199
|
+
) }),
|
|
12200
|
+
/* @__PURE__ */ jsx("clipPath", { id: "clip3_20915_38670", children: /* @__PURE__ */ jsx(
|
|
12201
|
+
"rect",
|
|
12202
|
+
{
|
|
12203
|
+
width: "12",
|
|
12204
|
+
height: "12",
|
|
12205
|
+
fill: "white",
|
|
12206
|
+
transform: "matrix(0.865865 0.500278 -0.871576 0.490261 120.928 84.4561)"
|
|
12207
|
+
}
|
|
12208
|
+
) }),
|
|
12209
|
+
/* @__PURE__ */ jsx("clipPath", { id: "clip4_20915_38670", children: /* @__PURE__ */ jsx(
|
|
12210
|
+
"rect",
|
|
12211
|
+
{
|
|
12212
|
+
width: "12",
|
|
12213
|
+
height: "12",
|
|
12214
|
+
fill: "white",
|
|
12215
|
+
transform: "matrix(0.865865 0.500278 -0.871576 0.490261 131.318 90.4594)"
|
|
12216
|
+
}
|
|
12217
|
+
) }),
|
|
12218
|
+
/* @__PURE__ */ jsx("clipPath", { id: "clip5_20915_38670", children: /* @__PURE__ */ jsx(
|
|
12219
|
+
"rect",
|
|
12220
|
+
{
|
|
12221
|
+
width: "12",
|
|
12222
|
+
height: "12",
|
|
12223
|
+
fill: "white",
|
|
12224
|
+
transform: "matrix(0.865865 0.500278 -0.871576 0.490261 141.709 96.4627)"
|
|
12225
|
+
}
|
|
12226
|
+
) })
|
|
12227
|
+
] })
|
|
12228
|
+
]
|
|
12229
|
+
}
|
|
12230
|
+
);
|
|
12231
|
+
};
|
|
12232
|
+
const schema = objectType({
|
|
12233
|
+
customer_id: stringType().min(1)
|
|
12234
|
+
});
|
|
12235
|
+
const STACKED_FOCUS_MODAL_ID = "shipping-form";
|
|
12236
|
+
const Shipping = () => {
|
|
12237
|
+
var _a;
|
|
12238
|
+
const { id } = useParams();
|
|
12239
|
+
const { order, isPending, isError, error } = useOrder(id, {
|
|
12240
|
+
fields: "+items.*,+items.variant.*,+items.variant.product.*,+items.variant.product.shipping_profile.*,+currency_code"
|
|
12241
|
+
});
|
|
12242
|
+
const {
|
|
12243
|
+
order: preview,
|
|
12244
|
+
isPending: isPreviewPending,
|
|
12245
|
+
isError: isPreviewError,
|
|
12246
|
+
error: previewError
|
|
12247
|
+
} = useOrderPreview(id);
|
|
12248
|
+
useInitiateOrderEdit({ preview });
|
|
12249
|
+
const { onCancel } = useCancelOrderEdit({ preview });
|
|
12250
|
+
if (isError) {
|
|
12251
|
+
throw error;
|
|
12252
|
+
}
|
|
12253
|
+
if (isPreviewError) {
|
|
12254
|
+
throw previewError;
|
|
12255
|
+
}
|
|
12256
|
+
const orderHasItems = (((_a = order == null ? void 0 : order.items) == null ? void 0 : _a.length) || 0) > 0;
|
|
12257
|
+
const isReady = preview && !isPreviewPending && order && !isPending;
|
|
12258
|
+
return /* @__PURE__ */ jsx(RouteFocusModal, { onClose: onCancel, children: !orderHasItems ? /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col overflow-hidden ", children: [
|
|
12259
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Header, {}),
|
|
12260
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Body, { className: "flex flex-1 flex-col overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "flex flex-1 flex-col items-center overflow-y-auto", children: /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-[720px] flex-col gap-y-6 py-16 px-6", children: [
|
|
12261
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Shipping" }) }),
|
|
12262
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Description, { asChild: true, children: /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "This draft order currently has no items. Add items to the order before adding shipping." }) })
|
|
12263
|
+
] }) }) }),
|
|
12264
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Footer, { children: /* @__PURE__ */ jsx(RouteFocusModal.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", type: "button", children: "Cancel" }) }) })
|
|
12265
|
+
] }) : isReady ? /* @__PURE__ */ jsx(ShippingForm, { preview, order }) : /* @__PURE__ */ jsxs("div", { children: [
|
|
12266
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Title, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Edit Shipping" }) }),
|
|
12267
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Description, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Loading data for the draft order, please wait..." }) })
|
|
12268
|
+
] }) });
|
|
12269
|
+
};
|
|
12270
|
+
const ShippingForm = ({ preview, order }) => {
|
|
12271
|
+
var _a;
|
|
12272
|
+
const { setIsOpen } = useStackedModal();
|
|
12273
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
12274
|
+
const [data, setData] = useState(null);
|
|
12275
|
+
const appliedShippingOptionIds = (_a = preview.shipping_methods) == null ? void 0 : _a.map((method) => method.shipping_option_id).filter(Boolean);
|
|
12276
|
+
const { shipping_options } = useShippingOptions(
|
|
12277
|
+
{
|
|
12278
|
+
id: appliedShippingOptionIds,
|
|
12279
|
+
fields: "+service_zone.*,+service_zone.fulfillment_set.*,+service_zone.fulfillment_set.location.*"
|
|
12280
|
+
},
|
|
12281
|
+
{
|
|
12282
|
+
enabled: appliedShippingOptionIds.length > 0
|
|
12283
|
+
}
|
|
12284
|
+
);
|
|
12285
|
+
const uniqueShippingProfiles = useMemo(() => {
|
|
12286
|
+
const profiles = /* @__PURE__ */ new Map();
|
|
12287
|
+
getUniqueShippingProfiles(order.items).forEach((profile) => {
|
|
12288
|
+
profiles.set(profile.id, profile);
|
|
12289
|
+
});
|
|
12290
|
+
shipping_options == null ? void 0 : shipping_options.forEach((option) => {
|
|
12291
|
+
profiles.set(option.shipping_profile_id, option.shipping_profile);
|
|
12292
|
+
});
|
|
12293
|
+
return Array.from(profiles.values());
|
|
12294
|
+
}, [order.items, shipping_options]);
|
|
12295
|
+
const { handleSuccess } = useRouteModal();
|
|
12296
|
+
const { mutateAsync: confirmOrderEdit } = useDraftOrderConfirmEdit(preview.id);
|
|
12297
|
+
const { mutateAsync: requestOrderEdit } = useDraftOrderRequestEdit(preview.id);
|
|
12298
|
+
const { mutateAsync: removeShippingMethod } = useDraftOrderRemoveShippingMethod(preview.id);
|
|
12299
|
+
const { mutateAsync: removeActionShippingMethod } = useDraftOrderRemoveActionShippingMethod(preview.id);
|
|
12300
|
+
const onSubmit = async () => {
|
|
12301
|
+
setIsSubmitting(true);
|
|
12302
|
+
let requestSucceeded = false;
|
|
12303
|
+
await requestOrderEdit(void 0, {
|
|
12304
|
+
onError: (e) => {
|
|
12305
|
+
toast.error(`Failed to request order edit: ${e.message}`);
|
|
12306
|
+
},
|
|
12307
|
+
onSuccess: () => {
|
|
12308
|
+
requestSucceeded = true;
|
|
12309
|
+
}
|
|
12310
|
+
});
|
|
12311
|
+
if (!requestSucceeded) {
|
|
12312
|
+
setIsSubmitting(false);
|
|
12313
|
+
return;
|
|
12314
|
+
}
|
|
12315
|
+
await confirmOrderEdit(void 0, {
|
|
12316
|
+
onError: (e) => {
|
|
12317
|
+
toast.error(`Failed to confirm order edit: ${e.message}`);
|
|
12318
|
+
},
|
|
12319
|
+
onSuccess: () => {
|
|
12320
|
+
handleSuccess();
|
|
12321
|
+
},
|
|
12322
|
+
onSettled: () => {
|
|
12323
|
+
setIsSubmitting(false);
|
|
12324
|
+
}
|
|
12325
|
+
});
|
|
12326
|
+
};
|
|
12327
|
+
const onKeydown = useCallback(
|
|
12328
|
+
(e) => {
|
|
12329
|
+
if (e.key === "Enter" && (e.ctrlKey || e.metaKey)) {
|
|
12330
|
+
if (data || isSubmitting) {
|
|
12331
|
+
return;
|
|
12332
|
+
}
|
|
12333
|
+
onSubmit();
|
|
12334
|
+
}
|
|
12335
|
+
},
|
|
12336
|
+
[data, isSubmitting, onSubmit]
|
|
12337
|
+
);
|
|
12338
|
+
useEffect(() => {
|
|
12339
|
+
document.addEventListener("keydown", onKeydown);
|
|
12340
|
+
return () => {
|
|
12341
|
+
document.removeEventListener("keydown", onKeydown);
|
|
12342
|
+
};
|
|
12343
|
+
}, [onKeydown]);
|
|
12344
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col overflow-hidden", children: [
|
|
12345
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Header, {}),
|
|
12346
|
+
/* @__PURE__ */ jsxs(RouteFocusModal.Body, { className: "flex flex-1 flex-col overflow-hidden", children: [
|
|
12347
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-1 flex-col items-center overflow-y-auto", children: /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-[720px] flex-col gap-y-6 py-16 px-6", children: [
|
|
12348
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
12349
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Shipping" }) }),
|
|
12350
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Description, { asChild: true, children: /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "Choose which shipping method(s) to use for the items in the order." }) })
|
|
12351
|
+
] }),
|
|
12352
|
+
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
12353
|
+
/* @__PURE__ */ jsx(Accordion.Root, { type: "multiple", children: /* @__PURE__ */ jsxs("div", { className: "bg-ui-bg-subtle rounded-xl shadow-elevation-card-rest", children: [
|
|
12354
|
+
/* @__PURE__ */ jsxs("div", { className: "px-4 py-2 flex items-center justify-between", children: [
|
|
12355
|
+
/* @__PURE__ */ jsx(
|
|
12356
|
+
Text,
|
|
12357
|
+
{
|
|
12358
|
+
size: "xsmall",
|
|
12359
|
+
weight: "plus",
|
|
12360
|
+
className: "text-ui-fg-muted",
|
|
12361
|
+
children: "Shipping profile"
|
|
12362
|
+
}
|
|
12363
|
+
),
|
|
12364
|
+
/* @__PURE__ */ jsx(
|
|
12365
|
+
Text,
|
|
12366
|
+
{
|
|
12367
|
+
size: "xsmall",
|
|
12368
|
+
weight: "plus",
|
|
12369
|
+
className: "text-ui-fg-muted",
|
|
12370
|
+
children: "Action"
|
|
12371
|
+
}
|
|
12372
|
+
)
|
|
12373
|
+
] }),
|
|
12374
|
+
/* @__PURE__ */ jsx("div", { className: "px-[5px] pb-[5px]", children: uniqueShippingProfiles.map((profile) => {
|
|
12375
|
+
var _a2, _b, _c, _d, _e, _f, _g;
|
|
12376
|
+
const items = getItemsWithShippingProfile(
|
|
12377
|
+
profile.id,
|
|
12378
|
+
order.items
|
|
12379
|
+
);
|
|
12380
|
+
const hasItems = items.length > 0;
|
|
12381
|
+
const shippingOption = shipping_options == null ? void 0 : shipping_options.find(
|
|
12382
|
+
(option) => option.shipping_profile_id === profile.id
|
|
12383
|
+
);
|
|
12384
|
+
const shippingMethod = preview.shipping_methods.find(
|
|
12385
|
+
(method) => method.shipping_option_id === (shippingOption == null ? void 0 : shippingOption.id)
|
|
12386
|
+
);
|
|
12387
|
+
const addShippingMethodAction = (_a2 = shippingMethod == null ? void 0 : shippingMethod.actions) == null ? void 0 : _a2.find(
|
|
12388
|
+
(action) => action.action === "SHIPPING_ADD"
|
|
12389
|
+
);
|
|
12390
|
+
return /* @__PURE__ */ jsxs(
|
|
12391
|
+
Accordion.Item,
|
|
12392
|
+
{
|
|
12393
|
+
value: profile.id,
|
|
12394
|
+
className: "bg-ui-bg-base shadow-elevation-card-rest rounded-lg",
|
|
12395
|
+
children: [
|
|
12396
|
+
/* @__PURE__ */ jsxs("div", { className: "px-3 py-2 flex items-center justify-between gap-3", children: [
|
|
12397
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-3 w-full overflow-hidden", children: [
|
|
12398
|
+
/* @__PURE__ */ jsx(Accordion.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
12399
|
+
IconButton,
|
|
12400
|
+
{
|
|
12401
|
+
size: "2xsmall",
|
|
12402
|
+
variant: "transparent",
|
|
12403
|
+
className: "group/trigger",
|
|
12404
|
+
disabled: !hasItems,
|
|
12405
|
+
children: /* @__PURE__ */ jsx(TriangleRightMini, { className: "group-data-[state=open]/trigger:rotate-90 transition-transform" })
|
|
12406
|
+
}
|
|
12407
|
+
) }),
|
|
12408
|
+
!shippingOption ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-3", children: [
|
|
12409
|
+
/* @__PURE__ */ jsx("div", { className: "size-7 rounded-md shadow-borders-base flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "size-6 rounded bg-ui-bg-component-hover flex items-center justify-center", children: /* @__PURE__ */ jsx(Shopping, { className: "text-ui-fg-subtle" }) }) }),
|
|
12410
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col flex-1", children: [
|
|
12411
|
+
/* @__PURE__ */ jsx(
|
|
12412
|
+
Text,
|
|
12413
|
+
{
|
|
12414
|
+
size: "small",
|
|
12415
|
+
weight: "plus",
|
|
12416
|
+
leading: "compact",
|
|
12417
|
+
children: profile.name
|
|
12418
|
+
}
|
|
12419
|
+
),
|
|
12420
|
+
/* @__PURE__ */ jsxs(
|
|
12421
|
+
Text,
|
|
12422
|
+
{
|
|
12423
|
+
size: "small",
|
|
12424
|
+
leading: "compact",
|
|
12425
|
+
className: "text-ui-fg-subtle",
|
|
12426
|
+
children: [
|
|
12427
|
+
items.length,
|
|
12428
|
+
" ",
|
|
12429
|
+
pluralize(items.length, "items", "item")
|
|
12430
|
+
]
|
|
12431
|
+
}
|
|
12432
|
+
)
|
|
12433
|
+
] })
|
|
12434
|
+
] }) : /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[5px] max-sm:flex-col max-sm:items-start flex-1 w-full overflow-hidden", children: [
|
|
12435
|
+
/* @__PURE__ */ jsx(
|
|
12436
|
+
Tooltip,
|
|
12437
|
+
{
|
|
12438
|
+
content: /* @__PURE__ */ jsx("ul", { children: items.map((item) => {
|
|
12439
|
+
var _a3, _b2, _c2;
|
|
12440
|
+
return /* @__PURE__ */ jsx(
|
|
12441
|
+
"li",
|
|
12442
|
+
{
|
|
12443
|
+
children: `${item.quantity}x ${(_b2 = (_a3 = item.variant) == null ? void 0 : _a3.product) == null ? void 0 : _b2.title} (${(_c2 = item.variant) == null ? void 0 : _c2.title})`
|
|
12444
|
+
},
|
|
12445
|
+
item.id
|
|
12446
|
+
);
|
|
12447
|
+
}) }),
|
|
12448
|
+
children: /* @__PURE__ */ jsxs(
|
|
12449
|
+
Badge,
|
|
12450
|
+
{
|
|
12451
|
+
className: "flex items-center gap-x-[3px] overflow-hidden cursor-default",
|
|
12452
|
+
size: "xsmall",
|
|
12453
|
+
children: [
|
|
12454
|
+
/* @__PURE__ */ jsx(Shopping, { className: "shrink-0" }),
|
|
12455
|
+
/* @__PURE__ */ jsxs("span", { className: "truncate", children: [
|
|
12456
|
+
items.reduce(
|
|
12457
|
+
(acc, item) => acc + item.quantity,
|
|
12458
|
+
0
|
|
12459
|
+
),
|
|
12460
|
+
"x",
|
|
12461
|
+
" ",
|
|
12462
|
+
pluralize(items.length, "items", "item")
|
|
12463
|
+
] })
|
|
12464
|
+
]
|
|
12465
|
+
}
|
|
12466
|
+
)
|
|
12467
|
+
}
|
|
12468
|
+
),
|
|
12469
|
+
/* @__PURE__ */ jsx(
|
|
12470
|
+
Tooltip,
|
|
12471
|
+
{
|
|
12472
|
+
content: (_d = (_c = (_b = shippingOption.service_zone) == null ? void 0 : _b.fulfillment_set) == null ? void 0 : _c.location) == null ? void 0 : _d.name,
|
|
12473
|
+
children: /* @__PURE__ */ jsxs(
|
|
12474
|
+
Badge,
|
|
12475
|
+
{
|
|
12476
|
+
className: "flex items-center gap-x-[3px] overflow-hidden cursor-default",
|
|
12477
|
+
size: "xsmall",
|
|
12478
|
+
children: [
|
|
12479
|
+
/* @__PURE__ */ jsx(Buildings, { className: "shrink-0" }),
|
|
12480
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: (_g = (_f = (_e = shippingOption.service_zone) == null ? void 0 : _e.fulfillment_set) == null ? void 0 : _f.location) == null ? void 0 : _g.name })
|
|
12481
|
+
]
|
|
12482
|
+
}
|
|
12483
|
+
)
|
|
12484
|
+
}
|
|
12485
|
+
),
|
|
12486
|
+
/* @__PURE__ */ jsx(Tooltip, { content: shippingOption.name, children: /* @__PURE__ */ jsxs(
|
|
12487
|
+
Badge,
|
|
12488
|
+
{
|
|
12489
|
+
className: "flex items-center gap-x-[3px] overflow-hidden cursor-default",
|
|
12490
|
+
size: "xsmall",
|
|
12491
|
+
children: [
|
|
12492
|
+
/* @__PURE__ */ jsx(TruckFast, { className: "shrink-0" }),
|
|
12493
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: shippingOption.name })
|
|
12494
|
+
]
|
|
12495
|
+
}
|
|
12496
|
+
) })
|
|
12497
|
+
] })
|
|
12498
|
+
] }),
|
|
12499
|
+
shippingOption ? /* @__PURE__ */ jsx(
|
|
12500
|
+
ActionMenu,
|
|
12501
|
+
{
|
|
12502
|
+
groups: [
|
|
12503
|
+
{
|
|
12504
|
+
actions: [
|
|
12505
|
+
hasItems ? {
|
|
12506
|
+
label: "Edit shipping option",
|
|
12507
|
+
icon: /* @__PURE__ */ jsx(Channels, {}),
|
|
12508
|
+
onClick: () => {
|
|
12509
|
+
setIsOpen(
|
|
12510
|
+
STACKED_FOCUS_MODAL_ID,
|
|
12511
|
+
true
|
|
12512
|
+
);
|
|
12513
|
+
setData({
|
|
12514
|
+
shippingProfileId: profile.id,
|
|
12515
|
+
shippingOption,
|
|
12516
|
+
shippingMethod
|
|
12517
|
+
});
|
|
12518
|
+
}
|
|
12519
|
+
} : void 0,
|
|
12520
|
+
{
|
|
12521
|
+
label: "Remove shipping option",
|
|
12522
|
+
icon: /* @__PURE__ */ jsx(Trash, {}),
|
|
12523
|
+
onClick: () => {
|
|
12524
|
+
if (shippingMethod) {
|
|
12525
|
+
if (addShippingMethodAction) {
|
|
12526
|
+
removeActionShippingMethod(
|
|
12527
|
+
addShippingMethodAction.id
|
|
12528
|
+
);
|
|
12529
|
+
} else {
|
|
12530
|
+
removeShippingMethod(
|
|
12531
|
+
shippingMethod.id
|
|
12532
|
+
);
|
|
12533
|
+
}
|
|
12534
|
+
}
|
|
12535
|
+
}
|
|
12536
|
+
}
|
|
12537
|
+
].filter(Boolean)
|
|
12538
|
+
}
|
|
12539
|
+
]
|
|
12540
|
+
}
|
|
12541
|
+
) : /* @__PURE__ */ jsx(
|
|
12542
|
+
StackedModalTrigger,
|
|
12543
|
+
{
|
|
12544
|
+
shippingProfileId: profile.id,
|
|
12545
|
+
shippingOption,
|
|
12546
|
+
shippingMethod,
|
|
12547
|
+
setData,
|
|
12548
|
+
children: "Add shipping option"
|
|
12549
|
+
}
|
|
12550
|
+
)
|
|
12551
|
+
] }),
|
|
12552
|
+
/* @__PURE__ */ jsxs(Accordion.Content, { children: [
|
|
12553
|
+
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
12554
|
+
items.map((item, idx) => {
|
|
12555
|
+
var _a3, _b2, _c2, _d2, _e2;
|
|
12556
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
12557
|
+
/* @__PURE__ */ jsxs(
|
|
12558
|
+
"div",
|
|
12559
|
+
{
|
|
12560
|
+
className: "px-3 flex items-center gap-x-3",
|
|
12561
|
+
children: [
|
|
12562
|
+
/* @__PURE__ */ jsx("div", { className: "w-5 h-[56px] flex flex-col justify-center items-center", children: /* @__PURE__ */ jsx(
|
|
12563
|
+
Divider,
|
|
12564
|
+
{
|
|
12565
|
+
variant: "dashed",
|
|
12566
|
+
orientation: "vertical"
|
|
12567
|
+
}
|
|
12568
|
+
) }),
|
|
12569
|
+
/* @__PURE__ */ jsxs("div", { className: "py-2 flex items-center gap-x-3", children: [
|
|
12570
|
+
/* @__PURE__ */ jsx("div", { className: "size-7 flex items-center justify-center tabular-nums", children: /* @__PURE__ */ jsxs(
|
|
12571
|
+
Text,
|
|
12572
|
+
{
|
|
12573
|
+
size: "small",
|
|
12574
|
+
leading: "compact",
|
|
12575
|
+
className: "text-ui-fg-subtle",
|
|
12576
|
+
children: [
|
|
12577
|
+
item.quantity,
|
|
12578
|
+
"x"
|
|
12579
|
+
]
|
|
12580
|
+
}
|
|
12581
|
+
) }),
|
|
12582
|
+
/* @__PURE__ */ jsx(Thumbnail, { thumbnail: item.thumbnail }),
|
|
12583
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
12584
|
+
/* @__PURE__ */ jsxs(
|
|
12585
|
+
Text,
|
|
12586
|
+
{
|
|
12587
|
+
size: "small",
|
|
12588
|
+
leading: "compact",
|
|
12589
|
+
weight: "plus",
|
|
12590
|
+
children: [
|
|
12591
|
+
(_b2 = (_a3 = item.variant) == null ? void 0 : _a3.product) == null ? void 0 : _b2.title,
|
|
12592
|
+
" (",
|
|
12593
|
+
(_c2 = item.variant) == null ? void 0 : _c2.title,
|
|
12594
|
+
")"
|
|
12595
|
+
]
|
|
12596
|
+
}
|
|
12597
|
+
),
|
|
12598
|
+
/* @__PURE__ */ jsx(
|
|
12599
|
+
Text,
|
|
12600
|
+
{
|
|
12601
|
+
size: "small",
|
|
12602
|
+
leading: "compact",
|
|
12603
|
+
className: "text-ui-fg-subtle",
|
|
12604
|
+
children: (_e2 = (_d2 = item.variant) == null ? void 0 : _d2.options) == null ? void 0 : _e2.map((option) => option.value).join(" · ")
|
|
12605
|
+
}
|
|
12606
|
+
)
|
|
12607
|
+
] })
|
|
12608
|
+
] })
|
|
12609
|
+
]
|
|
12610
|
+
},
|
|
12611
|
+
item.id
|
|
12612
|
+
),
|
|
12613
|
+
idx !== items.length - 1 && /* @__PURE__ */ jsx(Divider, { variant: "dashed" })
|
|
12614
|
+
] }, item.id);
|
|
12615
|
+
})
|
|
12616
|
+
] })
|
|
12617
|
+
]
|
|
12618
|
+
},
|
|
12619
|
+
profile.id
|
|
12620
|
+
);
|
|
12621
|
+
}) })
|
|
12622
|
+
] }) })
|
|
12623
|
+
] }) }),
|
|
12624
|
+
/* @__PURE__ */ jsx(
|
|
12625
|
+
StackedFocusModal,
|
|
12626
|
+
{
|
|
12627
|
+
id: STACKED_FOCUS_MODAL_ID,
|
|
12628
|
+
onOpenChangeCallback: (open) => {
|
|
12629
|
+
if (!open) {
|
|
12630
|
+
setData(null);
|
|
12631
|
+
}
|
|
12632
|
+
return open;
|
|
12633
|
+
},
|
|
12634
|
+
children: data && /* @__PURE__ */ jsx(ShippingProfileForm, { data, order, preview })
|
|
12635
|
+
}
|
|
12636
|
+
)
|
|
12637
|
+
] }),
|
|
12638
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-x-2", children: [
|
|
12639
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", type: "button", children: "Cancel" }) }),
|
|
12640
|
+
/* @__PURE__ */ jsx(
|
|
12641
|
+
Button,
|
|
12642
|
+
{
|
|
12643
|
+
size: "small",
|
|
12644
|
+
type: "button",
|
|
12645
|
+
isLoading: isSubmitting,
|
|
12646
|
+
onClick: onSubmit,
|
|
12647
|
+
children: "Save"
|
|
12648
|
+
}
|
|
12649
|
+
)
|
|
12650
|
+
] }) })
|
|
12651
|
+
] });
|
|
12652
|
+
};
|
|
12653
|
+
const StackedModalTrigger = ({
|
|
12654
|
+
shippingProfileId,
|
|
12655
|
+
shippingOption,
|
|
12656
|
+
shippingMethod,
|
|
12657
|
+
setData,
|
|
12658
|
+
children
|
|
12659
|
+
}) => {
|
|
12660
|
+
const { setIsOpen, getIsOpen } = useStackedModal();
|
|
12661
|
+
const isOpen = getIsOpen(STACKED_FOCUS_MODAL_ID);
|
|
12662
|
+
const onToggle = () => {
|
|
12663
|
+
if (isOpen) {
|
|
12664
|
+
setIsOpen(STACKED_FOCUS_MODAL_ID, false);
|
|
12665
|
+
setData(null);
|
|
12666
|
+
} else {
|
|
12667
|
+
setIsOpen(STACKED_FOCUS_MODAL_ID, true);
|
|
12668
|
+
setData({
|
|
12669
|
+
shippingProfileId,
|
|
12670
|
+
shippingOption,
|
|
12671
|
+
shippingMethod
|
|
12672
|
+
});
|
|
12673
|
+
}
|
|
12674
|
+
};
|
|
12675
|
+
return /* @__PURE__ */ jsx(
|
|
12676
|
+
Button,
|
|
12677
|
+
{
|
|
12678
|
+
size: "small",
|
|
12679
|
+
variant: "secondary",
|
|
12680
|
+
onClick: onToggle,
|
|
12681
|
+
className: "text-ui-fg-primary shrink-0",
|
|
12682
|
+
children
|
|
12683
|
+
}
|
|
12684
|
+
);
|
|
12685
|
+
};
|
|
12686
|
+
const ShippingProfileForm = ({
|
|
12687
|
+
data,
|
|
12688
|
+
order,
|
|
12689
|
+
preview
|
|
12690
|
+
}) => {
|
|
12691
|
+
var _a, _b, _c, _d, _e, _f;
|
|
12692
|
+
const { setIsOpen } = useStackedModal();
|
|
12693
|
+
const form = useForm({
|
|
12694
|
+
resolver: zodResolver(shippingMethodSchema),
|
|
12695
|
+
defaultValues: {
|
|
12696
|
+
location_id: (_d = (_c = (_b = (_a = data.shippingOption) == null ? void 0 : _a.service_zone) == null ? void 0 : _b.fulfillment_set) == null ? void 0 : _c.location) == null ? void 0 : _d.id,
|
|
12697
|
+
shipping_option_id: (_e = data.shippingOption) == null ? void 0 : _e.id,
|
|
12698
|
+
custom_amount: (_f = data.shippingMethod) == null ? void 0 : _f.amount
|
|
12699
|
+
}
|
|
12700
|
+
});
|
|
12701
|
+
const { mutateAsync: addShippingMethod, isPending } = useDraftOrderAddShippingMethod(order.id);
|
|
12702
|
+
const {
|
|
12703
|
+
mutateAsync: updateShippingMethod,
|
|
12704
|
+
isPending: isUpdatingShippingMethod
|
|
12705
|
+
} = useDraftOrderUpdateShippingMethod(order.id);
|
|
12706
|
+
const onSubmit = form.handleSubmit(async (values) => {
|
|
12707
|
+
if (isEqual(values, form.formState.defaultValues)) {
|
|
12708
|
+
setIsOpen(STACKED_FOCUS_MODAL_ID, false);
|
|
12709
|
+
return;
|
|
12710
|
+
}
|
|
12711
|
+
if (data.shippingMethod) {
|
|
12712
|
+
await updateShippingMethod(
|
|
12713
|
+
{
|
|
12714
|
+
method_id: data.shippingMethod.id,
|
|
12715
|
+
shipping_option_id: values.shipping_option_id,
|
|
12716
|
+
custom_amount: values.custom_amount ? convertNumber(values.custom_amount) : void 0
|
|
12717
|
+
},
|
|
12718
|
+
{
|
|
12719
|
+
onError: (e) => {
|
|
12720
|
+
toast.error(e.message);
|
|
12721
|
+
},
|
|
12722
|
+
onSuccess: () => {
|
|
12723
|
+
setIsOpen(STACKED_FOCUS_MODAL_ID, false);
|
|
12724
|
+
}
|
|
12725
|
+
}
|
|
12726
|
+
);
|
|
12727
|
+
return;
|
|
12728
|
+
}
|
|
12729
|
+
await addShippingMethod(
|
|
12730
|
+
{
|
|
12731
|
+
shipping_option_id: values.shipping_option_id,
|
|
12732
|
+
custom_amount: values.custom_amount ? convertNumber(values.custom_amount) : void 0
|
|
12733
|
+
},
|
|
12734
|
+
{
|
|
12735
|
+
onError: (e) => {
|
|
12736
|
+
toast.error(e.message);
|
|
12737
|
+
},
|
|
12738
|
+
onSuccess: () => {
|
|
12739
|
+
setIsOpen(STACKED_FOCUS_MODAL_ID, false);
|
|
12740
|
+
}
|
|
12741
|
+
}
|
|
12742
|
+
);
|
|
12743
|
+
});
|
|
12744
|
+
return /* @__PURE__ */ jsx(StackedFocusModal.Content, { children: /* @__PURE__ */ jsx(Form$2, { ...form, children: /* @__PURE__ */ jsxs(
|
|
12745
|
+
KeyboundForm,
|
|
12746
|
+
{
|
|
12747
|
+
className: "flex h-full flex-col overflow-hidden",
|
|
12748
|
+
onSubmit,
|
|
12749
|
+
children: [
|
|
12750
|
+
/* @__PURE__ */ jsx(StackedFocusModal.Header, {}),
|
|
12751
|
+
/* @__PURE__ */ jsx(StackedFocusModal.Body, { className: "flex flex-1 flex-col overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "flex flex-1 flex-col items-center overflow-y-auto", children: /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-[720px] flex-col gap-y-6 py-16 px-6", children: [
|
|
12752
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
12753
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Title, { asChild: true, children: /* @__PURE__ */ jsx(Heading, { children: "Shipping" }) }),
|
|
12754
|
+
/* @__PURE__ */ jsx(RouteFocusModal.Description, { asChild: true, children: /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "Add a shipping method for the selected shipping profile. You can see the items that will be shipped using this method in the preview below." }) })
|
|
12755
|
+
] }),
|
|
12756
|
+
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
12757
|
+
/* @__PURE__ */ jsx(
|
|
12758
|
+
LocationField,
|
|
12982
12759
|
{
|
|
12983
|
-
|
|
12984
|
-
|
|
12985
|
-
fill: "white",
|
|
12986
|
-
transform: "matrix(0.865865 0.500278 -0.871576 0.490261 138.36 74.6508)"
|
|
12760
|
+
control: form.control,
|
|
12761
|
+
setValue: form.setValue
|
|
12987
12762
|
}
|
|
12988
|
-
)
|
|
12989
|
-
/* @__PURE__ */ jsx(
|
|
12990
|
-
|
|
12763
|
+
),
|
|
12764
|
+
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
12765
|
+
/* @__PURE__ */ jsx(
|
|
12766
|
+
ShippingOptionField,
|
|
12991
12767
|
{
|
|
12992
|
-
|
|
12993
|
-
|
|
12994
|
-
|
|
12995
|
-
transform: "matrix(0.865865 0.500278 -0.871576 0.490261 148.75 80.6541)"
|
|
12768
|
+
shippingProfileId: data.shippingProfileId,
|
|
12769
|
+
preview,
|
|
12770
|
+
control: form.control
|
|
12996
12771
|
}
|
|
12997
|
-
)
|
|
12998
|
-
/* @__PURE__ */ jsx(
|
|
12999
|
-
|
|
12772
|
+
),
|
|
12773
|
+
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
12774
|
+
/* @__PURE__ */ jsx(
|
|
12775
|
+
CustomAmountField,
|
|
13000
12776
|
{
|
|
13001
|
-
|
|
13002
|
-
|
|
13003
|
-
fill: "white",
|
|
13004
|
-
transform: "matrix(0.865865 0.500278 -0.871576 0.490261 159.141 86.6575)"
|
|
12777
|
+
control: form.control,
|
|
12778
|
+
currencyCode: order.currency_code
|
|
13005
12779
|
}
|
|
13006
|
-
)
|
|
13007
|
-
/* @__PURE__ */ jsx(
|
|
13008
|
-
|
|
12780
|
+
),
|
|
12781
|
+
/* @__PURE__ */ jsx(Divider, { variant: "dashed" }),
|
|
12782
|
+
/* @__PURE__ */ jsx(
|
|
12783
|
+
ItemsPreview,
|
|
12784
|
+
{
|
|
12785
|
+
order,
|
|
12786
|
+
shippingProfileId: data.shippingProfileId
|
|
12787
|
+
}
|
|
12788
|
+
)
|
|
12789
|
+
] }) }) }),
|
|
12790
|
+
/* @__PURE__ */ jsx(StackedFocusModal.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-x-2", children: [
|
|
12791
|
+
/* @__PURE__ */ jsx(StackedFocusModal.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", type: "button", children: "Cancel" }) }),
|
|
12792
|
+
/* @__PURE__ */ jsx(
|
|
12793
|
+
Button,
|
|
12794
|
+
{
|
|
12795
|
+
size: "small",
|
|
12796
|
+
type: "submit",
|
|
12797
|
+
isLoading: isPending || isUpdatingShippingMethod,
|
|
12798
|
+
children: data.shippingMethod ? "Update" : "Add"
|
|
12799
|
+
}
|
|
12800
|
+
)
|
|
12801
|
+
] }) })
|
|
12802
|
+
]
|
|
12803
|
+
}
|
|
12804
|
+
) }) });
|
|
12805
|
+
};
|
|
12806
|
+
const shippingMethodSchema = objectType({
|
|
12807
|
+
location_id: stringType(),
|
|
12808
|
+
shipping_option_id: stringType(),
|
|
12809
|
+
custom_amount: unionType([numberType(), stringType()]).optional()
|
|
12810
|
+
});
|
|
12811
|
+
const ItemsPreview = ({ order, shippingProfileId }) => {
|
|
12812
|
+
const matches = order.items.filter(
|
|
12813
|
+
(item) => {
|
|
12814
|
+
var _a, _b, _c;
|
|
12815
|
+
return ((_c = (_b = (_a = item.variant) == null ? void 0 : _a.product) == null ? void 0 : _b.shipping_profile) == null ? void 0 : _c.id) === shippingProfileId;
|
|
12816
|
+
}
|
|
12817
|
+
);
|
|
12818
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-6", children: [
|
|
12819
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 items-center gap-3", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
12820
|
+
/* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", leading: "compact", children: "Items to ship" }),
|
|
12821
|
+
/* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "Items with the selected shipping profile." })
|
|
12822
|
+
] }) }),
|
|
12823
|
+
/* @__PURE__ */ jsxs("div", { className: "bg-ui-bg-subtle shadow-elevation-card-rest rounded-xl", children: [
|
|
12824
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-3 px-4 py-2 text-ui-fg-muted", children: [
|
|
12825
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", children: "Item" }) }),
|
|
12826
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", children: "Quantity" }) })
|
|
12827
|
+
] }),
|
|
12828
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-y-1.5 px-[5px] pb-[5px]", children: matches.length > 0 ? matches == null ? void 0 : matches.map((item) => /* @__PURE__ */ jsxs(
|
|
12829
|
+
"div",
|
|
12830
|
+
{
|
|
12831
|
+
className: "grid grid-cols-2 gap-3 px-4 py-2 bg-ui-bg-base shadow-elevation-card-rest rounded-lg items-center",
|
|
12832
|
+
children: [
|
|
12833
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-3", children: [
|
|
12834
|
+
/* @__PURE__ */ jsx(
|
|
12835
|
+
Thumbnail,
|
|
12836
|
+
{
|
|
12837
|
+
thumbnail: item.thumbnail,
|
|
12838
|
+
alt: item.product_title ?? void 0
|
|
12839
|
+
}
|
|
12840
|
+
),
|
|
12841
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
12842
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-1", children: [
|
|
12843
|
+
/* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", leading: "compact", children: item.product_title }),
|
|
12844
|
+
/* @__PURE__ */ jsxs(
|
|
12845
|
+
Text,
|
|
12846
|
+
{
|
|
12847
|
+
size: "small",
|
|
12848
|
+
leading: "compact",
|
|
12849
|
+
className: "text-ui-fg-subtle",
|
|
12850
|
+
children: [
|
|
12851
|
+
"(",
|
|
12852
|
+
item.variant_title,
|
|
12853
|
+
")"
|
|
12854
|
+
]
|
|
12855
|
+
}
|
|
12856
|
+
)
|
|
12857
|
+
] }),
|
|
12858
|
+
/* @__PURE__ */ jsx(
|
|
12859
|
+
Text,
|
|
12860
|
+
{
|
|
12861
|
+
size: "small",
|
|
12862
|
+
leading: "compact",
|
|
12863
|
+
className: "text-ui-fg-subtle",
|
|
12864
|
+
children: item.variant_sku
|
|
12865
|
+
}
|
|
12866
|
+
)
|
|
12867
|
+
] })
|
|
12868
|
+
] }),
|
|
12869
|
+
/* @__PURE__ */ jsxs(
|
|
12870
|
+
Text,
|
|
12871
|
+
{
|
|
12872
|
+
size: "small",
|
|
12873
|
+
leading: "compact",
|
|
12874
|
+
className: "text-ui-fg-subtle",
|
|
12875
|
+
children: [
|
|
12876
|
+
item.quantity,
|
|
12877
|
+
"x"
|
|
12878
|
+
]
|
|
12879
|
+
}
|
|
12880
|
+
)
|
|
12881
|
+
]
|
|
12882
|
+
},
|
|
12883
|
+
item.id
|
|
12884
|
+
)) : /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-x-3 bg-ui-bg-base rounded-lg p-4 shadow-elevation-card-rest flex-col gap-1", children: [
|
|
12885
|
+
/* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", leading: "compact", children: "No items found" }),
|
|
12886
|
+
/* @__PURE__ */ jsxs(Text, { size: "small", className: "text-ui-fg-subtle", children: [
|
|
12887
|
+
'No items found for "',
|
|
12888
|
+
query,
|
|
12889
|
+
'".'
|
|
12890
|
+
] })
|
|
12891
|
+
] }) })
|
|
12892
|
+
] })
|
|
12893
|
+
] });
|
|
12894
|
+
};
|
|
12895
|
+
const LocationField = ({ control, setValue }) => {
|
|
12896
|
+
const locations = useComboboxData({
|
|
12897
|
+
queryKey: ["locations"],
|
|
12898
|
+
queryFn: async (params) => {
|
|
12899
|
+
return await sdk.admin.stockLocation.list(params);
|
|
12900
|
+
},
|
|
12901
|
+
getOptions: (data) => {
|
|
12902
|
+
return data.stock_locations.map((location) => ({
|
|
12903
|
+
label: location.name,
|
|
12904
|
+
value: location.id
|
|
12905
|
+
}));
|
|
12906
|
+
}
|
|
12907
|
+
});
|
|
12908
|
+
return /* @__PURE__ */ jsx(
|
|
12909
|
+
Form$2.Field,
|
|
12910
|
+
{
|
|
12911
|
+
control,
|
|
12912
|
+
name: "location_id",
|
|
12913
|
+
render: ({ field: { onChange, ...field } }) => {
|
|
12914
|
+
return /* @__PURE__ */ jsx(Form$2.Item, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-x-3", children: [
|
|
12915
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
12916
|
+
/* @__PURE__ */ jsx(Form$2.Label, { children: "Location" }),
|
|
12917
|
+
/* @__PURE__ */ jsx(Form$2.Hint, { children: "Choose where you want to ship the items from." })
|
|
12918
|
+
] }),
|
|
12919
|
+
/* @__PURE__ */ jsx(Form$2.Control, { children: /* @__PURE__ */ jsx(
|
|
12920
|
+
Combobox,
|
|
13009
12921
|
{
|
|
13010
|
-
|
|
13011
|
-
|
|
13012
|
-
|
|
13013
|
-
|
|
12922
|
+
options: locations.options,
|
|
12923
|
+
fetchNextPage: locations.fetchNextPage,
|
|
12924
|
+
isFetchingNextPage: locations.isFetchingNextPage,
|
|
12925
|
+
searchValue: locations.searchValue,
|
|
12926
|
+
onSearchValueChange: locations.onSearchValueChange,
|
|
12927
|
+
placeholder: "Select location",
|
|
12928
|
+
onChange: (value) => {
|
|
12929
|
+
setValue("shipping_option_id", "", {
|
|
12930
|
+
shouldDirty: true,
|
|
12931
|
+
shouldTouch: true
|
|
12932
|
+
});
|
|
12933
|
+
onChange(value);
|
|
12934
|
+
},
|
|
12935
|
+
...field
|
|
13014
12936
|
}
|
|
13015
|
-
) })
|
|
13016
|
-
|
|
13017
|
-
|
|
12937
|
+
) })
|
|
12938
|
+
] }) });
|
|
12939
|
+
}
|
|
12940
|
+
}
|
|
12941
|
+
);
|
|
12942
|
+
};
|
|
12943
|
+
const ShippingOptionField = ({
|
|
12944
|
+
shippingProfileId,
|
|
12945
|
+
preview,
|
|
12946
|
+
control
|
|
12947
|
+
}) => {
|
|
12948
|
+
var _a;
|
|
12949
|
+
const locationId = useWatch({ control, name: "location_id" });
|
|
12950
|
+
const shippingOptions = useComboboxData({
|
|
12951
|
+
queryKey: ["shipping_options", locationId, shippingProfileId],
|
|
12952
|
+
queryFn: async (params) => {
|
|
12953
|
+
return await sdk.admin.shippingOption.list({
|
|
12954
|
+
...params,
|
|
12955
|
+
stock_location_id: locationId,
|
|
12956
|
+
shipping_profile_id: shippingProfileId
|
|
12957
|
+
});
|
|
12958
|
+
},
|
|
12959
|
+
getOptions: (data) => {
|
|
12960
|
+
return data.shipping_options.map((option) => {
|
|
12961
|
+
var _a2;
|
|
12962
|
+
if ((_a2 = option.rules) == null ? void 0 : _a2.find(
|
|
12963
|
+
(r) => r.attribute === "is_return" && r.value === "true"
|
|
12964
|
+
)) {
|
|
12965
|
+
return void 0;
|
|
12966
|
+
}
|
|
12967
|
+
return {
|
|
12968
|
+
label: option.name,
|
|
12969
|
+
value: option.id
|
|
12970
|
+
};
|
|
12971
|
+
}).filter(Boolean);
|
|
12972
|
+
},
|
|
12973
|
+
enabled: !!locationId && !!shippingProfileId,
|
|
12974
|
+
defaultValue: ((_a = preview.shipping_methods[0]) == null ? void 0 : _a.shipping_option_id) || void 0
|
|
12975
|
+
});
|
|
12976
|
+
const tooltipContent = !locationId && !shippingProfileId ? "Choose a location and shipping profile first." : !locationId ? "Choose a location first." : "Choose a shipping profile first.";
|
|
12977
|
+
return /* @__PURE__ */ jsx(
|
|
12978
|
+
Form$2.Field,
|
|
12979
|
+
{
|
|
12980
|
+
control,
|
|
12981
|
+
name: "shipping_option_id",
|
|
12982
|
+
render: ({ field }) => {
|
|
12983
|
+
return /* @__PURE__ */ jsx(Form$2.Item, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-x-3", children: [
|
|
12984
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
12985
|
+
/* @__PURE__ */ jsx(Form$2.Label, { children: "Shipping option" }),
|
|
12986
|
+
/* @__PURE__ */ jsx(Form$2.Hint, { children: "Choose the shipping option to use." })
|
|
12987
|
+
] }),
|
|
12988
|
+
/* @__PURE__ */ jsx(
|
|
12989
|
+
ConditionalTooltip,
|
|
13018
12990
|
{
|
|
13019
|
-
|
|
13020
|
-
|
|
13021
|
-
|
|
13022
|
-
|
|
12991
|
+
content: tooltipContent,
|
|
12992
|
+
showTooltip: !locationId || !shippingProfileId,
|
|
12993
|
+
children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Form$2.Control, { children: /* @__PURE__ */ jsx(
|
|
12994
|
+
Combobox,
|
|
12995
|
+
{
|
|
12996
|
+
options: shippingOptions.options,
|
|
12997
|
+
fetchNextPage: shippingOptions.fetchNextPage,
|
|
12998
|
+
isFetchingNextPage: shippingOptions.isFetchingNextPage,
|
|
12999
|
+
searchValue: shippingOptions.searchValue,
|
|
13000
|
+
onSearchValueChange: shippingOptions.onSearchValueChange,
|
|
13001
|
+
placeholder: "Select shipping option",
|
|
13002
|
+
...field,
|
|
13003
|
+
disabled: !locationId || !shippingProfileId
|
|
13004
|
+
}
|
|
13005
|
+
) }) })
|
|
13023
13006
|
}
|
|
13024
|
-
)
|
|
13025
|
-
|
|
13026
|
-
|
|
13007
|
+
)
|
|
13008
|
+
] }) });
|
|
13009
|
+
}
|
|
13010
|
+
}
|
|
13011
|
+
);
|
|
13012
|
+
};
|
|
13013
|
+
const CustomAmountField = ({
|
|
13014
|
+
control,
|
|
13015
|
+
currencyCode
|
|
13016
|
+
}) => {
|
|
13017
|
+
return /* @__PURE__ */ jsx(
|
|
13018
|
+
Form$2.Field,
|
|
13019
|
+
{
|
|
13020
|
+
control,
|
|
13021
|
+
name: "custom_amount",
|
|
13022
|
+
render: ({ field: { onChange, ...field } }) => {
|
|
13023
|
+
return /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-x-3", children: [
|
|
13024
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
13025
|
+
/* @__PURE__ */ jsx(Form$2.Label, { optional: true, children: "Custom amount" }),
|
|
13026
|
+
/* @__PURE__ */ jsx(Form$2.Hint, { children: "Set a custom amount for the shipping option." })
|
|
13027
|
+
] }),
|
|
13028
|
+
/* @__PURE__ */ jsx(Form$2.Control, { children: /* @__PURE__ */ jsx(
|
|
13029
|
+
CurrencyInput,
|
|
13027
13030
|
{
|
|
13028
|
-
|
|
13029
|
-
|
|
13030
|
-
|
|
13031
|
-
|
|
13031
|
+
...field,
|
|
13032
|
+
onValueChange: (value) => onChange(value),
|
|
13033
|
+
symbol: getNativeSymbol(currencyCode),
|
|
13034
|
+
code: currencyCode
|
|
13032
13035
|
}
|
|
13033
13036
|
) })
|
|
13034
|
-
] })
|
|
13035
|
-
|
|
13037
|
+
] });
|
|
13038
|
+
}
|
|
13036
13039
|
}
|
|
13037
13040
|
);
|
|
13038
13041
|
};
|
|
13039
|
-
const schema = objectType({
|
|
13040
|
-
customer_id: stringType().min(1)
|
|
13041
|
-
});
|
|
13042
13042
|
const widgetModule = { widgets: [] };
|
|
13043
13043
|
const routeModule = {
|
|
13044
13044
|
routes: [
|
|
@@ -13059,14 +13059,14 @@ const routeModule = {
|
|
|
13059
13059
|
handle,
|
|
13060
13060
|
loader,
|
|
13061
13061
|
children: [
|
|
13062
|
-
{
|
|
13063
|
-
Component: CustomItems,
|
|
13064
|
-
path: "/draft-orders/:id/custom-items"
|
|
13065
|
-
},
|
|
13066
13062
|
{
|
|
13067
13063
|
Component: BillingAddress,
|
|
13068
13064
|
path: "/draft-orders/:id/billing-address"
|
|
13069
13065
|
},
|
|
13066
|
+
{
|
|
13067
|
+
Component: CustomItems,
|
|
13068
|
+
path: "/draft-orders/:id/custom-items"
|
|
13069
|
+
},
|
|
13070
13070
|
{
|
|
13071
13071
|
Component: Email,
|
|
13072
13072
|
path: "/draft-orders/:id/email"
|
|
@@ -13075,21 +13075,17 @@ const routeModule = {
|
|
|
13075
13075
|
Component: Items,
|
|
13076
13076
|
path: "/draft-orders/:id/items"
|
|
13077
13077
|
},
|
|
13078
|
-
{
|
|
13079
|
-
Component: Promotions,
|
|
13080
|
-
path: "/draft-orders/:id/promotions"
|
|
13081
|
-
},
|
|
13082
13078
|
{
|
|
13083
13079
|
Component: Metadata,
|
|
13084
13080
|
path: "/draft-orders/:id/metadata"
|
|
13085
13081
|
},
|
|
13086
13082
|
{
|
|
13087
|
-
Component:
|
|
13088
|
-
path: "/draft-orders/:id/
|
|
13083
|
+
Component: Promotions,
|
|
13084
|
+
path: "/draft-orders/:id/promotions"
|
|
13089
13085
|
},
|
|
13090
13086
|
{
|
|
13091
|
-
Component:
|
|
13092
|
-
path: "/draft-orders/:id/
|
|
13087
|
+
Component: SalesChannel,
|
|
13088
|
+
path: "/draft-orders/:id/sales-channel"
|
|
13093
13089
|
},
|
|
13094
13090
|
{
|
|
13095
13091
|
Component: ShippingAddress,
|
|
@@ -13098,6 +13094,10 @@ const routeModule = {
|
|
|
13098
13094
|
{
|
|
13099
13095
|
Component: TransferOwnership,
|
|
13100
13096
|
path: "/draft-orders/:id/transfer-ownership"
|
|
13097
|
+
},
|
|
13098
|
+
{
|
|
13099
|
+
Component: Shipping,
|
|
13100
|
+
path: "/draft-orders/:id/shipping"
|
|
13101
13101
|
}
|
|
13102
13102
|
]
|
|
13103
13103
|
}
|