# Install this plugin
    npm install @pinelab/vendure-plugin-customer-managed-groups
    
    

Vendure Customer Group Extensions

This plugin allows customers to manage their own groups, called Customer Managed Groups. Customer Managed Groups can have Group Admins and Group members.

  • Group admins and members are stored as Vendure's built-in customers, and the groups are the built-in Customer Group entities.
  • Customers can only be in one group, and they are either group participant or group admin. (Customers can still be in multiple)
  • Customers can create groups and add other non-admin customers to their group. Adding others to your group automatically makes you administrator of the group.
  • Group Admins can fetch placed orders for everyone in the group.
  • Group Admins can update profile details of members of their group.

Getting started

Add the plugin to your config:

import { CustomerManagedGroupsPlugin } from '@pinelab/vendure-plugin-customer-managed-group';
plugins: [CustomerManagedGroupsPlugin];

You can create your own group via the Shop API, if you are logged in as a customer, by inviting another customer by email:

  mutation {
    addCustomerToMyCustomerManagedGroup('invitee@gmail.com') {
        id
        createdAt
        updatedAt
        name
        administrators {
            id
            title
            firstName
            lastName
            emailAddress
        }
        participants {
            id
            title
            firstName
            lastName
            emailAddress
        }
    }
  }

You can also remove participants again, by passing in the customer id that should be removed:

  mutation {
    removeCustomerToMyCustomerManagedGroup('2') {
        id
        createdAt
        updatedAt
        name
        administrators {
            id
            title
            firstName
            lastName
            emailAddress
        }
        participants {
            id
            title
            firstName
            lastName
            emailAddress
        }
    }
  }

Admins are allowed to fetch orders of all customers in a group. You can do this with the following query:

query {
  ordersForMyCustomerManagedGroup {
    items {
      id
      code
      customer {
        emailAddress
      }
    }
    totalItems
  }
}

These are all the GraphQL queries and mutations exposed by this plugin:

extend type Mutation {
  """
  Creates a group with the current logged in user as administrator of the group
  """
  addCustomerToMyCustomerManagedGroup(
    input: AddCustomerToMyCustomerManagedGroupInput
  ): CustomerManagedGroup!
  """
  Create an empty group with the current user as Administrator
  """
  createCustomerManagedGroup: CustomerManagedGroup!

  removeCustomerFromMyCustomerManagedGroup(
    customerId: ID!
  ): CustomerManagedGroup!
}

extend type Query {
  """
  Fetch placed orders for each member of the group
  """
  ordersForMyCustomerManagedGroup: OrderList!
  """
  Fetch the current logged in group member
  """
  activeCustomerManagedGroupMember: CustomerManagedGroupMember

  myCustomerManagedGroup: CustomerManagedGroup
}

Contributions

Thanks @mschipperheyn for his contributions on this plugin.