@medusajs/draft-order 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/.medusa/server/src/admin/components/common/action-menu.js +77 -0
  2. package/.medusa/server/src/admin/components/common/conditional-tooltip.js +15 -0
  3. package/.medusa/server/src/admin/components/common/data-table.js +249 -0
  4. package/.medusa/server/src/admin/components/common/form.js +151 -0
  5. package/.medusa/server/src/admin/components/common/inline-tip.js +42 -0
  6. package/.medusa/server/src/admin/components/common/keybound-form.js +32 -0
  7. package/.medusa/server/src/admin/components/common/page-skeleton.js +51 -0
  8. package/.medusa/server/src/admin/components/common/thumbnail.js +15 -0
  9. package/.medusa/server/src/admin/components/draft-orders/activity-section.js +205 -0
  10. package/.medusa/server/src/admin/components/draft-orders/customer-section.js +165 -0
  11. package/.medusa/server/src/admin/components/draft-orders/general-section.js +36 -0
  12. package/.medusa/server/src/admin/components/draft-orders/json-view-section.js +140 -0
  13. package/.medusa/server/src/admin/components/draft-orders/metadata-section.js +28 -0
  14. package/.medusa/server/src/admin/components/draft-orders/shipping-section.js +211 -0
  15. package/.medusa/server/src/admin/components/draft-orders/summary-section.js +148 -0
  16. package/.medusa/server/src/admin/components/inputs/combobox.js +311 -0
  17. package/.medusa/server/src/admin/components/inputs/country-select.js +59 -0
  18. package/.medusa/server/src/admin/components/inputs/number-input.js +100 -0
  19. package/.medusa/server/src/admin/components/inputs/switch-block.js +30 -0
  20. package/.medusa/server/src/admin/components/modals/index.js +19 -0
  21. package/.medusa/server/src/admin/components/modals/route-drawer/index.js +4 -0
  22. package/.medusa/server/src/admin/components/modals/route-drawer/route-drawer.js +57 -0
  23. package/.medusa/server/src/admin/components/modals/route-focus-modal/index.js +4 -0
  24. package/.medusa/server/src/admin/components/modals/route-focus-modal/route-focus-modal.js +71 -0
  25. package/.medusa/server/src/admin/components/modals/route-modal-form/index.js +4 -0
  26. package/.medusa/server/src/admin/components/modals/route-modal-form/route-modal-form.js +60 -0
  27. package/.medusa/server/src/admin/components/modals/route-modal-provider/index.js +6 -0
  28. package/.medusa/server/src/admin/components/modals/route-modal-provider/route-modal-context.js +5 -0
  29. package/.medusa/server/src/admin/components/modals/route-modal-provider/route-provider.js +30 -0
  30. package/.medusa/server/src/admin/components/modals/route-modal-provider/use-route-modal.js +12 -0
  31. package/.medusa/server/src/admin/components/modals/stacked-drawer/index.js +5 -0
  32. package/.medusa/server/src/admin/components/modals/stacked-drawer/stacked-drawer.js +55 -0
  33. package/.medusa/server/src/admin/components/modals/stacked-focus-modal/index.js +5 -0
  34. package/.medusa/server/src/admin/components/modals/stacked-focus-modal/stacked-focus-modal.js +63 -0
  35. package/.medusa/server/src/admin/components/modals/stacked-modal-provider/index.js +6 -0
  36. package/.medusa/server/src/admin/components/modals/stacked-modal-provider/stacked-modal-context.js +5 -0
  37. package/.medusa/server/src/admin/components/modals/stacked-modal-provider/stacked-modal-provider.js +47 -0
  38. package/.medusa/server/src/admin/components/modals/stacked-modal-provider/use-stacked-modal.js +14 -0
  39. package/.medusa/server/src/admin/components/utilities/generic-forward-ref.js +7 -0
  40. package/.medusa/server/src/admin/hooks/api/customers.js +53 -0
  41. package/.medusa/server/src/admin/hooks/api/draft-orders.js +161 -0
  42. package/.medusa/server/src/admin/hooks/api/orders.js +274 -0
  43. package/.medusa/server/src/admin/hooks/api/product-variants.js +21 -0
  44. package/.medusa/server/src/admin/hooks/api/regions.js +35 -0
  45. package/.medusa/server/src/admin/hooks/api/sales-channels.js +35 -0
  46. package/.medusa/server/src/admin/hooks/api/shipping-options.js +35 -0
  47. package/.medusa/server/src/admin/hooks/api/users.js +26 -0
  48. package/.medusa/server/src/admin/hooks/common/use-combobox-data.js +61 -0
  49. package/.medusa/server/src/admin/hooks/common/use-data-table-date-filters.js +89 -0
  50. package/.medusa/server/src/admin/hooks/common/use-debounced-search.js +22 -0
  51. package/.medusa/server/src/admin/hooks/common/use-query-params.js +14 -0
  52. package/.medusa/server/src/admin/hooks/order-edits/use-cancel-order-edit.js +25 -0
  53. package/.medusa/server/src/admin/hooks/order-edits/use-initiate-order-edit.js +39 -0
  54. package/.medusa/server/src/admin/lib/data/countries.js +1762 -0
  55. package/.medusa/server/src/admin/lib/data/currencies.js +36 -0
  56. package/.medusa/server/src/admin/lib/queries/draft-order-details.js +1 -0
  57. package/.medusa/server/src/admin/lib/queries/sdk.js +10 -0
  58. package/.medusa/server/src/admin/lib/schemas/address.js +16 -0
  59. package/.medusa/server/src/admin/lib/utils/address-utils.js +57 -0
  60. package/.medusa/server/src/admin/lib/utils/date-utils.js +27 -0
  61. package/.medusa/server/src/admin/lib/utils/order-utils.js +13 -0
  62. package/.medusa/server/src/admin/routes/draft-orders/@create/page.js +659 -0
  63. package/.medusa/server/src/admin/routes/draft-orders/_id_/@billing-address/page.js +228 -0
  64. package/.medusa/server/src/admin/routes/draft-orders/_id_/@custom-items/page.js +38 -0
  65. package/.medusa/server/src/admin/routes/draft-orders/_id_/@email/page.js +89 -0
  66. package/.medusa/server/src/admin/routes/draft-orders/_id_/@items/page.js +576 -0
  67. package/.medusa/server/src/admin/routes/draft-orders/_id_/@metadata/page.js +338 -0
  68. package/.medusa/server/src/admin/routes/draft-orders/_id_/@promotions/page.js +70 -0
  69. package/.medusa/server/src/admin/routes/draft-orders/_id_/@sales-channel/page.js +113 -0
  70. package/.medusa/server/src/admin/routes/draft-orders/_id_/@shipping/page.js +465 -0
  71. package/.medusa/server/src/admin/routes/draft-orders/_id_/@shipping-address/page.js +241 -0
  72. package/.medusa/server/src/admin/routes/draft-orders/_id_/page.js +70 -0
  73. package/.medusa/server/src/admin/routes/draft-orders/page.js +148 -0
  74. package/.medusa/server/src/api/admin/draft-orders/[id]/convert/route.js +18 -0
  75. package/.medusa/server/src/types/http/draft-orders/payloads.js +3 -0
  76. package/.medusa/server/src/types/http/draft-orders/responses.js +3 -0
  77. package/.medusa/server/src/types/http/orders/entity.js +3 -0
  78. package/.medusa/server/src/types/http/orders/requests.js +3 -0
  79. package/.medusa/server/src/workflows/draft-orders/convert-draft-order-workflow.js +54 -0
  80. package/.medusa/server/tailwind.config.js +12 -0
  81. package/README.md +64 -0
  82. package/package.json +104 -0
