spatie/laravel-dashboard-calendar-tile
Display upcoming Google Calendar events on a tile for Spatie’s Laravel Dashboard. Fetch and show your calendar schedule at a glance, ideal for wall displays and team dashboards, with simple setup and integration into the dashboard layout.
Installation:
composer require spatie/laravel-dashboard-calendar-tile
Ensure laravel-dashboard is installed as a dependency.
Publish Config:
php artisan vendor:publish --provider="Spatie\Dashboard\DashboardServiceProvider" --tag="dashboard-config"
Locate the config/dashboard.php file and add the calendar tile to your dashboard configuration under tiles.
First Use Case:
use Spatie\Dashboard\Tiles\CalendarTile;
return [
'tiles' => [
CalendarTile::class,
],
];
.env:
GOOGLE_CALENDAR_CLIENT_ID=your_client_id
GOOGLE_CALENDAR_CLIENT_SECRET=your_client_secret
GOOGLE_CALENDAR_REDIRECT_URI=your_redirect_uri
GOOGLE_CALENDAR_CALENDAR_ID=your_calendar_id
Authentication:
use Spatie\Dashboard\Tiles\CalendarTile;
route('dashboard.calendar.auth', CalendarTile::class . '@authenticate');
route('dashboard.calendar.callback', CalendarTile::class . '@handleCallback');
Displaying Events:
@extends('dashboard::tiles.calendar-tile')
@section('custom-script')
// Add custom JS logic here
@endsection
Integration with Dashboard:
return [
'tiles' => [
CalendarTile::class,
AnalyticsTile::class,
StatsTile::class,
],
];
Dynamic Calendar Selection:
public function getCalendarId()
{
return session('selected_calendar_id') ?? config('dashboard.calendar_id');
}
Event Filtering:
getEvents method in a custom tile class:
use Spatie\Dashboard\Tiles\CalendarTile;
class CustomCalendarTile extends CalendarTile
{
public function getEvents()
{
return parent::getEvents()->where('status', 'confirmed');
}
}
Multi-Calendar Support:
public function getCalendars()
{
return [
['id' => 'primary', 'name' => 'Work Calendar'],
['id' => 'personal', 'name' => 'Personal Calendar'],
];
}
Google API Credentials:
GOOGLE_CALENDAR_REDIRECT_URI matches the URI in your Google Cloud Console. Mismatches cause OAuth failures.Caching Events:
php artisan cache:clear
'cache_events' => false,
Timezone Issues:
.env:
APP_TIMEZONE=America/New_York
Rate Limits:
OAuth Errors:
storage/logs/laravel.log for OAuth-related errors. Common issues include:
https://www.googleapis.com/auth/calendar.readonly).client_id or client_secret.Event Fetching:
GOOGLE_CALENDAR_CALENDAR_ID is correct. Use the Google Calendar API Explorer to test manually.Blade Template Overrides:
php artisan vendor:publish --tag=dashboard-views
Custom Event Styling:
getEventStyle method to customize event colors or labels:
public function getEventStyle($event)
{
return ['background-color' => $event->status === 'confirmed' ? '#4CAF50' : '#FFEB3B'];
}
Event Actions:
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.fc-event').forEach(event => {
event.addEventListener('click', function() {
alert('Event clicked: ' + this.title);
});
});
});
Localization:
php artisan vendor:publish --tag=laravel-dashboard-lang
resources/lang/en/dashboard.php:
'calendar' => [
'title' => 'My Custom Calendar',
],
Testing:
$mockClient = Mockery::mock(\Google_Client::class);
$mockClient->shouldReceive('getAccessToken')->andReturn(['access_token' => 'mock_token']);
$this->app->instance(\Google_Client::class, $mockClient);
How can I help you explore Laravel packages today?