diff --git a/adminapp/src/App.jsx b/adminapp/src/App.jsx
index 4ebce9cbf..8ee4dc125 100644
--- a/adminapp/src/App.jsx
+++ b/adminapp/src/App.jsx
@@ -110,6 +110,7 @@ import StaticStringCreatePage from "./pages/StaticStringCreatePage";
import StaticStringsNamespacePage from "./pages/StaticStringsNamespacePage";
import StaticStringsPage from "./pages/StaticStringsPage";
import VendorAccountDetailPage from "./pages/VendorAccountDetailPage";
+import VendorAccountEditPage from "./pages/VendorAccountEditPage";
import VendorAccountListPage from "./pages/VendorAccountListPage";
import VendorConfigurationDetailPage from "./pages/VendorConfigurationDetailPage";
import VendorConfigurationEditPage from "./pages/VendorConfigurationEditPage";
@@ -577,6 +578,11 @@ function PageSwitch() {
VendorAccountDetailPage
)}
/>
+
get(`/adminapi/v1/anon_proxy_vendor_accounts/${id}`, data, ...args),
+ updateVendorAccount: ({ id, ...data }, ...args) =>
+ post(`/adminapi/v1/anon_proxy_vendor_accounts/${id}`, data, ...args),
destroyVendorAccount: ({ id, ...data }, ...args) =>
post(`/adminapi/v1/anon_proxy_vendor_accounts/${id}/destroy`, data, ...args),
diff --git a/adminapp/src/components/AdminActions.jsx b/adminapp/src/components/AdminActions.jsx
index b5c202e47..ba44e440f 100644
--- a/adminapp/src/components/AdminActions.jsx
+++ b/adminapp/src/components/AdminActions.jsx
@@ -1,28 +1,57 @@
import api from "../api";
import useErrorSnackbar from "../hooks/useErrorSnackbar";
-import { Button, Card, CardContent, CircularProgress, Stack } from "@mui/material";
+import {
+ Button,
+ Card,
+ CardContent,
+ CircularProgress,
+ Dialog,
+ DialogActions,
+ DialogContent,
+ DialogContentText,
+ Stack,
+} from "@mui/material";
import Typography from "@mui/material/Typography";
+import size from "lodash/size";
import React from "react";
export default function AdminActions({ adminActions, updateModel }) {
const { enqueueErrorSnackbar } = useErrorSnackbar();
const [lastResponse, setLastResponse] = React.useState(null);
const [actionLoadings, setActionLoadings] = React.useState({});
+ const [confirmingAction, setConfirmingAction] = React.useState(null);
- function handleClick(e, url, params) {
- e.preventDefault();
- setActionLoadings({ ...actionLoadings, [url]: true });
+ if (!size(adminActions)) {
+ return null;
+ }
+
+ function submitAction(e, action) {
+ setActionLoadings({ ...actionLoadings, [action.url]: true });
api
- .post(url, params)
+ .post(action.url, action.params)
.then((r) => {
if (r.headers["admin-action-handler"] === "update") {
updateModel(r.data);
} else {
setLastResponse(r.data);
}
+ setConfirmingAction(null); // In case this came from the confirmation modal
})
.catch(enqueueErrorSnackbar)
- .finally(() => setActionLoadings({ ...actionLoadings, [url]: false }));
+ .finally(() => setActionLoadings({ ...actionLoadings, [action.url]: false }));
+ }
+
+ /**
+ * @param {MouseEvent} e
+ * @param {AdminAction} action
+ */
+ function handleClick(e, action) {
+ e.preventDefault();
+ if (action.confirmationPrompt) {
+ setConfirmingAction(action);
+ } else {
+ submitAction(e, action);
+ }
}
return (
@@ -32,11 +61,11 @@ export default function AdminActions({ adminActions, updateModel }) {
Actions
- {adminActions.map(({ label, url, params }) => (
+ {adminActions.map(({ label, url, ...rest }) => (