payload-reservepayload-reserve

Configuration

Full reference for all payloadReserve() plugin options.

Full reference for all payloadReserve() plugin options.

All options are optional — the plugin works with sensible defaults.

Full Config Example

import { payloadReserve } from 'payload-reserve'
import type { ReservationPluginConfig } from 'payload-reserve'
 
payloadReserve({
  // Disable the plugin entirely while keeping the config type-safe
  disabled: false,
 
  // Admin group label for all reservation collections
  adminGroup: 'Reservations',
 
  // Minutes of buffer between reservations when a service has none defined
  defaultBufferTime: 0,
 
  // Minimum hours of notice required before a cancellation is allowed
  cancellationNoticePeriod: 24,
 
  // Extend an existing auth collection instead of creating a standalone Customers collection.
  // The named collection must exist in your Payload config before the plugin runs.
  userCollection: 'users',
 
  // Override collection slugs
  slugs: {
    services: 'services',
    resources: 'resources',
    schedules: 'schedules',
    reservations: 'reservations',
    customers: 'customers',
    media: 'media',
  },
 
  // Override access control per collection
  access: {
    services: {
      read: () => true,
      create: ({ req }) => !!req.user,
      update: ({ req }) => !!req.user,
      delete: ({ req }) => !!req.user,
    },
    resources: { read: () => true },
    schedules: { read: () => true },
    reservations: { create: () => true },
    customers: { create: () => true },
  },
 
  // Configurable status machine
  statusMachine: {
    statuses: ['pending', 'confirmed', 'completed', 'cancelled', 'no-show'],
    defaultStatus: 'pending',
    terminalStatuses: ['completed', 'cancelled', 'no-show'],
    blockingStatuses: ['pending', 'confirmed'],
    transitions: {
      pending: ['confirmed', 'cancelled'],
      confirmed: ['completed', 'cancelled', 'no-show'],
      completed: [],
      cancelled: [],
      'no-show': [],
    },
  },
 
  // Plugin hook callbacks — see hooks-api.md
  hooks: {
    afterBookingCreate: [
      async ({ doc, req }) => {
        // Send confirmation email, etc.
      },
    ],
  },
 
  // Extra fields appended to the Reservations collection
  extraReservationFields: [
    { name: 'paymentReminderSent', type: 'checkbox', defaultValue: false },
  ],
})

Defaults Table

OptionTypeDefaultDescription
disabledbooleanfalseDisable plugin functionality
adminGroupstring'Reservations'Admin panel group label
defaultBufferTimenumber0Default buffer between bookings (minutes)
cancellationNoticePeriodnumber24Minimum hours notice for cancellation
userCollectionstringundefinedExisting auth collection slug to extend
slugs.servicesstring'services'Services collection slug
slugs.resourcesstring'resources'Resources collection slug
slugs.schedulesstring'schedules'Schedules collection slug
slugs.reservationsstring'reservations'Reservations collection slug
slugs.customersstring'customers'Customers collection slug
slugs.mediastring'media'Media collection slug (used by image fields)
statusMachinePartial<StatusMachineConfig>Default 5-status machineCustom status machine (validated at init)
hooksReservationPluginHooks{}Plugin hook callbacks
extraReservationFieldsField[][]Extra Payload fields appended to the Reservations collection

On this page