Coming Soon to AppExchange — 2026

Date Dates tier

The most customizable multi-date selection component for Salesforce. Click individual dates, drag to select ranges, or generate recurring patterns with custom intervals and monthly occurrence filters. Color-code dates by status, consolidate adjacent dates into ranges, and edit existing records inline.

Notify Me at Launch See Use Cases
Date component in action — selecting multiple dates on a Salesforce calendar

Overview

Date is the core date selection component in the MultiDatePick suite. 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. Recurring patterns support custom week intervals (every 1, 2, 3, or N weeks) and monthly occurrence filters (1st Monday, 2nd and 4th Friday, Last Saturday of each month).

The component works in Salesforce Screen Flows (outputting dates to Flow variables) and on Lightning Record Pages, App Pages, Home Pages, and Experience Sites (saving dates as related records automatically). Configure an endDateField to consolidate adjacent dates into single records with start and end dates — selecting Monday through Friday creates one record instead of five.

Object & Field Mapping

When configuring this component on a Lightning Page or via the Setup Wizard, these are the object and field API names you'll need to provide.

Your Record Object
Related_Object__cObject API Name
Date_Field__cDate field
Relationship_Field__cLookup to parent
End_Date_Field__cDate range end (optional)
Status_Field__cPicklist field (optional)
Hover_Fields__cPopover detail fields (optional)
Blocked Dates Object Optional
Blocked_Dates_Source_Object__cObject API Name
Blocked_Dates_Date_Field__cDate field
Blocked_Dates_Filter_Field__cLookup to parent (optional)
Important: Replace the orange values with your org's actual object and field API names. If you use blocked dates, replace the red values too. Everything else works as-is.

Use Cases for Date

The Date component is ideal for any scenario where users need to select one or more dates without time slots or resource booking. Here are 15 real-world use cases.

1. PTO & Vacation Requests

Employees select their time-off dates on a calendar. Use endDateField to consolidate adjacent dates into date ranges — selecting Mon through Fri creates one record with start and end dates. Status colors show Pending (orange), Approved (green), and Denied (red) at a glance. Recurring patterns let employees block every Friday for the next quarter in two clicks.

2. On-Call Rotation

Managers assign on-call dates using recurring patterns with week intervals — set every other Monday for the next quarter in two clicks. Monthly occurrence filters (1st, 2nd, 3rd, 4th, Last) make rotation scheduling effortless. Status colors distinguish Primary (green), Backup (blue), and Swapped (orange) shifts. Preloaded dates show the current rotation.

3. Event Attendance / RSVP

Attendees RSVP to event dates by selecting them on a calendar. Each date creates one RSVP record linked to the attendee. Status colors show Registered (green), Waitlisted (orange), and Cancelled (red). preloadExistingDates shows which events the attendee has already signed up for, preventing duplicate registrations.

4. Project Milestones & Deadlines

Project managers select milestone dates, sprint boundaries, or review dates directly on a project record page. Dates are saved as related records automatically. twoMonthView helps with long-range planning. Use recordNameField to store a milestone label alongside each date.

5. Facility Blackout Dates

Facility managers mark dates when a building, campus, or venue is unavailable — holidays, maintenance windows, or special events. Other components can then reference this object via blockedDatesSourceObject to automatically grey out those dates for end users.

6. Content Publishing Calendar

Marketing teams select blog post, social media, or newsletter publication dates. Recurring patterns let them schedule "every Tuesday and Thursday" in one action. hoverFields shows the content title and status when hovering over a date. Edit mode lets them reschedule posts by moving them to new dates.

7. Field Service Multi-Day Jobs

Dispatchers assign technicians to multi-day site visits. Use endDateField so dragging Mon through Fri creates ONE job record with start and end dates — not five. Status colors mark Scheduled (blue), In Progress (orange), Completed (green), and Rescheduled (gray). preloadExistingDates shows the tech's existing assignments to prevent overlap.

8. Training & Course Enrollment

Employees pick which days of a multi-week course they'll attend. Each selection creates a session-attendance record. blockedDatesSourceObject greys out days the class isn't running. Recurring patterns help when a course meets every Tuesday for 8 weeks — two clicks selects them all.

