bananas-commerce-admin 0.17.13 → 0.17.15

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/esm/App.js CHANGED
@@ -27,7 +27,6 @@ const StyledSnackbarContent = styled(MaterialDesignContent)(({ theme }) => theme
27
27
  },
28
28
  }));
29
29
  export const App = ({ theme: userTheme, api, contrib, ...rest }) => {
30
- console.log("App:contrib", contrib);
31
30
  const potentialSchema = typeof api === "object" && "schema" in api ? api.schema : api;
32
31
  let schemaPath;
33
32
  if (typeof potentialSchema === "string" || potentialSchema instanceof URL) {
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/App.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { memo, useCallback } from "react";
2
+ import React from "react";
3
+ import { ListItemIcon, ListItemText, MenuItem } from "@mui/material";
4
+ import Logo from "../Logo";
5
+ export const ActionMenuItem = ({ operation, onAction }) => {
6
+ const handleClick = useCallback(() => {
7
+ onAction(operation.id);
8
+ }, [operation.id, onAction]);
9
+ return (React.createElement(MenuItem, { onClick: handleClick },
10
+ operation.component?.icon && (React.createElement(ListItemIcon, { sx: { width: 20 } },
11
+ React.createElement(Logo, { src: operation.component.icon }))),
12
+ React.createElement(ListItemText, null, operation.component?.title ?? operation.summary ?? operation.id)));
13
+ };
14
+ export default memo(ActionMenuItem);
15
+ //# sourceMappingURL=ActionMenuItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionMenuItem.js","sourceRoot":"","sources":["../../../../src/components/ActionMenu/ActionMenuItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGrE,OAAO,IAAI,MAAM,SAAS,CAAC;AAO3B,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IACvF,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE7B,OAAO,CACL,oBAAC,QAAQ,IAAC,OAAO,EAAE,WAAW;QAC3B,SAAS,CAAC,SAAS,EAAE,IAAI,IAAI,CAC5B,oBAAC,YAAY,IAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC7B,oBAAC,IAAI,IAAC,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,GAAI,CAC1B,CAChB;QACD,oBAAC,YAAY,QAAE,SAAS,CAAC,SAAS,EAAE,KAAK,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,CAAgB,CACrF,CACZ,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC,cAAc,CAAC,CAAC"}
@@ -0,0 +1,66 @@
1
+ import * as React from "react";
2
+ import { useCallback, useState } from "react";
3
+ import { useParams } from "react-router-dom";
4
+ import { KeyboardArrowDown as KeyboardArrowDownIcon } from "@mui/icons-material";
5
+ import { Button } from "@mui/material";
6
+ import Menu from "@mui/material/Menu";
7
+ import { enqueueSnackbar } from "notistack";
8
+ import { useApi } from "../../contexts/ApiContext";
9
+ import { useI18n } from "../../contexts/I18nContext";
10
+ import { usePage } from "../Page";
11
+ import ActionMenuItem from "./ActionMenuItem";
12
+ export const ActionMenu = () => {
13
+ const [anchorEl, setAnchorEl] = useState(null);
14
+ const params = useParams();
15
+ const page = usePage();
16
+ const api = useApi();
17
+ const { t } = useI18n();
18
+ const title = useCallback((operation) => t(operation.component?.title ?? operation.summary ?? operation.id), [t]);
19
+ const open = Boolean(anchorEl);
20
+ const handleClick = (event) => {
21
+ setAnchorEl(event.currentTarget);
22
+ };
23
+ const handleClose = () => {
24
+ setAnchorEl(null);
25
+ };
26
+ const handleAction = async (operation) => {
27
+ try {
28
+ const action = api.operations[operation];
29
+ const response = await action.call({ params });
30
+ if (response.ok) {
31
+ enqueueSnackbar(t(`Completed successfully: ${title(action)}`), {
32
+ variant: "success",
33
+ });
34
+ handleClose();
35
+ }
36
+ else {
37
+ enqueueSnackbar(t(`Action failed: ${title(action)}`), {
38
+ variant: "error",
39
+ });
40
+ throw response;
41
+ }
42
+ }
43
+ catch (error) {
44
+ enqueueSnackbar(t("Action failed"), {
45
+ variant: "error",
46
+ });
47
+ console.error(error);
48
+ }
49
+ };
50
+ return (React.createElement(React.Fragment, null,
51
+ React.createElement(Menu, { anchorEl: anchorEl, open: open, slotProps: {
52
+ paper: {
53
+ style: {
54
+ width: "fit-content",
55
+ },
56
+ },
57
+ }, onClose: handleClose }, page?.contrib
58
+ .filter((operation) => operation.component?.variant === "action")
59
+ .map((operation) => (React.createElement(ActionMenuItem, { key: operation.id, operation: operation, onAction: handleAction })))),
60
+ React.createElement(Button, { "aria-haspopup": true, disableElevation: true, "aria-expanded": open ? "true" : "false", endIcon: React.createElement(KeyboardArrowDownIcon, null), sx: {
61
+ borderRadius: 6,
62
+ height: 46,
63
+ }, variant: "outlined", onClick: handleClick }, "Actions")));
64
+ };
65
+ export default ActionMenu;
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ActionMenu/index.tsx"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ export const LabeledValue = ({ label, value, compact, multiline }) => {
4
4
  // Use thinner font if compact and value is > 20 chars.
5
5
  const xsFont = useMemo(() => value != null && typeof value === "string" && value.length > 20 ? '"wdth" 75' : '"wdth" 100', [value]);
6
6
  return (React.createElement(Stack, { direction: compact ? "row" : "column", justifyContent: compact ? "space-between" : "flex-start" },
7
- React.createElement(Typography, { color: "grey.600", fontWeight: 500, sx: { whiteSpace: "nowrap", fontVariationSettings: { sm: '"wdth" 100', xs: '"wdth" 75' } }, variant: "subtitle2" }, label),
7
+ React.createElement(Typography, { color: "text.secondary", fontWeight: 500, sx: { whiteSpace: "nowrap", fontVariationSettings: { sm: '"wdth" 100', xs: '"wdth" 75' } }, variant: "subtitle2" }, label),
8
8
  typeof value === "string" ? (React.createElement(Typography, { sx: {
9
9
  whiteSpace: multiline ? "break-spaces" : "pre-wrap",
10
10
  wordBreak: "break-all",
@@ -1 +1 @@
1
- {"version":3,"file":"LabeledValue.js","sourceRoot":"","sources":["../../../src/components/LabeledValue.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AASvD,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;IAChG,uDAAuD;IACvD,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CACH,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,EAC9F,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,OAAO,CACL,oBAAC,KAAK,IACJ,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EACrC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY;QAExD,oBAAC,UAAU,IACT,KAAK,EAAC,UAAU,EAChB,UAAU,EAAE,GAAG,EACf,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAC1F,OAAO,EAAC,WAAW,IAElB,KAAK,CACK;QAEZ,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC3B,oBAAC,UAAU,IACT,EAAE,EAAE;gBACF,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU;gBACnD,SAAS,EAAE,WAAW;gBACtB,qBAAqB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE;aACvD,EACD,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAEnC,KAAK,CACK,CACd,CAAC,CAAC,CAAC,CACF,oBAAC,GAAG,QAAE,KAAK,CAAO,CACnB,CACK,CACT,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"LabeledValue.js","sourceRoot":"","sources":["../../../src/components/LabeledValue.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AASvD,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;IAChG,uDAAuD;IACvD,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CACH,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,EAC9F,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,OAAO,CACL,oBAAC,KAAK,IACJ,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EACrC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY;QAExD,oBAAC,UAAU,IACT,KAAK,EAAC,gBAAgB,EACtB,UAAU,EAAE,GAAG,EACf,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAC1F,OAAO,EAAC,WAAW,IAElB,KAAK,CACK;QAEZ,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC3B,oBAAC,UAAU,IACT,EAAE,EAAE;gBACF,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU;gBACnD,SAAS,EAAE,WAAW;gBACtB,qBAAqB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE;aACvD,EACD,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAEnC,KAAK,CACK,CACd,CAAC,CAAC,CAAC,CACF,oBAAC,GAAG,QAAE,KAAK,CAAO,CACnB,CACK,CACT,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC,YAAY,CAAC,CAAC"}
@@ -5,10 +5,13 @@ import NavigateNextIcon from "@mui/icons-material/NavigateNext";
5
5
  import { AppBar, Breadcrumbs, IconButton, Link, Stack, Toolbar, Typography, } from "@mui/material";
6
6
  import { useI18n } from "../../contexts/I18nContext";
7
7
  import { useRouter } from "../../contexts/RouterContext";
8
+ import ActionMenu from "../ActionMenu";
9
+ import { usePage } from "../Page";
8
10
  export const TitleBar = ({ back = false, title, children, ...props }) => {
9
11
  const { t } = useI18n();
10
12
  const { navigate, getCurrent, routes } = useRouter();
11
13
  const routerNavigate = useNavigate();
14
+ const page = usePage();
12
15
  if (typeof back === "boolean" && back)
13
16
  back = -1;
14
17
  const { route: currentRoute } = getCurrent();
@@ -35,6 +38,9 @@ export const TitleBar = ({ back = false, title, children, ...props }) => {
35
38
  } },
36
39
  React.createElement(Link, { key: "home", color: "inherit", underline: "hover", onClick: () => routerNavigate("/", { replace: true }) }, t("Home")),
37
40
  breadcrumbRoutes.map((route) => (React.createElement(Link, { key: route.id, color: "inherit", underline: "hover", onClick: () => navigate(route) }, route.title)))))),
38
- children)));
41
+ children,
42
+ page?.contrib.filter((operation) => operation.component?.variant === "action").length >
43
+ 0 && (React.createElement(Stack, { width: "fit-content" },
44
+ React.createElement(ActionMenu, null))))));
39
45
  };
