@lodashventure/medusa-parcel-shipping 0.2.7 → 0.2.11

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.
@@ -12,7 +12,7 @@
12
12
  */
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.GET = void 0;
15
- const utils_1 = require("@medusajs/utils");
15
+ const utils_1 = require("@medusajs/framework/utils");
16
16
  const documents_1 = require("../../../../../modules/documents");
17
17
  const utils_2 = require("@medusajs/framework/utils");
18
18
  const GET = async (req, res) => {
@@ -20,11 +20,11 @@ const GET = async (req, res) => {
20
20
  const orderModuleService = req.scope.resolve(utils_2.Modules.ORDER);
21
21
  const lastOrders = await orderModuleService.listOrders({}, {
22
22
  order: {
23
- created_at: "DESC"
23
+ created_at: "DESC",
24
24
  },
25
25
  take: 1,
26
- select: ['*', 'item_total', 'shipping_total', 'tax_total'],
27
- relations: ['shipping_address', 'billing_address', 'items']
26
+ select: ["*", "item_total", "shipping_total", "tax_total"],
27
+ relations: ["shipping_address", "billing_address", "items"],
28
28
  });
29
29
  try {
30
30
  if (lastOrders && lastOrders.length) {
@@ -34,14 +34,14 @@ const GET = async (req, res) => {
34
34
  res.status(201).json(result);
35
35
  }
36
36
  else {
37
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, 'You need to have at least one order to see preview');
37
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "You need to have at least one order to see preview");
38
38
  }
39
39
  }
40
40
  catch (e) {
41
41
  res.status(400).json({
42
- message: e.message
42
+ message: e.message,
43
43
  });
44
44
  }
45
45
  };
46
46
  exports.GET = GET;
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RvY3VtZW50cy9wYWNraW5nLXNsaXAvcHJldmlldy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7R0FVRzs7O0FBTUgsMkNBQTZDO0FBRzdDLGdFQUFtRTtBQUVuRSxxREFBb0Q7QUFFN0MsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUFrQixFQUNsQixHQUFtQixFQUNuQixFQUFFO0lBRUYsTUFBTSxzQkFBc0IsR0FBMkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsNEJBQWdCLENBQUMsQ0FBQTtJQUUxRixNQUFNLGtCQUFrQixHQUF5QixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDaEUsZUFBTyxDQUFDLEtBQUssQ0FDZCxDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQWUsTUFBTSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFO1FBQ3JFLEtBQUssRUFBRTtZQUNMLFVBQVUsRUFBRSxNQUFNO1NBQ25CO1FBQ0QsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsQ0FBQztRQUMxRCxTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUM7S0FDNUQsQ0FBQyxDQUFBO0lBQ0YsSUFBSSxDQUFDO1FBQ0gsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sVUFBVSxHQUFHLEdBQXFCLENBQUM7WUFDekMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDL0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBdUMsQ0FBQyxDQUFBO1lBQzNILEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsb0RBQW9ELENBQ3JELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNqQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87U0FDckIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQTtBQXBDWSxRQUFBLEdBQUcsT0FvQ2YifQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RvY3VtZW50cy9wYWNraW5nLXNsaXAvcHJldmlldy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7R0FVRzs7O0FBR0gscURBQXdEO0FBR3hELGdFQUFvRTtBQUVwRSxxREFBb0Q7QUFFN0MsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sc0JBQXNCLEdBQzFCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDRCQUFnQixDQUFDLENBQUM7SUFFdEMsTUFBTSxrQkFBa0IsR0FBd0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQy9ELGVBQU8sQ0FBQyxLQUFLLENBQ2QsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFlLE1BQU0sa0JBQWtCLENBQUMsVUFBVSxDQUNoRSxFQUFFLEVBQ0Y7UUFDRSxLQUFLLEVBQUU7WUFDTCxVQUFVLEVBQUUsTUFBTTtTQUNuQjtRQUNELElBQUksRUFBRSxDQUFDO1FBQ1AsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLENBQUM7UUFDMUQsU0FBUyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO0tBQzVELENBQ0YsQ0FBQztJQUNGLElBQUksQ0FBQztRQUNILElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFVBQVUsR0FBRyxHQUFxQixDQUFDO1lBQ3pDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQy9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsdUJBQXVCLENBQ2pFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFDYixZQUF1QyxDQUN4QyxDQUFDO1lBQ0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixvREFBb0QsQ0FDckQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBdkNXLFFBQUEsR0FBRyxPQXVDZCJ9
@@ -15,7 +15,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.GET = exports.POST = void 0;
18
- const utils_1 = require("@medusajs/utils");
18
+ const utils_1 = require("@medusajs/framework/utils");
19
19
  const documents_1 = require("../../../../modules/documents");
20
20
  const utils_2 = require("@medusajs/framework/utils");
21
21
  const utils_3 = require("@medusajs/framework/utils");
@@ -26,8 +26,8 @@ const POST = async (req, res) => {
26
26
  try {
27
27
  const body = req.body;
28
28
  const order = await orderModuleService.retrieveOrder(body.order_id, {
29
- select: ['*', 'item_total', 'shipping_total', 'tax_total'],
30
- relations: ['shipping_address', 'billing_address', 'items']
29
+ select: ["*", "item_total", "shipping_total", "tax_total"],
30
+ relations: ["shipping_address", "billing_address", "items"],
31
31
  });
32
32
  if (order) {
33
33
  const result = await documentsModuleService.generatePackingSlipForOrder(order);
@@ -36,35 +36,32 @@ const POST = async (req, res) => {
36
36
  const { data: [orderWithPackingSlip], } = await query.graph({
37
37
  entity: "order",
38
38
  filters: {
39
- id: [
40
- order.id
41
- ]
39
+ id: [order.id],
42
40
  },
43
- fields: [
44
- "document_packing_slip.*",
45
- ],
41
+ fields: ["document_packing_slip.*"],
46
42
  });
47
- await (0, assign_packing_slip_1.default)(req.scope)
48
- .run({
43
+ await (0, assign_packing_slip_1.default)(req.scope).run({
49
44
  input: {
50
45
  orderId: order.id,
51
46
  newPackingSlipId: result.packingSlip.id,
52
- oldPackingSlipId: orderWithPackingSlip.document_packing_slip ? orderWithPackingSlip.document_packing_slip.id : undefined
53
- }
47
+ oldPackingSlipId: orderWithPackingSlip.document_packing_slip
48
+ ? orderWithPackingSlip.document_packing_slip.id
49
+ : undefined,
50
+ },
54
51
  });
55
52
  res.status(201).json(result);
56
53
  }
57
54
  else {
58
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, 'Packing slip not generated');
55
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Packing slip not generated");
59
56
  }
60
57
  }
61
58
  else {
62
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, 'Invalid order id');
59
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid order id");
63
60
  }
64
61
  }
65
62
  catch (e) {
66
63
  res.status(400).json({
67
- message: e.message
64
+ message: e.message,
68
65
  });
69
66
  }
70
67
  };
