@open-mercato/core 0.4.9-develop-ce96cffe00 → 0.4.9-develop-5d884303ad
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/dist/modules/auth/lib/setup-app.js +17 -1
- package/dist/modules/auth/lib/setup-app.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +23 -12
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/shipping_carriers/api/cancel/route.js +5 -1
- package/dist/modules/shipping_carriers/api/cancel/route.js.map +2 -2
- package/dist/modules/shipping_carriers/api/points/route.js +59 -0
- package/dist/modules/shipping_carriers/api/points/route.js.map +7 -0
- package/dist/modules/shipping_carriers/api/providers/route.js +38 -0
- package/dist/modules/shipping_carriers/api/providers/route.js.map +7 -0
- package/dist/modules/shipping_carriers/backend/shipping-carriers/create/page.js +90 -0
- package/dist/modules/shipping_carriers/backend/shipping-carriers/create/page.js.map +7 -0
- package/dist/modules/shipping_carriers/backend/shipping-carriers/create/page.meta.js +8 -0
- package/dist/modules/shipping_carriers/backend/shipping-carriers/create/page.meta.js.map +7 -0
- package/dist/modules/shipping_carriers/data/validators.js +17 -2
- package/dist/modules/shipping_carriers/data/validators.js.map +2 -2
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/AddressFields.js +76 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/AddressFields.js.map +7 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js +243 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js.map +7 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfirmStep.js +134 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfirmStep.js.map +7 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.js +70 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.js.map +7 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ProviderStep.js +32 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ProviderStep.js.map +7 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/WizardNav.js +37 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/WizardNav.js.map +7 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/hooks/shipmentApi.js +92 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/hooks/shipmentApi.js.map +7 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/hooks/useShipmentWizard.js +212 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/hooks/useShipmentWizard.js.map +7 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/types.js +1 -0
- package/dist/modules/shipping_carriers/lib/shipment-wizard/types.js.map +7 -0
- package/dist/modules/shipping_carriers/lib/shipping-service.js +36 -3
- package/dist/modules/shipping_carriers/lib/shipping-service.js.map +2 -2
- package/dist/modules/shipping_carriers/lib/status-sync.js +7 -0
- package/dist/modules/shipping_carriers/lib/status-sync.js.map +2 -2
- package/package.json +7 -4
- package/src/modules/auth/lib/setup-app.ts +22 -0
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +17 -9
- package/src/modules/shipping_carriers/api/cancel/route.ts +5 -1
- package/src/modules/shipping_carriers/api/points/route.ts +57 -0
- package/src/modules/shipping_carriers/api/providers/route.ts +35 -0
- package/src/modules/shipping_carriers/backend/shipping-carriers/create/page.meta.ts +4 -0
- package/src/modules/shipping_carriers/backend/shipping-carriers/create/page.tsx +93 -0
- package/src/modules/shipping_carriers/data/validators.ts +15 -0
- package/src/modules/shipping_carriers/i18n/de.json +66 -0
- package/src/modules/shipping_carriers/i18n/en.json +66 -0
- package/src/modules/shipping_carriers/i18n/es.json +66 -0
- package/src/modules/shipping_carriers/i18n/pl.json +66 -0
- package/src/modules/shipping_carriers/lib/adapter.ts +20 -0
- package/src/modules/shipping_carriers/lib/shipment-wizard/components/AddressFields.tsx +72 -0
- package/src/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.tsx +343 -0
- package/src/modules/shipping_carriers/lib/shipment-wizard/components/ConfirmStep.tsx +213 -0
- package/src/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.tsx +82 -0
- package/src/modules/shipping_carriers/lib/shipment-wizard/components/ProviderStep.tsx +54 -0
- package/src/modules/shipping_carriers/lib/shipment-wizard/components/WizardNav.tsx +46 -0
- package/src/modules/shipping_carriers/lib/shipment-wizard/hooks/shipmentApi.ts +153 -0
- package/src/modules/shipping_carriers/lib/shipment-wizard/hooks/useShipmentWizard.ts +312 -0
- package/src/modules/shipping_carriers/lib/shipment-wizard/types.ts +76 -0
- package/src/modules/shipping_carriers/lib/shipping-service.ts +53 -3
- package/src/modules/shipping_carriers/lib/status-sync.ts +7 -0
|
@@ -2,6 +2,7 @@ import { NextResponse } from "next/server";
|
|
|
2
2
|
import { getAuthFromRequest } from "@open-mercato/shared/lib/auth/server";
|
|
3
3
|
import { createRequestContainer } from "@open-mercato/shared/lib/di/container";
|
|
4
4
|
import { readJsonSafe } from "@open-mercato/shared/lib/http/readJsonSafe";
|
|
5
|
+
import { ShipmentCancelNotAllowedError } from "../../lib/status-sync.js";
|
|
5
6
|
import { cancelShipmentSchema } from "../../data/validators.js";
|
|
6
7
|
import { shippingCarriersTag } from "../openapi.js";
|
|
7
8
|
const metadata = {
|
|
@@ -28,6 +29,9 @@ async function POST(req) {
|
|
|
28
29
|
});
|
|
29
30
|
return NextResponse.json(result);
|
|
30
31
|
} catch (error) {
|
|
32
|
+
if (error instanceof ShipmentCancelNotAllowedError) {
|
|
33
|
+
return NextResponse.json({ error: error.message }, { status: 422 });
|
|
34
|
+
}
|
|
31
35
|
const message = error instanceof Error ? error.message : "Failed to cancel shipment";
|
|
32
36
|
return NextResponse.json({ error: message }, { status: 502 });
|
|
33
37
|
}
|
|
@@ -41,7 +45,7 @@ const openApi = {
|
|
|
41
45
|
tags: [shippingCarriersTag],
|
|
42
46
|
responses: [
|
|
43
47
|
{ status: 200, description: "Shipment cancelled" },
|
|
44
|
-
{ status: 422, description: "Validation failed" },
|
|
48
|
+
{ status: 422, description: "Validation failed or shipment cannot be cancelled in its current status" },
|
|
45
49
|
{ status: 502, description: "Provider upstream error" }
|
|
46
50
|
]
|
|
47
51
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/modules/shipping_carriers/api/cancel/route.ts"],
|
|
4
|
-
"sourcesContent": ["import { NextResponse } from 'next/server'\nimport { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport { readJsonSafe } from '@open-mercato/shared/lib/http/readJsonSafe'\nimport type { ShippingCarrierService } from '../../lib/shipping-service'\nimport { cancelShipmentSchema } from '../../data/validators'\nimport { shippingCarriersTag } from '../openapi'\n\nexport const metadata = {\n path: '/shipping-carriers/cancel',\n POST: { requireAuth: true, requireFeatures: ['shipping_carriers.manage'] },\n}\n\nexport async function POST(req: Request) {\n const auth = await getAuthFromRequest(req)\n if (!auth?.tenantId || !auth.orgId) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n const payload = await readJsonSafe<unknown>(req)\n const parsed = cancelShipmentSchema.safeParse(payload)\n if (!parsed.success) {\n return NextResponse.json({ error: 'Invalid payload', details: parsed.error.flatten() }, { status: 422 })\n }\n const container = await createRequestContainer()\n const service = container.resolve('shippingCarrierService') as ShippingCarrierService\n try {\n const result = await service.cancelShipment({\n ...parsed.data,\n organizationId: auth.orgId as string,\n tenantId: auth.tenantId,\n })\n return NextResponse.json(result)\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to cancel shipment'\n return NextResponse.json({ error: message }, { status: 502 })\n }\n}\n\nexport const openApi = {\n tags: [shippingCarriersTag],\n summary: 'Cancel shipment',\n methods: {\n POST: {\n summary: 'Cancel shipment',\n tags: [shippingCarriersTag],\n responses: [\n { status: 200, description: 'Shipment cancelled' },\n { status: 422, description: 'Validation failed' },\n { status: 502, description: 'Provider upstream error' },\n ],\n },\n },\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,8BAA8B;AACvC,SAAS,oBAAoB;AAE7B,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AAE7B,MAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,MAAM,EAAE,aAAa,MAAM,iBAAiB,CAAC,0BAA0B,EAAE;AAC3E;AAEA,eAAsB,KAAK,KAAc;AACvC,QAAM,OAAO,MAAM,mBAAmB,GAAG;AACzC,MAAI,CAAC,MAAM,YAAY,CAAC,KAAK,OAAO;AAClC,WAAO,aAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrE;AACA,QAAM,UAAU,MAAM,aAAsB,GAAG;AAC/C,QAAM,SAAS,qBAAqB,UAAU,OAAO;AACrD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,aAAa,KAAK,EAAE,OAAO,mBAAmB,SAAS,OAAO,MAAM,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACzG;AACA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,UAAU,UAAU,QAAQ,wBAAwB;AAC1D,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,eAAe;AAAA,MAC1C,GAAG,OAAO;AAAA,MACV,gBAAgB,KAAK;AAAA,MACrB,UAAU,KAAK;AAAA,IACjB,CAAC;AACD,WAAO,aAAa,KAAK,MAAM;AAAA,EACjC,SAAS,OAAgB;AACvB,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,WAAO,aAAa,KAAK,EAAE,OAAO,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC9D;AACF;AAEO,MAAM,UAAU;AAAA,EACrB,MAAM,CAAC,mBAAmB;AAAA,EAC1B,SAAS;AAAA,EACT,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,MAAM,CAAC,mBAAmB;AAAA,MAC1B,WAAW;AAAA,QACT,EAAE,QAAQ,KAAK,aAAa,qBAAqB;AAAA,QACjD,EAAE,QAAQ,KAAK,aAAa,
|
|
4
|
+
"sourcesContent": ["import { NextResponse } from 'next/server'\nimport { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport { readJsonSafe } from '@open-mercato/shared/lib/http/readJsonSafe'\nimport type { ShippingCarrierService } from '../../lib/shipping-service'\nimport { ShipmentCancelNotAllowedError } from '../../lib/status-sync'\nimport { cancelShipmentSchema } from '../../data/validators'\nimport { shippingCarriersTag } from '../openapi'\n\nexport const metadata = {\n path: '/shipping-carriers/cancel',\n POST: { requireAuth: true, requireFeatures: ['shipping_carriers.manage'] },\n}\n\nexport async function POST(req: Request) {\n const auth = await getAuthFromRequest(req)\n if (!auth?.tenantId || !auth.orgId) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n const payload = await readJsonSafe<unknown>(req)\n const parsed = cancelShipmentSchema.safeParse(payload)\n if (!parsed.success) {\n return NextResponse.json({ error: 'Invalid payload', details: parsed.error.flatten() }, { status: 422 })\n }\n const container = await createRequestContainer()\n const service = container.resolve('shippingCarrierService') as ShippingCarrierService\n try {\n const result = await service.cancelShipment({\n ...parsed.data,\n organizationId: auth.orgId as string,\n tenantId: auth.tenantId,\n })\n return NextResponse.json(result)\n } catch (error: unknown) {\n if (error instanceof ShipmentCancelNotAllowedError) {\n return NextResponse.json({ error: error.message }, { status: 422 })\n }\n const message = error instanceof Error ? error.message : 'Failed to cancel shipment'\n return NextResponse.json({ error: message }, { status: 502 })\n }\n}\n\nexport const openApi = {\n tags: [shippingCarriersTag],\n summary: 'Cancel shipment',\n methods: {\n POST: {\n summary: 'Cancel shipment',\n tags: [shippingCarriersTag],\n responses: [\n { status: 200, description: 'Shipment cancelled' },\n { status: 422, description: 'Validation failed or shipment cannot be cancelled in its current status' },\n { status: 502, description: 'Provider upstream error' },\n ],\n },\n },\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,8BAA8B;AACvC,SAAS,oBAAoB;AAE7B,SAAS,qCAAqC;AAC9C,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AAE7B,MAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,MAAM,EAAE,aAAa,MAAM,iBAAiB,CAAC,0BAA0B,EAAE;AAC3E;AAEA,eAAsB,KAAK,KAAc;AACvC,QAAM,OAAO,MAAM,mBAAmB,GAAG;AACzC,MAAI,CAAC,MAAM,YAAY,CAAC,KAAK,OAAO;AAClC,WAAO,aAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrE;AACA,QAAM,UAAU,MAAM,aAAsB,GAAG;AAC/C,QAAM,SAAS,qBAAqB,UAAU,OAAO;AACrD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,aAAa,KAAK,EAAE,OAAO,mBAAmB,SAAS,OAAO,MAAM,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACzG;AACA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,UAAU,UAAU,QAAQ,wBAAwB;AAC1D,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,eAAe;AAAA,MAC1C,GAAG,OAAO;AAAA,MACV,gBAAgB,KAAK;AAAA,MACrB,UAAU,KAAK;AAAA,IACjB,CAAC;AACD,WAAO,aAAa,KAAK,MAAM;AAAA,EACjC,SAAS,OAAgB;AACvB,QAAI,iBAAiB,+BAA+B;AAClD,aAAO,aAAa,KAAK,EAAE,OAAO,MAAM,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACpE;AACA,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,WAAO,aAAa,KAAK,EAAE,OAAO,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC9D;AACF;AAEO,MAAM,UAAU;AAAA,EACrB,MAAM,CAAC,mBAAmB;AAAA,EAC1B,SAAS;AAAA,EACT,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,MAAM,CAAC,mBAAmB;AAAA,MAC1B,WAAW;AAAA,QACT,EAAE,QAAQ,KAAK,aAAa,qBAAqB;AAAA,QACjD,EAAE,QAAQ,KAAK,aAAa,0EAA0E;AAAA,QACtG,EAAE,QAAQ,KAAK,aAAa,0BAA0B;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import { getAuthFromRequest } from "@open-mercato/shared/lib/auth/server";
|
|
3
|
+
import { createRequestContainer } from "@open-mercato/shared/lib/di/container";
|
|
4
|
+
import { searchDropOffPointsQuerySchema } from "../../data/validators.js";
|
|
5
|
+
import { shippingCarriersTag } from "../openapi.js";
|
|
6
|
+
const metadata = {
|
|
7
|
+
path: "/shipping-carriers/points",
|
|
8
|
+
GET: { requireAuth: true, requireFeatures: ["shipping_carriers.view"] }
|
|
9
|
+
};
|
|
10
|
+
async function GET(req) {
|
|
11
|
+
const auth = await getAuthFromRequest(req);
|
|
12
|
+
if (!auth?.tenantId || !auth.orgId) {
|
|
13
|
+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
|
14
|
+
}
|
|
15
|
+
const url = new URL(req.url);
|
|
16
|
+
const parsed = searchDropOffPointsQuerySchema.safeParse({
|
|
17
|
+
providerKey: url.searchParams.get("providerKey"),
|
|
18
|
+
query: url.searchParams.get("query") ?? void 0,
|
|
19
|
+
type: url.searchParams.get("type") ?? void 0,
|
|
20
|
+
postCode: url.searchParams.get("postCode") ?? void 0
|
|
21
|
+
});
|
|
22
|
+
if (!parsed.success) {
|
|
23
|
+
return NextResponse.json({ error: "Invalid query", details: parsed.error.flatten() }, { status: 422 });
|
|
24
|
+
}
|
|
25
|
+
const container = await createRequestContainer();
|
|
26
|
+
const service = container.resolve("shippingCarrierService");
|
|
27
|
+
try {
|
|
28
|
+
const points = await service.searchDropOffPoints({
|
|
29
|
+
...parsed.data,
|
|
30
|
+
organizationId: auth.orgId,
|
|
31
|
+
tenantId: auth.tenantId
|
|
32
|
+
});
|
|
33
|
+
return NextResponse.json({ points });
|
|
34
|
+
} catch (error) {
|
|
35
|
+
const message = error instanceof Error ? error.message : "Failed to search drop-off points";
|
|
36
|
+
return NextResponse.json({ error: message }, { status: 502 });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const openApi = {
|
|
40
|
+
tags: [shippingCarriersTag],
|
|
41
|
+
summary: "Search drop-off points",
|
|
42
|
+
methods: {
|
|
43
|
+
GET: {
|
|
44
|
+
summary: "Search carrier drop-off points (lockers, POP points)",
|
|
45
|
+
tags: [shippingCarriersTag],
|
|
46
|
+
responses: [
|
|
47
|
+
{ status: 200, description: "Points returned" },
|
|
48
|
+
{ status: 422, description: "Validation failed" },
|
|
49
|
+
{ status: 502, description: "Provider upstream error or unsupported" }
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
export {
|
|
55
|
+
GET,
|
|
56
|
+
metadata,
|
|
57
|
+
openApi
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/shipping_carriers/api/points/route.ts"],
|
|
4
|
+
"sourcesContent": ["import { NextResponse } from 'next/server'\nimport { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport type { ShippingCarrierService } from '../../lib/shipping-service'\nimport { searchDropOffPointsQuerySchema } from '../../data/validators'\nimport { shippingCarriersTag } from '../openapi'\n\nexport const metadata = {\n path: '/shipping-carriers/points',\n GET: { requireAuth: true, requireFeatures: ['shipping_carriers.view'] },\n}\n\nexport async function GET(req: Request) {\n const auth = await getAuthFromRequest(req)\n if (!auth?.tenantId || !auth.orgId) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n const url = new URL(req.url)\n const parsed = searchDropOffPointsQuerySchema.safeParse({\n providerKey: url.searchParams.get('providerKey'),\n query: url.searchParams.get('query') ?? undefined,\n type: url.searchParams.get('type') ?? undefined,\n postCode: url.searchParams.get('postCode') ?? undefined,\n })\n if (!parsed.success) {\n return NextResponse.json({ error: 'Invalid query', details: parsed.error.flatten() }, { status: 422 })\n }\n const container = await createRequestContainer()\n const service = container.resolve('shippingCarrierService') as ShippingCarrierService\n try {\n const points = await service.searchDropOffPoints({\n ...parsed.data,\n organizationId: auth.orgId as string,\n tenantId: auth.tenantId,\n })\n return NextResponse.json({ points })\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to search drop-off points'\n return NextResponse.json({ error: message }, { status: 502 })\n }\n}\n\nexport const openApi = {\n tags: [shippingCarriersTag],\n summary: 'Search drop-off points',\n methods: {\n GET: {\n summary: 'Search carrier drop-off points (lockers, POP points)',\n tags: [shippingCarriersTag],\n responses: [\n { status: 200, description: 'Points returned' },\n { status: 422, description: 'Validation failed' },\n { status: 502, description: 'Provider upstream error or unsupported' },\n ],\n },\n },\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,8BAA8B;AAEvC,SAAS,sCAAsC;AAC/C,SAAS,2BAA2B;AAE7B,MAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,KAAK,EAAE,aAAa,MAAM,iBAAiB,CAAC,wBAAwB,EAAE;AACxE;AAEA,eAAsB,IAAI,KAAc;AACtC,QAAM,OAAO,MAAM,mBAAmB,GAAG;AACzC,MAAI,CAAC,MAAM,YAAY,CAAC,KAAK,OAAO;AAClC,WAAO,aAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrE;AACA,QAAM,MAAM,IAAI,IAAI,IAAI,GAAG;AAC3B,QAAM,SAAS,+BAA+B,UAAU;AAAA,IACtD,aAAa,IAAI,aAAa,IAAI,aAAa;AAAA,IAC/C,OAAO,IAAI,aAAa,IAAI,OAAO,KAAK;AAAA,IACxC,MAAM,IAAI,aAAa,IAAI,MAAM,KAAK;AAAA,IACtC,UAAU,IAAI,aAAa,IAAI,UAAU,KAAK;AAAA,EAChD,CAAC;AACD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,aAAa,KAAK,EAAE,OAAO,iBAAiB,SAAS,OAAO,MAAM,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACvG;AACA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,UAAU,UAAU,QAAQ,wBAAwB;AAC1D,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,oBAAoB;AAAA,MAC/C,GAAG,OAAO;AAAA,MACV,gBAAgB,KAAK;AAAA,MACrB,UAAU,KAAK;AAAA,IACjB,CAAC;AACD,WAAO,aAAa,KAAK,EAAE,OAAO,CAAC;AAAA,EACrC,SAAS,OAAgB;AACvB,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,WAAO,aAAa,KAAK,EAAE,OAAO,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC9D;AACF;AAEO,MAAM,UAAU;AAAA,EACrB,MAAM,CAAC,mBAAmB;AAAA,EAC1B,SAAS;AAAA,EACT,SAAS;AAAA,IACP,KAAK;AAAA,MACH,SAAS;AAAA,MACT,MAAM,CAAC,mBAAmB;AAAA,MAC1B,WAAW;AAAA,QACT,EAAE,QAAQ,KAAK,aAAa,kBAAkB;AAAA,QAC9C,EAAE,QAAQ,KAAK,aAAa,oBAAoB;AAAA,QAChD,EAAE,QAAQ,KAAK,aAAa,yCAAyC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import { getAuthFromRequest } from "@open-mercato/shared/lib/auth/server";
|
|
3
|
+
import { listShippingAdapters } from "../../lib/adapter-registry.js";
|
|
4
|
+
import { shippingCarriersTag } from "../openapi.js";
|
|
5
|
+
const metadata = {
|
|
6
|
+
path: "/shipping-carriers/providers",
|
|
7
|
+
GET: { requireAuth: true, requireFeatures: ["shipping_carriers.manage"] }
|
|
8
|
+
};
|
|
9
|
+
async function GET(req) {
|
|
10
|
+
const auth = await getAuthFromRequest(req);
|
|
11
|
+
if (!auth?.tenantId || !auth.orgId) {
|
|
12
|
+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
|
13
|
+
}
|
|
14
|
+
const adapters = listShippingAdapters();
|
|
15
|
+
const providers = adapters.map((adapter) => ({
|
|
16
|
+
providerKey: adapter.providerKey
|
|
17
|
+
}));
|
|
18
|
+
return NextResponse.json({ providers });
|
|
19
|
+
}
|
|
20
|
+
const openApi = {
|
|
21
|
+
tags: [shippingCarriersTag],
|
|
22
|
+
summary: "List registered shipping providers",
|
|
23
|
+
methods: {
|
|
24
|
+
GET: {
|
|
25
|
+
summary: "List registered shipping providers",
|
|
26
|
+
tags: [shippingCarriersTag],
|
|
27
|
+
responses: [
|
|
28
|
+
{ status: 200, description: "List of registered provider keys" }
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
export {
|
|
34
|
+
GET,
|
|
35
|
+
metadata,
|
|
36
|
+
openApi
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/shipping_carriers/api/providers/route.ts"],
|
|
4
|
+
"sourcesContent": ["import { NextResponse } from 'next/server'\nimport { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'\nimport { listShippingAdapters } from '../../lib/adapter-registry'\nimport { shippingCarriersTag } from '../openapi'\n\nexport const metadata = {\n path: '/shipping-carriers/providers',\n GET: { requireAuth: true, requireFeatures: ['shipping_carriers.manage'] },\n}\n\nexport async function GET(req: Request) {\n const auth = await getAuthFromRequest(req)\n if (!auth?.tenantId || !auth.orgId) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n const adapters = listShippingAdapters()\n const providers = adapters.map((adapter) => ({\n providerKey: adapter.providerKey,\n }))\n return NextResponse.json({ providers })\n}\n\nexport const openApi = {\n tags: [shippingCarriersTag],\n summary: 'List registered shipping providers',\n methods: {\n GET: {\n summary: 'List registered shipping providers',\n tags: [shippingCarriersTag],\n responses: [\n { status: 200, description: 'List of registered provider keys' },\n ],\n },\n },\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AAE7B,MAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,KAAK,EAAE,aAAa,MAAM,iBAAiB,CAAC,0BAA0B,EAAE;AAC1E;AAEA,eAAsB,IAAI,KAAc;AACtC,QAAM,OAAO,MAAM,mBAAmB,GAAG;AACzC,MAAI,CAAC,MAAM,YAAY,CAAC,KAAK,OAAO;AAClC,WAAO,aAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrE;AACA,QAAM,WAAW,qBAAqB;AACtC,QAAM,YAAY,SAAS,IAAI,CAAC,aAAa;AAAA,IAC3C,aAAa,QAAQ;AAAA,EACvB,EAAE;AACF,SAAO,aAAa,KAAK,EAAE,UAAU,CAAC;AACxC;AAEO,MAAM,UAAU;AAAA,EACrB,MAAM,CAAC,mBAAmB;AAAA,EAC1B,SAAS;AAAA,EACT,SAAS;AAAA,IACP,KAAK;AAAA,MACH,SAAS;AAAA,MACT,MAAM,CAAC,mBAAmB;AAAA,MAC1B,WAAW;AAAA,QACT,EAAE,QAAQ,KAAK,aAAa,mCAAmC;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { match } from "ts-pattern";
|
|
4
|
+
import { Page, PageBody } from "@open-mercato/ui/backend/Page";
|
|
5
|
+
import { FormHeader } from "@open-mercato/ui/backend/forms";
|
|
6
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
7
|
+
import { WizardNav } from "../../../lib/shipment-wizard/components/WizardNav.js";
|
|
8
|
+
import { ProviderStep } from "../../../lib/shipment-wizard/components/ProviderStep.js";
|
|
9
|
+
import { ConfigureStep } from "../../../lib/shipment-wizard/components/ConfigureStep.js";
|
|
10
|
+
import { ConfirmStep } from "../../../lib/shipment-wizard/components/ConfirmStep.js";
|
|
11
|
+
import { useShipmentWizard } from "../../../lib/shipment-wizard/hooks/useShipmentWizard.js";
|
|
12
|
+
const CreateCarrierShipmentPage = () => {
|
|
13
|
+
const t = useT();
|
|
14
|
+
const wizard = useShipmentWizard();
|
|
15
|
+
return /* @__PURE__ */ jsx(Page, { children: /* @__PURE__ */ jsxs(PageBody, { children: [
|
|
16
|
+
/* @__PURE__ */ jsx(
|
|
17
|
+
FormHeader,
|
|
18
|
+
{
|
|
19
|
+
backHref: wizard.backHref,
|
|
20
|
+
title: t("shipping_carriers.create.title", "Create carrier shipment")
|
|
21
|
+
}
|
|
22
|
+
),
|
|
23
|
+
/* @__PURE__ */ jsx(WizardNav, { step: wizard.step, onNavigate: wizard.goToStep }),
|
|
24
|
+
match(wizard.step).with("provider", () => /* @__PURE__ */ jsx(
|
|
25
|
+
ProviderStep,
|
|
26
|
+
{
|
|
27
|
+
isLoading: wizard.isLoadingProviders,
|
|
28
|
+
error: wizard.providerError,
|
|
29
|
+
providers: wizard.providers,
|
|
30
|
+
onSelect: wizard.handleProviderSelect
|
|
31
|
+
}
|
|
32
|
+
)).with("configure", () => /* @__PURE__ */ jsx(
|
|
33
|
+
ConfigureStep,
|
|
34
|
+
{
|
|
35
|
+
origin: wizard.origin,
|
|
36
|
+
destination: wizard.destination,
|
|
37
|
+
packages: wizard.packages,
|
|
38
|
+
labelFormat: wizard.labelFormat,
|
|
39
|
+
senderContact: wizard.senderContact,
|
|
40
|
+
receiverContact: wizard.receiverContact,
|
|
41
|
+
targetPoint: wizard.targetPoint,
|
|
42
|
+
c2cSendingMethod: wizard.c2cSendingMethod,
|
|
43
|
+
isFetchingRates: wizard.isFetchingRates,
|
|
44
|
+
canProceed: wizard.canProceedFromConfigure,
|
|
45
|
+
senderContactErrors: wizard.senderContactErrors,
|
|
46
|
+
receiverContactErrors: wizard.receiverContactErrors,
|
|
47
|
+
dropOffPointQuery: wizard.dropOffPointQuery,
|
|
48
|
+
dropOffPoints: wizard.dropOffPoints,
|
|
49
|
+
isFetchingDropOffPoints: wizard.isFetchingDropOffPoints,
|
|
50
|
+
dropOffPointsError: wizard.dropOffPointsError,
|
|
51
|
+
onOriginChange: wizard.setOrigin,
|
|
52
|
+
onDestinationChange: wizard.setDestination,
|
|
53
|
+
onPackagesChange: wizard.setPackages,
|
|
54
|
+
onLabelFormatChange: wizard.setLabelFormat,
|
|
55
|
+
onSenderContactChange: wizard.setSenderContact,
|
|
56
|
+
onReceiverContactChange: wizard.setReceiverContact,
|
|
57
|
+
onTargetPointChange: wizard.setTargetPoint,
|
|
58
|
+
onC2cSendingMethodChange: wizard.setC2cSendingMethod,
|
|
59
|
+
onSearchDropOffPoints: wizard.searchDropOffPoints,
|
|
60
|
+
onBack: () => wizard.goToStep("provider"),
|
|
61
|
+
onNext: wizard.handleConfigureNext
|
|
62
|
+
}
|
|
63
|
+
)).with("confirm", () => /* @__PURE__ */ jsx(
|
|
64
|
+
ConfirmStep,
|
|
65
|
+
{
|
|
66
|
+
rates: wizard.rates,
|
|
67
|
+
ratesError: wizard.ratesError,
|
|
68
|
+
selectedRate: wizard.selectedRate,
|
|
69
|
+
selectedProvider: wizard.selectedProvider ?? "",
|
|
70
|
+
origin: wizard.origin,
|
|
71
|
+
destination: wizard.destination,
|
|
72
|
+
packages: wizard.packages,
|
|
73
|
+
labelFormat: wizard.labelFormat,
|
|
74
|
+
senderContact: wizard.senderContact,
|
|
75
|
+
receiverContact: wizard.receiverContact,
|
|
76
|
+
targetPoint: wizard.targetPoint,
|
|
77
|
+
c2cSendingMethod: wizard.c2cSendingMethod,
|
|
78
|
+
isSubmitting: wizard.isSubmitting,
|
|
79
|
+
onRateSelect: wizard.setSelectedRate,
|
|
80
|
+
onBack: () => wizard.goToStep("configure"),
|
|
81
|
+
onSubmit: wizard.handleSubmit
|
|
82
|
+
}
|
|
83
|
+
)).exhaustive()
|
|
84
|
+
] }) });
|
|
85
|
+
};
|
|
86
|
+
var page_default = CreateCarrierShipmentPage;
|
|
87
|
+
export {
|
|
88
|
+
page_default as default
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/modules/shipping_carriers/backend/shipping-carriers/create/page.tsx"],
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport { match } from 'ts-pattern'\nimport { Page, PageBody } from '@open-mercato/ui/backend/Page'\nimport { FormHeader } from '@open-mercato/ui/backend/forms'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { WizardNav } from '../../../lib/shipment-wizard/components/WizardNav'\nimport { ProviderStep } from '../../../lib/shipment-wizard/components/ProviderStep'\nimport { ConfigureStep } from '../../../lib/shipment-wizard/components/ConfigureStep'\nimport { ConfirmStep } from '../../../lib/shipment-wizard/components/ConfirmStep'\nimport { useShipmentWizard } from '../../../lib/shipment-wizard/hooks/useShipmentWizard'\n\nconst CreateCarrierShipmentPage = () => {\n const t = useT()\n const wizard = useShipmentWizard()\n\n return (\n <Page>\n <PageBody>\n <FormHeader\n backHref={wizard.backHref}\n title={t('shipping_carriers.create.title', 'Create carrier shipment')}\n />\n\n <WizardNav step={wizard.step} onNavigate={wizard.goToStep} />\n\n {match(wizard.step)\n .with('provider', () => (\n <ProviderStep\n isLoading={wizard.isLoadingProviders}\n error={wizard.providerError}\n providers={wizard.providers}\n onSelect={wizard.handleProviderSelect}\n />\n ))\n .with('configure', () => (\n <ConfigureStep\n origin={wizard.origin}\n destination={wizard.destination}\n packages={wizard.packages}\n labelFormat={wizard.labelFormat}\n senderContact={wizard.senderContact}\n receiverContact={wizard.receiverContact}\n targetPoint={wizard.targetPoint}\n c2cSendingMethod={wizard.c2cSendingMethod}\n isFetchingRates={wizard.isFetchingRates}\n canProceed={wizard.canProceedFromConfigure}\n senderContactErrors={wizard.senderContactErrors}\n receiverContactErrors={wizard.receiverContactErrors}\n dropOffPointQuery={wizard.dropOffPointQuery}\n dropOffPoints={wizard.dropOffPoints}\n isFetchingDropOffPoints={wizard.isFetchingDropOffPoints}\n dropOffPointsError={wizard.dropOffPointsError}\n onOriginChange={wizard.setOrigin}\n onDestinationChange={wizard.setDestination}\n onPackagesChange={wizard.setPackages}\n onLabelFormatChange={wizard.setLabelFormat}\n onSenderContactChange={wizard.setSenderContact}\n onReceiverContactChange={wizard.setReceiverContact}\n onTargetPointChange={wizard.setTargetPoint}\n onC2cSendingMethodChange={wizard.setC2cSendingMethod}\n onSearchDropOffPoints={wizard.searchDropOffPoints}\n onBack={() => wizard.goToStep('provider')}\n onNext={wizard.handleConfigureNext}\n />\n ))\n .with('confirm', () => (\n <ConfirmStep\n rates={wizard.rates}\n ratesError={wizard.ratesError}\n selectedRate={wizard.selectedRate}\n selectedProvider={wizard.selectedProvider ?? ''}\n origin={wizard.origin}\n destination={wizard.destination}\n packages={wizard.packages}\n labelFormat={wizard.labelFormat}\n senderContact={wizard.senderContact}\n receiverContact={wizard.receiverContact}\n targetPoint={wizard.targetPoint}\n c2cSendingMethod={wizard.c2cSendingMethod}\n isSubmitting={wizard.isSubmitting}\n onRateSelect={wizard.setSelectedRate}\n onBack={() => wizard.goToStep('configure')}\n onSubmit={wizard.handleSubmit}\n />\n ))\n .exhaustive()}\n </PageBody>\n </Page>\n )\n}\n\nexport default CreateCarrierShipmentPage\n"],
|
|
5
|
+
"mappings": ";AAkBM,SACE,KADF;AAhBN,SAAS,aAAa;AACtB,SAAS,MAAM,gBAAgB;AAC/B,SAAS,kBAAkB;AAC3B,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAC1B,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAElC,MAAM,4BAA4B,MAAM;AACtC,QAAM,IAAI,KAAK;AACf,QAAM,SAAS,kBAAkB;AAEjC,SACE,oBAAC,QACC,+BAAC,YACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,UAAU,OAAO;AAAA,QACjB,OAAO,EAAE,kCAAkC,yBAAyB;AAAA;AAAA,IACtE;AAAA,IAEA,oBAAC,aAAU,MAAM,OAAO,MAAM,YAAY,OAAO,UAAU;AAAA,IAE1D,MAAM,OAAO,IAAI,EACf,KAAK,YAAY,MAChB;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,OAAO;AAAA,QAClB,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,UAAU,OAAO;AAAA;AAAA,IACnB,CACD,EACA,KAAK,aAAa,MACjB;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,OAAO;AAAA,QACf,aAAa,OAAO;AAAA,QACpB,UAAU,OAAO;AAAA,QACjB,aAAa,OAAO;AAAA,QACpB,eAAe,OAAO;AAAA,QACtB,iBAAiB,OAAO;AAAA,QACxB,aAAa,OAAO;AAAA,QACpB,kBAAkB,OAAO;AAAA,QACzB,iBAAiB,OAAO;AAAA,QACxB,YAAY,OAAO;AAAA,QACnB,qBAAqB,OAAO;AAAA,QAC5B,uBAAuB,OAAO;AAAA,QAC9B,mBAAmB,OAAO;AAAA,QAC1B,eAAe,OAAO;AAAA,QACtB,yBAAyB,OAAO;AAAA,QAChC,oBAAoB,OAAO;AAAA,QAC3B,gBAAgB,OAAO;AAAA,QACvB,qBAAqB,OAAO;AAAA,QAC5B,kBAAkB,OAAO;AAAA,QACzB,qBAAqB,OAAO;AAAA,QAC5B,uBAAuB,OAAO;AAAA,QAC9B,yBAAyB,OAAO;AAAA,QAChC,qBAAqB,OAAO;AAAA,QAC5B,0BAA0B,OAAO;AAAA,QACjC,uBAAuB,OAAO;AAAA,QAC9B,QAAQ,MAAM,OAAO,SAAS,UAAU;AAAA,QACxC,QAAQ,OAAO;AAAA;AAAA,IACjB,CACD,EACA,KAAK,WAAW,MACf;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,OAAO;AAAA,QACd,YAAY,OAAO;AAAA,QACnB,cAAc,OAAO;AAAA,QACrB,kBAAkB,OAAO,oBAAoB;AAAA,QAC7C,QAAQ,OAAO;AAAA,QACf,aAAa,OAAO;AAAA,QACpB,UAAU,OAAO;AAAA,QACjB,aAAa,OAAO;AAAA,QACpB,eAAe,OAAO;AAAA,QACtB,iBAAiB,OAAO;AAAA,QACxB,aAAa,OAAO;AAAA,QACpB,kBAAkB,OAAO;AAAA,QACzB,cAAc,OAAO;AAAA,QACrB,cAAc,OAAO;AAAA,QACrB,QAAQ,MAAM,OAAO,SAAS,WAAW;AAAA,QACzC,UAAU,OAAO;AAAA;AAAA,IACnB,CACD,EACA,WAAW;AAAA,KAChB,GACF;AAEJ;AAEA,IAAO,eAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/modules/shipping_carriers/backend/shipping-carriers/create/page.meta.ts"],
|
|
4
|
+
"sourcesContent": ["export const metadata = {\n requireAuth: true,\n requireFeatures: ['shipping_carriers.manage'],\n} as const\n"],
|
|
5
|
+
"mappings": "AAAO,MAAM,WAAW;AAAA,EACtB,aAAa;AAAA,EACb,iBAAiB,CAAC,0BAA0B;AAC9C;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -16,7 +16,9 @@ const calculateRatesSchema = z.object({
|
|
|
16
16
|
providerKey: z.string().min(1),
|
|
17
17
|
origin: addressSchema,
|
|
18
18
|
destination: addressSchema,
|
|
19
|
-
packages: z.array(packageSchema).min(1)
|
|
19
|
+
packages: z.array(packageSchema).min(1),
|
|
20
|
+
receiverPhone: z.string().optional(),
|
|
21
|
+
receiverEmail: z.string().optional()
|
|
20
22
|
});
|
|
21
23
|
const createShipmentSchema = z.object({
|
|
22
24
|
providerKey: z.string().min(1),
|
|
@@ -25,7 +27,13 @@ const createShipmentSchema = z.object({
|
|
|
25
27
|
destination: addressSchema,
|
|
26
28
|
packages: z.array(packageSchema).min(1),
|
|
27
29
|
serviceCode: z.string().min(1),
|
|
28
|
-
labelFormat: z.enum(["pdf", "zpl", "png"]).optional()
|
|
30
|
+
labelFormat: z.enum(["pdf", "zpl", "png"]).optional(),
|
|
31
|
+
senderPhone: z.string().optional(),
|
|
32
|
+
senderEmail: z.string().optional(),
|
|
33
|
+
receiverPhone: z.string().optional(),
|
|
34
|
+
receiverEmail: z.string().optional(),
|
|
35
|
+
targetPoint: z.string().optional(),
|
|
36
|
+
c2cSendingMethod: z.enum(["parcel_locker", "dispatch_order", "pop", "any_point"]).optional()
|
|
29
37
|
});
|
|
30
38
|
const trackingQuerySchema = z.object({
|
|
31
39
|
providerKey: z.string().min(1),
|
|
@@ -40,10 +48,17 @@ const cancelShipmentSchema = z.object({
|
|
|
40
48
|
shipmentId: z.string().uuid(),
|
|
41
49
|
reason: z.string().max(200).optional()
|
|
42
50
|
});
|
|
51
|
+
const searchDropOffPointsQuerySchema = z.object({
|
|
52
|
+
providerKey: z.string().min(1),
|
|
53
|
+
query: z.string().optional(),
|
|
54
|
+
type: z.string().optional(),
|
|
55
|
+
postCode: z.string().optional()
|
|
56
|
+
});
|
|
43
57
|
export {
|
|
44
58
|
calculateRatesSchema,
|
|
45
59
|
cancelShipmentSchema,
|
|
46
60
|
createShipmentSchema,
|
|
61
|
+
searchDropOffPointsQuerySchema,
|
|
47
62
|
trackingQuerySchema
|
|
48
63
|
};
|
|
49
64
|
//# sourceMappingURL=validators.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/shipping_carriers/data/validators.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from 'zod'\n\nconst addressSchema = z.object({\n countryCode: z.string().min(2).max(3),\n postalCode: z.string().min(1),\n city: z.string().min(1),\n line1: z.string().min(1),\n line2: z.string().optional(),\n})\n\nconst packageSchema = z.object({\n weightKg: z.number().positive(),\n lengthCm: z.number().positive(),\n widthCm: z.number().positive(),\n heightCm: z.number().positive(),\n})\n\nexport const calculateRatesSchema = z.object({\n providerKey: z.string().min(1),\n origin: addressSchema,\n destination: addressSchema,\n packages: z.array(packageSchema).min(1),\n})\n\nexport const createShipmentSchema = z.object({\n providerKey: z.string().min(1),\n orderId: z.string().uuid(),\n origin: addressSchema,\n destination: addressSchema,\n packages: z.array(packageSchema).min(1),\n serviceCode: z.string().min(1),\n labelFormat: z.enum(['pdf', 'zpl', 'png']).optional(),\n})\n\nexport const trackingQuerySchema = z.object({\n providerKey: z.string().min(1),\n shipmentId: z.string().uuid().optional(),\n trackingNumber: z.string().min(1).optional(),\n}).refine((value) => Boolean(value.shipmentId || value.trackingNumber), {\n message: 'shipmentId or trackingNumber is required',\n path: ['shipmentId'],\n})\n\nexport const cancelShipmentSchema = z.object({\n providerKey: z.string().min(1),\n shipmentId: z.string().uuid(),\n reason: z.string().max(200).optional(),\n})\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,SAAS;AAElB,MAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACpC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAED,MAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAU,EAAE,OAAO,EAAE,SAAS;AAChC,CAAC;AAEM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU,EAAE,MAAM,aAAa,EAAE,IAAI,CAAC;
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\n\nconst addressSchema = z.object({\n countryCode: z.string().min(2).max(3),\n postalCode: z.string().min(1),\n city: z.string().min(1),\n line1: z.string().min(1),\n line2: z.string().optional(),\n})\n\nconst packageSchema = z.object({\n weightKg: z.number().positive(),\n lengthCm: z.number().positive(),\n widthCm: z.number().positive(),\n heightCm: z.number().positive(),\n})\n\nexport const calculateRatesSchema = z.object({\n providerKey: z.string().min(1),\n origin: addressSchema,\n destination: addressSchema,\n packages: z.array(packageSchema).min(1),\n receiverPhone: z.string().optional(),\n receiverEmail: z.string().optional(),\n})\n\nexport const createShipmentSchema = z.object({\n providerKey: z.string().min(1),\n orderId: z.string().uuid(),\n origin: addressSchema,\n destination: addressSchema,\n packages: z.array(packageSchema).min(1),\n serviceCode: z.string().min(1),\n labelFormat: z.enum(['pdf', 'zpl', 'png']).optional(),\n senderPhone: z.string().optional(),\n senderEmail: z.string().optional(),\n receiverPhone: z.string().optional(),\n receiverEmail: z.string().optional(),\n targetPoint: z.string().optional(),\n c2cSendingMethod: z.enum(['parcel_locker', 'dispatch_order', 'pop', 'any_point']).optional(),\n})\n\nexport const trackingQuerySchema = z.object({\n providerKey: z.string().min(1),\n shipmentId: z.string().uuid().optional(),\n trackingNumber: z.string().min(1).optional(),\n}).refine((value) => Boolean(value.shipmentId || value.trackingNumber), {\n message: 'shipmentId or trackingNumber is required',\n path: ['shipmentId'],\n})\n\nexport const cancelShipmentSchema = z.object({\n providerKey: z.string().min(1),\n shipmentId: z.string().uuid(),\n reason: z.string().max(200).optional(),\n})\n\nexport const searchDropOffPointsQuerySchema = z.object({\n providerKey: z.string().min(1),\n query: z.string().optional(),\n type: z.string().optional(),\n postCode: z.string().optional(),\n})\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS;AAElB,MAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACpC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAED,MAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAU,EAAE,OAAO,EAAE,SAAS;AAChC,CAAC;AAEM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU,EAAE,MAAM,aAAa,EAAE,IAAI,CAAC;AAAA,EACtC,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAe,EAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAEM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,SAAS,EAAE,OAAO,EAAE,KAAK;AAAA,EACzB,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU,EAAE,MAAM,aAAa,EAAE,IAAI,CAAC;AAAA,EACtC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,aAAa,EAAE,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,EAAE,SAAS;AAAA,EACpD,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,kBAAkB,EAAE,KAAK,CAAC,iBAAiB,kBAAkB,OAAO,WAAW,CAAC,EAAE,SAAS;AAC7F,CAAC;AAEM,MAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EACvC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAC7C,CAAC,EAAE,OAAO,CAAC,UAAU,QAAQ,MAAM,cAAc,MAAM,cAAc,GAAG;AAAA,EACtE,SAAS;AAAA,EACT,MAAM,CAAC,YAAY;AACrB,CAAC;AAEM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,YAAY,EAAE,OAAO,EAAE,KAAK;AAAA,EAC5B,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AACvC,CAAC;AAEM,MAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,EAAE,OAAO,EAAE,SAAS;AAChC,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Input } from "@open-mercato/ui/primitives/input";
|
|
4
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
5
|
+
const AddressFields = (props) => {
|
|
6
|
+
const { prefix, address, onChange, disabled } = props;
|
|
7
|
+
const t = useT();
|
|
8
|
+
return /* @__PURE__ */ jsxs("div", { className: "grid gap-3 sm:grid-cols-2", children: [
|
|
9
|
+
/* @__PURE__ */ jsxs("div", { className: "sm:col-span-2", children: [
|
|
10
|
+
/* @__PURE__ */ jsx("label", { htmlFor: `${prefix}-line1`, className: "mb-1 block text-xs font-medium text-muted-foreground", children: t("shipping_carriers.create.field.addressLine1", "Address line 1") }),
|
|
11
|
+
/* @__PURE__ */ jsx(
|
|
12
|
+
Input,
|
|
13
|
+
{
|
|
14
|
+
id: `${prefix}-line1`,
|
|
15
|
+
value: address.line1,
|
|
16
|
+
onChange: (event) => onChange({ ...address, line1: event.target.value }),
|
|
17
|
+
disabled
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
] }),
|
|
21
|
+
/* @__PURE__ */ jsxs("div", { className: "sm:col-span-2", children: [
|
|
22
|
+
/* @__PURE__ */ jsx("label", { htmlFor: `${prefix}-line2`, className: "mb-1 block text-xs font-medium text-muted-foreground", children: t("shipping_carriers.create.field.addressLine2", "Address line 2") }),
|
|
23
|
+
/* @__PURE__ */ jsx(
|
|
24
|
+
Input,
|
|
25
|
+
{
|
|
26
|
+
id: `${prefix}-line2`,
|
|
27
|
+
value: address.line2 ?? "",
|
|
28
|
+
onChange: (event) => onChange({ ...address, line2: event.target.value || void 0 }),
|
|
29
|
+
disabled
|
|
30
|
+
}
|
|
31
|
+
)
|
|
32
|
+
] }),
|
|
33
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
34
|
+
/* @__PURE__ */ jsx("label", { htmlFor: `${prefix}-city`, className: "mb-1 block text-xs font-medium text-muted-foreground", children: t("shipping_carriers.create.field.city", "City") }),
|
|
35
|
+
/* @__PURE__ */ jsx(
|
|
36
|
+
Input,
|
|
37
|
+
{
|
|
38
|
+
id: `${prefix}-city`,
|
|
39
|
+
value: address.city,
|
|
40
|
+
onChange: (event) => onChange({ ...address, city: event.target.value }),
|
|
41
|
+
disabled
|
|
42
|
+
}
|
|
43
|
+
)
|
|
44
|
+
] }),
|
|
45
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
46
|
+
/* @__PURE__ */ jsx("label", { htmlFor: `${prefix}-postal`, className: "mb-1 block text-xs font-medium text-muted-foreground", children: t("shipping_carriers.create.field.postalCode", "Postal code") }),
|
|
47
|
+
/* @__PURE__ */ jsx(
|
|
48
|
+
Input,
|
|
49
|
+
{
|
|
50
|
+
id: `${prefix}-postal`,
|
|
51
|
+
value: address.postalCode,
|
|
52
|
+
onChange: (event) => onChange({ ...address, postalCode: event.target.value }),
|
|
53
|
+
disabled
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
] }),
|
|
57
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
58
|
+
/* @__PURE__ */ jsx("label", { htmlFor: `${prefix}-country`, className: "mb-1 block text-xs font-medium text-muted-foreground", children: t("shipping_carriers.create.field.countryCode", "Country code (ISO)") }),
|
|
59
|
+
/* @__PURE__ */ jsx(
|
|
60
|
+
Input,
|
|
61
|
+
{
|
|
62
|
+
id: `${prefix}-country`,
|
|
63
|
+
value: address.countryCode,
|
|
64
|
+
placeholder: "PL",
|
|
65
|
+
maxLength: 3,
|
|
66
|
+
onChange: (event) => onChange({ ...address, countryCode: event.target.value.toUpperCase() }),
|
|
67
|
+
disabled
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
] })
|
|
71
|
+
] });
|
|
72
|
+
};
|
|
73
|
+
export {
|
|
74
|
+
AddressFields
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=AddressFields.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/modules/shipping_carriers/lib/shipment-wizard/components/AddressFields.tsx"],
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport type { AddressFieldsProps } from '../types'\n\nexport const AddressFields = (props: AddressFieldsProps) => {\n const { prefix, address, onChange, disabled } = props\n const t = useT()\n\n return (\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"sm:col-span-2\">\n <label htmlFor={`${prefix}-line1`} className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('shipping_carriers.create.field.addressLine1', 'Address line 1')}\n </label>\n <Input\n id={`${prefix}-line1`}\n value={address.line1}\n onChange={(event) => onChange({ ...address, line1: event.target.value })}\n disabled={disabled}\n />\n </div>\n <div className=\"sm:col-span-2\">\n <label htmlFor={`${prefix}-line2`} className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('shipping_carriers.create.field.addressLine2', 'Address line 2')}\n </label>\n <Input\n id={`${prefix}-line2`}\n value={address.line2 ?? ''}\n onChange={(event) => onChange({ ...address, line2: event.target.value || undefined })}\n disabled={disabled}\n />\n </div>\n <div>\n <label htmlFor={`${prefix}-city`} className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('shipping_carriers.create.field.city', 'City')}\n </label>\n <Input\n id={`${prefix}-city`}\n value={address.city}\n onChange={(event) => onChange({ ...address, city: event.target.value })}\n disabled={disabled}\n />\n </div>\n <div>\n <label htmlFor={`${prefix}-postal`} className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('shipping_carriers.create.field.postalCode', 'Postal code')}\n </label>\n <Input\n id={`${prefix}-postal`}\n value={address.postalCode}\n onChange={(event) => onChange({ ...address, postalCode: event.target.value })}\n disabled={disabled}\n />\n </div>\n <div>\n <label htmlFor={`${prefix}-country`} className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('shipping_carriers.create.field.countryCode', 'Country code (ISO)')}\n </label>\n <Input\n id={`${prefix}-country`}\n value={address.countryCode}\n placeholder=\"PL\"\n maxLength={3}\n onChange={(event) => onChange({ ...address, countryCode: event.target.value.toUpperCase() })}\n disabled={disabled}\n />\n </div>\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": ";AAYM,SACE,KADF;AAVN,SAAS,aAAa;AACtB,SAAS,YAAY;AAGd,MAAM,gBAAgB,CAAC,UAA8B;AAC1D,QAAM,EAAE,QAAQ,SAAS,UAAU,SAAS,IAAI;AAChD,QAAM,IAAI,KAAK;AAEf,SACE,qBAAC,SAAI,WAAU,6BACb;AAAA,yBAAC,SAAI,WAAU,iBACb;AAAA,0BAAC,WAAM,SAAS,GAAG,MAAM,UAAU,WAAU,wDAC1C,YAAE,+CAA+C,gBAAgB,GACpE;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,UAAU,CAAC,UAAU,SAAS,EAAE,GAAG,SAAS,OAAO,MAAM,OAAO,MAAM,CAAC;AAAA,UACvE;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,qBAAC,SAAI,WAAU,iBACb;AAAA,0BAAC,WAAM,SAAS,GAAG,MAAM,UAAU,WAAU,wDAC1C,YAAE,+CAA+C,gBAAgB,GACpE;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,QAAQ,SAAS;AAAA,UACxB,UAAU,CAAC,UAAU,SAAS,EAAE,GAAG,SAAS,OAAO,MAAM,OAAO,SAAS,OAAU,CAAC;AAAA,UACpF;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,qBAAC,SACC;AAAA,0BAAC,WAAM,SAAS,GAAG,MAAM,SAAS,WAAU,wDACzC,YAAE,uCAAuC,MAAM,GAClD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,UAAU,CAAC,UAAU,SAAS,EAAE,GAAG,SAAS,MAAM,MAAM,OAAO,MAAM,CAAC;AAAA,UACtE;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,qBAAC,SACC;AAAA,0BAAC,WAAM,SAAS,GAAG,MAAM,WAAW,WAAU,wDAC3C,YAAE,6CAA6C,aAAa,GAC/D;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,UAAU,CAAC,UAAU,SAAS,EAAE,GAAG,SAAS,YAAY,MAAM,OAAO,MAAM,CAAC;AAAA,UAC5E;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,qBAAC,SACC;AAAA,0BAAC,WAAM,SAAS,GAAG,MAAM,YAAY,WAAU,wDAC5C,YAAE,8CAA8C,oBAAoB,GACvE;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,aAAY;AAAA,UACZ,WAAW;AAAA,UACX,UAAU,CAAC,UAAU,SAAS,EAAE,GAAG,SAAS,aAAa,MAAM,OAAO,MAAM,YAAY,EAAE,CAAC;AAAA,UAC3F;AAAA;AAAA,MACF;AAAA,OACF;AAAA,KACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|