🚀 Coming Soon to AppExchange — 2026

multiDatePickDates

Select Multiple Dates in Salesforce Flows and Lightning Pages. The core date selection component — click, drag, or use recurring patterns to pick dates.

Install from AppExchange
multiDatePickDates component in action

Overview

multiDatePickDates is the core date selection component. It gives your users a full calendar interface where they can click individual dates, drag to select ranges, or use recurring patterns to select multiple dates at once. It works in Salesforce Screen Flows (outputting dates to Flow variables) and on Lightning Record Pages (saving dates as related records automatically).

⚡ Lightning Page Instructions

1

What You Need First

Create a dedicated child object to store selected dates. It only needs two custom fields — a Date field and a Lookup back to the parent record. For example, a Trip_Date__c object with these fields:

FieldTypePurpose
Date__cDateStores the selected date
Trip__cLookupLinks back to the parent record
💡
Note: {!recordId} is passed automatically on Record Pages — you don't need to wire it manually.
2

Drop It In

Drag multiDatePickDates onto your Record Page in App Builder and configure these key properties:

  • relatedObjectApiName — API name of your date object, e.g. Trip_Date__c
  • dateFieldApiName — the Date field on that object, e.g. Date__c
  • relationshipFieldApiName — the Lookup field back to the parent, e.g. Trip__c
  • showInline — set to ON to show the calendar directly on the page (recommended)
  • preloadExistingDates — set to ON to show previously saved dates when the page loads
  • saveButtonLabel — customize the save button text, e.g. "Save Dates"
3

What Comes Out

Auto-saved records. When a user picks dates and clicks Save, one record is created per date on the object you specified, each linked to the current record via the Lookup field. Turn on "Load Existing Dates" to show previously saved dates as pre-selected on the calendar. The component uses an additive save — it creates new records but does not delete existing ones.

🔄 Flow Instructions

1

What You Need First

If you want the component to auto-save records, set up the same child object as the Record Page section above (Date field + Lookup). Then create a Flow variable to capture the selected dates:

Variable NameTypeCollection?Notes
{!selectedDates}TextYesCaptures all selected dates as ISO strings
{!dateRangesJson}TextNoOptional — for grouped date ranges via MultiDatePickParser
2

Drop It In

Add a Screen element in Flow Builder, drag multiDatePickDates onto it, and configure:

  • label — button text that opens the picker, e.g. "Choose Travel Dates"
  • modalTitle — title at the top of the calendar modal, e.g. "Pick Your Dates"
  • showInline — set to ON to embed the calendar directly in the screen
  • relatedObjectApiName — your date object, e.g. Trip_Date__c (for auto-save)
  • dateFieldApiName — the Date field, e.g. Date__c
  • relationshipFieldApiName — the Lookup field, e.g. Trip__c
  • selectedDates (Output) — wire to your {!selectedDates} Text Collection variable
  • outputAsJson — set to ON if you want grouped date ranges, then wire selectedDateRangesJson to {!dateRangesJson}
3

What Comes Out

Dates in your Flow variable + auto-saved records. {!selectedDates} holds an array like ["2026-07-10", "2026-07-14"] — loop through it for additional logic. If you configured the Related Object fields, the component also auto-saves one record per date. For grouped ranges, turn on JSON output and feed {!dateRangesJson} to the MultiDatePickParser invocable action to get loopable fromDate/toDate entries.
All Properties Reference

Display Properties

PropertyTypeDefaultDescription
labelStringSelect DatesText shown on the button that opens the date picker.
modalTitleStringSelect DatesTitle displayed at the top of the calendar modal.
showInlineBooleanfalseWhen ON, the calendar is always visible without needing to click a button.
singleMonthViewBooleanfalseWhen ON, shows only one month at a time instead of two side-by-side.
calendarSizeStringmediumControls calendar size: 'small', 'medium', or 'large'.
abbreviateDayHeadersBooleanfalseWhen ON, shows single-letter day headers (S M T W T F S).
weekStartsOnMondayBooleanfalseWhen ON, the calendar week begins on Monday.
showRecurringPatternBooleantrueWhen ON, shows the 'Add Recurring Pattern' button.
showSelectedSummaryBooleantrueWhen ON, displays a summary showing how many dates are selected.
showDoneButtonInlineBooleantrueWhen ON, shows a Done button that collapses the calendar to a summary.

Constraint Properties

PropertyTypeDefaultDescription
maxSelectionsInteger0Maximum dates a user can select. 0 = unlimited.
allowPastDatesBooleantrueWhen OFF, only today and future dates are selectable.
minDateDateEarliest selectable date.
maxDateDateLatest selectable date.
defaultDatesString[]Pre-selected dates in ISO format (YYYY-MM-DD).
disabledDatesString[]Dates that cannot be selected (shown greyed out).
availableDatesString[]Only these dates are selectable; all others are disabled.
autoJumpToFirstAvailableBooleanfalseWhen ON with Available Dates set, opens to the month of the first available date.

Output Controls

PropertyTypeDefaultDescription
outputAsJsonBooleanfalseWhen ON, populates Date Ranges JSON Output with consecutive dates grouped together.

Output Properties (Read-Only)

PropertyTypeDescription
selectedDatesString[]Array of all selected dates in ISO format.
selectedDateRangesJsonStringJSON string of consecutive dates grouped into ranges. Only populated when outputAsJson is ON.

Record Page Auto-Save Properties

PropertyTypeDefaultDescription
saveButtonLabelStringSaveText on the save button.
relatedObjectApiNameStringAPI name of the object where each selected date is saved as a record.
dateFieldApiNameStringAPI name of the Date field on the related object.
relationshipFieldApiNameStringAPI name of the lookup field that links back to the current record.
preloadExistingDatesBooleanfalseWhen ON, queries existing related date records and shows them in the calendar.
preloadModeStringeditable'editable' or 'readonly'. Controls how existing dates appear.
blockedDatesSourceObjectStringAPI name of an object to query for dates that should be blocked.
blockedDatesDateFieldStringDate field on the blocked dates object.
blockedDatesFilterFieldStringOptional lookup field on the blocked object to filter by current record.