orders-list.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import React from "react";
  2. import Button from "../../shared/button";
  3. import { useAdminProduct } from "medusa-react";
  4. import { useAdminCreateDraftOrder } from "medusa-react";
  5. import { useAdminShippingOptions } from "medusa-react";
  6. import { useAdminRegions } from "medusa-react";
  7. import { useMedusa } from "medusa-react";
  8. import { StepContentProps } from "../../../widgets/onboarding-flow/onboarding-flow";
  9. const OrdersList = ({ onNext, isComplete, data }: StepContentProps) => {
  10. const { product } = useAdminProduct(data.product_id);
  11. const { mutateAsync: createDraftOrder, isLoading } =
  12. useAdminCreateDraftOrder();
  13. const { client } = useMedusa();
  14. const { regions } = useAdminRegions();
  15. const { shipping_options } = useAdminShippingOptions();
  16. const createOrder = async () => {
  17. const variant = product.variants[0] ?? null;
  18. try {
  19. const { draft_order } = await createDraftOrder({
  20. email: "customer@medusajs.com",
  21. items: [
  22. variant
  23. ? {
  24. quantity: 1,
  25. variant_id: variant.id,
  26. }
  27. : {
  28. quantity: 1,
  29. title: product.title,
  30. unit_price: 50,
  31. },
  32. ],
  33. shipping_methods: [
  34. {
  35. option_id: shipping_options[0].id,
  36. },
  37. ],
  38. region_id: regions[0].id,
  39. });
  40. const { order } = await client.admin.draftOrders.markPaid(draft_order.id);
  41. onNext(order);
  42. } catch (e) {
  43. console.error(e);
  44. }
  45. };
  46. return (
  47. <>
  48. <div className="py-4">
  49. <p>
  50. With a Product created, we can now place an Order. Click the button
  51. below to create a sample order.
  52. </p>
  53. </div>
  54. <div className="flex gap-2">
  55. {!isComplete && (
  56. <Button
  57. variant="primary"
  58. size="small"
  59. onClick={() => createOrder()}
  60. loading={isLoading}
  61. >
  62. Create a sample order
  63. </Button>
  64. )}
  65. </div>
  66. </>
  67. );
  68. };
  69. export default OrdersList;