1. Go to this page and download the library: Download andreia/filament-recurrence library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
andreia / filament-recurrence example snippets
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('your_table', function (Blueprint $table) {
$table->json('recurrence')->nullable()->after('your_column');
});
}
public function down(): void
{
Schema::table('your_table', function (Blueprint $table) {
$table->dropColumn('recurrence');
});
}
};
use Andreia\FilamentRecurrence\Casts\RecurrenceCast;
class Event extends Model
{
protected $casts = [
'recurrence' => RecurrenceCast::class,
];
}
use Andreia\FilamentRecurrence\Concerns\HasRecurrence;
class Event extends Model
{
use HasRecurrence;
protected $casts = [
'recurrence' => RecurrenceCast::class,
];
}
// Now you can use:
$event->getRecurrenceData(); // Get RecurrenceData object
$event->getNextOccurrence(); // Get next occurrence as Carbon
$event->getUpcomingOccurrences(10); // Get next 10 occurrences
$event->occursOn(Carbon::parse('2024-12-25')); // Check if occurs on date
// Query scopes:
Event::occursOn(Carbon::today())->get();
Event::occursBetween(Carbon::now(), Carbon::now()->addMonth())->get();
use Andreia\FilamentRecurrence\Forms\Components\RecurrenceField;
public static function form(Form $form): Form
{
return $form
->schema([
TextInput::make('title')->stead of DatePicker
]);
}
use Andreia\FilamentRecurrence\Tables\Columns\RecurrenceColumn;
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('title'),
RecurrenceColumn::make('recurrence')
->showNextOccurrences(limit: 3)
->showRule(),
]);
}
use Andreia\FilamentRecurrence\Infolists\Components\RecurrenceEntry;
public static function infolist(Infolist $infolist): Infolist
{
return $infolist
->schema([
TextEntry::make('title'),
RecurrenceEntry::make('recurrence')
->showAllDetails()
->showNextOccurrences(limit: 10)
->showRule(),
]);
}
use Andreia\FilamentRecurrence\Data\RecurrenceData;
use Carbon\Carbon;
// Create from array
$data = RecurrenceData::fromArray([
'frequency' => 'WEEKLY',
'interval' => 2,
'start_date' => Carbon::now(),
'by_day' => ['MO', 'WE', 'FR'],
'count' => 10,
]);
// Create from RRULE string
$data = RecurrenceData::fromRule('FREQ=DAILY;INTERVAL=1;COUNT=5');
// Convert to RRULE string
$rule = $data->toRule();
// Get human-readable description
$description = $data->toHumanReadable(); // "Every 2 weeks on Monday, Wednesday, Friday, 10 times"
// Get occurrences
$occurrences = $data->getOccurrences(limit: 5);
// Convert to array
$array = $data->toArray();
RecurrenceField::make('recurrence')
->showStartDate(true) // Show/hide start date picker
->showEndOptions(true) // Show/hide end options (never, until, count)
->showPreview(true) // Show/hide the live preview (human-readable rule + next occurrences); default is true
->previewOccurrencesLimit(5) // How many “next occurrences” rows to show in the preview; default is 5
->useDateTime(true) // Use datetime picker instead of date picker
->showTimezone(true) // Show/hide the per-record timezone select (default true); when false, config timezone is always used
->showAdvancedOptions(true) // Show advanced recurrence options
// Hide the preview (full-width form only):
RecurrenceField::make('recurrence')->showPreview(false);
// Use only `config('filament-recurrence.timezone')` for every record (hide the timezone field):
RecurrenceField::make('recurrence')->showTimezone(false);
// Show 10 upcoming dates in the preview:
RecurrenceField::make('recurrence')->previewOccurrencesLimit(10);
RecurrenceColumn::make('recurrence')
->showRule(true) // Display the RRULE string
->showNextOccurrences(true, limit: 5) // Show next N occurrences
RecurrenceEntry::make('recurrence')
->showRule(true) // Display the RRULE string
->showAllDetails(true) // Show all recurrence details
->showNextOccurrences(true, limit: 20) // Show next N occurrences
// Every day
[
'frequency' => 'DAILY',
'interval' => 1,
'start_date' => Carbon::now(),
]
// Every 3 days, 10 times
[
'frequency' => 'DAILY',
'interval' => 3,
'count' => 10,
]
// Every week on Monday and Friday
[
'frequency' => 'WEEKLY',
'interval' => 1,
'by_day' => ['MO', 'FR'],
]
// Every 2 weeks on weekdays
[
'frequency' => 'WEEKLY',
'interval' => 2,
'by_day' => ['MO', 'TU', 'WE', 'TH', 'FR'],
]
// Every month on the 15th
[
'frequency' => 'MONTHLY',
'interval' => 1,
'by_month_day' => [15],
]
// Every month on the first Monday
[
'frequency' => 'MONTHLY',
'interval' => 1,
'by_day' => ['MO'],
'by_set_pos' => 1,
]
// Every month on the last Friday
[
'frequency' => 'MONTHLY',
'interval' => 1,
'by_day' => ['FR'],
'by_set_pos' => -1,
]
// Every year on January 1st
[
'frequency' => 'YEARLY',
'interval' => 1,
'by_month' => [1],
'by_month_day' => [1],
]
// Every year in June and December
[
'frequency' => 'YEARLY',
'interval' => 1,
'by_month' => [6, 12],
]