@@ -78,35 +75,31 @@ const GET = async (req, res) => {
78
75
  const { data: [orderWithPackingSlip], } = await query.graph({
79
76
  entity: "order",
80
77
  filters: {
81
- id: [
82
- orderId
83
- ]
78
+ id: [orderId],
84
79
  },
85
- fields: [
86
- "document_packing_slip.*",
87
- ],
80
+ fields: ["document_packing_slip.*"],
88
81
  });
89
82
  if (orderWithPackingSlip.document_packing_slip && orderId) {
90
83
  const orderModuleService = req.scope.resolve(utils_2.Modules.ORDER);
91
84
  const orderDto = await orderModuleService.retrieveOrder(orderId, {
92
- select: ['*', 'item_total', 'shipping_total', 'tax_total'],
93
- relations: ['shipping_address', 'billing_address', 'items']
85
+ select: ["*", "item_total", "shipping_total", "tax_total"],
86
+ relations: ["shipping_address", "billing_address", "items"],
94
87
  });
95
88
  const result = await documentsModuleService.getPackingSlip(orderDto, orderWithPackingSlip.document_packing_slip.id, includeBuffer !== undefined);
96
89
  res.status(200).json(result);
97
90
  }
98
91
  else {
99
92
  const result = {
100
- packingSlip: undefined
93
+ packingSlip: undefined,
101
94
  };
102
95
  res.status(200).json(result);
103
96
  }
104
97
  }
105
98
  catch (e) {
106
99
  res.status(400).json({
107
- message: e.message
100
+ message: e.message,
108
101
  });
109
102
  }
110
103
  };
111
104
  exports.GET = GET;
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RvY3VtZW50cy9wYWNraW5nLXNsaXAvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0dBVUc7Ozs7OztBQU9ILDJDQUE2QztBQUU3Qyw2REFBZ0U7QUFDaEUscURBQW9EO0FBQ3BELHFEQUFzRTtBQUN0RSxzR0FBMEY7QUFHbkYsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixHQUFrQixFQUNsQixHQUFtQixFQUNuQixFQUFFO0lBRUYsTUFBTSxzQkFBc0IsR0FBMkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsNEJBQWdCLENBQUMsQ0FBQTtJQUMxRixNQUFNLGtCQUFrQixHQUF5QixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDaEUsZUFBTyxDQUFDLEtBQUssQ0FDZCxDQUFDO0lBRUYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQVEsR0FBRyxDQUFDLElBQVcsQ0FBQztRQUNsQyxNQUFNLEtBQUssR0FBYSxNQUFNLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzVFLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDO1lBQzFELFNBQVMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztTQUM1RCxDQUFDLENBQUE7UUFDRixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUM5RSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxD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
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RvY3VtZW50cy9wYWNraW5nLXNsaXAvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0dBVUc7Ozs7OztBQUlILHFEQUF3RDtBQUV4RCw2REFBaUU7QUFDakUscURBQW9EO0FBQ3BELHFEQUFzRTtBQUN0RSxzR0FBMkY7QUFFcEYsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ3BFLE1BQU0sc0JBQXNCLEdBQzFCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDRCQUFnQixDQUFDLENBQUM7SUFDdEMsTUFBTSxrQkFBa0IsR0FBd0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQy9ELGVBQU8sQ0FBQyxLQUFLLENBQ2QsQ0FBQztJQUVGLElBQUksQ0FBQztRQUNILE1BQU0sSUFBSSxHQUFRLEdBQUcsQ0FBQyxJQUFXLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQWEsTUFBTSxrQkFBa0IsQ0FBQyxhQUFhLENBQzVELElBQUksQ0FBQyxRQUFRLEVBQ2I7WUFDRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsQ0FBQztZQUMxRCxTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUM7U0FDNUQsQ0FDRixDQUFDO1FBQ0YsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sTUFBTSxHQUNWLE1BQU0sc0JBQXNCLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEUsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsb0JBQW9CLENBQUMsR0FDN0IsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7b0JBQ3BCLE1BQU0sRUFBRSxPQUFPO29CQUNmLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO3FCQUNmO29CQUNELE1BQU0sRUFBRSxDQUFDLHlCQUF5QixDQUFDO2lCQUNwQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxJQUFBLDZCQUFnQyxFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQ3BELEtBQUssRUFBRTt3QkFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQ2pCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTt3QkFDdkMsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMscUJBQXFCOzRCQUMxRCxDQUFDLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsRUFBRTs0QkFDL0MsQ0FBQyxDQUFDLFNBQVM7cUJBQ2Q7aUJBQ0YsQ0FBQyxDQUFDO2dCQUNILEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qiw0QkFBNEIsQ0FDN0IsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBdERXLFFBQUEsSUFBSSxRQXNEZjtBQUVLLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLHNCQUFzQixHQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyw0QkFBZ0IsQ0FBQyxDQUFDO0lBRXRDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBaUIsQ0FBQztJQUM1QyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztJQUU5QyxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsb0JBQW9CLENBQUMsR0FDN0IsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDcEIsTUFBTSxFQUFFLE9BQU87WUFDZixPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ2Q7WUFDRCxNQUFNLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztTQUNwQyxDQUFDLENBQUM7UUFDSCxJQUFJLG9CQUFvQixDQUFDLHFCQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzFELE1BQU0sa0JBQWtCLEdBQXdCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUMvRCxlQUFPLENBQUMsS0FBSyxDQUNkLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUU7Z0JBQy9ELE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDO2dCQUMxRCxTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUM7YUFDNUQsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxjQUFjLENBQ3hELFFBQVEsRUFDUixvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQzdDLGFBQWEsS0FBSyxTQUFTLENBQzVCLENBQUM7WUFDRixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sTUFBTSxHQUFHO2dCQUNiLFdBQVcsRUFBRSxTQUFTO2FBQ3ZCLENBQUM7WUFDRixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMsQ0FBQztBQTNDVyxRQUFBLEdBQUcsT0EyQ2QifQ==
@@ -14,7 +14,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- const utils_1 = require("@medusajs/utils");
17
+ const utils_1 = require("@medusajs/framework/utils");
18
18
  const utils_2 = require("@medusajs/framework/utils");
19
19
  const document_packing_slip_1 = __importDefault(require("./models/document-packing-slip"));
20
20
  const document_settings_1 = __importDefault(require("./models/document-settings"));
