bananas-commerce-admin 0.20.1 → 0.20.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/esm/extensions/member/components/SubscriptionsListItem.js +2 -1
  2. package/dist/esm/extensions/member/components/SubscriptionsListItem.js.map +1 -1
  3. package/dist/esm/extensions/pim/contrib/ArticleProduct.js +98 -0
  4. package/dist/esm/extensions/pim/contrib/ArticleProduct.js.map +1 -0
  5. package/dist/esm/extensions/pim/index.js +13 -0
  6. package/dist/esm/extensions/pim/index.js.map +1 -0
  7. package/dist/esm/extensions/pim/types/contrib.js +2 -0
  8. package/dist/esm/extensions/pim/types/contrib.js.map +1 -0
  9. package/dist/esm/index.js +1 -0
  10. package/dist/esm/index.js.map +1 -1
  11. package/dist/esm/util/format_purchase_number.js +1 -1
  12. package/dist/esm/util/format_purchase_number.js.map +1 -1
  13. package/dist/types/extensions/fulfillment/types/order.d.ts +2 -2
  14. package/dist/types/extensions/member/types/purchase.d.ts +1 -1
  15. package/dist/types/extensions/member/types/subscription.d.ts +1 -1
  16. package/dist/types/extensions/pim/contrib/ArticleProduct.d.ts +4 -0
  17. package/dist/types/extensions/pim/index.d.ts +2 -0
  18. package/dist/types/extensions/pim/types/contrib.d.ts +19 -0
  19. package/dist/types/extensions/pos/types/purchase.d.ts +1 -1
  20. package/dist/types/index.d.ts +1 -0
  21. package/dist/types/util/format_purchase_number.d.ts +1 -1
  22. package/package.json +6 -1
  23. package/src/extensions/fulfillment/types/order.ts +2 -2
  24. package/src/extensions/member/components/SubscriptionsListItem.tsx +2 -1
  25. package/src/extensions/member/types/purchase.ts +1 -1
  26. package/src/extensions/member/types/subscription.ts +1 -1
  27. package/src/extensions/pim/contrib/ArticleProduct.tsx +191 -0
  28. package/src/extensions/pim/index.tsx +16 -0
  29. package/src/extensions/pim/types/contrib.ts +21 -0
  30. package/src/extensions/pos/types/purchase.ts +1 -1
  31. package/src/index.ts +1 -0
  32. package/src/util/format_purchase_number.ts +2 -2
@@ -13,6 +13,7 @@ import { TableCell } from "../../../components/Table/TableCell";
13
13
  import TableHead from "../../../components/Table/TableHead";
14
14
  import TableHeading from "../../../components/Table/TableHeading";
15
15
  import { useI18n } from "../../../contexts/I18nContext";