9. Subscription & Renewal Tracking

Sales Ops teams bulk-record renewal dates across multiple Accounts or Opportunities. twoMonthView makes quarter-end planning easier. Status colors distinguish Active (green), At Risk (amber), and Expired (gray). Use defaultRecordName to auto-name each renewal record (e.g., "Q3 Renewal").

10. Audit & Compliance Schedules

Compliance officers schedule audit visits, policy reviews, or recurring inspections across the fiscal year. Recurring patterns handle "1st Monday of every month" or "every quarter end." Status colors track Scheduled (blue), Completed (green), Findings Open (amber), Closed (gray).

11. Equipment Inspection & Maintenance Dates

Facility teams mark inspection dates for assets — vehicles, HVAC, safety equipment. Place the component on each asset's record page. hoverFields shows the inspector and last-finding fields. blockedDatesSourceObject can grey out facility closure days so no inspections get scheduled then.

12. Real Estate Showing Availability

Agents publish their open-house and showing availability dates on a listing record. Status colors show Booked (orange), Open (green), and Tentative (blue). Buyers' agents can see availability before requesting a slot. Use preloadMode="readonly" on customer-facing community pages.

13. Sales Territory Visit Planning

Sales reps mark which days they're visiting which territory. Multi-day visits get consolidated via endDateField. Recurring patterns set "every other Friday in the Northeast" effortlessly. Managers see all reps' territory days at a glance from a flexipage with multiple Date components.

14. Event Venue Booking Dates

Event venues — aquariums, wedding spaces, museums, conference centers — record which dates each event runs. endDateField handles multi-day setups and tear-downs as a single record. Status colors show Confirmed (green), Tentative Hold (amber), Setup Day (blue), Tear-down (gray).

15. Recurring Task Due Dates

Replace one-off tasks with multi-date task records. Assign a contractor to "every Wednesday in October" or pick the last business day of each month for monthly reports. Each date becomes its own record with status tracking. Pairs well with Salesforce Tasks via a lookup field.

Lightning Page Setup

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. Optionally add an End Date field for date range consolidation. For example, a Trip_Date__c object with these fields:

FieldTypePurpose
Date__cDateStores the selected date (or start date of a range)
End_Date__cDateOptional — stores the end date when adjacent dates are consolidated
Trip__cLookupLinks back to the parent record
Status__cPicklistOptional — for status color coding (e.g., Pending, Approved, Denied)
Note: recordId is passed automatically on Record Pages — you don't need to wire it manually. For App Pages, Home Pages, or Experience Sites, use the staticRecordId property to specify the parent record.
2

Drop It In

Drag the Date component onto your 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
  • endDateField — optional End Date field for range consolidation, e.g. End_Date__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"

Or use the Setup Wizard and set just one property:

  • configName — name of a saved configuration (e.g., PTO_Vacation_Requests). The component loads all settings from that Custom Metadata record.
3

What Comes Out

Auto-saved records. When a user picks dates and clicks Save, one record is created per date (or per date range if endDateField is configured) on the object you specified, each linked to the current record via the Lookup field. Turn on preloadExistingDates 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.
4

Summary View After Save

By default the calendar stays expanded after Save, taking up the same space whether the user is actively picking or just reviewing. To collapse it into a small summary card after Save (and let users click the card to re-expand), set both:

PropertyValueEffect
showInlinetrueRenders the calendar inline on the page instead of a popup modal.
showDoneButtonInlinetrueShows a Done button that collapses the calendar to a summary card. The card lists the selected dates and re-expands the calendar on click.

Use this when the picker is one of several elements on a record page and you want it to step out of the way once the user has saved their picks.

Flow Setup

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 the Date component 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
  • endDateField — optional End Date field, e.g. End_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 (or per range with endDateField). For grouped ranges, turn on JSON output and feed {!dateRangesJson} to the MultiDatePickParser invocable action to get loopable fromDate/toDate entries.
All Properties Reference

Configuration