@@ -0,0 +1,61 @@
1
+ import { useQuery, useInfiniteQuery, keepPreviousData } from "@tanstack/react-query";
2
+ import { useDebouncedSearch } from "./use-debounced-search.js";
3
+ const useComboboxData = ({
4
+ queryKey,
5
+ queryFn,
6
+ getOptions,
7
+ defaultValue,
8
+ defaultValueKey,
9
+ pageSize = 10,
10
+ enabled = true
11
+ }) => {
12
+ const { searchValue, onSearchValueChange, query } = useDebouncedSearch();
13
+ const queryInitialDataBy = defaultValueKey || "id";
14
+ const { data: initialData } = useQuery({
15
+ queryKey,
16
+ queryFn: async () => {
17
+ return queryFn({
18
+ [queryInitialDataBy]: defaultValue,
19
+ limit: Array.isArray(defaultValue) ? defaultValue.length : 1
20
+ });
21
+ },
22
+ enabled: !!defaultValue
23
+ });
24
+ const { data, ...rest } = useInfiniteQuery({
25
+ queryKey: [...queryKey, query],
26
+ queryFn: async ({ pageParam = 0 }) => {
27
+ return await queryFn({
28
+ q: query,
29
+ limit: pageSize,
30
+ offset: pageParam
31
+ });
32
+ },
33
+ initialPageParam: 0,
34
+ getNextPageParam: (lastPage) => {
35
+ const moreItemsExist = lastPage.count > lastPage.offset + lastPage.limit;
36
+ return moreItemsExist ? lastPage.offset + lastPage.limit : void 0;
37
+ },
38
+ placeholderData: keepPreviousData,
39
+ enabled
40
+ });
41
+ const options = (data == null ? void 0 : data.pages.flatMap((page) => getOptions(page))) ?? [];
42
+ const defaultOptions = initialData ? getOptions(initialData) : [];
43
+ const disabled = !rest.isPending && !options.length && !searchValue;
44
+ if (defaultValue && defaultOptions.length && !searchValue) {
45
+ defaultOptions.forEach((option) => {
46
+ if (!options.find((o) => o.value === option.value)) {
47
+ options.unshift(option);
48
+ }
49
+ });
50
+ }
51
+ return {
52
+ options,
53
+ searchValue,
54
+ onSearchValueChange,
55
+ disabled,
56
+ ...rest
57
+ };
58
+ };
59
+ export {
60
+ useComboboxData
61
+ };
@@ -0,0 +1,89 @@
1
+ import { createDataTableFilterHelper } from "@medusajs/ui";
2
+ import { subDays, subMonths } from "date-fns";
3
+ import { useMemo } from "react";
4
+ import { getFullDate } from "../../lib/utils/date-utils.js";
5
+ const filterHelper = createDataTableFilterHelper();
6
+ const useDateFilterOptions = () => {
7
+ const today = useMemo(() => {
8
+ const date = /* @__PURE__ */ new Date();
9
+ date.setHours(0, 0, 0, 0);
10
+ return date;
11
+ }, []);
12
+ return useMemo(() => {
13
+ return [
14
+ {
15
+ label: "Today",
16
+ value: {
17
+ $gte: today.toISOString()
18
+ }
19
+ },
20
+ {
21
+ label: "Last 7 days",
22
+ value: {
23
+ $gte: subDays(today, 7).toISOString()
24
+ // 7 days ago
25
+ }
26
+ },
27
+ {
28
+ label: "Last 30 days",
29
+ value: {
30
+ $gte: subDays(today, 30).toISOString()
31
+ // 30 days ago
32
+ }
33
+ },
34
+ {
35
+ label: "Last 90 days",
36
+ value: {
37
+ $gte: subDays(today, 90).toISOString()
38
+ // 90 days ago
39
+ }
40
+ },
41
+ {
42
+ label: "Last 12 months",
43
+ value: {
44
+ $gte: subMonths(today, 12).toISOString()
45
+ // 12 months ago
46
+ }
47
+ }
48
+ ];
49
+ }, [today]);
50
+ };
51
+ const useDataTableDateFilters = (disableRangeOption) => {
52
+ const dateFilterOptions = useDateFilterOptions();
53
+ const rangeOptions = useMemo(() => {
54
+ if (disableRangeOption) {
55
+ return {
56
+ disableRangeOption: true
57
+ };
58
+ }
59
+ return {
60
+ rangeOptionStartLabel: "Starting",
61
+ rangeOptionEndLabel: "Ending",
62
+ rangeOptionLabel: "Custom",
63
+ options: dateFilterOptions
64
+ };
65
+ }, [disableRangeOption, dateFilterOptions]);
66
+ return useMemo(() => {
67
+ return [
68
+ filterHelper.accessor("created_at", {
69
+ type: "date",
70
+ label: "Created at",
71
+ format: "date",
72
+ formatDateValue: (date) => getFullDate({ date }),
73
+ options: dateFilterOptions,
74
+ ...rangeOptions
75
+ }),
76
+ filterHelper.accessor("updated_at", {
77
+ type: "date",
78
+ label: "Updated at",
79
+ format: "date",
80
+ formatDateValue: (date) => getFullDate({ date }),
81
+ options: dateFilterOptions,
82
+ ...rangeOptions
83
+ })
84
+ ];
85
+ }, [dateFilterOptions, getFullDate, rangeOptions]);
86
+ };
87
+ export {
88
+ useDataTableDateFilters
89
+ };
@@ -0,0 +1,22 @@
1
+ import debounce from "/Users/oliverjuhl/Desktop/medusa/draft-order-plugin/node_modules/lodash/debounce.js";
2
+ import { useState, useCallback, useEffect } from "react";
3
+ const useDebouncedSearch = () => {
4
+ const [searchValue, onSearchValueChange] = useState("");
5
+ const [debouncedQuery, setDebouncedQuery] = useState("");
6
+ const debouncedUpdate = useCallback(
7
+ debounce((query) => setDebouncedQuery(query), 300),
8
+ []
9
+ );
10
+ useEffect(() => {
11
+ debouncedUpdate(searchValue);
12
+ return () => debouncedUpdate.cancel();
13
+ }, [searchValue, debouncedUpdate]);
14
+ return {
15
+ searchValue,
16
+ onSearchValueChange,
17
+ query: debouncedQuery
18
+ };
19
+ };
20
+ export {
21
+ useDebouncedSearch
22
+ };
@@ -0,0 +1,14 @@
1
+ import { useSearchParams } from "react-router-dom";
2
+ function useQueryParams(keys, prefix) {
3
+ const [params] = useSearchParams();
4
+ const result = {};
5
+ keys.forEach((key) => {
6
+ const prefixedKey = prefix ? `${prefix}_${key}` : key;
7
+ const value = params.get(prefixedKey) || void 0;
8
+ result[key] = value;
9
+ });
10
+ return result;
11
+ }
12
+ export {
13
+ useQueryParams
14
+ };
@@ -0,0 +1,25 @@
1
+ import { toast } from "@medusajs/ui";
2
+ import { useCallback } from "react";
3
+ import { useOrderEditCancel } from "../api/orders.js";
4
+ const useCancelOrderEdit = ({ preview }) => {
5
+ const { mutateAsync: cancelOrderEdit } = useOrderEditCancel(preview == null ? void 0 : preview.id);
6
+ const onCancel = useCallback(async () => {
7
+ if (!preview) {
8
+ return true;
9
+ }
10
+ let res = false;
11
+ await cancelOrderEdit(void 0, {
12
+ onError: (e) => {
13
+ toast.error(e.message);
14
+ },
15
+ onSuccess: () => {
16
+ res = true;
17
+ }
18
+ });
19
+ return res;
20
+ }, [preview, cancelOrderEdit]);
21
+ return { onCancel };
22
+ };
23
+ export {
24
+ useCancelOrderEdit
25
+ };
@@ -0,0 +1,39 @@
1
+ import { toast } from "@medusajs/ui";
2
+ import { useEffect } from "react";
3
+ import { useNavigate } from "react-router-dom";
4
+ import { useOrderEditCreate } from "../api/orders.js";
5
+ let IS_REQUEST_RUNNING = false;
6
+ const useInitiateOrderEdit = ({
7
+ preview
8
+ }) => {
9
+ const navigate = useNavigate();
10
+ const { mutateAsync } = useOrderEditCreate(preview == null ? void 0 : preview.id);
11
+ useEffect(() => {
12
+ async function run() {
13
+ if (IS_REQUEST_RUNNING || !preview) {
14
+ return;
15
+ }
16
+ if (preview.order_change) {
17
+ return;
18
+ }
19
+ IS_REQUEST_RUNNING = true;
20
+ await mutateAsync(
21
+ {
22
+ order_id: preview.id
23
+ },
24
+ {
25
+ onError: (e) => {
26
+ toast.error(e.message);
27
+ navigate(`/draft-orders/${preview.id}`, { replace: true });
28
+ return;
29
+ }
30
+ }
31
+ );
32
+ IS_REQUEST_RUNNING = false;
33
+ }
34
+ run();
35
+ }, [preview, navigate, mutateAsync]);
36
+ };
37
+ export {
38
+ useInitiateOrderEdit
39
+ };