Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions docs/guides/recurring-events.md
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,48 @@ For example:
addEventListener(node, "click", function(){...})
~~~

## Custom confirmation modal {#customconfirmationmodal}

When a user edits or drags a recurring event, the scheduler displays a built-in modal that asks whether to modify just this occurrence, this and following events, or the entire series. You can replace it with your own UI by overriding `scheduler.ext.recurring.confirm`.

~~~js
scheduler.ext.recurring.confirm = function(context) {
// context contains:
// - origin: "lightbox" | "dnd"
// - occurrence: the occurrence event object
// - series: the parent series event object
// - labels: { title, ok, cancel, occurrence, following, series }
// - options: ["occurrence", "following", "series"]
//
// Return one of: "occurrence", "following", "series", or null to cancel.
// Can return a Promise for async UI.

return new Promise(function(resolve) {
myCustomDialog.show({
title: context.labels.title,
options: context.options,
onSelect: function(choice) { resolve(choice); },
onCancel: function() { resolve(null); }
});
});
};
~~~

The context object has the following properties:

| Property | Type | Description |
|---|---|---|
| `origin` | `"lightbox" \| "dnd"` | Whether the action was triggered from the lightbox or drag-and-drop |
| `occurrence` | `object` | The specific occurrence being edited |
| `series` | `object` | The parent recurring event |
| `labels` | `object` | Localized strings: `title`, `ok`, `cancel`, `occurrence`, `following`, `series` |
| `options` | `string[]` | Available choices, e.g. `["occurrence", "following", "series"]` |

The function must return `"occurrence"`, `"following"`, `"series"`, or `null` to cancel. It can return the value directly or as a Promise.

For a React implementation, see the [React Scheduler documentation](integrations/react/overview.md#customizing-the-recurrence-confirmation-modal).


## Legacy format of recurring events

Until v7.1 Scheduler used a custom format for recurring events, you can find the format details [here](guides/recurring-events-legacy.md).
54 changes: 54 additions & 0 deletions docs/integrations/react/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,60 @@ The delete confirmation dialog can be overridden via `modals`.
/>
```

### Customizing the Recurrence Confirmation Modal {#customizingtherecurrenceconfirmationmodal}

When a user edits or drags a recurring event, a confirmation modal asks whether to modify just this occurrence, this and following events, or the entire series. You can replace this built-in dialog with your own using `modals.onRecurrenceConfirm`.

The callback receives a context object and must return a decision (or a Promise that resolves to one):

| Field | Type | Description |
|---|---|---|
| `origin` | `"lightbox" \| "dnd"` | Whether the action was triggered from the lightbox or drag-and-drop |
| `occurrence` | `any` | The specific occurrence being edited |
| `series` | `any` | The parent recurring event |
| `labels` | `object` | Localized labels: `title`, `ok`, `cancel`, `occurrence`, `following`, `series` |
| `options` | `string[]` | Available choices, e.g. `["occurrence", "following", "series"]` |

Return value (`RecurrenceDecision`): `"occurrence"`, `"following"`, `"series"`, or `null` to cancel.

Example:

```tsx
import { useState, useCallback } from "react";

function App() {
const [recurrencePrompt, setRecurrencePrompt] = useState(null);

const onRecurrenceConfirm = useCallback((context) => {
return new Promise((resolve) => {
setRecurrencePrompt({ context, resolve });
});
}, []);

return (
<>
<ReactScheduler
modals={{ onRecurrenceConfirm }}
/>
{recurrencePrompt && (
<MyRecurrenceDialog
options={recurrencePrompt.context.options}
labels={recurrencePrompt.context.labels}
onSelect={(choice) => {
recurrencePrompt.resolve(choice);
setRecurrencePrompt(null);
}}
onCancel={() => {
recurrencePrompt.resolve(null);
setRecurrencePrompt(null);
}}
/>
)}
</>
);
}
```

## Filtering

Use the `filter` prop to control which events are displayed:
Expand Down
19 changes: 19 additions & 0 deletions docs/whats-new.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,25 @@ sidebar_label: "What's New"

If you are updating Scheduler from an older version, check [Migration From Older Versions](migration.md) for details.

7.2.12
-------------
<span class='release_date'>March 23, 2026. Bugfix release</span>

### Fixes

- Fix the crash on page reload in [React Scheduler](integrations/react/overview.md) when using non-default themes with the [cookie](guides/extensions-list.md#cookie) plugin enabled
- Fix the regression where the `save` URL in the `data` prop was not applied correctly in [React Scheduler](integrations/react/overview.md)
- Fix the issue where editing a non-first occurrence of a [recurring event](guides/recurring-events.md) in "This and following events" mode did not apply all [lightbox](guides/configuring-the-lightbox.md) field changes
- Fix the issue where dynamically changing [Quick Info](guides/quick-info.md) buttons based on event conditions did not update the popup correctly
- Fix the issue where modifying the text of a single [recurring event](guides/recurring-events.md) occurrence was overwritten after editing a subsequent occurrence in "This and following events" mode
- Fix the overflow styles of the [Quick Info](guides/quick-info.md) popup to properly handle long event descriptions
- Fix the script error in [React Scheduler](integrations/react/overview.md) that occurred when adding events to an existing dataset via the `useState` function

### Updates

- Add the ability to replace the [recurring event confirmation modal](guides/recurring-events.md#customconfirmationmodal) with a custom dialog.
- Add the ability to replace the [recurring event confirmation modal](integrations/react/overview.md#customizingtherecurrenceconfirmationmodal) in [React Scheduler](integrations/react/overview.md) via the modals.onRecurrenceConfirm prop

7.2.11
-------------
<span class='release_date'>January 12, 2026. Bugfix release</span>
Expand Down
Loading