16
+ import { formatPurchaseNumber } from "../../../util/format_purchase_number";
16
17
  export const SubscriptionsListItem = ({ period }) => {
17
18
  const [open, setOpen] = useState(false);
18
19
  const { t } = useI18n();
@@ -26,7 +27,7 @@ export const SubscriptionsListItem = ({ period }) => {
26
27
  React.createElement(TableCell, null, DateTime.fromISO(period.from_date).toISODate()),
27
28
  React.createElement(TableCell, null, DateTime.fromISO(period.due_date).toISODate()),
28
29
  React.createElement(TableCell, { align: "right" }, period.amount),
29
- React.createElement(TableCell, { align: "right" }, period.purchase_number),
30
+ React.createElement(TableCell, { align: "right" }, formatPurchaseNumber(period.purchase_number)),
30
31
  React.createElement(TableCell, { align: "right" }, period.date_confirmed != null ? (React.createElement(Chip, { color: "success", icon: React.createElement(CheckCircleIcon, null), label: t("Paid"), size: "small", sx: { textTransform: "uppercase" } })) : (React.createElement(Chip, { color: "error", icon: React.createElement(CancelIcon, null), label: t("Not paid"), size: "small", sx: { textTransform: "uppercase" } }))),
31
32
  React.createElement(TableCell, { sx: { width: 34, pl: 0 } },
32
33
  React.createElement(Stack, { direction: "row", justifyContent: "end" },
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionsListItem.js","sourceRoot":"","sources":["../../../../../src/extensions/member/components/SubscriptionsListItem.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SubscriptionsListItem.js","sourceRoot":"","sources":["../../../../../src/extensions/member/components/SubscriptionsListItem.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import React from "react";
2
+ import { TableBody, TableHead, TableRow } from "@mui/material";
3
+ import Box from "@mui/material/Box";
4
+ import ImageList from "@mui/material/ImageList";
5
+ import ImageListItem from "@mui/material/ImageListItem";
6
+ import ImageListItemBar from "@mui/material/ImageListItemBar";
7
+ import Modal from "@mui/material/Modal";
8
+ import Card from "../../../components/Card";
9
+ import CardContent from "../../../components/Card/CardContent";
10
+ import CardFieldText from "../../../components/Card/CardFieldText";
11
+ import CardHeader from "../../../components/Card/CardHeader";
12
+ import CardRow from "../../../components/Card/CardRow";
13
+ import Table from "../../../components/Table";
14
+ import { TableCell } from "../../../components/Table/TableCell";
15
+ import TableHeading from "../../../components/Table/TableHeading";
16
+ import { useI18n } from "../../../contexts/I18nContext";
17
+ import { capitalize } from "../../../util";
18
+ const ArticleProductCard = ({ data, params }) => {
19
+ const { t } = useI18n();
20
+ const [selectedAsset, setSelectedAsset] = React.useState(null);
21
+ const { code: articleCode } = params;
22
+ const { product, assets } = data;
23
+ const articleAssets = assets.filter((asset) => asset.article_code == articleCode || asset.article_code == "");
24
+ const imageAssets = articleAssets.filter((asset) => asset.asset_type == "image");
25
+ const otherAssets = articleAssets.filter((asset) => asset.asset_type !== "image");
26
+ const productProperties = Object.entries(product.properties);
27
+ return (React.createElement(Card, { columns: 1, isEditable: false },
28
+ React.createElement(CardHeader, { title: "Product" }),
29
+ React.createElement(CardContent, null,
30
+ React.createElement(CardRow, null,
31
+ React.createElement(CardFieldText, { formName: "name", label: t("Name"), required: true, value: product.name })),
32
+ React.createElement(CardRow, null,
33
+ React.createElement(CardFieldText, { formName: "description", label: t("Description"), required: true, value: product.description }))),
34
+ productProperties.length > 0 && (React.createElement(React.Fragment, null,
35
+ React.createElement(CardHeader, { title: t("Properties") }),
36
+ React.createElement(Table, { count: productProperties.length },
37
+ React.createElement(TableBody, { sx: {
38
+ "& .MuiTableRow-root:first-of-type .MuiTableCell-root": (theme) => ({
39
+ borderTop: `1px solid ${theme.palette.divider}`,
40
+ }),
41
+ } }, productProperties
42
+ .sort((a, b) => (a[0] < b[0] ? -1 : 1))
43
+ .map((prop) => (React.createElement(TableRow, { key: prop[0] },
44
+ React.createElement(TableCell, null, capitalize(prop[0])),
45
+ React.createElement(TableCell, { typographyProps: {
46
+ variant: "caption",
47
+ color: "text.secondary",
48
+ } }, prop[1])))))))),
49
+ articleAssets.length > 0 && React.createElement(CardHeader, { title: t("Assets") }),
50
+ imageAssets.length > 0 && (React.createElement(React.Fragment, null,
51
+ React.createElement(Modal, { "aria-describedby": "modal-modal-description", "aria-labelledby": "modal-modal-title", open: selectedAsset !== null, onClose: () => setSelectedAsset(null) },
52
+ React.createElement(Box, { sx: {
53
+ position: "absolute",
54
+ top: "50%",
55
+ left: "50%",
56
+ transform: "translate(-50%, -50%)",
57
+ width: "100vw", // Set explicit width
58
+ height: "100vh", // Set explicit height
59
+ bgcolor: "rgba(0, 0, 0, 0.7)", // Dark overlay background
60
+ boxShadow: 24,
61
+ p: 2, // Reduced padding
62
+ display: "flex",
63
+ justifyContent: "center",
64
+ alignItems: "center",
65
+ overflow: "hidden", // Hide any overflowing content
66
+ outline: "none",
67
+ }, onClick: () => setSelectedAsset(null) }, selectedAsset !== null && (React.createElement("img", { alt: selectedAsset.caption, loading: "lazy", src: selectedAsset.url, style: {
68
+ maxWidth: "100%",
69
+ maxHeight: "100%",
70
+ objectFit: "contain",
71
+ borderRadius: "8px", // Subtle rounded corners for the image
72
+ } })))),
73
+ React.createElement(CardContent, { sx: {
74
+ width: "100%",
75
+ height: 400,
76
+ overflowY: "scroll",
77
+ paddingTop: 0,
78
+ paddingBottom: 0,
79
+ paddingLeft: 3,
80
+ paddingRight: 3,
81
+ } },
82
+ React.createElement(ImageList, { cols: 3, gap: 8, variant: "masonry" }, imageAssets.map((asset) => (React.createElement(ImageListItem, { key: asset.id, onClick: () => setSelectedAsset(asset) },
83
+ React.createElement("img", { alt: asset.caption, loading: "lazy", src: asset.url }),
84
+ React.createElement(ImageListItemBar, { subtitle: asset.caption })))))))),
85
+ otherAssets.length > 0 && (React.createElement(Table, { count: otherAssets.length },
86
+ React.createElement(TableHead, null,
87
+ React.createElement(TableRow, null,
88
+ React.createElement(TableHeading, null, t("Asset ID")),
89
+ React.createElement(TableHeading, { align: "right" }, t("Type")),
90
+ React.createElement(TableHeading, { align: "right" }, t("Caption")))),
91
+ React.createElement(TableBody, { sx: { ".MuiTableRow-root:last-child > .MuiTableCell-root": { borderBottom: "none" } } }, otherAssets.map((asset) => (React.createElement(TableRow, { key: asset.id, sx: { height: 56 } },
92
+ React.createElement(TableCell, { sx: { py: 0 } },
93
+ React.createElement("a", { href: asset.url, rel: "noreferrer", target: "_blank" }, asset.id)),
94
+ React.createElement(TableCell, { align: "right", sx: { py: 0 } }, asset.asset_type),
95
+ React.createElement(TableCell, { align: "right", sx: { py: 0 } }, asset.caption)))))))));
96
+ };
97
+ export default ArticleProductCard;
98
+ //# sourceMappingURL=ArticleProduct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArticleProduct.js","sourceRoot":"","sources":["../../../../../src/extensions/pim/contrib/ArticleProduct.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import InventoryOutlinedIcon from "@mui/icons-material/InventoryOutlined";
2
+ export const contrib = {
3
+ catalog: {
4
+ "catalog:article:detail:product": {
5
+ title: "Product",
6
+ icon: InventoryOutlinedIcon,
7
+ component: async () => (await import("./contrib/ArticleProduct")).default,
8
+ predicate: (article) => !!article.product_number,
9
+ variant: "inline",
10
+ },
11
+ },
12
+ };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/pim/index.tsx"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,uCAAuC,CAAC;AAK1E,MAAM,CAAC,MAAM,OAAO,GAAwC;IAC1D,OAAO,EAAE;QACP,gCAAgC,EAAE;YAChC,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,qBAAqB;YAC3B,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO;YACzE,SAAS,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc;YAC/D,OAAO,EAAE,QAAQ;SAClB;KACF;CACO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contrib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contrib.js","sourceRoot":"","sources":["../../../../../src/extensions/pim/types/contrib.ts"],"names":[],"mappings":""}
package/dist/esm/index.js CHANGED
@@ -65,6 +65,7 @@ export * as catalog from "./extensions/catalog";
65
65
  export * as fulfillment from "./extensions/fulfillment";
66
66
  export * as inventory from "./extensions/inventory";
67
67
  export * as member from "./extensions/member";
68
+ export * as pim from "./extensions/pim";
68
69
  export * as pos from "./extensions/pos";
69
70
  export * as pricing from "./extensions/pricing";
70
71
  export * as report from "./extensions/report";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAE7B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export function formatPurchaseNumber(number) {
2
2
  if (typeof number == "string") {
3
- return formatPurchaseNumber(parseInt(number));
3
+ return number.length > 0 ? `#${number}` : "—";
4
4
  }
5
5
  if (number != null && isFinite(number)) {
6
6
  return `#${number}`;
@@ -1 +1 @@
1
- {"version":3,"file":"format_purchase_number.js","sourceRoot":"","sources":["../../../src/util/format_purchase_number.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAAC,MAAwB;IAC3D,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,OAAO,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,MAAM,EAAE,CAAC;IACtB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"format_purchase_number.js","sourceRoot":"","sources":["../../../src/util/format_purchase_number.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAAC,MAA+B;IAClE,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,MAAM,EAAE,CAAC;IACtB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -4,7 +4,7 @@ export type OrderDestinationType = "HOME" | "STORE" | "SERVICE_POINT" | "LOCKER"
4
4
  export type OrderStateType = "PENDING" | "CONFIRMED" | "SENT" | "IN_TRANSIT" | "READY_FOR_PICKUP" | "DELIVERED" | "CANCELLED";
5
5
  export interface OrderListItem {
6
6
  reference: string;
7
- purchase_number: number;
7
+ purchase_number: string;
8
8
  email: string;
9
9
  phone: string | null;
10
10
  option_name: string;
@@ -21,7 +21,7 @@ export interface OrderListItem {
21
21
  }
22
22
  export interface OrderDetail {
23
23
  reference: string;
24
- purchase_number: number;
24
+ purchase_number: string;
25
25
  email: string;
26
26
  phone: string | null;
27
27
  destination_type: OrderDestinationType;
@@ -10,7 +10,7 @@ export interface PurchaseItem {
10
10
  line_number: number;
11
11
  }
12
12
  export interface Purchase {
13
- number: number;
13
+ number: string;
14
14
  checkout_session: string;
15
15
  main_payment_identifier: null;
16
16
  date_created: string;
@@ -10,7 +10,7 @@ export interface SubscriptionPeriod {
10
10
  from_date: string;
11
11
  expiry_date: string;
12
12
  amount: string;
13
- purchase_number: number;
13
+ purchase_number: string | null;
14
14
  due_date: string;
15
15
  date_confirmed: string;
16
16
  charges: Charge[];
@@ -0,0 +1,4 @@
1
+ import { ContribComponent } from "../../../types";
2
+ import { ArticleProductResponse } from "../types/contrib";
3
+ declare const ArticleProductCard: ContribComponent<ArticleProductResponse>;
4
+ export default ArticleProductCard;
@@ -0,0 +1,2 @@
1
+ import { ContribComponentMap } from "../../types";
2
+ export declare const contrib: Record<string, ContribComponentMap>;
@@ -0,0 +1,19 @@
1
+ export interface ArticleProduct {
2
+ number: string;
3
+ item_type: string;
4
+ name: string;
5
+ description: string;
6
+ properties: object;
7
+ is_active: boolean;
8
+ }
9
+ export interface ArticleAsset {
10
+ id: string;
11
+ asset_type: string;
12
+ caption: string;
13
+ article_code: string;
14
+ url: string;
15
+ }
16
+ export interface ArticleProductResponse {
17
+ product: ArticleProduct;
18
+ assets: ArticleAsset[];
19
+ }
@@ -1,6 +1,6 @@
1
1
  import { Receipt } from "./receipt";
2
2
  export interface PurchaseDetail {
3
- number: number;
3
+ number: string;
4
4
  checkout_session?: string;
5
5
  main_payment_identifier?: string;
6
6
  date_initiated: string;
@@ -65,6 +65,7 @@ export * as catalog from "./extensions/catalog";
65
65
  export * as fulfillment from "./extensions/fulfillment";
66
66
  export * as inventory from "./extensions/inventory";
67
67
  export * as member from "./extensions/member";
68
+ export * as pim from "./extensions/pim";
68
69
  export * as pos from "./extensions/pos";
69
70
  export * as pricing from "./extensions/pricing";
70
71
  export * as report from "./extensions/report";
@@ -1 +1 @@
1
- export declare function formatPurchaseNumber(number?: number | string): string;
1
+ export declare function formatPurchaseNumber(number?: number | string | null): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bananas-commerce-admin",
3
- "version": "0.20.1",
3
+ "version": "0.20.3",
4
4
  "description": "What's this, an admin for apes?",
5
5
  "keywords": [
6
6
  "admin",
@@ -12,6 +12,11 @@
12
12
  "bananas-commerce-admin"
13
13
  ],
14
14
  "author": "Elias Sjögreen",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/5m/bananas-commerce.git",
18
+ "directory": "admin/packages/bananas-commerce-admin"
19
+ },
15
20
  "module": "./dist/esm/index.js",
16
21
  "main": "./dist/cjs/index.js",
17
22
  "types": "./dist/types/index.d.ts",
@@ -14,7 +14,7 @@ export type OrderStateType =
14
14
 
15
15
  export interface OrderListItem {
16
16
  reference: string;
17
- purchase_number: number;
17
+ purchase_number: string;
18
18
  email: string;
19
19
  phone: string | null;
20
20
  option_name: string;
@@ -32,7 +32,7 @@ export interface OrderListItem {
32
32
 
33
33
  export interface OrderDetail {
34
34
  reference: string;
35
- purchase_number: number;
35
+ purchase_number: string;
36
36
  email: string;
37
37
  phone: string | null;
38
38
  destination_type: OrderDestinationType;
@@ -16,6 +16,7 @@ import { TableCell } from "../../../components/Table/TableCell";
16
16
  import TableHead from "../../../components/Table/TableHead";
17
17
  import TableHeading from "../../../components/Table/TableHeading";
18
18
  import { useI18n } from "../../../contexts/I18nContext";
19
+ import { formatPurchaseNumber } from "../../../util/format_purchase_number";
19
20
  import { SubscriptionPeriod } from "../types/subscription";
20
21
 
21
22
  export interface SubscriptionsListItemProps {
@@ -41,7 +42,7 @@ export const SubscriptionsListItem: React.FC<SubscriptionsListItemProps> = ({ pe
41
42
  <TableCell>{DateTime.fromISO(period.from_date as string).toISODate()}</TableCell>
42
43
  <TableCell>{DateTime.fromISO(period.due_date as string).toISODate()}</TableCell>
43
44
  <TableCell align="right">{period.amount}</TableCell>
44
- <TableCell align="right">{period.purchase_number}</TableCell>
45
+ <TableCell align="right">{formatPurchaseNumber(period.purchase_number)}</TableCell>
45
46
  <TableCell align="right">
46
47
  {period.date_confirmed != null ? (
47
48
  <Chip
@@ -12,7 +12,7 @@ export interface PurchaseItem {
12
12
  }
13
13
 
14
14
  export interface Purchase {
15
- number: number;
15
+ number: string;
16
16
  checkout_session: string;
17
17
  main_payment_identifier: null;
18
18
  date_created: string;
@@ -11,7 +11,7 @@ export interface SubscriptionPeriod {
11
11
  from_date: string;
12
12
  expiry_date: string;
13
13
  amount: string;
14
- purchase_number: number;
14
+ purchase_number: string | null;
15
15
  due_date: string;
16
16
  date_confirmed: string;
17
17
  charges: Charge[];
@@ -0,0 +1,191 @@
1
+ import React from "react";
2
+
3
+ import { TableBody, TableHead, TableRow } from "@mui/material";
4
+ import Box from "@mui/material/Box";
5
+ import ImageList from "@mui/material/ImageList";
6
+ import ImageListItem from "@mui/material/ImageListItem";
7
+ import ImageListItemBar from "@mui/material/ImageListItemBar";
8
+ import Modal from "@mui/material/Modal";
9
+
10
+ import Card from "../../../components/Card";
11
+ import CardContent from "../../../components/Card/CardContent";
12
+ import CardFieldText from "../../../components/Card/CardFieldText";
13
+ import CardHeader from "../../../components/Card/CardHeader";
14
+ import CardRow from "../../../components/Card/CardRow";
15
+ import Table from "../../../components/Table";
16
+ import { TableCell } from "../../../components/Table/TableCell";
17
+ import TableHeading from "../../../components/Table/TableHeading";
18
+ import { useI18n } from "../../../contexts/I18nContext";
19
+ import { ContribComponent } from "../../../types";
20
+ import { capitalize } from "../../../util";
21
+ import { ArticleAsset, ArticleProductResponse } from "../types/contrib";
22
+
23
+ const ArticleProductCard: ContribComponent<ArticleProductResponse> = ({ data, params }) => {
24
+ const { t } = useI18n();
25
+ const [selectedAsset, setSelectedAsset] = React.useState<ArticleAsset | null>(null);
26
+
27
+ const { code: articleCode } = params as { code: string };
28
+ const { product, assets } = data;
29
+
30
+ const articleAssets = assets.filter(
31
+ (asset) => asset.article_code == articleCode || asset.article_code == "",
32
+ );
33
+ const imageAssets = articleAssets.filter((asset) => asset.asset_type == "image");
34
+ const otherAssets = articleAssets.filter((asset) => asset.asset_type !== "image");
35
+
36
+ const productProperties = Object.entries(product.properties);
37
+
38
+ return (
39
+ <Card columns={1} isEditable={false}>
40
+ <CardHeader title="Product" />
41
+
42
+ <CardContent>
43
+ <CardRow>
44
+ <CardFieldText formName="name" label={t("Name")} required={true} value={product.name} />
45
+ </CardRow>
46
+ <CardRow>
47
+ <CardFieldText
48
+ formName="description"
49
+ label={t("Description")}
50
+ required={true}
51
+ value={product.description}
52
+ />
53
+ </CardRow>
54
+ </CardContent>
55
+
56
+ {productProperties.length > 0 && (
57
+ <>
58
+ <CardHeader title={t("Properties")} />
59
+
60
+ <Table count={productProperties.length}>
61
+ <TableBody
62
+ sx={{
63
+ "& .MuiTableRow-root:first-of-type .MuiTableCell-root": (theme) => ({
64
+ borderTop: `1px solid ${theme.palette.divider}`,
65
+ }),
66
+ }}
67
+ >
68
+ {productProperties
69
+ .sort((a, b) => (a[0] < b[0] ? -1 : 1))
70
+ .map((prop) => (
71
+ <TableRow key={prop[0]}>
72
+ <TableCell>{capitalize(prop[0])}</TableCell>
73
+ <TableCell
74
+ typographyProps={{
75
+ variant: "caption",
76
+ color: "text.secondary",
77
+ }}
78
+ >
79
+ {prop[1]}
80
+ </TableCell>
81
+ </TableRow>
82
+ ))}
83
+ </TableBody>
84
+ </Table>
85
+ </>
86
+ )}
87
+
88
+ {articleAssets.length > 0 && <CardHeader title={t("Assets")} />}
89
+
90
+ {imageAssets.length > 0 && (
91
+ <>
92
+ <Modal
93
+ aria-describedby="modal-modal-description"
94
+ aria-labelledby="modal-modal-title"
95
+ open={selectedAsset !== null}
96
+ onClose={() => setSelectedAsset(null)}
97
+ >
98
+ <Box
99
+ sx={{
100
+ position: "absolute",
101
+ top: "50%",
102
+ left: "50%",
103
+ transform: "translate(-50%, -50%)",
104
+ width: "100vw", // Set explicit width
105
+ height: "100vh", // Set explicit height
106
+ bgcolor: "rgba(0, 0, 0, 0.7)", // Dark overlay background
107
+ boxShadow: 24,
108
+ p: 2, // Reduced padding
109
+ display: "flex",
110
+ justifyContent: "center",
111
+ alignItems: "center",
112
+ overflow: "hidden", // Hide any overflowing content
113
+ outline: "none",
114
+ }}
115
+ onClick={() => setSelectedAsset(null)}
116
+ >
117
+ {selectedAsset !== null && (
118
+ <img
119
+ alt={selectedAsset.caption}
120
+ loading="lazy"
121
+ src={selectedAsset.url}
122
+ style={{
123
+ maxWidth: "100%",
124
+ maxHeight: "100%",
125
+ objectFit: "contain",
126
+ borderRadius: "8px", // Subtle rounded corners for the image
127
+ }}
128
+ />
129
+ )}
130
+ </Box>
131
+ </Modal>
132
+
133
+ <CardContent
134
+ sx={{
135
+ width: "100%",
136
+ height: 400,
137
+ overflowY: "scroll",
138
+ paddingTop: 0,
139
+ paddingBottom: 0,
140
+ paddingLeft: 3,
141
+ paddingRight: 3,
142
+ }}
143
+ >
144
+ <ImageList cols={3} gap={8} variant="masonry">
145
+ {imageAssets.map((asset) => (
146
+ <ImageListItem key={asset.id} onClick={() => setSelectedAsset(asset)}>
147
+ <img alt={asset.caption} loading="lazy" src={asset.url} />
148
+ <ImageListItemBar subtitle={asset.caption} />
149
+ </ImageListItem>
150
+ ))}
151
+ </ImageList>
152
+ </CardContent>
153
+ </>
154
+ )}
155
+
156
+ {otherAssets.length > 0 && (
157
+ <Table count={otherAssets.length}>
158
+ <TableHead>
159
+ <TableRow>
160
+ <TableHeading>{t("Asset ID")}</TableHeading>
161
+ <TableHeading align="right">{t("Type")}</TableHeading>
162
+ <TableHeading align="right">{t("Caption")}</TableHeading>
163
+ </TableRow>
164
+ </TableHead>
165
+
166
+ <TableBody
167
+ sx={{ ".MuiTableRow-root:last-child > .MuiTableCell-root": { borderBottom: "none" } }}
168
+ >
169
+ {otherAssets.map((asset) => (
170
+ <TableRow key={asset.id} sx={{ height: 56 }}>
171
+ <TableCell sx={{ py: 0 }}>
172
+ <a href={asset.url} rel="noreferrer" target="_blank">
173
+ {asset.id}
174
+ </a>
175
+ </TableCell>
176
+ <TableCell align="right" sx={{ py: 0 }}>
177
+ {asset.asset_type}
178
+ </TableCell>
179
+ <TableCell align="right" sx={{ py: 0 }}>
180
+ {asset.caption}
181
+ </TableCell>
182
+ </TableRow>
183
+ ))}
184
+ </TableBody>
185
+ </Table>
186
+ )}
187
+ </Card>
188
+ );
189
+ };
190
+
191
+ export default ArticleProductCard;
@@ -0,0 +1,16 @@
1
+ import InventoryOutlinedIcon from "@mui/icons-material/InventoryOutlined";
2
+
3
+ import { ArticleDetail } from "../../extensions/catalog";
4
+ import { ContribComponentMap } from "../../types";
5
+
6
+ export const contrib: Record<string, ContribComponentMap> = {
7
+ catalog: {
8
+ "catalog:article:detail:product": {
9
+ title: "Product",
10
+ icon: InventoryOutlinedIcon,
11
+ component: async () => (await import("./contrib/ArticleProduct")).default,
12
+ predicate: (article: ArticleDetail) => !!article.product_number,
13
+ variant: "inline",
14
+ },
15
+ },
16
+ } as const;
@@ -0,0 +1,21 @@
1
+ export interface ArticleProduct {
2
+ number: string;
3
+ item_type: string;
4
+ name: string;
5
+ description: string;
6
+ properties: object;
7
+ is_active: boolean;
8
+ }
9
+
10
+ export interface ArticleAsset {
11
+ id: string;
12
+ asset_type: string;
13
+ caption: string;
14
+ article_code: string;
15
+ url: string;
16
+ }
17
+
18
+ export interface ArticleProductResponse {
19
+ product: ArticleProduct;
20
+ assets: ArticleAsset[];
21
+ }
@@ -1,7 +1,7 @@
1
1
  import { Receipt } from "./receipt";
2
2
 
3
3
  export interface PurchaseDetail {
4
- number: number;
4
+ number: string;
5
5
  checkout_session?: string;
6
6
  main_payment_identifier?: string;
7
7
  date_initiated: string;
package/src/index.ts CHANGED
@@ -65,6 +65,7 @@ export * as catalog from "./extensions/catalog";
65
65
  export * as fulfillment from "./extensions/fulfillment";
66
66
  export * as inventory from "./extensions/inventory";
67
67
  export * as member from "./extensions/member";
68
+ export * as pim from "./extensions/pim";
68
69
  export * as pos from "./extensions/pos";
69
70
  export * as pricing from "./extensions/pricing";
70
71
  export * as report from "./extensions/report";
@@ -1,6 +1,6 @@
1
- export function formatPurchaseNumber(number?: number | string): string {
1
+ export function formatPurchaseNumber(number?: number | string | null): string {
2
2
  if (typeof number == "string") {
3
- return formatPurchaseNumber(parseInt(number));
3
+ return number.length > 0 ? `#${number}` : "—";
4
4
  }
5
5
 
6
6
  if (number != null && isFinite(number)) {