@area37/vendure-plugin-customer-approve
Version:
Vendure plugin for approving customers
82 lines (79 loc) • 2.29 kB
text/typescript
import { addActionBarItem } from "@vendure/admin-ui/core";
import { firstValueFrom, map } from "rxjs";
import { ApolloCache } from "@apollo/client/cache";
import gql from "graphql-tag";
const mutation = gql`
mutation verifyCustomerAccount($customerId: ID!) {
switchApproveCustomer(customerId: $customerId)
}
`;
export default [
addActionBarItem({
id: "approve-customer",
locationId: "customer-detail",
label: "Approve Customer",
icon: "check-circle",
buttonColor: "success",
onClick: async (event, context) => {
try {
const customerId = context.route.snapshot.params.id;
await firstValueFrom(
context.dataService.mutate(
mutation,
{ customerId },
(cache: ApolloCache<any>) => {
cache.evict({ fieldName: "user", id: `Customer:${customerId}` });
},
),
);
} catch (error: any) {
context.notificationService.error(
"Error executing mutation: " + error.message,
);
}
},
requiresPermission: "ReadCustomer",
buttonState: (context) => {
return context.entity$.pipe(
map((customer) => ({
disabled: false,
visible: customer?.user?.verified === false,
})),
);
},
}),
addActionBarItem({
id: "unapprove-customer",
locationId: "customer-detail",
label: "Reject Customer",
icon: "exclamation-circle",
buttonColor: "warning",
onClick: async (event, context) => {
try {
const customerId = context.route.snapshot.params.id;
await firstValueFrom(
context.dataService.mutate(
mutation,
{ customerId },
(cache: ApolloCache<any>) => {
cache.evict({ fieldName: "user", id: `Customer:${customerId}` });
},
),
);
} catch (error: any) {
context.notificationService.error(
"Error executing mutation: " + error.message,
);
}
},
requiresPermission: "ReadCustomer",
buttonState: (context) => {
return context.entity$.pipe(
map((customer) => ({
disabled: false,
visible: customer?.user?.verified === true,
})),
);
},
}),
];