@@ -25,7 +25,7 @@ const packing_slip_generator_1 = require("./services/generators/packing-slip-gen
25
25
  class DocumentsModuleService extends (0, utils_2.MedusaService)({
26
26
  DocumentPackingSlip: document_packing_slip_1.default,
27
27
  DocumentSettings: document_settings_1.default,
28
- DocumentPackingSlipSettings: document_packing_slip_settings_1.default
28
+ DocumentPackingSlipSettings: document_packing_slip_settings_1.default,
29
29
  }) {
30
30
  constructor({}, options) {
31
31
  super(...arguments);
@@ -34,26 +34,26 @@ class DocumentsModuleService extends (0, utils_2.MedusaService)({
34
34
  async getNextPackingSlipNumber() {
35
35
  const lastPackingSlip = await this.listDocumentPackingSlips({}, {
36
36
  order: {
37
- created_at: "DESC"
37
+ created_at: "DESC",
38
38
  },
39
- take: 1
39
+ take: 1,
40
40
  });
41
41
  if (lastPackingSlip && lastPackingSlip.length) {
42
42
  return (lastPackingSlip[0].number + 1).toString();
43
43
  }
44
- return '1';
44
+ return "1";
45
45
  }
46
46
  async getPackingSlip(order, packingSlipId, includeBuffer = false) {
47
47
  if (includeBuffer) {
48
48
  const packingSlip = await this.retrieveDocumentPackingSlip(packingSlipId, {
49
- relations: ['packingSlipSettings', 'settings']
49
+ relations: ["packingSlipSettings", "settings"],
50
50
  });
51
51
  if (packingSlip) {
52
52
  const calculatedTemplateKind = this.calculatePackingSlipTemplateKind(packingSlip.packingSlipSettings);
53
53
  const buffer = await (0, packing_slip_generator_1.generatePackingSlip)(calculatedTemplateKind, packingSlip.settings, packingSlip, order);
54
54
  return {
55
55
  packingSlip: packingSlip,
56
- buffer: buffer
56
+ buffer: buffer,
57
57
  };
58
58
  }
59
59
  }
@@ -61,16 +61,16 @@ class DocumentsModuleService extends (0, utils_2.MedusaService)({
61
61
  const packingSlip = await this.retrieveDocumentPackingSlip(packingSlipId);
62
62
  return {
63
63
  packingSlip: packingSlip,
64
- buffer: undefined
64
+ buffer: undefined,
65
65
  };
66
66
  }
67
67
  }
68
68
  async generateTestPackingSlip(order, templateKind) {
69
69
  const lastDocumentSettings = await this.listDocumentSettings({}, {
70
70
  order: {
71
- created_at: "DESC"
71
+ created_at: "DESC",
72
72
  },
73
- take: 1
73
+ take: 1,
74
74
  });
75
75
  if (lastDocumentSettings && lastDocumentSettings.length) {
76
76
  const nextNumber = await this.getNextPackingSlipNumber();
@@ -79,12 +79,12 @@ class DocumentsModuleService extends (0, utils_2.MedusaService)({
79
79
  const testPackingSlip = {
80
80
  number: parseInt(nextNumber),
81
81
  displayNumber: nextNumber,
82
- created_at: new Date(Date.now())
82
+ created_at: new Date(Date.now()),
83
83
  };
84
84
  const buffer = await (0, packing_slip_generator_1.generatePackingSlip)(templateKind, lastDocumentSettings[0], testPackingSlip, order);
85
85
  return {
86
86
  packingSlip: testPackingSlip,
87
- buffer: buffer
87
+ buffer: buffer,
88
88
  };
89
89
  }
90
90
  else {
@@ -101,18 +101,19 @@ class DocumentsModuleService extends (0, utils_2.MedusaService)({
101
101
  async generatePackingSlipForOrder(order) {
102
102
  const lastDocumentSettings = await this.listDocumentSettings({}, {
103
103
  order: {
104
- created_at: "DESC"
104
+ created_at: "DESC",
105
105
  },
106
- take: 1
106
+ take: 1,
107
107
  });
108
108
  if (lastDocumentSettings && lastDocumentSettings.length) {
109
109
  const lastDocumentPackingSlipSettings = await this.listDocumentPackingSlipSettings({}, {
110
110
  order: {
111
- created_at: "DESC"
111
+ created_at: "DESC",
112
112
  },
113
- take: 1
113
+ take: 1,
114
114
  });
115
- if (lastDocumentPackingSlipSettings && lastDocumentPackingSlipSettings.length) {
115
+ if (lastDocumentPackingSlipSettings &&
116
+ lastDocumentPackingSlipSettings.length) {
116
117
  const packingSlipSettings = lastDocumentPackingSlipSettings[0];
117
118
  const calculatedTemplateKind = this.calculatePackingSlipTemplateKind(lastDocumentPackingSlipSettings[0]);
118
119
  const [validationPassed, info] = (0, packing_slip_generator_1.validateInputForProvidedKind)(calculatedTemplateKind, lastDocumentSettings[0]);
@@ -120,16 +121,18 @@ class DocumentsModuleService extends (0, utils_2.MedusaService)({
120
121
  const nextNumber = await this.getNextPackingSlipNumber();
121
122
  const entryPackingSlip = {
122
123
  number: parseInt(nextNumber),
123
- displayNumber: packingSlipSettings.numberFormat ? packingSlipSettings.numberFormat.replace(constants_1.PACKING_SLIP_NUMBER_PLACEHOLDER, nextNumber) : nextNumber,
124
+ displayNumber: packingSlipSettings.numberFormat
125
+ ? packingSlipSettings.numberFormat.replace(constants_1.PACKING_SLIP_NUMBER_PLACEHOLDER, nextNumber)
126
+ : nextNumber,
124
127
  created_at: new Date(Date.now()),
125
128
  packing_slip_settings_id: packingSlipSettings.id,
126
- settings_id: lastDocumentSettings[0].id
129
+ settings_id: lastDocumentSettings[0].id,
127
130
  };
128
131
  const packingSlipResult = await this.createDocumentPackingSlips(entryPackingSlip);
129
132
  const buffer = await (0, packing_slip_generator_1.generatePackingSlip)(calculatedTemplateKind, lastDocumentSettings[0], packingSlipResult, order);
130
133
  return {
131
134
  packingSlip: packingSlipResult,
132
- buffer: buffer
135
+ buffer: buffer,
133
136
  };
134
137
  }
135
138
  else {
@@ -137,32 +140,33 @@ class DocumentsModuleService extends (0, utils_2.MedusaService)({
137
140
  }
138
141
  }
139
142
  else {
140
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, 'No packing slip settings found');
143
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "No packing slip settings found");
141
144
  }
142
145
  }
143
146
  else {
144
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, 'No document settings found');
147
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "No document settings found");
145
148
  }
146
149
  }
147
150
  async createOrUpdatePackingSlipSettingsWithTemplate(packingSlipTemplate) {
148
151
  const lastDocumentPackingSlipSettings = await this.listDocumentPackingSlipSettings({}, {
149
152
  order: {
150
- created_at: "DESC"
153
+ created_at: "DESC",
151
154
  },
152
- take: 1
155
+ take: 1,
153
156
  });
154
- if (lastDocumentPackingSlipSettings && lastDocumentPackingSlipSettings.length) {
157
+ if (lastDocumentPackingSlipSettings &&
158
+ lastDocumentPackingSlipSettings.length) {
155
159
  const newDocumentSettings = {
156
160
  forcedNumber: lastDocumentPackingSlipSettings[0].forcedNumber,
157
161
  numberFormat: lastDocumentPackingSlipSettings[0].numberFormat,
158
- template: packingSlipTemplate
162
+ template: packingSlipTemplate,
159
163
  };
160
164
  const result = await this.createDocumentPackingSlipSettings(newDocumentSettings);
161
165
  return result;
162
166
  }
163
167
  else {
164
168
  const result = await this.createDocumentPackingSlipSettings({
165
- template: packingSlipTemplate
169
+ template: packingSlipTemplate,
166
170
  });
167
171
  return result;
168
172
  }
@@ -170,14 +174,17 @@ class DocumentsModuleService extends (0, utils_2.MedusaService)({
170
174
  async updatePackingSlipSettings(newFormatNumber, forcedNumber, template) {
171
175
  const lastDocumentPackingSlipSettings = await this.listDocumentPackingSlipSettings({}, {
172
176
  order: {
173
- created_at: "DESC"
177
+ created_at: "DESC",
174
178
  },
175
- take: 1
179
+ take: 1,
176
180
  });
177
- if (lastDocumentPackingSlipSettings && lastDocumentPackingSlipSettings.length) {
181
+ if (lastDocumentPackingSlipSettings &&
182
+ lastDocumentPackingSlipSettings.length) {
178
183
  const result = await this.createDocumentPackingSlipSettings({
179
184
  numberFormat: newFormatNumber ?? lastDocumentPackingSlipSettings[0].numberFormat,
180
- forcedNumber: forcedNumber ? parseInt(forcedNumber) : lastDocumentPackingSlipSettings[0].forcedNumber,
185
+ forcedNumber: forcedNumber
186
+ ? parseInt(forcedNumber)
187
+ : lastDocumentPackingSlipSettings[0].forcedNumber,
181
188
  template: template ?? lastDocumentPackingSlipSettings[0].template,
182
189
  });
183
190
  return result;
@@ -186,7 +193,7 @@ class DocumentsModuleService extends (0, utils_2.MedusaService)({
186
193
  const result = await this.createDocumentPackingSlipSettings({
187
194
  numberFormat: newFormatNumber,
188
195
  forcedNumber: forcedNumber ? parseInt(forcedNumber) : undefined,
189
- template: template
196
+ template: template,
190
197
  });
191
198
  return result;
192
199
  }
@@ -194,10 +201,10 @@ class DocumentsModuleService extends (0, utils_2.MedusaService)({
194
201
  async updateStoreDocumentAddress(address) {
195
202
  const lastDocumentSettings = await this.listDocumentSettings({}, {
196
203
  order: {
197
- created_at: "DESC"
204
+ created_at: "DESC",
198
205
  },
199
206
  take: 1,
200
- relations: ["documentPackingSlip"]
207
+ relations: ["documentPackingSlip"],
201
208
  });
202
209
  if (lastDocumentSettings && lastDocumentSettings.length) {
203
210
  const result = await this.createDocumentSettings({
@@ -216,4 +223,4 @@ class DocumentsModuleService extends (0, utils_2.MedusaService)({
216
223
  }
217
224
  }
218
225
  exports.default = DocumentsModuleService;
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvY3VtZW50cy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOzs7OztBQUVILDJDQUErRDtBQUMvRCxxREFBeUQ7QUFFekQsMkZBQWlFO0FBQ2pFLG1GQUEwRDtBQUMxRCw2R0FBa0Y7QUFFbEYseURBQWdFO0FBQ2hFLGlEQUFvRTtBQUNwRSx5RkFBNEo7QUFTNUosTUFBTSxzQkFBdUIsU0FBUSxJQUFBLHFCQUFhLEVBQUM7SUFDakQsbUJBQW1CLEVBQW5CLCtCQUFtQjtJQUNuQixnQkFBZ0IsRUFBaEIsMkJBQWdCO0lBQ2hCLDJCQUEyQixFQUEzQix3Q0FBMkI7Q0FDNUIsQ0FBQztJQUtBLFlBQVksRUFDVyxFQUFFLE9BQXVCO1FBQzlDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFBO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFTyxLQUFLLENBQUMsd0JBQXdCO1FBQ3BDLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsRUFBRTtZQUM5RCxLQUFLLEVBQUU7Z0JBQ0wsVUFBVSxFQUFFLE1BQU07YUFDbkI7WUFDRCxJQUFJLEVBQUUsQ0FBQztTQUNSLENBQUMsQ0FBQztRQUVILElBQUksZUFBZSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFlLEVBQUUsYUFBcUIsRUFBRSxnQkFBeUIsS0FBSztRQUN6RixJQUFJLGFBQWEsRUFBRSxD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
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvY3VtZW50cy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOzs7OztBQUVILHFEQUEwRTtBQUMxRSxxREFBMEQ7QUFFMUQsMkZBQWlFO0FBQ2pFLG1GQUEwRDtBQUMxRCw2R0FBa0Y7QUFFbEYseURBQWdFO0FBQ2hFLGlEQUFvRTtBQUNwRSx5RkFHc0Q7QUFPdEQsTUFBTSxzQkFBdUIsU0FBUSxJQUFBLHFCQUFhLEVBQUM7SUFDakQsbUJBQW1CLEVBQW5CLCtCQUFtQjtJQUNuQixnQkFBZ0IsRUFBaEIsMkJBQWdCO0lBQ2hCLDJCQUEyQixFQUEzQix3Q0FBMkI7Q0FDNUIsQ0FBQztJQUlBLFlBQVksRUFBd0IsRUFBRSxPQUF1QjtRQUMzRCxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRU8sS0FBSyxDQUFDLHdCQUF3QjtRQUNwQyxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FDekQsRUFBRSxFQUNGO1lBQ0UsS0FBSyxFQUFFO2dCQUNMLFVBQVUsRUFBRSxNQUFNO2FBQ25CO1lBQ0QsSUFBSSxFQUFFLENBQUM7U0FDUixDQUNGLENBQUM7UUFFRixJQUFJLGVBQWUsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEQsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQ2xCLEtBQWUsRUFDZixhQUFxQixFQUNyQixnQkFBeUIsS0FBSztRQUU5QixJQUFJLGFBQWEsRUFB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
@@ -4,6 +4,385 @@ const adminSdk = require("@medusajs/admin-sdk");
4
4
  const icons = require("@medusajs/icons");
5
5
  const react = require("react");
6
6
  const ui = require("@medusajs/ui");
7
+ const requestJson$1 = async (url, method = "GET", body) => {
8
+ const response = await fetch(url, {
9
+ method,
10
+ headers: {
11
+ "Content-Type": "application/json"
12
+ },
13
+ body: body ? JSON.stringify(body) : void 0,
14
+ credentials: "include"
15
+ });
16
+ if (!response.ok) {
17
+ let message = response.statusText;
18
+ try {
19
+ const payload = await response.json();
20
+ message = (payload == null ? void 0 : payload.code) ?? (payload == null ? void 0 : payload.error) ?? message;
21
+ } catch (_) {
22
+ }
23
+ throw new Error(message);
24
+ }
25
+ if (response.status === 204) {
26
+ return void 0;
27
+ }
28
+ return await response.json();
29
+ };
30
+ const toNumber$1 = (value) => {
31
+ if (value.trim().length === 0) {
32
+ return null;
33
+ }
34
+ const parsed = Number(value);
35
+ return Number.isFinite(parsed) ? parsed : null;
36
+ };
37
+ function ParcelBoxesPage() {
38
+ const [boxes, setBoxes] = react.useState([]);
39
+ const [loading, setLoading] = react.useState(true);
40
+ const [formState, setFormState] = react.useState({
41
+ id: null,
42
+ name: "",
43
+ width_cm: "",
44
+ length_cm: "",
45
+ height_cm: "",
46
+ max_weight_kg: "",
47
+ price_thb: "",
48
+ active: true
49
+ });
50
+ const [saving, setSaving] = react.useState(false);
51
+ const [deletingId, setDeletingId] = react.useState(null);
52
+ const refresh = react.useCallback(async () => {
53
+ setLoading(true);
54
+ try {
55
+ const data = await requestJson$1(
56
+ "/admin/parcel-boxes"
57
+ );
58
+ setBoxes(data.boxes ?? []);
59
+ } catch (error) {
60
+ ui.toast.error(error.message ?? "Failed to load boxes", {
61
+ dismissable: true
62
+ });
63
+ } finally {
64
+ setLoading(false);
65
+ }
66
+ }, []);
67
+ react.useEffect(() => {
68
+ refresh();
69
+ }, [refresh]);
70
+ const resetForm = () => setFormState({
71
+ id: null,
72
+ name: "",
73
+ width_cm: "",
74
+ length_cm: "",
75
+ height_cm: "",
76
+ max_weight_kg: "",
77
+ price_thb: "",
78
+ active: true
79
+ });
80
+ const handleSubmit = async () => {
81
+ const width = toNumber$1(formState.width_cm);
82
+ const length = toNumber$1(formState.length_cm);
83
+ const height = toNumber$1(formState.height_cm);
84
+ const maxWeight = toNumber$1(formState.max_weight_kg);
85
+ const price = toNumber$1(formState.price_thb);
86
+ if (!formState.name.trim() || width === null || length === null || height === null || maxWeight === null || price === null) {
87
+ ui.toast.error("Fill all fields with valid numeric values", {
88
+ dismissable: true
89
+ });
90
+ return;
91
+ }
92
+ const payload = {
93
+ name: formState.name.trim(),
94
+ width_cm: width,
95
+ length_cm: length,
96
+ height_cm: height,
97
+ max_weight_kg: maxWeight,
98
+ price_thb: price,
99
+ active: formState.active
100
+ };
101
+ setSaving(true);
102
+ try {
103
+ if (formState.id) {
104
+ await requestJson$1(
105
+ `/admin/parcel-boxes/${formState.id}`,
106
+ "PUT",
107
+ payload
108
+ );
109
+ ui.toast.success("Box updated", { dismissable: true });
110
+ } else {
111
+ await requestJson$1("/admin/parcel-boxes", "POST", payload);
112
+ ui.toast.success("Box created", { dismissable: true });
113
+ }
114
+ await refresh();
115
+ resetForm();
116
+ } catch (error) {
117
+ ui.toast.error(error.message ?? "Failed to save box", {
118
+ dismissable: true
119
+ });
120
+ } finally {
121
+ setSaving(false);
122
+ }
123
+ };
124
+ const handleDelete = async (id) => {
125
+ setDeletingId(id);
126
+ try {
127
+ await requestJson$1(`/admin/parcel-boxes/${id}`, "DELETE");
128
+ ui.toast.success("Box removed", { dismissable: true });
129
+ await refresh();
130
+ } catch (error) {
131
+ ui.toast.error(error.message ?? "Failed to delete box", {
132
+ dismissable: true
133
+ });
134
+ } finally {
135
+ setDeletingId(null);
136
+ }
137
+ };
138
+ const handleToggle = async (box) => {
139
+ try {
140
+ await requestJson$1(`/admin/parcel-boxes/${box.id}`, "PUT", {
141
+ active: !box.active
142
+ });
143
+ await refresh();
144
+ } catch (error) {
145
+ ui.toast.error(error.message ?? "Failed to update box status", {
146
+ dismissable: true
147
+ });
148
+ }
149
+ };
150
+ const tableRows = react.useMemo(() => {
151
+ if (loading) {
152
+ return /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Row, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { colSpan: 6, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-center text-ui-fg-subtle", children: "Loading boxes..." }) }) });
153
+ }
154
+ if (boxes.length === 0) {
155
+ return /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Row, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { colSpan: 6, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-center text-ui-fg-subtle", children: "No boxes configured yet." }) }) });
156
+ }
157
+ return boxes.map((box) => /* @__PURE__ */ jsxRuntime.jsxs(ui.Table.Row, { children: [
158
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "font-medium", children: box.name }) }),
159
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { className: "text-sm text-ui-fg-subtle", children: [
160
+ box.width_cm,
161
+ " × ",
162
+ box.length_cm,
163
+ " × ",
164
+ box.height_cm
165
+ ] }) }),
166
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: box.max_weight_kg }),
167
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: box.price_thb }),
168
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: box.active ? "green" : "grey", children: box.active ? "Active" : "Inactive" }) }),
169
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-2", children: [
170
+ /* @__PURE__ */ jsxRuntime.jsx(
171
+ ui.Switch,
172
+ {
173
+ checked: box.active,
174
+ onCheckedChange: () => handleToggle(box)
175
+ }
176
+ ),
177
+ /* @__PURE__ */ jsxRuntime.jsx(
178
+ ui.Button,
179
+ {
180
+ variant: "secondary",
181
+ size: "small",
182
+ onClick: () => setFormState({
183
+ id: box.id,
184
+ name: box.name,
185
+ width_cm: String(box.width_cm),
186
+ length_cm: String(box.length_cm),
187
+ height_cm: String(box.height_cm),
188
+ max_weight_kg: String(box.max_weight_kg),
189
+ price_thb: String(box.price_thb),
190
+ active: box.active
191
+ }),
192
+ children: "Edit"
193
+ }
194
+ ),
195
+ /* @__PURE__ */ jsxRuntime.jsx(
196
+ ui.Button,
197
+ {
198
+ variant: "danger",
199
+ size: "small",
200
+ onClick: () => handleDelete(box.id),
201
+ disabled: deletingId === box.id,
202
+ children: "Delete"
203
+ }
204
+ )
205
+ ] }) })
206
+ ] }, box.id));
207
+ }, [boxes, deletingId, loading]);
208
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "space-y-6 p-6", children: [
209
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
210
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h1", children: "Parcel Boxes" }),
211
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: "Configure and manage parcel box sizes and pricing." })
212
+ ] }),
213
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-4 rounded-md border p-4", children: [
214
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: formState.id ? "Edit Box" : "Create Box" }),
215
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-4 md:grid-cols-3", children: [
216
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
217
+ /* @__PURE__ */ jsxRuntime.jsx(
218
+ ui.Label,
219
+ {
220
+ className: "text-sm font-medium text-ui-fg-base",
221
+ htmlFor: "parcel-box-name",
222
+ children: "Name"
223
+ }
224
+ ),
225
+ /* @__PURE__ */ jsxRuntime.jsx(
226
+ ui.Input,
227
+ {
228
+ id: "parcel-box-name",
229
+ placeholder: "Enter box name",
230
+ value: formState.name,
231
+ onChange: (event) => setFormState((prev) => ({ ...prev, name: event.target.value }))
232
+ }
233
+ )
234
+ ] }),
235
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
236
+ /* @__PURE__ */ jsxRuntime.jsx(
237
+ ui.Label,
238
+ {
239
+ className: "text-sm font-medium text-ui-fg-base",
240
+ htmlFor: "parcel-box-width",
241
+ children: "Width (cm)"
242
+ }
243
+ ),
244
+ /* @__PURE__ */ jsxRuntime.jsx(
245
+ ui.Input,
246
+ {
247
+ id: "parcel-box-width",
248
+ placeholder: "e.g. 20",
249
+ type: "number",
250
+ value: formState.width_cm,
251
+ onChange: (event) => setFormState((prev) => ({
252
+ ...prev,
253
+ width_cm: event.target.value
254
+ }))
255
+ }
256
+ )
257
+ ] }),
258
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
259
+ /* @__PURE__ */ jsxRuntime.jsx(
260
+ ui.Label,
261
+ {
262
+ className: "text-sm font-medium text-ui-fg-base",
263
+ htmlFor: "parcel-box-length",
264
+ children: "Length (cm)"
265
+ }
266
+ ),
267
+ /* @__PURE__ */ jsxRuntime.jsx(
268
+ ui.Input,
269
+ {
270
+ id: "parcel-box-length",
271
+ placeholder: "e.g. 30",
272
+ type: "number",
273
+ value: formState.length_cm,
274
+ onChange: (event) => setFormState((prev) => ({
275
+ ...prev,
276
+ length_cm: event.target.value
277
+ }))
278
+ }
279
+ )
280
+ ] }),
281
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
282
+ /* @__PURE__ */ jsxRuntime.jsx(
283
+ ui.Label,
284
+ {
285
+ className: "text-sm font-medium text-ui-fg-base",
286
+ htmlFor: "parcel-box-height",
287
+ children: "Height (cm)"
288
+ }
289
+ ),
290
+ /* @__PURE__ */ jsxRuntime.jsx(
291
+ ui.Input,
292
+ {
293
+ id: "parcel-box-height",
294
+ placeholder: "e.g. 15",
295
+ type: "number",
296
+ value: formState.height_cm,
297
+ onChange: (event) => setFormState((prev) => ({
298
+ ...prev,
299
+ height_cm: event.target.value
300
+ }))
301
+ }
302
+ )
303
+ ] }),
304
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
305
+ /* @__PURE__ */ jsxRuntime.jsx(
306
+ ui.Label,
307
+ {
308
+ className: "text-sm font-medium text-ui-fg-base",
309
+ htmlFor: "parcel-box-max-weight",
310
+ children: "Max Weight (kg)"
311
+ }
312
+ ),
313
+ /* @__PURE__ */ jsxRuntime.jsx(
314
+ ui.Input,
315
+ {
316
+ id: "parcel-box-max-weight",
317
+ placeholder: "e.g. 0.5",
318
+ type: "number",
319
+ value: formState.max_weight_kg,
320
+ onChange: (event) => setFormState((prev) => ({
321
+ ...prev,
322
+ max_weight_kg: event.target.value
323
+ }))
324
+ }
325
+ )
326
+ ] }),
327
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
328
+ /* @__PURE__ */ jsxRuntime.jsx(
329
+ ui.Label,
330
+ {
331
+ className: "text-sm font-medium text-ui-fg-base",
332
+ htmlFor: "parcel-box-price",
333
+ children: "Box Price (THB)"
334
+ }
335
+ ),
336
+ /* @__PURE__ */ jsxRuntime.jsx(
337
+ ui.Input,
338
+ {
339
+ id: "parcel-box-price",
340
+ placeholder: "e.g. 10",
341
+ type: "number",
342
+ value: formState.price_thb,
343
+ onChange: (event) => setFormState((prev) => ({
344
+ ...prev,
345
+ price_thb: event.target.value
346
+ }))
347
+ }
348
+ )
349
+ ] })
350
+ ] }),
351
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
352
+ /* @__PURE__ */ jsxRuntime.jsx(
353
+ ui.Switch,
354
+ {
355
+ checked: formState.active,
356
+ onCheckedChange: (active) => setFormState((prev) => ({ ...prev, active }))
357
+ }
358
+ ),
359
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-sm text-ui-fg-subtle", children: "Active" })
360
+ ] }),
361
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-3", children: [
362
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: handleSubmit, disabled: saving, children: formState.id ? "Update" : "Create" }),
363
+ formState.id && /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: resetForm, children: "Cancel" })
364
+ ] })
365
+ ] }),
366
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-md border", children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Table, { children: [
367
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Header, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Table.Row, { children: [
368
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Name" }),
369
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Dimensions (cm)" }),
370
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Max Weight (kg)" }),
371
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Price" }),
372
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Status" }),
373
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { className: "text-right", children: "Actions" })
374
+ ] }) }),
375
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Body, { children: tableRows })
376
+ ] }) })
377
+ ] });
378
+ }
379
+ const ParcelBoxesRoute = () => {
380
+ return /* @__PURE__ */ jsxRuntime.jsx(ParcelBoxesPage, {});
381
+ };
382
+ const config$1 = adminSdk.defineRouteConfig({
383
+ label: "Parcel Boxes",
384
+ icon: icons.FlyingBox
385
+ });
7
386
  const requestJson = async (url, method = "GET", body) => {
8
387
  const response = await fetch(url, {
9
388
  method,
@@ -35,7 +414,7 @@ const toNumber = (value) => {
35
414
  return Number.isFinite(parsed) ? parsed : null;
36
415
  };
37
416
  const getThaiAddressComponents = () => null;
38
- const ParcelShippingPage = () => {
417
+ function ParcelShippingPage() {
39
418
  const [tab, setTab] = react.useState("boxes");
40
419
  return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "space-y-6 p-6", children: [
41
420
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -77,7 +456,7 @@ const ParcelShippingPage = () => {
77
456
  tab === "areas" && /* @__PURE__ */ jsxRuntime.jsx(AreasSection, {})
78
457
  ] })
79
458
  ] });
80
- };
459
+ }
81
460
  const BoxesSection = () => {
82
461
  const [boxes, setBoxes] = react.useState([]);
83
462
  const [loading, setLoading] = react.useState(true);
@@ -1136,6 +1515,10 @@ const config = adminSdk.defineRouteConfig({
1136
1515
  const widgetModule = { widgets: [] };
1137
1516
  const routeModule = {
1138
1517
  routes: [
1518
+ {
1519
+ Component: ParcelBoxesRoute,
1520
+ path: "/parcel-boxes"
1521
+ },
1139
1522
  {
1140
1523
  Component: ParcelShippingRoute,
1141
1524
  path: "/parcel-shipping"
@@ -1144,6 +1527,12 @@ const routeModule = {
1144
1527
  };
1145
1528
  const menuItemModule = {
1146
1529
  menuItems: [
1530
+ {
1531
+ label: config$1.label,
1532
+ icon: config$1.icon,
1533
+ path: "/parcel-boxes",
1534
+ nested: void 0
1535
+ },
1147
1536
  {
1148
1537
  label: config.label,
1149
1538
  icon: config.icon,
@@ -1,8 +1,387 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { defineRouteConfig } from "@medusajs/admin-sdk";
3
- import { Directions } from "@medusajs/icons";
3
+ import { FlyingBox, Directions } from "@medusajs/icons";
4
4
  import { useState, useCallback, useEffect, useMemo } from "react";
5
- import { Container, Heading, Text, Button, toast, Table, Badge, Switch, Label, Input } from "@medusajs/ui";
5
+ import { toast, Table, Text, Badge, Switch, Button, Container, Heading, Label, Input } from "@medusajs/ui";
6
+ const requestJson$1 = async (url, method = "GET", body) => {
7
+ const response = await fetch(url, {
8
+ method,
9
+ headers: {
10
+ "Content-Type": "application/json"
11
+ },
12
+ body: body ? JSON.stringify(body) : void 0,
13
+ credentials: "include"
14
+ });
15
+ if (!response.ok) {
16
+ let message = response.statusText;
17
+ try {
18
+ const payload = await response.json();
19
+ message = (payload == null ? void 0 : payload.code) ?? (payload == null ? void 0 : payload.error) ?? message;
20
+ } catch (_) {
21
+ }
22
+ throw new Error(message);
23
+ }
24
+ if (response.status === 204) {
25
+ return void 0;
26
+ }
27
+ return await response.json();
28
+ };
29
+ const toNumber$1 = (value) => {
30
+ if (value.trim().length === 0) {
31
+ return null;
32
+ }
33
+ const parsed = Number(value);
34
+ return Number.isFinite(parsed) ? parsed : null;
35
+ };
36
+ function ParcelBoxesPage() {
37
+ const [boxes, setBoxes] = useState([]);
38
+ const [loading, setLoading] = useState(true);
39
+ const [formState, setFormState] = useState({
40
+ id: null,
41
+ name: "",
42
+ width_cm: "",
43
+ length_cm: "",
44
+ height_cm: "",
45
+ max_weight_kg: "",
46
+ price_thb: "",
47
+ active: true
48
+ });
49
+ const [saving, setSaving] = useState(false);
50
+ const [deletingId, setDeletingId] = useState(null);
51
+ const refresh = useCallback(async () => {
52
+ setLoading(true);
53
+ try {
54
+ const data = await requestJson$1(
55
+ "/admin/parcel-boxes"
56
+ );
57
+ setBoxes(data.boxes ?? []);
58
+ } catch (error) {
59
+ toast.error(error.message ?? "Failed to load boxes", {
60
+ dismissable: true
61
+ });
62
+ } finally {
63
+ setLoading(false);
64
+ }
65
+ }, []);
66
+ useEffect(() => {
67
+ refresh();
68
+ }, [refresh]);
69
+ const resetForm = () => setFormState({
70
+ id: null,
71
+ name: "",
72
+ width_cm: "",
73
+ length_cm: "",
74
+ height_cm: "",
75
+ max_weight_kg: "",
76
+ price_thb: "",
77
+ active: true
78
+ });
79
+ const handleSubmit = async () => {
80
+ const width = toNumber$1(formState.width_cm);
81
+ const length = toNumber$1(formState.length_cm);
82
+ const height = toNumber$1(formState.height_cm);
83
+ const maxWeight = toNumber$1(formState.max_weight_kg);
84
+ const price = toNumber$1(formState.price_thb);
85
+ if (!formState.name.trim() || width === null || length === null || height === null || maxWeight === null || price === null) {
86
+ toast.error("Fill all fields with valid numeric values", {
87
+ dismissable: true
88
+ });
89
+ return;
90
+ }
91
+ const payload = {
92
+ name: formState.name.trim(),
93
+ width_cm: width,
94
+ length_cm: length,
95
+ height_cm: height,
96
+ max_weight_kg: maxWeight,
97
+ price_thb: price,
98
+ active: formState.active
99
+ };
100
+ setSaving(true);
101
+ try {
102
+ if (formState.id) {
103
+ await requestJson$1(
104
+ `/admin/parcel-boxes/${formState.id}`,
105
+ "PUT",
106
+ payload
107
+ );
108
+ toast.success("Box updated", { dismissable: true });
109
+ } else {
110
+ await requestJson$1("/admin/parcel-boxes", "POST", payload);
111
+ toast.success("Box created", { dismissable: true });
112
+ }
113
+ await refresh();
114
+ resetForm();
115
+ } catch (error) {
116
+ toast.error(error.message ?? "Failed to save box", {
117
+ dismissable: true
118
+ });
119
+ } finally {
120
+ setSaving(false);
121
+ }
122
+ };
123
+ const handleDelete = async (id) => {
124
+ setDeletingId(id);
125
+ try {
126
+ await requestJson$1(`/admin/parcel-boxes/${id}`, "DELETE");
127
+ toast.success("Box removed", { dismissable: true });
128
+ await refresh();
129
+ } catch (error) {
130
+ toast.error(error.message ?? "Failed to delete box", {
131
+ dismissable: true
132
+ });
133
+ } finally {
134
+ setDeletingId(null);
135
+ }
136
+ };
137
+ const handleToggle = async (box) => {
138
+ try {
139
+ await requestJson$1(`/admin/parcel-boxes/${box.id}`, "PUT", {
140
+ active: !box.active
141
+ });
142
+ await refresh();
143
+ } catch (error) {
144
+ toast.error(error.message ?? "Failed to update box status", {
145
+ dismissable: true
146
+ });
147
+ }
148
+ };
149
+ const tableRows = useMemo(() => {
150
+ if (loading) {
151
+ return /* @__PURE__ */ jsx(Table.Row, { children: /* @__PURE__ */ jsx(Table.Cell, { colSpan: 6, children: /* @__PURE__ */ jsx(Text, { className: "text-center text-ui-fg-subtle", children: "Loading boxes..." }) }) });
152
+ }
153
+ if (boxes.length === 0) {
154
+ return /* @__PURE__ */ jsx(Table.Row, { children: /* @__PURE__ */ jsx(Table.Cell, { colSpan: 6, children: /* @__PURE__ */ jsx(Text, { className: "text-center text-ui-fg-subtle", children: "No boxes configured yet." }) }) });
155
+ }
156
+ return boxes.map((box) => /* @__PURE__ */ jsxs(Table.Row, { children: [
157
+ /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Text, { className: "font-medium", children: box.name }) }),
158
+ /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsxs(Text, { className: "text-sm text-ui-fg-subtle", children: [
159
+ box.width_cm,
160
+ " × ",
161
+ box.length_cm,
162
+ " × ",
163
+ box.height_cm
164
+ ] }) }),
165
+ /* @__PURE__ */ jsx(Table.Cell, { children: box.max_weight_kg }),
166
+ /* @__PURE__ */ jsx(Table.Cell, { children: box.price_thb }),
167
+ /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Badge, { color: box.active ? "green" : "grey", children: box.active ? "Active" : "Inactive" }) }),
168
+ /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-2", children: [
169
+ /* @__PURE__ */ jsx(
170
+ Switch,
171
+ {
172
+ checked: box.active,
173
+ onCheckedChange: () => handleToggle(box)
174
+ }
175
+ ),
176
+ /* @__PURE__ */ jsx(
177
+ Button,
178
+ {
179
+ variant: "secondary",
180
+ size: "small",
181
+ onClick: () => setFormState({
182
+ id: box.id,
183
+ name: box.name,
184
+ width_cm: String(box.width_cm),
185
+ length_cm: String(box.length_cm),
186
+ height_cm: String(box.height_cm),
187
+ max_weight_kg: String(box.max_weight_kg),
188
+ price_thb: String(box.price_thb),
189
+ active: box.active
190
+ }),
191
+ children: "Edit"
192
+ }
193
+ ),
194
+ /* @__PURE__ */ jsx(
195
+ Button,
196
+ {
197
+ variant: "danger",
198
+ size: "small",
199
+ onClick: () => handleDelete(box.id),
200
+ disabled: deletingId === box.id,
201
+ children: "Delete"
202
+ }
203
+ )
204
+ ] }) })
205
+ ] }, box.id));
206
+ }, [boxes, deletingId, loading]);
207
+ return /* @__PURE__ */ jsxs(Container, { className: "space-y-6 p-6", children: [
208
+ /* @__PURE__ */ jsxs("div", { children: [
209
+ /* @__PURE__ */ jsx(Heading, { level: "h1", children: "Parcel Boxes" }),
210
+ /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "Configure and manage parcel box sizes and pricing." })
211
+ ] }),
212
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-4 rounded-md border p-4", children: [
213
+ /* @__PURE__ */ jsx(Heading, { level: "h2", children: formState.id ? "Edit Box" : "Create Box" }),
214
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-4 md:grid-cols-3", children: [
215
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
216
+ /* @__PURE__ */ jsx(
217
+ Label,
218
+ {
219
+ className: "text-sm font-medium text-ui-fg-base",
220
+ htmlFor: "parcel-box-name",
221
+ children: "Name"
222
+ }
223
+ ),
224
+ /* @__PURE__ */ jsx(
225
+ Input,
226
+ {
227
+ id: "parcel-box-name",
228
+ placeholder: "Enter box name",
229
+ value: formState.name,
230
+ onChange: (event) => setFormState((prev) => ({ ...prev, name: event.target.value }))
231
+ }
232
+ )
233
+ ] }),
234
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
235
+ /* @__PURE__ */ jsx(
236
+ Label,
237
+ {
238
+ className: "text-sm font-medium text-ui-fg-base",
239
+ htmlFor: "parcel-box-width",
240
+ children: "Width (cm)"
241
+ }
242
+ ),
243
+ /* @__PURE__ */ jsx(
244
+ Input,
245
+ {
246
+ id: "parcel-box-width",
247
+ placeholder: "e.g. 20",
248
+ type: "number",
249
+ value: formState.width_cm,
250
+ onChange: (event) => setFormState((prev) => ({
251
+ ...prev,
252
+ width_cm: event.target.value
253
+ }))
254
+ }
255
+ )
256
+ ] }),
257
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
258
+ /* @__PURE__ */ jsx(
259
+ Label,
260
+ {
261
+ className: "text-sm font-medium text-ui-fg-base",
262
+ htmlFor: "parcel-box-length",
263
+ children: "Length (cm)"
264
+ }
265
+ ),
266
+ /* @__PURE__ */ jsx(
267
+ Input,
268
+ {
269
+ id: "parcel-box-length",
270
+ placeholder: "e.g. 30",
271
+ type: "number",
272
+ value: formState.length_cm,
273
+ onChange: (event) => setFormState((prev) => ({
274
+ ...prev,
275
+ length_cm: event.target.value
276
+ }))
277
+ }
278
+ )
279
+ ] }),
280
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
281
+ /* @__PURE__ */ jsx(
282
+ Label,
283
+ {
284
+ className: "text-sm font-medium text-ui-fg-base",
285
+ htmlFor: "parcel-box-height",
286
+ children: "Height (cm)"
287
+ }
288
+ ),
289
+ /* @__PURE__ */ jsx(
290
+ Input,
291
+ {
292
+ id: "parcel-box-height",
293
+ placeholder: "e.g. 15",
294
+ type: "number",
295
+ value: formState.height_cm,
296
+ onChange: (event) => setFormState((prev) => ({
297
+ ...prev,
298
+ height_cm: event.target.value
299
+ }))
300
+ }
301
+ )
302
+ ] }),
303
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
304
+ /* @__PURE__ */ jsx(
305
+ Label,
306
+ {
307
+ className: "text-sm font-medium text-ui-fg-base",
308
+ htmlFor: "parcel-box-max-weight",
309
+ children: "Max Weight (kg)"
310
+ }
311
+ ),
312
+ /* @__PURE__ */ jsx(
313
+ Input,
314
+ {
315
+ id: "parcel-box-max-weight",
316
+ placeholder: "e.g. 0.5",
317
+ type: "number",
318
+ value: formState.max_weight_kg,
319
+ onChange: (event) => setFormState((prev) => ({
320
+ ...prev,
321
+ max_weight_kg: event.target.value
322
+ }))
323
+ }
324
+ )
325
+ ] }),
326
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
327
+ /* @__PURE__ */ jsx(
328
+ Label,
329
+ {
330
+ className: "text-sm font-medium text-ui-fg-base",
331
+ htmlFor: "parcel-box-price",
332
+ children: "Box Price (THB)"
333
+ }
334
+ ),
335
+ /* @__PURE__ */ jsx(
336
+ Input,
337
+ {
338
+ id: "parcel-box-price",
339
+ placeholder: "e.g. 10",
340
+ type: "number",
341
+ value: formState.price_thb,
342
+ onChange: (event) => setFormState((prev) => ({
343
+ ...prev,
344
+ price_thb: event.target.value
345
+ }))
346
+ }
347
+ )
348
+ ] })
349
+ ] }),
350
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
351
+ /* @__PURE__ */ jsx(
352
+ Switch,
353
+ {
354
+ checked: formState.active,
355
+ onCheckedChange: (active) => setFormState((prev) => ({ ...prev, active }))
356
+ }
357
+ ),
358
+ /* @__PURE__ */ jsx(Text, { className: "text-sm text-ui-fg-subtle", children: "Active" })
359
+ ] }),
360
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-3", children: [
361
+ /* @__PURE__ */ jsx(Button, { onClick: handleSubmit, disabled: saving, children: formState.id ? "Update" : "Create" }),
362
+ formState.id && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: resetForm, children: "Cancel" })
363
+ ] })
364
+ ] }),
365
+ /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-md border", children: /* @__PURE__ */ jsxs(Table, { children: [
366
+ /* @__PURE__ */ jsx(Table.Header, { children: /* @__PURE__ */ jsxs(Table.Row, { children: [
367
+ /* @__PURE__ */ jsx(Table.HeaderCell, { children: "Name" }),
368
+ /* @__PURE__ */ jsx(Table.HeaderCell, { children: "Dimensions (cm)" }),
369
+ /* @__PURE__ */ jsx(Table.HeaderCell, { children: "Max Weight (kg)" }),
370
+ /* @__PURE__ */ jsx(Table.HeaderCell, { children: "Price" }),
371
+ /* @__PURE__ */ jsx(Table.HeaderCell, { children: "Status" }),
372
+ /* @__PURE__ */ jsx(Table.HeaderCell, { className: "text-right", children: "Actions" })
373
+ ] }) }),
374
+ /* @__PURE__ */ jsx(Table.Body, { children: tableRows })
375
+ ] }) })
376
+ ] });
377
+ }
378
+ const ParcelBoxesRoute = () => {
379
+ return /* @__PURE__ */ jsx(ParcelBoxesPage, {});
380
+ };
381
+ const config$1 = defineRouteConfig({
382
+ label: "Parcel Boxes",
383
+ icon: FlyingBox
384
+ });
6
385
  const requestJson = async (url, method = "GET", body) => {
7
386
  const response = await fetch(url, {
8
387
  method,
@@ -34,7 +413,7 @@ const toNumber = (value) => {
34
413
  return Number.isFinite(parsed) ? parsed : null;
35
414
  };
36
415
  const getThaiAddressComponents = () => null;
37
- const ParcelShippingPage = () => {
416
+ function ParcelShippingPage() {
38
417
  const [tab, setTab] = useState("boxes");
39
418
  return /* @__PURE__ */ jsxs(Container, { className: "space-y-6 p-6", children: [
40
419
  /* @__PURE__ */ jsxs("div", { children: [
@@ -76,7 +455,7 @@ const ParcelShippingPage = () => {
76
455
  tab === "areas" && /* @__PURE__ */ jsx(AreasSection, {})
77
456
  ] })
78
457
  ] });
79
- };
458
+ }
80
459
  const BoxesSection = () => {
81
460
  const [boxes, setBoxes] = useState([]);
82
461
  const [loading, setLoading] = useState(true);
@@ -1135,6 +1514,10 @@ const config = defineRouteConfig({
1135
1514
  const widgetModule = { widgets: [] };
1136
1515
  const routeModule = {
1137
1516
  routes: [
1517
+ {
1518
+ Component: ParcelBoxesRoute,
1519
+ path: "/parcel-boxes"
1520
+ },
1138
1521
  {
1139
1522
  Component: ParcelShippingRoute,
1140
1523
  path: "/parcel-shipping"
@@ -1143,6 +1526,12 @@ const routeModule = {
1143
1526
  };
1144
1527
  const menuItemModule = {
1145
1528
  menuItems: [
1529
+ {
1530
+ label: config$1.label,
1531
+ icon: config$1.icon,
1532
+ path: "/parcel-boxes",
1533
+ nested: void 0
1534
+ },
1146
1535
  {
1147
1536
  label: config.label,
1148
1537
  icon: config.icon,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodashventure/medusa-parcel-shipping",
3
- "version": "0.2.7",
3
+ "version": "0.2.11",
4
4
  "description": "Parcel box selection and Thailand shipping quotes for Medusa.",
5
5
  "author": "LodashVenture",
6
6
  "license": "MIT",
@@ -64,9 +64,10 @@
64
64
  "node": ">=20"
65
65
  },
66
66
  "dependencies": {
67
- "thai-address-autocomplete-react": "^1.2.2",
68
- "zod": "^4.1.5",
67
+ "@types/pdfkit": "^0.13.5",
68
+ "i18next": "^23.11.0",
69
69
  "pdfkit": "0.15.0",
70
- "@types/pdfkit": "^0.13.5"
70
+ "thai-address-autocomplete-react": "^1.2.2",
71
+ "zod": "^4.1.5"
71
72
  }
72
73
  }