Feb 5, 2025
0
Level 6
How to customize the tooltip?
I want to customize the tooltip since the duration is total seconds I want to show like 3h 45m 5s
whole code
<?php
namespace App\Filament\Widgets;
use Carbon\Carbon;
use Filament\Widgets\ChartWidget;
use App\Services\Dashboard\DashboardData;
class DailyViewDuration extends ChartWidget
{
protected static ?string $heading = 'Daily View Duration';
protected static ?int $sort = 6;
protected int | string | array $columnSpan = 'full';
protected function getData(): array
{
$dashboardData = new DashboardData();
$data = $dashboardData->retrieve();
$duration = collect($data->get('daily_transactions') ?? [])
->mapWithKeys(fn ($item) => [
Carbon::parse($item['date'])->format('Y-m-d') => [
'total_watched_duration' => $item['total_watched_duration'],
]
]);
\Log::info("Duration Datta", ['duration' => $duration]);
$endDate = Carbon::parse('2024-11-25')->endOfDay();
// $endDate = now()->subDay();
$startDate = $endDate->copy()->subDays(13);
$dateRange = collect(range(0, 13))->map(fn ($i) => $startDate->copy()->addDays($i)->format('Y-m-d'));
$chartData = $dateRange->map(fn ($date) => [
'date' => $date,
'total_watched_duration' => (int) ($duration[$date]['total_watched_duration'] ?? '0.00'),
]);
return [
'datasets' => [
[
'label' => 'Minutes',
'data' => $chartData->pluck('total_watched_duration'),
'backgroundColor' => 'rgba(18, 149, 246, 0.8)',
'borderColor' => 'rgba(0, 130, 228, 0.8)',
],
],
'labels' => $chartData->pluck('date')->map(fn ($date) => Carbon::parse($date)->format('m-d-y')),
];
}
protected function getOptions(): array
{
return [
'plugins' => [
'tooltip' => [
'callbacks' => [
'label' => 'function(context) {
var value = context.raw;
var hours = Math.floor(value / 3600);
var minutes = Math.floor((value % 3600) / 60);
var seconds = value % 60;
return hours.toString().padStart(2, "0") + "h " +
minutes.toString().padStart(2, "0") + "m " +
seconds.toString().padStart(2, "0") + "s";
}',
],
],
],
];
}
protected function getType(): string
{
return 'bar';
}
I followed the docs and not working
Please or to participate in this conversation.