PropertyTypeDefaultDescription
configNameStringName of a saved Config Custom Metadata record. When set, the component loads all settings from that record — no other properties needed.

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.
twoMonthViewBooleanfalseWhen ON, shows two months side-by-side for wider date range visibility.
calendarSizeStringmediumControls calendar size: small, medium, or large.
dayHeaderFormatString3Day header length: 3 = SUN MON TUE, 2 = SU MO TU, 1 = S M T.
weekStartsOnMondayBooleanfalseWhen ON, the calendar week begins on Monday instead of Sunday.
showRecurringPatternBooleantrueWhen ON, shows the "Add Recurring Pattern" button with day selection, week intervals, and monthly occurrence filters.
showSelectedSummaryBooleantrueWhen ON, displays a summary showing how many dates are selected and their date ranges.
showDoneButtonInlineBooleantrueWhen ON, shows a Done button that collapses the calendar to a summary view.
disabledBooleanfalseWhen ON, the entire component is disabled and non-interactive.
requiredBooleanfalseWhen ON, at least one date must be selected before the Flow can advance.

Constraint Properties

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

Status & Visual Properties

PropertyTypeDefaultDescription
statusFieldStringAPI name of a picklist or text field on the related object. Used to color-code dates on the calendar.
statusColorsStringComma-separated mapping of status values to colors, e.g. Approved:green,Pending:orange,Denied:red. Supports color names (green, blue, orange, red, gray) or hex codes.
statusColorDisplayStringcalendarWhere to show status colors: calendar (on date cells) or grid (on time slots). For the Date component, calendar is recommended.
hideBookingsWithStatusStringStatus value to hide entirely. Records with this status won't appear on the calendar. Common use: Cancelled.
statusFieldLabelStringCustom label for the status field displayed in edit mode. If blank, auto-generated from the field API name.
hoverFieldsStringComma-separated field API names shown in a tooltip when hovering over a date with existing records. E.g. Name,Status__c.

Edit Mode Properties

PropertyTypeDefaultDescription
enableEditModeBooleanfalseWhen ON, shows an Edit Mode toggle button on the calendar. Users can click dates to select existing records for editing.
editButtonLabelStringCustom label for the Edit Mode toggle button.
editRecordDisplayStringControls how selected records are displayed in edit mode.

Record Name Properties

PropertyTypeDefaultDescription
recordNameFieldStringAPI name of a text field on the related object to store a descriptive record name.
defaultRecordNameStringDefault value for the record name field, e.g. "Vacation Day" or "On-Call".
appendDateTimeToNameBooleanfalseWhen ON, appends the selected date to the record name. E.g. "Vacation Day — 2026-07-10".

Output Controls

PropertyTypeDefaultDescription
outputAsJsonBooleanfalseWhen ON, populates selectedDateRangesJson with consecutive dates grouped into ranges.

Output Properties (Read-Only)

PropertyTypeDescription
selectedDatesString[]Array of all selected dates in ISO format (YYYY-MM-DD).
selectedDateRangesJsonStringJSON string of consecutive dates grouped into ranges with fromDate and toDate. Only populated when outputAsJson is ON.

Record Page Click-to-Save Properties

PropertyTypeDefaultDescription
saveButtonLabelStringSaveText on the save button (Record Page and Flow).
relatedObjectApiNameStringAPI name of the object where each selected date is saved as a record.
dateFieldApiNameStringAPI name of the Date field on the related object.
endDateFieldStringAPI name of an End Date field. When set, adjacent dates are consolidated into single records with start/end dates.
relationshipFieldApiNameStringAPI name of the lookup field that links each record back to the parent record.
preloadExistingDatesBooleanfalseWhen ON, queries existing related date records and shows them on the calendar when it loads.
preloadModeStringeditableeditable (default) or readonly. Controls whether preloaded dates can be interacted with.
staticRecordIdStringHardcoded record ID for non-record-page surfaces (App Pages, Home Pages, Experience Sites). Replaces the auto-injected recordId.
parentRecordIdFieldStringOptional lookup field on the related object for alternative parent record linking.
blockedDatesSourceObjectStringAPI name of an object to query for dates that should be blocked (shown as unavailable).
blockedDatesDateFieldStringDate field on the blocked dates object.
blockedDatesFilterFieldStringOptional lookup field on the blocked object to filter by current record.