40
46
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/TitleBar/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/TitleBar/index.tsx"],"names":[],"mappings":"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"}
@@ -42,7 +42,7 @@ const ComponentLoaderInner = ({ operation, ...rest }) => {
42
42
  // TODO: Find a suitable type
43
43
  const [data, setData] = useState();
44
44
  const initialLoad = useRef(true);
45
- const component = operation.component.component;
45
+ const component = operation.component.component ?? (() => null);
46
46
  const Component = useMemo(() => lazy(async () => ({ default: await Promise.resolve(component) })), [component]);
47
47
  const refresh = useCallback(async () => {
48
48
  const response = await operation.call(rest);
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentLoader.js","sourceRoot":"","sources":["../../../src/containers/ComponentLoader.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ComponentLoader.js","sourceRoot":"","sources":["../../../src/containers/ComponentLoader.tsx"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ export const ApiContextProvider = ({ children, api: init, contrib, }) => {
25
25
  for (const operation of Object.values(operations)) {
26
26
  operation.component = {
27
27
  ...hit,
28
- component: hit.component(),
28
+ component: hit.component?.() ?? (() => null),
29
29
  };
30
30
  operation.order = i;
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ApiContext.js","sourceRoot":"","sources":["../../../src/contexts/ApiContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiContext.js","sourceRoot":"","sources":["../../../src/contexts/ApiContext.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import MailOutlineIcon from "@mui/icons-material/MailOutline";
1
2
  import RotateLeftIcon from "../../assets/symbols/RotateLeft";
2
3
  import ShoppingBagIcon from "../../assets/symbols/ShoppingBag";
3
4
  import StorefrontIcon from "../../assets/symbols/Storefront";
@@ -62,5 +63,12 @@ export const contrib = {
62
63
  permission: "fulfillment.view_order",
63
64
  },
64
65
  },
66
+ actions: {
67
+ "pos:purchase:detail:send-confirmation-email": {
68
+ title: "Send Purchase Receipt",
69
+ variant: "action",
70
+ icon: MailOutlineIcon,
71
+ },
72
+ },
65
73
  };
66
74
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/fulfillment/index.tsx"],"names":[],"mappings":"AAEA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAC/D,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAI7D,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AAEjC,MAAM,MAAM,GAWR;IACF,KAAK,EAAE;QACL,IAAI,EAAE;YACJ,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO;YAC9D,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,YAAY,EAAE,OAAO;oBACrB,gBAAgB,EAAE,OAAO;iBAC1B;aACF;YACD,cAAc,EAAE;gBACd,KAAK,EAAE;oBACL,KAAK,EAAE,SAAS;iBACjB;aACF;SACF;KACF;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC,GAAG,EAAE,aAAa;IAClB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE/C,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,OAAO;gBACL,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;gBAChB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,cAAc,EAAE,GAAG,CAAC,cAAc;aACnC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAwB;IAC7C,wBAAwB,EAAE;QACxB,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,wBAAwB;KACrC;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,OAAO,GAAwC;IAC1D,MAAM,EAAE;QACN,4BAA4B,EAAE;YAC5B,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,eAAe;YACrB,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,wCAAwC,CAAC,CAAC,CAAC,OAAO;YACvF,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,wBAAwB;SACrC;KACF;IACD,OAAO,EAAE;QACP,6BAA6B,EAAE;YAC7B,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,cAAc;YACpB,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC,OAAO;YACxF,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,wBAAwB;SACrC;KACF;CACO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/fulfillment/index.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,iCAAiC,CAAC;AAI9D,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAC/D,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAG7D,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AAEjC,MAAM,MAAM,GAWR;IACF,KAAK,EAAE;QACL,IAAI,EAAE;YACJ,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO;YAC9D,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,YAAY,EAAE,OAAO;oBACrB,gBAAgB,EAAE,OAAO;iBAC1B;aACF;YACD,cAAc,EAAE;gBACd,KAAK,EAAE;oBACL,KAAK,EAAE,SAAS;iBACjB;aACF;SACF;KACF;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC,GAAG,EAAE,aAAa;IAClB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE/C,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,OAAO;gBACL,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;gBAChB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,cAAc,EAAE,GAAG,CAAC,cAAc;aACnC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAwB;IAC7C,wBAAwB,EAAE;QACxB,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,wBAAwB;KACrC;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,OAAO,GAAwC;IAC1D,MAAM,EAAE;QACN,4BAA4B,EAAE;YAC5B,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,eAAe;YACrB,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,wCAAwC,CAAC,CAAC,CAAC,OAAO;YACvF,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,wBAAwB;SACrC;KACF;IACD,OAAO,EAAE;QACP,6BAA6B,EAAE;YAC7B,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,cAAc;YACpB,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC,OAAO;YACxF,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,wBAAwB;SACrC;KACF;IACD,OAAO,EAAE;QACP,6CAA6C,EAAE;YAC7C,KAAK,EAAE,uBAAuB;YAC9B,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,eAAe;SACtB;KACF;CACO,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import { ApiOperation } from "../../api";
3
+ export interface ActionMenuItemProps {
4
+ operation: ApiOperation;
5
+ onAction: (operationId: string) => Promise<void>;
6
+ }
7
+ export declare const ActionMenuItem: React.FC<ActionMenuItemProps>;
8
+ declare const _default: React.NamedExoticComponent<ActionMenuItemProps>;
9
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import * as React from "react";
2
+ export declare const ActionMenu: React.FC;
3
+ export default ActionMenu;
@@ -53,10 +53,10 @@ export type ContribComponent<T = any> = React.ComponentType<PageProps<T> & OpenA
53
53
  sx?: SxProps;
54
54
  }>;
55
55
  /**
56
- * The variant of the component, either a tab or inline.
56
+ * The variant of the component, either a tab, inline or action menu item.
57
57
  * Still requires a `Page` that loads the contrib.
58
58
  */
59
- export type ContribVariant = "tab" | "inline";
59
+ export type ContribVariant = "tab" | "inline" | "action";
60
60
  export interface PageContribComponent<T = any> extends OpenAPI.Request {
61
61
  /**
62
62
  * The title shown in the NavRail.
@@ -69,7 +69,7 @@ export interface PageContribComponent<T = any> extends OpenAPI.Request {
69
69
  /**
70
70
  * The component to render, expected to be a Page, not a single `Card` or `Table`.
71
71
  */
72
- component: ContribComponent<T> | Promise<ContribComponent<T>>;
72
+ component?: ContribComponent<T> | Promise<ContribComponent<T>>;
73
73
  /**
74
74
  * The variant of the component, either a tab or inline.
75
75
  */
@@ -91,7 +91,7 @@ export interface PageContribComponent<T = any> extends OpenAPI.Request {
91
91
  group?: string;
92
92
  }
93
93
  export type ContribComponentMap = Record<string, Omit<PageContribComponent, "component"> & {
94
- component: () => PageContribComponent["component"];
94
+ component?: () => PageContribComponent["component"];
95
95
  }>;
96
96
  export type ContribComponentListItem = {
97
97
  tag: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bananas-commerce-admin",
3
- "version": "0.17.13",
3
+ "version": "0.17.15",
4
4
  "description": "What's this, an admin for apes?",
5
5
  "keywords": [
6
6
  "admin",
package/src/App.tsx CHANGED
@@ -49,7 +49,6 @@ const StyledSnackbarContent = styled(MaterialDesignContent)(({ theme }) =>
49
49
  );
50
50
 
51
51
  export const App: React.FC<AppProps> = ({ theme: userTheme, api, contrib, ...rest }) => {
52
- console.log("App:contrib", contrib);
53
52
  const potentialSchema = typeof api === "object" && "schema" in api ? api.schema : api;
54
53
  let schemaPath: string | undefined;
55
54
 
@@ -0,0 +1,31 @@
1
+ import { memo, useCallback } from "react";
2
+ import React from "react";
3
+
4
+ import { ListItemIcon, ListItemText, MenuItem } from "@mui/material";
5
+
6
+ import { ApiOperation } from "../../api";
7
+ import Logo from "../Logo";
8
+
9
+ export interface ActionMenuItemProps {
10
+ operation: ApiOperation;
11
+ onAction: (operationId: string) => Promise<void>;
12
+ }
13
+
14
+ export const ActionMenuItem: React.FC<ActionMenuItemProps> = ({ operation, onAction }) => {
15
+ const handleClick = useCallback(() => {
16
+ onAction(operation.id);
17
+ }, [operation.id, onAction]);
18
+
19
+ return (
20
+ <MenuItem onClick={handleClick}>
21
+ {operation.component?.icon && (
22
+ <ListItemIcon sx={{ width: 20 }}>
23
+ <Logo src={operation.component.icon} />
24
+ </ListItemIcon>
25
+ )}
26
+ <ListItemText>{operation.component?.title ?? operation.summary ?? operation.id}</ListItemText>
27
+ </MenuItem>
28
+ );
29
+ };
30
+
31
+ export default memo(ActionMenuItem);
@@ -0,0 +1,103 @@
1
+ import * as React from "react";
2
+ import { useCallback, useState } from "react";
3
+ import { useParams } from "react-router-dom";
4
+
5
+ import { KeyboardArrowDown as KeyboardArrowDownIcon } from "@mui/icons-material";
6
+ import { Button } from "@mui/material";
7
+ import Menu from "@mui/material/Menu";
8
+
9
+ import { enqueueSnackbar } from "notistack";
10
+
11
+ import { ApiOperation } from "../../api";
12
+ import { useApi } from "../../contexts/ApiContext";
13
+ import { useI18n } from "../../contexts/I18nContext";
14
+ import { usePage } from "../Page";
15
+
16
+ import ActionMenuItem from "./ActionMenuItem";
17
+
18
+ export const ActionMenu: React.FC = () => {
19
+ const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
20
+ const params = useParams();
21
+ const page = usePage();
22
+ const api = useApi();
23
+ const { t } = useI18n();
24
+ const title = useCallback(
25
+ (operation: ApiOperation) => t(operation.component?.title ?? operation.summary ?? operation.id),
26
+ [t],
27
+ );
28
+
29
+ const open = Boolean(anchorEl);
30
+
31
+ const handleClick = (event: React.MouseEvent<HTMLElement>) => {
32
+ setAnchorEl(event.currentTarget);
33
+ };
34
+
35
+ const handleClose = () => {
36
+ setAnchorEl(null);
37
+ };
38
+
39
+ const handleAction = async (operation: string) => {
40
+ try {
41
+ const action = api.operations[operation];
42
+
43
+ const response = await action.call({ params });
44
+
45
+ if (response.ok) {
46
+ enqueueSnackbar(t(`Completed successfully: ${title(action)}`), {
47
+ variant: "success",
48
+ });
49
+ handleClose();
50
+ } else {
51
+ enqueueSnackbar(t(`Action failed: ${title(action)}`), {
52
+ variant: "error",
53
+ });
54
+ throw response;
55
+ }
56
+ } catch (error) {
57
+ enqueueSnackbar(t("Action failed"), {
58
+ variant: "error",
59
+ });
60
+ console.error(error);
61
+ }
62
+ };
63
+
64
+ return (
65
+ <>
66
+ <Menu
67
+ anchorEl={anchorEl}
68
+ open={open}
69
+ slotProps={{
70
+ paper: {
71
+ style: {
72
+ width: "fit-content",
73
+ },
74
+ },
75
+ }}
76
+ onClose={handleClose}
77
+ >
78
+ {page?.contrib
79
+ .filter((operation) => operation.component?.variant === "action")
80
+ .map((operation) => (
81
+ <ActionMenuItem key={operation.id} operation={operation} onAction={handleAction} />
82
+ ))}
83
+ </Menu>
84
+
85
+ <Button
86
+ aria-haspopup
87
+ disableElevation
88
+ aria-expanded={open ? "true" : "false"}
89
+ endIcon={<KeyboardArrowDownIcon />}
90
+ sx={{
91
+ borderRadius: 6,
92
+ height: 46,
93
+ }}
94
+ variant="outlined"
95
+ onClick={handleClick}
96
+ >
97
+ Actions
98
+ </Button>
99
+ </>
100
+ );
101
+ };
102
+
103
+ export default ActionMenu;
@@ -23,7 +23,7 @@ export const LabeledValue: React.FC<LabeledValueProps> = ({ label, value, compac
23
23
  justifyContent={compact ? "space-between" : "flex-start"}
24
24
  >
25
25
  <Typography
26
- color="grey.600"
26
+ color="text.secondary"
27
27
  fontWeight={500}
28
28
  sx={{ whiteSpace: "nowrap", fontVariationSettings: { sm: '"wdth" 100', xs: '"wdth" 75' } }}
29
29
  variant="subtitle2"
@@ -16,6 +16,8 @@ import {
16
16
 
17
17
  import { useI18n } from "../../contexts/I18nContext";
18
18
  import { RouteInfo, useRouter } from "../../contexts/RouterContext";
19
+ import ActionMenu from "../ActionMenu";
20
+ import { usePage } from "../Page";
19
21
 
20
22
  export interface TitleBarProps extends React.PropsWithChildren<Omit<AppBarProps, "title">> {
21
23
  back?: boolean | number | string | RouteInfo;
@@ -26,6 +28,7 @@ export const TitleBar: React.FC<TitleBarProps> = ({ back = false, title, childre
26
28
  const { t } = useI18n();
27
29
  const { navigate, getCurrent, routes } = useRouter();
28
30
  const routerNavigate = useNavigate();
31
+ const page = usePage();
29
32
 
30
33
  if (typeof back === "boolean" && back) back = -1;
31
34
 
@@ -102,6 +105,12 @@ export const TitleBar: React.FC<TitleBarProps> = ({ back = false, title, childre
102
105
  </Stack>
103
106
  </Stack>
104
107
  {children}
108
+ {page?.contrib.filter((operation) => operation.component?.variant === "action").length >
109
+ 0 && (
110
+ <Stack width="fit-content">
111
+ <ActionMenu />
112
+ </Stack>
113
+ )}
105
114
  </Toolbar>
106
115
  </AppBar>
107
116
  );
@@ -76,7 +76,7 @@ const ComponentLoaderInner: React.FC<ComponentLoaderInnerProps> = ({ operation,
76
76
  const [data, setData] = useState<unknown>();
77
77
  const initialLoad = useRef(true);
78
78
 
79
- const component = operation.component.component;
79
+ const component = operation.component.component ?? ((() => null) as React.FC);
80
80
  const Component = useMemo(
81
81
  () => lazy(async () => ({ default: await Promise.resolve(component) })),
82
82
  [component],
@@ -49,7 +49,7 @@ export const ApiContextProvider: React.FC<React.PropsWithChildren<ApiContextProv
49
49
  for (const operation of Object.values(operations)) {
50
50
  operation.component = {
51
51
  ...hit,
52
- component: hit.component(),
52
+ component: hit.component?.() ?? ((() => null) as React.FC),
53
53
  };
54
54
  operation.order = i;
55
55
  }
@@ -1,3 +1,5 @@
1
+ import MailOutlineIcon from "@mui/icons-material/MailOutline";
2
+
1
3
  import { OpenAPI } from "openapi-types";
2
4
 
3
5
  import RotateLeftIcon from "../../assets/symbols/RotateLeft";
@@ -5,7 +7,6 @@ import ShoppingBagIcon from "../../assets/symbols/ShoppingBag";
5
7
  import StorefrontIcon from "../../assets/symbols/Storefront";
6
8
  import { RouterExtension } from "../../router/Router";
7
9
  import { ContribComponentMap, NavigationOverrides, PageComponent } from "../../types";
8
-
9
10
  export * from "./types/order";
10
11
  export * from "./types/recipient";
11
12
  export * from "./types/shipment";
@@ -84,4 +85,11 @@ export const contrib: Record<string, ContribComponentMap> = {
84
85
  permission: "fulfillment.view_order",
85
86
  },
86
87
  },
88
+ actions: {
89
+ "pos:purchase:detail:send-confirmation-email": {
90
+ title: "Send Purchase Receipt",
91
+ variant: "action",
92
+ icon: MailOutlineIcon,
93
+ },
94
+ },
87
95
  } as const;
@@ -64,10 +64,10 @@ export type ContribComponent<T = any> = React.ComponentType<
64
64
  >;
65
65
 
66
66
  /**
67
- * The variant of the component, either a tab or inline.
67
+ * The variant of the component, either a tab, inline or action menu item.
68
68
  * Still requires a `Page` that loads the contrib.
69
69
  */
70
- export type ContribVariant = "tab" | "inline";
70
+ export type ContribVariant = "tab" | "inline" | "action";
71
71
 
72
72
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
73
  export interface PageContribComponent<T = any> extends OpenAPI.Request {
@@ -82,7 +82,7 @@ export interface PageContribComponent<T = any> extends OpenAPI.Request {
82
82
  /**
83
83
  * The component to render, expected to be a Page, not a single `Card` or `Table`.
84
84
  */
85
- component: ContribComponent<T> | Promise<ContribComponent<T>>;
85
+ component?: ContribComponent<T> | Promise<ContribComponent<T>>;
86
86
  /**
87
87
  * The variant of the component, either a tab or inline.
88
88
  */
@@ -107,7 +107,7 @@ export interface PageContribComponent<T = any> extends OpenAPI.Request {
107
107
  export type ContribComponentMap = Record<
108
108
  string,
109
109
  Omit<PageContribComponent, "component"> & {
110
- component: () => PageContribComponent["component"];
110
+ component?: () => PageContribComponent["component"];
111
111
  }
112
112
  >;
113
113